Merge remote-tracking branch 'origin/main' into editor2-paint

Antonio Scandurra created

Change summary

Cargo.lock                                                      |   56 
Cargo.toml                                                      |    4 
assets/icons/dash.svg                                           |    1 
assets/themes/src/vscode/andromeda/LICENSE                      |    7 
assets/themes/src/vscode/andromeda/andromeda-bordered.json      |  369 
assets/themes/src/vscode/andromeda/andromeda.json               |  367 
assets/themes/src/vscode/andromeda/family.json                  |   16 
assets/themes/src/vscode/ayu/LICENSE                            |   21 
assets/themes/src/vscode/ayu/ayu-dark.json                      |  847 +
assets/themes/src/vscode/ayu/ayu-light.json                     |  847 +
assets/themes/src/vscode/ayu/ayu-mirage.json                    |  847 +
assets/themes/src/vscode/ayu/family.json                        |   21 
assets/themes/src/vscode/dracula/LICENSE                        |   21 
assets/themes/src/vscode/dracula/dracula.json                   | 1067 +
assets/themes/src/vscode/dracula/family.json                    |   11 
assets/themes/src/vscode/gruvbox/LICENSE                        |    1 
assets/themes/src/vscode/gruvbox/family.json                    |   36 
assets/themes/src/vscode/gruvbox/gruvbox-dark-hard.json         | 1074 +
assets/themes/src/vscode/gruvbox/gruvbox-dark-medium.json       | 1074 +
assets/themes/src/vscode/gruvbox/gruvbox-dark-soft.json         | 1074 +
assets/themes/src/vscode/gruvbox/gruvbox-light-hard.json        | 1073 +
assets/themes/src/vscode/gruvbox/gruvbox-light-medium.json      | 1073 +
assets/themes/src/vscode/gruvbox/gruvbox-light-soft.json        | 1073 +
assets/themes/src/vscode/night-owl/LICENSE                      |   21 
assets/themes/src/vscode/night-owl/family.json                  |   16 
assets/themes/src/vscode/night-owl/night-owl-light.json         | 1723 ++
assets/themes/src/vscode/night-owl/night-owl.json               | 1832 +++
assets/themes/src/vscode/noctis/LICENSE                         |    9 
assets/themes/src/vscode/noctis/azureus.json                    | 1113 +
assets/themes/src/vscode/noctis/bordo.json                      | 1112 +
assets/themes/src/vscode/noctis/family.json                     |   61 
assets/themes/src/vscode/noctis/hibernus.json                   | 1108 +
assets/themes/src/vscode/noctis/lilac.json                      | 1113 +
assets/themes/src/vscode/noctis/lux.json                        | 1108 +
assets/themes/src/vscode/noctis/minimus.json                    | 1113 +
assets/themes/src/vscode/noctis/noctis.json                     | 1108 +
assets/themes/src/vscode/noctis/obscuro.json                    | 1108 +
assets/themes/src/vscode/noctis/sereno.json                     | 1108 +
assets/themes/src/vscode/noctis/uva.json                        | 1112 +
assets/themes/src/vscode/noctis/viola.json                      | 1112 +
assets/themes/src/vscode/nord/LICENSE                           |   21 
assets/themes/src/vscode/nord/family.json                       |   11 
assets/themes/src/vscode/nord/nord.json                         | 1368 ++
assets/themes/src/vscode/palenight/LICENSE                      |    7 
assets/themes/src/vscode/palenight/family.json                  |   21 
assets/themes/src/vscode/palenight/palenight-mild-contrast.json | 1569 ++
assets/themes/src/vscode/palenight/palenight-operator.json      | 1640 ++
assets/themes/src/vscode/palenight/palenight.json               | 1569 ++
assets/themes/src/vscode/rose-pine/LICENSE                      |   21 
assets/themes/src/vscode/rose-pine/family.json                  |   21 
assets/themes/src/vscode/rose-pine/rose-pine-dawn.json          |  680 +
assets/themes/src/vscode/rose-pine/rose-pine-moon.json          |  680 +
assets/themes/src/vscode/rose-pine/rose-pine.json               |  680 +
assets/themes/src/vscode/solarized/LICENSE                      |   19 
assets/themes/src/vscode/solarized/dark.json                    |  558 
assets/themes/src/vscode/solarized/family.json                  |   16 
assets/themes/src/vscode/solarized/light.json                   |  591 
assets/themes/src/vscode/synthwave-84/LICENSE                   |   21 
assets/themes/src/vscode/synthwave-84/family.json               |   11 
assets/themes/src/vscode/synthwave-84/synthwave.json            |  822 +
crates/channel2/Cargo.toml                                      |   54 
crates/channel2/src/channel2.rs                                 |   23 
crates/channel2/src/channel_buffer.rs                           |  259 
crates/channel2/src/channel_chat.rs                             |  647 +
crates/channel2/src/channel_store.rs                            | 1021 +
crates/channel2/src/channel_store/channel_index.rs              |  184 
crates/channel2/src/channel_store_tests.rs                      |  380 
crates/client2/src/user.rs                                      |   33 
crates/collab_ui/src/channel_view.rs                            |   20 
crates/diagnostics/Cargo.toml                                   |    2 
crates/diagnostics/src/diagnostics.rs                           |  224 
crates/editor/src/items.rs                                      |    4 
crates/editor2/src/display_map.rs                               |    4 
crates/editor2/src/editor.rs                                    |    2 
crates/editor2/src/element.rs                                   |    6 
crates/gpui2/build.rs                                           |    1 
crates/gpui2/src/app.rs                                         |   16 
crates/gpui2/src/app/test_context.rs                            |   19 
crates/gpui2/src/element.rs                                     |   13 
crates/gpui2/src/elements/div.rs                                |   15 
crates/gpui2/src/geometry.rs                                    |    2 
crates/gpui2/src/interactive.rs                                 |  131 
crates/gpui2/src/platform/mac/dispatcher.rs                     |   14 
crates/gpui2/src/style.rs                                       |   21 
crates/gpui2/src/styled.rs                                      |   54 
crates/gpui2/src/subscription.rs                                |    2 
crates/gpui2/src/window.rs                                      |   39 
crates/gpui2_macros/src/derive_component.rs                     |    6 
crates/gpui2_macros/src/style_helpers.rs                        |    4 
crates/gpui2_macros/src/test.rs                                 |    1 
crates/gpui_macros/src/gpui_macros.rs                           |    4 
crates/live_kit_client2/Cargo.toml                              |    6 
crates/live_kit_client2/examples/test_app.rs                    |    6 
crates/live_kit_client2/src/test.rs                             |    2 
crates/refineable/derive_refineable/src/derive_refineable.rs    |   44 
crates/rpc2/proto/zed.proto                                     |  275 
crates/rpc2/src/proto.rs                                        |  186 
crates/storybook2/Cargo.toml                                    |    4 
crates/storybook2/src/assets.rs                                 |    2 
crates/storybook2/src/components.rs                             |   97 
crates/storybook2/src/stories/colors.rs                         |    4 
crates/storybook2/src/stories/focus.rs                          |    4 
crates/storybook2/src/stories/kitchen_sink.rs                   |   12 
crates/storybook2/src/stories/scroll.rs                         |    4 
crates/storybook2/src/stories/text.rs                           |    4 
crates/storybook2/src/stories/z_index.rs                        |    2 
crates/storybook2/src/story_selector.rs                         |   85 
crates/storybook2/src/storybook2.rs                             |    8 
crates/terminal2/src/mappings/colors.rs                         |    2 
crates/theme2/src/colors.rs                                     |   73 
crates/theme2/src/default_colors.rs                             |   98 
crates/theme2/src/default_theme.rs                              |    4 
crates/theme2/src/registry.rs                                   |    7 
crates/theme2/src/theme2.rs                                     |   10 
crates/theme2/src/themes/andromeda.rs                           |  333 
crates/theme2/src/themes/ayu.rs                                 |  491 
crates/theme2/src/themes/dracula.rs                             |  173 
crates/theme2/src/themes/gruvbox.rs                             |  965 +
crates/theme2/src/themes/mod.rs                                 |   41 
crates/theme2/src/themes/night_owl.rs                           |  333 
crates/theme2/src/themes/nord.rs                                |  173 
crates/theme2/src/themes/notctis.rs                             | 1755 ++
crates/theme2/src/themes/palenight.rs                           |  491 
crates/theme2/src/themes/rose_pine.rs                           |  491 
crates/theme2/src/themes/solarized.rs                           |  333 
crates/theme2/src/themes/synthwave_84.rs                        |  173 
crates/theme_importer/Cargo.toml                                |   18 
crates/theme_importer/README.md                                 |  124 
crates/theme_importer/src/main.rs                               |  215 
crates/theme_importer/src/theme_printer.rs                      |  384 
crates/theme_importer/src/util.rs                               |   11 
crates/theme_importer/src/vscode.rs                             |  606 
crates/ui2/Cargo.toml                                           |    2 
crates/ui2/docs/building-ui.md                                  |   49 
crates/ui2/docs/elevation.md                                    |   57 
crates/ui2/docs/hello-world.md                                  |  160 
crates/ui2/docs/todo.md                                         |   25 
crates/ui2/src/components.rs                                    |   74 
crates/ui2/src/components/avatar.rs                             |    6 
crates/ui2/src/components/button.rs                             |   31 
crates/ui2/src/components/checkbox.rs                           |  229 
crates/ui2/src/components/context_menu.rs                       |   21 
crates/ui2/src/components/details.rs                            |    2 
crates/ui2/src/components/facepile.rs                           |    2 
crates/ui2/src/components/icon.rs                               |   11 
crates/ui2/src/components/icon_button.rs                        |    6 
crates/ui2/src/components/indicator.rs                          |    4 
crates/ui2/src/components/input.rs                              |    6 
crates/ui2/src/components/keybinding.rs                         |    4 
crates/ui2/src/components/label.rs                              |    4 
crates/ui2/src/components/list.rs                               |  332 
crates/ui2/src/components/modal.rs                              |    2 
crates/ui2/src/components/notification_toast.rs                 |    4 
crates/ui2/src/components/palette.rs                            |   13 
crates/ui2/src/components/panel.rs                              |    6 
crates/ui2/src/components/player.rs                             |   20 
crates/ui2/src/components/slot.rs                               |   14 
crates/ui2/src/components/stack.rs                              |    2 
crates/ui2/src/components/tab.rs                                |    6 
crates/ui2/src/components/toast.rs                              |    6 
crates/ui2/src/components/toggle.rs                             |   61 
crates/ui2/src/components/tool_divider.rs                       |    0 
crates/ui2/src/components/tooltip.rs                            |   31 
crates/ui2/src/elements.rs                                      |   21 
crates/ui2/src/lib.rs                                           |   13 
crates/ui2/src/prelude.rs                                       |   85 
crates/ui2/src/settings.rs                                      |    2 
crates/ui2/src/static_data.rs                                   |  127 
crates/ui2/src/story.rs                                         |    2 
crates/ui2/src/to_extract.rs                                    |   47 
crates/ui2/src/to_extract/assistant_panel.rs                    |    4 
crates/ui2/src/to_extract/breadcrumb.rs                         |    4 
crates/ui2/src/to_extract/buffer.rs                             |    8 
crates/ui2/src/to_extract/buffer_search.rs                      |   23 
crates/ui2/src/to_extract/chat_panel.rs                         |    2 
crates/ui2/src/to_extract/collab_panel.rs                       |   25 
crates/ui2/src/to_extract/command_palette.rs                    |    2 
crates/ui2/src/to_extract/copilot.rs                            |    2 
crates/ui2/src/to_extract/editor_pane.rs                        |    2 
crates/ui2/src/to_extract/language_selector.rs                  |    2 
crates/ui2/src/to_extract/multi_buffer.rs                       |    4 
crates/ui2/src/to_extract/notifications_panel.rs                |   37 
crates/ui2/src/to_extract/panes.rs                              |    4 
crates/ui2/src/to_extract/project_panel.rs                      |   19 
crates/ui2/src/to_extract/recent_projects.rs                    |    2 
crates/ui2/src/to_extract/status_bar.rs                         |    2 
crates/ui2/src/to_extract/tab_bar.rs                            |    6 
crates/ui2/src/to_extract/terminal.rs                           |    6 
crates/ui2/src/to_extract/theme_selector.rs                     |    2 
crates/ui2/src/to_extract/title_bar.rs                          |    2 
crates/ui2/src/to_extract/toolbar.rs                            |    6 
crates/ui2/src/to_extract/traffic_lights.rs                     |    4 
crates/ui2/src/to_extract/workspace.rs                          |   27 
crates/workspace2/src/pane.rs                                   |   27 
crates/workspace2/src/status_bar.rs                             |    2 
crates/workspace2/src/workspace2.rs                             |    8 
crates/zed/src/languages/elixir.rs                              |   32 
crates/zed2/src/assets.rs                                       |    1 
crates/zed2/src/languages/elixir.rs                             |   32 
crates/zed2/src/languages/language_plugin.rs                    |    2 
crates/zed2/src/main.rs                                         |    1 
script/bundle                                                   |    6 
test.rs                                                         |    6 
theme.txt                                                       |  254 
204 files changed, 48,835 insertions(+), 1,655 deletions(-)

Detailed changes

Cargo.lock 🔗

@@ -1347,6 +1347,43 @@ dependencies = [
  "uuid 1.4.1",
 ]
 
+[[package]]
+name = "channel2"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "client2",
+ "clock",
+ "collections",
+ "db2",
+ "feature_flags2",
+ "futures 0.3.28",
+ "gpui2",
+ "image",
+ "language2",
+ "lazy_static",
+ "log",
+ "parking_lot 0.11.2",
+ "postage",
+ "rand 0.8.5",
+ "rpc2",
+ "schemars",
+ "serde",
+ "serde_derive",
+ "settings2",
+ "smallvec",
+ "smol",
+ "sum_tree",
+ "tempfile",
+ "text",
+ "thiserror",
+ "time",
+ "tiny_http",
+ "url",
+ "util",
+ "uuid 1.4.1",
+]
+
 [[package]]
 name = "chrono"
 version = "0.4.31"
@@ -2422,8 +2459,10 @@ dependencies = [
  "client",
  "collections",
  "editor",
+ "futures 0.3.28",
  "gpui",
  "language",
+ "log",
  "lsp",
  "postage",
  "project",
@@ -8960,6 +8999,21 @@ dependencies = [
  "util",
 ]
 
+[[package]]
+name = "theme_importer"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "convert_case 0.6.0",
+ "gpui2",
+ "log",
+ "rust-embed",
+ "serde",
+ "simplelog",
+ "theme2",
+ "uuid 1.4.1",
+]
+
 [[package]]
 name = "theme_selector"
 version = "0.1.0"
@@ -9690,7 +9744,7 @@ dependencies = [
 [[package]]
 name = "tree-sitter-vue"
 version = "0.0.1"
-source = "git+https://github.com/zed-industries/tree-sitter-vue?rev=95b2890#95b28908d90e928c308866f7631e73ef6e1d4b5f"
+source = "git+https://github.com/zed-industries/tree-sitter-vue?rev=9b6cb221ccb8d0b956fcb17e9a1efac2feefeb58#9b6cb221ccb8d0b956fcb17e9a1efac2feefeb58"
 dependencies = [
  "cc",
  "tree-sitter",

Cargo.toml 🔗

@@ -10,6 +10,7 @@ members = [
     "crates/call",
     "crates/call2",
     "crates/channel",
+    "crates/channel2",
     "crates/cli",
     "crates/client",
     "crates/client2",
@@ -93,6 +94,7 @@ members = [
     "crates/text",
     "crates/theme",
     "crates/theme2",
+    "crates/theme_importer",
     "crates/theme_selector",
     "crates/ui2",
     "crates/util",
@@ -175,7 +177,7 @@ tree-sitter-yaml = { git = "https://github.com/zed-industries/tree-sitter-yaml",
 tree-sitter-lua = "0.0.14"
 tree-sitter-nix = { git = "https://github.com/nix-community/tree-sitter-nix", rev = "66e3e9ce9180ae08fc57372061006ef83f0abde7" }
 tree-sitter-nu = { git = "https://github.com/nushell/tree-sitter-nu", rev = "786689b0562b9799ce53e824cb45a1a2a04dc673"}
-tree-sitter-vue = {git = "https://github.com/zed-industries/tree-sitter-vue", rev = "95b2890"}
+tree-sitter-vue = {git = "https://github.com/zed-industries/tree-sitter-vue", rev = "9b6cb221ccb8d0b956fcb17e9a1efac2feefeb58"}
 [patch.crates-io]
 tree-sitter = { git = "https://github.com/tree-sitter/tree-sitter", rev = "35a6052fbcafc5e5fc0f9415b8652be7dcaf7222" }
 async-task = { git = "https://github.com/zed-industries/async-task", rev = "341b57d6de98cdfd7b418567b8de2022ca993a6e" }

assets/icons/dash.svg 🔗

@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-minus"><path d="M5 12h14"/></svg>

assets/themes/src/vscode/andromeda/LICENSE 🔗

@@ -0,0 +1,7 @@
+Copyright (c) 2017 eliverlara@gmail.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

assets/themes/src/vscode/andromeda/andromeda-bordered.json 🔗

@@ -0,0 +1,369 @@
+{
+    "name": "Andromeda Bordered",
+    "type": "dark",
+    "colors": {
+        "focusBorder": "#746f77",
+        "foreground": "#D5CED9",
+        "widget.shadow": "#14151A",
+        "selection.background": "#746f77",
+        "errorForeground": "#FC644D",
+
+        "button.background": "#00e8c5cc",
+        "button.hoverBackground": "#07d4b6cc",
+
+        "dropdown.background": "#2b303b",
+        "dropdown.border": "#363c49",
+
+        "input.background": "#2b303b",
+        "input.placeholderForeground": "#746f77",
+        "inputOption.activeBorder": "#C668BA",
+        "inputValidation.errorBackground": "#D65343",
+        "inputValidation.errorBorder": "#D65343",
+        "inputValidation.infoBackground": "#3A6395",
+        "inputValidation.infoBorder": "#3A6395",
+        "inputValidation.warningBackground": "#DE9237",
+        "inputValidation.warningBorder": "#DE9237",
+
+        "scrollbar.shadow": "#23262E",
+        "scrollbarSlider.activeBackground": "#3A3F4CCC",
+        "scrollbarSlider.background": "#3A3F4C77",
+        "scrollbarSlider.hoverBackground": "#3A3F4CAA",
+
+        "badge.background": "#00b0ff",
+        "badge.foreground": "#20232B",
+
+        "progressBar.background": "#C668BA",
+
+        "list.activeSelectionBackground": "#23262E",
+        "list.activeSelectionForeground": "#00e8c6",
+        "list.dropBackground": "#3a404e",
+        "list.focusBackground": "#282b35",
+        "list.focusForeground": "#eee",
+        "list.hoverBackground": "#23262E",
+        "list.hoverForeground": "#eee",
+        "list.inactiveSelectionBackground": "#23262E",
+        "list.inactiveSelectionForeground": "#00e8c6",
+
+        "activityBar.background": "#20232B",
+        "activityBar.dropBackground": "#3a404e",
+        "activityBar.foreground": "#BAAFC0",
+        "activityBarBadge.background": "#00b0ff",
+        "activityBarBadge.foreground": "#20232B",
+        "activityBar.border": "#1B1D23",
+
+        "sideBar.background": "#23262E",
+        "sideBarSectionHeader.background": "#23262E",
+        "sideBarTitle.foreground": "#00e8c6",
+        "sideBar.foreground": "#999999",
+        "sideBar.border": "#1B1D23",
+        
+        "editorGroup.background": "#23262E",
+        "editorGroup.dropBackground": "#495061d7",
+        "editorGroupHeader.tabsBackground": "#23262E",
+        "tab.activeBackground": "#262A33",
+        "tab.inactiveBackground": "#23262E",
+        "tab.activeForeground": "#00e8c6",
+        "tab.inactiveForeground": "#746f77",
+    
+        "editor.background": "#262A33",
+        "editor.foreground": "#D5CED9",
+        "editorLineNumber.foreground": "#746f77",
+        "editorCursor.foreground": "#FFF",
+        "editor.selectionBackground": "#3D4352",
+        "editor.selectionHighlightBackground": "#4F435580",
+        "editor.wordHighlightBackground": "#4F4355",
+        "editor.wordHighlightStrongBackground": "#db45a280",
+        "editor.findMatchBackground": "#f39d1256",
+        "editor.findMatchHighlightBackground": "#59b8b377",
+        "editor.findMatchBorder": "#f39d12b6",
+        "editor.hoverHighlightBackground": "#373941",
+        "editor.lineHighlightBackground": "#2e323d",
+        "editor.lineHighlightBorder": "#2e323d",
+        "editorLink.activeForeground": "#3B79C7",
+        "editor.rangeHighlightBackground": "#372F3C",
+        "editorWhitespace.foreground": "#333844",
+        "editorIndentGuide.background": "#333844",
+        "editorIndentGuide.activeBackground": "#585C66",
+        "editorRuler.foreground": "#4F4355",
+        "editorCodeLens.foreground": "#746f77",
+        "editorBracketMatch.background": "#746f77",
+        "editorBracketMatch.border": "#746f77",
+        "editorOverviewRuler.border": "#1B1D23",
+        "editorError.foreground": "#FC644D",
+        "editorWarning.foreground": "#FF9F2E",
+        "editorGutter.modifiedBackground": "#5BC0EBBB",
+        "editorGutter.addedBackground": "#9BC53DBB",
+        "editorGutter.deletedBackground": "#FC644DBB",
+
+        "diffEditor.insertedTextBackground": "#29BF1220",
+        "diffEditor.removedTextBackground": "#F21B3F20",
+
+        "editorWidget.background": "#20232A",
+        "editorSuggestWidget.background": "#20232A",
+        "editorSuggestWidget.border": "#372F3C",
+        "editorSuggestWidget.selectedBackground": "#373941",
+        "editorHoverWidget.background": "#373941",
+        "editorHoverWidget.border": "#00e8c5cc",
+        "debugExceptionWidget.background": "#FF9F2E60",
+        "debugExceptionWidget.border": "#FF9F2E60",
+
+        "minimapSlider.background": "#58607460",
+        "minimapSlider.hoverBackground": "#60698060",
+        "minimapSlider.activeBackground": "#60698060",
+
+        "peekView.border": "#23262E",
+        "peekViewEditor.background": "#1A1C22",
+        "peekViewEditor.matchHighlightBackground": "#FF9F2E60",
+        "peekViewResult.background": "#1A1C22",
+        "peekViewResult.matchHighlightBackground": "#FF9F2E60",
+        "peekViewResult.selectionBackground": "#23262E",
+        "peekViewTitle.background": "#1A1C22",
+        "peekViewTitleDescription.foreground": "#746f77",
+
+        "merge.currentHeaderBackground": "#F92672",
+        "merge.currentContentBackground": "#F9267240",
+        "merge.incomingHeaderBackground": "#3B79C7BB",
+        "merge.incomingContentBackground": "#3B79C740",
+
+        "panel.background": "#23262E",
+        "panel.border": "#1B1D23",
+        "panelTitle.activeBorder": "#23262E",
+        "panelTitle.inactiveForeground": "#746f77",
+
+        "statusBar.background": "#23262E",
+        "statusBar.debuggingBackground": "#FC644D",
+        "statusBar.noFolderBackground": "#23262E",
+        "statusBarItem.activeBackground": "#00e8c5cc",
+        "statusBarItem.hoverBackground": "#07d4b5b0",
+        "statusBarItem.prominentBackground": "#07d4b5b0",
+        "statusBarItem.prominentHoverBackground": "#00e8c5cc",
+
+        "terminal.ansiRed":"#ee5d43",
+        "terminal.ansiGreen":"#96E072",
+        "terminal.ansiYellow":"#FFE66D",
+        "terminal.ansiBlue":"#7cb7ff",
+        "terminal.ansiMagenta":"#ff00aa",
+        "terminal.ansiCyan":"#00e8c6",
+        "terminal.ansiBrightRed":"#ee5d43",
+        "terminal.ansiBrightGreen":"#96E072",
+        "terminal.ansiBrightYellow":"#FFE66D",
+        "terminal.ansiBrightBlue":"#7cb7ff",
+        "terminal.ansiBrightMagenta":"#ff00aa",
+        "terminal.ansiBrightCyan":"#00e8c6",
+        "terminalCursor.background": "#23262E",
+        "terminalCursor.foreground": "#FFE66D",
+
+        "titleBar.activeBackground": "#23262E",
+
+        "notification.background": "#2d313b",
+        "notification.buttonBackground": "#00e8c5cc",
+        "notification.buttonHoverBackground": "#07d4b5b0",
+        "notification.infoBackground": "#00b0ff",
+        "notification.warningBackground": "#FF9F2E",
+        "notification.errorBackground": "#FC644D",
+
+        "extensionButton.prominentBackground": "#07d4b6cc",
+        "extensionButton.prominentHoverBackground": "#07d4b5b0",
+
+        "pickerGroup.border": "#4F4355",
+        "pickerGroup.foreground": "#746f77",
+
+        "debugToolBar.background": "#20232A",
+
+        "walkThrough.embeddedEditorBackground": "#23262E",
+
+        "gitDecoration.ignoredResourceForeground": "#555555"
+
+    },
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#D5CED9",
+                "background": "#23262E"
+            }
+        },
+        {
+            "name": "Comment color",
+            "scope": [
+                "comment",
+                "markup.quote.markdown",
+                "meta.diff",
+                "meta.diff.header"
+            ],
+            "settings": {
+                "foreground": "#A0A1A7cc"
+            }
+        },
+        {
+            "name": "Text Color",
+            "scope": [
+                "meta.template.expression.js",
+                "constant.name.attribute.tag.jade",
+                "punctuation.definition.metadata.markdown",
+                "punctuation.definition.string.end.markdown",
+                "punctuation.definition.string.begin.markdown"
+            ],
+            "settings": {
+                "foreground": "#D5CED9"
+            }
+        },
+        {
+            "name": "Cyan",
+            "scope": [
+                "variable",
+                "support.variable",
+                "entity.name.tag.yaml",
+                "constant.character.entity.html",
+                "source.css entity.name.tag.reference",
+                "beginning.punctuation.definition.list.markdown",
+                "source.css entity.other.attribute-name.parent-selector",
+                "meta.structure.dictionary.json support.type.property-name"
+            ],
+            "settings": {
+                "foreground": "#00e8c6"        
+            }
+        },
+        {
+            "name": "Orange",
+            "scope": [
+                "markup.bold",
+                "constant.numeric",
+                "meta.group.regexp",
+                "constant.other.php",
+                "support.constant.ext.php",
+                "constant.other.class.php",
+                "support.constant.core.php",
+                "fenced_code.block.language",
+                "constant.other.caps.python",
+                "entity.other.attribute-name",
+                "support.type.exception.python",
+                "source.css keyword.other.unit",
+                "variable.other.object.property.js.jsx", "variable.other.object.js"
+            ],
+            "settings": {
+                "foreground": "#f39c12"
+            }
+        },
+        {
+            "name": "Yellow",
+            "scope": [
+                "markup.list",
+                "text.xml string",
+                "entity.name.type",
+                "support.function",
+                "entity.other.attribute-name",
+                "meta.at-rule.extend",
+                "entity.name.function",
+                "entity.other.inherited-class",
+                "entity.other.keyframe-offset.css",
+                "text.html.markdown string.quoted",
+                "meta.function-call.generic.python",
+                "meta.at-rule.extend support.constant",
+                "entity.other.attribute-name.class.jade",
+                "source.css entity.other.attribute-name",
+                "text.xml punctuation.definition.string"
+               
+            ],
+            "settings": {
+                "foreground": "#FFE66D"
+            }
+        },
+        {
+            "name": "Pink",
+            "scope": [
+                "markup.heading",
+                "variable.language.this.js",
+                "variable.language.special.self.python"
+            ],
+            "settings": {
+                "foreground": "#ff00aa"
+            }
+        },
+        {
+            "name": "Hot Pink",
+            "scope": [
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.end.php",
+                "punctuation.section.embedded.end.ruby",
+                "punctuation.section.embedded.begin.php",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.definition.template-expression",
+                "entity.name.tag"
+            ],
+            "settings": {
+                "foreground": "#f92672"
+            }
+        },
+        {
+            "name": "Purple",
+            "scope": [
+                "storage",
+                "keyword",
+                "meta.link",
+                "meta.image",
+                "markup.italic",
+                "source.js support.type"
+                
+            ],
+            "settings": {
+                "foreground": "#c74ded"
+            }
+        },
+        {
+            "name": "Blue",
+            "scope": [
+                "string.regexp",
+                "markup.changed"
+            ],
+            "settings": {
+                "foreground": "#7cb7ff"
+            }
+        },
+        {
+            "name": "Red",
+            "scope": [
+                "constant",
+                "support.class",
+                "keyword.operator",
+                "support.constant",
+                "text.html.markdown string",
+                "source.css support.function",
+                "source.php support.function",
+                "support.function.magic.python",
+                "entity.other.attribute-name.id",
+                "markup.deleted"
+            ],
+            "settings": {
+                "foreground": "#ee5d43"
+            }
+        },
+        {
+            "name": "Green",
+            "scope": [
+                "string",
+                "text.html.php string",
+                "markup.inline.raw",
+                "markup.inserted",
+                "punctuation.definition.string",
+                "punctuation.definition.markdown",
+                "text.html meta.embedded source.js string",
+                "text.html.php punctuation.definition.string",
+                "text.html meta.embedded source.js punctuation.definition.string",
+                "text.html punctuation.definition.string",
+                "text.html string"
+            ],
+            "settings": {
+                "foreground": "#96E072"
+            }
+        },
+        {
+            "name": "Font Underline",
+            "scope": [
+                "entity.other.inherited-class"
+            ],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        }
+    ]
+}

assets/themes/src/vscode/andromeda/andromeda.json 🔗

@@ -0,0 +1,367 @@
+{
+    "name": "Andromeda",
+    "type": "dark",
+    "colors": {
+        "focusBorder": "#746f77",
+        "foreground": "#D5CED9",
+        "widget.shadow": "#14151A",
+        "selection.background": "#746f77",
+        "errorForeground": "#FC644D",
+
+        "button.background": "#00e8c5cc",
+        "button.hoverBackground": "#07d4b6cc",
+
+        "dropdown.background": "#2b303b",
+        "dropdown.border": "#363c49",
+
+        "input.background": "#2b303b",
+        "input.placeholderForeground": "#746f77",
+        "inputOption.activeBorder": "#C668BA",
+        "inputValidation.errorBackground": "#D65343",
+        "inputValidation.errorBorder": "#D65343",
+        "inputValidation.infoBackground": "#3A6395",
+        "inputValidation.infoBorder": "#3A6395",
+        "inputValidation.warningBackground": "#DE9237",
+        "inputValidation.warningBorder": "#DE9237",
+
+        "scrollbar.shadow": "#23262E",
+        "scrollbarSlider.activeBackground": "#3A3F4CCC",
+        "scrollbarSlider.background": "#3A3F4C77",
+        "scrollbarSlider.hoverBackground": "#3A3F4CAA",
+
+        "badge.background": "#00b0ff",
+        "badge.foreground": "#20232B",
+
+        "progressBar.background": "#C668BA",
+
+        "list.activeSelectionBackground": "#23262E",
+        "list.activeSelectionForeground": "#00e8c6",
+        "list.dropBackground": "#3a404e",
+        "list.focusBackground": "#282b35",
+        "list.focusForeground": "#eee",
+        "list.hoverBackground": "#23262E",
+        "list.hoverForeground": "#eee",
+        "list.inactiveSelectionBackground": "#23262E",
+        "list.inactiveSelectionForeground": "#00e8c6",
+
+        "activityBar.background": "#23262E",
+        "activityBar.dropBackground": "#3a404e",
+        "activityBar.foreground": "#BAAFC0",
+        "activityBarBadge.background": "#00b0ff",
+        "activityBarBadge.foreground": "#20232B",
+
+        "sideBar.background": "#23262E",
+        "sideBarSectionHeader.background": "#23262E",
+        "sideBarTitle.foreground": "#00e8c6",
+        "sideBar.foreground": "#999999",
+        
+        "editorGroup.background": "#23262E",
+        "editorGroup.dropBackground": "#495061d7",
+        "editorGroupHeader.tabsBackground": "#23262E",
+        "tab.activeBackground": "#23262e",
+        "tab.inactiveBackground": "#23262E",
+        "tab.activeForeground": "#00e8c6",
+        "tab.inactiveForeground": "#746f77",
+    
+        "editor.background": "#23262E",
+        "editor.foreground": "#D5CED9",
+        "editorLineNumber.foreground": "#746f77",
+        "editorCursor.foreground": "#FFF",
+        "editor.selectionBackground": "#3D4352",
+        "editor.selectionHighlightBackground": "#4F435580",
+        "editor.wordHighlightBackground": "#4F4355",
+        "editor.wordHighlightStrongBackground": "#db45a280",
+        "editor.findMatchBackground": "#f39d1256",
+        "editor.findMatchHighlightBackground": "#59b8b377",
+        "editor.findMatchBorder": "#f39d12b6",
+        "editor.hoverHighlightBackground": "#373941",
+        "editor.lineHighlightBackground": "#2e323d",
+        "editor.lineHighlightBorder": "#2e323d",
+        "editorLink.activeForeground": "#3B79C7",
+        "editor.rangeHighlightBackground": "#372F3C",
+        "editorWhitespace.foreground": "#333844",
+        "editorIndentGuide.background": "#333844",
+        "editorIndentGuide.activeBackground": "#585C66",
+        "editorRuler.foreground": "#4F4355",
+        "editorCodeLens.foreground": "#746f77",
+        "editorBracketMatch.background": "#746f77",
+        "editorBracketMatch.border": "#746f77",
+        "editorOverviewRuler.border": "#1B1D23",
+        "editorError.foreground": "#FC644D",
+        "editorWarning.foreground": "#FF9F2E",
+        "editorGutter.modifiedBackground": "#5BC0EBBB",
+        "editorGutter.addedBackground": "#9BC53DBB",
+        "editorGutter.deletedBackground": "#FC644DBB",
+
+        "diffEditor.insertedTextBackground": "#29BF1220",
+        "diffEditor.removedTextBackground": "#F21B3F20",
+
+        "editorWidget.background": "#20232A",
+        "editorSuggestWidget.background": "#20232A",
+        "editorSuggestWidget.border": "#372F3C",
+        "editorSuggestWidget.selectedBackground": "#373941",
+        "editorHoverWidget.background": "#373941",
+        "editorHoverWidget.border": "#00e8c5cc",
+        "debugExceptionWidget.background": "#FF9F2E60",
+        "debugExceptionWidget.border": "#FF9F2E60",
+
+        "minimapSlider.background": "#58607460",
+        "minimapSlider.hoverBackground": "#60698060",
+        "minimapSlider.activeBackground": "#60698060",
+
+        "peekView.border": "#23262E",
+        "peekViewEditor.background": "#1A1C22",
+        "peekViewEditor.matchHighlightBackground": "#FF9F2E60",
+        "peekViewResult.background": "#1A1C22",
+        "peekViewResult.matchHighlightBackground": "#FF9F2E60",
+        "peekViewResult.selectionBackground": "#23262E",
+        "peekViewTitle.background": "#1A1C22",
+        "peekViewTitleDescription.foreground": "#746f77",
+
+        "merge.currentHeaderBackground": "#F92672",
+        "merge.currentContentBackground": "#F9267240",
+        "merge.incomingHeaderBackground": "#3B79C7BB",
+        "merge.incomingContentBackground": "#3B79C740",
+
+        "panel.background": "#23262E",
+        "panel.border": "#1B1D23",
+        "panelTitle.activeBorder": "#23262E",
+        "panelTitle.inactiveForeground": "#746f77",
+
+        "statusBar.background": "#23262E",
+        "statusBar.debuggingBackground": "#FC644D",
+        "statusBar.noFolderBackground": "#23262E",
+        "statusBarItem.activeBackground": "#00e8c5cc",
+        "statusBarItem.hoverBackground": "#07d4b5b0",
+        "statusBarItem.prominentBackground": "#07d4b5b0",
+        "statusBarItem.prominentHoverBackground": "#00e8c5cc",
+
+        "terminal.ansiRed":"#ee5d43",
+        "terminal.ansiGreen":"#96E072",
+        "terminal.ansiYellow":"#FFE66D",
+        "terminal.ansiBlue":"#7cb7ff",
+        "terminal.ansiMagenta":"#ff00aa",
+        "terminal.ansiCyan":"#00e8c6",
+        "terminal.ansiBrightRed":"#ee5d43",
+        "terminal.ansiBrightGreen":"#96E072",
+        "terminal.ansiBrightYellow":"#FFE66D",
+        "terminal.ansiBrightBlue":"#7cb7ff",
+        "terminal.ansiBrightMagenta":"#ff00aa",
+        "terminal.ansiBrightCyan":"#00e8c6",
+        "terminalCursor.background": "#23262E",
+        "terminalCursor.foreground": "#FFE66D",
+
+        "titleBar.activeBackground": "#23262E",
+
+        "notification.background": "#2d313b",
+        "notification.buttonBackground": "#00e8c5cc",
+        "notification.buttonHoverBackground": "#07d4b5b0",
+        "notification.infoBackground": "#00b0ff",
+        "notification.warningBackground": "#FF9F2E",
+        "notification.errorBackground": "#FC644D",
+
+        "extensionButton.prominentBackground": "#07d4b6cc",
+        "extensionButton.prominentHoverBackground": "#07d4b5b0",
+
+        "pickerGroup.border": "#4F4355",
+        "pickerGroup.foreground": "#746f77",
+
+        "debugToolBar.background": "#20232A",
+
+        "walkThrough.embeddedEditorBackground": "#23262E",
+
+        "gitDecoration.ignoredResourceForeground": "#555555"
+
+    },
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#D5CED9",
+                "background": "#23262E"
+            }
+        },
+        {
+            "name": "Comment color",
+            "scope": [
+                "comment",
+                "markup.quote.markdown",
+                "meta.diff",
+                "meta.diff.header"
+            ],
+            "settings": {
+                "foreground": "#A0A1A7cc"
+            }
+        },
+        {
+            "name": "Text Color",
+            "scope": [
+                "meta.template.expression.js",
+                "constant.name.attribute.tag.jade",
+                "punctuation.definition.metadata.markdown",
+                "punctuation.definition.string.end.markdown",
+                "punctuation.definition.string.begin.markdown"
+            ],
+            "settings": {
+                "foreground": "#D5CED9"
+            }
+        },
+        {
+            "name": "Cyan",
+            "scope": [
+                "variable",
+                "support.variable",
+                "entity.name.tag.yaml",
+                "constant.character.entity.html",
+                "source.css entity.name.tag.reference",
+                "beginning.punctuation.definition.list.markdown",
+                "source.css entity.other.attribute-name.parent-selector",
+                "meta.structure.dictionary.json support.type.property-name"
+            ],
+            "settings": {
+                "foreground": "#00e8c6"        
+            }
+        },
+        {
+            "name": "Orange",
+            "scope": [
+                "markup.bold",
+                "constant.numeric",
+                "meta.group.regexp",
+                "constant.other.php",
+                "support.constant.ext.php",
+                "constant.other.class.php",
+                "support.constant.core.php",
+                "fenced_code.block.language",
+                "constant.other.caps.python",
+                "entity.other.attribute-name",
+                "support.type.exception.python",
+                "source.css keyword.other.unit",
+                "variable.other.object.property.js.jsx", "variable.other.object.js"
+            ],
+            "settings": {
+                "foreground": "#f39c12"
+            }
+        },
+        {
+            "name": "Yellow",
+            "scope": [
+                "markup.list",
+                "text.xml string",
+                "entity.name.type",
+                "support.function",
+                "entity.other.attribute-name",
+                "meta.at-rule.extend",
+                "entity.name.function",
+                "entity.other.inherited-class",
+                "entity.other.keyframe-offset.css",
+                "text.html.markdown string.quoted",
+                "meta.function-call.generic.python",
+                "meta.at-rule.extend support.constant",
+                "entity.other.attribute-name.class.jade",
+                "source.css entity.other.attribute-name",
+                "text.xml punctuation.definition.string"
+               
+            ],
+            "settings": {
+                "foreground": "#FFE66D"
+            }
+        },
+        {
+            "name": "Pink",
+            "scope": [
+                "markup.heading",
+                "variable.language.this.js",
+                "variable.language.special.self.python"
+            ],
+            "settings": {
+                "foreground": "#ff00aa"
+            }
+        },
+        {
+            "name": "Hot Pink",
+            "scope": [
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.end.php",
+                "punctuation.section.embedded.end.ruby",
+                "punctuation.section.embedded.begin.php",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.definition.template-expression",
+                "entity.name.tag"
+            ],
+            "settings": {
+                "foreground": "#f92672"
+            }
+        },
+        {
+            "name": "Purple",
+            "scope": [
+                "storage",
+                "keyword",
+                "meta.link",
+                "meta.image",
+                "markup.italic",
+                "source.js support.type"
+                
+            ],
+            "settings": {
+                "foreground": "#c74ded"
+            }
+        },
+        {
+            "name": "Blue",
+            "scope": [
+                "string.regexp",
+                "markup.changed"
+            ],
+            "settings": {
+                "foreground": "#7cb7ff"
+            }
+        },
+        {
+            "name": "Red",
+            "scope": [
+                "constant",
+                "support.class",
+                "keyword.operator",
+                "support.constant",
+                "text.html.markdown string",
+                "source.css support.function",
+                "source.php support.function",
+                "support.function.magic.python",
+                "entity.other.attribute-name.id",
+                "markup.deleted"
+            ],
+            "settings": {
+                "foreground": "#ee5d43"
+            }
+        },
+        {
+            "name": "Green",
+            "scope": [
+                "string",
+                "text.html.php string",
+                "markup.inline.raw",
+                "markup.inserted",
+                "punctuation.definition.string",
+                "punctuation.definition.markdown",
+                "text.html meta.embedded source.js string",
+                "text.html.php punctuation.definition.string",
+                "text.html meta.embedded source.js punctuation.definition.string",
+                "text.html punctuation.definition.string",
+                "text.html string"
+            ],
+            "settings": {
+                "foreground": "#96E072"
+            }
+        },
+        {
+            "name": "Font Underline",
+            "scope": [
+                "entity.other.inherited-class"
+            ],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        }
+    ]
+}

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

@@ -0,0 +1,16 @@
+{
+    "name": "Andromeda",
+    "author": "Eliver Lara (EliverLara)",
+    "themes": [
+        {
+            "name": "Andromeda",
+            "file_name": "andromeda.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Andromeda Bordered",
+            "file_name": "andromeda-bordered.json",
+            "appearance": "dark"
+        }
+    ]
+}

assets/themes/src/vscode/ayu/LICENSE 🔗

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2016 Ike Ku
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vscode/ayu/ayu-dark.json 🔗

@@ -0,0 +1,847 @@
+{
+	"type": "dark",
+	"colors": {
+		"focusBorder": "#e6b450b3",
+		"foreground": "#565b66",
+		"widget.shadow": "#00000080",
+		"selection.background": "#409fff4d",
+		"icon.foreground": "#565b66",
+		"errorForeground": "#d95757",
+		"descriptionForeground": "#565b66",
+		"textBlockQuote.background": "#0f131a",
+		"textLink.foreground": "#e6b450",
+		"textLink.activeForeground": "#e6b450",
+		"textPreformat.foreground": "#bfbdb6",
+		"button.background": "#e6b450",
+		"button.foreground": "#734d00",
+		"button.hoverBackground": "#e1af4b",
+		"button.secondaryBackground": "#565b6633",
+		"button.secondaryForeground": "#bfbdb6",
+		"button.secondaryHoverBackground": "#565b6680",
+		"dropdown.background": "#0d1017",
+		"dropdown.foreground": "#565b66",
+		"dropdown.border": "#565b6645",
+		"input.background": "#0d1017",
+		"input.border": "#565b6645",
+		"input.foreground": "#bfbdb6",
+		"input.placeholderForeground": "#565b6680",
+		"inputOption.activeBorder": "#e6b4504d",
+		"inputOption.activeBackground": "#e6b45033",
+		"inputOption.activeForeground": "#e6b450",
+		"inputValidation.errorBackground": "#0d1017",
+		"inputValidation.errorBorder": "#d95757",
+		"inputValidation.infoBackground": "#0b0e14",
+		"inputValidation.infoBorder": "#39bae6",
+		"inputValidation.warningBackground": "#0b0e14",
+		"inputValidation.warningBorder": "#ffb454",
+		"scrollbar.shadow": "#1e232b00",
+		"scrollbarSlider.background": "#565b6666",
+		"scrollbarSlider.hoverBackground": "#565b6699",
+		"scrollbarSlider.activeBackground": "#565b66b3",
+		"badge.background": "#e6b45033",
+		"badge.foreground": "#e6b450",
+		"progressBar.background": "#e6b450",
+		"list.activeSelectionBackground": "#47526640",
+		"list.activeSelectionForeground": "#bfbdb6",
+		"list.focusBackground": "#47526640",
+		"list.focusForeground": "#bfbdb6",
+		"list.focusOutline": "#47526640",
+		"list.highlightForeground": "#e6b450",
+		"list.deemphasizedForeground": "#d95757",
+		"list.hoverBackground": "#47526640",
+		"list.inactiveSelectionBackground": "#47526633",
+		"list.inactiveSelectionForeground": "#565b66",
+		"list.invalidItemForeground": "#565b664d",
+		"list.errorForeground": "#d95757",
+		"tree.indentGuidesStroke": "#6c738080",
+		"listFilterWidget.background": "#0f131a",
+		"listFilterWidget.outline": "#e6b450",
+		"listFilterWidget.noMatchesOutline": "#d95757",
+		"list.filterMatchBackground": "#5f4c7266",
+		"list.filterMatchBorder": "#6c598066",
+		"activityBar.background": "#0b0e14",
+		"activityBar.foreground": "#565b66cc",
+		"activityBar.inactiveForeground": "#565b6699",
+		"activityBar.border": "#0b0e14",
+		"activityBar.activeBorder": "#e6b450",
+		"activityBarBadge.background": "#e6b450",
+		"activityBarBadge.foreground": "#734d00",
+		"sideBar.background": "#0b0e14",
+		"sideBar.border": "#0b0e14",
+		"sideBarTitle.foreground": "#565b66",
+		"sideBarSectionHeader.background": "#0b0e14",
+		"sideBarSectionHeader.foreground": "#565b66",
+		"sideBarSectionHeader.border": "#0b0e14",
+		"minimap.background": "#0b0e14",
+		"minimap.selectionHighlight": "#409fff4d",
+		"minimap.errorHighlight": "#d95757",
+		"minimap.findMatchHighlight": "#6c5980",
+		"minimapGutter.addedBackground": "#7fd962",
+		"minimapGutter.modifiedBackground": "#73b8ff",
+		"minimapGutter.deletedBackground": "#f26d78",
+		"editorGroup.border": "#1e232b",
+		"editorGroup.background": "#0f131a",
+		"editorGroupHeader.noTabsBackground": "#0b0e14",
+		"editorGroupHeader.tabsBackground": "#0b0e14",
+		"editorGroupHeader.tabsBorder": "#0b0e14",
+		"tab.activeBackground": "#0b0e14",
+		"tab.activeForeground": "#bfbdb6",
+		"tab.border": "#0b0e14",
+		"tab.activeBorder": "#e6b450",
+		"tab.unfocusedActiveBorder": "#565b66",
+		"tab.inactiveBackground": "#0b0e14",
+		"tab.inactiveForeground": "#565b66",
+		"tab.unfocusedActiveForeground": "#565b66",
+		"tab.unfocusedInactiveForeground": "#565b66",
+		"editor.background": "#0b0e14",
+		"editor.foreground": "#bfbdb6",
+		"editorLineNumber.foreground": "#6c738099",
+		"editorLineNumber.activeForeground": "#6c7380e6",
+		"editorCursor.foreground": "#e6b450",
+		"editor.inactiveSelectionBackground": "#409fff21",
+		"editor.selectionBackground": "#409fff4d",
+		"editor.selectionHighlightBackground": "#7fd96226",
+		"editor.selectionHighlightBorder": "#7fd96200",
+		"editor.wordHighlightBackground": "#73b8ff14",
+		"editor.wordHighlightStrongBackground": "#7fd96214",
+		"editor.wordHighlightBorder": "#73b8ff80",
+		"editor.wordHighlightStrongBorder": "#7fd96280",
+		"editor.findMatchBackground": "#6c5980",
+		"editor.findMatchBorder": "#6c5980",
+		"editor.findMatchHighlightBackground": "#6c598066",
+		"editor.findMatchHighlightBorder": "#5f4c7266",
+		"editor.findRangeHighlightBackground": "#6c598040",
+		"editor.rangeHighlightBackground": "#6c598033",
+		"editor.lineHighlightBackground": "#131721",
+		"editorLink.activeForeground": "#e6b450",
+		"editorWhitespace.foreground": "#6c738099",
+		"editorIndentGuide.background": "#6c738033",
+		"editorIndentGuide.activeBackground": "#6c738080",
+		"editorRuler.foreground": "#6c738033",
+		"editorCodeLens.foreground": "#acb6bf8c",
+		"editorBracketMatch.background": "#6c73804d",
+		"editorBracketMatch.border": "#6c73804d",
+		"editor.snippetTabstopHighlightBackground": "#7fd96233",
+		"editorOverviewRuler.border": "#1e232b",
+		"editorOverviewRuler.modifiedForeground": "#73b8ff",
+		"editorOverviewRuler.addedForeground": "#7fd962",
+		"editorOverviewRuler.deletedForeground": "#f26d78",
+		"editorOverviewRuler.errorForeground": "#d95757",
+		"editorOverviewRuler.warningForeground": "#e6b450",
+		"editorOverviewRuler.bracketMatchForeground": "#6c7380b3",
+		"editorOverviewRuler.wordHighlightForeground": "#73b8ff66",
+		"editorOverviewRuler.wordHighlightStrongForeground": "#7fd96266",
+		"editorOverviewRuler.findMatchForeground": "#6c5980",
+		"editorError.foreground": "#d95757",
+		"editorWarning.foreground": "#e6b450",
+		"editorGutter.modifiedBackground": "#73b8ffcc",
+		"editorGutter.addedBackground": "#7fd962cc",
+		"editorGutter.deletedBackground": "#f26d78cc",
+		"diffEditor.insertedTextBackground": "#7fd9621f",
+		"diffEditor.removedTextBackground": "#f26d781f",
+		"diffEditor.diagonalFill": "#1e232b",
+		"editorWidget.background": "#0f131a",
+		"editorWidget.border": "#1e232b",
+		"editorHoverWidget.background": "#0f131a",
+		"editorHoverWidget.border": "#1e232b",
+		"editorSuggestWidget.background": "#0f131a",
+		"editorSuggestWidget.border": "#1e232b",
+		"editorSuggestWidget.highlightForeground": "#e6b450",
+		"editorSuggestWidget.selectedBackground": "#47526640",
+		"debugExceptionWidget.border": "#1e232b",
+		"debugExceptionWidget.background": "#0f131a",
+		"editorMarkerNavigation.background": "#0f131a",
+		"peekView.border": "#47526640",
+		"peekViewTitle.background": "#47526640",
+		"peekViewTitleDescription.foreground": "#565b66",
+		"peekViewTitleLabel.foreground": "#bfbdb6",
+		"peekViewEditor.background": "#0f131a",
+		"peekViewEditor.matchHighlightBackground": "#6c598066",
+		"peekViewEditor.matchHighlightBorder": "#5f4c7266",
+		"peekViewResult.background": "#0f131a",
+		"peekViewResult.fileForeground": "#bfbdb6",
+		"peekViewResult.lineForeground": "#565b66",
+		"peekViewResult.matchHighlightBackground": "#6c598066",
+		"peekViewResult.selectionBackground": "#47526640",
+		"panel.background": "#0b0e14",
+		"panel.border": "#1e232b",
+		"panelTitle.activeBorder": "#e6b450",
+		"panelTitle.activeForeground": "#bfbdb6",
+		"panelTitle.inactiveForeground": "#565b66",
+		"statusBar.background": "#0b0e14",
+		"statusBar.foreground": "#565b66",
+		"statusBar.border": "#0b0e14",
+		"statusBar.debuggingBackground": "#f29668",
+		"statusBar.debuggingForeground": "#0d1017",
+		"statusBar.noFolderBackground": "#0f131a",
+		"statusBarItem.activeBackground": "#565b6633",
+		"statusBarItem.hoverBackground": "#565b6633",
+		"statusBarItem.prominentBackground": "#1e232b",
+		"statusBarItem.prominentHoverBackground": "#00000030",
+		"statusBarItem.remoteBackground": "#e6b450",
+		"statusBarItem.remoteForeground": "#734d00",
+		"titleBar.activeBackground": "#0b0e14",
+		"titleBar.activeForeground": "#bfbdb6",
+		"titleBar.inactiveBackground": "#0b0e14",
+		"titleBar.inactiveForeground": "#565b66",
+		"titleBar.border": "#0b0e14",
+		"extensionButton.prominentForeground": "#734d00",
+		"extensionButton.prominentBackground": "#e6b450",
+		"extensionButton.prominentHoverBackground": "#e1af4b",
+		"pickerGroup.border": "#1e232b",
+		"pickerGroup.foreground": "#565b6680",
+		"debugToolBar.background": "#0f131a",
+		"debugIcon.breakpointForeground": "#f29668",
+		"debugIcon.breakpointDisabledForeground": "#f2966880",
+		"debugConsoleInputIcon.foreground": "#e6b450",
+		"welcomePage.tileBackground": "#0b0e14",
+		"welcomePage.tileShadow": "#00000080",
+		"welcomePage.progress.background": "#131721",
+		"welcomePage.buttonBackground": "#e6b45066",
+		"walkThrough.embeddedEditorBackground": "#0f131a",
+		"gitDecoration.modifiedResourceForeground": "#73b8ffb3",
+		"gitDecoration.deletedResourceForeground": "#f26d78b3",
+		"gitDecoration.untrackedResourceForeground": "#7fd962b3",
+		"gitDecoration.ignoredResourceForeground": "#565b6680",
+		"gitDecoration.conflictingResourceForeground": "",
+		"gitDecoration.submoduleResourceForeground": "#d2a6ffb3",
+		"settings.headerForeground": "#bfbdb6",
+		"settings.modifiedItemIndicator": "#73b8ff",
+		"keybindingLabel.background": "#565b661a",
+		"keybindingLabel.foreground": "#bfbdb6",
+		"keybindingLabel.border": "#bfbdb61a",
+		"keybindingLabel.bottomBorder": "#bfbdb61a",
+		"terminal.background": "#0b0e14",
+		"terminal.foreground": "#bfbdb6",
+		"terminal.ansiBlack": "#1e232b",
+		"terminal.ansiRed": "#ea6c73",
+		"terminal.ansiGreen": "#7fd962",
+		"terminal.ansiYellow": "#f9af4f",
+		"terminal.ansiBlue": "#53bdfa",
+		"terminal.ansiMagenta": "#cda1fa",
+		"terminal.ansiCyan": "#90e1c6",
+		"terminal.ansiWhite": "#c7c7c7",
+		"terminal.ansiBrightBlack": "#686868",
+		"terminal.ansiBrightRed": "#f07178",
+		"terminal.ansiBrightGreen": "#aad94c",
+		"terminal.ansiBrightYellow": "#ffb454",
+		"terminal.ansiBrightBlue": "#59c2ff",
+		"terminal.ansiBrightMagenta": "#d2a6ff",
+		"terminal.ansiBrightCyan": "#95e6cb",
+		"terminal.ansiBrightWhite": "#ffffff"
+	},
+	"tokenColors": [
+		{
+			"settings": {
+				"background": "#0b0e14",
+				"foreground": "#bfbdb6"
+			}
+		},
+		{
+			"name": "Comment",
+			"scope": [
+				"comment"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#acb6bf8c"
+			}
+		},
+		{
+			"name": "String",
+			"scope": [
+				"string",
+				"constant.other.symbol"
+			],
+			"settings": {
+				"foreground": "#aad94c"
+			}
+		},
+		{
+			"name": "Regular Expressions and Escape Characters",
+			"scope": [
+				"string.regexp",
+				"constant.character",
+				"constant.other"
+			],
+			"settings": {
+				"foreground": "#95e6cb"
+			}
+		},
+		{
+			"name": "Number",
+			"scope": [
+				"constant.numeric"
+			],
+			"settings": {
+				"foreground": "#d2a6ff"
+			}
+		},
+		{
+			"name": "Built-in constants",
+			"scope": [
+				"constant.language"
+			],
+			"settings": {
+				"foreground": "#d2a6ff"
+			}
+		},
+		{
+			"name": "Variable",
+			"scope": [
+				"variable",
+				"variable.parameter.function-call"
+			],
+			"settings": {
+				"foreground": "#bfbdb6"
+			}
+		},
+		{
+			"name": "Member Variable",
+			"scope": [
+				"variable.member"
+			],
+			"settings": {
+				"foreground": "#f07178"
+			}
+		},
+		{
+			"name": "Language variable",
+			"scope": [
+				"variable.language"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Storage",
+			"scope": [
+				"storage"
+			],
+			"settings": {
+				"foreground": "#ff8f40"
+			}
+		},
+		{
+			"name": "Keyword",
+			"scope": [
+				"keyword"
+			],
+			"settings": {
+				"foreground": "#ff8f40"
+			}
+		},
+		{
+			"name": "Operators",
+			"scope": [
+				"keyword.operator"
+			],
+			"settings": {
+				"foreground": "#f29668"
+			}
+		},
+		{
+			"name": "Separators like ; or ,",
+			"scope": [
+				"punctuation.separator",
+				"punctuation.terminator"
+			],
+			"settings": {
+				"foreground": "#bfbdb6b3"
+			}
+		},
+		{
+			"name": "Punctuation",
+			"scope": [
+				"punctuation.section"
+			],
+			"settings": {
+				"foreground": "#bfbdb6"
+			}
+		},
+		{
+			"name": "Accessor",
+			"scope": [
+				"punctuation.accessor"
+			],
+			"settings": {
+				"foreground": "#f29668"
+			}
+		},
+		{
+			"name": "JavaScript/TypeScript interpolation punctuation",
+			"scope": [
+				"punctuation.definition.template-expression"
+			],
+			"settings": {
+				"foreground": "#ff8f40"
+			}
+		},
+		{
+			"name": "Ruby interpolation punctuation",
+			"scope": [
+				"punctuation.section.embedded"
+			],
+			"settings": {
+				"foreground": "#ff8f40"
+			}
+		},
+		{
+			"name": "Interpolation text",
+			"scope": [
+				"meta.embedded"
+			],
+			"settings": {
+				"foreground": "#bfbdb6"
+			}
+		},
+		{
+			"name": "Types fixes",
+			"scope": [
+				"source.java storage.type",
+				"source.haskell storage.type",
+				"source.c storage.type"
+			],
+			"settings": {
+				"foreground": "#59c2ff"
+			}
+		},
+		{
+			"name": "Inherited class type",
+			"scope": [
+				"entity.other.inherited-class"
+			],
+			"settings": {
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Lambda arrow",
+			"scope": [
+				"storage.type.function"
+			],
+			"settings": {
+				"foreground": "#ff8f40"
+			}
+		},
+		{
+			"name": "Java primitive variable types",
+			"scope": [
+				"source.java storage.type.primitive"
+			],
+			"settings": {
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Function name",
+			"scope": [
+				"entity.name.function"
+			],
+			"settings": {
+				"foreground": "#ffb454"
+			}
+		},
+		{
+			"name": "Function arguments",
+			"scope": [
+				"variable.parameter",
+				"meta.parameter"
+			],
+			"settings": {
+				"foreground": "#d2a6ff"
+			}
+		},
+		{
+			"name": "Function call",
+			"scope": [
+				"variable.function",
+				"variable.annotation",
+				"meta.function-call.generic",
+				"support.function.go"
+			],
+			"settings": {
+				"foreground": "#ffb454"
+			}
+		},
+		{
+			"name": "Library function",
+			"scope": [
+				"support.function",
+				"support.macro"
+			],
+			"settings": {
+				"foreground": "#f07178"
+			}
+		},
+		{
+			"name": "Imports and packages",
+			"scope": [
+				"entity.name.import",
+				"entity.name.package"
+			],
+			"settings": {
+				"foreground": "#aad94c"
+			}
+		},
+		{
+			"name": "Entity name",
+			"scope": [
+				"entity.name"
+			],
+			"settings": {
+				"foreground": "#59c2ff"
+			}
+		},
+		{
+			"name": "Tag",
+			"scope": [
+				"entity.name.tag",
+				"meta.tag.sgml"
+			],
+			"settings": {
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "JSX Component",
+			"scope": [
+				"support.class.component"
+			],
+			"settings": {
+				"foreground": "#59c2ff"
+			}
+		},
+		{
+			"name": "Tag start/end",
+			"scope": [
+				"punctuation.definition.tag.end",
+				"punctuation.definition.tag.begin",
+				"punctuation.definition.tag"
+			],
+			"settings": {
+				"foreground": "#39bae680"
+			}
+		},
+		{
+			"name": "Tag attribute",
+			"scope": [
+				"entity.other.attribute-name"
+			],
+			"settings": {
+				"foreground": "#ffb454"
+			}
+		},
+		{
+			"name": "Library constant",
+			"scope": [
+				"support.constant"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#f29668"
+			}
+		},
+		{
+			"name": "Library class/type",
+			"scope": [
+				"support.type",
+				"support.class",
+				"source.go storage.type"
+			],
+			"settings": {
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Decorators/annotation",
+			"scope": [
+				"meta.decorator variable.other",
+				"meta.decorator punctuation.decorator",
+				"storage.type.annotation"
+			],
+			"settings": {
+				"foreground": "#e6b673"
+			}
+		},
+		{
+			"name": "Invalid",
+			"scope": [
+				"invalid"
+			],
+			"settings": {
+				"foreground": "#d95757"
+			}
+		},
+		{
+			"name": "diff.header",
+			"scope": [
+				"meta.diff",
+				"meta.diff.header"
+			],
+			"settings": {
+				"foreground": "#c594c5"
+			}
+		},
+		{
+			"name": "Ruby class methods",
+			"scope": [
+				"source.ruby variable.other.readwrite"
+			],
+			"settings": {
+				"foreground": "#ffb454"
+			}
+		},
+		{
+			"name": "CSS tag names",
+			"scope": [
+				"source.css entity.name.tag",
+				"source.sass entity.name.tag",
+				"source.scss entity.name.tag",
+				"source.less entity.name.tag",
+				"source.stylus entity.name.tag"
+			],
+			"settings": {
+				"foreground": "#59c2ff"
+			}
+		},
+		{
+			"name": "CSS browser prefix",
+			"scope": [
+				"source.css support.type",
+				"source.sass support.type",
+				"source.scss support.type",
+				"source.less support.type",
+				"source.stylus support.type"
+			],
+			"settings": {
+				"foreground": "#acb6bf8c"
+			}
+		},
+		{
+			"name": "CSS Properties",
+			"scope": [
+				"support.type.property-name"
+			],
+			"settings": {
+				"fontStyle": "normal",
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Search Results Numbers",
+			"scope": [
+				"constant.numeric.line-number.find-in-files - match"
+			],
+			"settings": {
+				"foreground": "#acb6bf8c"
+			}
+		},
+		{
+			"name": "Search Results Match Numbers",
+			"scope": [
+				"constant.numeric.line-number.match"
+			],
+			"settings": {
+				"foreground": "#ff8f40"
+			}
+		},
+		{
+			"name": "Search Results Lines",
+			"scope": [
+				"entity.name.filename.find-in-files"
+			],
+			"settings": {
+				"foreground": "#aad94c"
+			}
+		},
+		{
+			"scope": [
+				"message.error"
+			],
+			"settings": {
+				"foreground": "#d95757"
+			}
+		},
+		{
+			"name": "Markup heading",
+			"scope": [
+				"markup.heading",
+				"markup.heading entity.name"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#aad94c"
+			}
+		},
+		{
+			"name": "Markup links",
+			"scope": [
+				"markup.underline.link",
+				"string.other.link"
+			],
+			"settings": {
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Markup Italic",
+			"scope": [
+				"markup.italic"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#f07178"
+			}
+		},
+		{
+			"name": "Markup Bold",
+			"scope": [
+				"markup.bold"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#f07178"
+			}
+		},
+		{
+			"name": "Markup Bold/italic",
+			"scope": [
+				"markup.italic markup.bold",
+				"markup.bold markup.italic"
+			],
+			"settings": {
+				"fontStyle": "bold italic"
+			}
+		},
+		{
+			"name": "Markup Code",
+			"scope": [
+				"markup.raw"
+			],
+			"settings": {
+				"background": "#bfbdb605"
+			}
+		},
+		{
+			"name": "Markup Code Inline",
+			"scope": [
+				"markup.raw.inline"
+			],
+			"settings": {
+				"background": "#bfbdb60f"
+			}
+		},
+		{
+			"name": "Markdown Separator",
+			"scope": [
+				"meta.separator"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"background": "#bfbdb60f",
+				"foreground": "#acb6bf8c"
+			}
+		},
+		{
+			"name": "Markup Blockquote",
+			"scope": [
+				"markup.quote"
+			],
+			"settings": {
+				"foreground": "#95e6cb",
+				"fontStyle": "italic"
+			}
+		},
+		{
+			"name": "Markup List Bullet",
+			"scope": [
+				"markup.list punctuation.definition.list.begin"
+			],
+			"settings": {
+				"foreground": "#ffb454"
+			}
+		},
+		{
+			"name": "Markup added",
+			"scope": [
+				"markup.inserted"
+			],
+			"settings": {
+				"foreground": "#7fd962"
+			}
+		},
+		{
+			"name": "Markup modified",
+			"scope": [
+				"markup.changed"
+			],
+			"settings": {
+				"foreground": "#73b8ff"
+			}
+		},
+		{
+			"name": "Markup removed",
+			"scope": [
+				"markup.deleted"
+			],
+			"settings": {
+				"foreground": "#f26d78"
+			}
+		},
+		{
+			"name": "Markup Strike",
+			"scope": [
+				"markup.strike"
+			],
+			"settings": {
+				"foreground": "#e6b673"
+			}
+		},
+		{
+			"name": "Markup Table",
+			"scope": [
+				"markup.table"
+			],
+			"settings": {
+				"background": "#bfbdb60f",
+				"foreground": "#39bae6"
+			}
+		},
+		{
+			"name": "Markup Raw Inline",
+			"scope": [
+				"text.html.markdown markup.inline.raw"
+			],
+			"settings": {
+				"foreground": "#f29668"
+			}
+		},
+		{
+			"name": "Markdown - Line Break",
+			"scope": [
+				"text.html.markdown meta.dummy.line-break"
+			],
+			"settings": {
+				"background": "#acb6bf8c",
+				"foreground": "#acb6bf8c"
+			}
+		},
+		{
+			"name": "Markdown - Raw Block Fenced",
+			"scope": [
+				"punctuation.definition.markdown"
+			],
+			"settings": {
+				"background": "#bfbdb6",
+				"foreground": "#acb6bf8c"
+			}
+		}
+	],
+	"semanticHighlighting": true,
+	"semanticTokenColors": {
+		"parameter.label": "#bfbdb6"
+	}
+}

assets/themes/src/vscode/ayu/ayu-light.json 🔗

@@ -0,0 +1,847 @@
+{
+	"type": "light",
+	"colors": {
+		"focusBorder": "#ffaa33b3",
+		"foreground": "#8a9199",
+		"widget.shadow": "#00000026",
+		"selection.background": "#035bd626",
+		"icon.foreground": "#8a9199",
+		"errorForeground": "#e65050",
+		"descriptionForeground": "#8a9199",
+		"textBlockQuote.background": "#f3f4f5",
+		"textLink.foreground": "#ffaa33",
+		"textLink.activeForeground": "#ffaa33",
+		"textPreformat.foreground": "#5c6166",
+		"button.background": "#ffaa33",
+		"button.foreground": "#804a00",
+		"button.hoverBackground": "#f9a52e",
+		"button.secondaryBackground": "#8a919933",
+		"button.secondaryForeground": "#5c6166",
+		"button.secondaryHoverBackground": "#8a919980",
+		"dropdown.background": "#fcfcfc",
+		"dropdown.foreground": "#8a9199",
+		"dropdown.border": "#8a919945",
+		"input.background": "#fcfcfc",
+		"input.border": "#8a919945",
+		"input.foreground": "#5c6166",
+		"input.placeholderForeground": "#8a919980",
+		"inputOption.activeBorder": "#f4a0284d",
+		"inputOption.activeBackground": "#ffaa3333",
+		"inputOption.activeForeground": "#f4a028",
+		"inputValidation.errorBackground": "#fcfcfc",
+		"inputValidation.errorBorder": "#e65050",
+		"inputValidation.infoBackground": "#f8f9fa",
+		"inputValidation.infoBorder": "#55b4d4",
+		"inputValidation.warningBackground": "#f8f9fa",
+		"inputValidation.warningBorder": "#f2ae49",
+		"scrollbar.shadow": "#6b7d8f00",
+		"scrollbarSlider.background": "#8a919966",
+		"scrollbarSlider.hoverBackground": "#8a919999",
+		"scrollbarSlider.activeBackground": "#8a9199b3",
+		"badge.background": "#ffaa3333",
+		"badge.foreground": "#f4a028",
+		"progressBar.background": "#ffaa33",
+		"list.activeSelectionBackground": "#56728f1f",
+		"list.activeSelectionForeground": "#5c6166",
+		"list.focusBackground": "#56728f1f",
+		"list.focusForeground": "#5c6166",
+		"list.focusOutline": "#56728f1f",
+		"list.highlightForeground": "#ffaa33",
+		"list.deemphasizedForeground": "#e65050",
+		"list.hoverBackground": "#56728f1f",
+		"list.inactiveSelectionBackground": "#6b7d8f1f",
+		"list.inactiveSelectionForeground": "#8a9199",
+		"list.invalidItemForeground": "#8a91994d",
+		"list.errorForeground": "#e65050",
+		"tree.indentGuidesStroke": "#8a919959",
+		"listFilterWidget.background": "#f3f4f5",
+		"listFilterWidget.outline": "#ffaa33",
+		"listFilterWidget.noMatchesOutline": "#e65050",
+		"list.filterMatchBackground": "#ddcaef73",
+		"list.filterMatchBorder": "#ecd9ff73",
+		"activityBar.background": "#f8f9fa",
+		"activityBar.foreground": "#8a9199cc",
+		"activityBar.inactiveForeground": "#8a919999",
+		"activityBar.border": "#f8f9fa",
+		"activityBar.activeBorder": "#ffaa33",
+		"activityBarBadge.background": "#ffaa33",
+		"activityBarBadge.foreground": "#f8f9fa",
+		"sideBar.background": "#f8f9fa",
+		"sideBar.border": "#f8f9fa",
+		"sideBarTitle.foreground": "#8a9199",
+		"sideBarSectionHeader.background": "#f8f9fa",
+		"sideBarSectionHeader.foreground": "#8a9199",
+		"sideBarSectionHeader.border": "#f8f9fa",
+		"minimap.background": "#f8f9fa",
+		"minimap.selectionHighlight": "#035bd626",
+		"minimap.errorHighlight": "#e65050",
+		"minimap.findMatchHighlight": "#ecd9ff",
+		"minimapGutter.addedBackground": "#6cbf43",
+		"minimapGutter.modifiedBackground": "#478acc",
+		"minimapGutter.deletedBackground": "#ff7383",
+		"editorGroup.border": "#6b7d8f1f",
+		"editorGroup.background": "#f3f4f5",
+		"editorGroupHeader.noTabsBackground": "#f8f9fa",
+		"editorGroupHeader.tabsBackground": "#f8f9fa",
+		"editorGroupHeader.tabsBorder": "#f8f9fa",
+		"tab.activeBackground": "#f8f9fa",
+		"tab.activeForeground": "#5c6166",
+		"tab.border": "#f8f9fa",
+		"tab.activeBorder": "#ffaa33",
+		"tab.unfocusedActiveBorder": "#8a9199",
+		"tab.inactiveBackground": "#f8f9fa",
+		"tab.inactiveForeground": "#8a9199",
+		"tab.unfocusedActiveForeground": "#8a9199",
+		"tab.unfocusedInactiveForeground": "#8a9199",
+		"editor.background": "#f8f9fa",
+		"editor.foreground": "#5c6166",
+		"editorLineNumber.foreground": "#8a919966",
+		"editorLineNumber.activeForeground": "#8a9199cc",
+		"editorCursor.foreground": "#ffaa33",
+		"editor.inactiveSelectionBackground": "#035bd612",
+		"editor.selectionBackground": "#035bd626",
+		"editor.selectionHighlightBackground": "#6cbf4326",
+		"editor.selectionHighlightBorder": "#6cbf4300",
+		"editor.wordHighlightBackground": "#478acc14",
+		"editor.wordHighlightStrongBackground": "#6cbf4314",
+		"editor.wordHighlightBorder": "#478acc80",
+		"editor.wordHighlightStrongBorder": "#6cbf4380",
+		"editor.findMatchBackground": "#ecd9ff",
+		"editor.findMatchBorder": "#ecd9ff",
+		"editor.findMatchHighlightBackground": "#ecd9ff73",
+		"editor.findMatchHighlightBorder": "#ddcaef73",
+		"editor.findRangeHighlightBackground": "#ecd9ff40",
+		"editor.rangeHighlightBackground": "#ecd9ff33",
+		"editor.lineHighlightBackground": "#8a91991a",
+		"editorLink.activeForeground": "#ffaa33",
+		"editorWhitespace.foreground": "#8a919966",
+		"editorIndentGuide.background": "#8a91992e",
+		"editorIndentGuide.activeBackground": "#8a919959",
+		"editorRuler.foreground": "#8a91992e",
+		"editorCodeLens.foreground": "#787b8099",
+		"editorBracketMatch.background": "#8a91994d",
+		"editorBracketMatch.border": "#8a91994d",
+		"editor.snippetTabstopHighlightBackground": "#6cbf4333",
+		"editorOverviewRuler.border": "#6b7d8f1f",
+		"editorOverviewRuler.modifiedForeground": "#478acc",
+		"editorOverviewRuler.addedForeground": "#6cbf43",
+		"editorOverviewRuler.deletedForeground": "#ff7383",
+		"editorOverviewRuler.errorForeground": "#e65050",
+		"editorOverviewRuler.warningForeground": "#ffaa33",
+		"editorOverviewRuler.bracketMatchForeground": "#8a9199b3",
+		"editorOverviewRuler.wordHighlightForeground": "#478acc66",
+		"editorOverviewRuler.wordHighlightStrongForeground": "#6cbf4366",
+		"editorOverviewRuler.findMatchForeground": "#ecd9ff",
+		"editorError.foreground": "#e65050",
+		"editorWarning.foreground": "#ffaa33",
+		"editorGutter.modifiedBackground": "#478acccc",
+		"editorGutter.addedBackground": "#6cbf43cc",
+		"editorGutter.deletedBackground": "#ff7383cc",
+		"diffEditor.insertedTextBackground": "#6cbf431f",
+		"diffEditor.removedTextBackground": "#ff73831f",
+		"diffEditor.diagonalFill": "#6b7d8f1f",
+		"editorWidget.background": "#f3f4f5",
+		"editorWidget.border": "#6b7d8f1f",
+		"editorHoverWidget.background": "#f3f4f5",
+		"editorHoverWidget.border": "#6b7d8f1f",
+		"editorSuggestWidget.background": "#f3f4f5",
+		"editorSuggestWidget.border": "#6b7d8f1f",
+		"editorSuggestWidget.highlightForeground": "#ffaa33",
+		"editorSuggestWidget.selectedBackground": "#56728f1f",
+		"debugExceptionWidget.border": "#6b7d8f1f",
+		"debugExceptionWidget.background": "#f3f4f5",
+		"editorMarkerNavigation.background": "#f3f4f5",
+		"peekView.border": "#56728f1f",
+		"peekViewTitle.background": "#56728f1f",
+		"peekViewTitleDescription.foreground": "#8a9199",
+		"peekViewTitleLabel.foreground": "#5c6166",
+		"peekViewEditor.background": "#f3f4f5",
+		"peekViewEditor.matchHighlightBackground": "#ecd9ff73",
+		"peekViewEditor.matchHighlightBorder": "#ddcaef73",
+		"peekViewResult.background": "#f3f4f5",
+		"peekViewResult.fileForeground": "#5c6166",
+		"peekViewResult.lineForeground": "#8a9199",
+		"peekViewResult.matchHighlightBackground": "#ecd9ff73",
+		"peekViewResult.selectionBackground": "#56728f1f",
+		"panel.background": "#f8f9fa",
+		"panel.border": "#6b7d8f1f",
+		"panelTitle.activeBorder": "#ffaa33",
+		"panelTitle.activeForeground": "#5c6166",
+		"panelTitle.inactiveForeground": "#8a9199",
+		"statusBar.background": "#f8f9fa",
+		"statusBar.foreground": "#8a9199",
+		"statusBar.border": "#f8f9fa",
+		"statusBar.debuggingBackground": "#ed9366",
+		"statusBar.debuggingForeground": "#fcfcfc",
+		"statusBar.noFolderBackground": "#f3f4f5",
+		"statusBarItem.activeBackground": "#8a919933",
+		"statusBarItem.hoverBackground": "#8a919933",
+		"statusBarItem.prominentBackground": "#6b7d8f1f",
+		"statusBarItem.prominentHoverBackground": "#00000030",
+		"statusBarItem.remoteBackground": "#ffaa33",
+		"statusBarItem.remoteForeground": "#804a00",
+		"titleBar.activeBackground": "#f8f9fa",
+		"titleBar.activeForeground": "#5c6166",
+		"titleBar.inactiveBackground": "#f8f9fa",
+		"titleBar.inactiveForeground": "#8a9199",
+		"titleBar.border": "#f8f9fa",
+		"extensionButton.prominentForeground": "#804a00",
+		"extensionButton.prominentBackground": "#ffaa33",
+		"extensionButton.prominentHoverBackground": "#f9a52e",
+		"pickerGroup.border": "#6b7d8f1f",
+		"pickerGroup.foreground": "#8a919980",
+		"debugToolBar.background": "#f3f4f5",
+		"debugIcon.breakpointForeground": "#ed9366",
+		"debugIcon.breakpointDisabledForeground": "#ed936680",
+		"debugConsoleInputIcon.foreground": "#ffaa33",
+		"welcomePage.tileBackground": "#f8f9fa",
+		"welcomePage.tileShadow": "#00000026",
+		"welcomePage.progress.background": "#8a91991a",
+		"welcomePage.buttonBackground": "#ffaa3366",
+		"walkThrough.embeddedEditorBackground": "#f3f4f5",
+		"gitDecoration.modifiedResourceForeground": "#478accb3",
+		"gitDecoration.deletedResourceForeground": "#ff7383b3",
+		"gitDecoration.untrackedResourceForeground": "#6cbf43b3",
+		"gitDecoration.ignoredResourceForeground": "#8a919980",
+		"gitDecoration.conflictingResourceForeground": "",
+		"gitDecoration.submoduleResourceForeground": "#a37accb3",
+		"settings.headerForeground": "#5c6166",
+		"settings.modifiedItemIndicator": "#478acc",
+		"keybindingLabel.background": "#8a91991a",
+		"keybindingLabel.foreground": "#5c6166",
+		"keybindingLabel.border": "#5c61661a",
+		"keybindingLabel.bottomBorder": "#5c61661a",
+		"terminal.background": "#f8f9fa",
+		"terminal.foreground": "#5c6166",
+		"terminal.ansiBlack": "#000000",
+		"terminal.ansiRed": "#ea6c6d",
+		"terminal.ansiGreen": "#6cbf43",
+		"terminal.ansiYellow": "#eca944",
+		"terminal.ansiBlue": "#3199e1",
+		"terminal.ansiMagenta": "#9e75c7",
+		"terminal.ansiCyan": "#46ba94",
+		"terminal.ansiWhite": "#c7c7c7",
+		"terminal.ansiBrightBlack": "#686868",
+		"terminal.ansiBrightRed": "#f07171",
+		"terminal.ansiBrightGreen": "#86b300",
+		"terminal.ansiBrightYellow": "#f2ae49",
+		"terminal.ansiBrightBlue": "#399ee6",
+		"terminal.ansiBrightMagenta": "#a37acc",
+		"terminal.ansiBrightCyan": "#4cbf99",
+		"terminal.ansiBrightWhite": "#d1d1d1"
+	},
+	"tokenColors": [
+		{
+			"settings": {
+				"background": "#f8f9fa",
+				"foreground": "#5c6166"
+			}
+		},
+		{
+			"name": "Comment",
+			"scope": [
+				"comment"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#787b8099"
+			}
+		},
+		{
+			"name": "String",
+			"scope": [
+				"string",
+				"constant.other.symbol"
+			],
+			"settings": {
+				"foreground": "#86b300"
+			}
+		},
+		{
+			"name": "Regular Expressions and Escape Characters",
+			"scope": [
+				"string.regexp",
+				"constant.character",
+				"constant.other"
+			],
+			"settings": {
+				"foreground": "#4cbf99"
+			}
+		},
+		{
+			"name": "Number",
+			"scope": [
+				"constant.numeric"
+			],
+			"settings": {
+				"foreground": "#a37acc"
+			}
+		},
+		{
+			"name": "Built-in constants",
+			"scope": [
+				"constant.language"
+			],
+			"settings": {
+				"foreground": "#a37acc"
+			}
+		},
+		{
+			"name": "Variable",
+			"scope": [
+				"variable",
+				"variable.parameter.function-call"
+			],
+			"settings": {
+				"foreground": "#5c6166"
+			}
+		},
+		{
+			"name": "Member Variable",
+			"scope": [
+				"variable.member"
+			],
+			"settings": {
+				"foreground": "#f07171"
+			}
+		},
+		{
+			"name": "Language variable",
+			"scope": [
+				"variable.language"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Storage",
+			"scope": [
+				"storage"
+			],
+			"settings": {
+				"foreground": "#fa8d3e"
+			}
+		},
+		{
+			"name": "Keyword",
+			"scope": [
+				"keyword"
+			],
+			"settings": {
+				"foreground": "#fa8d3e"
+			}
+		},
+		{
+			"name": "Operators",
+			"scope": [
+				"keyword.operator"
+			],
+			"settings": {
+				"foreground": "#ed9366"
+			}
+		},
+		{
+			"name": "Separators like ; or ,",
+			"scope": [
+				"punctuation.separator",
+				"punctuation.terminator"
+			],
+			"settings": {
+				"foreground": "#5c6166b3"
+			}
+		},
+		{
+			"name": "Punctuation",
+			"scope": [
+				"punctuation.section"
+			],
+			"settings": {
+				"foreground": "#5c6166"
+			}
+		},
+		{
+			"name": "Accessor",
+			"scope": [
+				"punctuation.accessor"
+			],
+			"settings": {
+				"foreground": "#ed9366"
+			}
+		},
+		{
+			"name": "JavaScript/TypeScript interpolation punctuation",
+			"scope": [
+				"punctuation.definition.template-expression"
+			],
+			"settings": {
+				"foreground": "#fa8d3e"
+			}
+		},
+		{
+			"name": "Ruby interpolation punctuation",
+			"scope": [
+				"punctuation.section.embedded"
+			],
+			"settings": {
+				"foreground": "#fa8d3e"
+			}
+		},
+		{
+			"name": "Interpolation text",
+			"scope": [
+				"meta.embedded"
+			],
+			"settings": {
+				"foreground": "#5c6166"
+			}
+		},
+		{
+			"name": "Types fixes",
+			"scope": [
+				"source.java storage.type",
+				"source.haskell storage.type",
+				"source.c storage.type"
+			],
+			"settings": {
+				"foreground": "#399ee6"
+			}
+		},
+		{
+			"name": "Inherited class type",
+			"scope": [
+				"entity.other.inherited-class"
+			],
+			"settings": {
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Lambda arrow",
+			"scope": [
+				"storage.type.function"
+			],
+			"settings": {
+				"foreground": "#fa8d3e"
+			}
+		},
+		{
+			"name": "Java primitive variable types",
+			"scope": [
+				"source.java storage.type.primitive"
+			],
+			"settings": {
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Function name",
+			"scope": [
+				"entity.name.function"
+			],
+			"settings": {
+				"foreground": "#f2ae49"
+			}
+		},
+		{
+			"name": "Function arguments",
+			"scope": [
+				"variable.parameter",
+				"meta.parameter"
+			],
+			"settings": {
+				"foreground": "#a37acc"
+			}
+		},
+		{
+			"name": "Function call",
+			"scope": [
+				"variable.function",
+				"variable.annotation",
+				"meta.function-call.generic",
+				"support.function.go"
+			],
+			"settings": {
+				"foreground": "#f2ae49"
+			}
+		},
+		{
+			"name": "Library function",
+			"scope": [
+				"support.function",
+				"support.macro"
+			],
+			"settings": {
+				"foreground": "#f07171"
+			}
+		},
+		{
+			"name": "Imports and packages",
+			"scope": [
+				"entity.name.import",
+				"entity.name.package"
+			],
+			"settings": {
+				"foreground": "#86b300"
+			}
+		},
+		{
+			"name": "Entity name",
+			"scope": [
+				"entity.name"
+			],
+			"settings": {
+				"foreground": "#399ee6"
+			}
+		},
+		{
+			"name": "Tag",
+			"scope": [
+				"entity.name.tag",
+				"meta.tag.sgml"
+			],
+			"settings": {
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "JSX Component",
+			"scope": [
+				"support.class.component"
+			],
+			"settings": {
+				"foreground": "#399ee6"
+			}
+		},
+		{
+			"name": "Tag start/end",
+			"scope": [
+				"punctuation.definition.tag.end",
+				"punctuation.definition.tag.begin",
+				"punctuation.definition.tag"
+			],
+			"settings": {
+				"foreground": "#55b4d480"
+			}
+		},
+		{
+			"name": "Tag attribute",
+			"scope": [
+				"entity.other.attribute-name"
+			],
+			"settings": {
+				"foreground": "#f2ae49"
+			}
+		},
+		{
+			"name": "Library constant",
+			"scope": [
+				"support.constant"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#ed9366"
+			}
+		},
+		{
+			"name": "Library class/type",
+			"scope": [
+				"support.type",
+				"support.class",
+				"source.go storage.type"
+			],
+			"settings": {
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Decorators/annotation",
+			"scope": [
+				"meta.decorator variable.other",
+				"meta.decorator punctuation.decorator",
+				"storage.type.annotation"
+			],
+			"settings": {
+				"foreground": "#e6ba7e"
+			}
+		},
+		{
+			"name": "Invalid",
+			"scope": [
+				"invalid"
+			],
+			"settings": {
+				"foreground": "#e65050"
+			}
+		},
+		{
+			"name": "diff.header",
+			"scope": [
+				"meta.diff",
+				"meta.diff.header"
+			],
+			"settings": {
+				"foreground": "#c594c5"
+			}
+		},
+		{
+			"name": "Ruby class methods",
+			"scope": [
+				"source.ruby variable.other.readwrite"
+			],
+			"settings": {
+				"foreground": "#f2ae49"
+			}
+		},
+		{
+			"name": "CSS tag names",
+			"scope": [
+				"source.css entity.name.tag",
+				"source.sass entity.name.tag",
+				"source.scss entity.name.tag",
+				"source.less entity.name.tag",
+				"source.stylus entity.name.tag"
+			],
+			"settings": {
+				"foreground": "#399ee6"
+			}
+		},
+		{
+			"name": "CSS browser prefix",
+			"scope": [
+				"source.css support.type",
+				"source.sass support.type",
+				"source.scss support.type",
+				"source.less support.type",
+				"source.stylus support.type"
+			],
+			"settings": {
+				"foreground": "#787b8099"
+			}
+		},
+		{
+			"name": "CSS Properties",
+			"scope": [
+				"support.type.property-name"
+			],
+			"settings": {
+				"fontStyle": "normal",
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Search Results Numbers",
+			"scope": [
+				"constant.numeric.line-number.find-in-files - match"
+			],
+			"settings": {
+				"foreground": "#787b8099"
+			}
+		},
+		{
+			"name": "Search Results Match Numbers",
+			"scope": [
+				"constant.numeric.line-number.match"
+			],
+			"settings": {
+				"foreground": "#fa8d3e"
+			}
+		},
+		{
+			"name": "Search Results Lines",
+			"scope": [
+				"entity.name.filename.find-in-files"
+			],
+			"settings": {
+				"foreground": "#86b300"
+			}
+		},
+		{
+			"scope": [
+				"message.error"
+			],
+			"settings": {
+				"foreground": "#e65050"
+			}
+		},
+		{
+			"name": "Markup heading",
+			"scope": [
+				"markup.heading",
+				"markup.heading entity.name"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#86b300"
+			}
+		},
+		{
+			"name": "Markup links",
+			"scope": [
+				"markup.underline.link",
+				"string.other.link"
+			],
+			"settings": {
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Markup Italic",
+			"scope": [
+				"markup.italic"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#f07171"
+			}
+		},
+		{
+			"name": "Markup Bold",
+			"scope": [
+				"markup.bold"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#f07171"
+			}
+		},
+		{
+			"name": "Markup Bold/italic",
+			"scope": [
+				"markup.italic markup.bold",
+				"markup.bold markup.italic"
+			],
+			"settings": {
+				"fontStyle": "bold italic"
+			}
+		},
+		{
+			"name": "Markup Code",
+			"scope": [
+				"markup.raw"
+			],
+			"settings": {
+				"background": "#5c616605"
+			}
+		},
+		{
+			"name": "Markup Code Inline",
+			"scope": [
+				"markup.raw.inline"
+			],
+			"settings": {
+				"background": "#5c61660f"
+			}
+		},
+		{
+			"name": "Markdown Separator",
+			"scope": [
+				"meta.separator"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"background": "#5c61660f",
+				"foreground": "#787b8099"
+			}
+		},
+		{
+			"name": "Markup Blockquote",
+			"scope": [
+				"markup.quote"
+			],
+			"settings": {
+				"foreground": "#4cbf99",
+				"fontStyle": "italic"
+			}
+		},
+		{
+			"name": "Markup List Bullet",
+			"scope": [
+				"markup.list punctuation.definition.list.begin"
+			],
+			"settings": {
+				"foreground": "#f2ae49"
+			}
+		},
+		{
+			"name": "Markup added",
+			"scope": [
+				"markup.inserted"
+			],
+			"settings": {
+				"foreground": "#6cbf43"
+			}
+		},
+		{
+			"name": "Markup modified",
+			"scope": [
+				"markup.changed"
+			],
+			"settings": {
+				"foreground": "#478acc"
+			}
+		},
+		{
+			"name": "Markup removed",
+			"scope": [
+				"markup.deleted"
+			],
+			"settings": {
+				"foreground": "#ff7383"
+			}
+		},
+		{
+			"name": "Markup Strike",
+			"scope": [
+				"markup.strike"
+			],
+			"settings": {
+				"foreground": "#e6ba7e"
+			}
+		},
+		{
+			"name": "Markup Table",
+			"scope": [
+				"markup.table"
+			],
+			"settings": {
+				"background": "#5c61660f",
+				"foreground": "#55b4d4"
+			}
+		},
+		{
+			"name": "Markup Raw Inline",
+			"scope": [
+				"text.html.markdown markup.inline.raw"
+			],
+			"settings": {
+				"foreground": "#ed9366"
+			}
+		},
+		{
+			"name": "Markdown - Line Break",
+			"scope": [
+				"text.html.markdown meta.dummy.line-break"
+			],
+			"settings": {
+				"background": "#787b8099",
+				"foreground": "#787b8099"
+			}
+		},
+		{
+			"name": "Markdown - Raw Block Fenced",
+			"scope": [
+				"punctuation.definition.markdown"
+			],
+			"settings": {
+				"background": "#5c6166",
+				"foreground": "#787b8099"
+			}
+		}
+	],
+	"semanticHighlighting": true,
+	"semanticTokenColors": {
+		"parameter.label": "#5c6166"
+	}
+}

assets/themes/src/vscode/ayu/ayu-mirage.json 🔗

@@ -0,0 +1,847 @@
+{
+	"type": "dark",
+	"colors": {
+		"focusBorder": "#ffcc66b3",
+		"foreground": "#707a8c",
+		"widget.shadow": "#12151cb3",
+		"selection.background": "#409fff40",
+		"icon.foreground": "#707a8c",
+		"errorForeground": "#ff6666",
+		"descriptionForeground": "#707a8c",
+		"textBlockQuote.background": "#1c212b",
+		"textLink.foreground": "#ffcc66",
+		"textLink.activeForeground": "#ffcc66",
+		"textPreformat.foreground": "#cccac2",
+		"button.background": "#ffcc66",
+		"button.foreground": "#805500",
+		"button.hoverBackground": "#fac761",
+		"button.secondaryBackground": "#707a8c33",
+		"button.secondaryForeground": "#cccac2",
+		"button.secondaryHoverBackground": "#707a8c80",
+		"dropdown.background": "#242936",
+		"dropdown.foreground": "#707a8c",
+		"dropdown.border": "#707a8c45",
+		"input.background": "#242936",
+		"input.border": "#707a8c45",
+		"input.foreground": "#cccac2",
+		"input.placeholderForeground": "#707a8c80",
+		"inputOption.activeBorder": "#ffcc664d",
+		"inputOption.activeBackground": "#ffcc6633",
+		"inputOption.activeForeground": "#ffcc66",
+		"inputValidation.errorBackground": "#242936",
+		"inputValidation.errorBorder": "#ff6666",
+		"inputValidation.infoBackground": "#1f2430",
+		"inputValidation.infoBorder": "#5ccfe6",
+		"inputValidation.warningBackground": "#1f2430",
+		"inputValidation.warningBorder": "#ffd173",
+		"scrollbar.shadow": "#171b2400",
+		"scrollbarSlider.background": "#707a8c66",
+		"scrollbarSlider.hoverBackground": "#707a8c99",
+		"scrollbarSlider.activeBackground": "#707a8cb3",
+		"badge.background": "#ffcc6633",
+		"badge.foreground": "#ffcc66",
+		"progressBar.background": "#ffcc66",
+		"list.activeSelectionBackground": "#63759926",
+		"list.activeSelectionForeground": "#cccac2",
+		"list.focusBackground": "#63759926",
+		"list.focusForeground": "#cccac2",
+		"list.focusOutline": "#63759926",
+		"list.highlightForeground": "#ffcc66",
+		"list.deemphasizedForeground": "#ff6666",
+		"list.hoverBackground": "#63759926",
+		"list.inactiveSelectionBackground": "#69758c1f",
+		"list.inactiveSelectionForeground": "#707a8c",
+		"list.invalidItemForeground": "#707a8c4d",
+		"list.errorForeground": "#ff6666",
+		"tree.indentGuidesStroke": "#8a919959",
+		"listFilterWidget.background": "#1c212b",
+		"listFilterWidget.outline": "#ffcc66",
+		"listFilterWidget.noMatchesOutline": "#ff6666",
+		"list.filterMatchBackground": "#5c467266",
+		"list.filterMatchBorder": "#69538066",
+		"activityBar.background": "#1f2430",
+		"activityBar.foreground": "#707a8ccc",
+		"activityBar.inactiveForeground": "#707a8c99",
+		"activityBar.border": "#1f2430",
+		"activityBar.activeBorder": "#ffcc66",
+		"activityBarBadge.background": "#ffcc66",
+		"activityBarBadge.foreground": "#805500",
+		"sideBar.background": "#1f2430",
+		"sideBar.border": "#1f2430",
+		"sideBarTitle.foreground": "#707a8c",
+		"sideBarSectionHeader.background": "#1f2430",
+		"sideBarSectionHeader.foreground": "#707a8c",
+		"sideBarSectionHeader.border": "#1f2430",
+		"minimap.background": "#1f2430",
+		"minimap.selectionHighlight": "#409fff40",
+		"minimap.errorHighlight": "#ff6666",
+		"minimap.findMatchHighlight": "#695380",
+		"minimapGutter.addedBackground": "#87d96c",
+		"minimapGutter.modifiedBackground": "#80bfff",
+		"minimapGutter.deletedBackground": "#f27983",
+		"editorGroup.border": "#171b24",
+		"editorGroup.background": "#1c212b",
+		"editorGroupHeader.noTabsBackground": "#1f2430",
+		"editorGroupHeader.tabsBackground": "#1f2430",
+		"editorGroupHeader.tabsBorder": "#1f2430",
+		"tab.activeBackground": "#1f2430",
+		"tab.activeForeground": "#cccac2",
+		"tab.border": "#1f2430",
+		"tab.activeBorder": "#ffcc66",
+		"tab.unfocusedActiveBorder": "#707a8c",
+		"tab.inactiveBackground": "#1f2430",
+		"tab.inactiveForeground": "#707a8c",
+		"tab.unfocusedActiveForeground": "#707a8c",
+		"tab.unfocusedInactiveForeground": "#707a8c",
+		"editor.background": "#1f2430",
+		"editor.foreground": "#cccac2",
+		"editorLineNumber.foreground": "#8a919966",
+		"editorLineNumber.activeForeground": "#8a9199cc",
+		"editorCursor.foreground": "#ffcc66",
+		"editor.inactiveSelectionBackground": "#409fff21",
+		"editor.selectionBackground": "#409fff40",
+		"editor.selectionHighlightBackground": "#87d96c26",
+		"editor.selectionHighlightBorder": "#87d96c00",
+		"editor.wordHighlightBackground": "#80bfff14",
+		"editor.wordHighlightStrongBackground": "#87d96c14",
+		"editor.wordHighlightBorder": "#80bfff80",
+		"editor.wordHighlightStrongBorder": "#87d96c80",
+		"editor.findMatchBackground": "#695380",
+		"editor.findMatchBorder": "#695380",
+		"editor.findMatchHighlightBackground": "#69538066",
+		"editor.findMatchHighlightBorder": "#5c467266",
+		"editor.findRangeHighlightBackground": "#69538040",
+		"editor.rangeHighlightBackground": "#69538033",
+		"editor.lineHighlightBackground": "#1a1f29",
+		"editorLink.activeForeground": "#ffcc66",
+		"editorWhitespace.foreground": "#8a919966",
+		"editorIndentGuide.background": "#8a91992e",
+		"editorIndentGuide.activeBackground": "#8a919959",
+		"editorRuler.foreground": "#8a91992e",
+		"editorCodeLens.foreground": "#b8cfe680",
+		"editorBracketMatch.background": "#8a91994d",
+		"editorBracketMatch.border": "#8a91994d",
+		"editor.snippetTabstopHighlightBackground": "#87d96c33",
+		"editorOverviewRuler.border": "#171b24",
+		"editorOverviewRuler.modifiedForeground": "#80bfff",
+		"editorOverviewRuler.addedForeground": "#87d96c",
+		"editorOverviewRuler.deletedForeground": "#f27983",
+		"editorOverviewRuler.errorForeground": "#ff6666",
+		"editorOverviewRuler.warningForeground": "#ffcc66",
+		"editorOverviewRuler.bracketMatchForeground": "#8a9199b3",
+		"editorOverviewRuler.wordHighlightForeground": "#80bfff66",
+		"editorOverviewRuler.wordHighlightStrongForeground": "#87d96c66",
+		"editorOverviewRuler.findMatchForeground": "#695380",
+		"editorError.foreground": "#ff6666",
+		"editorWarning.foreground": "#ffcc66",
+		"editorGutter.modifiedBackground": "#80bfffcc",
+		"editorGutter.addedBackground": "#87d96ccc",
+		"editorGutter.deletedBackground": "#f27983cc",
+		"diffEditor.insertedTextBackground": "#87d96c1f",
+		"diffEditor.removedTextBackground": "#f279831f",
+		"diffEditor.diagonalFill": "#171b24",
+		"editorWidget.background": "#1c212b",
+		"editorWidget.border": "#171b24",
+		"editorHoverWidget.background": "#1c212b",
+		"editorHoverWidget.border": "#171b24",
+		"editorSuggestWidget.background": "#1c212b",
+		"editorSuggestWidget.border": "#171b24",
+		"editorSuggestWidget.highlightForeground": "#ffcc66",
+		"editorSuggestWidget.selectedBackground": "#63759926",
+		"debugExceptionWidget.border": "#171b24",
+		"debugExceptionWidget.background": "#1c212b",
+		"editorMarkerNavigation.background": "#1c212b",
+		"peekView.border": "#63759926",
+		"peekViewTitle.background": "#63759926",
+		"peekViewTitleDescription.foreground": "#707a8c",
+		"peekViewTitleLabel.foreground": "#cccac2",
+		"peekViewEditor.background": "#1c212b",
+		"peekViewEditor.matchHighlightBackground": "#69538066",
+		"peekViewEditor.matchHighlightBorder": "#5c467266",
+		"peekViewResult.background": "#1c212b",
+		"peekViewResult.fileForeground": "#cccac2",
+		"peekViewResult.lineForeground": "#707a8c",
+		"peekViewResult.matchHighlightBackground": "#69538066",
+		"peekViewResult.selectionBackground": "#63759926",
+		"panel.background": "#1f2430",
+		"panel.border": "#171b24",
+		"panelTitle.activeBorder": "#ffcc66",
+		"panelTitle.activeForeground": "#cccac2",
+		"panelTitle.inactiveForeground": "#707a8c",
+		"statusBar.background": "#1f2430",
+		"statusBar.foreground": "#707a8c",
+		"statusBar.border": "#1f2430",
+		"statusBar.debuggingBackground": "#f29e74",
+		"statusBar.debuggingForeground": "#242936",
+		"statusBar.noFolderBackground": "#1c212b",
+		"statusBarItem.activeBackground": "#707a8c33",
+		"statusBarItem.hoverBackground": "#707a8c33",
+		"statusBarItem.prominentBackground": "#171b24",
+		"statusBarItem.prominentHoverBackground": "#00000030",
+		"statusBarItem.remoteBackground": "#ffcc66",
+		"statusBarItem.remoteForeground": "#805500",
+		"titleBar.activeBackground": "#1f2430",
+		"titleBar.activeForeground": "#cccac2",
+		"titleBar.inactiveBackground": "#1f2430",
+		"titleBar.inactiveForeground": "#707a8c",
+		"titleBar.border": "#1f2430",
+		"extensionButton.prominentForeground": "#805500",
+		"extensionButton.prominentBackground": "#ffcc66",
+		"extensionButton.prominentHoverBackground": "#fac761",
+		"pickerGroup.border": "#171b24",
+		"pickerGroup.foreground": "#707a8c80",
+		"debugToolBar.background": "#1c212b",
+		"debugIcon.breakpointForeground": "#f29e74",
+		"debugIcon.breakpointDisabledForeground": "#f29e7480",
+		"debugConsoleInputIcon.foreground": "#ffcc66",
+		"welcomePage.tileBackground": "#1f2430",
+		"welcomePage.tileShadow": "#12151cb3",
+		"welcomePage.progress.background": "#1a1f29",
+		"welcomePage.buttonBackground": "#ffcc6666",
+		"walkThrough.embeddedEditorBackground": "#1c212b",
+		"gitDecoration.modifiedResourceForeground": "#80bfffb3",
+		"gitDecoration.deletedResourceForeground": "#f27983b3",
+		"gitDecoration.untrackedResourceForeground": "#87d96cb3",
+		"gitDecoration.ignoredResourceForeground": "#707a8c80",
+		"gitDecoration.conflictingResourceForeground": "",
+		"gitDecoration.submoduleResourceForeground": "#dfbfffb3",
+		"settings.headerForeground": "#cccac2",
+		"settings.modifiedItemIndicator": "#80bfff",
+		"keybindingLabel.background": "#707a8c1a",
+		"keybindingLabel.foreground": "#cccac2",
+		"keybindingLabel.border": "#cccac21a",
+		"keybindingLabel.bottomBorder": "#cccac21a",
+		"terminal.background": "#1f2430",
+		"terminal.foreground": "#cccac2",
+		"terminal.ansiBlack": "#171b24",
+		"terminal.ansiRed": "#ed8274",
+		"terminal.ansiGreen": "#87d96c",
+		"terminal.ansiYellow": "#facc6e",
+		"terminal.ansiBlue": "#6dcbfa",
+		"terminal.ansiMagenta": "#dabafa",
+		"terminal.ansiCyan": "#90e1c6",
+		"terminal.ansiWhite": "#c7c7c7",
+		"terminal.ansiBrightBlack": "#686868",
+		"terminal.ansiBrightRed": "#f28779",
+		"terminal.ansiBrightGreen": "#d5ff80",
+		"terminal.ansiBrightYellow": "#ffd173",
+		"terminal.ansiBrightBlue": "#73d0ff",
+		"terminal.ansiBrightMagenta": "#dfbfff",
+		"terminal.ansiBrightCyan": "#95e6cb",
+		"terminal.ansiBrightWhite": "#ffffff"
+	},
+	"tokenColors": [
+		{
+			"settings": {
+				"background": "#1f2430",
+				"foreground": "#cccac2"
+			}
+		},
+		{
+			"name": "Comment",
+			"scope": [
+				"comment"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#b8cfe680"
+			}
+		},
+		{
+			"name": "String",
+			"scope": [
+				"string",
+				"constant.other.symbol"
+			],
+			"settings": {
+				"foreground": "#d5ff80"
+			}
+		},
+		{
+			"name": "Regular Expressions and Escape Characters",
+			"scope": [
+				"string.regexp",
+				"constant.character",
+				"constant.other"
+			],
+			"settings": {
+				"foreground": "#95e6cb"
+			}
+		},
+		{
+			"name": "Number",
+			"scope": [
+				"constant.numeric"
+			],
+			"settings": {
+				"foreground": "#dfbfff"
+			}
+		},
+		{
+			"name": "Built-in constants",
+			"scope": [
+				"constant.language"
+			],
+			"settings": {
+				"foreground": "#dfbfff"
+			}
+		},
+		{
+			"name": "Variable",
+			"scope": [
+				"variable",
+				"variable.parameter.function-call"
+			],
+			"settings": {
+				"foreground": "#cccac2"
+			}
+		},
+		{
+			"name": "Member Variable",
+			"scope": [
+				"variable.member"
+			],
+			"settings": {
+				"foreground": "#f28779"
+			}
+		},
+		{
+			"name": "Language variable",
+			"scope": [
+				"variable.language"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Storage",
+			"scope": [
+				"storage"
+			],
+			"settings": {
+				"foreground": "#ffad66"
+			}
+		},
+		{
+			"name": "Keyword",
+			"scope": [
+				"keyword"
+			],
+			"settings": {
+				"foreground": "#ffad66"
+			}
+		},
+		{
+			"name": "Operators",
+			"scope": [
+				"keyword.operator"
+			],
+			"settings": {
+				"foreground": "#f29e74"
+			}
+		},
+		{
+			"name": "Separators like ; or ,",
+			"scope": [
+				"punctuation.separator",
+				"punctuation.terminator"
+			],
+			"settings": {
+				"foreground": "#cccac2b3"
+			}
+		},
+		{
+			"name": "Punctuation",
+			"scope": [
+				"punctuation.section"
+			],
+			"settings": {
+				"foreground": "#cccac2"
+			}
+		},
+		{
+			"name": "Accessor",
+			"scope": [
+				"punctuation.accessor"
+			],
+			"settings": {
+				"foreground": "#f29e74"
+			}
+		},
+		{
+			"name": "JavaScript/TypeScript interpolation punctuation",
+			"scope": [
+				"punctuation.definition.template-expression"
+			],
+			"settings": {
+				"foreground": "#ffad66"
+			}
+		},
+		{
+			"name": "Ruby interpolation punctuation",
+			"scope": [
+				"punctuation.section.embedded"
+			],
+			"settings": {
+				"foreground": "#ffad66"
+			}
+		},
+		{
+			"name": "Interpolation text",
+			"scope": [
+				"meta.embedded"
+			],
+			"settings": {
+				"foreground": "#cccac2"
+			}
+		},
+		{
+			"name": "Types fixes",
+			"scope": [
+				"source.java storage.type",
+				"source.haskell storage.type",
+				"source.c storage.type"
+			],
+			"settings": {
+				"foreground": "#73d0ff"
+			}
+		},
+		{
+			"name": "Inherited class type",
+			"scope": [
+				"entity.other.inherited-class"
+			],
+			"settings": {
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Lambda arrow",
+			"scope": [
+				"storage.type.function"
+			],
+			"settings": {
+				"foreground": "#ffad66"
+			}
+		},
+		{
+			"name": "Java primitive variable types",
+			"scope": [
+				"source.java storage.type.primitive"
+			],
+			"settings": {
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Function name",
+			"scope": [
+				"entity.name.function"
+			],
+			"settings": {
+				"foreground": "#ffd173"
+			}
+		},
+		{
+			"name": "Function arguments",
+			"scope": [
+				"variable.parameter",
+				"meta.parameter"
+			],
+			"settings": {
+				"foreground": "#dfbfff"
+			}
+		},
+		{
+			"name": "Function call",
+			"scope": [
+				"variable.function",
+				"variable.annotation",
+				"meta.function-call.generic",
+				"support.function.go"
+			],
+			"settings": {
+				"foreground": "#ffd173"
+			}
+		},
+		{
+			"name": "Library function",
+			"scope": [
+				"support.function",
+				"support.macro"
+			],
+			"settings": {
+				"foreground": "#f28779"
+			}
+		},
+		{
+			"name": "Imports and packages",
+			"scope": [
+				"entity.name.import",
+				"entity.name.package"
+			],
+			"settings": {
+				"foreground": "#d5ff80"
+			}
+		},
+		{
+			"name": "Entity name",
+			"scope": [
+				"entity.name"
+			],
+			"settings": {
+				"foreground": "#73d0ff"
+			}
+		},
+		{
+			"name": "Tag",
+			"scope": [
+				"entity.name.tag",
+				"meta.tag.sgml"
+			],
+			"settings": {
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "JSX Component",
+			"scope": [
+				"support.class.component"
+			],
+			"settings": {
+				"foreground": "#73d0ff"
+			}
+		},
+		{
+			"name": "Tag start/end",
+			"scope": [
+				"punctuation.definition.tag.end",
+				"punctuation.definition.tag.begin",
+				"punctuation.definition.tag"
+			],
+			"settings": {
+				"foreground": "#5ccfe680"
+			}
+		},
+		{
+			"name": "Tag attribute",
+			"scope": [
+				"entity.other.attribute-name"
+			],
+			"settings": {
+				"foreground": "#ffd173"
+			}
+		},
+		{
+			"name": "Library constant",
+			"scope": [
+				"support.constant"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#f29e74"
+			}
+		},
+		{
+			"name": "Library class/type",
+			"scope": [
+				"support.type",
+				"support.class",
+				"source.go storage.type"
+			],
+			"settings": {
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Decorators/annotation",
+			"scope": [
+				"meta.decorator variable.other",
+				"meta.decorator punctuation.decorator",
+				"storage.type.annotation"
+			],
+			"settings": {
+				"foreground": "#ffdfb3"
+			}
+		},
+		{
+			"name": "Invalid",
+			"scope": [
+				"invalid"
+			],
+			"settings": {
+				"foreground": "#ff6666"
+			}
+		},
+		{
+			"name": "diff.header",
+			"scope": [
+				"meta.diff",
+				"meta.diff.header"
+			],
+			"settings": {
+				"foreground": "#c594c5"
+			}
+		},
+		{
+			"name": "Ruby class methods",
+			"scope": [
+				"source.ruby variable.other.readwrite"
+			],
+			"settings": {
+				"foreground": "#ffd173"
+			}
+		},
+		{
+			"name": "CSS tag names",
+			"scope": [
+				"source.css entity.name.tag",
+				"source.sass entity.name.tag",
+				"source.scss entity.name.tag",
+				"source.less entity.name.tag",
+				"source.stylus entity.name.tag"
+			],
+			"settings": {
+				"foreground": "#73d0ff"
+			}
+		},
+		{
+			"name": "CSS browser prefix",
+			"scope": [
+				"source.css support.type",
+				"source.sass support.type",
+				"source.scss support.type",
+				"source.less support.type",
+				"source.stylus support.type"
+			],
+			"settings": {
+				"foreground": "#b8cfe680"
+			}
+		},
+		{
+			"name": "CSS Properties",
+			"scope": [
+				"support.type.property-name"
+			],
+			"settings": {
+				"fontStyle": "normal",
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Search Results Numbers",
+			"scope": [
+				"constant.numeric.line-number.find-in-files - match"
+			],
+			"settings": {
+				"foreground": "#b8cfe680"
+			}
+		},
+		{
+			"name": "Search Results Match Numbers",
+			"scope": [
+				"constant.numeric.line-number.match"
+			],
+			"settings": {
+				"foreground": "#ffad66"
+			}
+		},
+		{
+			"name": "Search Results Lines",
+			"scope": [
+				"entity.name.filename.find-in-files"
+			],
+			"settings": {
+				"foreground": "#d5ff80"
+			}
+		},
+		{
+			"scope": [
+				"message.error"
+			],
+			"settings": {
+				"foreground": "#ff6666"
+			}
+		},
+		{
+			"name": "Markup heading",
+			"scope": [
+				"markup.heading",
+				"markup.heading entity.name"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#d5ff80"
+			}
+		},
+		{
+			"name": "Markup links",
+			"scope": [
+				"markup.underline.link",
+				"string.other.link"
+			],
+			"settings": {
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Markup Italic",
+			"scope": [
+				"markup.italic"
+			],
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#f28779"
+			}
+		},
+		{
+			"name": "Markup Bold",
+			"scope": [
+				"markup.bold"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#f28779"
+			}
+		},
+		{
+			"name": "Markup Bold/italic",
+			"scope": [
+				"markup.italic markup.bold",
+				"markup.bold markup.italic"
+			],
+			"settings": {
+				"fontStyle": "bold italic"
+			}
+		},
+		{
+			"name": "Markup Code",
+			"scope": [
+				"markup.raw"
+			],
+			"settings": {
+				"background": "#cccac205"
+			}
+		},
+		{
+			"name": "Markup Code Inline",
+			"scope": [
+				"markup.raw.inline"
+			],
+			"settings": {
+				"background": "#cccac20f"
+			}
+		},
+		{
+			"name": "Markdown Separator",
+			"scope": [
+				"meta.separator"
+			],
+			"settings": {
+				"fontStyle": "bold",
+				"background": "#cccac20f",
+				"foreground": "#b8cfe680"
+			}
+		},
+		{
+			"name": "Markup Blockquote",
+			"scope": [
+				"markup.quote"
+			],
+			"settings": {
+				"foreground": "#95e6cb",
+				"fontStyle": "italic"
+			}
+		},
+		{
+			"name": "Markup List Bullet",
+			"scope": [
+				"markup.list punctuation.definition.list.begin"
+			],
+			"settings": {
+				"foreground": "#ffd173"
+			}
+		},
+		{
+			"name": "Markup added",
+			"scope": [
+				"markup.inserted"
+			],
+			"settings": {
+				"foreground": "#87d96c"
+			}
+		},
+		{
+			"name": "Markup modified",
+			"scope": [
+				"markup.changed"
+			],
+			"settings": {
+				"foreground": "#80bfff"
+			}
+		},
+		{
+			"name": "Markup removed",
+			"scope": [
+				"markup.deleted"
+			],
+			"settings": {
+				"foreground": "#f27983"
+			}
+		},
+		{
+			"name": "Markup Strike",
+			"scope": [
+				"markup.strike"
+			],
+			"settings": {
+				"foreground": "#ffdfb3"
+			}
+		},
+		{
+			"name": "Markup Table",
+			"scope": [
+				"markup.table"
+			],
+			"settings": {
+				"background": "#cccac20f",
+				"foreground": "#5ccfe6"
+			}
+		},
+		{
+			"name": "Markup Raw Inline",
+			"scope": [
+				"text.html.markdown markup.inline.raw"
+			],
+			"settings": {
+				"foreground": "#f29e74"
+			}
+		},
+		{
+			"name": "Markdown - Line Break",
+			"scope": [
+				"text.html.markdown meta.dummy.line-break"
+			],
+			"settings": {
+				"background": "#b8cfe680",
+				"foreground": "#b8cfe680"
+			}
+		},
+		{
+			"name": "Markdown - Raw Block Fenced",
+			"scope": [
+				"punctuation.definition.markdown"
+			],
+			"settings": {
+				"background": "#cccac2",
+				"foreground": "#b8cfe680"
+			}
+		}
+	],
+	"semanticHighlighting": true,
+	"semanticTokenColors": {
+		"parameter.label": "#cccac2"
+	}
+}

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

@@ -0,0 +1,21 @@
+{
+  "name": "Ayu",
+  "author": "dempfi (Ike Ku)",
+  "themes": [
+    {
+      "name": "Ayu Light",
+      "file_name": "ayu-light.json",
+      "appearance": "light"
+    },
+    {
+      "name": "Ayu Mirage",
+      "file_name": "ayu-mirage.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Ayu Dark",
+      "file_name": "ayu-dark.json",
+      "appearance": "dark"
+    }
+  ]
+}

assets/themes/src/vscode/dracula/LICENSE 🔗

@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Dracula Theme
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vscode/dracula/dracula.json 🔗

@@ -0,0 +1,1067 @@
+{
+  "$schema": "vscode://schemas/color-theme",
+  "name": "Dracula",
+  "author": "Zeno Rocha",
+  "maintainers": ["Derek P Sifford <dereksifford@gmail.com>"],
+  "semanticClass": "theme.dracula",
+  "semanticHighlighting": true,
+  "dracula": {
+    "base": [
+      "#282A36",
+      "#F8F8F2",
+      "#44475A",
+      "#6272A4",
+      "#8BE9FD",
+      "#50FA7B",
+      "#FFB86C",
+      "#FF79C6",
+      "#BD93F9",
+      "#FF5555",
+      "#F1FA8C"
+    ],
+    "ansi": [
+      "#21222C",
+      "#FF5555",
+      "#50FA7B",
+      "#F1FA8C",
+      "#BD93F9",
+      "#FF79C6",
+      "#8BE9FD",
+      "#F8F8F2",
+      "#6272A4",
+      "#FF6E6E",
+      "#69FF94",
+      "#FFFFA5",
+      "#D6ACFF",
+      "#FF92DF",
+      "#A4FFFF",
+      "#FFFFFF"
+    ],
+    "brightOther": ["#E9F284", "#8BE9FE"],
+    "other": [
+      "#44475A75",
+      "#FFFFFF1A",
+      "#FFFFFF",
+      "#44475A70",
+      "#424450",
+      "#343746",
+      "#21222C",
+      "#191A21"
+    ]
+  },
+  "colors": {
+    "terminal.background": "#282A36",
+    "terminal.foreground": "#F8F8F2",
+    "terminal.ansiBrightBlack": "#6272A4",
+    "terminal.ansiBrightRed": "#FF6E6E",
+    "terminal.ansiBrightGreen": "#69FF94",
+    "terminal.ansiBrightYellow": "#FFFFA5",
+    "terminal.ansiBrightBlue": "#D6ACFF",
+    "terminal.ansiBrightMagenta": "#FF92DF",
+    "terminal.ansiBrightCyan": "#A4FFFF",
+    "terminal.ansiBrightWhite": "#FFFFFF",
+    "terminal.ansiBlack": "#21222C",
+    "terminal.ansiRed": "#FF5555",
+    "terminal.ansiGreen": "#50FA7B",
+    "terminal.ansiYellow": "#F1FA8C",
+    "terminal.ansiBlue": "#BD93F9",
+    "terminal.ansiMagenta": "#FF79C6",
+    "terminal.ansiCyan": "#8BE9FD",
+    "terminal.ansiWhite": "#F8F8F2",
+    "focusBorder": "#6272A4",
+    "foreground": "#F8F8F2",
+    "selection.background": "#BD93F9",
+    "errorForeground": "#FF5555",
+    "button.background": "#44475A",
+    "button.foreground": "#F8F8F2",
+    "button.secondaryBackground": "#282A36",
+    "button.secondaryForeground": "#F8F8F2",
+    "button.secondaryHoverBackground": "#343746",
+    "dropdown.background": "#343746",
+    "dropdown.border": "#191A21",
+    "dropdown.foreground": "#F8F8F2",
+    "input.background": "#282A36",
+    "input.foreground": "#F8F8F2",
+    "input.border": "#191A21",
+    "input.placeholderForeground": "#6272A4",
+    "inputOption.activeBorder": "#BD93F9",
+    "inputValidation.infoBorder": "#FF79C6",
+    "inputValidation.warningBorder": "#FFB86C",
+    "inputValidation.errorBorder": "#FF5555",
+    "badge.foreground": "#F8F8F2",
+    "badge.background": "#44475A",
+    "progressBar.background": "#FF79C6",
+    "list.activeSelectionBackground": "#44475A",
+    "list.activeSelectionForeground": "#F8F8F2",
+    "list.dropBackground": "#44475A",
+    "list.focusBackground": "#44475A75",
+    "list.highlightForeground": "#8BE9FD",
+    "list.hoverBackground": "#44475A75",
+    "list.inactiveSelectionBackground": "#44475A75",
+    "list.warningForeground": "#FFB86C",
+    "list.errorForeground": "#FF5555",
+    "activityBar.background": "#343746",
+    "activityBar.inactiveForeground": "#6272A4",
+    "activityBar.foreground": "#F8F8F2",
+    "activityBar.activeBorder": "#FF79C680",
+    "activityBar.activeBackground": "#BD93F910",
+    "activityBarBadge.background": "#FF79C6",
+    "activityBarBadge.foreground": "#F8F8F2",
+    "sideBar.background": "#21222C",
+    "sideBarTitle.foreground": "#F8F8F2",
+    "sideBarSectionHeader.background": "#282A36",
+    "sideBarSectionHeader.border": "#191A21",
+    "editorGroup.border": "#BD93F9",
+    "editorGroup.dropBackground": "#44475A70",
+    "editorGroupHeader.tabsBackground": "#191A21",
+    "tab.activeBackground": "#282A36",
+    "tab.activeForeground": "#F8F8F2",
+    "tab.border": "#191A21",
+    "tab.activeBorderTop": "#FF79C680",
+    "tab.inactiveBackground": "#21222C",
+    "tab.inactiveForeground": "#6272A4",
+    "editor.foreground": "#F8F8F2",
+    "editor.background": "#282A36",
+    "editorLineNumber.foreground": "#6272A4",
+    "editor.selectionBackground": "#44475A",
+    "editor.selectionHighlightBackground": "#424450",
+    "editor.foldBackground": "#21222C80",
+    "editor.wordHighlightBackground": "#8BE9FD50",
+    "editor.wordHighlightStrongBackground": "#50FA7B50",
+    "editor.findMatchBackground": "#FFB86C80",
+    "editor.findMatchHighlightBackground": "#FFFFFF40",
+    "editor.findRangeHighlightBackground": "#44475A75",
+    "editor.hoverHighlightBackground": "#8BE9FD50",
+    "editor.lineHighlightBorder": "#44475A",
+    "editorLink.activeForeground": "#8BE9FD",
+    "editor.rangeHighlightBackground": "#BD93F915",
+    "editor.snippetTabstopHighlightBackground": "#282A36",
+    "editor.snippetTabstopHighlightBorder": "#6272A4",
+    "editor.snippetFinalTabstopHighlightBackground": "#282A36",
+    "editor.snippetFinalTabstopHighlightBorder": "#50FA7B",
+    "editorWhitespace.foreground": "#FFFFFF1A",
+    "editorIndentGuide.background": "#FFFFFF1A",
+    "editorIndentGuide.activeBackground": "#FFFFFF45",
+    "editorRuler.foreground": "#FFFFFF1A",
+    "editorCodeLens.foreground": "#6272A4",
+    "editorBracketHighlight.foreground1": "#F8F8F2",
+    "editorBracketHighlight.foreground2": "#FF79C6",
+    "editorBracketHighlight.foreground3": "#8BE9FD",
+    "editorBracketHighlight.foreground4": "#50FA7B",
+    "editorBracketHighlight.foreground5": "#BD93F9",
+    "editorBracketHighlight.foreground6": "#FFB86C",
+    "editorBracketHighlight.unexpectedBracket.foreground": "#FF5555",
+    "editorOverviewRuler.border": "#191A21",
+    "editorOverviewRuler.selectionHighlightForeground": "#FFB86C",
+    "editorOverviewRuler.wordHighlightForeground": "#8BE9FD",
+    "editorOverviewRuler.wordHighlightStrongForeground": "#50FA7B",
+    "editorOverviewRuler.modifiedForeground": "#8BE9FD80",
+    "editorOverviewRuler.addedForeground": "#50FA7B80",
+    "editorOverviewRuler.deletedForeground": "#FF555580",
+    "editorOverviewRuler.errorForeground": "#FF555580",
+    "editorOverviewRuler.warningForeground": "#FFB86C80",
+    "editorOverviewRuler.infoForeground": "#8BE9FD80",
+    "editorError.foreground": "#FF5555",
+    "editorWarning.foreground": "#8BE9FD",
+    "editorGutter.modifiedBackground": "#8BE9FD80",
+    "editorGutter.addedBackground": "#50FA7B80",
+    "editorGutter.deletedBackground": "#FF555580",
+    "gitDecoration.modifiedResourceForeground": "#8BE9FD",
+    "gitDecoration.deletedResourceForeground": "#FF5555",
+    "gitDecoration.untrackedResourceForeground": "#50FA7B",
+    "gitDecoration.ignoredResourceForeground": "#6272A4",
+    "gitDecoration.conflictingResourceForeground": "#FFB86C",
+    "diffEditor.insertedTextBackground": "#50FA7B20",
+    "diffEditor.removedTextBackground": "#FF555550",
+    "inlineChat.regionHighlight": "#343746",
+    "editorWidget.background": "#21222C",
+    "editorSuggestWidget.background": "#21222C",
+    "editorSuggestWidget.foreground": "#F8F8F2",
+    "editorSuggestWidget.selectedBackground": "#44475A",
+    "editorHoverWidget.background": "#282A36",
+    "editorHoverWidget.border": "#6272A4",
+    "editorMarkerNavigation.background": "#21222C",
+    "peekView.border": "#44475A",
+    "peekViewEditor.background": "#282A36",
+    "peekViewEditor.matchHighlightBackground": "#F1FA8C80",
+    "peekViewResult.background": "#21222C",
+    "peekViewResult.fileForeground": "#F8F8F2",
+    "peekViewResult.lineForeground": "#F8F8F2",
+    "peekViewResult.matchHighlightBackground": "#F1FA8C80",
+    "peekViewResult.selectionBackground": "#44475A",
+    "peekViewResult.selectionForeground": "#F8F8F2",
+    "peekViewTitle.background": "#191A21",
+    "peekViewTitleDescription.foreground": "#6272A4",
+    "peekViewTitleLabel.foreground": "#F8F8F2",
+    "merge.currentHeaderBackground": "#50FA7B90",
+    "merge.incomingHeaderBackground": "#BD93F990",
+    "editorOverviewRuler.currentContentForeground": "#50FA7B",
+    "editorOverviewRuler.incomingContentForeground": "#BD93F9",
+    "panel.background": "#282A36",
+    "panel.border": "#BD93F9",
+    "panelTitle.activeBorder": "#FF79C6",
+    "panelTitle.activeForeground": "#F8F8F2",
+    "panelTitle.inactiveForeground": "#6272A4",
+    "statusBar.background": "#191A21",
+    "statusBar.foreground": "#F8F8F2",
+    "statusBar.debuggingBackground": "#FF5555",
+    "statusBar.debuggingForeground": "#191A21",
+    "statusBar.noFolderBackground": "#191A21",
+    "statusBar.noFolderForeground": "#F8F8F2",
+    "statusBarItem.prominentBackground": "#FF5555",
+    "statusBarItem.prominentHoverBackground": "#FFB86C",
+    "statusBarItem.remoteForeground": "#282A36",
+    "statusBarItem.remoteBackground": "#BD93F9",
+    "titleBar.activeBackground": "#21222C",
+    "titleBar.activeForeground": "#F8F8F2",
+    "titleBar.inactiveBackground": "#191A21",
+    "titleBar.inactiveForeground": "#6272A4",
+    "extensionButton.prominentForeground": "#F8F8F2",
+    "extensionButton.prominentBackground": "#50FA7B90",
+    "extensionButton.prominentHoverBackground": "#50FA7B60",
+    "pickerGroup.border": "#BD93F9",
+    "pickerGroup.foreground": "#8BE9FD",
+    "debugToolBar.background": "#21222C",
+    "walkThrough.embeddedEditorBackground": "#21222C",
+    "settings.headerForeground": "#F8F8F2",
+    "settings.modifiedItemIndicator": "#FFB86C",
+    "settings.dropdownBackground": "#21222C",
+    "settings.dropdownForeground": "#F8F8F2",
+    "settings.dropdownBorder": "#191A21",
+    "settings.checkboxBackground": "#21222C",
+    "settings.checkboxForeground": "#F8F8F2",
+    "settings.checkboxBorder": "#191A21",
+    "settings.textInputBackground": "#21222C",
+    "settings.textInputForeground": "#F8F8F2",
+    "settings.textInputBorder": "#191A21",
+    "settings.numberInputBackground": "#21222C",
+    "settings.numberInputForeground": "#F8F8F2",
+    "settings.numberInputBorder": "#191A21",
+    "breadcrumb.foreground": "#6272A4",
+    "breadcrumb.background": "#282A36",
+    "breadcrumb.focusForeground": "#F8F8F2",
+    "breadcrumb.activeSelectionForeground": "#F8F8F2",
+    "breadcrumbPicker.background": "#191A21",
+    "listFilterWidget.background": "#343746",
+    "listFilterWidget.outline": "#424450",
+    "listFilterWidget.noMatchesOutline": "#FF5555"
+  },
+  "tokenColors": [
+    {
+      "scope": ["emphasis"],
+      "settings": {
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "scope": ["strong"],
+      "settings": {
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "scope": ["header"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "scope": ["meta.diff", "meta.diff.header"],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "scope": ["markup.inserted"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "scope": ["markup.deleted"],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "scope": ["markup.changed"],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "scope": ["invalid"],
+      "settings": {
+        "foreground": "#FF5555",
+        "fontStyle": "underline italic"
+      }
+    },
+    {
+      "scope": ["invalid.deprecated"],
+      "settings": {
+        "foreground": "#F8F8F2",
+        "fontStyle": "underline italic"
+      }
+    },
+    {
+      "scope": ["entity.name.filename"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "scope": ["markup.error"],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "name": "Underlined markup",
+      "scope": ["markup.underline"],
+      "settings": {
+        "fontStyle": "underline"
+      }
+    },
+    {
+      "name": "Bold markup",
+      "scope": ["markup.bold"],
+      "settings": {
+        "fontStyle": "bold",
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Markup headings",
+      "scope": ["markup.heading"],
+      "settings": {
+        "fontStyle": "bold",
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Markup italic",
+      "scope": ["markup.italic"],
+      "settings": {
+        "foreground": "#F1FA8C",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Bullets, lists (prose)",
+      "scope": [
+        "beginning.punctuation.definition.list.markdown",
+        "beginning.punctuation.definition.quote.markdown",
+        "punctuation.definition.link.restructuredtext"
+      ],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Inline code (prose)",
+      "scope": ["markup.inline.raw", "markup.raw.restructuredtext"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Links (prose)",
+      "scope": ["markup.underline.link", "markup.underline.link.image"],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Link text, image alt text (prose)",
+      "scope": [
+        "meta.link.reference.def.restructuredtext",
+        "punctuation.definition.directive.restructuredtext",
+        "string.other.link.description",
+        "string.other.link.title"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Blockquotes (prose)",
+      "scope": ["entity.name.directive.restructuredtext", "markup.quote"],
+      "settings": {
+        "foreground": "#F1FA8C",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Horizontal rule (prose)",
+      "scope": ["meta.separator.markdown"],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "Code blocks",
+      "scope": [
+        "fenced_code.block.language",
+        "markup.raw.inner.restructuredtext",
+        "markup.fenced_code.block.markdown punctuation.definition.markdown"
+      ],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Prose constants",
+      "scope": ["punctuation.definition.constant.restructuredtext"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Braces in markdown headings",
+      "scope": [
+        "markup.heading.markdown punctuation.definition.string.begin",
+        "markup.heading.markdown punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Braces in markdown paragraphs",
+      "scope": [
+        "meta.paragraph.markdown punctuation.definition.string.begin",
+        "meta.paragraph.markdown punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Braces in markdown blockquotes",
+      "scope": [
+        "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.begin",
+        "markup.quote.markdown meta.paragraph.markdown punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "User-defined class names",
+      "scope": ["entity.name.type.class", "entity.name.class"],
+      "settings": {
+        "foreground": "#8BE9FD",
+        "fontStyle": "normal"
+      }
+    },
+    {
+      "name": "this, super, self, etc.",
+      "scope": [
+        "keyword.expressions-and-types.swift",
+        "keyword.other.this",
+        "variable.language",
+        "variable.language punctuation.definition.variable.php",
+        "variable.other.readwrite.instance.ruby",
+        "variable.parameter.function.language.special"
+      ],
+      "settings": {
+        "foreground": "#BD93F9",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Inherited classes",
+      "scope": ["entity.other.inherited-class"],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Comments",
+      "scope": [
+        "comment",
+        "punctuation.definition.comment",
+        "unused.comment",
+        "wildcard.comment"
+      ],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "JSDoc-style keywords",
+      "scope": [
+        "comment keyword.codetag.notation",
+        "comment.block.documentation keyword",
+        "comment.block.documentation storage.type.class"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "JSDoc-style types",
+      "scope": ["comment.block.documentation entity.name.type"],
+      "settings": {
+        "foreground": "#8BE9FD",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "JSDoc-style type brackets",
+      "scope": [
+        "comment.block.documentation entity.name.type punctuation.definition.bracket"
+      ],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "JSDoc-style comment parameters",
+      "scope": ["comment.block.documentation variable"],
+      "settings": {
+        "foreground": "#FFB86C",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Constants",
+      "scope": ["constant", "variable.other.constant"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Constant escape sequences",
+      "scope": [
+        "constant.character.escape",
+        "constant.character.string.escape",
+        "constant.regexp"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "HTML tags",
+      "scope": ["entity.name.tag"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "CSS attribute parent selectors ('&')",
+      "scope": ["entity.other.attribute-name.parent-selector"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "HTML/CSS attribute names",
+      "scope": ["entity.other.attribute-name"],
+      "settings": {
+        "foreground": "#50FA7B",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Function names",
+      "scope": [
+        "entity.name.function",
+        "meta.function-call.object",
+        "meta.function-call.php",
+        "meta.function-call.static",
+        "meta.method-call.java meta.method",
+        "meta.method.groovy",
+        "support.function.any-method.lua",
+        "keyword.operator.function.infix"
+      ],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Function parameters",
+      "scope": [
+        "entity.name.variable.parameter",
+        "meta.at-rule.function variable",
+        "meta.at-rule.mixin variable",
+        "meta.function.arguments variable.other.php",
+        "meta.selectionset.graphql meta.arguments.graphql variable.arguments.graphql",
+        "variable.parameter"
+      ],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Decorators",
+      "scope": [
+        "meta.decorator variable.other.readwrite",
+        "meta.decorator variable.other.property"
+      ],
+      "settings": {
+        "foreground": "#50FA7B",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Decorator Objects",
+      "scope": ["meta.decorator variable.other.object"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Keywords",
+      "scope": ["keyword", "punctuation.definition.keyword"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Keyword \"new\"",
+      "scope": ["keyword.control.new", "keyword.operator.new"],
+      "settings": {
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "Generic selectors (CSS/SCSS/Less/Stylus)",
+      "scope": ["meta.selector"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Language Built-ins",
+      "scope": ["support"],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Built-in magic functions and constants",
+      "scope": [
+        "support.function.magic",
+        "support.variable",
+        "variable.other.predefined"
+      ],
+      "settings": {
+        "fontStyle": "regular",
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Built-in functions / properties",
+      "scope": ["support.function", "support.type.property-name"],
+      "settings": {
+        "fontStyle": "regular"
+      }
+    },
+    {
+      "name": "Separators (key/value, namespace, inheritance, pointer, hash, slice, etc)",
+      "scope": [
+        "constant.other.symbol.hashkey punctuation.definition.constant.ruby",
+        "entity.other.attribute-name.placeholder punctuation",
+        "entity.other.attribute-name.pseudo-class punctuation",
+        "entity.other.attribute-name.pseudo-element punctuation",
+        "meta.group.double.toml",
+        "meta.group.toml",
+        "meta.object-binding-pattern-variable punctuation.destructuring",
+        "punctuation.colon.graphql",
+        "punctuation.definition.block.scalar.folded.yaml",
+        "punctuation.definition.block.scalar.literal.yaml",
+        "punctuation.definition.block.sequence.item.yaml",
+        "punctuation.definition.entity.other.inherited-class",
+        "punctuation.function.swift",
+        "punctuation.separator.dictionary.key-value",
+        "punctuation.separator.hash",
+        "punctuation.separator.inheritance",
+        "punctuation.separator.key-value",
+        "punctuation.separator.key-value.mapping.yaml",
+        "punctuation.separator.namespace",
+        "punctuation.separator.pointer-access",
+        "punctuation.separator.slice",
+        "string.unquoted.heredoc punctuation.definition.string",
+        "support.other.chomping-indicator.yaml",
+        "punctuation.separator.annotation"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Brackets, braces, parens, etc.",
+      "scope": [
+        "keyword.operator.other.powershell",
+        "keyword.other.statement-separator.powershell",
+        "meta.brace.round",
+        "meta.function-call punctuation",
+        "punctuation.definition.arguments.begin",
+        "punctuation.definition.arguments.end",
+        "punctuation.definition.entity.begin",
+        "punctuation.definition.entity.end",
+        "punctuation.definition.tag.cs",
+        "punctuation.definition.type.begin",
+        "punctuation.definition.type.end",
+        "punctuation.section.scope.begin",
+        "punctuation.section.scope.end",
+        "punctuation.terminator.expression.php",
+        "storage.type.generic.java",
+        "string.template meta.brace",
+        "string.template punctuation.accessor"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Variable interpolation operators",
+      "scope": [
+        "meta.string-contents.quoted.double punctuation.definition.variable",
+        "punctuation.definition.interpolation.begin",
+        "punctuation.definition.interpolation.end",
+        "punctuation.definition.template-expression.begin",
+        "punctuation.definition.template-expression.end",
+        "punctuation.section.embedded.begin",
+        "punctuation.section.embedded.coffee",
+        "punctuation.section.embedded.end",
+        "punctuation.section.embedded.end source.php",
+        "punctuation.section.embedded.end source.ruby",
+        "punctuation.definition.variable.makefile"
+      ],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Keys (serializable languages)",
+      "scope": [
+        "entity.name.function.target.makefile",
+        "entity.name.section.toml",
+        "entity.name.tag.yaml",
+        "variable.other.key.toml"
+      ],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Dates / timestamps (serializable languages)",
+      "scope": ["constant.other.date", "constant.other.timestamp"],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "YAML aliases",
+      "scope": ["variable.other.alias.yaml"],
+      "settings": {
+        "fontStyle": "italic underline",
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Storage",
+      "scope": [
+        "storage",
+        "meta.implementation storage.type.objc",
+        "meta.interface-or-protocol storage.type.objc",
+        "source.groovy storage.type.def"
+      ],
+      "settings": {
+        "fontStyle": "regular",
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "Types",
+      "scope": [
+        "entity.name.type",
+        "keyword.primitive-datatypes.swift",
+        "keyword.type.cs",
+        "meta.protocol-list.objc",
+        "meta.return-type.objc",
+        "source.go storage.type",
+        "source.groovy storage.type",
+        "source.java storage.type",
+        "source.powershell entity.other.attribute-name",
+        "storage.class.std.rust",
+        "storage.type.attribute.swift",
+        "storage.type.c",
+        "storage.type.core.rust",
+        "storage.type.cs",
+        "storage.type.groovy",
+        "storage.type.objc",
+        "storage.type.php",
+        "storage.type.haskell",
+        "storage.type.ocaml"
+      ],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Generics, templates, and mapped type declarations",
+      "scope": [
+        "entity.name.type.type-parameter",
+        "meta.indexer.mappedtype.declaration entity.name.type",
+        "meta.type.parameters entity.name.type"
+      ],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Modifiers",
+      "scope": ["storage.modifier"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "RegExp string",
+      "scope": [
+        "string.regexp",
+        "constant.other.character-class.set.regexp",
+        "constant.character.escape.backslash.regexp"
+      ],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "Non-capture operators",
+      "scope": ["punctuation.definition.group.capture.regexp"],
+      "settings": {
+        "foreground": "#FF79C6"
+      }
+    },
+    {
+      "name": "RegExp start and end characters",
+      "scope": [
+        "string.regexp punctuation.definition.string.begin",
+        "string.regexp punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "name": "Character group",
+      "scope": ["punctuation.definition.character-class.regexp"],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Capture groups",
+      "scope": ["punctuation.definition.group.regexp"],
+      "settings": {
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Assertion operators",
+      "scope": [
+        "punctuation.definition.group.assertion.regexp",
+        "keyword.operator.negation.regexp"
+      ],
+      "settings": {
+        "foreground": "#FF5555"
+      }
+    },
+    {
+      "name": "Positive lookaheads",
+      "scope": ["meta.assertion.look-ahead.regexp"],
+      "settings": {
+        "foreground": "#50FA7B"
+      }
+    },
+    {
+      "name": "Strings",
+      "scope": ["string"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "String quotes (temporary vscode fix)",
+      "scope": [
+        "punctuation.definition.string.begin",
+        "punctuation.definition.string.end"
+      ],
+      "settings": {
+        "foreground": "#E9F284"
+      }
+    },
+    {
+      "name": "Property quotes (temporary vscode fix)",
+      "scope": [
+        "punctuation.support.type.property-name.begin",
+        "punctuation.support.type.property-name.end"
+      ],
+      "settings": {
+        "foreground": "#8BE9FE"
+      }
+    },
+    {
+      "name": "Docstrings",
+      "scope": [
+        "string.quoted.docstring.multi",
+        "string.quoted.docstring.multi.python punctuation.definition.string.begin",
+        "string.quoted.docstring.multi.python punctuation.definition.string.end",
+        "string.quoted.docstring.multi.python constant.character.escape"
+      ],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "Variables and object properties",
+      "scope": [
+        "variable",
+        "constant.other.key.perl",
+        "support.variable.property",
+        "variable.other.constant.js",
+        "variable.other.constant.ts",
+        "variable.other.constant.tsx"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Destructuring / aliasing reference name (LHS)",
+      "scope": [
+        "meta.import variable.other.readwrite",
+        "meta.variable.assignment.destructured.object.coffee variable"
+      ],
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#FFB86C"
+      }
+    },
+    {
+      "name": "Destructuring / aliasing variable name (RHS)",
+      "scope": [
+        "meta.import variable.other.readwrite.alias",
+        "meta.export variable.other.readwrite.alias",
+        "meta.variable.assignment.destructured.object.coffee variable variable"
+      ],
+      "settings": {
+        "fontStyle": "normal",
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "GraphQL keys",
+      "scope": ["meta.selectionset.graphql variable"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "GraphQL function arguments",
+      "scope": ["meta.selectionset.graphql meta.arguments variable"],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "GraphQL fragment name (definition)",
+      "scope": ["entity.name.fragment.graphql", "variable.fragment.graphql"],
+      "settings": {
+        "foreground": "#8BE9FD"
+      }
+    },
+    {
+      "name": "Edge cases (foreground color resets)",
+      "scope": [
+        "constant.other.symbol.hashkey.ruby",
+        "keyword.operator.dereference.java",
+        "keyword.operator.navigation.groovy",
+        "meta.scope.for-loop.shell punctuation.definition.string.begin",
+        "meta.scope.for-loop.shell punctuation.definition.string.end",
+        "meta.scope.for-loop.shell string",
+        "storage.modifier.import",
+        "punctuation.section.embedded.begin.tsx",
+        "punctuation.section.embedded.end.tsx",
+        "punctuation.section.embedded.begin.jsx",
+        "punctuation.section.embedded.end.jsx",
+        "punctuation.separator.list.comma.css",
+        "constant.language.empty-list.haskell"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Shell variables prefixed with \"$\" (edge case)",
+      "scope": ["source.shell variable.other"],
+      "settings": {
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Powershell constants mistakenly scoped to `support`, rather than `constant` (edge)",
+      "scope": ["support.constant"],
+      "settings": {
+        "fontStyle": "normal",
+        "foreground": "#BD93F9"
+      }
+    },
+    {
+      "name": "Makefile prerequisite names",
+      "scope": ["meta.scope.prerequisites.makefile"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "SCSS attibute selector strings",
+      "scope": ["meta.attribute-selector.scss"],
+      "settings": {
+        "foreground": "#F1FA8C"
+      }
+    },
+    {
+      "name": "SCSS attribute selector brackets",
+      "scope": [
+        "punctuation.definition.attribute-selector.end.bracket.square.scss",
+        "punctuation.definition.attribute-selector.begin.bracket.square.scss"
+      ],
+      "settings": {
+        "foreground": "#F8F8F2"
+      }
+    },
+    {
+      "name": "Haskell Pragmas",
+      "scope": ["meta.preprocessor.haskell"],
+      "settings": {
+        "foreground": "#6272A4"
+      }
+    },
+    {
+      "name": "Log file error",
+      "scope": ["log.error"],
+      "settings": {
+        "foreground": "#FF5555",
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "Log file warning",
+      "scope": ["log.warning"],
+      "settings": {
+        "foreground": "#F1FA8C",
+        "fontStyle": "bold"
+      }
+    }
+  ]
+}

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

@@ -0,0 +1,36 @@
+{
+    "name": "Gruvbox",
+    "author": "morhetz",
+    "themes": [
+        {
+            "name": "Gruvbox Dark Hard",
+            "file_name": "gruvbox-dark-hard.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Gruvbox Dark Medium",
+            "file_name": "gruvbox-dark-medium.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Gruvbox Dark Soft",
+            "file_name": "gruvbox-dark-soft.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Gruvbox Light Hard",
+            "file_name": "gruvbox-light-hard.json",
+            "appearance": "light"
+        },
+        {
+            "name": "Gruvbox Light Medium",
+            "file_name": "gruvbox-light-medium.json",
+            "appearance": "light"
+        },
+        {
+            "name": "Gruvbox Light Soft",
+            "file_name": "gruvbox-light-soft.json",
+            "appearance": "light"
+        }
+    ]
+}

assets/themes/src/vscode/gruvbox/gruvbox-dark-hard.json 🔗

@@ -0,0 +1,1074 @@
+{
+    "$schema": "vscode://schemas/color-theme",
+    "name": "Gruvbox Dark Hard",
+    "type": "dark",
+    "semanticHighlighting": true,
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "header",
+            "settings": {
+                "foreground": "#458588"
+            }
+        },
+        {
+            "scope": ["comment", "punctuation.definition.comment"],
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant", "support.constant", "variable.arguments"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": "constant.rgb-value",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "entity.name.selector",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["entity.name.tag", "punctuation.tag"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#cc241d"
+            }
+        },
+        {
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#b16286"
+            }
+        },
+        {
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.string",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.numeric",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "meta.header.diff",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "storage",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "string",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.tag",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.value",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "string.escape",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "string.quasi",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "string.entity",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "object",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "module.node",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": "support.type.property-name",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "keyword.control.module",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "keyword.control.less",
+            "settings": {
+                "foreground": "#d79921"
+            }
+        },
+        {
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "keyword.operator.new",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "metatag.php",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "support.function.git-rebase",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "constant.sha.git-rebase",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "Types declaration and references",
+            "scope": [
+                "meta.type.name",
+                "meta.return.type",
+                "meta.return-type",
+                "meta.cast",
+                "meta.type.annotation",
+                "support.type",
+                "storage.type.cs",
+                "variable.class"
+            ],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["variable.this", "support.variable"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": [
+                "entity.name",
+                "entity.static",
+                "entity.name.class.static.function",
+                "entity.name.function",
+                "entity.name.class",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "name": "Function declarations",
+            "scope": ["entity.function", "entity.name.function.static"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "entity.name.function.function-call",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "support.function.builtin",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.method",
+                "entity.name.method.function-call",
+                "entity.name.static.function-call"
+            ],
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "brace",
+            "settings": {
+                "foreground": "#d5c4a1"
+            }
+        },
+        {
+            "name": "variables",
+            "scope": [
+                "meta.parameter.type.variable",
+                "variable.parameter",
+                "variable.name",
+                "variable.other",
+                "variable",
+                "string.constant.other.placeholder"
+            ],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": "prototype",
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#a89984"
+            }
+        },
+        {
+            "scope": "punctuation.quoted",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "punctuation.quasi",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "URL",
+            "scope": ["*url*", "*link*", "*uri*"],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+
+        {
+            "name": "Python function",
+            "scope": ["meta.function.python", "entity.name.function.python"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "Python Function and Class definition keywords",
+            "scope": [
+                "storage.type.function.python",
+                "storage.modifier.declaration",
+                "storage.type.class.python",
+                "storage.type.string.python"
+            ],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "Async keyword",
+            "scope": ["storage.type.function.async.python"],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": "meta.function-call.generic",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "Python Function Arguments",
+            "scope": "meta.function-call.arguments",
+            "settings": {
+                "foreground": "#d5c4a1"
+            }
+        },
+        {
+            "name": "Python Function decorator",
+            "scope": "entity.name.function.decorator",
+            "settings": {
+                "foreground": "#fabd2f",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Python ALL CAPS",
+            "scope": "constant.other.caps",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "punctuation.definition.logical-expression",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": ["string.interpolated.dollar.shell", "string.interpolated.backtick.shell"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+
+        {
+            "scope": "keyword.control.directive",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "support.function.C99",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+
+        {
+            "name": "C# functions & namespace",
+            "scope": [
+                "meta.function.cs",
+                "entity.name.function.cs",
+                "entity.name.type.namespace.cs"
+            ],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "C# Variables",
+            "scope": [
+                "keyword.other.using.cs",
+                "entity.name.variable.field.cs",
+                "entity.name.variable.local.cs",
+                "variable.other.readwrite.cs"
+            ],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "C# This",
+            "scope": ["keyword.other.this.cs", "keyword.other.base.cs"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+
+        {
+            "scope": "meta.scope.prerequisites",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": "entity.name.function.target",
+            "settings": {
+                "foreground": "#b8bb26",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "name": "coloring of the Java import and package identifiers",
+            "scope": ["storage.modifier.import.java", "storage.modifier.package.java"],
+            "settings": {
+                "foreground": "#bdae93"
+            }
+        },
+        {
+            "scope": ["keyword.other.import.java", "keyword.other.package.java"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "storage.type.java",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": "storage.type.annotation",
+            "settings": {
+                "foreground": "#83a598",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "keyword.other.documentation.javadoc",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "comment.block.javadoc variable.parameter.java",
+            "settings": {
+                "foreground": "#b8bb26",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": [
+                "source.java variable.other.object",
+                "source.java variable.other.definition.java"
+            ],
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+
+        {
+            "name": "Lisp optional function parameters",
+            "scope": "meta.function-parameters.lisp",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+
+        {
+            "scope": "markup.underline",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "string.other.link.title.markdown",
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.punctuation.quote.beginning",
+            "settings": {
+                "foreground": "#98971a"
+            }
+        },
+        {
+            "scope": "markup.punctuation.list.beginning",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["markup.inline.raw", "markup.fenced_code.block"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+
+        {
+            "scope": "string.quoted.double.json",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "JSON Level 0",
+            "scope": ["source.json meta.structure.dictionary.json support.type.property-name.json"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "JSON Level 1",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "JSON Level 2",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "name": "JSON Level 3",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+
+        {
+            "scope": "entity.other.attribute-name.css",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "source.css meta.selector",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "support.type.property-name.css",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name.class",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": [
+                "source.css support.function.transform",
+                "source.css support.function.timing-function",
+                "source.css support.function.misc"
+            ],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "CSS property value",
+            "scope": [
+                "support.property-value",
+                "constant.rgb-value",
+                "support.property-value.scss",
+                "constant.rgb-value.scss"
+            ],
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": ["entity.name.tag.css"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["text.html entity.name.tag", "text.html punctuation.tag"],
+            "settings": {
+                "foreground": "#8ec07c",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": ["source.js variable.language"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "scope": ["source.ts variable.language"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "scope": ["source.go storage.type"],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.import"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": ["source.go keyword.package", "source.go keyword.import"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": ["source.go keyword.interface", "source.go keyword.struct"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.type"],
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.function"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+
+        {
+            "scope": ["keyword.control.cucumber.table"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+
+        {
+            "name": "ReasonML String",
+            "scope": ["source.reason string.double", "source.reason string.regexp"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "ReasonML equals sign",
+            "scope": ["source.reason keyword.control.less"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "ReasonML variable",
+            "scope": ["source.reason entity.name.function"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "ReasonML property",
+            "scope": ["source.reason support.property-value", "source.reason entity.name.filename"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "name": "Powershell member",
+            "scope": ["source.powershell variable.other.member.powershell"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "name": "Powershell function",
+            "scope": ["source.powershell support.function.powershell"],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "name": "Powershell function attribute",
+            "scope": ["source.powershell support.function.attribute.powershell"],
+            "settings": {
+                "foreground": "#bdae93"
+            }
+        },
+        {
+            "name": "Powershell hashtable member",
+            "scope": [
+                "source.powershell meta.hashtable.assignment.powershell variable.other.readwrite.powershell"
+            ],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        }
+    ],
+    "colors": {
+        "focusBorder": "#3c3836",
+        "foreground": "#ebdbb2",
+        "widget.shadow": "#1d202130",
+        "selection.background": "#689d6a80",
+        "errorForeground": "#fb4934",
+
+        "button.background": "#45858880",
+        "button.foreground": "#ebdbb2",
+        "button.hoverBackground": "#45858860",
+
+        "dropdown.background": "#1d2021",
+        "dropdown.border": "#3c3836",
+        "dropdown.foreground": "#ebdbb2",
+
+        "input.background": "#ebdbb205",
+        "input.border": "#3c3836",
+        "input.foreground": "#ebdbb2",
+        "input.placeholderForeground": "#ebdbb260",
+        "inputValidation.errorBorder": "#fb4934",
+        "inputValidation.errorBackground": "#cc241d80",
+        "inputValidation.infoBorder": "#83a598",
+        "inputValidation.infoBackground": "#45858880",
+        "inputValidation.warningBorder": "#fabd2f",
+        "inputValidation.warningBackground": "#d7992180",
+        "inputOption.activeBorder": "#ebdbb260",
+
+        "scrollbar.shadow": "#1d2021",
+        "scrollbarSlider.activeBackground": "#689d6a",
+        "scrollbarSlider.hoverBackground": "#665c54",
+        "scrollbarSlider.background": "#50494599",
+
+        "badge.background": "#d3869b",
+        "badge.foreground": "#1d2021",
+
+        "progressBar.background": "#689d6a",
+
+        "list.activeSelectionBackground": "#3c383680",
+        "list.activeSelectionForeground": "#8ec07c",
+        "list.hoverBackground": "#3c383680",
+        "list.hoverForeground": "#d5c4a1",
+        "list.focusBackground": "#3c3836",
+        "list.focusForeground": "#ebdbb2",
+        "list.inactiveSelectionForeground": "#689d6a",
+        "list.inactiveSelectionBackground": "#3c383680",
+        "list.dropBackground": "#3c3836",
+        "list.highlightForeground": "#689d6a",
+
+        "sideBar.background": "#1d2021",
+        "sideBar.foreground": "#d5c4a1",
+        "sideBar.border": "#3c3836",
+        "sideBarTitle.foreground": "#ebdbb2",
+        "sideBarSectionHeader.background": "#1d202100",
+        "sideBarSectionHeader.foreground": "#ebdbb2",
+
+        "activityBar.background": "#1d2021",
+        "activityBar.foreground": "#ebdbb2",
+        "activityBar.border": "#3c3836",
+        "activityBarBadge.background": "#458588",
+        "activityBarBadge.foreground": "#ebdbb2",
+
+        "editorGroup.border": "#3c3836",
+        "editorGroup.dropBackground": "#3c383660",
+        "editorGroupHeader.noTabsBackground": "#3c3836",
+        "editorGroupHeader.tabsBackground": "#1d2021",
+        "editorGroupHeader.tabsBorder": "#3c3836",
+
+        "tab.border": "#1d202100",
+        "tab.activeBorder": "#689d6a",
+        "tab.activeBackground": "#32302f",
+        "tab.activeForeground": "#ebdbb2",
+        "tab.inactiveForeground": "#a89984",
+        "tab.inactiveBackground": "#1d2021",
+        "tab.unfocusedActiveForeground": "#a89984",
+        "tab.unfocusedActiveBorder": "#1d202100",
+        "tab.unfocusedInactiveForeground": "#928374",
+
+        "editor.background": "#1d2021",
+        "editor.foreground": "#ebdbb2",
+        "editorLineNumber.foreground": "#665c54",
+        "editorCursor.foreground": "#ebdbb2",
+        "editor.selectionBackground": "#689d6a40",
+        "editor.selectionHighlightBackground": "#fabd2f40",
+        "editor.hoverHighlightBackground": "#689d6a50",
+        "editorLink.activeForeground": "#ebdbb2",
+        "editor.findMatchBackground": "#83a59870",
+        "editor.findMatchHighlightBackground": "#fe801930",
+        "editor.findRangeHighlightBackground": "#83a59870",
+        "editor.lineHighlightBackground": "#3c383660",
+        "editor.lineHighlightBorder": "#3c383600",
+        "editorWhitespace.foreground": "#a8998420",
+        "editorRuler.foreground": "#a8998440",
+        "editorCodeLens.foreground": "#a8998490",
+        "editorBracketMatch.border": "#1d202100",
+        "editorBracketMatch.background": "#92837480",
+        "editorHoverWidget.background": "#1d2021",
+        "editorHoverWidget.border": "#3c3836",
+        "editorOverviewRuler.border": "#1d202100",
+        "editorOverviewRuler.findMatchForeground": "#bdae93",
+        "editorOverviewRuler.rangeHighlightForeground": "#bdae93",
+        "editorOverviewRuler.selectionHighlightForeground": "#665c54",
+        "editorOverviewRuler.wordHighlightForeground": "#665c54",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#665c54",
+        "editorOverviewRuler.modifiedForeground": "#83a598",
+        "editorOverviewRuler.addedForeground": "#83a598",
+        "editorOverviewRuler.deletedForeground": "#83a598",
+        "editorOverviewRuler.errorForeground": "#fb4934",
+        "editorOverviewRuler.warningForeground": "#d79921",
+        "editorOverviewRuler.infoForeground": "#d3869b",
+        "editorGutter.background": "#1d202100",
+        "editorGutter.modifiedBackground": "#83a598",
+        "editorGutter.addedBackground": "#b8bb26",
+        "editorGutter.deletedBackground": "#fb4934",
+        "editorError.foreground": "#cc241d",
+        "editorWarning.foreground": "#d79921",
+        "editorInfo.foreground": "#458588",
+
+        "editorBracketHighlight.foreground1": "#b16286",
+        "editorBracketHighlight.foreground2": "#458588",
+        "editorBracketHighlight.foreground3": "#689d6a",
+        "editorBracketHighlight.foreground4": "#98971a",
+        "editorBracketHighlight.foreground5": "#d79921",
+        "editorBracketHighlight.foreground6": "#d65d0e",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#cc241d",
+
+        "diffEditor.insertedTextBackground": "#b8bb2630",
+        "diffEditor.removedTextBackground": "#fb493430",
+
+        "editorWidget.background": "#1d2021",
+        "editorWidget.border": "#3c3836",
+        "editorSuggestWidget.background": "#1d2021",
+        "editorSuggestWidget.foreground": "#ebdbb2",
+        "editorSuggestWidget.highlightForeground": "#689d6a",
+        "editorSuggestWidget.selectedBackground": "#3c383660",
+        "editorSuggestWidget.border": "#3c3836",
+
+        "peekView.border": "#3c3836",
+        "peekViewEditor.background": "#3c383670",
+        "peekViewEditor.matchHighlightBackground": "#504945",
+        "peekViewEditorGutter.background": "#3c383670",
+        "peekViewResult.background": "#3c383670",
+        "peekViewResult.fileForeground": "#ebdbb2",
+        "peekViewResult.selectionBackground": "#45858820",
+        "peekViewResult.selectionForeground": "#ebdbb2",
+        "peekViewResult.lineForeground": "#ebdbb2",
+        "peekViewResult.matchHighlightBackground": "#504945",
+        "peekViewTitle.background": "#3c383670",
+        "peekViewTitleDescription.foreground": "#bdae93",
+        "peekViewTitleLabel.foreground": "#ebdbb2",
+
+        "merge.currentHeaderBackground": "#45858840",
+        "merge.currentContentBackground": "#45858820",
+        "merge.incomingHeaderBackground": "#689d6a40",
+        "merge.incomingContentBackground": "#689d6a20",
+        "merge.border": "#1d202100",
+        "editorOverviewRuler.currentContentForeground": "#458588",
+        "editorOverviewRuler.incomingContentForeground": "#689d6a",
+        "editorOverviewRuler.commonContentForeground": "#928374",
+
+        "panel.border": "#3c3836",
+        "panelTitle.activeForeground": "#ebdbb2",
+
+        "statusBar.background": "#1d2021",
+        "statusBar.border": "#3c3836",
+        "statusBar.foreground": "#ebdbb2",
+        "statusBar.debuggingBackground": "#fe8019",
+        "statusBar.debuggingForeground": "#1d2021",
+        "statusBar.debuggingBorder": "#1d202100",
+        "statusBar.noFolderBackground": "#1d2021",
+        "statusBar.noFolderBorder": "#1d202100",
+
+        "terminal.ansiBlack": "#3c3836",
+        "terminal.ansiBrightBlack": "#928374",
+        "terminal.ansiRed": "#cc241d",
+        "terminal.ansiBrightRed": "#fb4934",
+        "terminal.ansiGreen": "#98971a",
+        "terminal.ansiBrightGreen": "#b8bb26",
+        "terminal.ansiYellow": "#d79921",
+        "terminal.ansiBrightYellow": "#fabd2f",
+        "terminal.ansiBlue": "#458588",
+        "terminal.ansiBrightBlue": "#83a598",
+        "terminal.ansiMagenta": "#b16286",
+        "terminal.ansiBrightMagenta": "#d3869b",
+        "terminal.ansiCyan": "#689d6a",
+        "terminal.ansiBrightCyan": "#8ec07c",
+        "terminal.ansiWhite": "#a89984",
+        "terminal.ansiBrightWhite": "#ebdbb2",
+        "terminal.foreground": "#ebdbb2",
+        "terminal.background": "#1d2021",
+
+        "titleBar.activeBackground": "#1d2021",
+        "titleBar.activeForeground": "#ebdbb2",
+        "titleBar.inactiveBackground": "#1d2021",
+
+        "gitDecoration.modifiedResourceForeground": "#d79921",
+        "gitDecoration.deletedResourceForeground": "#cc241d",
+        "gitDecoration.untrackedResourceForeground": "#98971a",
+        "gitDecoration.ignoredResourceForeground": "#7c6f64",
+        "gitDecoration.conflictingResourceForeground": "#b16286",
+
+        "menu.border": "#3c3836",
+        "menu.separatorBackground": "#3c3836",
+
+        "notebook.cellEditorBackground": "#282828",
+        "notebook.focusedCellBorder": "#a89984",
+        "notebook.cellBorderColor": "#3c3836",
+        "notebook.focusedEditorBorder": "#3c3836",
+
+        "extensionButton.prominentBackground": "#b8bb2680",
+        "extensionButton.prominentHoverBackground": "#b8bb2630",
+
+        "textLink.foreground": "#83a598",
+        "textLink.activeForeground": "#458588",
+        "debugToolBar.background": "#1d2021"
+    },
+    "semanticTokenColors": {
+        "constant.builtin": "#d3869b",
+        "property": "#83a598",
+        "property:python": "#ebdbb2",
+        "parameter": "#83a598",
+        "variable": "#ebdbb2",
+        "function": "#8ec07c",
+        "function.builtin": "#fe8019",
+        "method": "#8ec07c"
+    }
+}

assets/themes/src/vscode/gruvbox/gruvbox-dark-medium.json 🔗

@@ -0,0 +1,1074 @@
+{
+    "$schema": "vscode://schemas/color-theme",
+    "name": "Gruvbox Dark Medium",
+    "type": "dark",
+    "semanticHighlighting": true,
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "header",
+            "settings": {
+                "foreground": "#458588"
+            }
+        },
+        {
+            "scope": ["comment", "punctuation.definition.comment"],
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant", "support.constant", "variable.arguments"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": "constant.rgb-value",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "entity.name.selector",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["entity.name.tag", "punctuation.tag"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#cc241d"
+            }
+        },
+        {
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#b16286"
+            }
+        },
+        {
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.string",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.numeric",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "meta.header.diff",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "storage",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "string",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.tag",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.value",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "string.escape",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "string.quasi",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "string.entity",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "object",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "module.node",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": "support.type.property-name",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "keyword.control.module",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "keyword.control.less",
+            "settings": {
+                "foreground": "#d79921"
+            }
+        },
+        {
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "keyword.operator.new",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "metatag.php",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "support.function.git-rebase",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "constant.sha.git-rebase",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "Types declaration and references",
+            "scope": [
+                "meta.type.name",
+                "meta.return.type",
+                "meta.return-type",
+                "meta.cast",
+                "meta.type.annotation",
+                "support.type",
+                "storage.type.cs",
+                "variable.class"
+            ],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["variable.this", "support.variable"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": [
+                "entity.name",
+                "entity.static",
+                "entity.name.class.static.function",
+                "entity.name.function",
+                "entity.name.class",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "name": "Function declarations",
+            "scope": ["entity.function", "entity.name.function.static"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "entity.name.function.function-call",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "support.function.builtin",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.method",
+                "entity.name.method.function-call",
+                "entity.name.static.function-call"
+            ],
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "brace",
+            "settings": {
+                "foreground": "#d5c4a1"
+            }
+        },
+        {
+            "name": "variables",
+            "scope": [
+                "meta.parameter.type.variable",
+                "variable.parameter",
+                "variable.name",
+                "variable.other",
+                "variable",
+                "string.constant.other.placeholder"
+            ],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": "prototype",
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#a89984"
+            }
+        },
+        {
+            "scope": "punctuation.quoted",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "punctuation.quasi",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "URL",
+            "scope": ["*url*", "*link*", "*uri*"],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+
+        {
+            "name": "Python function",
+            "scope": ["meta.function.python", "entity.name.function.python"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "Python Function and Class definition keywords",
+            "scope": [
+                "storage.type.function.python",
+                "storage.modifier.declaration",
+                "storage.type.class.python",
+                "storage.type.string.python"
+            ],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "Async keyword",
+            "scope": ["storage.type.function.async.python"],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": "meta.function-call.generic",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "Python Function Arguments",
+            "scope": "meta.function-call.arguments",
+            "settings": {
+                "foreground": "#d5c4a1"
+            }
+        },
+        {
+            "name": "Python Function decorator",
+            "scope": "entity.name.function.decorator",
+            "settings": {
+                "foreground": "#fabd2f",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Python ALL CAPS",
+            "scope": "constant.other.caps",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "punctuation.definition.logical-expression",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": ["string.interpolated.dollar.shell", "string.interpolated.backtick.shell"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+
+        {
+            "scope": "keyword.control.directive",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "support.function.C99",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+
+        {
+            "name": "C# functions & namespace",
+            "scope": [
+                "meta.function.cs",
+                "entity.name.function.cs",
+                "entity.name.type.namespace.cs"
+            ],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "C# Variables",
+            "scope": [
+                "keyword.other.using.cs",
+                "entity.name.variable.field.cs",
+                "entity.name.variable.local.cs",
+                "variable.other.readwrite.cs"
+            ],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "C# This",
+            "scope": ["keyword.other.this.cs", "keyword.other.base.cs"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+
+        {
+            "scope": "meta.scope.prerequisites",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": "entity.name.function.target",
+            "settings": {
+                "foreground": "#b8bb26",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "name": "coloring of the Java import and package identifiers",
+            "scope": ["storage.modifier.import.java", "storage.modifier.package.java"],
+            "settings": {
+                "foreground": "#bdae93"
+            }
+        },
+        {
+            "scope": ["keyword.other.import.java", "keyword.other.package.java"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "storage.type.java",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": "storage.type.annotation",
+            "settings": {
+                "foreground": "#83a598",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "keyword.other.documentation.javadoc",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "comment.block.javadoc variable.parameter.java",
+            "settings": {
+                "foreground": "#b8bb26",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": [
+                "source.java variable.other.object",
+                "source.java variable.other.definition.java"
+            ],
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+
+        {
+            "name": "Lisp optional function parameters",
+            "scope": "meta.function-parameters.lisp",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+
+        {
+            "scope": "markup.underline",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "string.other.link.title.markdown",
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.punctuation.quote.beginning",
+            "settings": {
+                "foreground": "#98971a"
+            }
+        },
+        {
+            "scope": "markup.punctuation.list.beginning",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["markup.inline.raw", "markup.fenced_code.block"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+
+        {
+            "scope": "string.quoted.double.json",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "JSON Level 0",
+            "scope": ["source.json meta.structure.dictionary.json support.type.property-name.json"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "JSON Level 1",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "JSON Level 2",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "name": "JSON Level 3",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+
+        {
+            "scope": "entity.other.attribute-name.css",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "source.css meta.selector",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "support.type.property-name.css",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name.class",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": [
+                "source.css support.function.transform",
+                "source.css support.function.timing-function",
+                "source.css support.function.misc"
+            ],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "CSS property value",
+            "scope": [
+                "support.property-value",
+                "constant.rgb-value",
+                "support.property-value.scss",
+                "constant.rgb-value.scss"
+            ],
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": ["entity.name.tag.css"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["text.html entity.name.tag", "text.html punctuation.tag"],
+            "settings": {
+                "foreground": "#8ec07c",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": ["source.js variable.language"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "scope": ["source.ts variable.language"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "scope": ["source.go storage.type"],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.import"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": ["source.go keyword.package", "source.go keyword.import"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": ["source.go keyword.interface", "source.go keyword.struct"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.type"],
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.function"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+
+        {
+            "scope": ["keyword.control.cucumber.table"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+
+        {
+            "name": "ReasonML String",
+            "scope": ["source.reason string.double", "source.reason string.regexp"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "ReasonML equals sign",
+            "scope": ["source.reason keyword.control.less"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "ReasonML variable",
+            "scope": ["source.reason entity.name.function"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "ReasonML property",
+            "scope": ["source.reason support.property-value", "source.reason entity.name.filename"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "name": "Powershell member",
+            "scope": ["source.powershell variable.other.member.powershell"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "name": "Powershell function",
+            "scope": ["source.powershell support.function.powershell"],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "name": "Powershell function attribute",
+            "scope": ["source.powershell support.function.attribute.powershell"],
+            "settings": {
+                "foreground": "#bdae93"
+            }
+        },
+        {
+            "name": "Powershell hashtable member",
+            "scope": [
+                "source.powershell meta.hashtable.assignment.powershell variable.other.readwrite.powershell"
+            ],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        }
+    ],
+    "colors": {
+        "focusBorder": "#3c3836",
+        "foreground": "#ebdbb2",
+        "widget.shadow": "#28282830",
+        "selection.background": "#689d6a80",
+        "errorForeground": "#fb4934",
+
+        "button.background": "#45858880",
+        "button.foreground": "#ebdbb2",
+        "button.hoverBackground": "#45858860",
+
+        "dropdown.background": "#282828",
+        "dropdown.border": "#3c3836",
+        "dropdown.foreground": "#ebdbb2",
+
+        "input.background": "#ebdbb205",
+        "input.border": "#3c3836",
+        "input.foreground": "#ebdbb2",
+        "input.placeholderForeground": "#ebdbb260",
+        "inputValidation.errorBorder": "#fb4934",
+        "inputValidation.errorBackground": "#cc241d80",
+        "inputValidation.infoBorder": "#83a598",
+        "inputValidation.infoBackground": "#45858880",
+        "inputValidation.warningBorder": "#fabd2f",
+        "inputValidation.warningBackground": "#d7992180",
+        "inputOption.activeBorder": "#ebdbb260",
+
+        "scrollbar.shadow": "#282828",
+        "scrollbarSlider.activeBackground": "#689d6a",
+        "scrollbarSlider.hoverBackground": "#665c54",
+        "scrollbarSlider.background": "#50494599",
+
+        "badge.background": "#d3869b",
+        "badge.foreground": "#282828",
+
+        "progressBar.background": "#689d6a",
+
+        "list.activeSelectionBackground": "#3c383680",
+        "list.activeSelectionForeground": "#8ec07c",
+        "list.hoverBackground": "#3c383680",
+        "list.hoverForeground": "#d5c4a1",
+        "list.focusBackground": "#3c3836",
+        "list.focusForeground": "#ebdbb2",
+        "list.inactiveSelectionForeground": "#689d6a",
+        "list.inactiveSelectionBackground": "#3c383680",
+        "list.dropBackground": "#3c3836",
+        "list.highlightForeground": "#689d6a",
+
+        "sideBar.background": "#282828",
+        "sideBar.foreground": "#d5c4a1",
+        "sideBar.border": "#3c3836",
+        "sideBarTitle.foreground": "#ebdbb2",
+        "sideBarSectionHeader.background": "#28282800",
+        "sideBarSectionHeader.foreground": "#ebdbb2",
+
+        "activityBar.background": "#282828",
+        "activityBar.foreground": "#ebdbb2",
+        "activityBar.border": "#3c3836",
+        "activityBarBadge.background": "#458588",
+        "activityBarBadge.foreground": "#ebdbb2",
+
+        "editorGroup.border": "#3c3836",
+        "editorGroup.dropBackground": "#3c383660",
+        "editorGroupHeader.noTabsBackground": "#3c3836",
+        "editorGroupHeader.tabsBackground": "#282828",
+        "editorGroupHeader.tabsBorder": "#3c3836",
+
+        "tab.border": "#28282800",
+        "tab.activeBorder": "#689d6a",
+        "tab.activeBackground": "#3c3836",
+        "tab.activeForeground": "#ebdbb2",
+        "tab.inactiveForeground": "#a89984",
+        "tab.inactiveBackground": "#282828",
+        "tab.unfocusedActiveForeground": "#a89984",
+        "tab.unfocusedActiveBorder": "#28282800",
+        "tab.unfocusedInactiveForeground": "#928374",
+
+        "editor.background": "#282828",
+        "editor.foreground": "#ebdbb2",
+        "editorLineNumber.foreground": "#665c54",
+        "editorCursor.foreground": "#ebdbb2",
+        "editor.selectionBackground": "#689d6a40",
+        "editor.selectionHighlightBackground": "#fabd2f40",
+        "editor.hoverHighlightBackground": "#689d6a50",
+        "editorLink.activeForeground": "#ebdbb2",
+        "editor.findMatchBackground": "#83a59870",
+        "editor.findMatchHighlightBackground": "#fe801930",
+        "editor.findRangeHighlightBackground": "#83a59870",
+        "editor.lineHighlightBackground": "#3c383660",
+        "editor.lineHighlightBorder": "#3c383600",
+        "editorWhitespace.foreground": "#a8998420",
+        "editorRuler.foreground": "#a8998440",
+        "editorCodeLens.foreground": "#a8998490",
+        "editorBracketMatch.border": "#28282800",
+        "editorBracketMatch.background": "#92837480",
+        "editorHoverWidget.background": "#282828",
+        "editorHoverWidget.border": "#3c3836",
+        "editorOverviewRuler.border": "#28282800",
+        "editorOverviewRuler.findMatchForeground": "#bdae93",
+        "editorOverviewRuler.rangeHighlightForeground": "#bdae93",
+        "editorOverviewRuler.selectionHighlightForeground": "#665c54",
+        "editorOverviewRuler.wordHighlightForeground": "#665c54",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#665c54",
+        "editorOverviewRuler.modifiedForeground": "#83a598",
+        "editorOverviewRuler.addedForeground": "#83a598",
+        "editorOverviewRuler.deletedForeground": "#83a598",
+        "editorOverviewRuler.errorForeground": "#fb4934",
+        "editorOverviewRuler.warningForeground": "#d79921",
+        "editorOverviewRuler.infoForeground": "#d3869b",
+        "editorGutter.background": "#28282800",
+        "editorGutter.modifiedBackground": "#83a598",
+        "editorGutter.addedBackground": "#b8bb26",
+        "editorGutter.deletedBackground": "#fb4934",
+        "editorError.foreground": "#cc241d",
+        "editorWarning.foreground": "#d79921",
+        "editorInfo.foreground": "#458588",
+
+        "editorBracketHighlight.foreground1": "#b16286",
+        "editorBracketHighlight.foreground2": "#458588",
+        "editorBracketHighlight.foreground3": "#689d6a",
+        "editorBracketHighlight.foreground4": "#98971a",
+        "editorBracketHighlight.foreground5": "#d79921",
+        "editorBracketHighlight.foreground6": "#d65d0e",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#cc241d",
+
+        "diffEditor.insertedTextBackground": "#b8bb2630",
+        "diffEditor.removedTextBackground": "#fb493430",
+
+        "editorWidget.background": "#282828",
+        "editorWidget.border": "#3c3836",
+        "editorSuggestWidget.background": "#282828",
+        "editorSuggestWidget.foreground": "#ebdbb2",
+        "editorSuggestWidget.highlightForeground": "#689d6a",
+        "editorSuggestWidget.selectedBackground": "#3c383660",
+        "editorSuggestWidget.border": "#3c3836",
+
+        "peekView.border": "#3c3836",
+        "peekViewEditor.background": "#3c383670",
+        "peekViewEditor.matchHighlightBackground": "#504945",
+        "peekViewEditorGutter.background": "#3c383670",
+        "peekViewResult.background": "#3c383670",
+        "peekViewResult.fileForeground": "#ebdbb2",
+        "peekViewResult.selectionBackground": "#45858820",
+        "peekViewResult.selectionForeground": "#ebdbb2",
+        "peekViewResult.lineForeground": "#ebdbb2",
+        "peekViewResult.matchHighlightBackground": "#504945",
+        "peekViewTitle.background": "#3c383670",
+        "peekViewTitleDescription.foreground": "#bdae93",
+        "peekViewTitleLabel.foreground": "#ebdbb2",
+
+        "merge.currentHeaderBackground": "#45858840",
+        "merge.currentContentBackground": "#45858820",
+        "merge.incomingHeaderBackground": "#689d6a40",
+        "merge.incomingContentBackground": "#689d6a20",
+        "merge.border": "#28282800",
+        "editorOverviewRuler.currentContentForeground": "#458588",
+        "editorOverviewRuler.incomingContentForeground": "#689d6a",
+        "editorOverviewRuler.commonContentForeground": "#928374",
+
+        "panel.border": "#3c3836",
+        "panelTitle.activeForeground": "#ebdbb2",
+
+        "statusBar.background": "#282828",
+        "statusBar.border": "#3c3836",
+        "statusBar.foreground": "#ebdbb2",
+        "statusBar.debuggingBackground": "#fe8019",
+        "statusBar.debuggingForeground": "#282828",
+        "statusBar.debuggingBorder": "#28282800",
+        "statusBar.noFolderBackground": "#282828",
+        "statusBar.noFolderBorder": "#28282800",
+
+        "terminal.ansiBlack": "#3c3836",
+        "terminal.ansiBrightBlack": "#928374",
+        "terminal.ansiRed": "#cc241d",
+        "terminal.ansiBrightRed": "#fb4934",
+        "terminal.ansiGreen": "#98971a",
+        "terminal.ansiBrightGreen": "#b8bb26",
+        "terminal.ansiYellow": "#d79921",
+        "terminal.ansiBrightYellow": "#fabd2f",
+        "terminal.ansiBlue": "#458588",
+        "terminal.ansiBrightBlue": "#83a598",
+        "terminal.ansiMagenta": "#b16286",
+        "terminal.ansiBrightMagenta": "#d3869b",
+        "terminal.ansiCyan": "#689d6a",
+        "terminal.ansiBrightCyan": "#8ec07c",
+        "terminal.ansiWhite": "#a89984",
+        "terminal.ansiBrightWhite": "#ebdbb2",
+        "terminal.foreground": "#ebdbb2",
+        "terminal.background": "#282828",
+
+        "titleBar.activeBackground": "#282828",
+        "titleBar.activeForeground": "#ebdbb2",
+        "titleBar.inactiveBackground": "#282828",
+
+        "gitDecoration.modifiedResourceForeground": "#d79921",
+        "gitDecoration.deletedResourceForeground": "#cc241d",
+        "gitDecoration.untrackedResourceForeground": "#98971a",
+        "gitDecoration.ignoredResourceForeground": "#7c6f64",
+        "gitDecoration.conflictingResourceForeground": "#b16286",
+
+        "menu.border": "#3c3836",
+        "menu.separatorBackground": "#3c3836",
+
+        "notebook.cellEditorBackground": "#32302f",
+        "notebook.focusedCellBorder": "#a89984",
+        "notebook.cellBorderColor": "#504945",
+        "notebook.focusedEditorBorder": "#504945",
+
+        "extensionButton.prominentBackground": "#b8bb2680",
+        "extensionButton.prominentHoverBackground": "#b8bb2630",
+
+        "textLink.foreground": "#83a598",
+        "textLink.activeForeground": "#458588",
+        "debugToolBar.background": "#282828"
+    },
+    "semanticTokenColors": {
+        "constant.builtin": "#d3869b",
+        "property": "#83a598",
+        "property:python": "#ebdbb2",
+        "parameter": "#83a598",
+        "variable": "#ebdbb2",
+        "function": "#8ec07c",
+        "function.builtin": "#fe8019",
+        "method": "#8ec07c"
+    }
+}

assets/themes/src/vscode/gruvbox/gruvbox-dark-soft.json 🔗

@@ -0,0 +1,1074 @@
+{
+    "$schema": "vscode://schemas/color-theme",
+    "name": "Gruvbox Dark Soft",
+    "type": "dark",
+    "semanticHighlighting": true,
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "header",
+            "settings": {
+                "foreground": "#458588"
+            }
+        },
+        {
+            "scope": ["comment", "punctuation.definition.comment"],
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant", "support.constant", "variable.arguments"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": "constant.rgb-value",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "entity.name.selector",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["entity.name.tag", "punctuation.tag"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#cc241d"
+            }
+        },
+        {
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#b16286"
+            }
+        },
+        {
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.string",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.numeric",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "meta.header.diff",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "storage",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "string",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.tag",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.value",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "string.escape",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "string.quasi",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "string.entity",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "object",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "module.node",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": "support.type.property-name",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "keyword.control.module",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "keyword.control.less",
+            "settings": {
+                "foreground": "#d79921"
+            }
+        },
+        {
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "keyword.operator.new",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "metatag.php",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "support.function.git-rebase",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "constant.sha.git-rebase",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "Types declaration and references",
+            "scope": [
+                "meta.type.name",
+                "meta.return.type",
+                "meta.return-type",
+                "meta.cast",
+                "meta.type.annotation",
+                "support.type",
+                "storage.type.cs",
+                "variable.class"
+            ],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["variable.this", "support.variable"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": [
+                "entity.name",
+                "entity.static",
+                "entity.name.class.static.function",
+                "entity.name.function",
+                "entity.name.class",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "name": "Function declarations",
+            "scope": ["entity.function", "entity.name.function.static"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "entity.name.function.function-call",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "support.function.builtin",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.method",
+                "entity.name.method.function-call",
+                "entity.name.static.function-call"
+            ],
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "brace",
+            "settings": {
+                "foreground": "#d5c4a1"
+            }
+        },
+        {
+            "name": "variables",
+            "scope": [
+                "meta.parameter.type.variable",
+                "variable.parameter",
+                "variable.name",
+                "variable.other",
+                "variable",
+                "string.constant.other.placeholder"
+            ],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": "prototype",
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#a89984"
+            }
+        },
+        {
+            "scope": "punctuation.quoted",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "punctuation.quasi",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "URL",
+            "scope": ["*url*", "*link*", "*uri*"],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+
+        {
+            "name": "Python function",
+            "scope": ["meta.function.python", "entity.name.function.python"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "Python Function and Class definition keywords",
+            "scope": [
+                "storage.type.function.python",
+                "storage.modifier.declaration",
+                "storage.type.class.python",
+                "storage.type.string.python"
+            ],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "Async keyword",
+            "scope": ["storage.type.function.async.python"],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": "meta.function-call.generic",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "Python Function Arguments",
+            "scope": "meta.function-call.arguments",
+            "settings": {
+                "foreground": "#d5c4a1"
+            }
+        },
+        {
+            "name": "Python Function decorator",
+            "scope": "entity.name.function.decorator",
+            "settings": {
+                "foreground": "#fabd2f",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Python ALL CAPS",
+            "scope": "constant.other.caps",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "scope": "punctuation.definition.logical-expression",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": ["string.interpolated.dollar.shell", "string.interpolated.backtick.shell"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+
+        {
+            "scope": "keyword.control.directive",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "support.function.C99",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+
+        {
+            "name": "C# functions & namespace",
+            "scope": [
+                "meta.function.cs",
+                "entity.name.function.cs",
+                "entity.name.type.namespace.cs"
+            ],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "C# Variables",
+            "scope": [
+                "keyword.other.using.cs",
+                "entity.name.variable.field.cs",
+                "entity.name.variable.local.cs",
+                "variable.other.readwrite.cs"
+            ],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "C# This",
+            "scope": ["keyword.other.this.cs", "keyword.other.base.cs"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+
+        {
+            "scope": "meta.scope.prerequisites",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": "entity.name.function.target",
+            "settings": {
+                "foreground": "#b8bb26",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "name": "coloring of the Java import and package identifiers",
+            "scope": ["storage.modifier.import.java", "storage.modifier.package.java"],
+            "settings": {
+                "foreground": "#bdae93"
+            }
+        },
+        {
+            "scope": ["keyword.other.import.java", "keyword.other.package.java"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "storage.type.java",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": "storage.type.annotation",
+            "settings": {
+                "foreground": "#83a598",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "keyword.other.documentation.javadoc",
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": "comment.block.javadoc variable.parameter.java",
+            "settings": {
+                "foreground": "#b8bb26",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": [
+                "source.java variable.other.object",
+                "source.java variable.other.definition.java"
+            ],
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+
+        {
+            "name": "Lisp optional function parameters",
+            "scope": "meta.function-parameters.lisp",
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+
+        {
+            "scope": "markup.underline",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "string.other.link.title.markdown",
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "markup.punctuation.quote.beginning",
+            "settings": {
+                "foreground": "#98971a"
+            }
+        },
+        {
+            "scope": "markup.punctuation.list.beginning",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["markup.inline.raw", "markup.fenced_code.block"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+
+        {
+            "scope": "string.quoted.double.json",
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "JSON Level 0",
+            "scope": ["source.json meta.structure.dictionary.json support.type.property-name.json"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "JSON Level 1",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "JSON Level 2",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+        {
+            "name": "JSON Level 3",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+
+        {
+            "scope": "entity.other.attribute-name.css",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "source.css meta.selector",
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": "support.type.property-name.css",
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name.class",
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": [
+                "source.css support.function.transform",
+                "source.css support.function.timing-function",
+                "source.css support.function.misc"
+            ],
+            "settings": {
+                "foreground": "#fb4934"
+            }
+        },
+        {
+            "name": "CSS property value",
+            "scope": [
+                "support.property-value",
+                "constant.rgb-value",
+                "support.property-value.scss",
+                "constant.rgb-value.scss"
+            ],
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": ["entity.name.tag.css"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["text.html entity.name.tag", "text.html punctuation.tag"],
+            "settings": {
+                "foreground": "#8ec07c",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": ["source.js variable.language"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "scope": ["source.ts variable.language"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "scope": ["source.go storage.type"],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.import"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "scope": ["source.go keyword.package", "source.go keyword.import"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "scope": ["source.go keyword.interface", "source.go keyword.struct"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.type"],
+            "settings": {
+                "foreground": "#ebdbb2"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.function"],
+            "settings": {
+                "foreground": "#d3869b"
+            }
+        },
+
+        {
+            "scope": ["keyword.control.cucumber.table"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+
+        {
+            "name": "ReasonML String",
+            "scope": ["source.reason string.double", "source.reason string.regexp"],
+            "settings": {
+                "foreground": "#b8bb26"
+            }
+        },
+        {
+            "name": "ReasonML equals sign",
+            "scope": ["source.reason keyword.control.less"],
+            "settings": {
+                "foreground": "#8ec07c"
+            }
+        },
+        {
+            "name": "ReasonML variable",
+            "scope": ["source.reason entity.name.function"],
+            "settings": {
+                "foreground": "#83a598"
+            }
+        },
+        {
+            "name": "ReasonML property",
+            "scope": ["source.reason support.property-value", "source.reason entity.name.filename"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+
+        {
+            "name": "Powershell member",
+            "scope": ["source.powershell variable.other.member.powershell"],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        },
+        {
+            "name": "Powershell function",
+            "scope": ["source.powershell support.function.powershell"],
+            "settings": {
+                "foreground": "#fabd2f"
+            }
+        },
+        {
+            "name": "Powershell function attribute",
+            "scope": ["source.powershell support.function.attribute.powershell"],
+            "settings": {
+                "foreground": "#bdae93"
+            }
+        },
+        {
+            "name": "Powershell hashtable member",
+            "scope": [
+                "source.powershell meta.hashtable.assignment.powershell variable.other.readwrite.powershell"
+            ],
+            "settings": {
+                "foreground": "#fe8019"
+            }
+        }
+    ],
+    "colors": {
+        "focusBorder": "#3c3836",
+        "foreground": "#ebdbb2",
+        "widget.shadow": "#32302f30",
+        "selection.background": "#689d6a80",
+        "errorForeground": "#fb4934",
+
+        "button.background": "#45858880",
+        "button.foreground": "#ebdbb2",
+        "button.hoverBackground": "#45858860",
+
+        "dropdown.background": "#32302f",
+        "dropdown.border": "#3c3836",
+        "dropdown.foreground": "#ebdbb2",
+
+        "input.background": "#ebdbb205",
+        "input.border": "#3c3836",
+        "input.foreground": "#ebdbb2",
+        "input.placeholderForeground": "#ebdbb260",
+        "inputValidation.errorBorder": "#fb4934",
+        "inputValidation.errorBackground": "#cc241d80",
+        "inputValidation.infoBorder": "#83a598",
+        "inputValidation.infoBackground": "#45858880",
+        "inputValidation.warningBorder": "#fabd2f",
+        "inputValidation.warningBackground": "#d7992180",
+        "inputOption.activeBorder": "#ebdbb260",
+
+        "scrollbar.shadow": "#32302f",
+        "scrollbarSlider.activeBackground": "#689d6a",
+        "scrollbarSlider.hoverBackground": "#665c54",
+        "scrollbarSlider.background": "#50494599",
+
+        "badge.background": "#d3869b",
+        "badge.foreground": "#32302f",
+
+        "progressBar.background": "#689d6a",
+
+        "list.activeSelectionBackground": "#3c383680",
+        "list.activeSelectionForeground": "#8ec07c",
+        "list.hoverBackground": "#3c383680",
+        "list.hoverForeground": "#d5c4a1",
+        "list.focusBackground": "#3c3836",
+        "list.focusForeground": "#ebdbb2",
+        "list.inactiveSelectionForeground": "#689d6a",
+        "list.inactiveSelectionBackground": "#3c383680",
+        "list.dropBackground": "#3c3836",
+        "list.highlightForeground": "#689d6a",
+
+        "sideBar.background": "#32302f",
+        "sideBar.foreground": "#d5c4a1",
+        "sideBar.border": "#3c3836",
+        "sideBarTitle.foreground": "#ebdbb2",
+        "sideBarSectionHeader.background": "#32302f00",
+        "sideBarSectionHeader.foreground": "#ebdbb2",
+
+        "activityBar.background": "#32302f",
+        "activityBar.foreground": "#ebdbb2",
+        "activityBar.border": "#3c3836",
+        "activityBarBadge.background": "#458588",
+        "activityBarBadge.foreground": "#ebdbb2",
+
+        "editorGroup.border": "#3c3836",
+        "editorGroup.dropBackground": "#3c383660",
+        "editorGroupHeader.noTabsBackground": "#3c3836",
+        "editorGroupHeader.tabsBackground": "#32302f",
+        "editorGroupHeader.tabsBorder": "#3c3836",
+
+        "tab.border": "#32302f00",
+        "tab.activeBackground": "#504945",
+        "tab.activeBorder": "#689d6a",
+        "tab.activeForeground": "#ebdbb2",
+        "tab.inactiveForeground": "#a89984",
+        "tab.inactiveBackground": "#32302f",
+        "tab.unfocusedActiveForeground": "#a89984",
+        "tab.unfocusedActiveBorder": "#32302f00",
+        "tab.unfocusedInactiveForeground": "#928374",
+
+        "editor.background": "#32302f",
+        "editor.foreground": "#ebdbb2",
+        "editorLineNumber.foreground": "#665c54",
+        "editorCursor.foreground": "#ebdbb2",
+        "editor.selectionBackground": "#689d6a40",
+        "editor.selectionHighlightBackground": "#fabd2f40",
+        "editor.hoverHighlightBackground": "#689d6a50",
+        "editorLink.activeForeground": "#ebdbb2",
+        "editor.findMatchBackground": "#83a59870",
+        "editor.findMatchHighlightBackground": "#fe801930",
+        "editor.findRangeHighlightBackground": "#83a59870",
+        "editor.lineHighlightBackground": "#3c383660",
+        "editor.lineHighlightBorder": "#3c383600",
+        "editorWhitespace.foreground": "#a8998420",
+        "editorRuler.foreground": "#a8998440",
+        "editorCodeLens.foreground": "#a8998490",
+        "editorBracketMatch.border": "#32302f00",
+        "editorBracketMatch.background": "#92837480",
+        "editorHoverWidget.background": "#32302f",
+        "editorHoverWidget.border": "#3c3836",
+        "editorOverviewRuler.border": "#32302f00",
+        "editorOverviewRuler.findMatchForeground": "#bdae93",
+        "editorOverviewRuler.rangeHighlightForeground": "#bdae93",
+        "editorOverviewRuler.selectionHighlightForeground": "#665c54",
+        "editorOverviewRuler.wordHighlightForeground": "#665c54",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#665c54",
+        "editorOverviewRuler.modifiedForeground": "#83a598",
+        "editorOverviewRuler.addedForeground": "#83a598",
+        "editorOverviewRuler.deletedForeground": "#83a598",
+        "editorOverviewRuler.errorForeground": "#fb4934",
+        "editorOverviewRuler.warningForeground": "#d79921",
+        "editorOverviewRuler.infoForeground": "#d3869b",
+        "editorGutter.background": "#32302f00",
+        "editorGutter.modifiedBackground": "#83a598",
+        "editorGutter.addedBackground": "#b8bb26",
+        "editorGutter.deletedBackground": "#fb4934",
+        "editorError.foreground": "#cc241d",
+        "editorWarning.foreground": "#d79921",
+        "editorInfo.foreground": "#458588",
+
+        "editorBracketHighlight.foreground1": "#b16286",
+        "editorBracketHighlight.foreground2": "#458588",
+        "editorBracketHighlight.foreground3": "#689d6a",
+        "editorBracketHighlight.foreground4": "#98971a",
+        "editorBracketHighlight.foreground5": "#d79921",
+        "editorBracketHighlight.foreground6": "#d65d0e",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#cc241d",
+
+        "diffEditor.insertedTextBackground": "#b8bb2630",
+        "diffEditor.removedTextBackground": "#fb493430",
+
+        "editorWidget.background": "#32302f",
+        "editorWidget.border": "#3c3836",
+        "editorSuggestWidget.background": "#32302f",
+        "editorSuggestWidget.foreground": "#ebdbb2",
+        "editorSuggestWidget.highlightForeground": "#689d6a",
+        "editorSuggestWidget.selectedBackground": "#3c383660",
+        "editorSuggestWidget.border": "#3c3836",
+
+        "peekView.border": "#3c3836",
+        "peekViewEditor.background": "#3c383670",
+        "peekViewEditor.matchHighlightBackground": "#504945",
+        "peekViewEditorGutter.background": "#3c383670",
+        "peekViewResult.background": "#3c383670",
+        "peekViewResult.fileForeground": "#ebdbb2",
+        "peekViewResult.selectionBackground": "#45858820",
+        "peekViewResult.selectionForeground": "#ebdbb2",
+        "peekViewResult.lineForeground": "#ebdbb2",
+        "peekViewResult.matchHighlightBackground": "#504945",
+        "peekViewTitle.background": "#3c383670",
+        "peekViewTitleDescription.foreground": "#bdae93",
+        "peekViewTitleLabel.foreground": "#ebdbb2",
+
+        "merge.currentHeaderBackground": "#45858840",
+        "merge.currentContentBackground": "#45858820",
+        "merge.incomingHeaderBackground": "#689d6a40",
+        "merge.incomingContentBackground": "#689d6a20",
+        "merge.border": "#32302f00",
+        "editorOverviewRuler.currentContentForeground": "#458588",
+        "editorOverviewRuler.incomingContentForeground": "#689d6a",
+        "editorOverviewRuler.commonContentForeground": "#928374",
+
+        "panel.border": "#3c3836",
+        "panelTitle.activeForeground": "#ebdbb2",
+
+        "statusBar.background": "#32302f",
+        "statusBar.border": "#3c3836",
+        "statusBar.foreground": "#ebdbb2",
+        "statusBar.debuggingBackground": "#fe8019",
+        "statusBar.debuggingForeground": "#32302f",
+        "statusBar.debuggingBorder": "#32302f00",
+        "statusBar.noFolderBackground": "#32302f",
+        "statusBar.noFolderBorder": "#32302f00",
+
+        "terminal.ansiBlack": "#3c3836",
+        "terminal.ansiBrightBlack": "#928374",
+        "terminal.ansiRed": "#cc241d",
+        "terminal.ansiBrightRed": "#fb4934",
+        "terminal.ansiGreen": "#98971a",
+        "terminal.ansiBrightGreen": "#b8bb26",
+        "terminal.ansiYellow": "#d79921",
+        "terminal.ansiBrightYellow": "#fabd2f",
+        "terminal.ansiBlue": "#458588",
+        "terminal.ansiBrightBlue": "#83a598",
+        "terminal.ansiMagenta": "#b16286",
+        "terminal.ansiBrightMagenta": "#d3869b",
+        "terminal.ansiCyan": "#689d6a",
+        "terminal.ansiBrightCyan": "#8ec07c",
+        "terminal.ansiWhite": "#a89984",
+        "terminal.ansiBrightWhite": "#ebdbb2",
+        "terminal.foreground": "#ebdbb2",
+        "terminal.background": "#32302f",
+
+        "titleBar.activeBackground": "#32302f",
+        "titleBar.activeForeground": "#ebdbb2",
+        "titleBar.inactiveBackground": "#32302f",
+
+        "gitDecoration.modifiedResourceForeground": "#d79921",
+        "gitDecoration.deletedResourceForeground": "#cc241d",
+        "gitDecoration.untrackedResourceForeground": "#98971a",
+        "gitDecoration.ignoredResourceForeground": "#7c6f64",
+        "gitDecoration.conflictingResourceForeground": "#b16286",
+
+        "menu.border": "#3c3836",
+        "menu.separatorBackground": "#3c3836",
+
+        "notebook.cellEditorBackground": "#282828",
+        "notebook.focusedCellBorder": "#a89984",
+        "notebook.cellBorderColor": "#665c54",
+        "notebook.focusedEditorBorder": "#665c54",
+
+        "extensionButton.prominentBackground": "#b8bb2680",
+        "extensionButton.prominentHoverBackground": "#b8bb2630",
+
+        "textLink.foreground": "#83a598",
+        "textLink.activeForeground": "#458588",
+        "debugToolBar.background": "#32302f"
+    },
+    "semanticTokenColors": {
+        "constant.builtin": "#d3869b",
+        "property": "#83a598",
+        "property:python": "#ebdbb2",
+        "parameter": "#83a598",
+        "variable": "#ebdbb2",
+        "function": "#8ec07c",
+        "function.builtin": "#fe8019",
+        "method": "#8ec07c"
+    }
+}

assets/themes/src/vscode/gruvbox/gruvbox-light-hard.json 🔗

@@ -0,0 +1,1073 @@
+{
+    "$schema": "vscode://schemas/color-theme",
+    "name": "Gruvbox Light Hard",
+    "semanticHighlighting": true,
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "header",
+            "settings": {
+                "foreground": "#458588"
+            }
+        },
+        {
+            "scope": ["comment", "punctuation.definition.comment"],
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant", "support.constant", "variable.arguments"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": "constant.rgb-value",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "entity.name.selector",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["entity.name.tag", "punctuation.tag"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#cc241d"
+            }
+        },
+        {
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#b16286"
+            }
+        },
+        {
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.string",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.numeric",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "meta.header.diff",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "storage",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "string",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.tag",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.value",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "string.escape",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "string.quasi",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "string.entity",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "object",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "module.node",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": "support.type.property-name",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "keyword.control.module",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "keyword.control.less",
+            "settings": {
+                "foreground": "#d79921"
+            }
+        },
+        {
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "keyword.operator.new",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "metatag.php",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "support.function.git-rebase",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "constant.sha.git-rebase",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "Types declaration and references",
+            "scope": [
+                "meta.type.name",
+                "meta.return.type",
+                "meta.return-type",
+                "meta.cast",
+                "meta.type.annotation",
+                "support.type",
+                "storage.type.cs",
+                "variable.class"
+            ],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["variable.this", "support.variable"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": [
+                "entity.name",
+                "entity.static",
+                "entity.name.class.static.function",
+                "entity.name.function",
+                "entity.name.class",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "name": "Function declarations",
+            "scope": ["entity.function", "entity.name.function.static"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "entity.name.function.function-call",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "support.function.builtin",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.method",
+                "entity.name.method.function-call",
+                "entity.name.static.function-call"
+            ],
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "brace",
+            "settings": {
+                "foreground": "#504945"
+            }
+        },
+        {
+            "name": "variables",
+            "scope": [
+                "meta.parameter.type.variable",
+                "variable.parameter",
+                "variable.name",
+                "variable.other",
+                "variable",
+                "string.constant.other.placeholder"
+            ],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": "prototype",
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#7c6f64"
+            }
+        },
+        {
+            "scope": "punctuation.quoted",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "punctuation.quasi",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "URL",
+            "scope": ["*url*", "*link*", "*uri*"],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+
+        {
+            "name": "Python function",
+            "scope": ["meta.function.python", "entity.name.function.python"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "Python Function and Class definition keywords",
+            "scope": [
+                "storage.type.function.python",
+                "storage.modifier.declaration",
+                "storage.type.class.python",
+                "storage.type.string.python"
+            ],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "Async keyword",
+            "scope": ["storage.type.function.async.python"],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": "meta.function-call.generic",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "Python Function Arguments",
+            "scope": "meta.function-call.arguments",
+            "settings": {
+                "foreground": "#504945"
+            }
+        },
+        {
+            "name": "Python Function decorator",
+            "scope": "entity.name.function.decorator",
+            "settings": {
+                "foreground": "#b57614",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Python ALL CAPS",
+            "scope": "constant.other.caps",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "punctuation.definition.logical-expression",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": ["string.interpolated.dollar.shell", "string.interpolated.backtick.shell"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+
+        {
+            "scope": "keyword.control.directive",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "support.function.C99",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+
+        {
+            "name": "C# functions & namespace",
+            "scope": [
+                "meta.function.cs",
+                "entity.name.function.cs",
+                "entity.name.type.namespace.cs"
+            ],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "C# Variables",
+            "scope": [
+                "keyword.other.using.cs",
+                "entity.name.variable.field.cs",
+                "entity.name.variable.local.cs",
+                "variable.other.readwrite.cs"
+            ],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "C# This",
+            "scope": ["keyword.other.this.cs", "keyword.other.base.cs"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+
+        {
+            "scope": "meta.scope.prerequisites",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": "entity.name.function.target",
+            "settings": {
+                "foreground": "#79740e",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "name": "coloring of the Java import and package identifiers",
+            "scope": ["storage.modifier.import.java", "storage.modifier.package.java"],
+            "settings": {
+                "foreground": "#665c54"
+            }
+        },
+        {
+            "scope": ["keyword.other.import.java", "keyword.other.package.java"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "storage.type.java",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": "storage.type.annotation",
+            "settings": {
+                "foreground": "#076678",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "keyword.other.documentation.javadoc",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "comment.block.javadoc variable.parameter.java",
+            "settings": {
+                "foreground": "#79740e",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": [
+                "source.java variable.other.object",
+                "source.java variable.other.definition.java"
+            ],
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+
+        {
+            "name": "Lisp optional function parameters",
+            "scope": "meta.function-parameters.lisp",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+
+        {
+            "scope": "markup.underline",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "string.other.link.title.markdown",
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.punctuation.quote.beginning",
+            "settings": {
+                "foreground": "#98971a"
+            }
+        },
+        {
+            "scope": "markup.punctuation.list.beginning",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["markup.inline.raw", "markup.fenced_code.block"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+
+        {
+            "scope": "string.quoted.double.json",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "JSON Level 0",
+            "scope": ["source.json meta.structure.dictionary.json support.type.property-name.json"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "JSON Level 1",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "JSON Level 2",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "name": "JSON Level 3",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+
+        {
+            "scope": "entity.other.attribute-name.css",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "source.css meta.selector",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "support.type.property-name.css",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name.class",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": [
+                "source.css support.function.transform",
+                "source.css support.function.timing-function",
+                "source.css support.function.misc"
+            ],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "CSS property value",
+            "scope": [
+                "support.property-value",
+                "constant.rgb-value",
+                "support.property-value.scss",
+                "constant.rgb-value.scss"
+            ],
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": ["entity.name.tag.css"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["text.html entity.name.tag", "text.html punctuation.tag"],
+            "settings": {
+                "foreground": "#427b58",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": ["source.js variable.language"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "scope": ["source.ts variable.language"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "scope": ["source.go storage.type"],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.import"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": ["source.go keyword.package", "source.go keyword.import"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": ["source.go keyword.interface", "source.go keyword.struct"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.type"],
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.function"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+
+        {
+            "scope": ["keyword.control.cucumber.table"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+
+        {
+            "name": "ReasonML String",
+            "scope": ["source.reason string.double", "source.reason string.regexp"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "ReasonML equals sign",
+            "scope": ["source.reason keyword.control.less"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "ReasonML variable",
+            "scope": ["source.reason entity.name.function"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "ReasonML property",
+            "scope": ["source.reason support.property-value", "source.reason entity.name.filename"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "name": "Powershell member",
+            "scope": ["source.powershell variable.other.member.powershell"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "name": "Powershell function",
+            "scope": ["source.powershell support.function.powershell"],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "name": "Powershell function attribute",
+            "scope": ["source.powershell support.function.attribute.powershell"],
+            "settings": {
+                "foreground": "#665c54"
+            }
+        },
+        {
+            "name": "Powershell hashtable member",
+            "scope": [
+                "source.powershell meta.hashtable.assignment.powershell variable.other.readwrite.powershell"
+            ],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        }
+    ],
+    "colors": {
+        "focusBorder": "#ebdbb2",
+        "foreground": "#3c3836",
+        "widget.shadow": "#f9f5d730",
+        "selection.background": "#689d6a80",
+        "errorForeground": "#9d0006",
+
+        "button.background": "#45858880",
+        "button.foreground": "#3c3836",
+        "button.hoverBackground": "#45858860",
+
+        "dropdown.background": "#f9f5d7",
+        "dropdown.border": "#ebdbb2",
+        "dropdown.foreground": "#3c3836",
+
+        "input.background": "#3c383605",
+        "input.border": "#ebdbb2",
+        "input.foreground": "#3c3836",
+        "input.placeholderForeground": "#3c383660",
+        "inputValidation.errorBorder": "#9d0006",
+        "inputValidation.errorBackground": "#cc241d80",
+        "inputValidation.infoBorder": "#076678",
+        "inputValidation.infoBackground": "#45858880",
+        "inputValidation.warningBorder": "#b57614",
+        "inputValidation.warningBackground": "#d7992180",
+        "inputOption.activeBorder": "#3c383660",
+
+        "scrollbar.shadow": "#f9f5d7",
+        "scrollbarSlider.activeBackground": "#689d6a",
+        "scrollbarSlider.hoverBackground": "#bdae93",
+        "scrollbarSlider.background": "#d5c4a199",
+
+        "badge.background": "#8f3f71",
+        "badge.foreground": "#f9f5d7",
+
+        "progressBar.background": "#689d6a",
+
+        "list.activeSelectionBackground": "#ebdbb280",
+        "list.activeSelectionForeground": "#af3a03",
+        "list.hoverBackground": "#ebdbb280",
+        "list.hoverForeground": "#504945",
+        "list.focusBackground": "#ebdbb2",
+        "list.focusForeground": "#3c3836",
+        "list.inactiveSelectionForeground": "#d65d0e",
+        "list.inactiveSelectionBackground": "#ebdbb280",
+        "list.dropBackground": "#ebdbb2",
+        "list.highlightForeground": "#689d6a",
+
+        "sideBar.background": "#f9f5d7",
+        "sideBar.foreground": "#504945",
+        "sideBar.border": "#ebdbb2",
+        "sideBarTitle.foreground": "#3c3836",
+        "sideBarSectionHeader.background": "#f9f5d700",
+        "sideBarSectionHeader.foreground": "#3c3836",
+
+        "activityBar.background": "#f9f5d7",
+        "activityBar.foreground": "#3c3836",
+        "activityBar.border": "#ebdbb2",
+        "activityBarBadge.background": "#458588",
+        "activityBarBadge.foreground": "#ebdbb2",
+
+        "editorGroup.border": "#ebdbb2",
+        "editorGroup.dropBackground": "#ebdbb260",
+        "editorGroupHeader.noTabsBackground": "#ebdbb2",
+        "editorGroupHeader.tabsBackground": "#f9f5d7",
+        "editorGroupHeader.tabsBorder": "#ebdbb2",
+
+        "tab.border": "#f9f5d700",
+        "tab.activeBackground": "#f2e5bc",
+        "tab.activeBorder": "#d65d0e",
+        "tab.activeForeground": "#3c3836",
+        "tab.inactiveForeground": "#7c6f64",
+        "tab.inactiveBackground": "#f9f5d7",
+        "tab.unfocusedActiveForeground": "#7c6f64",
+        "tab.unfocusedActiveBorder": "#f9f5d700",
+        "tab.unfocusedInactiveForeground": "#928374",
+
+        "editor.background": "#f9f5d7",
+        "editor.foreground": "#3c3836",
+        "editorLineNumber.foreground": "#bdae93",
+        "editorCursor.foreground": "#3c3836",
+        "editor.selectionBackground": "#689d6a40",
+        "editor.selectionHighlightBackground": "#b5761440",
+        "editor.hoverHighlightBackground": "#689d6a50",
+        "editorLink.activeForeground": "#3c3836",
+        "editor.findMatchBackground": "#07667870",
+        "editor.findMatchHighlightBackground": "#af3a0330",
+        "editor.findRangeHighlightBackground": "#07667870",
+        "editor.lineHighlightBackground": "#ebdbb260",
+        "editor.lineHighlightBorder": "#ebdbb200",
+        "editorWhitespace.foreground": "#7c6f6420",
+        "editorRuler.foreground": "#7c6f6440",
+        "editorCodeLens.foreground": "#7c6f6490",
+        "editorBracketMatch.border": "#f9f5d700",
+        "editorBracketMatch.background": "#92837480",
+        "editorHoverWidget.background": "#f9f5d7",
+        "editorHoverWidget.border": "#ebdbb2",
+        "editorOverviewRuler.border": "#f9f5d700",
+        "editorOverviewRuler.findMatchForeground": "#665c54",
+        "editorOverviewRuler.rangeHighlightForeground": "#665c54",
+        "editorOverviewRuler.selectionHighlightForeground": "#bdae93",
+        "editorOverviewRuler.wordHighlightForeground": "#bdae93",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#bdae93",
+        "editorOverviewRuler.modifiedForeground": "#076678",
+        "editorOverviewRuler.addedForeground": "#076678",
+        "editorOverviewRuler.deletedForeground": "#076678",
+        "editorOverviewRuler.errorForeground": "#9d0006",
+        "editorOverviewRuler.warningForeground": "#d79921",
+        "editorOverviewRuler.infoForeground": "#8f3f71",
+        "editorGutter.background": "#f9f5d700",
+        "editorGutter.modifiedBackground": "#076678",
+        "editorGutter.addedBackground": "#79740e",
+        "editorGutter.deletedBackground": "#9d0006",
+        "editorError.foreground": "#cc241d",
+        "editorWarning.foreground": "#d79921",
+        "editorInfo.foreground": "#458588",
+
+        "editorBracketHighlight.foreground1": "#b16286",
+        "editorBracketHighlight.foreground2": "#458588",
+        "editorBracketHighlight.foreground3": "#689d6a",
+        "editorBracketHighlight.foreground4": "#98971a",
+        "editorBracketHighlight.foreground5": "#d79921",
+        "editorBracketHighlight.foreground6": "#d65d0e",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#cc241d",
+
+        "diffEditor.insertedTextBackground": "#79740e30",
+        "diffEditor.removedTextBackground": "#9d000630",
+
+        "editorWidget.background": "#f9f5d7",
+        "editorWidget.border": "#ebdbb2",
+        "editorSuggestWidget.background": "#f9f5d7",
+        "editorSuggestWidget.foreground": "#3c3836",
+        "editorSuggestWidget.highlightForeground": "#689d6a",
+        "editorSuggestWidget.selectedBackground": "#ebdbb260",
+        "editorSuggestWidget.border": "#ebdbb2",
+
+        "peekView.border": "#ebdbb2",
+        "peekViewEditor.background": "#ebdbb270",
+        "peekViewEditor.matchHighlightBackground": "#d5c4a1",
+        "peekViewEditorGutter.background": "#ebdbb270",
+        "peekViewResult.background": "#ebdbb270",
+        "peekViewResult.fileForeground": "#3c3836",
+        "peekViewResult.selectionBackground": "#45858820",
+        "peekViewResult.selectionForeground": "#3c3836",
+        "peekViewResult.lineForeground": "#3c3836",
+        "peekViewResult.matchHighlightBackground": "#d5c4a1",
+        "peekViewTitle.background": "#ebdbb270",
+        "peekViewTitleDescription.foreground": "#665c54",
+        "peekViewTitleLabel.foreground": "#3c3836",
+
+        "merge.currentHeaderBackground": "#45858840",
+        "merge.currentContentBackground": "#45858820",
+        "merge.incomingHeaderBackground": "#689d6a40",
+        "merge.incomingContentBackground": "#689d6a20",
+        "merge.border": "#f9f5d700",
+        "editorOverviewRuler.currentContentForeground": "#458588",
+        "editorOverviewRuler.incomingContentForeground": "#689d6a",
+        "editorOverviewRuler.commonContentForeground": "#928374",
+
+        "panel.border": "#ebdbb2",
+        "panelTitle.activeForeground": "#3c3836",
+
+        "statusBar.background": "#f9f5d7",
+        "statusBar.border": "#ebdbb2",
+        "statusBar.foreground": "#3c3836",
+        "statusBar.debuggingBackground": "#af3a03",
+        "statusBar.debuggingForeground": "#f9f5d7",
+        "statusBar.debuggingBorder": "#f9f5d700",
+        "statusBar.noFolderBackground": "#f9f5d7",
+        "statusBar.noFolderBorder": "#f9f5d700",
+
+        "terminal.ansiBlack": "#ebdbb2",
+        "terminal.ansiBrightBlack": "#928374",
+        "terminal.ansiRed": "#cc241d",
+        "terminal.ansiBrightRed": "#9d0006",
+        "terminal.ansiGreen": "#98971a",
+        "terminal.ansiBrightGreen": "#79740e",
+        "terminal.ansiYellow": "#d79921",
+        "terminal.ansiBrightYellow": "#b57614",
+        "terminal.ansiBlue": "#458588",
+        "terminal.ansiBrightBlue": "#076678",
+        "terminal.ansiMagenta": "#b16286",
+        "terminal.ansiBrightMagenta": "#8f3f71",
+        "terminal.ansiCyan": "#689d6a",
+        "terminal.ansiBrightCyan": "#427b58",
+        "terminal.ansiWhite": "#7c6f64",
+        "terminal.ansiBrightWhite": "#3c3836",
+        "terminal.foreground": "#3c3836",
+        "terminal.background": "#f9f5d7",
+
+        "titleBar.activeBackground": "#f9f5d7",
+        "titleBar.activeForeground": "#3c3836",
+        "titleBar.inactiveBackground": "#f9f5d7",
+
+        "gitDecoration.modifiedResourceForeground": "#d79921",
+        "gitDecoration.deletedResourceForeground": "#cc241d",
+        "gitDecoration.untrackedResourceForeground": "#98971a",
+        "gitDecoration.ignoredResourceForeground": "#a89984",
+        "gitDecoration.conflictingResourceForeground": "#b16286",
+
+        "menu.border": "#ebdbb2",
+        "menu.separatorBackground": "#ebdbb2",
+
+        "notebook.cellEditorBackground": "#fbf1c7",
+        "notebook.focusedCellBorder": "#7c6f64",
+        "notebook.cellBorderColor": "#d5c4a1",
+        "notebook.focusedEditorBorder": "#d5c4a1",
+
+        "extensionButton.prominentBackground": "#79740e80",
+        "extensionButton.prominentHoverBackground": "#79740e30",
+
+        "textLink.foreground": "#076678",
+        "textLink.activeForeground": "#458588",
+        "debugToolBar.background": "#f9f5d7"
+    },
+    "semanticTokenColors": {
+        "constant.builtin": "#8f3f71",
+        "property": "#076678",
+        "property:python": "#3c3836",
+        "parameter": "#076678",
+        "variable": "#3c3836",
+        "function": "#427b58",
+        "function.builtin": "#af3a03",
+        "method": "#427b58"
+    }
+}

assets/themes/src/vscode/gruvbox/gruvbox-light-medium.json 🔗

@@ -0,0 +1,1073 @@
+{
+    "$schema": "vscode://schemas/color-theme",
+    "name": "Gruvbox Light Medium",
+    "semanticHighlighting": true,
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "header",
+            "settings": {
+                "foreground": "#458588"
+            }
+        },
+        {
+            "scope": ["comment", "punctuation.definition.comment"],
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant", "support.constant", "variable.arguments"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": "constant.rgb-value",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "entity.name.selector",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["entity.name.tag", "punctuation.tag"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#cc241d"
+            }
+        },
+        {
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#b16286"
+            }
+        },
+        {
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.string",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.numeric",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "meta.header.diff",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "storage",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "string",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.tag",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.value",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "string.escape",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "string.quasi",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "string.entity",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "object",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "module.node",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": "support.type.property-name",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "keyword.control.module",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "keyword.control.less",
+            "settings": {
+                "foreground": "#d79921"
+            }
+        },
+        {
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "keyword.operator.new",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "metatag.php",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "support.function.git-rebase",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "constant.sha.git-rebase",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "Types declaration and references",
+            "scope": [
+                "meta.type.name",
+                "meta.return.type",
+                "meta.return-type",
+                "meta.cast",
+                "meta.type.annotation",
+                "support.type",
+                "storage.type.cs",
+                "variable.class"
+            ],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["variable.this", "support.variable"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": [
+                "entity.name",
+                "entity.static",
+                "entity.name.class.static.function",
+                "entity.name.function",
+                "entity.name.class",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "name": "Function declarations",
+            "scope": ["entity.function", "entity.name.function.static"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "entity.name.function.function-call",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "support.function.builtin",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.method",
+                "entity.name.method.function-call",
+                "entity.name.static.function-call"
+            ],
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "brace",
+            "settings": {
+                "foreground": "#504945"
+            }
+        },
+        {
+            "name": "variables",
+            "scope": [
+                "meta.parameter.type.variable",
+                "variable.parameter",
+                "variable.name",
+                "variable.other",
+                "variable",
+                "string.constant.other.placeholder"
+            ],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": "prototype",
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#7c6f64"
+            }
+        },
+        {
+            "scope": "punctuation.quoted",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "punctuation.quasi",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "URL",
+            "scope": ["*url*", "*link*", "*uri*"],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+
+        {
+            "name": "Python function",
+            "scope": ["meta.function.python", "entity.name.function.python"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "Python Function and Class definition keywords",
+            "scope": [
+                "storage.type.function.python",
+                "storage.modifier.declaration",
+                "storage.type.class.python",
+                "storage.type.string.python"
+            ],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "Async keyword",
+            "scope": ["storage.type.function.async.python"],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": "meta.function-call.generic",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "Python Function Arguments",
+            "scope": "meta.function-call.arguments",
+            "settings": {
+                "foreground": "#504945"
+            }
+        },
+        {
+            "name": "Python Function decorator",
+            "scope": "entity.name.function.decorator",
+            "settings": {
+                "foreground": "#b57614",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Python ALL CAPS",
+            "scope": "constant.other.caps",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "punctuation.definition.logical-expression",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": ["string.interpolated.dollar.shell", "string.interpolated.backtick.shell"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+
+        {
+            "scope": "keyword.control.directive",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "support.function.C99",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+
+        {
+            "name": "C# functions & namespace",
+            "scope": [
+                "meta.function.cs",
+                "entity.name.function.cs",
+                "entity.name.type.namespace.cs"
+            ],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "C# Variables",
+            "scope": [
+                "keyword.other.using.cs",
+                "entity.name.variable.field.cs",
+                "entity.name.variable.local.cs",
+                "variable.other.readwrite.cs"
+            ],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "C# This",
+            "scope": ["keyword.other.this.cs", "keyword.other.base.cs"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+
+        {
+            "scope": "meta.scope.prerequisites",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": "entity.name.function.target",
+            "settings": {
+                "foreground": "#79740e",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "name": "coloring of the Java import and package identifiers",
+            "scope": ["storage.modifier.import.java", "storage.modifier.package.java"],
+            "settings": {
+                "foreground": "#665c54"
+            }
+        },
+        {
+            "scope": ["keyword.other.import.java", "keyword.other.package.java"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "storage.type.java",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": "storage.type.annotation",
+            "settings": {
+                "foreground": "#076678",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "keyword.other.documentation.javadoc",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "comment.block.javadoc variable.parameter.java",
+            "settings": {
+                "foreground": "#79740e",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": [
+                "source.java variable.other.object",
+                "source.java variable.other.definition.java"
+            ],
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+
+        {
+            "name": "Lisp optional function parameters",
+            "scope": "meta.function-parameters.lisp",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+
+        {
+            "scope": "markup.underline",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "string.other.link.title.markdown",
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.punctuation.quote.beginning",
+            "settings": {
+                "foreground": "#98971a"
+            }
+        },
+        {
+            "scope": "markup.punctuation.list.beginning",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["markup.inline.raw", "markup.fenced_code.block"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+
+        {
+            "scope": "string.quoted.double.json",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "JSON Level 0",
+            "scope": ["source.json meta.structure.dictionary.json support.type.property-name.json"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "JSON Level 1",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "JSON Level 2",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "name": "JSON Level 3",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+
+        {
+            "scope": "entity.other.attribute-name.css",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "source.css meta.selector",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "support.type.property-name.css",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name.class",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": [
+                "source.css support.function.transform",
+                "source.css support.function.timing-function",
+                "source.css support.function.misc"
+            ],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "CSS property value",
+            "scope": [
+                "support.property-value",
+                "constant.rgb-value",
+                "support.property-value.scss",
+                "constant.rgb-value.scss"
+            ],
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": ["entity.name.tag.css"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["text.html entity.name.tag", "text.html punctuation.tag"],
+            "settings": {
+                "foreground": "#427b58",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": ["source.js variable.language"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "scope": ["source.ts variable.language"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "scope": ["source.go storage.type"],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.import"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": ["source.go keyword.package", "source.go keyword.import"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": ["source.go keyword.interface", "source.go keyword.struct"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.type"],
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.function"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+
+        {
+            "scope": ["keyword.control.cucumber.table"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+
+        {
+            "name": "ReasonML String",
+            "scope": ["source.reason string.double", "source.reason string.regexp"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "ReasonML equals sign",
+            "scope": ["source.reason keyword.control.less"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "ReasonML variable",
+            "scope": ["source.reason entity.name.function"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "ReasonML property",
+            "scope": ["source.reason support.property-value", "source.reason entity.name.filename"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "name": "Powershell member",
+            "scope": ["source.powershell variable.other.member.powershell"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "name": "Powershell function",
+            "scope": ["source.powershell support.function.powershell"],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "name": "Powershell function attribute",
+            "scope": ["source.powershell support.function.attribute.powershell"],
+            "settings": {
+                "foreground": "#665c54"
+            }
+        },
+        {
+            "name": "Powershell hashtable member",
+            "scope": [
+                "source.powershell meta.hashtable.assignment.powershell variable.other.readwrite.powershell"
+            ],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        }
+    ],
+    "colors": {
+        "focusBorder": "#ebdbb2",
+        "foreground": "#3c3836",
+        "widget.shadow": "#fbf1c730",
+        "selection.background": "#689d6a80",
+        "errorForeground": "#9d0006",
+
+        "button.background": "#45858880",
+        "button.foreground": "#3c3836",
+        "button.hoverBackground": "#45858860",
+
+        "dropdown.background": "#fbf1c7",
+        "dropdown.border": "#ebdbb2",
+        "dropdown.foreground": "#3c3836",
+
+        "input.background": "#3c383605",
+        "input.border": "#ebdbb2",
+        "input.foreground": "#3c3836",
+        "input.placeholderForeground": "#3c383660",
+        "inputValidation.errorBorder": "#9d0006",
+        "inputValidation.errorBackground": "#cc241d80",
+        "inputValidation.infoBorder": "#076678",
+        "inputValidation.infoBackground": "#45858880",
+        "inputValidation.warningBorder": "#b57614",
+        "inputValidation.warningBackground": "#d7992180",
+        "inputOption.activeBorder": "#3c383660",
+
+        "scrollbar.shadow": "#fbf1c7",
+        "scrollbarSlider.activeBackground": "#689d6a",
+        "scrollbarSlider.hoverBackground": "#bdae93",
+        "scrollbarSlider.background": "#d5c4a199",
+
+        "badge.background": "#8f3f71",
+        "badge.foreground": "#fbf1c7",
+
+        "progressBar.background": "#689d6a",
+
+        "list.activeSelectionBackground": "#ebdbb280",
+        "list.activeSelectionForeground": "#af3a03",
+        "list.hoverBackground": "#ebdbb280",
+        "list.hoverForeground": "#504945",
+        "list.focusBackground": "#ebdbb2",
+        "list.focusForeground": "#3c3836",
+        "list.inactiveSelectionForeground": "#d65d0e",
+        "list.inactiveSelectionBackground": "#ebdbb280",
+        "list.dropBackground": "#ebdbb2",
+        "list.highlightForeground": "#689d6a",
+
+        "sideBar.background": "#fbf1c7",
+        "sideBar.foreground": "#504945",
+        "sideBar.border": "#ebdbb2",
+        "sideBarTitle.foreground": "#3c3836",
+        "sideBarSectionHeader.background": "#fbf1c700",
+        "sideBarSectionHeader.foreground": "#3c3836",
+
+        "activityBar.background": "#fbf1c7",
+        "activityBar.foreground": "#3c3836",
+        "activityBar.border": "#ebdbb2",
+        "activityBarBadge.background": "#458588",
+        "activityBarBadge.foreground": "#ebdbb2",
+
+        "editorGroup.border": "#ebdbb2",
+        "editorGroup.dropBackground": "#ebdbb260",
+        "editorGroupHeader.noTabsBackground": "#ebdbb2",
+        "editorGroupHeader.tabsBackground": "#fbf1c7",
+        "editorGroupHeader.tabsBorder": "#ebdbb2",
+
+        "tab.border": "#fbf1c700",
+        "tab.activeBackground": "#ebdbb2",
+        "tab.activeBorder": "#d65d0e",
+        "tab.activeForeground": "#3c3836",
+        "tab.inactiveForeground": "#7c6f64",
+        "tab.inactiveBackground": "#fbf1c7",
+        "tab.unfocusedActiveForeground": "#7c6f64",
+        "tab.unfocusedActiveBorder": "#fbf1c700",
+        "tab.unfocusedInactiveForeground": "#928374",
+
+        "editor.background": "#fbf1c7",
+        "editor.foreground": "#3c3836",
+        "editorLineNumber.foreground": "#bdae93",
+        "editorCursor.foreground": "#3c3836",
+        "editor.selectionBackground": "#689d6a40",
+        "editor.selectionHighlightBackground": "#b5761440",
+        "editor.hoverHighlightBackground": "#689d6a50",
+        "editorLink.activeForeground": "#3c3836",
+        "editor.findMatchBackground": "#07667870",
+        "editor.findMatchHighlightBackground": "#af3a0330",
+        "editor.findRangeHighlightBackground": "#07667870",
+        "editor.lineHighlightBackground": "#ebdbb260",
+        "editor.lineHighlightBorder": "#ebdbb200",
+        "editorWhitespace.foreground": "#7c6f6420",
+        "editorRuler.foreground": "#7c6f6440",
+        "editorCodeLens.foreground": "#7c6f6490",
+        "editorBracketMatch.border": "#fbf1c700",
+        "editorBracketMatch.background": "#92837480",
+        "editorHoverWidget.background": "#fbf1c7",
+        "editorHoverWidget.border": "#ebdbb2",
+        "editorOverviewRuler.border": "#fbf1c700",
+        "editorOverviewRuler.findMatchForeground": "#665c54",
+        "editorOverviewRuler.rangeHighlightForeground": "#665c54",
+        "editorOverviewRuler.selectionHighlightForeground": "#bdae93",
+        "editorOverviewRuler.wordHighlightForeground": "#bdae93",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#bdae93",
+        "editorOverviewRuler.modifiedForeground": "#076678",
+        "editorOverviewRuler.addedForeground": "#076678",
+        "editorOverviewRuler.deletedForeground": "#076678",
+        "editorOverviewRuler.errorForeground": "#9d0006",
+        "editorOverviewRuler.warningForeground": "#d79921",
+        "editorOverviewRuler.infoForeground": "#8f3f71",
+        "editorGutter.background": "#fbf1c700",
+        "editorGutter.modifiedBackground": "#076678",
+        "editorGutter.addedBackground": "#79740e",
+        "editorGutter.deletedBackground": "#9d0006",
+        "editorError.foreground": "#cc241d",
+        "editorWarning.foreground": "#d79921",
+        "editorInfo.foreground": "#458588",
+
+        "editorBracketHighlight.foreground1": "#b16286",
+        "editorBracketHighlight.foreground2": "#458588",
+        "editorBracketHighlight.foreground3": "#689d6a",
+        "editorBracketHighlight.foreground4": "#98971a",
+        "editorBracketHighlight.foreground5": "#d79921",
+        "editorBracketHighlight.foreground6": "#d65d0e",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#cc241d",
+
+        "diffEditor.insertedTextBackground": "#79740e30",
+        "diffEditor.removedTextBackground": "#9d000630",
+
+        "editorWidget.background": "#fbf1c7",
+        "editorWidget.border": "#ebdbb2",
+        "editorSuggestWidget.background": "#fbf1c7",
+        "editorSuggestWidget.foreground": "#3c3836",
+        "editorSuggestWidget.highlightForeground": "#689d6a",
+        "editorSuggestWidget.selectedBackground": "#ebdbb260",
+        "editorSuggestWidget.border": "#ebdbb2",
+
+        "peekView.border": "#ebdbb2",
+        "peekViewEditor.background": "#ebdbb270",
+        "peekViewEditor.matchHighlightBackground": "#d5c4a1",
+        "peekViewEditorGutter.background": "#ebdbb270",
+        "peekViewResult.background": "#ebdbb270",
+        "peekViewResult.fileForeground": "#3c3836",
+        "peekViewResult.selectionBackground": "#45858820",
+        "peekViewResult.selectionForeground": "#3c3836",
+        "peekViewResult.lineForeground": "#3c3836",
+        "peekViewResult.matchHighlightBackground": "#d5c4a1",
+        "peekViewTitle.background": "#ebdbb270",
+        "peekViewTitleDescription.foreground": "#665c54",
+        "peekViewTitleLabel.foreground": "#3c3836",
+
+        "merge.currentHeaderBackground": "#45858840",
+        "merge.currentContentBackground": "#45858820",
+        "merge.incomingHeaderBackground": "#689d6a40",
+        "merge.incomingContentBackground": "#689d6a20",
+        "merge.border": "#fbf1c700",
+        "editorOverviewRuler.currentContentForeground": "#458588",
+        "editorOverviewRuler.incomingContentForeground": "#689d6a",
+        "editorOverviewRuler.commonContentForeground": "#928374",
+
+        "panel.border": "#ebdbb2",
+        "panelTitle.activeForeground": "#3c3836",
+
+        "statusBar.background": "#fbf1c7",
+        "statusBar.border": "#ebdbb2",
+        "statusBar.foreground": "#3c3836",
+        "statusBar.debuggingBackground": "#af3a03",
+        "statusBar.debuggingForeground": "#fbf1c7",
+        "statusBar.debuggingBorder": "#fbf1c700",
+        "statusBar.noFolderBackground": "#fbf1c7",
+        "statusBar.noFolderBorder": "#fbf1c700",
+
+        "terminal.ansiBlack": "#ebdbb2",
+        "terminal.ansiBrightBlack": "#928374",
+        "terminal.ansiRed": "#cc241d",
+        "terminal.ansiBrightRed": "#9d0006",
+        "terminal.ansiGreen": "#98971a",
+        "terminal.ansiBrightGreen": "#79740e",
+        "terminal.ansiYellow": "#d79921",
+        "terminal.ansiBrightYellow": "#b57614",
+        "terminal.ansiBlue": "#458588",
+        "terminal.ansiBrightBlue": "#076678",
+        "terminal.ansiMagenta": "#b16286",
+        "terminal.ansiBrightMagenta": "#8f3f71",
+        "terminal.ansiCyan": "#689d6a",
+        "terminal.ansiBrightCyan": "#427b58",
+        "terminal.ansiWhite": "#7c6f64",
+        "terminal.ansiBrightWhite": "#3c3836",
+        "terminal.foreground": "#3c3836",
+        "terminal.background": "#fbf1c7",
+
+        "titleBar.activeBackground": "#fbf1c7",
+        "titleBar.activeForeground": "#3c3836",
+        "titleBar.inactiveBackground": "#fbf1c7",
+
+        "gitDecoration.modifiedResourceForeground": "#d79921",
+        "gitDecoration.deletedResourceForeground": "#cc241d",
+        "gitDecoration.untrackedResourceForeground": "#98971a",
+        "gitDecoration.ignoredResourceForeground": "#a89984",
+        "gitDecoration.conflictingResourceForeground": "#b16286",
+
+        "menu.border": "#ebdbb2",
+        "menu.separatorBackground": "#ebdbb2",
+
+        "notebook.cellEditorBackground": "#f2e5bc",
+        "notebook.focusedCellBorder": "#665c54",
+        "notebook.cellBorderColor": "#bdae93",
+        "notebook.focusedEditorBorder": "#bdae93",
+
+        "extensionButton.prominentBackground": "#79740e80",
+        "extensionButton.prominentHoverBackground": "#79740e30",
+
+        "textLink.foreground": "#076678",
+        "textLink.activeForeground": "#458588",
+        "debugToolBar.background": "#fbf1c7"
+    },
+    "semanticTokenColors": {
+        "constant.builtin": "#8f3f71",
+        "property": "#076678",
+        "property:python": "#3c3836",
+        "parameter": "#076678",
+        "variable": "#3c3836",
+        "function": "#427b58",
+        "function.builtin": "#af3a03",
+        "method": "#427b58"
+    }
+}

assets/themes/src/vscode/gruvbox/gruvbox-light-soft.json 🔗

@@ -0,0 +1,1073 @@
+{
+    "$schema": "vscode://schemas/color-theme",
+    "name": "Gruvbox Light Soft",
+    "semanticHighlighting": true,
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "header",
+            "settings": {
+                "foreground": "#458588"
+            }
+        },
+        {
+            "scope": ["comment", "punctuation.definition.comment"],
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant", "support.constant", "variable.arguments"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": "constant.rgb-value",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "entity.name.selector",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["entity.name.tag", "punctuation.tag"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#cc241d"
+            }
+        },
+        {
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#b16286"
+            }
+        },
+        {
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.string",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "meta.preprocessor.numeric",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "meta.header.diff",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "storage",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "string",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.tag",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.value",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "string.escape",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "string.quasi",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "string.entity",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "object",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "module.node",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": "support.type.property-name",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "keyword.control.module",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "keyword.control.less",
+            "settings": {
+                "foreground": "#d79921"
+            }
+        },
+        {
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "keyword.operator.new",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "metatag.php",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "support.function.git-rebase",
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "constant.sha.git-rebase",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "Types declaration and references",
+            "scope": [
+                "meta.type.name",
+                "meta.return.type",
+                "meta.return-type",
+                "meta.cast",
+                "meta.type.annotation",
+                "support.type",
+                "storage.type.cs",
+                "variable.class"
+            ],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["variable.this", "support.variable"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": [
+                "entity.name",
+                "entity.static",
+                "entity.name.class.static.function",
+                "entity.name.function",
+                "entity.name.class",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "name": "Function declarations",
+            "scope": ["entity.function", "entity.name.function.static"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "entity.name.function.function-call",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "support.function.builtin",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.method",
+                "entity.name.method.function-call",
+                "entity.name.static.function-call"
+            ],
+            "settings": {
+                "foreground": "#689d6a"
+            }
+        },
+        {
+            "scope": "brace",
+            "settings": {
+                "foreground": "#504945"
+            }
+        },
+        {
+            "name": "variables",
+            "scope": [
+                "meta.parameter.type.variable",
+                "variable.parameter",
+                "variable.name",
+                "variable.other",
+                "variable",
+                "string.constant.other.placeholder"
+            ],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": "prototype",
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#7c6f64"
+            }
+        },
+        {
+            "scope": "punctuation.quoted",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "punctuation.quasi",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "URL",
+            "scope": ["*url*", "*link*", "*uri*"],
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+
+        {
+            "name": "Python function",
+            "scope": ["meta.function.python", "entity.name.function.python"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "Python Function and Class definition keywords",
+            "scope": [
+                "storage.type.function.python",
+                "storage.modifier.declaration",
+                "storage.type.class.python",
+                "storage.type.string.python"
+            ],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "Async keyword",
+            "scope": ["storage.type.function.async.python"],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": "meta.function-call.generic",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "Python Function Arguments",
+            "scope": "meta.function-call.arguments",
+            "settings": {
+                "foreground": "#504945"
+            }
+        },
+        {
+            "name": "Python Function decorator",
+            "scope": "entity.name.function.decorator",
+            "settings": {
+                "foreground": "#b57614",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Python ALL CAPS",
+            "scope": "constant.other.caps",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "scope": "punctuation.definition.logical-expression",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": ["string.interpolated.dollar.shell", "string.interpolated.backtick.shell"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+
+        {
+            "scope": "keyword.control.directive",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "support.function.C99",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+
+        {
+            "name": "C# functions & namespace",
+            "scope": [
+                "meta.function.cs",
+                "entity.name.function.cs",
+                "entity.name.type.namespace.cs"
+            ],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "C# Variables",
+            "scope": [
+                "keyword.other.using.cs",
+                "entity.name.variable.field.cs",
+                "entity.name.variable.local.cs",
+                "variable.other.readwrite.cs"
+            ],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "C# This",
+            "scope": ["keyword.other.this.cs", "keyword.other.base.cs"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+
+        {
+            "scope": "meta.scope.prerequisites",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": "entity.name.function.target",
+            "settings": {
+                "foreground": "#79740e",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "name": "coloring of the Java import and package identifiers",
+            "scope": ["storage.modifier.import.java", "storage.modifier.package.java"],
+            "settings": {
+                "foreground": "#665c54"
+            }
+        },
+        {
+            "scope": ["keyword.other.import.java", "keyword.other.package.java"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "storage.type.java",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": "storage.type.annotation",
+            "settings": {
+                "foreground": "#076678",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "keyword.other.documentation.javadoc",
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": "comment.block.javadoc variable.parameter.java",
+            "settings": {
+                "foreground": "#79740e",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": [
+                "source.java variable.other.object",
+                "source.java variable.other.definition.java"
+            ],
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+
+        {
+            "name": "Lisp optional function parameters",
+            "scope": "meta.function-parameters.lisp",
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+
+        {
+            "scope": "markup.underline",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "string.other.link.title.markdown",
+            "settings": {
+                "foreground": "#928374",
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "markup.punctuation.quote.beginning",
+            "settings": {
+                "foreground": "#98971a"
+            }
+        },
+        {
+            "scope": "markup.punctuation.list.beginning",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["markup.inline.raw", "markup.fenced_code.block"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+
+        {
+            "scope": "string.quoted.double.json",
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "JSON Level 0",
+            "scope": ["source.json meta.structure.dictionary.json support.type.property-name.json"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "JSON Level 1",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "JSON Level 2",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+        {
+            "name": "JSON Level 3",
+            "scope": [
+                "source.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json meta.structure.dictionary.value.json meta.structure.dictionary.json support.type.property-name.json"
+            ],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+
+        {
+            "scope": "entity.other.attribute-name.css",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "source.css meta.selector",
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": "support.type.property-name.css",
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "scope": "entity.other.attribute-name.class",
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": [
+                "source.css support.function.transform",
+                "source.css support.function.timing-function",
+                "source.css support.function.misc"
+            ],
+            "settings": {
+                "foreground": "#9d0006"
+            }
+        },
+        {
+            "name": "CSS property value",
+            "scope": [
+                "support.property-value",
+                "constant.rgb-value",
+                "support.property-value.scss",
+                "constant.rgb-value.scss"
+            ],
+            "settings": {
+                "foreground": "#d65d0e"
+            }
+        },
+        {
+            "scope": ["entity.name.tag.css"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["text.html entity.name.tag", "text.html punctuation.tag"],
+            "settings": {
+                "foreground": "#427b58",
+                "fontStyle": "bold"
+            }
+        },
+
+        {
+            "scope": ["source.js variable.language"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "scope": ["source.ts variable.language"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "scope": ["source.go storage.type"],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.import"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "scope": ["source.go keyword.package", "source.go keyword.import"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "scope": ["source.go keyword.interface", "source.go keyword.struct"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.type"],
+            "settings": {
+                "foreground": "#3c3836"
+            }
+        },
+        {
+            "scope": ["source.go entity.name.function"],
+            "settings": {
+                "foreground": "#8f3f71"
+            }
+        },
+
+        {
+            "scope": ["keyword.control.cucumber.table"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+
+        {
+            "name": "ReasonML String",
+            "scope": ["source.reason string.double", "source.reason string.regexp"],
+            "settings": {
+                "foreground": "#79740e"
+            }
+        },
+        {
+            "name": "ReasonML equals sign",
+            "scope": ["source.reason keyword.control.less"],
+            "settings": {
+                "foreground": "#427b58"
+            }
+        },
+        {
+            "name": "ReasonML variable",
+            "scope": ["source.reason entity.name.function"],
+            "settings": {
+                "foreground": "#076678"
+            }
+        },
+        {
+            "name": "ReasonML property",
+            "scope": ["source.reason support.property-value", "source.reason entity.name.filename"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+
+        {
+            "name": "Powershell member",
+            "scope": ["source.powershell variable.other.member.powershell"],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        },
+        {
+            "name": "Powershell function",
+            "scope": ["source.powershell support.function.powershell"],
+            "settings": {
+                "foreground": "#b57614"
+            }
+        },
+        {
+            "name": "Powershell function attribute",
+            "scope": ["source.powershell support.function.attribute.powershell"],
+            "settings": {
+                "foreground": "#665c54"
+            }
+        },
+        {
+            "name": "Powershell hashtable member",
+            "scope": [
+                "source.powershell meta.hashtable.assignment.powershell variable.other.readwrite.powershell"
+            ],
+            "settings": {
+                "foreground": "#af3a03"
+            }
+        }
+    ],
+    "colors": {
+        "focusBorder": "#ebdbb2",
+        "foreground": "#3c3836",
+        "widget.shadow": "#f2e5bc30",
+        "selection.background": "#689d6a80",
+        "errorForeground": "#9d0006",
+
+        "button.background": "#45858880",
+        "button.foreground": "#3c3836",
+        "button.hoverBackground": "#45858860",
+
+        "dropdown.background": "#f2e5bc",
+        "dropdown.border": "#ebdbb2",
+        "dropdown.foreground": "#3c3836",
+
+        "input.background": "#3c383605",
+        "input.border": "#ebdbb2",
+        "input.foreground": "#3c3836",
+        "input.placeholderForeground": "#3c383660",
+        "inputValidation.errorBorder": "#9d0006",
+        "inputValidation.errorBackground": "#cc241d80",
+        "inputValidation.infoBorder": "#076678",
+        "inputValidation.infoBackground": "#45858880",
+        "inputValidation.warningBorder": "#b57614",
+        "inputValidation.warningBackground": "#d7992180",
+        "inputOption.activeBorder": "#3c383660",
+
+        "scrollbar.shadow": "#f2e5bc",
+        "scrollbarSlider.activeBackground": "#689d6a",
+        "scrollbarSlider.hoverBackground": "#bdae93",
+        "scrollbarSlider.background": "#d5c4a199",
+
+        "badge.background": "#8f3f71",
+        "badge.foreground": "#f2e5bc",
+
+        "progressBar.background": "#689d6a",
+
+        "list.activeSelectionBackground": "#ebdbb280",
+        "list.activeSelectionForeground": "#af3a03",
+        "list.hoverBackground": "#ebdbb280",
+        "list.hoverForeground": "#504945",
+        "list.focusBackground": "#ebdbb2",
+        "list.focusForeground": "#3c3836",
+        "list.inactiveSelectionForeground": "#d65d0e",
+        "list.inactiveSelectionBackground": "#ebdbb280",
+        "list.dropBackground": "#ebdbb2",
+        "list.highlightForeground": "#689d6a",
+
+        "sideBar.background": "#f2e5bc",
+        "sideBar.foreground": "#504945",
+        "sideBar.border": "#ebdbb2",
+        "sideBarTitle.foreground": "#3c3836",
+        "sideBarSectionHeader.background": "#f2e5bc00",
+        "sideBarSectionHeader.foreground": "#3c3836",
+
+        "activityBar.background": "#f2e5bc",
+        "activityBar.foreground": "#3c3836",
+        "activityBar.border": "#ebdbb2",
+        "activityBarBadge.background": "#458588",
+        "activityBarBadge.foreground": "#ebdbb2",
+
+        "editorGroup.border": "#ebdbb2",
+        "editorGroup.dropBackground": "#ebdbb260",
+        "editorGroupHeader.noTabsBackground": "#ebdbb2",
+        "editorGroupHeader.tabsBackground": "#f2e5bc",
+        "editorGroupHeader.tabsBorder": "#ebdbb2",
+
+        "tab.border": "#f2e5bc00",
+        "tab.activeBackground": "#d5c4a1",
+        "tab.activeBorder": "#d65d0e",
+        "tab.activeForeground": "#3c3836",
+        "tab.inactiveForeground": "#7c6f64",
+        "tab.inactiveBackground": "#f2e5bc",
+        "tab.unfocusedActiveForeground": "#7c6f64",
+        "tab.unfocusedActiveBorder": "#f2e5bc00",
+        "tab.unfocusedInactiveForeground": "#928374",
+
+        "editor.background": "#f2e5bc",
+        "editor.foreground": "#3c3836",
+        "editorLineNumber.foreground": "#bdae93",
+        "editorCursor.foreground": "#3c3836",
+        "editor.selectionBackground": "#689d6a40",
+        "editor.selectionHighlightBackground": "#b5761440",
+        "editor.hoverHighlightBackground": "#689d6a50",
+        "editorLink.activeForeground": "#3c3836",
+        "editor.findMatchBackground": "#07667870",
+        "editor.findMatchHighlightBackground": "#af3a0330",
+        "editor.findRangeHighlightBackground": "#07667870",
+        "editor.lineHighlightBackground": "#ebdbb260",
+        "editor.lineHighlightBorder": "#ebdbb200",
+        "editorWhitespace.foreground": "#7c6f6420",
+        "editorRuler.foreground": "#7c6f6440",
+        "editorCodeLens.foreground": "#7c6f6490",
+        "editorBracketMatch.border": "#f2e5bc00",
+        "editorBracketMatch.background": "#92837480",
+        "editorHoverWidget.background": "#f2e5bc",
+        "editorHoverWidget.border": "#ebdbb2",
+        "editorOverviewRuler.border": "#f2e5bc00",
+        "editorOverviewRuler.findMatchForeground": "#665c54",
+        "editorOverviewRuler.rangeHighlightForeground": "#665c54",
+        "editorOverviewRuler.selectionHighlightForeground": "#bdae93",
+        "editorOverviewRuler.wordHighlightForeground": "#bdae93",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#bdae93",
+        "editorOverviewRuler.modifiedForeground": "#076678",
+        "editorOverviewRuler.addedForeground": "#076678",
+        "editorOverviewRuler.deletedForeground": "#076678",
+        "editorOverviewRuler.errorForeground": "#9d0006",
+        "editorOverviewRuler.warningForeground": "#d79921",
+        "editorOverviewRuler.infoForeground": "#8f3f71",
+        "editorGutter.background": "#f2e5bc00",
+        "editorGutter.modifiedBackground": "#076678",
+        "editorGutter.addedBackground": "#79740e",
+        "editorGutter.deletedBackground": "#9d0006",
+        "editorError.foreground": "#cc241d",
+        "editorWarning.foreground": "#d79921",
+        "editorInfo.foreground": "#458588",
+
+        "editorBracketHighlight.foreground1": "#b16286",
+        "editorBracketHighlight.foreground2": "#458588",
+        "editorBracketHighlight.foreground3": "#689d6a",
+        "editorBracketHighlight.foreground4": "#98971a",
+        "editorBracketHighlight.foreground5": "#d79921",
+        "editorBracketHighlight.foreground6": "#d65d0e",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#cc241d",
+
+        "diffEditor.insertedTextBackground": "#79740e30",
+        "diffEditor.removedTextBackground": "#9d000630",
+
+        "editorWidget.background": "#f2e5bc",
+        "editorWidget.border": "#ebdbb2",
+        "editorSuggestWidget.background": "#f2e5bc",
+        "editorSuggestWidget.foreground": "#3c3836",
+        "editorSuggestWidget.highlightForeground": "#689d6a",
+        "editorSuggestWidget.selectedBackground": "#ebdbb260",
+        "editorSuggestWidget.border": "#ebdbb2",
+
+        "peekView.border": "#ebdbb2",
+        "peekViewEditor.background": "#ebdbb270",
+        "peekViewEditor.matchHighlightBackground": "#d5c4a1",
+        "peekViewEditorGutter.background": "#ebdbb270",
+        "peekViewResult.background": "#ebdbb270",
+        "peekViewResult.fileForeground": "#3c3836",
+        "peekViewResult.selectionBackground": "#45858820",
+        "peekViewResult.selectionForeground": "#3c3836",
+        "peekViewResult.lineForeground": "#3c3836",
+        "peekViewResult.matchHighlightBackground": "#d5c4a1",
+        "peekViewTitle.background": "#ebdbb270",
+        "peekViewTitleDescription.foreground": "#665c54",
+        "peekViewTitleLabel.foreground": "#3c3836",
+
+        "merge.currentHeaderBackground": "#45858840",
+        "merge.currentContentBackground": "#45858820",
+        "merge.incomingHeaderBackground": "#689d6a40",
+        "merge.incomingContentBackground": "#689d6a20",
+        "merge.border": "#f2e5bc00",
+        "editorOverviewRuler.currentContentForeground": "#458588",
+        "editorOverviewRuler.incomingContentForeground": "#689d6a",
+        "editorOverviewRuler.commonContentForeground": "#928374",
+
+        "panel.border": "#ebdbb2",
+        "panelTitle.activeForeground": "#3c3836",
+
+        "statusBar.background": "#f2e5bc",
+        "statusBar.border": "#ebdbb2",
+        "statusBar.foreground": "#3c3836",
+        "statusBar.debuggingBackground": "#af3a03",
+        "statusBar.debuggingForeground": "#f2e5bc",
+        "statusBar.debuggingBorder": "#f2e5bc00",
+        "statusBar.noFolderBackground": "#f2e5bc",
+        "statusBar.noFolderBorder": "#f2e5bc00",
+
+        "terminal.ansiBlack": "#ebdbb2",
+        "terminal.ansiBrightBlack": "#928374",
+        "terminal.ansiRed": "#cc241d",
+        "terminal.ansiBrightRed": "#9d0006",
+        "terminal.ansiGreen": "#98971a",
+        "terminal.ansiBrightGreen": "#79740e",
+        "terminal.ansiYellow": "#d79921",
+        "terminal.ansiBrightYellow": "#b57614",
+        "terminal.ansiBlue": "#458588",
+        "terminal.ansiBrightBlue": "#076678",
+        "terminal.ansiMagenta": "#b16286",
+        "terminal.ansiBrightMagenta": "#8f3f71",
+        "terminal.ansiCyan": "#689d6a",
+        "terminal.ansiBrightCyan": "#427b58",
+        "terminal.ansiWhite": "#7c6f64",
+        "terminal.ansiBrightWhite": "#3c3836",
+        "terminal.foreground": "#3c3836",
+        "terminal.background": "#f2e5bc",
+
+        "titleBar.activeBackground": "#f2e5bc",
+        "titleBar.activeForeground": "#3c3836",
+        "titleBar.inactiveBackground": "#f2e5bc",
+
+        "gitDecoration.modifiedResourceForeground": "#d79921",
+        "gitDecoration.deletedResourceForeground": "#cc241d",
+        "gitDecoration.untrackedResourceForeground": "#98971a",
+        "gitDecoration.ignoredResourceForeground": "#a89984",
+        "gitDecoration.conflictingResourceForeground": "#b16286",
+
+        "menu.border": "#ebdbb2",
+        "menu.separatorBackground": "#ebdbb2",
+
+        "notebook.cellEditorBackground": "#ebdbb2",
+        "notebook.focusedCellBorder": "#665c54",
+        "notebook.cellBorderColor": "#a89984",
+        "notebook.focusedEditorBorder": "#a89984",
+
+        "extensionButton.prominentBackground": "#79740e80",
+        "extensionButton.prominentHoverBackground": "#79740e30",
+
+        "textLink.foreground": "#076678",
+        "textLink.activeForeground": "#458588",
+        "debugToolBar.background": "#f2e5bc"
+    },
+    "semanticTokenColors": {
+        "constant.builtin": "#8f3f71",
+        "property": "#076678",
+        "property:python": "#3c3836",
+        "parameter": "#076678",
+        "variable": "#3c3836",
+        "function": "#427b58",
+        "function.builtin": "#af3a03",
+        "method": "#427b58"
+    }
+}

assets/themes/src/vscode/night-owl/LICENSE 🔗

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Sarah Drasner
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vscode/night-owl/family.json 🔗

@@ -0,0 +1,16 @@
+{
+    "name": "Night Owl",
+    "author": "Sarah Drasner (sdras)",
+    "themes": [
+        {
+            "name": "Night Owl",
+            "file_name": "night-owl.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Night Owl Light",
+            "file_name": "night-owl-light.json",
+            "appearance": "light"
+        }
+    ]
+}

assets/themes/src/vscode/night-owl/night-owl-light.json 🔗

@@ -0,0 +1,1723 @@
+{
+    "name": "Night Owl Light",
+    "type": "light",
+    "semanticHighlighting": false,
+    "colors": {
+        "foreground": "#403f53",
+        "focusBorder": "#93A1A1",
+        "errorForeground": "#403f53",
+        "selection.background": "#7a8181ad",
+        "descriptionForeground": "#403f53",
+        "widget.shadow": "#d9d9d9",
+        "titleBar.activeBackground": "#F0F0F0",
+
+        "notifications.background": "#F0F0F0",
+        "notifications.foreground": "#403f53",
+        "notificationLink.foreground": "#994cc3",
+        "notifications.border": "#CCCCCC",
+        "notificationCenter.border": "#CCCCCC",
+        "notificationToast.border": "#CCCCCC",
+        "notificationCenterHeader.foreground": "#403f53",
+        "notificationCenterHeader.background": "#F0F0F0",
+
+        "button.background": "#2AA298",
+        "button.foreground": "#F0F0F0",
+
+        "dropdown.background": "#F0F0F0",
+        "dropdown.foreground": "#403f53",
+        "dropdown.border": "#d9d9d9",
+
+        "input.background": "#F0F0F0",
+        "input.foreground": "#403f53",
+        "input.border": "#d9d9d9",
+        "input.placeholderForeground": "#93A1A1",
+        "inputOption.activeBorder": "#2AA298",
+        "inputValidation.infoBorder": "#D0D0D0",
+        "inputValidation.infoBackground": "#F0F0F0",
+        "inputValidation.warningBackground": "#daaa01",
+        "inputValidation.warningBorder": "#E0AF02",
+        "inputValidation.errorBackground": "#f76e6e",
+        "inputValidation.errorBorder": "#de3d3b",
+
+        "badge.background": "#2AA298",
+        "badge.foreground": "#F0F0F0",
+
+        "progressBar.background": "#2AA298",
+
+        "list.activeSelectionBackground": "#d3e8f8",
+        "list.activeSelectionForeground": "#403f53",
+        "list.inactiveSelectionBackground": "#E0E7EA",
+        "list.inactiveSelectionForeground": "#403f53",
+        "list.focusBackground": "#d3e8f8",
+        "list.hoverBackground": "#d3e8f8",
+        "list.focusForeground": "#403f53",
+        "list.hoverForeground": "#403f53",
+        "list.highlightForeground": "#403f53",
+        "list.errorForeground": "#E64D49",
+        "list.warningForeground": "#daaa01",
+
+        "activityBar.background": "#F0F0F0",
+        "activityBar.foreground": "#403f53",
+        "activityBar.dropBackground": "#D0D0D0",
+        "activityBarBadge.background": "#403f53",
+        "activityBarBadge.foreground": "#F0F0F0",
+        "activityBar.border": "#F0F0F0",
+
+        "sideBar.background": "#F0F0F0",
+        "sideBar.foreground": "#403f53",
+        "sideBarTitle.foreground": "#403f53",
+        "sideBar.border": "#F0F0F0",
+
+        "scrollbar.shadow": "#CCCCCC",
+
+        "tab.border": "#F0F0F0",
+        "tab.activeBackground": "#F6F6F6",
+        "tab.activeForeground": "#403f53",
+        "tab.inactiveForeground": "#403f53",
+        "tab.inactiveBackground": "#F0F0F0",
+        "editorGroup.border": "#F0F0F0",
+        "editorGroup.background": "#F6F6F6",
+        "editorGroupHeader.tabsBackground": "#F0F0F0",
+        "editorGroupHeader.tabsBorder": "#F0F0F0",
+        "editorGroupHeader.noTabsBackground": "#F0F0F0",
+        "tab.activeModifiedBorder": "#2AA298",
+        "tab.inactiveModifiedBorder": "#93A1A1",
+        "tab.unfocusedActiveModifiedBorder": "#93A1A1",
+        "tab.unfocusedInactiveModifiedBorder": "#93A1A1",
+
+        "editor.background": "#FBFBFB",
+        "editor.foreground": "#403f53",
+        "editorCursor.foreground": "#90A7B2",
+        "editorLineNumber.foreground": "#90A7B2",
+        "editorLineNumber.activeForeground": "#403f53",
+        "editor.selectionBackground": "#E0E0E0",
+        "editor.selectionHighlightBackground": "#339cec33",
+        "editor.wordHighlightBackground": "#339cec33",
+        "editor.wordHighlightStrongBackground": "#007dd659",
+        "editor.findMatchBackground": "#93A1A16c",
+        "editor.findMatchHighlightBackground": "#93a1a16c",
+        "editor.findRangeHighlightBackground": "#7497a633",
+        "editor.hoverHighlightBackground": "#339cec33",
+        "editor.lineHighlightBackground": "#F0F0F0",
+        "editor.rangeHighlightBackground": "#7497a633",
+        "editorWhitespace.foreground": "#d9d9d9",
+        "editorIndentGuide.background": "#d9d9d9",
+        "editorCodeLens.foreground": "#403f53",
+        "editorBracketMatch.background": "#d3e8f8",
+        "editorBracketMatch.border": "#2AA298",
+        "editorError.foreground": "#E64D49",
+        "editorError.border": "#FBFBFB",
+        "editorWarning.foreground": "#daaa01",
+        "editorWarning.border": "#daaa01",
+        "editorGutter.addedBackground": "#49d0c5",
+        "editorGutter.modifiedBackground": "#6fbef6",
+        "editorGutter.deletedBackground": "#f76e6e",
+        "editorRuler.foreground": "#d9d9d9",
+        "editorOverviewRuler.errorForeground": "#E64D49",
+        "editorOverviewRuler.warningForeground": "#daaa01",
+
+        "editorWidget.background": "#F0F0F0",
+        "editorWidget.border": "#d9d9d9",
+        "editorSuggestWidget.background": "#F0F0F0",
+        "editorSuggestWidget.foreground": "#403f53",
+        "editorSuggestWidget.highlightForeground": "#403f53",
+        "editorSuggestWidget.selectedBackground": "#d3e8f8",
+        "editorSuggestWidget.border": "#d9d9d9",
+        "editorHoverWidget.background": "#F0F0F0",
+        "editorHoverWidget.border": "#d9d9d9",
+        "debugExceptionWidget.background": "#F0F0F0",
+        "debugExceptionWidget.border": "#d9d9d9",
+        "editorMarkerNavigation.background": "#D0D0D0",
+        "editorMarkerNavigationError.background": "#f76e6e",
+        "editorMarkerNavigationWarning.background": "#daaa01",
+
+        "debugToolBar.background": "#F0F0F0",
+
+        "pickerGroup.border": "#d9d9d9",
+        "pickerGroup.foreground": "#403f53",
+
+        "extensionButton.prominentBackground": "#2AA298",
+        "extensionButton.prominentForeground": "#F0F0F0",
+
+        "statusBar.background": "#F0F0F0",
+        "statusBar.border": "#F0F0F0",
+        "statusBar.debuggingBackground": "#F0F0F0",
+        "statusBar.debuggingForeground": "#403f53",
+        "statusBar.foreground": "#403f53",
+        "statusBar.noFolderBackground": "#F0F0F0",
+        "statusBar.noFolderForeground": "#403f53",
+
+        "panel.background": "#F0F0F0",
+        "panel.border": "#d9d9d9",
+
+        "peekView.border": "#d9d9d9",
+        "peekViewEditor.background": "#F6F6F6",
+        "peekViewEditorGutter.background": "#F6F6F6",
+        "peekViewEditor.matchHighlightBackground": "#49d0c5",
+        "peekViewResult.background": "#F0F0F0",
+        "peekViewResult.fileForeground": "#403f53",
+        "peekViewResult.lineForeground": "#403f53",
+        "peekViewResult.matchHighlightBackground": "#49d0c5",
+        "peekViewResult.selectionBackground": "#E0E7EA",
+        "peekViewResult.selectionForeground": "#403f53",
+        "peekViewTitle.background": "#F0F0F0",
+        "peekViewTitleLabel.foreground": "#403f53",
+        "peekViewTitleDescription.foreground": "#403f53",
+
+        "terminal.ansiBrightBlack": "#403f53",
+        "terminal.ansiBlack": "#403f53",
+        "terminal.ansiBrightBlue": "#288ed7",
+        "terminal.ansiBlue": "#288ed7",
+        "terminal.ansiBrightCyan": "#2AA298",
+        "terminal.ansiCyan": "#2AA298",
+        "terminal.ansiBrightGreen": "#08916a",
+        "terminal.ansiGreen": "#08916a",
+        "terminal.ansiBrightMagenta": "#d6438a",
+        "terminal.ansiMagenta": "#d6438a",
+        "terminal.ansiBrightRed": "#de3d3b",
+        "terminal.ansiRed": "#de3d3b",
+        "terminal.ansiBrightWhite": "#F0F0F0",
+        "terminal.ansiWhite": "#F0F0F0",
+        "terminal.ansiBrightYellow": "#daaa01",
+        "terminal.ansiYellow": "#E0AF02",
+        "terminal.background": "#F6F6F6",
+        "terminal.foreground": "#403f53"
+    },
+    "tokenColors": [
+        {
+            "name": "Changed",
+            "scope": [
+                "markup.changed",
+                "meta.diff.header.git",
+                "meta.diff.header.from-file",
+                "meta.diff.header.to-file"
+            ],
+            "settings": {
+                "foreground": "#a2bffc",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Deleted",
+            "scope": "markup.deleted.diff",
+            "settings": {
+                "foreground": "#EF535090",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Inserted",
+            "scope": "markup.inserted.diff",
+            "settings": {
+                "foreground": "#4876d6ff",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Global settings",
+            "settings": {
+                "background": "#011627",
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Comment",
+            "scope": "comment",
+            "settings": {
+                "foreground": "#989fb1",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "String",
+            "scope": "string",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "String Quoted",
+            "scope": ["string.quoted", "variable.other.readwrite.js"],
+            "settings": {
+                "foreground": "#c96765"
+            }
+        },
+        {
+            "name": "Support Constant Math",
+            "scope": "support.constant.math",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Number",
+            "scope": ["constant.numeric", "constant.character.numeric"],
+            "settings": {
+                "foreground": "#aa0982",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Built-in constant",
+            "scope": [
+                "constant.language",
+                "punctuation.definition.constant",
+                "variable.other.constant"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "User-defined constant",
+            "scope": ["constant.character", "constant.other"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Constant Character Escape",
+            "scope": "constant.character.escape",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "RegExp String",
+            "scope": ["string.regexp", "string.regexp keyword.other"],
+            "settings": {
+                "foreground": "#5ca7e4"
+            }
+        },
+        {
+            "name": "Comma in functions",
+            "scope": "meta.function punctuation.separator.comma",
+            "settings": {
+                "foreground": "#5f7e97"
+            }
+        },
+        {
+            "name": "Variable",
+            "scope": "variable",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Keyword",
+            "scope": ["punctuation.accessor", "keyword"],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Storage",
+            "scope": [
+                "storage",
+                "meta.var.expr",
+                "meta.class meta.method.declaration meta.var.expr storage.type.js",
+                "storage.type.property.js",
+                "storage.type.property.ts",
+                "storage.type.property.tsx"
+            ],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Storage type",
+            "scope": "storage.type",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "Storage type",
+            "scope": "storage.type.function.arrow.js",
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Class name",
+            "scope": ["entity.name.class", "meta.class entity.name.type.class"],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Inherited class",
+            "scope": "entity.other.inherited-class",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Function name",
+            "scope": "entity.name.function",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Meta Tag",
+            "scope": ["punctuation.definition.tag", "meta.tag"],
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "HTML Tag names",
+            "scope": [
+                "entity.name.tag",
+                "meta.tag.other.html",
+                "meta.tag.other.js",
+                "meta.tag.other.tsx",
+                "entity.name.tag.tsx",
+                "entity.name.tag.js",
+                "entity.name.tag",
+                "meta.tag.js",
+                "meta.tag.tsx",
+                "meta.tag.html"
+            ],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Tag attribute",
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "fontStyle": "italic",
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Entity Name Tag Custom",
+            "scope": "entity.name.tag.custom",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Library (function & constant)",
+            "scope": ["support.function", "support.constant"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Support Constant Property Value meta",
+            "scope": "support.constant.meta.property-value",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Library class/type",
+            "scope": ["support.type", "support.class"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Support Variable DOM",
+            "scope": "support.variable.dom",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Invalid",
+            "scope": "invalid",
+            "settings": {
+                "foreground": "#ff2c83"
+            }
+        },
+        {
+            "name": "Invalid deprecated",
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#d3423e"
+            }
+        },
+        {
+            "name": "Keyword Operator",
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#0c969b",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Keyword Operator Relational",
+            "scope": "keyword.operator.relational",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Keyword Operator Assignment",
+            "scope": "keyword.operator.assignment",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "Keyword Operator Arithmetic",
+            "scope": "keyword.operator.arithmetic",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "Keyword Operator Bitwise",
+            "scope": "keyword.operator.bitwise",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "Keyword Operator Increment",
+            "scope": "keyword.operator.increment",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "Keyword Operator Ternary",
+            "scope": "keyword.operator.ternary",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "Double-Slashed Comment",
+            "scope": "comment.line.double-slash",
+            "settings": {
+                "foreground": "#939dbb"
+            }
+        },
+        {
+            "name": "Object",
+            "scope": "object",
+            "settings": {
+                "foreground": "#cdebf7"
+            }
+        },
+        {
+            "name": "Null",
+            "scope": "constant.language.null",
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "Meta Brace",
+            "scope": "meta.brace",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Meta Delimiter Period",
+            "scope": "meta.delimiter.period",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Punctuation Definition String",
+            "scope": "punctuation.definition.string",
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Punctuation Definition String Markdown",
+            "scope": "punctuation.definition.string.begin.markdown",
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "Boolean",
+            "scope": "constant.language.boolean",
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "Object Comma",
+            "scope": "object.comma",
+            "settings": {
+                "foreground": "#ffffff"
+            }
+        },
+        {
+            "name": "Variable Parameter Function",
+            "scope": "variable.parameter.function",
+            "settings": {
+                "foreground": "#0c969b",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Support Type Property Name & entity name tags",
+            "scope": [
+                "support.type.vendor.property-name",
+                "support.constant.vendor.property-value",
+                "support.type.property-name",
+                "meta.property-list entity.name.tag"
+            ],
+            "settings": {
+                "foreground": "#0c969b",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Entity Name tag reference in stylesheets",
+            "scope": "meta.property-list entity.name.tag.reference",
+            "settings": {
+                "foreground": "#57eaf1"
+            }
+        },
+        {
+            "name": "Constant Other Color RGB Value Punctuation Definition Constant",
+            "scope": "constant.other.color.rgb-value punctuation.definition.constant",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Constant Other Color",
+            "scope": "constant.other.color",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Keyword Other Unit",
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Meta Selector",
+            "scope": "meta.selector",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Entity Other Attribute Name Id",
+            "scope": "entity.other.attribute-name.id",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Meta Property Name",
+            "scope": "meta.property-name",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Doctypes",
+            "scope": ["entity.name.tag.doctype", "meta.tag.sgml.doctype"],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Punctuation Definition Parameters",
+            "scope": "punctuation.definition.parameters",
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Keyword Control Operator",
+            "scope": "keyword.control.operator",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Keyword Operator Logical",
+            "scope": "keyword.operator.logical",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Variable Instances",
+            "scope": [
+                "variable.instance",
+                "variable.other.instance",
+                "variable.readwrite.instance",
+                "variable.other.readwrite.instance",
+                "variable.other.property"
+            ],
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Variable Property Other object property",
+            "scope": ["variable.other.object.property"],
+            "settings": {
+                "foreground": "#111111",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Variable Property Other object",
+            "scope": ["variable.other.object.js"],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Entity Name Function",
+            "scope": ["entity.name.function"],
+            "settings": {
+                "foreground": "#4876d6",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Keyword Operator Comparison, imports, returns and Keyword Operator Ruby",
+            "scope": [
+                "keyword.operator.comparison",
+                "keyword.control.flow.js",
+                "keyword.control.flow.ts",
+                "keyword.control.flow.tsx",
+                "keyword.control.ruby",
+                "keyword.control.module.ruby",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby",
+                "keyword.control.loop.js",
+                "keyword.control.loop.ts",
+                "keyword.control.import.js",
+                "keyword.control.import.ts",
+                "keyword.control.import.tsx",
+                "keyword.control.from.js",
+                "keyword.control.from.ts",
+                "keyword.control.from.tsx",
+                "keyword.operator.instanceof.js",
+                "keyword.operator.expression.instanceof.ts",
+                "keyword.operator.expression.instanceof.tsx"
+            ],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Keyword Control Conditional",
+            "scope": [
+                "keyword.control.conditional.js",
+                "keyword.control.conditional.ts",
+                "keyword.control.switch.js",
+                "keyword.control.switch.ts"
+            ],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Support Constant, `new` keyword, Special Method Keyword, `debugger`, other keywords",
+            "scope": [
+                "support.constant",
+                "keyword.other.special-method",
+                "keyword.other.new",
+                "keyword.other.debugger",
+                "keyword.control"
+            ],
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Support Function",
+            "scope": "support.function",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Invalid Broken",
+            "scope": "invalid.broken",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Invalid Unimplemented",
+            "scope": "invalid.unimplemented",
+            "settings": {
+                "foreground": "#8BD649"
+            }
+        },
+        {
+            "name": "Invalid Illegal",
+            "scope": "invalid.illegal",
+            "settings": {
+                "foreground": "#c96765"
+            }
+        },
+        {
+            "name": "Language Variable",
+            "scope": "variable.language",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Support Variable Property",
+            "scope": "support.variable.property",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Variable Function",
+            "scope": "variable.function",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Variable Interpolation",
+            "scope": "variable.interpolation",
+            "settings": {
+                "foreground": "#ec5f67"
+            }
+        },
+        {
+            "name": "Meta Function Call",
+            "scope": "meta.function-call",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Punctuation Section Embedded",
+            "scope": "punctuation.section.embedded",
+            "settings": {
+                "foreground": "#d3423e"
+            }
+        },
+        {
+            "name": "Punctuation Tweaks",
+            "scope": [
+                "punctuation.terminator.expression",
+                "punctuation.definition.arguments",
+                "punctuation.definition.array",
+                "punctuation.section.array",
+                "meta.array"
+            ],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "More Punctuation Tweaks",
+            "scope": [
+                "punctuation.definition.list.begin",
+                "punctuation.definition.list.end",
+                "punctuation.separator.arguments",
+                "punctuation.definition.list"
+            ],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Template Strings",
+            "scope": "string.template meta.template.expression",
+            "settings": {
+                "foreground": "#d3423e"
+            }
+        },
+        {
+            "name": "Backtics(``) in Template Strings",
+            "scope": "string.template punctuation.definition.string",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Italics",
+            "scope": "italic",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Bold",
+            "scope": "bold",
+            "settings": {
+                "foreground": "#4876d6",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Quote",
+            "scope": "quote",
+            "settings": {
+                "foreground": "#697098",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Raw Code",
+            "scope": "raw",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "CoffeScript Variable Assignment",
+            "scope": "variable.assignment.coffee",
+            "settings": {
+                "foreground": "#31e1eb"
+            }
+        },
+        {
+            "name": "CoffeScript Parameter Function",
+            "scope": "variable.parameter.function.coffee",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "CoffeeScript Assignments",
+            "scope": "variable.assignment.coffee",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "C# Readwrite Variables",
+            "scope": "variable.other.readwrite.cs",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "C# Classes & Storage types",
+            "scope": ["entity.name.type.class.cs", "storage.type.cs"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "C# Namespaces",
+            "scope": "entity.name.type.namespace.cs",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Tag names in Stylesheets",
+            "scope": [
+                "entity.name.tag.css",
+                "entity.name.tag.less",
+                "entity.name.tag.custom.css",
+                "support.constant.property-value.css"
+            ],
+            "settings": {
+                "foreground": "#c96765",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Wildcard(*) selector in Stylesheets",
+            "scope": [
+                "entity.name.tag.wildcard.css",
+                "entity.name.tag.wildcard.less",
+                "entity.name.tag.wildcard.scss",
+                "entity.name.tag.wildcard.sass"
+            ],
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "CSS Keyword Other Unit",
+            "scope": "keyword.other.unit.css",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Attribute Name for CSS",
+            "scope": [
+                "meta.attribute-selector.css entity.other.attribute-name.attribute",
+                "variable.other.readwrite.js"
+            ],
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Elixir Classes",
+            "scope": [
+                "source.elixir support.type.elixir",
+                "source.elixir meta.module.elixir entity.name.class.elixir"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Elixir Functions",
+            "scope": "source.elixir entity.name.function",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Elixir Constants",
+            "scope": [
+                "source.elixir constant.other.symbol.elixir",
+                "source.elixir constant.other.keywords.elixir"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Elixir String Punctuations",
+            "scope": "source.elixir punctuation.definition.string",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Elixir",
+            "scope": [
+                "source.elixir variable.other.readwrite.module.elixir",
+                "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Elixir Binary Punctuations",
+            "scope": "source.elixir .punctuation.binary.elixir",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Closure Constant Keyword",
+            "scope": "constant.keyword.clojure",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Go Function Calls",
+            "scope": "source.go meta.function-call.go",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Go Keywords",
+            "scope": [
+                "source.go keyword.package.go",
+                "source.go keyword.import.go",
+                "source.go keyword.function.go",
+                "source.go keyword.type.go",
+                "source.go keyword.struct.go",
+                "source.go keyword.interface.go",
+                "source.go keyword.const.go",
+                "source.go keyword.var.go",
+                "source.go keyword.map.go",
+                "source.go keyword.channel.go",
+                "source.go keyword.control.go"
+            ],
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Go Constants e.g. nil, string format (%s, %d, etc.)",
+            "scope": ["source.go constant.language.go", "source.go constant.other.placeholder.go"],
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "C++ Functions",
+            "scope": ["entity.name.function.preprocessor.cpp", "entity.scope.name.cpp"],
+            "settings": {
+                "foreground": "#0c969bff"
+            }
+        },
+        {
+            "name": "C++ Meta Namespace",
+            "scope": ["meta.namespace-block.cpp"],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "C++ Language Primitive Storage",
+            "scope": ["storage.type.language.primitive.cpp"],
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "C++ Preprocessor Macro",
+            "scope": ["meta.preprocessor.macro.cpp"],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "C++ Variable Parameter",
+            "scope": ["variable.parameter"],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Powershell Variables",
+            "scope": ["variable.other.readwrite.powershell"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Powershell Function",
+            "scope": ["support.function.powershell"],
+            "settings": {
+                "foreground": "#0c969bff"
+            }
+        },
+        {
+            "name": "ID Attribute Name in HTML",
+            "scope": "entity.other.attribute-name.id.html",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "HTML Punctuation Definition Tag",
+            "scope": "punctuation.definition.tag.html",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "HTML Doctype",
+            "scope": "meta.tag.sgml.doctype.html",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "JavaScript Classes",
+            "scope": "meta.class entity.name.type.class.js",
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "JavaScript Method Declaration e.g. `constructor`",
+            "scope": "meta.method.declaration storage.type.js",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "JavaScript Terminator",
+            "scope": "terminator.js",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "JavaScript Meta Punctuation Definition",
+            "scope": "meta.js punctuation.definition.js",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Entity Names in Code Documentations",
+            "scope": ["entity.name.type.instance.jsdoc", "entity.name.type.instance.phpdoc"],
+            "settings": {
+                "foreground": "#5f7e97"
+            }
+        },
+        {
+            "name": "Other Variables in Code Documentations",
+            "scope": ["variable.other.jsdoc", "variable.other.phpdoc"],
+            "settings": {
+                "foreground": "#78ccf0"
+            }
+        },
+        {
+            "name": "JavaScript module imports and exports",
+            "scope": [
+                "variable.other.meta.import.js",
+                "meta.import.js variable.other",
+                "variable.other.meta.export.js",
+                "meta.export.js variable.other"
+            ],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "JavaScript Variable Parameter Function",
+            "scope": "variable.parameter.function.js",
+            "settings": {
+                "foreground": "#7986E7"
+            }
+        },
+        {
+            "name": "JavaScript[React] Variable Other Object",
+            "scope": [
+                "variable.other.object.js",
+                "variable.other.object.jsx",
+                "variable.object.property.js",
+                "variable.object.property.jsx"
+            ],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "JavaScript Variables",
+            "scope": ["variable.js", "variable.other.js"],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "JavaScript Entity Name Type",
+            "scope": ["entity.name.type.js", "entity.name.type.module.js"],
+            "settings": {
+                "foreground": "#111111",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "JavaScript Support Classes",
+            "scope": "support.class.js",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "JSON Property Names",
+            "scope": "support.type.property-name.json",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "JSON Support Constants",
+            "scope": "support.constant.json",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "JSON Property values (string)",
+            "scope": "meta.structure.dictionary.value.json string.quoted.double",
+            "settings": {
+                "foreground": "#c789d6"
+            }
+        },
+        {
+            "name": "Strings in JSON values",
+            "scope": "string.quoted.double.json punctuation.definition.string.json",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Specific JSON Property values like null",
+            "scope": "meta.structure.dictionary.json meta.structure.dictionary.value constant.language",
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "JavaScript Other Variable",
+            "scope": "variable.other.object.js",
+            "settings": {
+                "foreground": "#0c969b",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Ruby Variables",
+            "scope": ["variable.other.ruby"],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Ruby Class",
+            "scope": ["entity.name.type.class.ruby"],
+            "settings": {
+                "foreground": "#c96765"
+            }
+        },
+        {
+            "name": "Ruby Hashkeys",
+            "scope": "constant.language.symbol.hashkey.ruby",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Ruby Symbols",
+            "scope": "constant.language.symbol.ruby",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "LESS Tag names",
+            "scope": "entity.name.tag.less",
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "LESS Keyword Other Unit",
+            "scope": "keyword.other.unit.css",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Attribute Name for LESS",
+            "scope": "meta.attribute-selector.less entity.other.attribute-name.attribute",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Markdown Headings",
+            "scope": [
+                "markup.heading.markdown",
+                "markup.heading.setext.1.markdown",
+                "markup.heading.setext.2.markdown"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Markdown Italics",
+            "scope": "markup.italic.markdown",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Markdown Bold",
+            "scope": "markup.bold.markdown",
+            "settings": {
+                "foreground": "#4876d6",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Markdown Quote + others",
+            "scope": "markup.quote.markdown",
+            "settings": {
+                "foreground": "#697098",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Markdown Raw Code + others",
+            "scope": "markup.inline.raw.markdown",
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Markdown Links",
+            "scope": ["markup.underline.link.markdown", "markup.underline.link.image.markdown"],
+            "settings": {
+                "foreground": "#ff869a"
+            }
+        },
+        {
+            "name": "Markdown Link Title and Description",
+            "scope": ["string.other.link.title.markdown", "string.other.link.description.markdown"],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Markdown Punctuation",
+            "scope": [
+                "punctuation.definition.string.markdown",
+                "punctuation.definition.string.begin.markdown",
+                "punctuation.definition.string.end.markdown",
+                "meta.link.inline.markdown punctuation.definition.string"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Markdown MetaData Punctuation",
+            "scope": ["punctuation.definition.metadata.markdown"],
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Markdown List Punctuation",
+            "scope": ["beginning.punctuation.definition.list.markdown"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Markdown Inline Raw String",
+            "scope": "markup.inline.raw.string.markdown",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "PHP Variables",
+            "scope": ["variable.other.php", "variable.other.property.php"],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Support Classes in PHP",
+            "scope": "support.class.php",
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Punctuations in PHP function calls",
+            "scope": "meta.function-call.php punctuation",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "PHP Global Variables",
+            "scope": "variable.other.global.php",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Declaration Punctuation in PHP Global Variables",
+            "scope": "variable.other.global.php punctuation.definition.variable",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Language Constants in Python",
+            "scope": "constant.language.python",
+            "settings": {
+                "foreground": "#bc5454"
+            }
+        },
+        {
+            "name": "Python Function Parameter and Arguments",
+            "scope": ["variable.parameter.function.python", "meta.function-call.arguments.python"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Python Function Call",
+            "scope": ["meta.function-call.python", "meta.function-call.generic.python"],
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "Punctuations in Python",
+            "scope": "punctuation.python",
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Decorator Functions in Python",
+            "scope": "entity.name.function.decorator.python",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Python Language Variable",
+            "scope": "source.python variable.language.special",
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Python import control keyword",
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#994cc3",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "SCSS Variable",
+            "scope": [
+                "variable.scss",
+                "variable.sass",
+                "variable.parameter.url.scss",
+                "variable.parameter.url.sass"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Variables in SASS At-Rules",
+            "scope": [
+                "source.css.scss meta.at-rule variable",
+                "source.css.sass meta.at-rule variable"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "Variables in SASS At-Rules",
+            "scope": [
+                "source.css.scss meta.at-rule variable",
+                "source.css.sass meta.at-rule variable"
+            ],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "Attribute Name for SASS",
+            "scope": [
+                "meta.attribute-selector.scss entity.other.attribute-name.attribute",
+                "meta.attribute-selector.sass entity.other.attribute-name.attribute"
+            ],
+            "settings": {
+                "foreground": "#aa0982"
+            }
+        },
+        {
+            "name": "Tag names in SASS",
+            "scope": ["entity.name.tag.scss", "entity.name.tag.sass"],
+            "settings": {
+                "foreground": "#0c969b"
+            }
+        },
+        {
+            "name": "SASS Keyword Other Unit",
+            "scope": ["keyword.other.unit.scss", "keyword.other.unit.sass"],
+            "settings": {
+                "foreground": "#994cc3"
+            }
+        },
+        {
+            "name": "TypeScript[React] Variables and Object Properties",
+            "scope": [
+                "variable.other.readwrite.alias.ts",
+                "variable.other.readwrite.alias.tsx",
+                "variable.other.readwrite.ts",
+                "variable.other.readwrite.tsx",
+                "variable.other.object.ts",
+                "variable.other.object.tsx",
+                "variable.object.property.ts",
+                "variable.object.property.tsx",
+                "variable.other.ts",
+                "variable.other.tsx",
+                "variable.tsx",
+                "variable.ts"
+            ],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "TypeScript[React] Entity Name Types",
+            "scope": ["entity.name.type.ts", "entity.name.type.tsx"],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "TypeScript[React] Node Classes",
+            "scope": ["support.class.node.ts", "support.class.node.tsx"],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "TypeScript[React] Entity Name Types as Parameters",
+            "scope": [
+                "meta.type.parameters.ts entity.name.type",
+                "meta.type.parameters.tsx entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#5f7e97"
+            }
+        },
+        {
+            "name": "TypeScript[React] Import/Export Punctuations",
+            "scope": [
+                "meta.import.ts punctuation.definition.block",
+                "meta.import.tsx punctuation.definition.block",
+                "meta.export.ts punctuation.definition.block",
+                "meta.export.tsx punctuation.definition.block"
+            ],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "TypeScript[React] Punctuation Decorators",
+            "scope": [
+                "meta.decorator punctuation.decorator.ts",
+                "meta.decorator punctuation.decorator.tsx"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "TypeScript[React] Punctuation Decorators",
+            "scope": "meta.tag.js meta.jsx.children.tsx",
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "YAML Entity Name Tags",
+            "scope": "entity.name.tag.yaml",
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "JavaScript Variable Other ReadWrite",
+            "scope": ["variable.other.readwrite.js", "variable.parameter"],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "Support Class Component",
+            "scope": ["support.class.component.js", "support.class.component.tsx"],
+            "settings": {
+                "foreground": "#aa0982",
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "Text nested in React tags",
+            "scope": ["meta.jsx.children", "meta.jsx.children.js", "meta.jsx.children.tsx"],
+            "settings": {
+                "foreground": "#403f53"
+            }
+        },
+        {
+            "name": "TypeScript Classes",
+            "scope": "meta.class entity.name.type.class.tsx",
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "TypeScript Entity Name Type",
+            "scope": ["entity.name.type.tsx", "entity.name.type.module.tsx"],
+            "settings": {
+                "foreground": "#111111"
+            }
+        },
+        {
+            "name": "TypeScript Class Variable Keyword",
+            "scope": [
+                "meta.class.ts meta.var.expr.ts storage.type.ts",
+                "meta.class.tsx meta.var.expr.tsx storage.type.tsx"
+            ],
+            "settings": {
+                "foreground": "#994CC3"
+            }
+        },
+        {
+            "name": "TypeScript Method Declaration e.g. `constructor`",
+            "scope": [
+                "meta.method.declaration storage.type.ts",
+                "meta.method.declaration storage.type.tsx"
+            ],
+            "settings": {
+                "foreground": "#4876d6"
+            }
+        },
+        {
+            "name": "normalize font style of certain components",
+            "scope": [
+                "meta.property-list.css meta.property-value.css variable.other.less",
+                "meta.property-list.scss variable.scss",
+                "meta.property-list.sass variable.sass",
+                "meta.brace",
+                "keyword.operator.operator",
+                "keyword.operator.or.regexp",
+                "keyword.operator.expression.in",
+                "keyword.operator.relational",
+                "keyword.operator.assignment",
+                "keyword.operator.comparison",
+                "keyword.operator.type",
+                "keyword.operator",
+                "keyword",
+                "punctuation.definintion.string",
+                "punctuation",
+                "variable.other.readwrite.js",
+                "storage.type",
+                "source.css",
+                "string.quoted"
+            ],
+            "settings": {
+                "fontStyle": ""
+            }
+        }
+    ]
+}

assets/themes/src/vscode/night-owl/night-owl.json 🔗

@@ -0,0 +1,1832 @@
+{
+  "name": "Night Owl",
+  "type": "dark",
+  "semanticHighlighting": false,
+  "colors": {
+    "contrastBorder": "#122d42",
+    "focusBorder": "#122d42",
+    "foreground": "#d6deeb",
+    "widget.shadow": "#011627",
+    "selection.background": "#4373c2",
+    "errorForeground": "#EF5350",
+    "button.background": "#7e57c2cc",
+    "button.foreground": "#ffffffcc",
+    "button.hoverBackground": "#7e57c2",
+    "dropdown.background": "#011627",
+    "dropdown.border": "#5f7e97",
+    "dropdown.foreground": "#ffffffcc",
+    "input.background": "#0b253a",
+    "input.border": "#5f7e97",
+    "input.foreground": "#ffffffcc",
+    "input.placeholderForeground": "#5f7e97",
+    "inputOption.activeBorder": "#ffffffcc",
+    "punctuation.definition.generic.begin.html": "#ef5350f2",
+    "inputValidation.errorBackground": "#AB0300F2",
+    "inputValidation.errorBorder": "#EF5350",
+    "inputValidation.infoBackground": "#00589EF2",
+    "inputValidation.infoBorder": "#64B5F6",
+    "inputValidation.warningBackground": "#675700F2",
+    "inputValidation.warningBorder": "#FFCA28",
+    "scrollbar.shadow": "#010b14",
+    "scrollbarSlider.activeBackground": "#084d8180",
+    "scrollbarSlider.background": "#084d8180",
+    "scrollbarSlider.hoverBackground": "#084d8180",
+    "badge.background": "#5f7e97",
+    "badge.foreground": "#ffffff",
+    "progress.background": "#7e57c2",
+    "breadcrumb.foreground": "#A599E9",
+    "breadcrumb.focusForeground": "#ffffff",
+    "breadcrumb.activeSelectionForeground": "#FFFFFF",
+    "breadcrumbPicker.background": "#001122",
+    "list.activeSelectionBackground": "#234d708c",
+    "list.activeSelectionForeground": "#ffffff",
+    "list.invalidItemForeground": "#975f94",
+    "list.dropBackground": "#011627",
+    "list.focusBackground": "#010d18",
+    "list.focusForeground": "#ffffff",
+    "list.highlightForeground": "#ffffff",
+    "list.hoverBackground": "#011627",
+    "list.hoverForeground": "#ffffff",
+    "list.inactiveSelectionBackground": "#0e293f",
+    "list.inactiveSelectionForeground": "#5f7e97",
+    "activityBar.background": "#011627",
+    "activityBar.dropBackground": "#5f7e97",
+    "activityBar.foreground": "#5f7e97",
+    "activityBar.border": "#011627",
+    "activityBarBadge.background": "#44596b",
+    "activityBarBadge.foreground": "#ffffff",
+    "sideBar.background": "#011627",
+    "sideBar.foreground": "#89a4bb",
+    "sideBar.border": "#011627",
+    "sideBarTitle.foreground": "#5f7e97",
+    "sideBarSectionHeader.background": "#011627",
+    "sideBarSectionHeader.foreground": "#5f7e97",
+    "editorGroup.emptyBackground": "#011627",
+    "editorGroup.border": "#011627",
+    "editorGroup.dropBackground": "#7e57c273",
+    "editorGroupHeader.noTabsBackground": "#011627",
+    "editorGroupHeader.tabsBackground": "#011627",
+    "editorGroupHeader.tabsBorder": "#262A39",
+    "tab.activeBackground": "#0b2942",
+    "tab.activeForeground": "#d2dee7",
+    "tab.border": "#272B3B",
+    "tab.activeBorder": "#262A39",
+    "tab.unfocusedActiveBorder": "#262A39",
+    "tab.inactiveBackground": "#01111d",
+    "tab.inactiveForeground": "#5f7e97",
+    "tab.unfocusedActiveForeground": "#5f7e97",
+    "tab.unfocusedInactiveForeground": "#5f7e97",
+    "editor.background": "#011627",
+    "editor.foreground": "#d6deeb",
+    "editorLineNumber.foreground": "#4b6479",
+    "editorLineNumber.activeForeground": "#C5E4FD",
+    "editorCursor.foreground": "#80a4c2",
+    "editor.selectionBackground": "#1d3b53",
+    "editor.selectionHighlightBackground": "#5f7e9779",
+    "editor.inactiveSelectionBackground": "#7e57c25a",
+    "editor.wordHighlightBackground": "#f6bbe533",
+    "editor.wordHighlightStrongBackground": "#e2a2f433",
+    "editor.findMatchBackground": "#5f7e9779",
+    "editor.findMatchHighlightBackground": "#1085bb5d",
+    "editor.findRangeHighlightBackground": null,
+    "editor.hoverHighlightBackground": "#7e57c25a",
+    "editor.lineHighlightBackground": "#0003",
+    "editor.lineHighlightBorder": null,
+    "editorLink.activeForeground": null,
+    "editor.rangeHighlightBackground": "#7e57c25a",
+    "editorWhitespace.foreground": null,
+    "editorIndentGuide.background": "#5e81ce52",
+    "editorIndentGuide.activeBackground": "#7E97AC",
+    "editorRuler.foreground": "#5e81ce52",
+    "editorCodeLens.foreground": "#5e82ceb4",
+    "editorBracketMatch.background": "#5f7e974d",
+    "editorBracketMatch.border": null,
+    "editorOverviewRuler.currentContentForeground": "#7e57c2",
+    "editorOverviewRuler.incomingContentForeground": "#7e57c2",
+    "editorOverviewRuler.commonContentForeground": "#7e57c2",
+    "editorError.foreground": "#EF5350",
+    "editorError.border": null,
+    "editorWarning.foreground": "#b39554",
+    "editorWarning.border": null,
+    "editorGutter.background": "#011627",
+    "editorGutter.modifiedBackground": "#e2b93d",
+    "editorGutter.addedBackground": "#9CCC65",
+    "editorGutter.deletedBackground": "#EF5350",
+    "diffEditor.insertedTextBackground": "#99b76d23",
+    "diffEditor.insertedTextBorder": "#c5e47833",
+    "diffEditor.removedTextBackground": "#ef535033",
+    "diffEditor.removedTextBorder": "#ef53504d",
+    "editorWidget.background": "#021320",
+    "editorWidget.border": "#5f7e97",
+    "editorSuggestWidget.background": "#2C3043",
+    "editorSuggestWidget.border": "#2B2F40",
+    "editorSuggestWidget.foreground": "#d6deeb",
+    "editorSuggestWidget.highlightForeground": "#ffffff",
+    "editorSuggestWidget.selectedBackground": "#5f7e97",
+    "editorHoverWidget.background": "#011627",
+    "editorHoverWidget.border": "#5f7e97",
+    "debugExceptionWidget.background": "#011627",
+    "debugExceptionWidget.border": "#5f7e97",
+    "editorMarkerNavigation.background": "#0b2942",
+    "editorMarkerNavigationError.background": "#EF5350",
+    "editorMarkerNavigationWarning.background": "#FFCA28",
+    "peekView.border": "#5f7e97",
+    "peekViewEditor.background": "#011627",
+    "peekViewEditor.matchHighlightBackground": "#7e57c25a",
+    "peekViewResult.background": "#011627",
+    "peekViewResult.fileForeground": "#5f7e97",
+    "peekViewResult.lineForeground": "#5f7e97",
+    "peekViewResult.matchHighlightBackground": "#ffffffcc",
+    "peekViewResult.selectionBackground": "#2E3250",
+    "peekViewResult.selectionForeground": "#5f7e97",
+    "peekViewTitle.background": "#011627",
+    "peekViewTitleDescription.foreground": "#697098",
+    "peekViewTitleLabel.foreground": "#5f7e97",
+    "merge.currentHeaderBackground": "#5f7e97",
+    "merge.currentContentBackground": null,
+    "merge.incomingHeaderBackground": "#7e57c25a",
+    "merge.incomingContentBackground": null,
+    "merge.border": null,
+    "panel.background": "#011627",
+    "panel.border": "#5f7e97",
+    "panelTitle.activeBorder": "#5f7e97",
+    "panelTitle.activeForeground": "#ffffffcc",
+    "panelTitle.inactiveForeground": "#d6deeb80",
+    "statusBar.background": "#011627",
+    "statusBar.foreground": "#5f7e97",
+    "statusBar.border": "#262A39",
+    "statusBar.debuggingBackground": "#202431",
+    "statusBar.debuggingForeground": null,
+    "statusBar.debuggingBorder": "#1F2330",
+    "statusBar.noFolderForeground": null,
+    "statusBar.noFolderBackground": "#011627",
+    "statusBar.noFolderBorder": "#25293A",
+    "statusBarItem.activeBackground": "#202431",
+    "statusBarItem.hoverBackground": "#202431",
+    "statusBarItem.prominentBackground": "#202431",
+    "statusBarItem.prominentHoverBackground": "#202431",
+    "titleBar.activeBackground": "#011627",
+    "titleBar.activeForeground": "#eeefff",
+    "titleBar.inactiveBackground": "#010e1a",
+    "titleBar.inactiveForeground": null,
+    "notifications.background": "#01111d",
+    "notifications.border": "#262a39",
+    "notificationCenter.border": "#262a39",
+    "notificationToast.border": "#262a39",
+    "notifications.foreground": "#ffffffcc",
+    "notificationLink.foreground": "#80CBC4",
+    "extensionButton.prominentForeground": "#ffffffcc",
+    "extensionButton.prominentBackground": "#7e57c2cc",
+    "extensionButton.prominentHoverBackground": "#7e57c2",
+    "pickerGroup.foreground": "#d1aaff",
+    "pickerGroup.border": "#011627",
+    "terminal.ansiWhite": "#ffffff",
+    "terminal.ansiBlack": "#011627",
+    "terminal.ansiBlue": "#82AAFF",
+    "terminal.ansiCyan": "#21c7a8",
+    "terminal.ansiGreen": "#22da6e",
+    "terminal.ansiMagenta": "#C792EA",
+    "terminal.ansiRed": "#EF5350",
+    "terminal.ansiYellow": "#c5e478",
+    "terminal.ansiBrightWhite": "#ffffff",
+    "terminal.ansiBrightBlack": "#575656",
+    "terminal.ansiBrightBlue": "#82AAFF",
+    "terminal.ansiBrightCyan": "#7fdbca",
+    "terminal.ansiBrightGreen": "#22da6e",
+    "terminal.ansiBrightMagenta": "#C792EA",
+    "terminal.ansiBrightRed": "#EF5350",
+    "terminal.ansiBrightYellow": "#ffeb95",
+    "terminal.selectionBackground": "#1b90dd4d",
+    "terminalCursor.background": "#234d70",
+    "textCodeBlock.background": "#4f4f4f",
+    "debugToolBar.background": "#011627",
+    "welcomePage.buttonBackground": "#011627",
+    "welcomePage.buttonHoverBackground": "#011627",
+    "walkThrough.embeddedEditorBackground": "#011627",
+    "gitDecoration.modifiedResourceForeground": "#a2bffc",
+    "gitDecoration.deletedResourceForeground": "#EF535090",
+    "gitDecoration.untrackedResourceForeground": "#c5e478ff",
+    "gitDecoration.ignoredResourceForeground": "#395a75",
+    "gitDecoration.conflictingResourceForeground": "#ffeb95cc",
+    "source.elm": "#5f7e97",
+    "string.quoted.single.js": "#ffffff",
+    "meta.objectliteral.js": "#82AAFF"
+  },
+  "tokenColors": [
+    {
+      "name": "Changed",
+      "scope": [
+        "markup.changed",
+        "meta.diff.header.git",
+        "meta.diff.header.from-file",
+        "meta.diff.header.to-file"
+      ],
+      "settings": {
+        "foreground": "#a2bffc",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Deleted",
+      "scope": "markup.deleted.diff",
+      "settings": {
+        "foreground": "#EF535090",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Inserted",
+      "scope": "markup.inserted.diff",
+      "settings": {
+        "foreground": "#c5e478ff",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Global settings",
+      "settings": {
+        "background": "#011627",
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Comment",
+      "scope": "comment",
+      "settings": {
+        "foreground": "#637777",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "String",
+      "scope": "string",
+      "settings": {
+        "foreground": "#ecc48d"
+      }
+    },
+    {
+      "name": "String Quoted",
+      "scope": ["string.quoted", "variable.other.readwrite.js"],
+      "settings": {
+        "foreground": "#ecc48d"
+      }
+    },
+    {
+      "name": "Support Constant Math",
+      "scope": "support.constant.math",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Number",
+      "scope": ["constant.numeric", "constant.character.numeric"],
+      "settings": {
+        "foreground": "#F78C6C",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Built-in constant",
+      "scope": [
+        "constant.language",
+        "punctuation.definition.constant",
+        "variable.other.constant"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "User-defined constant",
+      "scope": ["constant.character", "constant.other"],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Constant Character Escape",
+      "scope": "constant.character.escape",
+      "settings": {
+        "foreground": "#F78C6C"
+      }
+    },
+    {
+      "name": "RegExp String",
+      "scope": ["string.regexp", "string.regexp keyword.other"],
+      "settings": {
+        "foreground": "#5ca7e4"
+      }
+    },
+    {
+      "name": "Comma in functions",
+      "scope": "meta.function punctuation.separator.comma",
+      "settings": {
+        "foreground": "#5f7e97"
+      }
+    },
+    {
+      "name": "Variable",
+      "scope": "variable",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Keyword",
+      "scope": ["punctuation.accessor", "keyword"],
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Storage",
+      "scope": [
+        "storage",
+        "meta.var.expr",
+        "meta.class meta.method.declaration meta.var.expr storage.type.js",
+        "storage.type.property.js",
+        "storage.type.property.ts",
+        "storage.type.property.tsx"
+      ],
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Storage type",
+      "scope": "storage.type",
+      "settings": {
+        "foreground": "#c792ea"
+      }
+    },
+    {
+      "name": "Storage type",
+      "scope": "storage.type.function.arrow.js",
+      "settings": {
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Class name",
+      "scope": ["entity.name.class", "meta.class entity.name.type.class"],
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "Inherited class",
+      "scope": "entity.other.inherited-class",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Function name",
+      "scope": "entity.name.function",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Meta Tag",
+      "scope": ["punctuation.definition.tag", "meta.tag"],
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "HTML Tag names",
+      "scope": [
+        "entity.name.tag",
+        "meta.tag.other.html",
+        "meta.tag.other.js",
+        "meta.tag.other.tsx",
+        "entity.name.tag.tsx",
+        "entity.name.tag.js",
+        "entity.name.tag",
+        "meta.tag.js",
+        "meta.tag.tsx",
+        "meta.tag.html"
+      ],
+      "settings": {
+        "foreground": "#caece6",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Tag attribute",
+      "scope": "entity.other.attribute-name",
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Entity Name Tag Custom",
+      "scope": "entity.name.tag.custom",
+      "settings": {
+        "foreground": "#f78c6c"
+      }
+    },
+    {
+      "name": "Library (function & constant)",
+      "scope": ["support.function", "support.constant"],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Support Constant Property Value meta",
+      "scope": "support.constant.meta.property-value",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Library class/type",
+      "scope": ["support.type", "support.class"],
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Support Variable DOM",
+      "scope": "support.variable.dom",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Invalid",
+      "scope": "invalid",
+      "settings": {
+        "background": "#ff2c83",
+        "foreground": "#ffffff"
+      }
+    },
+    {
+      "name": "Invalid deprecated",
+      "scope": "invalid.deprecated",
+      "settings": {
+        "foreground": "#ffffff",
+        "background": "#d3423e"
+      }
+    },
+    {
+      "name": "Keyword Operator",
+      "scope": "keyword.operator",
+      "settings": {
+        "foreground": "#7fdbca",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Keyword Operator Relational",
+      "scope": "keyword.operator.relational",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Keyword Operator Assignment",
+      "scope": "keyword.operator.assignment",
+      "settings": {
+        "foreground": "#c792ea"
+      }
+    },
+    {
+      "name": "Keyword Operator Arithmetic",
+      "scope": "keyword.operator.arithmetic",
+      "settings": {
+        "foreground": "#c792ea"
+      }
+    },
+    {
+      "name": "Keyword Operator Bitwise",
+      "scope": "keyword.operator.bitwise",
+      "settings": {
+        "foreground": "#c792ea"
+      }
+    },
+    {
+      "name": "Keyword Operator Increment",
+      "scope": "keyword.operator.increment",
+      "settings": {
+        "foreground": "#c792ea"
+      }
+    },
+    {
+      "name": "Keyword Operator Ternary",
+      "scope": "keyword.operator.ternary",
+      "settings": {
+        "foreground": "#c792ea"
+      }
+    },
+    {
+      "name": "Double-Slashed Comment",
+      "scope": "comment.line.double-slash",
+      "settings": {
+        "foreground": "#637777"
+      }
+    },
+    {
+      "name": "Object",
+      "scope": "object",
+      "settings": {
+        "foreground": "#cdebf7"
+      }
+    },
+    {
+      "name": "Null",
+      "scope": "constant.language.null",
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "Meta Brace",
+      "scope": "meta.brace",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Meta Delimiter Period",
+      "scope": "meta.delimiter.period",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Punctuation Definition String",
+      "scope": "punctuation.definition.string",
+      "settings": {
+        "foreground": "#d9f5dd"
+      }
+    },
+    {
+      "name": "Punctuation Definition String Markdown",
+      "scope": "punctuation.definition.string.begin.markdown",
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "Boolean",
+      "scope": "constant.language.boolean",
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "Object Comma",
+      "scope": "object.comma",
+      "settings": {
+        "foreground": "#ffffff"
+      }
+    },
+    {
+      "name": "Variable Parameter Function",
+      "scope": "variable.parameter.function",
+      "settings": {
+        "foreground": "#7fdbca",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Support Type Property Name & entity name tags",
+      "scope": [
+        "support.type.vendor.property-name",
+        "support.constant.vendor.property-value",
+        "support.type.property-name",
+        "meta.property-list entity.name.tag"
+      ],
+      "settings": {
+        "foreground": "#80CBC4",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Entity Name tag reference in stylesheets",
+      "scope": "meta.property-list entity.name.tag.reference",
+      "settings": {
+        "foreground": "#57eaf1"
+      }
+    },
+    {
+      "name": "Constant Other Color RGB Value Punctuation Definition Constant",
+      "scope": "constant.other.color.rgb-value punctuation.definition.constant",
+      "settings": {
+        "foreground": "#F78C6C"
+      }
+    },
+    {
+      "name": "Constant Other Color",
+      "scope": "constant.other.color",
+      "settings": {
+        "foreground": "#FFEB95"
+      }
+    },
+    {
+      "name": "Keyword Other Unit",
+      "scope": "keyword.other.unit",
+      "settings": {
+        "foreground": "#FFEB95"
+      }
+    },
+    {
+      "name": "Meta Selector",
+      "scope": "meta.selector",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Entity Other Attribute Name Id",
+      "scope": "entity.other.attribute-name.id",
+      "settings": {
+        "foreground": "#FAD430"
+      }
+    },
+    {
+      "name": "Meta Property Name",
+      "scope": "meta.property-name",
+      "settings": {
+        "foreground": "#80CBC4"
+      }
+    },
+    {
+      "name": "Doctypes",
+      "scope": ["entity.name.tag.doctype", "meta.tag.sgml.doctype"],
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Punctuation Definition Parameters",
+      "scope": "punctuation.definition.parameters",
+      "settings": {
+        "foreground": "#d9f5dd"
+      }
+    },
+    {
+      "name": "Keyword Control Operator",
+      "scope": "keyword.control.operator",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Keyword Operator Logical",
+      "scope": "keyword.operator.logical",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Variable Instances",
+      "scope": [
+        "variable.instance",
+        "variable.other.instance",
+        "variable.readwrite.instance",
+        "variable.other.readwrite.instance",
+        "variable.other.property"
+      ],
+      "settings": {
+        "foreground": "#baebe2"
+      }
+    },
+    {
+      "name": "Variable Property Other object property",
+      "scope": ["variable.other.object.property"],
+      "settings": {
+        "foreground": "#faf39f",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Variable Property Other object",
+      "scope": ["variable.other.object.js"],
+      "settings": {
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Entity Name Function",
+      "scope": ["entity.name.function"],
+      "settings": {
+        "foreground": "#82AAFF",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Keyword Operator Comparison, imports, returns and Keyword Operator Ruby",
+      "scope": [
+        "keyword.operator.comparison",
+        "keyword.control.flow.js",
+        "keyword.control.flow.ts",
+        "keyword.control.flow.tsx",
+        "keyword.control.ruby",
+        "keyword.control.module.ruby",
+        "keyword.control.class.ruby",
+        "keyword.control.def.ruby",
+        "keyword.control.loop.js",
+        "keyword.control.loop.ts",
+        "keyword.control.import.js",
+        "keyword.control.import.ts",
+        "keyword.control.import.tsx",
+        "keyword.control.from.js",
+        "keyword.control.from.ts",
+        "keyword.control.from.tsx",
+        "keyword.operator.instanceof.js",
+        "keyword.operator.expression.instanceof.ts",
+        "keyword.operator.expression.instanceof.tsx"
+      ],
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Keyword Control Conditional",
+      "scope": [
+        "keyword.control.conditional.js",
+        "keyword.control.conditional.ts",
+        "keyword.control.switch.js",
+        "keyword.control.switch.ts"
+      ],
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Support Constant, `new` keyword, Special Method Keyword, `debugger`, other keywords",
+      "scope": [
+        "support.constant",
+        "keyword.other.special-method",
+        "keyword.other.new",
+        "keyword.other.debugger",
+        "keyword.control"
+      ],
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Support Function",
+      "scope": "support.function",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Invalid Broken",
+      "scope": "invalid.broken",
+      "settings": {
+        "foreground": "#020e14",
+        "background": "#F78C6C"
+      }
+    },
+    {
+      "name": "Invalid Unimplemented",
+      "scope": "invalid.unimplemented",
+      "settings": {
+        "background": "#8BD649",
+        "foreground": "#ffffff"
+      }
+    },
+    {
+      "name": "Invalid Illegal",
+      "scope": "invalid.illegal",
+      "settings": {
+        "foreground": "#ffffff",
+        "background": "#ec5f67"
+      }
+    },
+    {
+      "name": "Language Variable",
+      "scope": "variable.language",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Support Variable Property",
+      "scope": "support.variable.property",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Variable Function",
+      "scope": "variable.function",
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Variable Interpolation",
+      "scope": "variable.interpolation",
+      "settings": {
+        "foreground": "#ec5f67"
+      }
+    },
+    {
+      "name": "Meta Function Call",
+      "scope": "meta.function-call",
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Punctuation Section Embedded",
+      "scope": "punctuation.section.embedded",
+      "settings": {
+        "foreground": "#d3423e"
+      }
+    },
+    {
+      "name": "Punctuation Tweaks",
+      "scope": [
+        "punctuation.terminator.expression",
+        "punctuation.definition.arguments",
+        "punctuation.definition.array",
+        "punctuation.section.array",
+        "meta.array"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "More Punctuation Tweaks",
+      "scope": [
+        "punctuation.definition.list.begin",
+        "punctuation.definition.list.end",
+        "punctuation.separator.arguments",
+        "punctuation.definition.list"
+      ],
+      "settings": {
+        "foreground": "#d9f5dd"
+      }
+    },
+    {
+      "name": "Template Strings",
+      "scope": "string.template meta.template.expression",
+      "settings": {
+        "foreground": "#d3423e"
+      }
+    },
+    {
+      "name": "Backtics(``) in Template Strings",
+      "scope": "string.template punctuation.definition.string",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Italics",
+      "scope": "italic",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Bold",
+      "scope": "bold",
+      "settings": {
+        "foreground": "#c5e478",
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "Quote",
+      "scope": "quote",
+      "settings": {
+        "foreground": "#697098",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Raw Code",
+      "scope": "raw",
+      "settings": {
+        "foreground": "#80CBC4"
+      }
+    },
+    {
+      "name": "CoffeScript Variable Assignment",
+      "scope": "variable.assignment.coffee",
+      "settings": {
+        "foreground": "#31e1eb"
+      }
+    },
+    {
+      "name": "CoffeScript Parameter Function",
+      "scope": "variable.parameter.function.coffee",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "CoffeeScript Assignments",
+      "scope": "variable.assignment.coffee",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "C# Readwrite Variables",
+      "scope": "variable.other.readwrite.cs",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "C# Classes & Storage types",
+      "scope": ["entity.name.type.class.cs", "storage.type.cs"],
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "C# Namespaces",
+      "scope": "entity.name.type.namespace.cs",
+      "settings": {
+        "foreground": "#B2CCD6"
+      }
+    },
+    {
+      "name": "C# Unquoted String Zone",
+      "scope": "string.unquoted.preprocessor.message.cs",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "C# Region",
+      "scope": [
+        "punctuation.separator.hash.cs",
+        "keyword.preprocessor.region.cs",
+        "keyword.preprocessor.endregion.cs"
+      ],
+      "settings": {
+        "foreground": "#ffcb8b",
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "C# Other Variables",
+      "scope": "variable.other.object.cs",
+      "settings": {
+        "foreground": "#B2CCD6"
+      }
+    },
+    {
+      "name": "C# Enum",
+      "scope": "entity.name.type.enum.cs",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Dart String",
+      "scope": [
+        "string.interpolated.single.dart",
+        "string.interpolated.double.dart"
+      ],
+      "settings": {
+        "foreground": "#FFCB8B"
+      }
+    },
+    {
+      "name": "Dart Class",
+      "scope": "support.class.dart",
+      "settings": {
+        "foreground": "#FFCB8B"
+      }
+    },
+    {
+      "name": "Tag names in Stylesheets",
+      "scope": [
+        "entity.name.tag.css",
+        "entity.name.tag.less",
+        "entity.name.tag.custom.css",
+        "support.constant.property-value.css"
+      ],
+      "settings": {
+        "foreground": "#ff6363",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Wildcard(*) selector in Stylesheets",
+      "scope": [
+        "entity.name.tag.wildcard.css",
+        "entity.name.tag.wildcard.less",
+        "entity.name.tag.wildcard.scss",
+        "entity.name.tag.wildcard.sass"
+      ],
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "CSS Keyword Other Unit",
+      "scope": "keyword.other.unit.css",
+      "settings": {
+        "foreground": "#FFEB95"
+      }
+    },
+    {
+      "name": "Attribute Name for CSS",
+      "scope": [
+        "meta.attribute-selector.css entity.other.attribute-name.attribute",
+        "variable.other.readwrite.js"
+      ],
+      "settings": {
+        "foreground": "#F78C6C"
+      }
+    },
+    {
+      "name": "Elixir Classes",
+      "scope": [
+        "source.elixir support.type.elixir",
+        "source.elixir meta.module.elixir entity.name.class.elixir"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Elixir Functions",
+      "scope": "source.elixir entity.name.function",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Elixir Constants",
+      "scope": [
+        "source.elixir constant.other.symbol.elixir",
+        "source.elixir constant.other.keywords.elixir"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Elixir String Punctuations",
+      "scope": "source.elixir punctuation.definition.string",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Elixir",
+      "scope": [
+        "source.elixir variable.other.readwrite.module.elixir",
+        "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"
+      ],
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Elixir Binary Punctuations",
+      "scope": "source.elixir .punctuation.binary.elixir",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Closure Constant Keyword",
+      "scope": "constant.keyword.clojure",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Go Function Calls",
+      "scope": "source.go meta.function-call.go",
+      "settings": {
+        "foreground": "#DDDDDD"
+      }
+    },
+    {
+      "name": "Go Keywords",
+      "scope": [
+        "source.go keyword.package.go",
+        "source.go keyword.import.go",
+        "source.go keyword.function.go",
+        "source.go keyword.type.go",
+        "source.go keyword.struct.go",
+        "source.go keyword.interface.go",
+        "source.go keyword.const.go",
+        "source.go keyword.var.go",
+        "source.go keyword.map.go",
+        "source.go keyword.channel.go",
+        "source.go keyword.control.go"
+      ],
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Go Constants e.g. nil, string format (%s, %d, etc.)",
+      "scope": [
+        "source.go constant.language.go",
+        "source.go constant.other.placeholder.go"
+      ],
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "C++ Functions",
+      "scope": [
+        "entity.name.function.preprocessor.cpp",
+        "entity.scope.name.cpp"
+      ],
+      "settings": {
+        "foreground": "#7fdbcaff"
+      }
+    },
+    {
+      "name": "C++ Meta Namespace",
+      "scope": ["meta.namespace-block.cpp"],
+      "settings": {
+        "foreground": "#e0dec6"
+      }
+    },
+    {
+      "name": "C++ Language Primitive Storage",
+      "scope": ["storage.type.language.primitive.cpp"],
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "C++ Preprocessor Macro",
+      "scope": ["meta.preprocessor.macro.cpp"],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "C++ Variable Parameter",
+      "scope": ["variable.parameter"],
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "Powershell Variables",
+      "scope": ["variable.other.readwrite.powershell"],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Powershell Function",
+      "scope": ["support.function.powershell"],
+      "settings": {
+        "foreground": "#7fdbcaff"
+      }
+    },
+    {
+      "name": "ID Attribute Name in HTML",
+      "scope": "entity.other.attribute-name.id.html",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "HTML Punctuation Definition Tag",
+      "scope": "punctuation.definition.tag.html",
+      "settings": {
+        "foreground": "#6ae9f0"
+      }
+    },
+    {
+      "name": "HTML Doctype",
+      "scope": "meta.tag.sgml.doctype.html",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "JavaScript Classes",
+      "scope": "meta.class entity.name.type.class.js",
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "JavaScript Method Declaration e.g. `constructor`",
+      "scope": "meta.method.declaration storage.type.js",
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "JavaScript Terminator",
+      "scope": "terminator.js",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "JavaScript Meta Punctuation Definition",
+      "scope": "meta.js punctuation.definition.js",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Entity Names in Code Documentations",
+      "scope": [
+        "entity.name.type.instance.jsdoc",
+        "entity.name.type.instance.phpdoc"
+      ],
+      "settings": {
+        "foreground": "#5f7e97"
+      }
+    },
+    {
+      "name": "Other Variables in Code Documentations",
+      "scope": ["variable.other.jsdoc", "variable.other.phpdoc"],
+      "settings": {
+        "foreground": "#78ccf0"
+      }
+    },
+    {
+      "name": "JavaScript module imports and exports",
+      "scope": [
+        "variable.other.meta.import.js",
+        "meta.import.js variable.other",
+        "variable.other.meta.export.js",
+        "meta.export.js variable.other"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "JavaScript Variable Parameter Function",
+      "scope": "variable.parameter.function.js",
+      "settings": {
+        "foreground": "#7986E7"
+      }
+    },
+    {
+      "name": "JavaScript[React] Variable Other Object",
+      "scope": [
+        "variable.other.object.js",
+        "variable.other.object.jsx",
+        "variable.object.property.js",
+        "variable.object.property.jsx"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "JavaScript Variables",
+      "scope": ["variable.js", "variable.other.js"],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "JavaScript Entity Name Type",
+      "scope": ["entity.name.type.js", "entity.name.type.module.js"],
+      "settings": {
+        "foreground": "#ffcb8b",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "JavaScript Support Classes",
+      "scope": "support.class.js",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "JSON Property Names",
+      "scope": "support.type.property-name.json",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "JSON Support Constants",
+      "scope": "support.constant.json",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "JSON Property values (string)",
+      "scope": "meta.structure.dictionary.value.json string.quoted.double",
+      "settings": {
+        "foreground": "#c789d6"
+      }
+    },
+    {
+      "name": "Strings in JSON values",
+      "scope": "string.quoted.double.json punctuation.definition.string.json",
+      "settings": {
+        "foreground": "#80CBC4"
+      }
+    },
+    {
+      "name": "Specific JSON Property values like null",
+      "scope": "meta.structure.dictionary.json meta.structure.dictionary.value constant.language",
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "JavaScript Other Variable",
+      "scope": "variable.other.object.js",
+      "settings": {
+        "foreground": "#7fdbca",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Ruby Variables",
+      "scope": ["variable.other.ruby"],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Ruby Class",
+      "scope": ["entity.name.type.class.ruby"],
+      "settings": {
+        "foreground": "#ecc48d"
+      }
+    },
+    {
+      "name": "Ruby Hashkeys",
+      "scope": "constant.language.symbol.hashkey.ruby",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Ruby Symbols",
+      "scope": "constant.language.symbol.ruby",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "LESS Tag names",
+      "scope": "entity.name.tag.less",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "LESS Keyword Other Unit",
+      "scope": "keyword.other.unit.css",
+      "settings": {
+        "foreground": "#FFEB95"
+      }
+    },
+    {
+      "name": "Attribute Name for LESS",
+      "scope": "meta.attribute-selector.less entity.other.attribute-name.attribute",
+      "settings": {
+        "foreground": "#F78C6C"
+      }
+    },
+    {
+      "name": "Markdown Headings",
+      "scope": [
+        "markup.heading.markdown",
+        "markup.heading.setext.1.markdown",
+        "markup.heading.setext.2.markdown"
+      ],
+      "settings": {
+        "foreground": "#82b1ff"
+      }
+    },
+    {
+      "name": "Markdown Italics",
+      "scope": "markup.italic.markdown",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Markdown Bold",
+      "scope": "markup.bold.markdown",
+      "settings": {
+        "foreground": "#c5e478",
+        "fontStyle": "bold"
+      }
+    },
+    {
+      "name": "Markdown Quote + others",
+      "scope": "markup.quote.markdown",
+      "settings": {
+        "foreground": "#697098",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "Markdown Raw Code + others",
+      "scope": "markup.inline.raw.markdown",
+      "settings": {
+        "foreground": "#80CBC4"
+      }
+    },
+    {
+      "name": "Markdown Links",
+      "scope": [
+        "markup.underline.link.markdown",
+        "markup.underline.link.image.markdown"
+      ],
+      "settings": {
+        "foreground": "#ff869a"
+      }
+    },
+    {
+      "name": "Markdown Link Title and Description",
+      "scope": [
+        "string.other.link.title.markdown",
+        "string.other.link.description.markdown"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Markdown Punctuation",
+      "scope": [
+        "punctuation.definition.string.markdown",
+        "punctuation.definition.string.begin.markdown",
+        "punctuation.definition.string.end.markdown",
+        "meta.link.inline.markdown punctuation.definition.string"
+      ],
+      "settings": {
+        "foreground": "#82b1ff"
+      }
+    },
+    {
+      "name": "Markdown MetaData Punctuation",
+      "scope": ["punctuation.definition.metadata.markdown"],
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "Markdown List Punctuation",
+      "scope": ["beginning.punctuation.definition.list.markdown"],
+      "settings": {
+        "foreground": "#82b1ff"
+      }
+    },
+    {
+      "name": "Markdown Inline Raw String",
+      "scope": "markup.inline.raw.string.markdown",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "PHP Variables",
+      "scope": ["variable.other.php", "variable.other.property.php"],
+      "settings": {
+        "foreground": "#bec5d4"
+      }
+    },
+    {
+      "name": "Support Classes in PHP",
+      "scope": "support.class.php",
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "Punctuations in PHP function calls",
+      "scope": "meta.function-call.php punctuation",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "PHP Global Variables",
+      "scope": "variable.other.global.php",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Declaration Punctuation in PHP Global Variables",
+      "scope": "variable.other.global.php punctuation.definition.variable",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Language Constants in Python",
+      "scope": "constant.language.python",
+      "settings": {
+        "foreground": "#ff5874"
+      }
+    },
+    {
+      "name": "Python Function Parameter and Arguments",
+      "scope": [
+        "variable.parameter.function.python",
+        "meta.function-call.arguments.python"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Python Function Call",
+      "scope": [
+        "meta.function-call.python",
+        "meta.function-call.generic.python"
+      ],
+      "settings": {
+        "foreground": "#B2CCD6"
+      }
+    },
+    {
+      "name": "Punctuations in Python",
+      "scope": "punctuation.python",
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "Decorator Functions in Python",
+      "scope": "entity.name.function.decorator.python",
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Python Language Variable",
+      "scope": "source.python variable.language.special",
+      "settings": {
+        "foreground": "#8EACE3"
+      }
+    },
+    {
+      "name": "Python import control keyword",
+      "scope": "keyword.control",
+      "settings": {
+        "foreground": "#c792ea",
+        "fontStyle": "italic"
+      }
+    },
+    {
+      "name": "SCSS Variable",
+      "scope": [
+        "variable.scss",
+        "variable.sass",
+        "variable.parameter.url.scss",
+        "variable.parameter.url.sass"
+      ],
+      "settings": {
+        "foreground": "#c5e478"
+      }
+    },
+    {
+      "name": "Variables in SASS At-Rules",
+      "scope": [
+        "source.css.scss meta.at-rule variable",
+        "source.css.sass meta.at-rule variable"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "Variables in SASS At-Rules",
+      "scope": [
+        "source.css.scss meta.at-rule variable",
+        "source.css.sass meta.at-rule variable"
+      ],
+      "settings": {
+        "foreground": "#bec5d4"
+      }
+    },
+    {
+      "name": "Attribute Name for SASS",
+      "scope": [
+        "meta.attribute-selector.scss entity.other.attribute-name.attribute",
+        "meta.attribute-selector.sass entity.other.attribute-name.attribute"
+      ],
+      "settings": {
+        "foreground": "#F78C6C"
+      }
+    },
+    {
+      "name": "Tag names in SASS",
+      "scope": ["entity.name.tag.scss", "entity.name.tag.sass"],
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "SASS Keyword Other Unit",
+      "scope": ["keyword.other.unit.scss", "keyword.other.unit.sass"],
+      "settings": {
+        "foreground": "#FFEB95"
+      }
+    },
+    {
+      "name": "TypeScript[React] Variables and Object Properties",
+      "scope": [
+        "variable.other.readwrite.alias.ts",
+        "variable.other.readwrite.alias.tsx",
+        "variable.other.readwrite.ts",
+        "variable.other.readwrite.tsx",
+        "variable.other.object.ts",
+        "variable.other.object.tsx",
+        "variable.object.property.ts",
+        "variable.object.property.tsx",
+        "variable.other.ts",
+        "variable.other.tsx",
+        "variable.tsx",
+        "variable.ts"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "TypeScript[React] Entity Name Types",
+      "scope": ["entity.name.type.ts", "entity.name.type.tsx"],
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "TypeScript[React] Node Classes",
+      "scope": ["support.class.node.ts", "support.class.node.tsx"],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "TypeScript[React] Entity Name Types as Parameters",
+      "scope": [
+        "meta.type.parameters.ts entity.name.type",
+        "meta.type.parameters.tsx entity.name.type"
+      ],
+      "settings": {
+        "foreground": "#5f7e97"
+      }
+    },
+    {
+      "name": "TypeScript[React] Import/Export Punctuations",
+      "scope": [
+        "meta.import.ts punctuation.definition.block",
+        "meta.import.tsx punctuation.definition.block",
+        "meta.export.ts punctuation.definition.block",
+        "meta.export.tsx punctuation.definition.block"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "TypeScript[React] Punctuation Decorators",
+      "scope": [
+        "meta.decorator punctuation.decorator.ts",
+        "meta.decorator punctuation.decorator.tsx"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "TypeScript[React] Punctuation Decorators",
+      "scope": "meta.tag.js meta.jsx.children.tsx",
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "YAML Entity Name Tags",
+      "scope": "entity.name.tag.yaml",
+      "settings": {
+        "foreground": "#7fdbca"
+      }
+    },
+    {
+      "name": "JavaScript Variable Other ReadWrite",
+      "scope": ["variable.other.readwrite.js", "variable.parameter"],
+      "settings": {
+        "foreground": "#d7dbe0"
+      }
+    },
+    {
+      "name": "Support Class Component",
+      "scope": ["support.class.component.js", "support.class.component.tsx"],
+      "settings": {
+        "foreground": "#f78c6c",
+        "fontStyle": ""
+      }
+    },
+    {
+      "name": "Text nested in React tags",
+      "scope": [
+        "meta.jsx.children",
+        "meta.jsx.children.js",
+        "meta.jsx.children.tsx"
+      ],
+      "settings": {
+        "foreground": "#d6deeb"
+      }
+    },
+    {
+      "name": "TypeScript Classes",
+      "scope": "meta.class entity.name.type.class.tsx",
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "TypeScript Entity Name Type",
+      "scope": ["entity.name.type.tsx", "entity.name.type.module.tsx"],
+      "settings": {
+        "foreground": "#ffcb8b"
+      }
+    },
+    {
+      "name": "TypeScript Class Variable Keyword",
+      "scope": [
+        "meta.class.ts meta.var.expr.ts storage.type.ts",
+        "meta.class.tsx meta.var.expr.tsx storage.type.tsx"
+      ],
+      "settings": {
+        "foreground": "#C792EA"
+      }
+    },
+    {
+      "name": "TypeScript Method Declaration e.g. `constructor`",
+      "scope": [
+        "meta.method.declaration storage.type.ts",
+        "meta.method.declaration storage.type.tsx"
+      ],
+      "settings": {
+        "foreground": "#82AAFF"
+      }
+    },
+    {
+      "name": "normalize font style of certain components",
+      "scope": [
+        "meta.property-list.css meta.property-value.css variable.other.less",
+        "meta.property-list.scss variable.scss",
+        "meta.property-list.sass variable.sass",
+        "meta.brace",
+        "keyword.operator.operator",
+        "keyword.operator.or.regexp",
+        "keyword.operator.expression.in",
+        "keyword.operator.relational",
+        "keyword.operator.assignment",
+        "keyword.operator.comparison",
+        "keyword.operator.type",
+        "keyword.operator",
+        "keyword",
+        "punctuation.definintion.string",
+        "punctuation",
+        "variable.other.readwrite.js",
+        "storage.type",
+        "source.css",
+        "string.quoted"
+      ],
+      "settings": {
+        "fontStyle": ""
+      }
+    }
+  ]
+}

assets/themes/src/vscode/noctis/LICENSE 🔗

@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) 2018 Liviu Schera
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

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

@@ -0,0 +1,1113 @@
+{
+   "name": "Noctis Azureus",
+   "type": "dark",
+   "colors": {
+      "selection.background": "#1679b6cc",
+      "descriptionForeground": "#61a6d1",
+      "errorForeground": "#e34e1c",
+      "widget.shadow": "#00000044",
+      "editor.background": "#07273b",
+      "editor.foreground": "#becfda",
+      "editorLineNumber.foreground": "#4d6c80",
+      "editorLineNumber.activeForeground": "#61a6d1",
+      "editorCursor.foreground": "#b3e2ff",
+      "badge.background": "#49ace9",
+      "badge.foreground": "#0f1315",
+      "activityBar.background": "#07273b",
+      "activityBar.dropBackground": "#61a6d165",
+      "activityBar.border": "#0f1315",
+      "activityBar.foreground": "#1679b6",
+      "activityBar.inactiveForeground": "#1679b677",
+      "activityBarBadge.background": "#49ace9",
+      "activityBarBadge.foreground": "#0f1315",
+      "activityBar.activeBackground": "#49ace933",
+      "activityBar.activeBorder": "#49ace9",
+      "sideBar.background": "#062132",
+      "sideBar.dropBackground": "#062132",
+      "sideBar.border": "#0f1315",
+      "sideBar.foreground": "#9fb6c6",
+      "sideBarSectionHeader.background": "#09334e",
+      "sideBarSectionHeader.foreground": "#9fb6c6",
+      "sideBarTitle.foreground": "#9fb6c6",
+      "sideBarSectionHeader.border": "#0f1315",
+      "statusBar.foreground": "#1679b6",
+      "statusBar.background": "#07273b",
+      "statusBar.border": "#0f1315",
+      "statusBar.debuggingBackground": "#07273b",
+      "statusBar.debuggingForeground": "#ff80ac50",
+      "statusBar.debuggingBorder": "#ff80acaf",
+      "statusBar.noFolderForeground": "#879dab",
+      "statusBar.noFolderBackground": "#07273b",
+      "statusBar.noFolderBorder": "#07273b",
+      "statusBarItem.activeBackground": "#007ecc59",
+      "statusBarItem.hoverBackground": "#0a3652",
+      "statusBarItem.prominentBackground": "#051e2e",
+      "statusBarItem.prominentHoverBackground": "#002f4d",
+      "button.background": "#007f99",
+      "button.foreground": "#ebf7ff",
+      "button.hoverBackground": "#0ac",
+      "dropdown.background": "#09334e",
+      "dropdown.border": "#09334e",
+      "dropdown.foreground": "#61a6d1",
+      "editorMarkerNavigation.background": "#3a3a5e29",
+      "editorMarkerNavigationError.background": "#e34e1c",
+      "editorMarkerNavigationWarning.background": "#e69533",
+      "editorError.border": "#07273b",
+      "editorError.foreground": "#e34e1c",
+      "editorWarning.border": "#07273b",
+      "editorWarning.foreground": "#e69533",
+      "editorInfo.border": "#07273b",
+      "editorInfo.foreground": "#49ace9",
+      "editorHint.border": "#49e9a600",
+      "editorHint.foreground": "#49e9a6",
+      "editorGroup.emptyBackground": "#4d6c8033",
+      "editorGroup.border": "#0f1315",
+      "editorGroup.dropBackground": "#4d6c8033",
+      "editorGroupHeader.noTabsBackground": "#09334e",
+      "editorGroupHeader.tabsBackground": "#09334e",
+      "editorGroupHeader.tabsBorder": "#09334e",
+      "tab.activeBackground": "#07273b",
+      "tab.unfocusedActiveBackground": "#002c47",
+      "tab.activeForeground": "#49ace9",
+      "tab.border": "#0f1315",
+      "tab.inactiveBackground": "#09334e",
+      "tab.inactiveForeground": "#9fb6c6",
+      "tab.unfocusedActiveForeground": "#9fb6c6",
+      "tab.unfocusedInactiveForeground": "#9fb6c6",
+      "tab.activeBorderTop": "#49ace9",
+      "tab.activeModifiedBorder": "#49e9a6",
+      "tab.activeBorder": "#07273b",
+      "tab.unfocusedActiveBorder": "#07273b",
+      "tab.unfocusedHoverBackground": "#1679b621",
+      "textBlockQuote.background": "#07273b",
+      "textBlockQuote.border": "#1679b6",
+      "textCodeBlock.background": "#07273b",
+      "textLink.activeForeground": "#49ace9",
+      "textLink.foreground": "#49ace9",
+      "textPreformat.foreground": "#ffc180",
+      "textSeparator.foreground": "#07273b",
+      "walkThrough.embeddedEditorBackground": "#07273b",
+      "welcomePage.buttonBackground": "#051b29",
+      "welcomePage.buttonHoverBackground": "#09334e",
+      "input.background": "#051b29",
+      "input.border": "#002f4d",
+      "input.foreground": "#CDD3DE",
+      "input.placeholderForeground": "#879dab",
+      "inputOption.activeBorder": "#1679b6",
+      "inputValidation.errorForeground": "#ff4000",
+      "inputValidation.errorBackground": "#501502ee",
+      "inputValidation.errorBorder": "#691c02",
+      "inputValidation.infoForeground": "#40d4e7",
+      "inputValidation.infoBackground": "#0f6e7bee",
+      "inputValidation.infoBorder": "#148f9f",
+      "inputValidation.warningForeground": "#e69533",
+      "inputValidation.warningBackground": "#82694acc",
+      "inputValidation.warningBorder": "#a88457",
+      "editorWidget.background": "#09334e",
+      "editorWidget.border": "#0f1315",
+      "editorHoverWidget.background": "#002942",
+      "editorHoverWidget.border": "#0f1315",
+      "editorSuggestWidget.background": "#002942",
+      "editorSuggestWidget.border": "#0f1315",
+      "editorSuggestWidget.foreground": "#9fb6c6",
+      "editorSuggestWidget.highlightForeground": "#49ace9",
+      "editorSuggestWidget.selectedBackground": "#0c3f5f",
+      "editorGutter.background": "#07273b",
+      "editorGutter.addedBackground": "#8ce99a",
+      "editorGutter.deletedBackground": "#e34e1c",
+      "editorGutter.modifiedBackground": "#ffc180",
+      "editor.selectionBackground": "#1679b655",
+      "editor.selectionHighlightBackground": "#49ace933",
+      "editor.inactiveSelectionBackground": "#1679b633",
+      "editor.wordHighlightStrongBackground": "#cc990033",
+      "editor.wordHighlightBackground": "#e4b78133",
+      "editor.findMatchBackground": "#40bf6a11",
+      "editor.findMatchHighlightBackground": "#0e667179",
+      "editor.findRangeHighlightBackground": "#49e9a622",
+      "editor.hoverHighlightBackground": "#1679b63f",
+      "editor.lineHighlightBackground": "#003c61ee",
+      "editor.lineHighlightBorder": "#003c61",
+      "editor.rangeHighlightBackground": "#49d6e922",
+      "editorLink.activeForeground": "#14a5ff",
+      "editorWhitespace.foreground": "#ffffff21",
+      "editorIndentGuide.background": "#183c53",
+      "editorIndentGuide.activeBackground": "#28658a",
+      "editorBracketMatch.background": "#1679b622",
+      "editorBracketMatch.border": "#1679b6",
+      "editorRuler.foreground": "#1a425b",
+      "editorCodeLens.foreground": "#5b858b",
+      "terminal.ansiBlack": "#28353e",
+      "terminal.ansiRed": "#e66533",
+      "terminal.ansiGreen": "#49e9a6",
+      "terminal.ansiYellow": "#e4b781",
+      "terminal.ansiBlue": "#49ace9",
+      "terminal.ansiMagenta": "#df769b",
+      "terminal.ansiCyan": "#49d6e9",
+      "terminal.ansiWhite": "#aec3d0",
+      "terminal.ansiBrightBlack": "#475e6c",
+      "terminal.ansiBrightRed": "#e97749",
+      "terminal.ansiBrightGreen": "#60ebb1",
+      "terminal.ansiBrightYellow": "#e69533",
+      "terminal.ansiBrightBlue": "#60b6eb",
+      "terminal.ansiBrightMagenta": "#e798b3",
+      "terminal.ansiBrightCyan": "#60dbeb",
+      "terminal.ansiBrightWhite": "#becfda",
+      "terminal.background": "#051b29",
+      "terminal.foreground": "#becfda",
+      "terminalCursor.background": "#051b29",
+      "terminalCursor.foreground": "#becfda",
+      "merge.border": "#07273b00",
+      "merge.currentContentBackground": "#85f1ff22",
+      "merge.currentHeaderBackground": "#85f1ff44",
+      "merge.incomingContentBackground": "#9d92f222",
+      "merge.incomingHeaderBackground": "#9d92f244",
+      "merge.commonContentBackground": "#ffc18022",
+      "merge.commonHeaderBackground": "#ffc18044",
+      "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+      "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+      "editorOverviewRuler.commonContentForeground": "#ffc18044",
+      "editorOverviewRuler.border": "#07273b",
+      "notificationCenter.border": "#09334e",
+      "notificationCenterHeader.foreground": "#879dab",
+      "notificationCenterHeader.background": "#09334e",
+      "notificationToast.border": "#09334e",
+      "notifications.foreground": "#CDD3DE",
+      "notifications.background": "#09334e",
+      "notifications.border": "#09334e",
+      "notificationLink.foreground": "#879dab",
+      "diffEditor.insertedTextBackground": "#16b67327",
+      "diffEditor.removedTextBackground": "#e6653341",
+      "debugToolBar.background": "#07273b",
+      "debugExceptionWidget.background": "#07273b",
+      "debugExceptionWidget.border": "#1679b6",
+      "extensionButton.prominentBackground": "#008c99",
+      "extensionButton.prominentForeground": "#e5f5f5",
+      "extensionButton.prominentHoverBackground": "#00bbcc",
+      "focusBorder": "#09334e",
+      "foreground": "#becfda",
+      "panel.background": "#051b29",
+      "panel.border": "#1679b6",
+      "panelTitle.activeBorder": "#1679b6",
+      "panelTitle.activeForeground": "#49ace9",
+      "panelTitle.inactiveForeground": "#507b95",
+      "peekView.border": "#1679b6",
+      "peekViewEditor.background": "#001f33",
+      "peekViewEditor.matchHighlightBackground": "#005b9433",
+      "peekViewEditor.matchHighlightBorder": "#007ecc",
+      "peekViewEditorGutter.background": "#001f33",
+      "peekViewResult.background": "#002338",
+      "peekViewResult.fileForeground": "#ffc180",
+      "peekViewResult.lineForeground": "#879dab",
+      "peekViewResult.matchHighlightBackground": "#09334e",
+      "peekViewResult.selectionBackground": "#09334e",
+      "peekViewResult.selectionForeground": "#879dab",
+      "peekViewTitle.background": "#002338",
+      "peekViewTitleDescription.foreground": "#879dab",
+      "peekViewTitleLabel.foreground": "#ffc180",
+      "progressBar.background": "#49ace9",
+      "scrollbar.shadow": "#00000044",
+      "scrollbarSlider.activeBackground": "#008ee677",
+      "scrollbarSlider.background": "#008ee633",
+      "scrollbarSlider.hoverBackground": "#008ee655",
+      "gitDecoration.addedResourceForeground": "#16b673",
+      "gitDecoration.modifiedResourceForeground": "#49e9a6",
+      "gitDecoration.deletedResourceForeground": "#e34e1c",
+      "gitDecoration.untrackedResourceForeground": "#40d4e7",
+      "gitDecoration.ignoredResourceForeground": "#5b788b",
+      "gitDecoration.conflictingResourceForeground": "#ffc180",
+      "pickerGroup.border": "#1679b6",
+      "pickerGroup.foreground": "#49ace9",
+      "list.activeSelectionBackground": "#0c3f5f",
+      "list.activeSelectionForeground": "#ebf7ff",
+      "list.dropBackground": "#002a4d",
+      "list.focusBackground": "#0b3c5b",
+      "list.focusForeground": "#ebf7ff",
+      "list.highlightForeground": "#49ace9",
+      "list.hoverBackground": "#00558a65",
+      "list.hoverForeground": "#ebf7ff",
+      "list.inactiveFocusBackground": "#082d44",
+      "list.inactiveSelectionBackground": "#09334e",
+      "list.inactiveSelectionForeground": "#becfda",
+      "list.errorForeground": "#e34e1c",
+      "list.warningForeground": "#ffa857",
+      "listFilterWidget.background": "#002a4d",
+      "listFilterWidget.outline": "#49e9a6",
+      "listFilterWidget.noMatchesOutline": "#e34e1c",
+      "tree.indentGuidesStroke": "#4d6c80",
+      "settings.headerForeground": "#becfda",
+      "settings.modifiedItemIndicator": "#15ac31",
+      "settings.dropdownListBorder": "#0051a877",
+      "settings.dropdownBackground": "#09334e",
+      "settings.dropdownForeground": "#0ac",
+      "settings.dropdownBorder": "#09334e",
+      "settings.checkboxBackground": "#09334e",
+      "settings.checkboxForeground": "#0ac",
+      "settings.checkboxBorder": "#09334e",
+      "settings.textInputBackground": "#09334e",
+      "settings.textInputForeground": "#0ac",
+      "settings.textInputBorder": "#09334e",
+      "settings.numberInputBackground": "#051b29",
+      "settings.numberInputForeground": "#7060eb",
+      "settings.numberInputBorder": "#051b29",
+      "breadcrumb.foreground": "#9fb6c6",
+      "breadcrumb.background": "#07273b",
+      "breadcrumb.focusForeground": "#49ace9",
+      "breadcrumb.activeSelectionForeground": "#ebf7ff",
+      "breadcrumbPicker.background": "#09334e",
+      "titleBar.activeBackground": "#07273b",
+      "titleBar.activeForeground": "#becfda",
+      "titleBar.inactiveBackground": "#07273b",
+      "titleBar.inactiveForeground": "#9fb6c6",
+      "menu.background": "#09334e",
+      "menu.foreground": "#9fb6c6",
+      "menu.selectionBackground": "#0b3c5b",
+      "menu.selectionForeground": "#49ace9",
+      "menu.selectionBorder": "#0b3c5b",
+      "menu.separatorBackground": "#49ace9",
+      "menubar.selectionBackground": "#0b3c5b",
+      "menubar.selectionForeground": "#49ace9",
+      "menubar.selectionBorder": "#0b3c5b",
+      "editor.snippetTabstopHighlightBackground": "#051b29",
+      "editor.snippetTabstopHighlightBorder": "#062132",
+      "editor.snippetFinalTabstopHighlightBackground": "#051b29",
+      "editor.snippetFinalTabstopHighlightBorder": "#062132",
+      "minimap.findMatchHighlight": "#49ace9ee",
+      "minimap.errorHighlight": "#e34e1cee",
+      "minimap.warningHighlight": "#e69533ee",
+      "minimapGutter.addedBackground": "#16b673",
+      "minimapGutter.modifiedBackground": "#49e9a6",
+      "minimapGutter.deletedBackground": "#e34e1c",
+      "minimap.background": "#07273b99"
+   },
+   "tokenColors": [
+      {
+         "name": "COMMENT",
+         "scope": [
+            "comment",
+            "punctuation.definition.comment",
+            "punctuation.definition.tag",
+            "comment.block.documentation punctuation.definition.bracket",
+            "source.ocaml comment constant.regexp meta.separator",
+            "markup.other.anchor support.constant",
+            "markup.fenced_code",
+            "markup.fenced_code punctuation.definition",
+            "punctuation.definition.heading",
+            "punctuation.definition.bold.markdown",
+            "punctuation.definition.italic.markdown",
+            "punctuation.definition.strikethrough.markdown"
+         ],
+         "settings": {
+            "foreground": "#5988a6"
+         }
+      },
+      {
+         "name": "TEXT",
+         "scope": [
+            "constant.character",
+            "constant.escape",
+            "text.html.markdown",
+            "punctuation.definition.list_item",
+            "keyword.begin.tag.ejs",
+            "constant.name.attribute.tag.pug",
+            "source.clojure meta.symbol",
+            "constant.other.description.jsdoc",
+            "keyword.other.array.phpdoc.php",
+            "keyword.operator.other.powershell",
+            "meta.link.inline punctuation.definition.string",
+            "source.sql",
+            "source meta.brace",
+            "source punctuation",
+            "text.html punctuation",
+            "markup meta punctuation.definition",
+            "meta.bracket.julia",
+            "meta.array.julia",
+            "entity.name.footnote",
+            "source.ocaml punctuation.definition.tag",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "entity.other.attribute-name strong",
+            "binding.fsharp keyword.symbol.fsharp",
+            "entity.name.record.field.elm",
+            "entity.name.record.field.accessor.elm",
+            "storage.modifier.array.bracket",
+            "source.css entity.other",
+            "meta.attribute-selector punctuation.definition.entity",
+            "markup.other.anchor string",
+            "punctuation.separator",
+            "punctuation.section",
+            "punctuation.terminator"
+         ],
+         "settings": {
+            "foreground": "#becfda"
+         }
+      },
+      {
+         "name": "KEYWORD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.modifier",
+            "meta.tag.sgml",
+            "punctuation.accessor",
+            "constant.other.color",
+            "entity.name.section",
+            "markup.heading",
+            "markup.heading punctuation.definition",
+            "entity.other.attribute-name.pseudo-class",
+            "entity.other.attribute-name.pseudo-element",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "storage.type.function.pug",
+            "text.pug storage.type",
+            "text.pug meta.tag.other",
+            "source.clojure storage.control",
+            "meta.expression.clojure",
+            "punctuation.separator.slice.python",
+            "punctuation.separator.question-mark.cs",
+            "punctuation.definition.parameters.varargs",
+            "source.go keyword.operator",
+            "punctuation.separator.pointer-access",
+            "punctuation.separator.other.ruby",
+            "keyword.package",
+            "keyword.import",
+            "punctuation.definition.keyword",
+            "punctuation.separator.hash.cs",
+            "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+            "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+            "source.kotlin storage.type.import",
+            "source.kotlin storage.type.package",
+            "constant.string.documentation.powershell",
+            "punctuation.section.directive",
+            "storage.type.rust",
+            "punctuation.definition.attribute",
+            "punctuation.definition.preprocessor",
+            "punctuation.separator.namespace",
+            "punctuation.separator.method",
+            "keyword.control punctuation.definition.function",
+            "source.ocaml variable.interpolation string",
+            "source.reason variable.interpolation",
+            "punctuation.definition.directive",
+            "storage.type.modifier",
+            "keyword.other.class.fileds",
+            "source.toml entity.other.attribute-name",
+            "source.css entity.name.tag.custom",
+            "sharing.modifier",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby"
+         ],
+         "settings": {
+            "foreground": "#df769b"
+         }
+      },
+      {
+         "name": "VARIABLE",
+         "scope": [
+            "variable",
+            "variable.object",
+            "variable.other",
+            "variable.parameter",
+            "support",
+            "entity.name.module",
+            "variable.import.parameter",
+            "variable.other.class",
+            "meta.toc-list.id.html",
+            "source.json meta.structure.dictionary.json support.type.property-name.json",
+            "meta.var.clojure",
+            "entity.name.variable",
+            "source.java meta.class.body.java",
+            "entity.name.package.go",
+            "source.c",
+            "source.cpp",
+            "source.go",
+            "source.python",
+            "meta.function-call.arguments.python",
+            "source.ruby",
+            "source.coffee.embedded.source",
+            "source.coffee",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "storage.type.annotation",
+            "punctuation.definition.annotation",
+            "source.groovy.embedded.source",
+            "punctuation.definition.variable",
+            "source.powershell",
+            "string.quoted.interpolated.vala constant.character.escape.vala",
+            "source.apacheconf",
+            "source.objc",
+            "source.crystal",
+            "string.quoted.double.kotlin entity.string.template.element.kotlin",
+            "entity.name.package.kotlin",
+            "meta.template.expression.kotlin",
+            "parameter.variable.function",
+            "variable.other.constant.elixir",
+            "source.elixir.embedded.source",
+            "source.sql.embedded",
+            "punctuation.definition.placeholder",
+            "source.swift",
+            "source.julia",
+            "source.shell",
+            "variable.other.normal punctuation.definition.variable.shell",
+            "source.reason variable.language",
+            "source.reason variable.language string.other.link",
+            "source.elm meta.value",
+            "source.elm meta.declaration.module",
+            "meta.embedded.block variable punctuation.definition.variable.php",
+            "string.quoted.double.class.other",
+            "source.toml keyword",
+            "support.type.nim",
+            "source.tf meta.template.expression",
+            "source.scala entity.name.import",
+            "markup.code",
+            "markup.fenced_code.block"
+         ],
+         "settings": {
+            "foreground": "#e4b781"
+         }
+      },
+      {
+         "name": "ANNOTATION",
+         "scope": [
+            "support.variable.property",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "entity.other.attribute-name.id",
+            "entity.other.attribute-name.id punctuation.definition.entity",
+            "entity.name.type.annotation.kotlin",
+            "support.type.primitive",
+            "meta.type.parameters entity.name.type",
+            "meta.type.annotation entity.name.type",
+            "punctuation.definition.typeparameters",
+            "source.python support.type.python",
+            "comment.block.documentation.phpdoc.php keyword.other.type.php",
+            "storage.type.php",
+            "keyword.type",
+            "storage.type.cs",
+            "storage.type.c",
+            "storage.type.objc",
+            "punctuation.definition.storage.type.objc",
+            "markup punctuation.definition",
+            "storage.type.powershell",
+            "comment.block.documentation entity.name.type",
+            "source.java storage.type",
+            "storage.type.primitive",
+            "source.groovy storage.type",
+            "storage.type.r",
+            "source.haskell storage.type",
+            "punctuation.separator.clause-head-body",
+            "source.go storage.type",
+            "storage.type.core.rust",
+            "storage.class.std.rust",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "support.type.vb",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "constant.other.reference",
+            "source.graphql support.type",
+            "source.reason support.type string",
+            "entity.name.type.fsharp",
+            "source.elm storage.type",
+            "storage.type.user-defined",
+            "storage.type.built-in",
+            "support.type.builtin",
+            "source.swift support.type",
+            "support.class.crystal",
+            "storage.type.integral",
+            "source.cpp storage.type.cpp",
+            "source.vala storage.type",
+            "source.hlsl storage.type.basic",
+            "source.hlsl support.type.other",
+            "source.apex storage.type",
+            "source.nim storage.type",
+            "source.cpp entity.name.type",
+            "support.class.builtin",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "markup.raw.monospace",
+            "markup.mark",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric"
+         ],
+         "settings": {
+            "foreground": "#d67e5c"
+         }
+      },
+      {
+         "name": "CONSTANT",
+         "scope": [
+            "constant",
+            "variable.other.constant",
+            "support.constant",
+            "punctuation.definition.entity",
+            "constant.character.entity",
+            "support.variable.magic",
+            "markup.quote",
+            "entity.name.type.type-parameter.cs",
+            "punctuation.bracket.angle",
+            "entity.name.function.preprocessor.c",
+            "storage.type.scala",
+            "entity.helper.apacheconf",
+            "variable.language.crystal",
+            "punctuation.definition.constant",
+            "support.constant punctuation.definition.variable",
+            "constant.character.math",
+            "support.class.math",
+            "source.graphql constant.character",
+            "source.reason constant.language.list",
+            "source.cpp variable.other.enummember",
+            "support.variable.class.hideshow",
+            "entity.other.attribute-name.class",
+            "meta.attribute.id entity.other.attribute-name",
+            "text.html entity.other.attribute-name",
+            "meta.tag.attributes entity.other.attribute-name",
+            "text.xml entity.other.attribute-name",
+            "source.cs entity.other.attribute-name",
+            "constant.character.format.placeholder",
+            "constant.other.placeholder",
+            "source.vue entity.other.attribute-name",
+            "entity.other.attribute-name.mjml",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "meta.definition.attribute-entry punctuation.separator"
+         ],
+         "settings": {
+            "foreground": "#d5971a"
+         }
+      },
+      {
+         "name": "TAG",
+         "scope": [
+            "variable.language",
+            "variable.parameter.function.language.special",
+            "punctuation.definition.italic",
+            "punctuation.definition.bold",
+            "entity.name.tag",
+            "variable.language punctuation.definition.variable",
+            "keyword.control.clojure",
+            "support.type.exception.python",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "keyword.other.var.cs",
+            "storage.modifier.super",
+            "source.go keyword",
+            "keyword.function.go",
+            "meta.separator",
+            "keyword.other.fn.rust",
+            "storage.modifier.static.rust",
+            "source.r meta.function.r keyword.control.r",
+            "storage.type.def",
+            "meta.class.identifier storage.modifier",
+            "source.scala keyword.declaration",
+            "storage.type",
+            "comment.block.documentation punctuation.definition.block.tag",
+            "comment.block.documentation punctuation.definition.inline.tag",
+            "entity.tag.apacheconf",
+            "keyword.other.julia",
+            "source.julia storage.modifier",
+            "constant.language.empty-list.haskell",
+            "meta.function.powershell storage.type.powershell",
+            "keyword.control.fun",
+            "punctuation.terminator.function",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml storage.type markup.underline",
+            "binding.fsharp keyword",
+            "function.anonymous keyword",
+            "function.anonymous keyword.symbol.fsharp",
+            "meta.embedded.block variable.language punctuation.definition.variable.php",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other.class",
+            "source.wsd keyword.other.linebegin",
+            "keyword.other.skinparam.keyword",
+            "keyword.other.nim",
+            "markup.deleted.diff",
+            "source.tf support.class.variable",
+            "meta.function.lua keyword.control.lua",
+            "markup.block entity.name.tag",
+            "markup.meta.attribute-list",
+            "source.zig keyword.default",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "foreground": "#e66533"
+         }
+      },
+      {
+         "name": "STRING",
+         "scope": [
+            "string",
+            "punctuation.definition.string",
+            "source.css support.constant",
+            "entity.name.import.go",
+            "markup.raw.texttt",
+            "markup.inserted.diff",
+            "source.scala punctuation.definition.character",
+            "constant.character.literal.scala",
+            "source.tf entity.name"
+         ],
+         "settings": {
+            "foreground": "#49e9a6"
+         }
+      },
+      {
+         "name": "STRINGINTERPOLATED",
+         "scope": [
+            "string.template",
+            "punctuation.definition.string.template",
+            "string.interpolated.python string.quoted.single.python",
+            "string.quoted.double.heredoc",
+            "string.quoted.interpolated.vala",
+            "string.quoted.interpolated.vala punctuation.definition.string",
+            "string.regexp.apacheconf",
+            "markup.inline.raw.string",
+            "markup.inline.raw punctuation.definition.raw",
+            "string.quoted.double.interpolated.crystal",
+            "string.quoted.double.interpolated.crystal punctuation.definition.string",
+            "text.tex markup.raw"
+         ],
+         "settings": {
+            "foreground": "#16b673"
+         }
+      },
+      {
+         "name": "NUMBER",
+         "scope": [
+            "constant.numeric",
+            "constant.language",
+            "punctuation.separator.decimal.period.php",
+            "keyword.operator.null-conditional.cs",
+            "punctuation.separator.question-mark.cs",
+            "constant.integer.apacheconf",
+            "keyword.operator.nullable-type",
+            "constant.language punctuation.definition.variable",
+            "constant.others.fsharp",
+            "keyword.other.unit",
+            "string.quoted.double.skinparam.value",
+            "source.toml constant",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "foreground": "#7060eb"
+         }
+      },
+      {
+         "name": "FUNCTION",
+         "scope": [
+            "variable.function",
+            "support.type.property-name",
+            "entity.name.function",
+            "string.other.link",
+            "markup.link",
+            "support.type.vendored",
+            "support.other.variable",
+            "meta.function-call.generic.python",
+            "meta.method-call.groovy meta.method.groovy",
+            "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+            "punctuation.definition.decorator",
+            "support.function.any-method",
+            "text.tex support.function",
+            "text.tex punctuation.definition.function",
+            "entity.name.section.fsharp entity.name.section.fsharp",
+            "support.variable.class.function",
+            "keyword.control.cucumber.table",
+            "punctuation.decorator",
+            "source.tf support.class"
+         ],
+         "settings": {
+            "foreground": "#16a3b6"
+         }
+      },
+      {
+         "name": "SUPPORT",
+         "scope": [
+            "entity.name",
+            "entity.other",
+            "support.orther.namespace.use.php",
+            "meta.use.php",
+            "support.other.namespace.php",
+            "support.type",
+            "support.class",
+            "punctuation.definition.parameters",
+            "support.function",
+            "support.function.construct",
+            "markup.changed.git_gutter",
+            "markup.underline.link",
+            "markup.underline.link.image",
+            "markup.underline",
+            "meta.symbol.namespace.clojure",
+            "entity.mime-type.apacheconf",
+            "keyword.operator.function.infix",
+            "entity.name.function.infix",
+            "entity.name.function.call.kotlin",
+            "text.tex support.function.verb",
+            "text.tex support.function.texttt",
+            "source.reason constant.language.unit",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "constant.language.unit.fsharp",
+            "source.wsd support.class.preprocessings",
+            "keyword.language.gherkin.feature.scenario",
+            "source.nim keyword.other.common.function",
+            "entity.name.type.namespace",
+            "entity.name.scope-resolution.function.call"
+         ],
+         "settings": {
+            "foreground": "#49d6e9"
+         }
+      },
+      {
+         "name": "MISC",
+         "scope": [
+            "source.js constant.other.object.key.js string.unquoted.label.js",
+            "source.js punctuation.section.embedded",
+            "punctuation.definition.template-expression",
+            "support.class",
+            "storage.type.string.python",
+            "string.interpolated.pug",
+            "support.constant.handlebars",
+            "source.clojure punctuation.section.set",
+            "source.clojure punctuation.section.metadata",
+            "entity.global.clojure",
+            "source.python meta.function-call.python support.type.python",
+            "entity.other.inherited-class.python",
+            "punctuation.definition.interpolation",
+            "punctuation.section.embedded.begin.ruby",
+            "punctuation.section.embedded.end.ruby source.ruby",
+            "support.constant.math",
+            "entity.namespace.r",
+            "meta.method-call.groovy storage.type.groovy",
+            "source.scala entity.name.class.declaration",
+            "constant.character.escape",
+            "support.function.macro.julia",
+            "string.replacement.apacheconf",
+            "storage.modifier.using.vala",
+            "constant.other.haskell",
+            "source.objc entity.name.tag",
+            "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+            "meta.embedded.line.crystal punctuation.section.embedded",
+            "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+            "punctuation.section.embedded",
+            "punctuation.section.tag",
+            "punctuation.section.embedded source.swift",
+            "variable.other.bracket punctuation.definition.variable",
+            "string.interpolated.dollar punctuation.definition.string",
+            "constant.character.escape punctuation.definition.keyword",
+            "source.ocaml entity.name.class constant.numeric",
+            "source.reason entity.name.class",
+            "keyword.format.specifier.fsharp",
+            "support.module.elm",
+            "meta.embedded.block.php punctuation.definition.variable.php",
+            "source.vala storage.type",
+            "support.variable.class.group",
+            "entity.name.type.class",
+            "source.tf meta.keyword.list",
+            "source.tf meta.keyword.map",
+            "entity.name.class.lua",
+            "markup.substitution"
+         ],
+         "settings": {
+            "foreground": "#49ace9"
+         }
+      },
+      {
+         "name": "INVALID",
+         "scope": [
+            "invalid",
+            "invalid.illegal"
+         ],
+         "settings": {
+            "foreground": "#e3541c"
+         }
+      },
+      {
+         "name": "ITALIC",
+         "scope": [
+            "comment",
+            "storage.modifier",
+            "punctuation.definition.comment",
+            "entity.other",
+            "variable.language",
+            "support.type.vendored",
+            "support.constant.vendored",
+            "markup.quote",
+            "markup.italic",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "keyword.control.clojure",
+            "source.clojure meta.symbol.dynamic",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "variable.other.member.c",
+            "support.type.core.rust",
+            "variable.other.object.property",
+            "variable.other.property",
+            "source.r meta.function.r keyword.control.r",
+            "comment.line.roxygen.r keyword",
+            "comment.line.roxygen.r variable.parameter.r",
+            "keyword.control.inheritance.coffee",
+            "comment.block.documentation.phpdoc.php keyword",
+            "keyword.other.array.phpdoc.php",
+            "storage.type.modifier",
+            "comment.block.javadoc.java keyword",
+            "comment.block.javadoc.java variable.parameter.java",
+            "keyword.operator.documentation.powershell",
+            "storage.type.scala",
+            "variable.parameter.function.language.special",
+            "comment.block.documentation.scala keyword",
+            "comment.block.documentation.scala variable.parameter",
+            "support.function.builtin.go",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.ruby",
+            "source.vala storage.type.generic",
+            "constant.other.table-name",
+            "constant.other.placeholder",
+            "variable.other.field",
+            "entity.alias.import.go",
+            "source.swift keyword.other.declaration-specifier",
+            "support.variable.swift",
+            "keyword.other.capture-specifier",
+            "text.tex support.function.emph",
+            "constant.other.math",
+            "support.function.textit",
+            "entity.name.footnote",
+            "entity.name.function.directive.graphql",
+            "source.graphql support.type.enum",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "abstract.definition.fsharp keyword",
+            "abstract.definition.fsharp entity",
+            "function.anonymous keyword",
+            "entity.name.record.field.accessor.elm",
+            "support.type.primitive",
+            "support.type.builtin",
+            "keyword.type.cs",
+            "storage.type.built-in",
+            "storage.type.primitive",
+            "source.python support.type.python",
+            "storage.type.core.rust",
+            "source.swift support.type",
+            "source.go storage.type",
+            "storage.type.php",
+            "storage.type.function.kotlin",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "variable.other.member",
+            "keyword.other.import",
+            "keyword.package",
+            "keyword.import",
+            "source.wsd keyword.control.diagram",
+            "keyword.language.gherkin.feature.step",
+            "source.hlsl storage.type.basic",
+            "source.apex keyword.type",
+            "sharing.modifier",
+            "source.nim storage.type.concrete",
+            "meta.preprocessor.pragma.nim",
+            "storage.type.integral",
+            "entity.name.scope-resolution.function.call",
+            "support.class.builtin",
+            "comment.block.documentation storage.type.class",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "meta.import keyword.control",
+            "keyword.control.export",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "keyword.local.lua",
+            "markup.mark.constrained markup.mark",
+            "markup.block.open",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric",
+            "source.zig keyword.type",
+            "source.zig keyword.storage",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "fontStyle": "italic"
+         }
+      },
+      {
+         "name": "BOLD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.operator",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.type.function.arrow",
+            "constant.other.color",
+            "punctuation.accessor",
+            "entity.name.section",
+            "markdown.heading",
+            "markup.inline.raw punctuation.definition.raw",
+            "markup.heading",
+            "storage.type.function.pug",
+            "storage.type.function.python",
+            "storage.type.annotation",
+            "punctuation.bracket.angle",
+            "keyword.other.new",
+            "storage.type.generic.wildcard",
+            "source.go keyword.operator",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "variable.parameter",
+            "support.function.builtin.rust",
+            "storage.type.function.coffee",
+            "entity.name.variable.parameter",
+            "punctuation.separator.hash.cs",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "meta.function.parameters variable.other",
+            "entity.name.type.annotation.kotlin",
+            "storage.type.objc",
+            "parameter.variable.function",
+            "markup punctuation.definition",
+            "punctuation.section.directive",
+            "punctuation.definition.preprocessor",
+            "source.ruby punctuation.definition.variable",
+            "support.function.textbf",
+            "source.graphql support.type.builtin",
+            "source.ocaml variable.interpolation string",
+            "entity.name.function.definition.special.constructor",
+            "entity.name.function.definition.special.member.destructor.",
+            "meta.function.parameters variable punctuation.definition.variable.php",
+            "source.wsd keyword.other.activity",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby",
+            "keyword.function.go",
+            "keyword.other.fn.rust",
+            "markup.other.anchor",
+            "markup.list.bullet",
+            "markup.list punctuation.definition",
+            "keyword.control.default",
+            "punctuation.section",
+            "punctuation.separator",
+            "punctuation.terminator",
+            "markup.bold.markdown",
+            "source.zig storage.type.function"
+         ],
+         "settings": {
+            "fontStyle": "bold"
+         }
+      },
+      {
+         "name": "BOLD-ITALIC",
+         "scope": [
+            "markup.quote markup.bold",
+            "text.html punctuation.section.embedded",
+            "variable.other.c",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "source.rust meta.attribute.rust",
+            "meta.attribute.id entity.other.attribute-name",
+            "source.ocaml punctuation.definition.tag emphasis",
+            "source.tf entity.name",
+            "markup.quote punctuation.definition",
+            "markup.fenced_code punctuation.definition",
+            "fenced_code.block.language"
+         ],
+         "settings": {
+            "fontStyle": "bold italic"
+         }
+      },
+      {
+         "name": "NORMAL",
+         "scope": [
+            "keyword.begin.tag.ejs",
+            "source.python meta.function.decorator.python support.type.python",
+            "source.cs keyword.other",
+            "keyword.other.var.cs",
+            "source.go keyword",
+            "storage.modifier.static.rust",
+            "variable.parameter.r",
+            "variable.parameter.handlebars",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "meta.class.identifier storage.modifier",
+            "keyword.operator.other.powershell",
+            "source.css variable.parameter",
+            "string.interpolated variable.parameter",
+            "source.apacheconf keyword",
+            "keyword.other.julia",
+            "storage.modifier.using.vala",
+            "source.objc keyword.other.property.attribute",
+            "source.sql keyword.other",
+            "keyword.other.using.vala",
+            "keyword.operator.function.infix",
+            "keyword.control.directive",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "entity.name.function.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "punctuation.definition.variable",
+            "entity.name.section.latex",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "keyword.format.specifier.fsharp",
+            "entity.name.section.fsharp",
+            "binding.fsharp keyword",
+            "binding.fsharp keyword.symbol",
+            "record.fsharp keyword",
+            "keyword.symbol.fsharp",
+            "entity.name.section.fsharp keyword",
+            "namespace.open.fsharp keyword",
+            "namespace.open.fsharp entity",
+            "storage.type",
+            "source.cpp keyword.other",
+            "source.c keyword.other",
+            "keyword.other.unit",
+            "storage.modifier.array.bracket",
+            "meta.import.haskell keyword",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other",
+            "keyword.other.skinparam",
+            "source.css keyword.control",
+            "source.css keyword.operator",
+            "keyword.language.gherkin.feature.scenario",
+            "keyword.control.cucumber.table",
+            "source.toml entity.other.attribute-name",
+            "source.toml keyword",
+            "keyword.other.nim",
+            "source.nim keyword.other.common.function",
+            "source.nim keyword.other",
+            "source.scala keyword.declaration",
+            "source.scala entity.name.class.declaration",
+            "keyword.control.lua",
+            "source.css punctuation.section",
+            "punctuation.section.embedded",
+            "source.c punctuation.section",
+            "source.cpp punctuation.section",
+            "source.java punctuation.section",
+            "source.php punctuation.section",
+            "source.powershell punctuation.section",
+            "source.r punctuation.section",
+            "source.ruby punctuation.section",
+            "source.swift punctuation.section",
+            "source.objc punctuation.section",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.default",
+            "source.zig keyword.statement",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "fontStyle": ""
+         }
+      },
+      {
+         "name": "STRIKETHROUGH",
+         "scope": [
+            "markup.strikethrough"
+         ],
+         "settings": {
+            "fontStyle": "strikethrough"
+         }
+      }
+   ]
+}

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

@@ -0,0 +1,1112 @@
+{
+   "name": "Noctis Bordo",
+   "type": "dark",
+   "colors": {
+      "selection.background": "#88445cbb",
+      "descriptionForeground": "#bb778f",
+      "errorForeground": "#e34e1c",
+      "widget.shadow": "#00000044",
+      "editor.background": "#322a2d",
+      "editor.foreground": "#cbbec2",
+      "editorLineNumber.foreground": "#715b63",
+      "editorLineNumber.activeForeground": "#bb778f",
+      "editorCursor.foreground": "#ffb3cd",
+      "badge.background": "#f18eb0",
+      "badge.foreground": "#1f191b",
+      "activityBar.background": "#322a2d",
+      "activityBar.dropBackground": "#bb778f65",
+      "activityBar.border": "#1f191b",
+      "activityBar.foreground": "#997582",
+      "activityBar.inactiveForeground": "#99758277",
+      "activityBarBadge.background": "#f18eb0",
+      "activityBarBadge.foreground": "#1f191b",
+      "activityBar.activeBackground": "#f18eb033",
+      "activityBar.activeBorder": "#f18eb0",
+      "sideBar.background": "#2c2528",
+      "sideBar.dropBackground": "#2c2528",
+      "sideBar.border": "#1f191b",
+      "sideBar.foreground": "#bbaab0",
+      "sideBarSectionHeader.background": "#413036",
+      "sideBarSectionHeader.foreground": "#bbaab0",
+      "sideBarTitle.foreground": "#bbaab0",
+      "sideBarSectionHeader.border": "#1f191b",
+      "statusBar.foreground": "#997582",
+      "statusBar.background": "#322a2d",
+      "statusBar.border": "#1f191b",
+      "statusBar.debuggingBackground": "#322a2d",
+      "statusBar.debuggingForeground": "#ff80ac50",
+      "statusBar.debuggingBorder": "#ff80acaf",
+      "statusBar.noFolderForeground": "#a48e96",
+      "statusBar.noFolderBackground": "#322a2d",
+      "statusBar.noFolderBorder": "#322a2d",
+      "statusBarItem.activeBackground": "#8f566a77",
+      "statusBarItem.hoverBackground": "#8f566a33",
+      "statusBarItem.prominentBackground": "#272022",
+      "statusBarItem.prominentHoverBackground": "#43142488",
+      "button.background": "#007f99",
+      "button.foreground": "#edebff",
+      "button.hoverBackground": "#0ac",
+      "dropdown.background": "#413036",
+      "dropdown.border": "#413036",
+      "dropdown.foreground": "#bb778f",
+      "editorMarkerNavigation.background": "#5f3a4729",
+      "editorMarkerNavigationError.background": "#e34e1c",
+      "editorMarkerNavigationWarning.background": "#e69533",
+      "editorError.border": "#322a2d",
+      "editorError.foreground": "#e34e1c",
+      "editorWarning.border": "#322a2d",
+      "editorWarning.foreground": "#e69533",
+      "editorInfo.border": "#322a2d",
+      "editorInfo.foreground": "#40d4e7",
+      "editorHint.border": "#49e9a600",
+      "editorHint.foreground": "#49e9a6",
+      "editorGroup.emptyBackground": "#715b6333",
+      "editorGroup.border": "#1f191b",
+      "editorGroup.dropBackground": "#715b6333",
+      "editorGroupHeader.noTabsBackground": "#413036",
+      "editorGroupHeader.tabsBackground": "#413036",
+      "editorGroupHeader.tabsBorder": "#413036",
+      "tab.activeBackground": "#322a2d",
+      "tab.unfocusedActiveBackground": "#38232b",
+      "tab.activeForeground": "#f18eb0",
+      "tab.border": "#1f191b",
+      "tab.inactiveBackground": "#413036",
+      "tab.inactiveForeground": "#bbaab0",
+      "tab.unfocusedActiveForeground": "#bbaab0",
+      "tab.unfocusedInactiveForeground": "#bbaab0",
+      "tab.activeBorderTop": "#f18eb0",
+      "tab.activeModifiedBorder": "#49e9a6",
+      "tab.activeBorder": "#322a2d",
+      "tab.unfocusedActiveBorder": "#322a2d",
+      "tab.unfocusedHoverBackground": "#f18eb021",
+      "textBlockQuote.background": "#322a2d",
+      "textBlockQuote.border": "#997582",
+      "textCodeBlock.background": "#322a2d",
+      "textLink.activeForeground": "#f18eb0",
+      "textLink.foreground": "#f18eb0",
+      "textPreformat.foreground": "#ffc180",
+      "textSeparator.foreground": "#322a2d",
+      "walkThrough.embeddedEditorBackground": "#322a2d",
+      "welcomePage.buttonBackground": "#272022",
+      "welcomePage.buttonHoverBackground": "#413036",
+      "input.background": "#272022",
+      "input.border": "#412a32",
+      "input.foreground": "#ddd5d7",
+      "input.placeholderForeground": "#a48e96",
+      "inputOption.activeBorder": "#997582",
+      "inputValidation.errorForeground": "#ff4000",
+      "inputValidation.errorBackground": "#501502ee",
+      "inputValidation.errorBorder": "#691c02",
+      "inputValidation.infoForeground": "#40d4e7",
+      "inputValidation.infoBackground": "#0f6e7bee",
+      "inputValidation.infoBorder": "#148f9f",
+      "inputValidation.warningForeground": "#e69533",
+      "inputValidation.warningBackground": "#82694acc",
+      "inputValidation.warningBorder": "#a88457",
+      "editorWidget.background": "#413036",
+      "editorWidget.border": "#1f191b",
+      "editorHoverWidget.background": "#3e2e33",
+      "editorHoverWidget.border": "#1f191b",
+      "editorSuggestWidget.background": "#3e2e33",
+      "editorSuggestWidget.border": "#1f191b",
+      "editorSuggestWidget.foreground": "#bbaab0",
+      "editorSuggestWidget.highlightForeground": "#f18eb0",
+      "editorSuggestWidget.selectedBackground": "#563440",
+      "editorGutter.background": "#322a2d",
+      "editorGutter.addedBackground": "#8ce99a",
+      "editorGutter.deletedBackground": "#e34e1c",
+      "editorGutter.modifiedBackground": "#ffc180",
+      "editor.selectionBackground": "#99758255",
+      "editor.selectionHighlightBackground": "#7f536299",
+      "editor.inactiveSelectionBackground": "#99758233",
+      "editor.wordHighlightStrongBackground": "#cc990033",
+      "editor.wordHighlightBackground": "#e4b78133",
+      "editor.findMatchBackground": "#40bf6a11",
+      "editor.findMatchHighlightBackground": "#0e667179",
+      "editor.findRangeHighlightBackground": "#49e9a622",
+      "editor.hoverHighlightBackground": "#9975823f",
+      "editor.lineHighlightBackground": "#453138aa",
+      "editor.lineHighlightBorder": "#45313899",
+      "editor.rangeHighlightBackground": "#49d6e922",
+      "editorLink.activeForeground": "#14a5ff",
+      "editorWhitespace.foreground": "#ffccde21",
+      "editorIndentGuide.background": "#48373d",
+      "editorIndentGuide.activeBackground": "#7f5362",
+      "editorBracketMatch.background": "#99758222",
+      "editorBracketMatch.border": "#997582",
+      "editorRuler.foreground": "#593a46",
+      "editorCodeLens.foreground": "#776284",
+      "terminal.ansiBlack": "#47393e",
+      "terminal.ansiRed": "#e66533",
+      "terminal.ansiGreen": "#49e9a6",
+      "terminal.ansiYellow": "#e4b781",
+      "terminal.ansiBlue": "#49ace9",
+      "terminal.ansiMagenta": "#df769b",
+      "terminal.ansiCyan": "#49d6e9",
+      "terminal.ansiWhite": "#b9acb0",
+      "terminal.ansiBrightBlack": "#69545b",
+      "terminal.ansiBrightRed": "#e97749",
+      "terminal.ansiBrightGreen": "#60ebb1",
+      "terminal.ansiBrightYellow": "#e69533",
+      "terminal.ansiBrightBlue": "#60b6eb",
+      "terminal.ansiBrightMagenta": "#e798b3",
+      "terminal.ansiBrightCyan": "#60dbeb",
+      "terminal.ansiBrightWhite": "#cbbec2",
+      "terminal.background": "#272022",
+      "terminal.foreground": "#cbbec2",
+      "terminalCursor.background": "#272022",
+      "terminalCursor.foreground": "#cbbec2",
+      "merge.border": "#322a2d00",
+      "merge.currentContentBackground": "#85f1ff22",
+      "merge.currentHeaderBackground": "#85f1ff44",
+      "merge.incomingContentBackground": "#9d92f222",
+      "merge.incomingHeaderBackground": "#9d92f244",
+      "merge.commonContentBackground": "#ffc18022",
+      "merge.commonHeaderBackground": "#ffc18044",
+      "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+      "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+      "editorOverviewRuler.commonContentForeground": "#ffc18044",
+      "editorOverviewRuler.border": "#322a2d",
+      "notificationCenter.border": "#413036",
+      "notificationCenterHeader.foreground": "#a48e96",
+      "notificationCenterHeader.background": "#413036",
+      "notificationToast.border": "#413036",
+      "notifications.foreground": "#ddd5d7",
+      "notifications.background": "#413036",
+      "notifications.border": "#413036",
+      "notificationLink.foreground": "#a48e96",
+      "diffEditor.insertedTextBackground": "#16b67327",
+      "diffEditor.removedTextBackground": "#e6653341",
+      "debugToolBar.background": "#322a2d",
+      "debugExceptionWidget.background": "#322a2d",
+      "debugExceptionWidget.border": "#997582",
+      "extensionButton.prominentBackground": "#008c99",
+      "extensionButton.prominentForeground": "#e4e2f9",
+      "extensionButton.prominentHoverBackground": "#00bbcc",
+      "focusBorder": "#413036",
+      "foreground": "#cbbec2",
+      "panel.background": "#272022",
+      "panel.border": "#997582",
+      "panelTitle.activeBorder": "#997582",
+      "panelTitle.activeForeground": "#f18eb0",
+      "panelTitle.inactiveForeground": "#936c7a",
+      "peekView.border": "#997582",
+      "peekViewEditor.background": "#2c2125",
+      "peekViewEditor.matchHighlightBackground": "#88445c55",
+      "peekViewEditorGutter.background": "#2c2125",
+      "peekViewResult.background": "#322529",
+      "peekViewResult.fileForeground": "#ffc180",
+      "peekViewResult.lineForeground": "#a48e96",
+      "peekViewResult.matchHighlightBackground": "#47393e",
+      "peekViewResult.selectionBackground": "#47393e",
+      "peekViewResult.selectionForeground": "#a48e96",
+      "peekViewTitle.background": "#322529",
+      "peekViewTitleDescription.foreground": "#a48e96",
+      "peekViewTitleLabel.foreground": "#ffc180",
+      "progressBar.background": "#f18eb0",
+      "scrollbar.shadow": "#00000044",
+      "scrollbarSlider.activeBackground": "#eb609155",
+      "scrollbarSlider.background": "#eb609133",
+      "scrollbarSlider.hoverBackground": "#eb609144",
+      "gitDecoration.addedResourceForeground": "#16b673",
+      "gitDecoration.modifiedResourceForeground": "#49e9a6",
+      "gitDecoration.deletedResourceForeground": "#e34e1c",
+      "gitDecoration.untrackedResourceForeground": "#40d4e7",
+      "gitDecoration.ignoredResourceForeground": "#5b788b",
+      "gitDecoration.conflictingResourceForeground": "#ffc180",
+      "pickerGroup.border": "#997582",
+      "pickerGroup.foreground": "#f18eb0",
+      "list.activeSelectionBackground": "#5c2e3e99",
+      "list.activeSelectionForeground": "#edebff",
+      "list.dropBackground": "#38292e",
+      "list.focusBackground": "#824a5e66",
+      "list.focusForeground": "#edebff",
+      "list.highlightForeground": "#f18eb0",
+      "list.hoverBackground": "#533641",
+      "list.hoverForeground": "#edebff",
+      "list.inactiveFocusBackground": "#2c2528",
+      "list.inactiveSelectionBackground": "#3b2b31",
+      "list.inactiveSelectionForeground": "#cbbec2",
+      "list.errorForeground": "#e34e1c",
+      "list.warningForeground": "#ffa857",
+      "listFilterWidget.background": "#202040",
+      "listFilterWidget.outline": "#49e9a6",
+      "listFilterWidget.noMatchesOutline": "#e34e1c",
+      "tree.indentGuidesStroke": "#715b63",
+      "settings.headerForeground": "#cbbec2",
+      "settings.modifiedItemIndicator": "#15ac31",
+      "settings.dropdownListBorder": "#824a5e77",
+      "settings.dropdownBackground": "#413036",
+      "settings.dropdownForeground": "#0ac",
+      "settings.dropdownBorder": "#413036",
+      "settings.checkboxBackground": "#413036",
+      "settings.checkboxForeground": "#0ac",
+      "settings.checkboxBorder": "#413036",
+      "settings.textInputBackground": "#413036",
+      "settings.textInputForeground": "#0ac",
+      "settings.textInputBorder": "#413036",
+      "settings.numberInputBackground": "#272022",
+      "settings.numberInputForeground": "#7060eb",
+      "settings.numberInputBorder": "#272022",
+      "breadcrumb.foreground": "#bbaab0",
+      "breadcrumb.background": "#322a2d",
+      "breadcrumb.focusForeground": "#f18eb0",
+      "breadcrumb.activeSelectionForeground": "#edebff",
+      "breadcrumbPicker.background": "#413036",
+      "titleBar.activeBackground": "#322a2d",
+      "titleBar.activeForeground": "#cbbec2",
+      "titleBar.inactiveBackground": "#322a2d",
+      "titleBar.inactiveForeground": "#bbaab0",
+      "menu.background": "#413036",
+      "menu.foreground": "#bbaab0",
+      "menu.selectionBackground": "#824a5e66",
+      "menu.selectionForeground": "#f18eb0",
+      "menu.selectionBorder": "#824a5e66",
+      "menu.separatorBackground": "#f18eb0",
+      "menubar.selectionBackground": "#824a5e66",
+      "menubar.selectionForeground": "#f18eb0",
+      "menubar.selectionBorder": "#824a5e66",
+      "editor.snippetTabstopHighlightBackground": "#272022",
+      "editor.snippetTabstopHighlightBorder": "#2c2528",
+      "editor.snippetFinalTabstopHighlightBackground": "#272022",
+      "editor.snippetFinalTabstopHighlightBorder": "#2c2528",
+      "minimap.findMatchHighlight": "#f18eb0ee",
+      "minimap.errorHighlight": "#e34e1cee",
+      "minimap.warningHighlight": "#e69533ee",
+      "minimapGutter.addedBackground": "#16b673",
+      "minimapGutter.modifiedBackground": "#49e9a6",
+      "minimapGutter.deletedBackground": "#e34e1c",
+      "minimap.background": "#322a2d99"
+   },
+   "tokenColors": [
+      {
+         "name": "COMMENT",
+         "scope": [
+            "comment",
+            "punctuation.definition.comment",
+            "punctuation.definition.tag",
+            "comment.block.documentation punctuation.definition.bracket",
+            "source.ocaml comment constant.regexp meta.separator",
+            "markup.other.anchor support.constant",
+            "markup.fenced_code",
+            "markup.fenced_code punctuation.definition",
+            "punctuation.definition.heading",
+            "punctuation.definition.bold.markdown",
+            "punctuation.definition.italic.markdown",
+            "punctuation.definition.strikethrough.markdown"
+         ],
+         "settings": {
+            "foreground": "#8b747c"
+         }
+      },
+      {
+         "name": "TEXT",
+         "scope": [
+            "constant.character",
+            "constant.escape",
+            "text.html.markdown",
+            "punctuation.definition.list_item",
+            "keyword.begin.tag.ejs",
+            "constant.name.attribute.tag.pug",
+            "source.clojure meta.symbol",
+            "constant.other.description.jsdoc",
+            "keyword.other.array.phpdoc.php",
+            "keyword.operator.other.powershell",
+            "meta.link.inline punctuation.definition.string",
+            "source.sql",
+            "source meta.brace",
+            "source punctuation",
+            "text.html punctuation",
+            "markup meta punctuation.definition",
+            "meta.bracket.julia",
+            "meta.array.julia",
+            "entity.name.footnote",
+            "source.ocaml punctuation.definition.tag",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "entity.other.attribute-name strong",
+            "binding.fsharp keyword.symbol.fsharp",
+            "entity.name.record.field.elm",
+            "entity.name.record.field.accessor.elm",
+            "storage.modifier.array.bracket",
+            "source.css entity.other",
+            "meta.attribute-selector punctuation.definition.entity",
+            "markup.other.anchor string",
+            "punctuation.separator",
+            "punctuation.section",
+            "punctuation.terminator"
+         ],
+         "settings": {
+            "foreground": "#cbbec2"
+         }
+      },
+      {
+         "name": "KEYWORD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.modifier",
+            "meta.tag.sgml",
+            "punctuation.accessor",
+            "constant.other.color",
+            "entity.name.section",
+            "markup.heading",
+            "markup.heading punctuation.definition",
+            "entity.other.attribute-name.pseudo-class",
+            "entity.other.attribute-name.pseudo-element",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "storage.type.function.pug",
+            "text.pug storage.type",
+            "text.pug meta.tag.other",
+            "source.clojure storage.control",
+            "meta.expression.clojure",
+            "punctuation.separator.slice.python",
+            "punctuation.separator.question-mark.cs",
+            "punctuation.definition.parameters.varargs",
+            "source.go keyword.operator",
+            "punctuation.separator.pointer-access",
+            "punctuation.separator.other.ruby",
+            "keyword.package",
+            "keyword.import",
+            "punctuation.definition.keyword",
+            "punctuation.separator.hash.cs",
+            "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+            "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+            "source.kotlin storage.type.import",
+            "source.kotlin storage.type.package",
+            "constant.string.documentation.powershell",
+            "punctuation.section.directive",
+            "storage.type.rust",
+            "punctuation.definition.attribute",
+            "punctuation.definition.preprocessor",
+            "punctuation.separator.namespace",
+            "punctuation.separator.method",
+            "keyword.control punctuation.definition.function",
+            "source.ocaml variable.interpolation string",
+            "source.reason variable.interpolation",
+            "punctuation.definition.directive",
+            "storage.type.modifier",
+            "keyword.other.class.fileds",
+            "source.toml entity.other.attribute-name",
+            "source.css entity.name.tag.custom",
+            "sharing.modifier",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby"
+         ],
+         "settings": {
+            "foreground": "#df769b"
+         }
+      },
+      {
+         "name": "VARIABLE",
+         "scope": [
+            "variable",
+            "variable.object",
+            "variable.other",
+            "variable.parameter",
+            "support",
+            "entity.name.module",
+            "variable.import.parameter",
+            "variable.other.class",
+            "meta.toc-list.id.html",
+            "source.json meta.structure.dictionary.json support.type.property-name.json",
+            "meta.var.clojure",
+            "entity.name.variable",
+            "source.java meta.class.body.java",
+            "entity.name.package.go",
+            "source.c",
+            "source.cpp",
+            "source.go",
+            "source.python",
+            "meta.function-call.arguments.python",
+            "source.ruby",
+            "source.coffee.embedded.source",
+            "source.coffee",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "storage.type.annotation",
+            "punctuation.definition.annotation",
+            "source.groovy.embedded.source",
+            "punctuation.definition.variable",
+            "source.powershell",
+            "string.quoted.interpolated.vala constant.character.escape.vala",
+            "source.apacheconf",
+            "source.objc",
+            "source.crystal",
+            "string.quoted.double.kotlin entity.string.template.element.kotlin",
+            "entity.name.package.kotlin",
+            "meta.template.expression.kotlin",
+            "parameter.variable.function",
+            "variable.other.constant.elixir",
+            "source.elixir.embedded.source",
+            "source.sql.embedded",
+            "punctuation.definition.placeholder",
+            "source.swift",
+            "source.julia",
+            "source.shell",
+            "variable.other.normal punctuation.definition.variable.shell",
+            "source.reason variable.language",
+            "source.reason variable.language string.other.link",
+            "source.elm meta.value",
+            "source.elm meta.declaration.module",
+            "meta.embedded.block variable punctuation.definition.variable.php",
+            "string.quoted.double.class.other",
+            "source.toml keyword",
+            "support.type.nim",
+            "source.tf meta.template.expression",
+            "source.scala entity.name.import",
+            "markup.code",
+            "markup.fenced_code.block"
+         ],
+         "settings": {
+            "foreground": "#e4b781"
+         }
+      },
+      {
+         "name": "ANNOTATION",
+         "scope": [
+            "support.variable.property",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "entity.other.attribute-name.id",
+            "entity.other.attribute-name.id punctuation.definition.entity",
+            "entity.name.type.annotation.kotlin",
+            "support.type.primitive",
+            "meta.type.parameters entity.name.type",
+            "meta.type.annotation entity.name.type",
+            "punctuation.definition.typeparameters",
+            "source.python support.type.python",
+            "comment.block.documentation.phpdoc.php keyword.other.type.php",
+            "storage.type.php",
+            "keyword.type",
+            "storage.type.cs",
+            "storage.type.c",
+            "storage.type.objc",
+            "punctuation.definition.storage.type.objc",
+            "markup punctuation.definition",
+            "storage.type.powershell",
+            "comment.block.documentation entity.name.type",
+            "source.java storage.type",
+            "storage.type.primitive",
+            "source.groovy storage.type",
+            "storage.type.r",
+            "source.haskell storage.type",
+            "punctuation.separator.clause-head-body",
+            "source.go storage.type",
+            "storage.type.core.rust",
+            "storage.class.std.rust",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "support.type.vb",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "constant.other.reference",
+            "source.graphql support.type",
+            "source.reason support.type string",
+            "entity.name.type.fsharp",
+            "source.elm storage.type",
+            "storage.type.user-defined",
+            "storage.type.built-in",
+            "support.type.builtin",
+            "source.swift support.type",
+            "support.class.crystal",
+            "storage.type.integral",
+            "source.cpp storage.type.cpp",
+            "source.vala storage.type",
+            "source.hlsl storage.type.basic",
+            "source.hlsl support.type.other",
+            "source.apex storage.type",
+            "source.nim storage.type",
+            "source.cpp entity.name.type",
+            "support.class.builtin",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "markup.raw.monospace",
+            "markup.mark",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric"
+         ],
+         "settings": {
+            "foreground": "#d67e5c"
+         }
+      },
+      {
+         "name": "CONSTANT",
+         "scope": [
+            "constant",
+            "variable.other.constant",
+            "support.constant",
+            "punctuation.definition.entity",
+            "constant.character.entity",
+            "support.variable.magic",
+            "markup.quote",
+            "entity.name.type.type-parameter.cs",
+            "punctuation.bracket.angle",
+            "entity.name.function.preprocessor.c",
+            "storage.type.scala",
+            "entity.helper.apacheconf",
+            "variable.language.crystal",
+            "punctuation.definition.constant",
+            "support.constant punctuation.definition.variable",
+            "constant.character.math",
+            "support.class.math",
+            "source.graphql constant.character",
+            "source.reason constant.language.list",
+            "source.cpp variable.other.enummember",
+            "support.variable.class.hideshow",
+            "entity.other.attribute-name.class",
+            "meta.attribute.id entity.other.attribute-name",
+            "text.html entity.other.attribute-name",
+            "meta.tag.attributes entity.other.attribute-name",
+            "text.xml entity.other.attribute-name",
+            "source.cs entity.other.attribute-name",
+            "constant.character.format.placeholder",
+            "constant.other.placeholder",
+            "source.vue entity.other.attribute-name",
+            "entity.other.attribute-name.mjml",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "meta.definition.attribute-entry punctuation.separator"
+         ],
+         "settings": {
+            "foreground": "#d5971a"
+         }
+      },
+      {
+         "name": "TAG",
+         "scope": [
+            "variable.language",
+            "variable.parameter.function.language.special",
+            "punctuation.definition.italic",
+            "punctuation.definition.bold",
+            "entity.name.tag",
+            "variable.language punctuation.definition.variable",
+            "keyword.control.clojure",
+            "support.type.exception.python",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "keyword.other.var.cs",
+            "storage.modifier.super",
+            "source.go keyword",
+            "keyword.function.go",
+            "meta.separator",
+            "keyword.other.fn.rust",
+            "storage.modifier.static.rust",
+            "source.r meta.function.r keyword.control.r",
+            "storage.type.def",
+            "meta.class.identifier storage.modifier",
+            "source.scala keyword.declaration",
+            "storage.type",
+            "comment.block.documentation punctuation.definition.block.tag",
+            "comment.block.documentation punctuation.definition.inline.tag",
+            "entity.tag.apacheconf",
+            "keyword.other.julia",
+            "source.julia storage.modifier",
+            "constant.language.empty-list.haskell",
+            "meta.function.powershell storage.type.powershell",
+            "keyword.control.fun",
+            "punctuation.terminator.function",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml storage.type markup.underline",
+            "binding.fsharp keyword",
+            "function.anonymous keyword",
+            "function.anonymous keyword.symbol.fsharp",
+            "meta.embedded.block variable.language punctuation.definition.variable.php",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other.class",
+            "source.wsd keyword.other.linebegin",
+            "keyword.other.skinparam.keyword",
+            "keyword.other.nim",
+            "markup.deleted.diff",
+            "source.tf support.class.variable",
+            "meta.function.lua keyword.control.lua",
+            "markup.block entity.name.tag",
+            "markup.meta.attribute-list",
+            "source.zig keyword.default",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "foreground": "#e66533"
+         }
+      },
+      {
+         "name": "STRING",
+         "scope": [
+            "string",
+            "punctuation.definition.string",
+            "source.css support.constant",
+            "entity.name.import.go",
+            "markup.raw.texttt",
+            "markup.inserted.diff",
+            "source.scala punctuation.definition.character",
+            "constant.character.literal.scala",
+            "source.tf entity.name"
+         ],
+         "settings": {
+            "foreground": "#49e9a6"
+         }
+      },
+      {
+         "name": "STRINGINTERPOLATED",
+         "scope": [
+            "string.template",
+            "punctuation.definition.string.template",
+            "string.interpolated.python string.quoted.single.python",
+            "string.quoted.double.heredoc",
+            "string.quoted.interpolated.vala",
+            "string.quoted.interpolated.vala punctuation.definition.string",
+            "string.regexp.apacheconf",
+            "markup.inline.raw.string",
+            "markup.inline.raw punctuation.definition.raw",
+            "string.quoted.double.interpolated.crystal",
+            "string.quoted.double.interpolated.crystal punctuation.definition.string",
+            "text.tex markup.raw"
+         ],
+         "settings": {
+            "foreground": "#16b673"
+         }
+      },
+      {
+         "name": "NUMBER",
+         "scope": [
+            "constant.numeric",
+            "constant.language",
+            "punctuation.separator.decimal.period.php",
+            "keyword.operator.null-conditional.cs",
+            "punctuation.separator.question-mark.cs",
+            "constant.integer.apacheconf",
+            "keyword.operator.nullable-type",
+            "constant.language punctuation.definition.variable",
+            "constant.others.fsharp",
+            "keyword.other.unit",
+            "string.quoted.double.skinparam.value",
+            "source.toml constant",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "foreground": "#7060eb"
+         }
+      },
+      {
+         "name": "FUNCTION",
+         "scope": [
+            "variable.function",
+            "support.type.property-name",
+            "entity.name.function",
+            "string.other.link",
+            "markup.link",
+            "support.type.vendored",
+            "support.other.variable",
+            "meta.function-call.generic.python",
+            "meta.method-call.groovy meta.method.groovy",
+            "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+            "punctuation.definition.decorator",
+            "support.function.any-method",
+            "text.tex support.function",
+            "text.tex punctuation.definition.function",
+            "entity.name.section.fsharp entity.name.section.fsharp",
+            "support.variable.class.function",
+            "keyword.control.cucumber.table",
+            "punctuation.decorator",
+            "source.tf support.class"
+         ],
+         "settings": {
+            "foreground": "#16a3b6"
+         }
+      },
+      {
+         "name": "SUPPORT",
+         "scope": [
+            "entity.name",
+            "entity.other",
+            "support.orther.namespace.use.php",
+            "meta.use.php",
+            "support.other.namespace.php",
+            "support.type",
+            "support.class",
+            "punctuation.definition.parameters",
+            "support.function",
+            "support.function.construct",
+            "markup.changed.git_gutter",
+            "markup.underline.link",
+            "markup.underline.link.image",
+            "markup.underline",
+            "meta.symbol.namespace.clojure",
+            "entity.mime-type.apacheconf",
+            "keyword.operator.function.infix",
+            "entity.name.function.infix",
+            "entity.name.function.call.kotlin",
+            "text.tex support.function.verb",
+            "text.tex support.function.texttt",
+            "source.reason constant.language.unit",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "constant.language.unit.fsharp",
+            "source.wsd support.class.preprocessings",
+            "keyword.language.gherkin.feature.scenario",
+            "source.nim keyword.other.common.function",
+            "entity.name.type.namespace",
+            "entity.name.scope-resolution.function.call"
+         ],
+         "settings": {
+            "foreground": "#49d6e9"
+         }
+      },
+      {
+         "name": "MISC",
+         "scope": [
+            "source.js constant.other.object.key.js string.unquoted.label.js",
+            "source.js punctuation.section.embedded",
+            "punctuation.definition.template-expression",
+            "support.class",
+            "storage.type.string.python",
+            "string.interpolated.pug",
+            "support.constant.handlebars",
+            "source.clojure punctuation.section.set",
+            "source.clojure punctuation.section.metadata",
+            "entity.global.clojure",
+            "source.python meta.function-call.python support.type.python",
+            "entity.other.inherited-class.python",
+            "punctuation.definition.interpolation",
+            "punctuation.section.embedded.begin.ruby",
+            "punctuation.section.embedded.end.ruby source.ruby",
+            "support.constant.math",
+            "entity.namespace.r",
+            "meta.method-call.groovy storage.type.groovy",
+            "source.scala entity.name.class.declaration",
+            "constant.character.escape",
+            "support.function.macro.julia",
+            "string.replacement.apacheconf",
+            "storage.modifier.using.vala",
+            "constant.other.haskell",
+            "source.objc entity.name.tag",
+            "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+            "meta.embedded.line.crystal punctuation.section.embedded",
+            "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+            "punctuation.section.embedded",
+            "punctuation.section.tag",
+            "punctuation.section.embedded source.swift",
+            "variable.other.bracket punctuation.definition.variable",
+            "string.interpolated.dollar punctuation.definition.string",
+            "constant.character.escape punctuation.definition.keyword",
+            "source.ocaml entity.name.class constant.numeric",
+            "source.reason entity.name.class",
+            "keyword.format.specifier.fsharp",
+            "support.module.elm",
+            "meta.embedded.block.php punctuation.definition.variable.php",
+            "source.vala storage.type",
+            "support.variable.class.group",
+            "entity.name.type.class",
+            "source.tf meta.keyword.list",
+            "source.tf meta.keyword.map",
+            "entity.name.class.lua",
+            "markup.substitution"
+         ],
+         "settings": {
+            "foreground": "#49ace9"
+         }
+      },
+      {
+         "name": "INVALID",
+         "scope": [
+            "invalid",
+            "invalid.illegal"
+         ],
+         "settings": {
+            "foreground": "#e3541c"
+         }
+      },
+      {
+         "name": "ITALIC",
+         "scope": [
+            "comment",
+            "storage.modifier",
+            "punctuation.definition.comment",
+            "entity.other",
+            "variable.language",
+            "support.type.vendored",
+            "support.constant.vendored",
+            "markup.quote",
+            "markup.italic",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "keyword.control.clojure",
+            "source.clojure meta.symbol.dynamic",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "variable.other.member.c",
+            "support.type.core.rust",
+            "variable.other.object.property",
+            "variable.other.property",
+            "source.r meta.function.r keyword.control.r",
+            "comment.line.roxygen.r keyword",
+            "comment.line.roxygen.r variable.parameter.r",
+            "keyword.control.inheritance.coffee",
+            "comment.block.documentation.phpdoc.php keyword",
+            "keyword.other.array.phpdoc.php",
+            "storage.type.modifier",
+            "comment.block.javadoc.java keyword",
+            "comment.block.javadoc.java variable.parameter.java",
+            "keyword.operator.documentation.powershell",
+            "storage.type.scala",
+            "variable.parameter.function.language.special",
+            "comment.block.documentation.scala keyword",
+            "comment.block.documentation.scala variable.parameter",
+            "support.function.builtin.go",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.ruby",
+            "source.vala storage.type.generic",
+            "constant.other.table-name",
+            "constant.other.placeholder",
+            "variable.other.field",
+            "entity.alias.import.go",
+            "source.swift keyword.other.declaration-specifier",
+            "support.variable.swift",
+            "keyword.other.capture-specifier",
+            "text.tex support.function.emph",
+            "constant.other.math",
+            "support.function.textit",
+            "entity.name.footnote",
+            "entity.name.function.directive.graphql",
+            "source.graphql support.type.enum",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "abstract.definition.fsharp keyword",
+            "abstract.definition.fsharp entity",
+            "function.anonymous keyword",
+            "entity.name.record.field.accessor.elm",
+            "support.type.primitive",
+            "support.type.builtin",
+            "keyword.type.cs",
+            "storage.type.built-in",
+            "storage.type.primitive",
+            "source.python support.type.python",
+            "storage.type.core.rust",
+            "source.swift support.type",
+            "source.go storage.type",
+            "storage.type.php",
+            "storage.type.function.kotlin",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "variable.other.member",
+            "keyword.other.import",
+            "keyword.package",
+            "keyword.import",
+            "source.wsd keyword.control.diagram",
+            "keyword.language.gherkin.feature.step",
+            "source.hlsl storage.type.basic",
+            "source.apex keyword.type",
+            "sharing.modifier",
+            "source.nim storage.type.concrete",
+            "meta.preprocessor.pragma.nim",
+            "storage.type.integral",
+            "entity.name.scope-resolution.function.call",
+            "support.class.builtin",
+            "comment.block.documentation storage.type.class",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "meta.import keyword.control",
+            "keyword.control.export",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "keyword.local.lua",
+            "markup.mark.constrained markup.mark",
+            "markup.block.open",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric",
+            "source.zig keyword.type",
+            "source.zig keyword.storage",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "fontStyle": "italic"
+         }
+      },
+      {
+         "name": "BOLD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.operator",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.type.function.arrow",
+            "constant.other.color",
+            "punctuation.accessor",
+            "entity.name.section",
+            "markdown.heading",
+            "markup.inline.raw punctuation.definition.raw",
+            "markup.heading",
+            "storage.type.function.pug",
+            "storage.type.function.python",
+            "storage.type.annotation",
+            "punctuation.bracket.angle",
+            "keyword.other.new",
+            "storage.type.generic.wildcard",
+            "source.go keyword.operator",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "variable.parameter",
+            "support.function.builtin.rust",
+            "storage.type.function.coffee",
+            "entity.name.variable.parameter",
+            "punctuation.separator.hash.cs",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "meta.function.parameters variable.other",
+            "entity.name.type.annotation.kotlin",
+            "storage.type.objc",
+            "parameter.variable.function",
+            "markup punctuation.definition",
+            "punctuation.section.directive",
+            "punctuation.definition.preprocessor",
+            "source.ruby punctuation.definition.variable",
+            "support.function.textbf",
+            "source.graphql support.type.builtin",
+            "source.ocaml variable.interpolation string",
+            "entity.name.function.definition.special.constructor",
+            "entity.name.function.definition.special.member.destructor.",
+            "meta.function.parameters variable punctuation.definition.variable.php",
+            "source.wsd keyword.other.activity",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby",
+            "keyword.function.go",
+            "keyword.other.fn.rust",
+            "markup.other.anchor",
+            "markup.list.bullet",
+            "markup.list punctuation.definition",
+            "keyword.control.default",
+            "punctuation.section",
+            "punctuation.separator",
+            "punctuation.terminator",
+            "markup.bold.markdown",
+            "source.zig storage.type.function"
+         ],
+         "settings": {
+            "fontStyle": "bold"
+         }
+      },
+      {
+         "name": "BOLD-ITALIC",
+         "scope": [
+            "markup.quote markup.bold",
+            "text.html punctuation.section.embedded",
+            "variable.other.c",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "source.rust meta.attribute.rust",
+            "meta.attribute.id entity.other.attribute-name",
+            "source.ocaml punctuation.definition.tag emphasis",
+            "source.tf entity.name",
+            "markup.quote punctuation.definition",
+            "markup.fenced_code punctuation.definition",
+            "fenced_code.block.language"
+         ],
+         "settings": {
+            "fontStyle": "bold italic"
+         }
+      },
+      {
+         "name": "NORMAL",
+         "scope": [
+            "keyword.begin.tag.ejs",
+            "source.python meta.function.decorator.python support.type.python",
+            "source.cs keyword.other",
+            "keyword.other.var.cs",
+            "source.go keyword",
+            "storage.modifier.static.rust",
+            "variable.parameter.r",
+            "variable.parameter.handlebars",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "meta.class.identifier storage.modifier",
+            "keyword.operator.other.powershell",
+            "source.css variable.parameter",
+            "string.interpolated variable.parameter",
+            "source.apacheconf keyword",
+            "keyword.other.julia",
+            "storage.modifier.using.vala",
+            "source.objc keyword.other.property.attribute",
+            "source.sql keyword.other",
+            "keyword.other.using.vala",
+            "keyword.operator.function.infix",
+            "keyword.control.directive",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "entity.name.function.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "punctuation.definition.variable",
+            "entity.name.section.latex",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "keyword.format.specifier.fsharp",
+            "entity.name.section.fsharp",
+            "binding.fsharp keyword",
+            "binding.fsharp keyword.symbol",
+            "record.fsharp keyword",
+            "keyword.symbol.fsharp",
+            "entity.name.section.fsharp keyword",
+            "namespace.open.fsharp keyword",
+            "namespace.open.fsharp entity",
+            "storage.type",
+            "source.cpp keyword.other",
+            "source.c keyword.other",
+            "keyword.other.unit",
+            "storage.modifier.array.bracket",
+            "meta.import.haskell keyword",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other",
+            "keyword.other.skinparam",
+            "source.css keyword.control",
+            "source.css keyword.operator",
+            "keyword.language.gherkin.feature.scenario",
+            "keyword.control.cucumber.table",
+            "source.toml entity.other.attribute-name",
+            "source.toml keyword",
+            "keyword.other.nim",
+            "source.nim keyword.other.common.function",
+            "source.nim keyword.other",
+            "source.scala keyword.declaration",
+            "source.scala entity.name.class.declaration",
+            "keyword.control.lua",
+            "source.css punctuation.section",
+            "punctuation.section.embedded",
+            "source.c punctuation.section",
+            "source.cpp punctuation.section",
+            "source.java punctuation.section",
+            "source.php punctuation.section",
+            "source.powershell punctuation.section",
+            "source.r punctuation.section",
+            "source.ruby punctuation.section",
+            "source.swift punctuation.section",
+            "source.objc punctuation.section",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.default",
+            "source.zig keyword.statement",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "fontStyle": ""
+         }
+      },
+      {
+         "name": "STRIKETHROUGH",
+         "scope": [
+            "markup.strikethrough"
+         ],
+         "settings": {
+            "fontStyle": "strikethrough"
+         }
+      }
+   ]
+}

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

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

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

@@ -0,0 +1,1108 @@
+{
+    "name": "Noctis Hibernus",
+    "type": "light",
+    "colors": {
+        "selection.background": "#169fb177",
+        "descriptionForeground": "#929ea0",
+        "errorForeground": "#ff4000",
+        "widget.shadow": "#00000055",
+        "editor.background": "#f4f6f6",
+        "editor.foreground": "#005661",
+        "editorLineNumber.foreground": "#a0abac",
+        "editorLineNumber.activeForeground": "#0099ad",
+        "editorCursor.foreground": "#0092a8",
+        "badge.background": "#0099ad",
+        "badge.foreground": "#f4f6f6",
+        "activityBar.background": "#f4f6f6",
+        "activityBar.dropBackground": "#0099ad65",
+        "activityBar.foreground": "#0099ad",
+        "activityBar.border": "#ece2c600",
+        "activityBarBadge.background": "#0099ad",
+        "activityBarBadge.foreground": "#f4f6f6",
+        "activityBar.activeBackground": "#0099ad33",
+        "activityBar.activeBorder": "#0099ad",
+        "sideBar.background": "#e7f2f3",
+        "sideBar.foreground": "#71838e",
+        "sideBar.border": "#ece2c600",
+        "sideBar.dropBackground": "#e7f2f3",
+        "sideBarTitle.foreground": "#71838e",
+        "sideBarSectionHeader.background": "#c1def0",
+        "sideBarSectionHeader.foreground": "#71838e",
+        "statusBar.background": "#caedf2",
+        "statusBar.foreground": "#0099ad",
+        "statusBar.border": "#ece2c600",
+        "statusBar.debuggingBackground": "#e7f2f3",
+        "statusBar.debuggingForeground": "#e9498150",
+        "statusBar.debuggingBorder": "#e94981af",
+        "statusBar.noFolderForeground": "#87a7ab",
+        "statusBar.noFolderBackground": "#e7f2f3",
+        "statusBar.noFolderBorder": "#e7f2f3",
+        "statusBarItem.activeBackground": "#dfeff1",
+        "statusBarItem.hoverBackground": "#d1e8eb",
+        "statusBarItem.prominentBackground": "#c1d4d7",
+        "statusBarItem.prominentHoverBackground": "#bfdee3",
+        "button.background": "#099099",
+        "button.foreground": "#f1f1f1",
+        "button.hoverBackground": "#0cc",
+        "dropdown.background": "#f4f6f6",
+        "dropdown.border": "#f4f6f6",
+        "dropdown.foreground": "#005661",
+        "editorMarkerNavigation.background": "#3a3a5e29",
+        "editorMarkerNavigationError.background": "#ff4000",
+        "editorMarkerNavigationWarning.background": "#e69533",
+        "editorError.border": "#f4f6f6",
+        "editorError.foreground": "#ff4000",
+        "editorWarning.border": "#f4f6f6",
+        "editorWarning.foreground": "#e69533",
+        "editorInfo.border": "#f4f6f6",
+        "editorInfo.foreground": "#00c6e0",
+        "editorHint.border": "#58cc6d00",
+        "editorHint.foreground": "#58cc6d",
+        "editorGroup.emptyBackground": "#93b4b833",
+        "editorGroup.border": "#d0edf1",
+        "editorGroup.dropBackground": "#93b4b833",
+        "editorGroupHeader.noTabsBackground": "#caedf2",
+        "editorGroupHeader.tabsBackground": "#caedf2",
+        "editorGroupHeader.tabsBorder": "#caedf200",
+        "tab.activeBackground": "#f4f6f6",
+        "tab.unfocusedActiveBackground": "#e3f5f7",
+        "tab.activeForeground": "#0099ad",
+        "tab.border": "#b2d2e6",
+        "tab.inactiveBackground": "#caedf2",
+        "tab.inactiveForeground": "#71838e",
+        "tab.unfocusedActiveForeground": "#71838e",
+        "tab.unfocusedInactiveForeground": "#71838e",
+        "tab.activeBorderTop": "#00c6e0",
+        "tab.activeModifiedBorder": "#00b368",
+        "tab.activeBorder": "#f4f6f6",
+        "tab.unfocusedActiveBorder": "#f4f6f600",
+        "tab.unfocusedHoverBackground": "#0099ad21",
+        "textBlockQuote.background": "#e7f2f3",
+        "textBlockQuote.border": "#00899e",
+        "textCodeBlock.background": "#e7f2f3",
+        "textLink.activeForeground": "#00c6e0",
+        "textLink.foreground": "#00c6e0",
+        "textPreformat.foreground": "#e9a149",
+        "textSeparator.foreground": "#e7f2f3",
+        "walkThrough.embeddedEditorBackground": "#e7f2f3",
+        "welcomePage.buttonBackground": "#e7f2f3",
+        "welcomePage.buttonHoverBackground": "#caedf2",
+        "input.background": "#f4f6f6",
+        "input.border": "#e0eff1",
+        "input.foreground": "#6a7a7c",
+        "input.placeholderForeground": "#9fabad",
+        "inputOption.activeBorder": "#0099ad",
+        "inputValidation.errorBackground": "#ff400041",
+        "inputValidation.errorBorder": "#ff4000",
+        "inputValidation.infoBackground": "#00c6e0cc",
+        "inputValidation.infoBorder": "#00c6e0",
+        "inputValidation.warningBackground": "#ffa587cc",
+        "inputValidation.warningBorder": "#ffa487",
+        "editorWidget.background": "#e0eff1",
+        "editorWidget.border": "#ece2c600",
+        "editorHoverWidget.background": "#e0eff1",
+        "editorHoverWidget.border": "#ece2c600",
+        "editorSuggestWidget.background": "#e0eff1",
+        "editorSuggestWidget.border": "#ece2c600",
+        "editorSuggestWidget.foreground": "#6a7a7c",
+        "editorSuggestWidget.highlightForeground": "#0099ad",
+        "editorSuggestWidget.selectedBackground": "#bbe0f7",
+        "editorGutter.background": "#f4f6f6",
+        "editorGutter.addedBackground": "#8ce99a",
+        "editorGutter.deletedBackground": "#ff4000",
+        "editorGutter.modifiedBackground": "#e9a149",
+        "editor.selectionBackground": "#ade2eb77",
+        "editor.selectionHighlightBackground": "#14a5ff33",
+        "editor.selectionHighlightBorder": "#14a5ff00",
+        "editor.inactiveSelectionBackground": "#ade2eb55",
+        "editor.wordHighlightStrongBackground": "#b5890027",
+        "editor.wordHighlightStrongBorder": "#b5890000",
+        "editor.wordHighlightBackground": "#e9a14922",
+        "editor.wordHighlightBorder": "#e9a14900",
+        "editor.findMatchBackground": "#8ce99a60",
+        "editor.findMatchBorder": "#8ce99a00",
+        "editor.findMatchHighlightBackground": "#148f9f33",
+        "editor.findMatchHighlightBorder": "#148f9f00",
+        "editor.findRangeHighlightBackground": "#99e62a55",
+        "editor.findRangeHighlightBorder": "#58CC6D00",
+        "editor.hoverHighlightBackground": "#0099ad3f",
+        "editor.lineHighlightBackground": "#d1ebefcc",
+        "editor.lineHighlightBorder": "#d1ebef00",
+        "editor.rangeHighlightBackground": "#f1e9d5a1",
+        "editorLink.activeForeground": "#14a5ff",
+        "editorWhitespace.foreground": "#c1d4d7bb",
+        "editorIndentGuide.background": "#c1d4d7aa",
+        "editorIndentGuide.activeBackground": "#88bcc3",
+        "editorBracketMatch.background": "#0099ad20",
+        "editorBracketMatch.border": "#0099ad",
+        "editorRuler.foreground": "#d0edf1",
+        "editorCodeLens.foreground": "#77aaca",
+        "terminal.ansiBlack": "#003b42",
+        "terminal.ansiRed": "#e34e1c",
+        "terminal.ansiGreen": "#00b368",
+        "terminal.ansiYellow": "#f49725",
+        "terminal.ansiBlue": "#0094f0",
+        "terminal.ansiMagenta": "#ff5792",
+        "terminal.ansiCyan": "#00bdd6",
+        "terminal.ansiWhite": "#8ca6a6",
+        "terminal.ansiBrightBlack": "#004d57",
+        "terminal.ansiBrightRed": "#ff4000",
+        "terminal.ansiBrightGreen": "#00d17a",
+        "terminal.ansiBrightYellow": "#ff8c00",
+        "terminal.ansiBrightBlue": "#0fa3ff",
+        "terminal.ansiBrightMagenta": "#ff6b9f",
+        "terminal.ansiBrightCyan": "#00cbe6",
+        "terminal.ansiBrightWhite": "#bbc3c4",
+        "terminal.background": "#e1eeef",
+        "terminal.foreground": "#005661",
+        "terminalCursor.background": "#e1eeef",
+        "terminalCursor.foreground": "#005661",
+        "merge.border": "#f4f6f600",
+        "merge.currentContentBackground": "#33e7ff33",
+        "merge.currentHeaderBackground": "#33e7ff55",
+        "merge.incomingContentBackground": "#9d92f233",
+        "merge.incomingHeaderBackground": "#9d92f255",
+        "merge.commonContentBackground": "#ffc18033",
+        "merge.commonHeaderBackground": "#ffc18055",
+        "editorOverviewRuler.currentContentForeground": "#33e7ff55",
+        "editorOverviewRuler.incomingContentForeground": "#9d92f255",
+        "editorOverviewRuler.commonContentForeground": "#ffc18055",
+        "editorOverviewRuler.border": "#f4f6f6",
+        "notificationCenter.border": "#e0eff1",
+        "notificationCenterHeader.foreground": "#005661",
+        "notificationCenterHeader.background": "#e0eff1",
+        "notificationToast.border": "#e0eff1",
+        "notifications.foreground": "#005661",
+        "notifications.background": "#e0eff1",
+        "notifications.border": "#e0eff1",
+        "notificationLink.foreground": "#005661",
+        "diffEditor.insertedTextBackground": "#14b83230",
+        "diffEditor.removedTextBackground": "#BB1F0522",
+        "debugToolBar.background": "#e7f2f3",
+        "debugExceptionWidget.background": "#e7f2f3",
+        "debugExceptionWidget.border": "#00899e",
+        "extensionButton.prominentBackground": "#099099",
+        "extensionButton.prominentForeground": "#e5f5f5",
+        "extensionButton.prominentHoverBackground": "#0cc",
+        "focusBorder": "#e0eff1",
+        "foreground": "#005661",
+        "panel.background": "#e1eeef",
+        "panel.border": "#00c6e0",
+        "panelTitle.activeBorder": "#00c6e0",
+        "panelTitle.activeForeground": "#0099ad",
+        "panelTitle.inactiveForeground": "#71838e",
+        "peekView.border": "#0099ad",
+        "peekViewEditor.background": "#e5fcff",
+        "peekViewEditor.matchHighlightBackground": "#148f9f33",
+        "peekViewEditor.matchHighlightBorder": "#148f9f79",
+        "peekViewEditorGutter.background": "#e5fcff",
+        "peekViewResult.background": "#e7f2f3",
+        "peekViewResult.fileForeground": "#e9a149",
+        "peekViewResult.lineForeground": "#87a7ab",
+        "peekViewResult.matchHighlightBackground": "#e0eff1",
+        "peekViewResult.selectionBackground": "#e0eff1",
+        "peekViewResult.selectionForeground": "#6a7a7c",
+        "peekViewTitle.background": "#e7f2f3",
+        "peekViewTitleDescription.foreground": "#87a7ab",
+        "peekViewTitleLabel.foreground": "#e9a149",
+        "progressBar.background": "#00c6e0",
+        "scrollbar.shadow": "#00000055",
+        "scrollbarSlider.activeBackground": "#0099adad",
+        "scrollbarSlider.background": "#6a90955b",
+        "scrollbarSlider.hoverBackground": "#0099ad62",
+        "gitDecoration.addedResourceForeground": "#009456",
+        "gitDecoration.modifiedResourceForeground": "#14b832",
+        "gitDecoration.deletedResourceForeground": "#ff4000",
+        "gitDecoration.untrackedResourceForeground": "#00c6e0",
+        "gitDecoration.ignoredResourceForeground": "#a8a28faa",
+        "gitDecoration.conflictingResourceForeground": "#e9a149",
+        "pickerGroup.border": "#00c6e0",
+        "pickerGroup.foreground": "#0099ad",
+        "list.activeSelectionBackground": "#b6e1e7",
+        "list.activeSelectionForeground": "#005661",
+        "list.dropBackground": "#b2cacd",
+        "list.focusBackground": "#bed9ea",
+        "list.focusForeground": "#005661",
+        "list.highlightForeground": "#0099ad",
+        "list.hoverBackground": "#d1eafa",
+        "list.hoverForeground": "#005661",
+        "list.inactiveFocusBackground": "#c9eaed",
+        "list.inactiveSelectionBackground": "#c6e7ec",
+        "list.inactiveSelectionForeground": "#949384",
+        "list.errorForeground": "#c9481d",
+        "list.warningForeground": "#e07a52",
+        "listFilterWidget.background": "#d5eef1",
+        "listFilterWidget.outline": "#14b832",
+        "listFilterWidget.noMatchesOutline": "#ff4000",
+        "tree.indentGuidesStroke": "#d3cec5",
+        "settings.headerForeground": "#004d57",
+        "settings.modifiedItemIndicator": "#00bd23",
+        "settings.dropdownListBorder": "#ade2eb88",
+        "settings.dropdownBackground": "#e0eff1",
+        "settings.dropdownForeground": "#0bb",
+        "settings.dropdownBorder": "#e0eff1",
+        "settings.checkboxBackground": "#e0eff1",
+        "settings.checkboxForeground": "#0bb",
+        "settings.checkboxBorder": "#e0eff1",
+        "settings.textInputBackground": "#e0eff1",
+        "settings.textInputForeground": "#0bb",
+        "settings.textInputBorder": "#e0eff1",
+        "settings.numberInputBackground": "#d0edf1",
+        "settings.numberInputForeground": "#5842ff",
+        "settings.numberInputBorder": "#d0edf1",
+        "breadcrumb.foreground": "#71838e",
+        "breadcrumb.background": "#f4f6f6",
+        "breadcrumb.focusForeground": "#0099ad",
+        "breadcrumb.activeSelectionForeground": "#005661",
+        "breadcrumbPicker.background": "#e0eff1",
+        "titleBar.activeBackground": "#e7f2f3",
+        "titleBar.activeForeground": "#005661",
+        "titleBar.inactiveBackground": "#e7f2f3",
+        "titleBar.inactiveForeground": "#71838e",
+        "menu.background": "#e0eff1",
+        "menu.foreground": "#71838e",
+        "menu.selectionBackground": "#d1eafa",
+        "menu.selectionForeground": "#0099ad",
+        "menu.selectionBorder": "#d1eafa",
+        "menubar.selectionBackground": "#d1eafa",
+        "menubar.selectionForeground": "#0099ad",
+        "menubar.selectionBorder": "#d1eafa",
+        "editor.snippetTabstopHighlightBackground": "#abe4ed77",
+        "editor.snippetTabstopHighlightBorder": "#d6f1f5",
+        "editor.snippetFinalTabstopHighlightBackground": "#abe4ed77",
+        "editor.snippetFinalTabstopHighlightBorder": "#d6f1f5",
+        "minimap.findMatchHighlight": "#0099adaa",
+        "minimap.errorHighlight": "#ff4000ee",
+        "minimap.warningHighlight": "#e69533ee",
+        "minimapGutter.addedBackground": "#009456",
+        "minimapGutter.modifiedBackground": "#14b832",
+        "minimapGutter.deletedBackground": "#ff4000",
+        "minimap.background": "#f4f6f699"
+    },
+    "tokenColors": [
+        {
+            "name": "COMMENT",
+            "scope": [
+                "comment",
+                "punctuation.definition.comment",
+                "punctuation.definition.tag",
+                "comment.block.documentation punctuation.definition.bracket",
+                "source.ocaml comment constant.regexp meta.separator",
+                "markup.other.anchor support.constant",
+                "markup.fenced_code",
+                "markup.fenced_code punctuation.definition",
+                "punctuation.definition.heading",
+                "punctuation.definition.bold.markdown",
+                "punctuation.definition.italic.markdown",
+                "punctuation.definition.strikethrough.markdown"
+            ],
+            "settings": {
+                "foreground": "#8ca6a6"
+            }
+        },
+        {
+            "name": "TEXT",
+            "scope": [
+                "constant.character",
+                "constant.escape",
+                "text.html.markdown",
+                "punctuation.definition.list_item",
+                "keyword.begin.tag.ejs",
+                "constant.name.attribute.tag.pug",
+                "source.clojure meta.symbol",
+                "constant.other.description.jsdoc",
+                "keyword.other.array.phpdoc.php",
+                "keyword.operator.other.powershell",
+                "meta.link.inline punctuation.definition.string",
+                "source.sql",
+                "source meta.brace",
+                "source punctuation",
+                "text.html punctuation",
+                "markup meta punctuation.definition",
+                "meta.bracket.julia",
+                "meta.array.julia",
+                "entity.name.footnote",
+                "source.ocaml punctuation.definition.tag",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "entity.other.attribute-name strong",
+                "binding.fsharp keyword.symbol.fsharp",
+                "entity.name.record.field.elm",
+                "entity.name.record.field.accessor.elm",
+                "storage.modifier.array.bracket",
+                "source.css entity.other",
+                "meta.attribute-selector punctuation.definition.entity",
+                "markup.other.anchor string",
+                "punctuation.separator",
+                "punctuation.section",
+                "punctuation.terminator"
+            ],
+            "settings": {
+                "foreground": "#004d57"
+            }
+        },
+        {
+            "name": "KEYWORD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.modifier",
+                "meta.tag.sgml",
+                "punctuation.accessor",
+                "constant.other.color",
+                "entity.name.section",
+                "markup.heading",
+                "markup.heading punctuation.definition",
+                "entity.other.attribute-name.pseudo-class",
+                "entity.other.attribute-name.pseudo-element",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "storage.type.function.pug",
+                "text.pug storage.type",
+                "text.pug meta.tag.other",
+                "source.clojure storage.control",
+                "meta.expression.clojure",
+                "punctuation.separator.slice.python",
+                "punctuation.separator.question-mark.cs",
+                "punctuation.definition.parameters.varargs",
+                "source.go keyword.operator",
+                "punctuation.separator.pointer-access",
+                "punctuation.separator.other.ruby",
+                "keyword.package",
+                "keyword.import",
+                "punctuation.definition.keyword",
+                "punctuation.separator.hash.cs",
+                "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+                "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+                "source.kotlin storage.type.import",
+                "source.kotlin storage.type.package",
+                "constant.string.documentation.powershell",
+                "punctuation.section.directive",
+                "storage.type.rust",
+                "punctuation.definition.attribute",
+                "punctuation.definition.preprocessor",
+                "punctuation.separator.namespace",
+                "punctuation.separator.method",
+                "keyword.control punctuation.definition.function",
+                "source.ocaml variable.interpolation string",
+                "source.reason variable.interpolation",
+                "punctuation.definition.directive",
+                "storage.type.modifier",
+                "keyword.other.class.fileds",
+                "source.toml entity.other.attribute-name",
+                "source.css entity.name.tag.custom",
+                "sharing.modifier",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby"
+            ],
+            "settings": {
+                "foreground": "#ff5792"
+            }
+        },
+        {
+            "name": "VARIABLE",
+            "scope": [
+                "variable",
+                "variable.object",
+                "variable.other",
+                "variable.parameter",
+                "support",
+                "entity.name.module",
+                "variable.import.parameter",
+                "variable.other.class",
+                "meta.toc-list.id.html",
+                "source.json meta.structure.dictionary.json support.type.property-name.json",
+                "meta.var.clojure",
+                "entity.name.variable",
+                "source.java meta.class.body.java",
+                "entity.name.package.go",
+                "source.c",
+                "source.cpp",
+                "source.go",
+                "source.python",
+                "meta.function-call.arguments.python",
+                "source.ruby",
+                "source.coffee.embedded.source",
+                "source.coffee",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "storage.type.annotation",
+                "punctuation.definition.annotation",
+                "source.groovy.embedded.source",
+                "punctuation.definition.variable",
+                "source.powershell",
+                "string.quoted.interpolated.vala constant.character.escape.vala",
+                "source.apacheconf",
+                "source.objc",
+                "source.crystal",
+                "string.quoted.double.kotlin entity.string.template.element.kotlin",
+                "entity.name.package.kotlin",
+                "meta.template.expression.kotlin",
+                "parameter.variable.function",
+                "variable.other.constant.elixir",
+                "source.elixir.embedded.source",
+                "source.sql.embedded",
+                "punctuation.definition.placeholder",
+                "source.swift",
+                "source.julia",
+                "source.shell",
+                "variable.other.normal punctuation.definition.variable.shell",
+                "source.reason variable.language",
+                "source.reason variable.language string.other.link",
+                "source.elm meta.value",
+                "source.elm meta.declaration.module",
+                "meta.embedded.block variable punctuation.definition.variable.php",
+                "string.quoted.double.class.other",
+                "source.toml keyword",
+                "support.type.nim",
+                "source.tf meta.template.expression",
+                "source.scala entity.name.import",
+                "markup.code",
+                "markup.fenced_code.block"
+            ],
+            "settings": {
+                "foreground": "#fa8900"
+            }
+        },
+        {
+            "name": "ANNOTATION",
+            "scope": [
+                "support.variable.property",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "entity.other.attribute-name.id",
+                "entity.other.attribute-name.id punctuation.definition.entity",
+                "entity.name.type.annotation.kotlin",
+                "support.type.primitive",
+                "meta.type.parameters entity.name.type",
+                "meta.type.annotation entity.name.type",
+                "punctuation.definition.typeparameters",
+                "source.python support.type.python",
+                "comment.block.documentation.phpdoc.php keyword.other.type.php",
+                "storage.type.php",
+                "keyword.type",
+                "storage.type.cs",
+                "storage.type.c",
+                "storage.type.objc",
+                "punctuation.definition.storage.type.objc",
+                "markup punctuation.definition",
+                "storage.type.powershell",
+                "comment.block.documentation entity.name.type",
+                "source.java storage.type",
+                "storage.type.primitive",
+                "source.groovy storage.type",
+                "storage.type.r",
+                "source.haskell storage.type",
+                "punctuation.separator.clause-head-body",
+                "source.go storage.type",
+                "storage.type.core.rust",
+                "storage.class.std.rust",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "support.type.vb",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "constant.other.reference",
+                "source.graphql support.type",
+                "source.reason support.type string",
+                "entity.name.type.fsharp",
+                "source.elm storage.type",
+                "storage.type.user-defined",
+                "storage.type.built-in",
+                "support.type.builtin",
+                "source.swift support.type",
+                "support.class.crystal",
+                "storage.type.integral",
+                "source.cpp storage.type.cpp",
+                "source.vala storage.type",
+                "source.hlsl storage.type.basic",
+                "source.hlsl support.type.other",
+                "source.apex storage.type",
+                "source.nim storage.type",
+                "source.cpp entity.name.type",
+                "support.class.builtin",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "markup.raw.monospace",
+                "markup.mark",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric"
+            ],
+            "settings": {
+                "foreground": "#b3694d"
+            }
+        },
+        {
+            "name": "CONSTANT",
+            "scope": [
+                "constant",
+                "variable.other.constant",
+                "support.constant",
+                "punctuation.definition.entity",
+                "constant.character.entity",
+                "support.variable.magic",
+                "markup.quote",
+                "entity.name.type.type-parameter.cs",
+                "punctuation.bracket.angle",
+                "entity.name.function.preprocessor.c",
+                "storage.type.scala",
+                "entity.helper.apacheconf",
+                "variable.language.crystal",
+                "punctuation.definition.constant",
+                "support.constant punctuation.definition.variable",
+                "constant.character.math",
+                "support.class.math",
+                "source.graphql constant.character",
+                "source.reason constant.language.list",
+                "source.cpp variable.other.enummember",
+                "support.variable.class.hideshow",
+                "entity.other.attribute-name.class",
+                "meta.attribute.id entity.other.attribute-name",
+                "text.html entity.other.attribute-name",
+                "meta.tag.attributes entity.other.attribute-name",
+                "text.xml entity.other.attribute-name",
+                "source.cs entity.other.attribute-name",
+                "constant.character.format.placeholder",
+                "constant.other.placeholder",
+                "source.vue entity.other.attribute-name",
+                "entity.other.attribute-name.mjml",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "meta.definition.attribute-entry punctuation.separator"
+            ],
+            "settings": {
+                "foreground": "#a88c00"
+            }
+        },
+        {
+            "name": "TAG",
+            "scope": [
+                "variable.language",
+                "variable.parameter.function.language.special",
+                "punctuation.definition.italic",
+                "punctuation.definition.bold",
+                "entity.name.tag",
+                "variable.language punctuation.definition.variable",
+                "keyword.control.clojure",
+                "support.type.exception.python",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "keyword.other.var.cs",
+                "storage.modifier.super",
+                "source.go keyword",
+                "keyword.function.go",
+                "meta.separator",
+                "keyword.other.fn.rust",
+                "storage.modifier.static.rust",
+                "source.r meta.function.r keyword.control.r",
+                "storage.type.def",
+                "meta.class.identifier storage.modifier",
+                "source.scala keyword.declaration",
+                "storage.type",
+                "comment.block.documentation punctuation.definition.block.tag",
+                "comment.block.documentation punctuation.definition.inline.tag",
+                "entity.tag.apacheconf",
+                "keyword.other.julia",
+                "source.julia storage.modifier",
+                "constant.language.empty-list.haskell",
+                "meta.function.powershell storage.type.powershell",
+                "keyword.control.fun",
+                "punctuation.terminator.function",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml storage.type markup.underline",
+                "binding.fsharp keyword",
+                "function.anonymous keyword",
+                "function.anonymous keyword.symbol.fsharp",
+                "meta.embedded.block variable.language punctuation.definition.variable.php",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other.class",
+                "source.wsd keyword.other.linebegin",
+                "keyword.other.skinparam.keyword",
+                "keyword.other.nim",
+                "markup.deleted.diff",
+                "source.tf support.class.variable",
+                "meta.function.lua keyword.control.lua",
+                "markup.block entity.name.tag",
+                "markup.meta.attribute-list",
+                "source.zig keyword.default",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "foreground": "#e64100"
+            }
+        },
+        {
+            "name": "STRING",
+            "scope": [
+                "string",
+                "punctuation.definition.string",
+                "source.css support.constant",
+                "entity.name.import.go",
+                "markup.raw.texttt",
+                "markup.inserted.diff",
+                "source.scala punctuation.definition.character",
+                "constant.character.literal.scala",
+                "source.tf entity.name"
+            ],
+            "settings": {
+                "foreground": "#00b368"
+            }
+        },
+        {
+            "name": "STRINGINTERPOLATED",
+            "scope": [
+                "string.template",
+                "punctuation.definition.string.template",
+                "string.interpolated.python string.quoted.single.python",
+                "string.quoted.double.heredoc",
+                "string.quoted.interpolated.vala",
+                "string.quoted.interpolated.vala punctuation.definition.string",
+                "string.regexp.apacheconf",
+                "markup.inline.raw.string",
+                "markup.inline.raw punctuation.definition.raw",
+                "string.quoted.double.interpolated.crystal",
+                "string.quoted.double.interpolated.crystal punctuation.definition.string",
+                "text.tex markup.raw"
+            ],
+            "settings": {
+                "foreground": "#009456"
+            }
+        },
+        {
+            "name": "NUMBER",
+            "scope": [
+                "constant.numeric",
+                "constant.language",
+                "punctuation.separator.decimal.period.php",
+                "keyword.operator.null-conditional.cs",
+                "punctuation.separator.question-mark.cs",
+                "constant.integer.apacheconf",
+                "keyword.operator.nullable-type",
+                "constant.language punctuation.definition.variable",
+                "constant.others.fsharp",
+                "keyword.other.unit",
+                "string.quoted.double.skinparam.value",
+                "source.toml constant",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "foreground": "#5842ff"
+            }
+        },
+        {
+            "name": "FUNCTION",
+            "scope": [
+                "variable.function",
+                "support.type.property-name",
+                "entity.name.function",
+                "string.other.link",
+                "markup.link",
+                "support.type.vendored",
+                "support.other.variable",
+                "meta.function-call.generic.python",
+                "meta.method-call.groovy meta.method.groovy",
+                "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+                "punctuation.definition.decorator",
+                "support.function.any-method",
+                "text.tex support.function",
+                "text.tex punctuation.definition.function",
+                "entity.name.section.fsharp entity.name.section.fsharp",
+                "support.variable.class.function",
+                "keyword.control.cucumber.table",
+                "punctuation.decorator",
+                "source.tf support.class"
+            ],
+            "settings": {
+                "foreground": "#0095a8"
+            }
+        },
+        {
+            "name": "SUPPORT",
+            "scope": [
+                "entity.name",
+                "entity.other",
+                "support.orther.namespace.use.php",
+                "meta.use.php",
+                "support.other.namespace.php",
+                "support.type",
+                "support.class",
+                "punctuation.definition.parameters",
+                "support.function",
+                "support.function.construct",
+                "markup.changed.git_gutter",
+                "markup.underline.link",
+                "markup.underline.link.image",
+                "markup.underline",
+                "meta.symbol.namespace.clojure",
+                "entity.mime-type.apacheconf",
+                "keyword.operator.function.infix",
+                "entity.name.function.infix",
+                "entity.name.function.call.kotlin",
+                "text.tex support.function.verb",
+                "text.tex support.function.texttt",
+                "source.reason constant.language.unit",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "constant.language.unit.fsharp",
+                "source.wsd support.class.preprocessings",
+                "keyword.language.gherkin.feature.scenario",
+                "source.nim keyword.other.common.function",
+                "entity.name.type.namespace",
+                "entity.name.scope-resolution.function.call"
+            ],
+            "settings": {
+                "foreground": "#00bdd6"
+            }
+        },
+        {
+            "name": "MISC",
+            "scope": [
+                "source.js constant.other.object.key.js string.unquoted.label.js",
+                "source.js punctuation.section.embedded",
+                "punctuation.definition.template-expression",
+                "support.class",
+                "storage.type.string.python",
+                "string.interpolated.pug",
+                "support.constant.handlebars",
+                "source.clojure punctuation.section.set",
+                "source.clojure punctuation.section.metadata",
+                "entity.global.clojure",
+                "source.python meta.function-call.python support.type.python",
+                "entity.other.inherited-class.python",
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.section.embedded.end.ruby source.ruby",
+                "support.constant.math",
+                "entity.namespace.r",
+                "meta.method-call.groovy storage.type.groovy",
+                "source.scala entity.name.class.declaration",
+                "constant.character.escape",
+                "support.function.macro.julia",
+                "string.replacement.apacheconf",
+                "storage.modifier.using.vala",
+                "constant.other.haskell",
+                "source.objc entity.name.tag",
+                "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+                "meta.embedded.line.crystal punctuation.section.embedded",
+                "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+                "punctuation.section.embedded",
+                "punctuation.section.tag",
+                "punctuation.section.embedded source.swift",
+                "variable.other.bracket punctuation.definition.variable",
+                "string.interpolated.dollar punctuation.definition.string",
+                "constant.character.escape punctuation.definition.keyword",
+                "source.ocaml entity.name.class constant.numeric",
+                "source.reason entity.name.class",
+                "keyword.format.specifier.fsharp",
+                "support.module.elm",
+                "meta.embedded.block.php punctuation.definition.variable.php",
+                "source.vala storage.type",
+                "support.variable.class.group",
+                "entity.name.type.class",
+                "source.tf meta.keyword.list",
+                "source.tf meta.keyword.map",
+                "entity.name.class.lua",
+                "markup.substitution"
+            ],
+            "settings": {
+                "foreground": "#0094f0"
+            }
+        },
+        {
+            "name": "INVALID",
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#ff530f"
+            }
+        },
+        {
+            "name": "ITALIC",
+            "scope": [
+                "comment",
+                "storage.modifier",
+                "punctuation.definition.comment",
+                "entity.other",
+                "variable.language",
+                "support.type.vendored",
+                "support.constant.vendored",
+                "markup.quote",
+                "markup.italic",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "keyword.control.clojure",
+                "source.clojure meta.symbol.dynamic",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "variable.other.member.c",
+                "support.type.core.rust",
+                "variable.other.object.property",
+                "variable.other.property",
+                "source.r meta.function.r keyword.control.r",
+                "comment.line.roxygen.r keyword",
+                "comment.line.roxygen.r variable.parameter.r",
+                "keyword.control.inheritance.coffee",
+                "comment.block.documentation.phpdoc.php keyword",
+                "keyword.other.array.phpdoc.php",
+                "storage.type.modifier",
+                "comment.block.javadoc.java keyword",
+                "comment.block.javadoc.java variable.parameter.java",
+                "keyword.operator.documentation.powershell",
+                "storage.type.scala",
+                "variable.parameter.function.language.special",
+                "comment.block.documentation.scala keyword",
+                "comment.block.documentation.scala variable.parameter",
+                "support.function.builtin.go",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.ruby",
+                "source.vala storage.type.generic",
+                "constant.other.table-name",
+                "constant.other.placeholder",
+                "variable.other.field",
+                "entity.alias.import.go",
+                "source.swift keyword.other.declaration-specifier",
+                "support.variable.swift",
+                "keyword.other.capture-specifier",
+                "text.tex support.function.emph",
+                "constant.other.math",
+                "support.function.textit",
+                "entity.name.footnote",
+                "entity.name.function.directive.graphql",
+                "source.graphql support.type.enum",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "abstract.definition.fsharp keyword",
+                "abstract.definition.fsharp entity",
+                "function.anonymous keyword",
+                "entity.name.record.field.accessor.elm",
+                "support.type.primitive",
+                "support.type.builtin",
+                "keyword.type.cs",
+                "storage.type.built-in",
+                "storage.type.primitive",
+                "source.python support.type.python",
+                "storage.type.core.rust",
+                "source.swift support.type",
+                "source.go storage.type",
+                "storage.type.php",
+                "storage.type.function.kotlin",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "variable.other.member",
+                "keyword.other.import",
+                "keyword.package",
+                "keyword.import",
+                "source.wsd keyword.control.diagram",
+                "keyword.language.gherkin.feature.step",
+                "source.hlsl storage.type.basic",
+                "source.apex keyword.type",
+                "sharing.modifier",
+                "source.nim storage.type.concrete",
+                "meta.preprocessor.pragma.nim",
+                "storage.type.integral",
+                "entity.name.scope-resolution.function.call",
+                "support.class.builtin",
+                "comment.block.documentation storage.type.class",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "meta.import keyword.control",
+                "keyword.control.export",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "keyword.local.lua",
+                "markup.mark.constrained markup.mark",
+                "markup.block.open",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric",
+                "source.zig keyword.type",
+                "source.zig keyword.storage",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "BOLD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.operator",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.type.function.arrow",
+                "constant.other.color",
+                "punctuation.accessor",
+                "entity.name.section",
+                "markdown.heading",
+                "markup.inline.raw punctuation.definition.raw",
+                "markup.heading",
+                "storage.type.function.pug",
+                "storage.type.function.python",
+                "storage.type.annotation",
+                "punctuation.bracket.angle",
+                "keyword.other.new",
+                "storage.type.generic.wildcard",
+                "source.go keyword.operator",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "variable.parameter",
+                "support.function.builtin.rust",
+                "storage.type.function.coffee",
+                "entity.name.variable.parameter",
+                "punctuation.separator.hash.cs",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "meta.function.parameters variable.other",
+                "entity.name.type.annotation.kotlin",
+                "storage.type.objc",
+                "parameter.variable.function",
+                "markup punctuation.definition",
+                "punctuation.section.directive",
+                "punctuation.definition.preprocessor",
+                "source.ruby punctuation.definition.variable",
+                "support.function.textbf",
+                "source.graphql support.type.builtin",
+                "source.ocaml variable.interpolation string",
+                "entity.name.function.definition.special.constructor",
+                "entity.name.function.definition.special.member.destructor.",
+                "meta.function.parameters variable punctuation.definition.variable.php",
+                "source.wsd keyword.other.activity",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby",
+                "keyword.function.go",
+                "keyword.other.fn.rust",
+                "markup.other.anchor",
+                "markup.list.bullet",
+                "markup.list punctuation.definition",
+                "keyword.control.default",
+                "punctuation.section",
+                "punctuation.separator",
+                "punctuation.terminator",
+                "markup.bold.markdown",
+                "source.zig storage.type.function"
+            ],
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "BOLD-ITALIC",
+            "scope": [
+                "markup.quote markup.bold",
+                "text.html punctuation.section.embedded",
+                "variable.other.c",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "source.rust meta.attribute.rust",
+                "meta.attribute.id entity.other.attribute-name",
+                "source.ocaml punctuation.definition.tag emphasis",
+                "source.tf entity.name",
+                "markup.quote punctuation.definition",
+                "markup.fenced_code punctuation.definition",
+                "fenced_code.block.language"
+            ],
+            "settings": {
+                "fontStyle": "bold italic"
+            }
+        },
+        {
+            "name": "NORMAL",
+            "scope": [
+                "keyword.begin.tag.ejs",
+                "source.python meta.function.decorator.python support.type.python",
+                "source.cs keyword.other",
+                "keyword.other.var.cs",
+                "source.go keyword",
+                "storage.modifier.static.rust",
+                "variable.parameter.r",
+                "variable.parameter.handlebars",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "meta.class.identifier storage.modifier",
+                "keyword.operator.other.powershell",
+                "source.css variable.parameter",
+                "string.interpolated variable.parameter",
+                "source.apacheconf keyword",
+                "keyword.other.julia",
+                "storage.modifier.using.vala",
+                "source.objc keyword.other.property.attribute",
+                "source.sql keyword.other",
+                "keyword.other.using.vala",
+                "keyword.operator.function.infix",
+                "keyword.control.directive",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "entity.name.function.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "punctuation.definition.variable",
+                "entity.name.section.latex",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "keyword.format.specifier.fsharp",
+                "entity.name.section.fsharp",
+                "binding.fsharp keyword",
+                "binding.fsharp keyword.symbol",
+                "record.fsharp keyword",
+                "keyword.symbol.fsharp",
+                "entity.name.section.fsharp keyword",
+                "namespace.open.fsharp keyword",
+                "namespace.open.fsharp entity",
+                "storage.type",
+                "source.cpp keyword.other",
+                "source.c keyword.other",
+                "keyword.other.unit",
+                "storage.modifier.array.bracket",
+                "meta.import.haskell keyword",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other",
+                "keyword.other.skinparam",
+                "source.css keyword.control",
+                "source.css keyword.operator",
+                "keyword.language.gherkin.feature.scenario",
+                "keyword.control.cucumber.table",
+                "source.toml entity.other.attribute-name",
+                "source.toml keyword",
+                "keyword.other.nim",
+                "source.nim keyword.other.common.function",
+                "source.nim keyword.other",
+                "source.scala keyword.declaration",
+                "source.scala entity.name.class.declaration",
+                "keyword.control.lua",
+                "source.css punctuation.section",
+                "punctuation.section.embedded",
+                "source.c punctuation.section",
+                "source.cpp punctuation.section",
+                "source.java punctuation.section",
+                "source.php punctuation.section",
+                "source.powershell punctuation.section",
+                "source.r punctuation.section",
+                "source.ruby punctuation.section",
+                "source.swift punctuation.section",
+                "source.objc punctuation.section",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.default",
+                "source.zig keyword.statement",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "STRIKETHROUGH",
+            "scope": ["markup.strikethrough"],
+            "settings": {
+                "fontStyle": "strikethrough"
+            }
+        }
+    ]
+}

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

@@ -0,0 +1,1113 @@
+{
+   "name": "Noctis Lilac",
+   "type": "dark",
+   "colors": {
+      "selection.background": "#b4adebbb",
+      "descriptionForeground": "#908ea4",
+      "errorForeground": "#ff4000",
+      "widget.shadow": "#00000055",
+      "editor.background": "#f2f1f8",
+      "editor.foreground": "#0c006b",
+      "editorLineNumber.foreground": "#9d9ab1",
+      "editorLineNumber.activeForeground": "#7060eb",
+      "editorCursor.foreground": "#5c49e9",
+      "badge.background": "#7060eb",
+      "badge.foreground": "#f2f1f8",
+      "activityBar.background": "#f2f1f8",
+      "activityBar.dropBackground": "#7060eb65",
+      "activityBar.foreground": "#7060eb",
+      "activityBar.border": "#ece2c600",
+      "activityBarBadge.background": "#7060eb",
+      "activityBarBadge.foreground": "#f2f1f8",
+      "activityBar.activeBackground": "#7060eb33",
+      "activityBar.activeBorder": "#7060eb",
+      "sideBar.background": "#edecf8",
+      "sideBar.foreground": "#75718e",
+      "sideBar.border": "#ece2c600",
+      "sideBar.dropBackground": "#edecf8",
+      "sideBarTitle.foreground": "#75718e",
+      "sideBarSectionHeader.background": "#dedbf5",
+      "sideBarSectionHeader.foreground": "#75718e",
+      "statusBar.background": "#e2dff6",
+      "statusBar.foreground": "#7060eb",
+      "statusBar.border": "#ece2c600",
+      "statusBar.debuggingBackground": "#edecf8",
+      "statusBar.debuggingForeground": "#e9498150",
+      "statusBar.debuggingBorder": "#e94981af",
+      "statusBar.noFolderForeground": "#8b87ab",
+      "statusBar.noFolderBackground": "#edecf8",
+      "statusBar.noFolderBorder": "#edecf8",
+      "statusBarItem.activeBackground": "#c1bbec",
+      "statusBarItem.hoverBackground": "#c9c2f9",
+      "statusBarItem.prominentBackground": "#a9a4e544",
+      "statusBarItem.prominentHoverBackground": "#a9a4e599",
+      "button.background": "#8e80ff",
+      "button.foreground": "#f1f1f1",
+      "button.hoverBackground": "#a599ff",
+      "dropdown.background": "#f2f1f8",
+      "dropdown.border": "#f2f1f8",
+      "dropdown.foreground": "#0c006b",
+      "editorMarkerNavigation.background": "#3a3a5e29",
+      "editorMarkerNavigationError.background": "#ff4000",
+      "editorMarkerNavigationWarning.background": "#e69533",
+      "editorError.border": "#f2f1f8",
+      "editorError.foreground": "#ff4000",
+      "editorWarning.border": "#f2f1f8",
+      "editorWarning.foreground": "#e69533",
+      "editorInfo.border": "#f2f1f8",
+      "editorInfo.foreground": "#00c6e0",
+      "editorHint.border": "#58cc6d00",
+      "editorHint.foreground": "#58cc6d",
+      "editorGroup.emptyBackground": "#958fbc33",
+      "editorGroup.border": "#d4d0f1",
+      "editorGroup.dropBackground": "#958fbc33",
+      "editorGroupHeader.noTabsBackground": "#e2dff6",
+      "editorGroupHeader.tabsBackground": "#e2dff6",
+      "editorGroupHeader.tabsBorder": "#e2dff600",
+      "tab.activeBackground": "#f2f1f8",
+      "tab.unfocusedActiveBackground": "#e9e7f3",
+      "tab.activeForeground": "#7060eb",
+      "tab.border": "#b5adeb",
+      "tab.inactiveBackground": "#e2dff6",
+      "tab.inactiveForeground": "#75718e",
+      "tab.unfocusedActiveForeground": "#75718e",
+      "tab.unfocusedInactiveForeground": "#75718e",
+      "tab.activeBorderTop": "#00c6e0",
+      "tab.activeModifiedBorder": "#00b368",
+      "tab.activeBorder": "#f2f1f8",
+      "tab.unfocusedActiveBorder": "#f2f1f800",
+      "tab.unfocusedHoverBackground": "#7060eb21",
+      "textBlockQuote.background": "#edecf8",
+      "textBlockQuote.border": "#00899e",
+      "textCodeBlock.background": "#edecf8",
+      "textLink.activeForeground": "#00c6e0",
+      "textLink.foreground": "#00c6e0",
+      "textPreformat.foreground": "#e9a149",
+      "textSeparator.foreground": "#edecf8",
+      "walkThrough.embeddedEditorBackground": "#edecf8",
+      "welcomePage.buttonBackground": "#edecf8",
+      "welcomePage.buttonHoverBackground": "#e2dff6",
+      "input.background": "#f2f1f8",
+      "input.border": "#dedbf5",
+      "input.foreground": "#666284",
+      "input.placeholderForeground": "#9391a6",
+      "inputOption.activeBorder": "#7060eb",
+      "inputValidation.errorBackground": "#ff400041",
+      "inputValidation.errorBorder": "#ff4000",
+      "inputValidation.infoBackground": "#00c6ea599ff",
+      "inputValidation.infoBorder": "#00c6e0",
+      "inputValidation.warningBackground": "#ffa587cc",
+      "inputValidation.warningBorder": "#ffa487",
+      "editorWidget.background": "#dedbf5",
+      "editorWidget.border": "#ece2c600",
+      "editorHoverWidget.background": "#dedbf5",
+      "editorHoverWidget.border": "#ece2c600",
+      "editorSuggestWidget.background": "#dedbf5",
+      "editorSuggestWidget.border": "#ece2c600",
+      "editorSuggestWidget.foreground": "#666284",
+      "editorSuggestWidget.highlightForeground": "#7060eb",
+      "editorSuggestWidget.selectedBackground": "#cac4f3",
+      "editorGutter.background": "#f2f1f8",
+      "editorGutter.addedBackground": "#8ce99a",
+      "editorGutter.deletedBackground": "#ff4000",
+      "editorGutter.modifiedBackground": "#e9a149",
+      "editor.selectionBackground": "#b4adeb77",
+      "editor.selectionHighlightBackground": "#14a5ff33",
+      "editor.selectionHighlightBorder": "#14a5ff00",
+      "editor.inactiveSelectionBackground": "#b4adeb55",
+      "editor.wordHighlightStrongBackground": "#b5890027",
+      "editor.wordHighlightStrongBorder": "#b5890000",
+      "editor.wordHighlightBackground": "#e9a14922",
+      "editor.wordHighlightBorder": "#e9a14900",
+      "editor.findMatchBackground": "#8ce99a60",
+      "editor.findMatchBorder": "#8ce99a00",
+      "editor.findMatchHighlightBackground": "#148f9f33",
+      "editor.findMatchHighlightBorder": "#148f9f00",
+      "editor.findRangeHighlightBackground": "#99e62a55",
+      "editor.findRangeHighlightBorder": "#58CC6D00",
+      "editor.hoverHighlightBackground": "#7060eb3f",
+      "editor.lineHighlightBackground": "#d5d2ef99",
+      "editor.lineHighlightBorder": "#d5d2ef00",
+      "editor.rangeHighlightBackground": "#f1e9d5a1",
+      "editorLink.activeForeground": "#14a5ff",
+      "editorWhitespace.foreground": "#c3c1d7bb",
+      "editorIndentGuide.background": "#c3c1d7aa",
+      "editorIndentGuide.activeBackground": "#9f99cc",
+      "editorBracketMatch.background": "#7060eb20",
+      "editorBracketMatch.border": "#7060eb",
+      "editorRuler.foreground": "#d4d0f1",
+      "editorCodeLens.foreground": "#77aaca",
+      "terminal.ansiBlack": "#0c006b",
+      "terminal.ansiRed": "#e34e1c",
+      "terminal.ansiGreen": "#00b368",
+      "terminal.ansiYellow": "#f49725",
+      "terminal.ansiBlue": "#0094f0",
+      "terminal.ansiMagenta": "#ff5792",
+      "terminal.ansiCyan": "#00bdd6",
+      "terminal.ansiWhite": "#8ca6a6",
+      "terminal.ansiBrightBlack": "#0f0080",
+      "terminal.ansiBrightRed": "#ff4000",
+      "terminal.ansiBrightGreen": "#00d17a",
+      "terminal.ansiBrightYellow": "#ff8c00",
+      "terminal.ansiBrightBlue": "#0fa3ff",
+      "terminal.ansiBrightMagenta": "#ff6b9f",
+      "terminal.ansiBrightCyan": "#00cbe6",
+      "terminal.ansiBrightWhite": "#bbc3c4",
+      "terminal.background": "#e9e7f3",
+      "terminal.foreground": "#0c006b",
+      "terminalCursor.background": "#e9e7f3",
+      "terminalCursor.foreground": "#0c006b",
+      "merge.border": "#f2f1f800",
+      "merge.currentContentBackground": "#33e7ff33",
+      "merge.currentHeaderBackground": "#33e7ff55",
+      "merge.incomingContentBackground": "#9d92f233",
+      "merge.incomingHeaderBackground": "#9d92f255",
+      "merge.commonContentBackground": "#ffc18033",
+      "merge.commonHeaderBackground": "#ffc18055",
+      "editorOverviewRuler.currentContentForeground": "#33e7ff55",
+      "editorOverviewRuler.incomingContentForeground": "#9d92f255",
+      "editorOverviewRuler.commonContentForeground": "#ffc18055",
+      "editorOverviewRuler.border": "#f2f1f8",
+      "notificationCenter.border": "#dedbf5",
+      "notificationCenterHeader.foreground": "#0c006b",
+      "notificationCenterHeader.background": "#dedbf5",
+      "notificationToast.border": "#dedbf5",
+      "notifications.foreground": "#0c006b",
+      "notifications.background": "#dedbf5",
+      "notifications.border": "#dedbf5",
+      "notificationLink.foreground": "#0c006b",
+      "diffEditor.insertedTextBackground": "#14b83230",
+      "diffEditor.removedTextBackground": "#BB1F0522",
+      "debugToolBar.background": "#edecf8",
+      "debugExceptionWidget.background": "#edecf8",
+      "debugExceptionWidget.border": "#00899e",
+      "extensionButton.prominentBackground": "#8e80ff",
+      "extensionButton.prominentForeground": "#e4e2f9",
+      "extensionButton.prominentHoverBackground": "#a599ff",
+      "focusBorder": "#dedbf5",
+      "foreground": "#0c006b",
+      "panel.background": "#e9e7f3",
+      "panel.border": "#aea4f4",
+      "panelTitle.activeBorder": "#aea4f4",
+      "panelTitle.activeForeground": "#7060eb",
+      "panelTitle.inactiveForeground": "#75718e",
+      "peekView.border": "#7060eb",
+      "peekViewEditor.background": "#eae7fd",
+      "peekViewEditor.matchHighlightBackground": "#148f9f33",
+      "peekViewEditor.matchHighlightBorder": "#148f9f79",
+      "peekViewEditorGutter.background": "#eae7fd",
+      "peekViewResult.background": "#edecf8",
+      "peekViewResult.fileForeground": "#e9a149",
+      "peekViewResult.lineForeground": "#8b87ab",
+      "peekViewResult.matchHighlightBackground": "#dedbf5",
+      "peekViewResult.selectionBackground": "#dedbf5",
+      "peekViewResult.selectionForeground": "#666284",
+      "peekViewTitle.background": "#edecf8",
+      "peekViewTitleDescription.foreground": "#8b87ab",
+      "peekViewTitleLabel.foreground": "#e9a149",
+      "progressBar.background": "#00c6e0",
+      "scrollbar.shadow": "#00000055",
+      "scrollbarSlider.activeBackground": "#7060ebad",
+      "scrollbarSlider.background": "#6a90955b",
+      "scrollbarSlider.hoverBackground": "#7060eb62",
+      "gitDecoration.addedResourceForeground": "#009456",
+      "gitDecoration.modifiedResourceForeground": "#14b832",
+      "gitDecoration.deletedResourceForeground": "#ff4000",
+      "gitDecoration.untrackedResourceForeground": "#00c6e0",
+      "gitDecoration.ignoredResourceForeground": "#a8a28faa",
+      "gitDecoration.conflictingResourceForeground": "#e9a149",
+      "pickerGroup.border": "#aea4f4",
+      "pickerGroup.foreground": "#7060eb",
+      "list.activeSelectionBackground": "#bcb6e7",
+      "list.activeSelectionForeground": "#0c006b",
+      "list.dropBackground": "#afaad4aa",
+      "list.focusBackground": "#c3beea",
+      "list.focusForeground": "#0c006b",
+      "list.highlightForeground": "#7060eb",
+      "list.hoverBackground": "#d2ccff",
+      "list.hoverForeground": "#0c006b",
+      "list.inactiveFocusBackground": "#cec9ed",
+      "list.inactiveSelectionBackground": "#d7d3f3",
+      "list.inactiveSelectionForeground": "#838099",
+      "list.errorForeground": "#c9481d",
+      "list.warningForeground": "#e07a52",
+      "listFilterWidget.background": "#d7d3f3",
+      "listFilterWidget.outline": "#14b832",
+      "listFilterWidget.noMatchesOutline": "#ff4000",
+      "tree.indentGuidesStroke": "#c3c1d7",
+      "settings.headerForeground": "#0c006b",
+      "settings.modifiedItemIndicator": "#00bd23",
+      "settings.dropdownListBorder": "#b4adeb88",
+      "settings.dropdownBackground": "#dedbf5",
+      "settings.dropdownForeground": "#0bb",
+      "settings.dropdownBorder": "#dedbf5",
+      "settings.checkboxBackground": "#dedbf5",
+      "settings.checkboxForeground": "#0bb",
+      "settings.checkboxBorder": "#dedbf5",
+      "settings.textInputBackground": "#dedbf5",
+      "settings.textInputForeground": "#0bb",
+      "settings.textInputBorder": "#dedbf5",
+      "settings.numberInputBackground": "#d4d0f1",
+      "settings.numberInputForeground": "#5842ff",
+      "settings.numberInputBorder": "#d4d0f1",
+      "breadcrumb.foreground": "#75718e",
+      "breadcrumb.background": "#f2f1f8",
+      "breadcrumb.focusForeground": "#7060eb",
+      "breadcrumb.activeSelectionForeground": "#0c006b",
+      "breadcrumbPicker.background": "#dedbf5",
+      "titleBar.activeBackground": "#edecf8",
+      "titleBar.activeForeground": "#0c006b",
+      "titleBar.inactiveBackground": "#edecf8",
+      "titleBar.inactiveForeground": "#75718e",
+      "menu.background": "#dedbf5",
+      "menu.foreground": "#75718e",
+      "menu.selectionBackground": "#d6d1fa",
+      "menu.selectionForeground": "#7060eb",
+      "menu.selectionBorder": "#d6d1fa",
+      "menubar.selectionBackground": "#d6d1fa",
+      "menubar.selectionForeground": "#7060eb",
+      "menubar.selectionBorder": "#d6d1fa",
+      "editor.snippetTabstopHighlightBackground": "#b3abed77",
+      "editor.snippetTabstopHighlightBorder": "#dad6f5",
+      "editor.snippetFinalTabstopHighlightBackground": "#b3abed77",
+      "editor.snippetFinalTabstopHighlightBorder": "#dad6f5",
+      "minimap.findMatchHighlight": "#7060ebaa",
+      "minimap.errorHighlight": "#ff4000ee",
+      "minimap.warningHighlight": "#e69533ee",
+      "minimapGutter.addedBackground": "#009456",
+      "minimapGutter.modifiedBackground": "#14b832",
+      "minimapGutter.deletedBackground": "#ff4000",
+      "minimap.background": "#f2f1f899"
+   },
+   "tokenColors": [
+      {
+         "name": "COMMENT",
+         "scope": [
+            "comment",
+            "punctuation.definition.comment",
+            "punctuation.definition.tag",
+            "comment.block.documentation punctuation.definition.bracket",
+            "source.ocaml comment constant.regexp meta.separator",
+            "markup.other.anchor support.constant",
+            "markup.fenced_code",
+            "markup.fenced_code punctuation.definition",
+            "punctuation.definition.heading",
+            "punctuation.definition.bold.markdown",
+            "punctuation.definition.italic.markdown",
+            "punctuation.definition.strikethrough.markdown"
+         ],
+         "settings": {
+            "foreground": "#9995b7"
+         }
+      },
+      {
+         "name": "TEXT",
+         "scope": [
+            "constant.character",
+            "constant.escape",
+            "text.html.markdown",
+            "punctuation.definition.list_item",
+            "keyword.begin.tag.ejs",
+            "constant.name.attribute.tag.pug",
+            "source.clojure meta.symbol",
+            "constant.other.description.jsdoc",
+            "keyword.other.array.phpdoc.php",
+            "keyword.operator.other.powershell",
+            "meta.link.inline punctuation.definition.string",
+            "source.sql",
+            "source meta.brace",
+            "source punctuation",
+            "text.html punctuation",
+            "markup meta punctuation.definition",
+            "meta.bracket.julia",
+            "meta.array.julia",
+            "entity.name.footnote",
+            "source.ocaml punctuation.definition.tag",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "entity.other.attribute-name strong",
+            "binding.fsharp keyword.symbol.fsharp",
+            "entity.name.record.field.elm",
+            "entity.name.record.field.accessor.elm",
+            "storage.modifier.array.bracket",
+            "source.css entity.other",
+            "meta.attribute-selector punctuation.definition.entity",
+            "markup.other.anchor string",
+            "punctuation.separator",
+            "punctuation.section",
+            "punctuation.terminator"
+         ],
+         "settings": {
+            "foreground": "#0c006b"
+         }
+      },
+      {
+         "name": "KEYWORD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.modifier",
+            "meta.tag.sgml",
+            "punctuation.accessor",
+            "constant.other.color",
+            "entity.name.section",
+            "markup.heading",
+            "markup.heading punctuation.definition",
+            "entity.other.attribute-name.pseudo-class",
+            "entity.other.attribute-name.pseudo-element",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "storage.type.function.pug",
+            "text.pug storage.type",
+            "text.pug meta.tag.other",
+            "source.clojure storage.control",
+            "meta.expression.clojure",
+            "punctuation.separator.slice.python",
+            "punctuation.separator.question-mark.cs",
+            "punctuation.definition.parameters.varargs",
+            "source.go keyword.operator",
+            "punctuation.separator.pointer-access",
+            "punctuation.separator.other.ruby",
+            "keyword.package",
+            "keyword.import",
+            "punctuation.definition.keyword",
+            "punctuation.separator.hash.cs",
+            "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+            "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+            "source.kotlin storage.type.import",
+            "source.kotlin storage.type.package",
+            "constant.string.documentation.powershell",
+            "punctuation.section.directive",
+            "storage.type.rust",
+            "punctuation.definition.attribute",
+            "punctuation.definition.preprocessor",
+            "punctuation.separator.namespace",
+            "punctuation.separator.method",
+            "keyword.control punctuation.definition.function",
+            "source.ocaml variable.interpolation string",
+            "source.reason variable.interpolation",
+            "punctuation.definition.directive",
+            "storage.type.modifier",
+            "keyword.other.class.fileds",
+            "source.toml entity.other.attribute-name",
+            "source.css entity.name.tag.custom",
+            "sharing.modifier",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby"
+         ],
+         "settings": {
+            "foreground": "#ff5792"
+         }
+      },
+      {
+         "name": "VARIABLE",
+         "scope": [
+            "variable",
+            "variable.object",
+            "variable.other",
+            "variable.parameter",
+            "support",
+            "entity.name.module",
+            "variable.import.parameter",
+            "variable.other.class",
+            "meta.toc-list.id.html",
+            "source.json meta.structure.dictionary.json support.type.property-name.json",
+            "meta.var.clojure",
+            "entity.name.variable",
+            "source.java meta.class.body.java",
+            "entity.name.package.go",
+            "source.c",
+            "source.cpp",
+            "source.go",
+            "source.python",
+            "meta.function-call.arguments.python",
+            "source.ruby",
+            "source.coffee.embedded.source",
+            "source.coffee",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "storage.type.annotation",
+            "punctuation.definition.annotation",
+            "source.groovy.embedded.source",
+            "punctuation.definition.variable",
+            "source.powershell",
+            "string.quoted.interpolated.vala constant.character.escape.vala",
+            "source.apacheconf",
+            "source.objc",
+            "source.crystal",
+            "string.quoted.double.kotlin entity.string.template.element.kotlin",
+            "entity.name.package.kotlin",
+            "meta.template.expression.kotlin",
+            "parameter.variable.function",
+            "variable.other.constant.elixir",
+            "source.elixir.embedded.source",
+            "source.sql.embedded",
+            "punctuation.definition.placeholder",
+            "source.swift",
+            "source.julia",
+            "source.shell",
+            "variable.other.normal punctuation.definition.variable.shell",
+            "source.reason variable.language",
+            "source.reason variable.language string.other.link",
+            "source.elm meta.value",
+            "source.elm meta.declaration.module",
+            "meta.embedded.block variable punctuation.definition.variable.php",
+            "string.quoted.double.class.other",
+            "source.toml keyword",
+            "support.type.nim",
+            "source.tf meta.template.expression",
+            "source.scala entity.name.import",
+            "markup.code",
+            "markup.fenced_code.block"
+         ],
+         "settings": {
+            "foreground": "#fa8900"
+         }
+      },
+      {
+         "name": "ANNOTATION",
+         "scope": [
+            "support.variable.property",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "entity.other.attribute-name.id",
+            "entity.other.attribute-name.id punctuation.definition.entity",
+            "entity.name.type.annotation.kotlin",
+            "support.type.primitive",
+            "meta.type.parameters entity.name.type",
+            "meta.type.annotation entity.name.type",
+            "punctuation.definition.typeparameters",
+            "source.python support.type.python",
+            "comment.block.documentation.phpdoc.php keyword.other.type.php",
+            "storage.type.php",
+            "keyword.type",
+            "storage.type.cs",
+            "storage.type.c",
+            "storage.type.objc",
+            "punctuation.definition.storage.type.objc",
+            "markup punctuation.definition",
+            "storage.type.powershell",
+            "comment.block.documentation entity.name.type",
+            "source.java storage.type",
+            "storage.type.primitive",
+            "source.groovy storage.type",
+            "storage.type.r",
+            "source.haskell storage.type",
+            "punctuation.separator.clause-head-body",
+            "source.go storage.type",
+            "storage.type.core.rust",
+            "storage.class.std.rust",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "support.type.vb",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "constant.other.reference",
+            "source.graphql support.type",
+            "source.reason support.type string",
+            "entity.name.type.fsharp",
+            "source.elm storage.type",
+            "storage.type.user-defined",
+            "storage.type.built-in",
+            "support.type.builtin",
+            "source.swift support.type",
+            "support.class.crystal",
+            "storage.type.integral",
+            "source.cpp storage.type.cpp",
+            "source.vala storage.type",
+            "source.hlsl storage.type.basic",
+            "source.hlsl support.type.other",
+            "source.apex storage.type",
+            "source.nim storage.type",
+            "source.cpp entity.name.type",
+            "support.class.builtin",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "markup.raw.monospace",
+            "markup.mark",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric"
+         ],
+         "settings": {
+            "foreground": "#b3694d"
+         }
+      },
+      {
+         "name": "CONSTANT",
+         "scope": [
+            "constant",
+            "variable.other.constant",
+            "support.constant",
+            "punctuation.definition.entity",
+            "constant.character.entity",
+            "support.variable.magic",
+            "markup.quote",
+            "entity.name.type.type-parameter.cs",
+            "punctuation.bracket.angle",
+            "entity.name.function.preprocessor.c",
+            "storage.type.scala",
+            "entity.helper.apacheconf",
+            "variable.language.crystal",
+            "punctuation.definition.constant",
+            "support.constant punctuation.definition.variable",
+            "constant.character.math",
+            "support.class.math",
+            "source.graphql constant.character",
+            "source.reason constant.language.list",
+            "source.cpp variable.other.enummember",
+            "support.variable.class.hideshow",
+            "entity.other.attribute-name.class",
+            "meta.attribute.id entity.other.attribute-name",
+            "text.html entity.other.attribute-name",
+            "meta.tag.attributes entity.other.attribute-name",
+            "text.xml entity.other.attribute-name",
+            "source.cs entity.other.attribute-name",
+            "constant.character.format.placeholder",
+            "constant.other.placeholder",
+            "source.vue entity.other.attribute-name",
+            "entity.other.attribute-name.mjml",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "meta.definition.attribute-entry punctuation.separator"
+         ],
+         "settings": {
+            "foreground": "#a88c00"
+         }
+      },
+      {
+         "name": "TAG",
+         "scope": [
+            "variable.language",
+            "variable.parameter.function.language.special",
+            "punctuation.definition.italic",
+            "punctuation.definition.bold",
+            "entity.name.tag",
+            "variable.language punctuation.definition.variable",
+            "keyword.control.clojure",
+            "support.type.exception.python",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "keyword.other.var.cs",
+            "storage.modifier.super",
+            "source.go keyword",
+            "keyword.function.go",
+            "meta.separator",
+            "keyword.other.fn.rust",
+            "storage.modifier.static.rust",
+            "source.r meta.function.r keyword.control.r",
+            "storage.type.def",
+            "meta.class.identifier storage.modifier",
+            "source.scala keyword.declaration",
+            "storage.type",
+            "comment.block.documentation punctuation.definition.block.tag",
+            "comment.block.documentation punctuation.definition.inline.tag",
+            "entity.tag.apacheconf",
+            "keyword.other.julia",
+            "source.julia storage.modifier",
+            "constant.language.empty-list.haskell",
+            "meta.function.powershell storage.type.powershell",
+            "keyword.control.fun",
+            "punctuation.terminator.function",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml storage.type markup.underline",
+            "binding.fsharp keyword",
+            "function.anonymous keyword",
+            "function.anonymous keyword.symbol.fsharp",
+            "meta.embedded.block variable.language punctuation.definition.variable.php",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other.class",
+            "source.wsd keyword.other.linebegin",
+            "keyword.other.skinparam.keyword",
+            "keyword.other.nim",
+            "markup.deleted.diff",
+            "source.tf support.class.variable",
+            "meta.function.lua keyword.control.lua",
+            "markup.block entity.name.tag",
+            "markup.meta.attribute-list",
+            "source.zig keyword.default",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "foreground": "#e64100"
+         }
+      },
+      {
+         "name": "STRING",
+         "scope": [
+            "string",
+            "punctuation.definition.string",
+            "source.css support.constant",
+            "entity.name.import.go",
+            "markup.raw.texttt",
+            "markup.inserted.diff",
+            "source.scala punctuation.definition.character",
+            "constant.character.literal.scala",
+            "source.tf entity.name"
+         ],
+         "settings": {
+            "foreground": "#00b368"
+         }
+      },
+      {
+         "name": "STRINGINTERPOLATED",
+         "scope": [
+            "string.template",
+            "punctuation.definition.string.template",
+            "string.interpolated.python string.quoted.single.python",
+            "string.quoted.double.heredoc",
+            "string.quoted.interpolated.vala",
+            "string.quoted.interpolated.vala punctuation.definition.string",
+            "string.regexp.apacheconf",
+            "markup.inline.raw.string",
+            "markup.inline.raw punctuation.definition.raw",
+            "string.quoted.double.interpolated.crystal",
+            "string.quoted.double.interpolated.crystal punctuation.definition.string",
+            "text.tex markup.raw"
+         ],
+         "settings": {
+            "foreground": "#009456"
+         }
+      },
+      {
+         "name": "NUMBER",
+         "scope": [
+            "constant.numeric",
+            "constant.language",
+            "punctuation.separator.decimal.period.php",
+            "keyword.operator.null-conditional.cs",
+            "punctuation.separator.question-mark.cs",
+            "constant.integer.apacheconf",
+            "keyword.operator.nullable-type",
+            "constant.language punctuation.definition.variable",
+            "constant.others.fsharp",
+            "keyword.other.unit",
+            "string.quoted.double.skinparam.value",
+            "source.toml constant",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "foreground": "#5842ff"
+         }
+      },
+      {
+         "name": "FUNCTION",
+         "scope": [
+            "variable.function",
+            "support.type.property-name",
+            "entity.name.function",
+            "string.other.link",
+            "markup.link",
+            "support.type.vendored",
+            "support.other.variable",
+            "meta.function-call.generic.python",
+            "meta.method-call.groovy meta.method.groovy",
+            "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+            "punctuation.definition.decorator",
+            "support.function.any-method",
+            "text.tex support.function",
+            "text.tex punctuation.definition.function",
+            "entity.name.section.fsharp entity.name.section.fsharp",
+            "support.variable.class.function",
+            "keyword.control.cucumber.table",
+            "punctuation.decorator",
+            "source.tf support.class"
+         ],
+         "settings": {
+            "foreground": "#0095a8"
+         }
+      },
+      {
+         "name": "SUPPORT",
+         "scope": [
+            "entity.name",
+            "entity.other",
+            "support.orther.namespace.use.php",
+            "meta.use.php",
+            "support.other.namespace.php",
+            "support.type",
+            "support.class",
+            "punctuation.definition.parameters",
+            "support.function",
+            "support.function.construct",
+            "markup.changed.git_gutter",
+            "markup.underline.link",
+            "markup.underline.link.image",
+            "markup.underline",
+            "meta.symbol.namespace.clojure",
+            "entity.mime-type.apacheconf",
+            "keyword.operator.function.infix",
+            "entity.name.function.infix",
+            "entity.name.function.call.kotlin",
+            "text.tex support.function.verb",
+            "text.tex support.function.texttt",
+            "source.reason constant.language.unit",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "constant.language.unit.fsharp",
+            "source.wsd support.class.preprocessings",
+            "keyword.language.gherkin.feature.scenario",
+            "source.nim keyword.other.common.function",
+            "entity.name.type.namespace",
+            "entity.name.scope-resolution.function.call"
+         ],
+         "settings": {
+            "foreground": "#00bdd6"
+         }
+      },
+      {
+         "name": "MISC",
+         "scope": [
+            "source.js constant.other.object.key.js string.unquoted.label.js",
+            "source.js punctuation.section.embedded",
+            "punctuation.definition.template-expression",
+            "support.class",
+            "storage.type.string.python",
+            "string.interpolated.pug",
+            "support.constant.handlebars",
+            "source.clojure punctuation.section.set",
+            "source.clojure punctuation.section.metadata",
+            "entity.global.clojure",
+            "source.python meta.function-call.python support.type.python",
+            "entity.other.inherited-class.python",
+            "punctuation.definition.interpolation",
+            "punctuation.section.embedded.begin.ruby",
+            "punctuation.section.embedded.end.ruby source.ruby",
+            "support.constant.math",
+            "entity.namespace.r",
+            "meta.method-call.groovy storage.type.groovy",
+            "source.scala entity.name.class.declaration",
+            "constant.character.escape",
+            "support.function.macro.julia",
+            "string.replacement.apacheconf",
+            "storage.modifier.using.vala",
+            "constant.other.haskell",
+            "source.objc entity.name.tag",
+            "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+            "meta.embedded.line.crystal punctuation.section.embedded",
+            "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+            "punctuation.section.embedded",
+            "punctuation.section.tag",
+            "punctuation.section.embedded source.swift",
+            "variable.other.bracket punctuation.definition.variable",
+            "string.interpolated.dollar punctuation.definition.string",
+            "constant.character.escape punctuation.definition.keyword",
+            "source.ocaml entity.name.class constant.numeric",
+            "source.reason entity.name.class",
+            "keyword.format.specifier.fsharp",
+            "support.module.elm",
+            "meta.embedded.block.php punctuation.definition.variable.php",
+            "source.vala storage.type",
+            "support.variable.class.group",
+            "entity.name.type.class",
+            "source.tf meta.keyword.list",
+            "source.tf meta.keyword.map",
+            "entity.name.class.lua",
+            "markup.substitution"
+         ],
+         "settings": {
+            "foreground": "#0094f0"
+         }
+      },
+      {
+         "name": "INVALID",
+         "scope": [
+            "invalid",
+            "invalid.illegal"
+         ],
+         "settings": {
+            "foreground": "#ff530f"
+         }
+      },
+      {
+         "name": "ITALIC",
+         "scope": [
+            "comment",
+            "storage.modifier",
+            "punctuation.definition.comment",
+            "entity.other",
+            "variable.language",
+            "support.type.vendored",
+            "support.constant.vendored",
+            "markup.quote",
+            "markup.italic",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "keyword.control.clojure",
+            "source.clojure meta.symbol.dynamic",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "variable.other.member.c",
+            "support.type.core.rust",
+            "variable.other.object.property",
+            "variable.other.property",
+            "source.r meta.function.r keyword.control.r",
+            "comment.line.roxygen.r keyword",
+            "comment.line.roxygen.r variable.parameter.r",
+            "keyword.control.inheritance.coffee",
+            "comment.block.documentation.phpdoc.php keyword",
+            "keyword.other.array.phpdoc.php",
+            "storage.type.modifier",
+            "comment.block.javadoc.java keyword",
+            "comment.block.javadoc.java variable.parameter.java",
+            "keyword.operator.documentation.powershell",
+            "storage.type.scala",
+            "variable.parameter.function.language.special",
+            "comment.block.documentation.scala keyword",
+            "comment.block.documentation.scala variable.parameter",
+            "support.function.builtin.go",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.ruby",
+            "source.vala storage.type.generic",
+            "constant.other.table-name",
+            "constant.other.placeholder",
+            "variable.other.field",
+            "entity.alias.import.go",
+            "source.swift keyword.other.declaration-specifier",
+            "support.variable.swift",
+            "keyword.other.capture-specifier",
+            "text.tex support.function.emph",
+            "constant.other.math",
+            "support.function.textit",
+            "entity.name.footnote",
+            "entity.name.function.directive.graphql",
+            "source.graphql support.type.enum",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "abstract.definition.fsharp keyword",
+            "abstract.definition.fsharp entity",
+            "function.anonymous keyword",
+            "entity.name.record.field.accessor.elm",
+            "support.type.primitive",
+            "support.type.builtin",
+            "keyword.type.cs",
+            "storage.type.built-in",
+            "storage.type.primitive",
+            "source.python support.type.python",
+            "storage.type.core.rust",
+            "source.swift support.type",
+            "source.go storage.type",
+            "storage.type.php",
+            "storage.type.function.kotlin",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "variable.other.member",
+            "keyword.other.import",
+            "keyword.package",
+            "keyword.import",
+            "source.wsd keyword.control.diagram",
+            "keyword.language.gherkin.feature.step",
+            "source.hlsl storage.type.basic",
+            "source.apex keyword.type",
+            "sharing.modifier",
+            "source.nim storage.type.concrete",
+            "meta.preprocessor.pragma.nim",
+            "storage.type.integral",
+            "entity.name.scope-resolution.function.call",
+            "support.class.builtin",
+            "comment.block.documentation storage.type.class",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "meta.import keyword.control",
+            "keyword.control.export",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "keyword.local.lua",
+            "markup.mark.constrained markup.mark",
+            "markup.block.open",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric",
+            "source.zig keyword.type",
+            "source.zig keyword.storage",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "fontStyle": "italic"
+         }
+      },
+      {
+         "name": "BOLD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.operator",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.type.function.arrow",
+            "constant.other.color",
+            "punctuation.accessor",
+            "entity.name.section",
+            "markdown.heading",
+            "markup.inline.raw punctuation.definition.raw",
+            "markup.heading",
+            "storage.type.function.pug",
+            "storage.type.function.python",
+            "storage.type.annotation",
+            "punctuation.bracket.angle",
+            "keyword.other.new",
+            "storage.type.generic.wildcard",
+            "source.go keyword.operator",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "variable.parameter",
+            "support.function.builtin.rust",
+            "storage.type.function.coffee",
+            "entity.name.variable.parameter",
+            "punctuation.separator.hash.cs",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "meta.function.parameters variable.other",
+            "entity.name.type.annotation.kotlin",
+            "storage.type.objc",
+            "parameter.variable.function",
+            "markup punctuation.definition",
+            "punctuation.section.directive",
+            "punctuation.definition.preprocessor",
+            "source.ruby punctuation.definition.variable",
+            "support.function.textbf",
+            "source.graphql support.type.builtin",
+            "source.ocaml variable.interpolation string",
+            "entity.name.function.definition.special.constructor",
+            "entity.name.function.definition.special.member.destructor.",
+            "meta.function.parameters variable punctuation.definition.variable.php",
+            "source.wsd keyword.other.activity",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby",
+            "keyword.function.go",
+            "keyword.other.fn.rust",
+            "markup.other.anchor",
+            "markup.list.bullet",
+            "markup.list punctuation.definition",
+            "keyword.control.default",
+            "punctuation.section",
+            "punctuation.separator",
+            "punctuation.terminator",
+            "markup.bold.markdown",
+            "source.zig storage.type.function"
+         ],
+         "settings": {
+            "fontStyle": "bold"
+         }
+      },
+      {
+         "name": "BOLD-ITALIC",
+         "scope": [
+            "markup.quote markup.bold",
+            "text.html punctuation.section.embedded",
+            "variable.other.c",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "source.rust meta.attribute.rust",
+            "meta.attribute.id entity.other.attribute-name",
+            "source.ocaml punctuation.definition.tag emphasis",
+            "source.tf entity.name",
+            "markup.quote punctuation.definition",
+            "markup.fenced_code punctuation.definition",
+            "fenced_code.block.language"
+         ],
+         "settings": {
+            "fontStyle": "bold italic"
+         }
+      },
+      {
+         "name": "NORMAL",
+         "scope": [
+            "keyword.begin.tag.ejs",
+            "source.python meta.function.decorator.python support.type.python",
+            "source.cs keyword.other",
+            "keyword.other.var.cs",
+            "source.go keyword",
+            "storage.modifier.static.rust",
+            "variable.parameter.r",
+            "variable.parameter.handlebars",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "meta.class.identifier storage.modifier",
+            "keyword.operator.other.powershell",
+            "source.css variable.parameter",
+            "string.interpolated variable.parameter",
+            "source.apacheconf keyword",
+            "keyword.other.julia",
+            "storage.modifier.using.vala",
+            "source.objc keyword.other.property.attribute",
+            "source.sql keyword.other",
+            "keyword.other.using.vala",
+            "keyword.operator.function.infix",
+            "keyword.control.directive",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "entity.name.function.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "punctuation.definition.variable",
+            "entity.name.section.latex",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "keyword.format.specifier.fsharp",
+            "entity.name.section.fsharp",
+            "binding.fsharp keyword",
+            "binding.fsharp keyword.symbol",
+            "record.fsharp keyword",
+            "keyword.symbol.fsharp",
+            "entity.name.section.fsharp keyword",
+            "namespace.open.fsharp keyword",
+            "namespace.open.fsharp entity",
+            "storage.type",
+            "source.cpp keyword.other",
+            "source.c keyword.other",
+            "keyword.other.unit",
+            "storage.modifier.array.bracket",
+            "meta.import.haskell keyword",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other",
+            "keyword.other.skinparam",
+            "source.css keyword.control",
+            "source.css keyword.operator",
+            "keyword.language.gherkin.feature.scenario",
+            "keyword.control.cucumber.table",
+            "source.toml entity.other.attribute-name",
+            "source.toml keyword",
+            "keyword.other.nim",
+            "source.nim keyword.other.common.function",
+            "source.nim keyword.other",
+            "source.scala keyword.declaration",
+            "source.scala entity.name.class.declaration",
+            "keyword.control.lua",
+            "source.css punctuation.section",
+            "punctuation.section.embedded",
+            "source.c punctuation.section",
+            "source.cpp punctuation.section",
+            "source.java punctuation.section",
+            "source.php punctuation.section",
+            "source.powershell punctuation.section",
+            "source.r punctuation.section",
+            "source.ruby punctuation.section",
+            "source.swift punctuation.section",
+            "source.objc punctuation.section",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.default",
+            "source.zig keyword.statement",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "fontStyle": ""
+         }
+      },
+      {
+         "name": "STRIKETHROUGH",
+         "scope": [
+            "markup.strikethrough"
+         ],
+         "settings": {
+            "fontStyle": "strikethrough"
+         }
+      }
+   ]
+}

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

@@ -0,0 +1,1108 @@
+{
+    "name": "Noctis Lux",
+    "type": "light",
+    "colors": {
+        "selection.background": "#169fb155",
+        "descriptionForeground": "#929ea0",
+        "errorForeground": "#ff4000",
+        "widget.shadow": "#00000055",
+        "editor.background": "#fef8ec",
+        "editor.foreground": "#005661",
+        "editorLineNumber.foreground": "#a0abac",
+        "editorLineNumber.activeForeground": "#0099ad",
+        "editorCursor.foreground": "#0092a8",
+        "badge.background": "#0099ad",
+        "badge.foreground": "#fef8ec",
+        "activityBar.background": "#fef8ec",
+        "activityBar.dropBackground": "#0099ad65",
+        "activityBar.foreground": "#0099ad",
+        "activityBar.border": "#ece2c600",
+        "activityBarBadge.background": "#0099ad",
+        "activityBarBadge.foreground": "#fef8ec",
+        "activityBar.activeBackground": "#0099ad33",
+        "activityBar.activeBorder": "#0099ad",
+        "sideBar.background": "#f9f1e1",
+        "sideBar.foreground": "#888477",
+        "sideBar.border": "#ece2c600",
+        "sideBar.dropBackground": "#f9f1e1",
+        "sideBarTitle.foreground": "#888477",
+        "sideBarSectionHeader.background": "#f2e7ca",
+        "sideBarSectionHeader.foreground": "#888477",
+        "statusBar.background": "#f0e9d6",
+        "statusBar.foreground": "#0099ad",
+        "statusBar.border": "#ece2c600",
+        "statusBar.debuggingBackground": "#f9f1e1",
+        "statusBar.debuggingForeground": "#e9498150",
+        "statusBar.debuggingBorder": "#e94981af",
+        "statusBar.noFolderForeground": "#87a7ab",
+        "statusBar.noFolderBackground": "#f9f1e1",
+        "statusBar.noFolderBorder": "#f9f1e1",
+        "statusBarItem.activeBackground": "#dfeff1",
+        "statusBarItem.hoverBackground": "#d1e8eb",
+        "statusBarItem.prominentBackground": "#c1d4d7",
+        "statusBarItem.prominentHoverBackground": "#bfdee3",
+        "button.background": "#099099",
+        "button.foreground": "#f1f1f1",
+        "button.hoverBackground": "#0cc",
+        "dropdown.background": "#fef8ec",
+        "dropdown.border": "#fef8ec",
+        "dropdown.foreground": "#005661",
+        "editorMarkerNavigation.background": "#3a3a5e29",
+        "editorMarkerNavigationError.background": "#ff4000",
+        "editorMarkerNavigationWarning.background": "#e69533",
+        "editorError.border": "#fef8ec",
+        "editorError.foreground": "#ff4000",
+        "editorWarning.border": "#fef8ec",
+        "editorWarning.foreground": "#e69533",
+        "editorInfo.border": "#fef8ec",
+        "editorInfo.foreground": "#00c6e0",
+        "editorHint.border": "#58cc6d00",
+        "editorHint.foreground": "#58cc6d",
+        "editorGroup.emptyBackground": "#b8ae9333",
+        "editorGroup.border": "#f0e7d1",
+        "editorGroup.dropBackground": "#b8ae9333",
+        "editorGroupHeader.noTabsBackground": "#f0e9d6",
+        "editorGroupHeader.tabsBackground": "#f0e9d6",
+        "editorGroupHeader.tabsBorder": "#f0e9d600",
+        "tab.activeBackground": "#fef8ec",
+        "tab.unfocusedActiveBackground": "#f7f2e3",
+        "tab.activeForeground": "#0099ad",
+        "tab.border": "#e6d7b2",
+        "tab.inactiveBackground": "#f0e9d6",
+        "tab.inactiveForeground": "#888477",
+        "tab.unfocusedActiveForeground": "#888477",
+        "tab.unfocusedInactiveForeground": "#888477",
+        "tab.activeBorderTop": "#00c6e0",
+        "tab.activeModifiedBorder": "#00b368",
+        "tab.activeBorder": "#fef8ec",
+        "tab.unfocusedActiveBorder": "#fef8ec00",
+        "tab.unfocusedHoverBackground": "#0099ad21",
+        "textBlockQuote.background": "#f9f1e1",
+        "textBlockQuote.border": "#00899e",
+        "textCodeBlock.background": "#f9f1e1",
+        "textLink.activeForeground": "#00c6e0",
+        "textLink.foreground": "#00c6e0",
+        "textPreformat.foreground": "#e9a149",
+        "textSeparator.foreground": "#f9f1e1",
+        "walkThrough.embeddedEditorBackground": "#f9f1e1",
+        "welcomePage.buttonBackground": "#f9f1e1",
+        "welcomePage.buttonHoverBackground": "#e1e0d0",
+        "input.background": "#fef8ec",
+        "input.border": "#f2edde",
+        "input.foreground": "#6a7a7c",
+        "input.placeholderForeground": "#9fabad",
+        "inputOption.activeBorder": "#0099ad",
+        "inputValidation.errorBackground": "#ff400041",
+        "inputValidation.errorBorder": "#ff4000",
+        "inputValidation.infoBackground": "#00c6e0cc",
+        "inputValidation.infoBorder": "#00c6e0",
+        "inputValidation.warningBackground": "#ffa587cc",
+        "inputValidation.warningBorder": "#ffa487",
+        "editorWidget.background": "#f2edde",
+        "editorWidget.border": "#ece2c600",
+        "editorHoverWidget.background": "#f2edde",
+        "editorHoverWidget.border": "#ece2c600",
+        "editorSuggestWidget.background": "#f2edde",
+        "editorSuggestWidget.border": "#ece2c600",
+        "editorSuggestWidget.foreground": "#6a7a7c",
+        "editorSuggestWidget.highlightForeground": "#0099ad",
+        "editorSuggestWidget.selectedBackground": "#dbfaff",
+        "editorGutter.background": "#fef8ec",
+        "editorGutter.addedBackground": "#8ce99a",
+        "editorGutter.deletedBackground": "#ff4000",
+        "editorGutter.modifiedBackground": "#e9a149",
+        "editor.selectionBackground": "#ade2eb77",
+        "editor.selectionHighlightBackground": "#14a5ff33",
+        "editor.selectionHighlightBorder": "#14a5ff00",
+        "editor.inactiveSelectionBackground": "#ade2eb55",
+        "editor.wordHighlightStrongBackground": "#b5890027",
+        "editor.wordHighlightStrongBorder": "#b5890000",
+        "editor.wordHighlightBackground": "#e9a14922",
+        "editor.wordHighlightBorder": "#e9a14900",
+        "editor.findMatchBackground": "#8ce99a55",
+        "editor.findMatchBorder": "#8ce99a00",
+        "editor.findMatchHighlightBackground": "#148f9f33",
+        "editor.findMatchHighlightBorder": "#148f9f00",
+        "editor.findRangeHighlightBackground": "#99e62a55",
+        "editor.findRangeHighlightBorder": "#58CC6D00",
+        "editor.hoverHighlightBackground": "#0099ad3f",
+        "editor.lineHighlightBackground": "#d1ebefcc",
+        "editor.lineHighlightBorder": "#d1ebef00",
+        "editor.rangeHighlightBackground": "#f1e9d5a1",
+        "editorLink.activeForeground": "#14a5ff",
+        "editorWhitespace.foreground": "#d3cec5bb",
+        "editorIndentGuide.background": "#d3cec5aa",
+        "editorIndentGuide.activeBackground": "#88adc3",
+        "editorBracketMatch.background": "#0099ad20",
+        "editorBracketMatch.border": "#0099ad",
+        "editorRuler.foreground": "#f1e6d0",
+        "editorCodeLens.foreground": "#77aaca",
+        "terminal.ansiBlack": "#003b42",
+        "terminal.ansiRed": "#e34e1c",
+        "terminal.ansiGreen": "#00b368",
+        "terminal.ansiYellow": "#f49725",
+        "terminal.ansiBlue": "#0094f0",
+        "terminal.ansiMagenta": "#ff5792",
+        "terminal.ansiCyan": "#00bdd6",
+        "terminal.ansiWhite": "#8ca6a6",
+        "terminal.ansiBrightBlack": "#004d57",
+        "terminal.ansiBrightRed": "#ff4000",
+        "terminal.ansiBrightGreen": "#00d17a",
+        "terminal.ansiBrightYellow": "#ff8c00",
+        "terminal.ansiBrightBlue": "#0fa3ff",
+        "terminal.ansiBrightMagenta": "#ff6b9f",
+        "terminal.ansiBrightCyan": "#00cbe6",
+        "terminal.ansiBrightWhite": "#bbc3c4",
+        "terminal.background": "#f6edda",
+        "terminal.foreground": "#005661",
+        "terminalCursor.background": "#f6edda",
+        "terminalCursor.foreground": "#005661",
+        "merge.border": "#fef8ec00",
+        "merge.currentContentBackground": "#33e7ff33",
+        "merge.currentHeaderBackground": "#33e7ff55",
+        "merge.incomingContentBackground": "#9d92f233",
+        "merge.incomingHeaderBackground": "#9d92f255",
+        "merge.commonContentBackground": "#ffc18033",
+        "merge.commonHeaderBackground": "#ffc18055",
+        "editorOverviewRuler.currentContentForeground": "#33e7ff55",
+        "editorOverviewRuler.incomingContentForeground": "#9d92f255",
+        "editorOverviewRuler.commonContentForeground": "#ffc18055",
+        "editorOverviewRuler.border": "#fef8ec",
+        "notificationCenter.border": "#f2edde",
+        "notificationCenterHeader.foreground": "#005661",
+        "notificationCenterHeader.background": "#f2edde",
+        "notificationToast.border": "#f2edde",
+        "notifications.foreground": "#005661",
+        "notifications.background": "#f2edde",
+        "notifications.border": "#f2edde",
+        "notificationLink.foreground": "#005661",
+        "diffEditor.insertedTextBackground": "#14b83230",
+        "diffEditor.removedTextBackground": "#BB1F0522",
+        "debugToolBar.background": "#f9f1e1",
+        "debugExceptionWidget.background": "#f9f1e1",
+        "debugExceptionWidget.border": "#00899e",
+        "extensionButton.prominentBackground": "#099099",
+        "extensionButton.prominentForeground": "#e5f5f5",
+        "extensionButton.prominentHoverBackground": "#0cc",
+        "focusBorder": "#f2edde",
+        "foreground": "#005661",
+        "panel.background": "#f6edda",
+        "panel.border": "#00c6e0",
+        "panelTitle.activeBorder": "#00c6e0",
+        "panelTitle.activeForeground": "#0099ad",
+        "panelTitle.inactiveForeground": "#888477",
+        "peekView.border": "#0099ad",
+        "peekViewEditor.background": "#fff7e5",
+        "peekViewEditor.matchHighlightBackground": "#148f9f33",
+        "peekViewEditor.matchHighlightBorder": "#148f9f79",
+        "peekViewEditorGutter.background": "#fff7e5",
+        "peekViewResult.background": "#f9f1e1",
+        "peekViewResult.fileForeground": "#e9a149",
+        "peekViewResult.lineForeground": "#87a7ab",
+        "peekViewResult.matchHighlightBackground": "#f2edde",
+        "peekViewResult.selectionBackground": "#f2edde",
+        "peekViewResult.selectionForeground": "#6a7a7c",
+        "peekViewTitle.background": "#f9f1e1",
+        "peekViewTitleDescription.foreground": "#87a7ab",
+        "peekViewTitleLabel.foreground": "#e9a149",
+        "progressBar.background": "#00c6e0",
+        "scrollbar.shadow": "#00000055",
+        "scrollbarSlider.activeBackground": "#0099adad",
+        "scrollbarSlider.background": "#6a90955b",
+        "scrollbarSlider.hoverBackground": "#0099ad62",
+        "gitDecoration.addedResourceForeground": "#009456",
+        "gitDecoration.modifiedResourceForeground": "#14b832",
+        "gitDecoration.deletedResourceForeground": "#ff4000",
+        "gitDecoration.untrackedResourceForeground": "#00c6e0",
+        "gitDecoration.ignoredResourceForeground": "#a8a28faa",
+        "gitDecoration.conflictingResourceForeground": "#e9a149",
+        "pickerGroup.border": "#00c6e0",
+        "pickerGroup.foreground": "#0099ad",
+        "list.activeSelectionBackground": "#b6e1e7",
+        "list.activeSelectionForeground": "#005661",
+        "list.dropBackground": "#cdcbb2",
+        "list.focusBackground": "#bee3ea",
+        "list.focusForeground": "#005661",
+        "list.highlightForeground": "#0099ad",
+        "list.hoverBackground": "#d2f3f9",
+        "list.hoverForeground": "#005661",
+        "list.inactiveFocusBackground": "#c9eaed",
+        "list.inactiveSelectionBackground": "#d5eef1",
+        "list.inactiveSelectionForeground": "#949384",
+        "list.errorForeground": "#c9481d",
+        "list.warningForeground": "#e07a52",
+        "listFilterWidget.background": "#d5eef1",
+        "listFilterWidget.outline": "#14b832",
+        "listFilterWidget.noMatchesOutline": "#ff4000",
+        "tree.indentGuidesStroke": "#d3cec5",
+        "settings.headerForeground": "#004d57",
+        "settings.modifiedItemIndicator": "#00bd23",
+        "settings.dropdownListBorder": "#ade2eb88",
+        "settings.dropdownBackground": "#f2edde",
+        "settings.dropdownForeground": "#0bb",
+        "settings.dropdownBorder": "#f2edde",
+        "settings.checkboxBackground": "#f2edde",
+        "settings.checkboxForeground": "#0bb",
+        "settings.checkboxBorder": "#f2edde",
+        "settings.textInputBackground": "#f2edde",
+        "settings.textInputForeground": "#0bb",
+        "settings.textInputBorder": "#f2edde",
+        "settings.numberInputBackground": "#f0e7d1",
+        "settings.numberInputForeground": "#5842ff",
+        "settings.numberInputBorder": "#f0e7d1",
+        "breadcrumb.foreground": "#888477",
+        "breadcrumb.background": "#fef8ec",
+        "breadcrumb.focusForeground": "#0099ad",
+        "breadcrumb.activeSelectionForeground": "#005661",
+        "breadcrumbPicker.background": "#f2edde",
+        "titleBar.activeBackground": "#f9f1e1",
+        "titleBar.activeForeground": "#005661",
+        "titleBar.inactiveBackground": "#f9f1e1",
+        "titleBar.inactiveForeground": "#888477",
+        "menu.background": "#f2edde",
+        "menu.foreground": "#888477",
+        "menu.selectionBackground": "#d2f3f9",
+        "menu.selectionForeground": "#0099ad",
+        "menu.selectionBorder": "#d2f3f9",
+        "menubar.selectionBackground": "#d2f3f9",
+        "menubar.selectionForeground": "#0099ad",
+        "menubar.selectionBorder": "#d2f3f9",
+        "editor.snippetTabstopHighlightBackground": "#fdefd3",
+        "editor.snippetTabstopHighlightBorder": "#fdf3dd",
+        "editor.snippetFinalTabstopHighlightBackground": "#fdefd3",
+        "editor.snippetFinalTabstopHighlightBorder": "#fdf3dd",
+        "minimap.findMatchHighlight": "#0099adaa",
+        "minimap.errorHighlight": "#ff4000ee",
+        "minimap.warningHighlight": "#e69533ee",
+        "minimapGutter.addedBackground": "#009456",
+        "minimapGutter.modifiedBackground": "#14b832",
+        "minimapGutter.deletedBackground": "#ff4000",
+        "minimap.background": "#fef8ec99"
+    },
+    "tokenColors": [
+        {
+            "name": "COMMENT",
+            "scope": [
+                "comment",
+                "punctuation.definition.comment",
+                "punctuation.definition.tag",
+                "comment.block.documentation punctuation.definition.bracket",
+                "source.ocaml comment constant.regexp meta.separator",
+                "markup.other.anchor support.constant",
+                "markup.fenced_code",
+                "markup.fenced_code punctuation.definition",
+                "punctuation.definition.heading",
+                "punctuation.definition.bold.markdown",
+                "punctuation.definition.italic.markdown",
+                "punctuation.definition.strikethrough.markdown"
+            ],
+            "settings": {
+                "foreground": "#8ca6a6"
+            }
+        },
+        {
+            "name": "TEXT",
+            "scope": [
+                "constant.character",
+                "constant.escape",
+                "text.html.markdown",
+                "punctuation.definition.list_item",
+                "keyword.begin.tag.ejs",
+                "constant.name.attribute.tag.pug",
+                "source.clojure meta.symbol",
+                "constant.other.description.jsdoc",
+                "keyword.other.array.phpdoc.php",
+                "keyword.operator.other.powershell",
+                "meta.link.inline punctuation.definition.string",
+                "source.sql",
+                "source meta.brace",
+                "source punctuation",
+                "text.html punctuation",
+                "markup meta punctuation.definition",
+                "meta.bracket.julia",
+                "meta.array.julia",
+                "entity.name.footnote",
+                "source.ocaml punctuation.definition.tag",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "entity.other.attribute-name strong",
+                "binding.fsharp keyword.symbol.fsharp",
+                "entity.name.record.field.elm",
+                "entity.name.record.field.accessor.elm",
+                "storage.modifier.array.bracket",
+                "source.css entity.other",
+                "meta.attribute-selector punctuation.definition.entity",
+                "markup.other.anchor string",
+                "punctuation.separator",
+                "punctuation.section",
+                "punctuation.terminator"
+            ],
+            "settings": {
+                "foreground": "#004d57"
+            }
+        },
+        {
+            "name": "KEYWORD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.modifier",
+                "meta.tag.sgml",
+                "punctuation.accessor",
+                "constant.other.color",
+                "entity.name.section",
+                "markup.heading",
+                "markup.heading punctuation.definition",
+                "entity.other.attribute-name.pseudo-class",
+                "entity.other.attribute-name.pseudo-element",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "storage.type.function.pug",
+                "text.pug storage.type",
+                "text.pug meta.tag.other",
+                "source.clojure storage.control",
+                "meta.expression.clojure",
+                "punctuation.separator.slice.python",
+                "punctuation.separator.question-mark.cs",
+                "punctuation.definition.parameters.varargs",
+                "source.go keyword.operator",
+                "punctuation.separator.pointer-access",
+                "punctuation.separator.other.ruby",
+                "keyword.package",
+                "keyword.import",
+                "punctuation.definition.keyword",
+                "punctuation.separator.hash.cs",
+                "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+                "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+                "source.kotlin storage.type.import",
+                "source.kotlin storage.type.package",
+                "constant.string.documentation.powershell",
+                "punctuation.section.directive",
+                "storage.type.rust",
+                "punctuation.definition.attribute",
+                "punctuation.definition.preprocessor",
+                "punctuation.separator.namespace",
+                "punctuation.separator.method",
+                "keyword.control punctuation.definition.function",
+                "source.ocaml variable.interpolation string",
+                "source.reason variable.interpolation",
+                "punctuation.definition.directive",
+                "storage.type.modifier",
+                "keyword.other.class.fileds",
+                "source.toml entity.other.attribute-name",
+                "source.css entity.name.tag.custom",
+                "sharing.modifier",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby"
+            ],
+            "settings": {
+                "foreground": "#ff5792"
+            }
+        },
+        {
+            "name": "VARIABLE",
+            "scope": [
+                "variable",
+                "variable.object",
+                "variable.other",
+                "variable.parameter",
+                "support",
+                "entity.name.module",
+                "variable.import.parameter",
+                "variable.other.class",
+                "meta.toc-list.id.html",
+                "source.json meta.structure.dictionary.json support.type.property-name.json",
+                "meta.var.clojure",
+                "entity.name.variable",
+                "source.java meta.class.body.java",
+                "entity.name.package.go",
+                "source.c",
+                "source.cpp",
+                "source.go",
+                "source.python",
+                "meta.function-call.arguments.python",
+                "source.ruby",
+                "source.coffee.embedded.source",
+                "source.coffee",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "storage.type.annotation",
+                "punctuation.definition.annotation",
+                "source.groovy.embedded.source",
+                "punctuation.definition.variable",
+                "source.powershell",
+                "string.quoted.interpolated.vala constant.character.escape.vala",
+                "source.apacheconf",
+                "source.objc",
+                "source.crystal",
+                "string.quoted.double.kotlin entity.string.template.element.kotlin",
+                "entity.name.package.kotlin",
+                "meta.template.expression.kotlin",
+                "parameter.variable.function",
+                "variable.other.constant.elixir",
+                "source.elixir.embedded.source",
+                "source.sql.embedded",
+                "punctuation.definition.placeholder",
+                "source.swift",
+                "source.julia",
+                "source.shell",
+                "variable.other.normal punctuation.definition.variable.shell",
+                "source.reason variable.language",
+                "source.reason variable.language string.other.link",
+                "source.elm meta.value",
+                "source.elm meta.declaration.module",
+                "meta.embedded.block variable punctuation.definition.variable.php",
+                "string.quoted.double.class.other",
+                "source.toml keyword",
+                "support.type.nim",
+                "source.tf meta.template.expression",
+                "source.scala entity.name.import",
+                "markup.code",
+                "markup.fenced_code.block"
+            ],
+            "settings": {
+                "foreground": "#fa8900"
+            }
+        },
+        {
+            "name": "ANNOTATION",
+            "scope": [
+                "support.variable.property",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "entity.other.attribute-name.id",
+                "entity.other.attribute-name.id punctuation.definition.entity",
+                "entity.name.type.annotation.kotlin",
+                "support.type.primitive",
+                "meta.type.parameters entity.name.type",
+                "meta.type.annotation entity.name.type",
+                "punctuation.definition.typeparameters",
+                "source.python support.type.python",
+                "comment.block.documentation.phpdoc.php keyword.other.type.php",
+                "storage.type.php",
+                "keyword.type",
+                "storage.type.cs",
+                "storage.type.c",
+                "storage.type.objc",
+                "punctuation.definition.storage.type.objc",
+                "markup punctuation.definition",
+                "storage.type.powershell",
+                "comment.block.documentation entity.name.type",
+                "source.java storage.type",
+                "storage.type.primitive",
+                "source.groovy storage.type",
+                "storage.type.r",
+                "source.haskell storage.type",
+                "punctuation.separator.clause-head-body",
+                "source.go storage.type",
+                "storage.type.core.rust",
+                "storage.class.std.rust",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "support.type.vb",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "constant.other.reference",
+                "source.graphql support.type",
+                "source.reason support.type string",
+                "entity.name.type.fsharp",
+                "source.elm storage.type",
+                "storage.type.user-defined",
+                "storage.type.built-in",
+                "support.type.builtin",
+                "source.swift support.type",
+                "support.class.crystal",
+                "storage.type.integral",
+                "source.cpp storage.type.cpp",
+                "source.vala storage.type",
+                "source.hlsl storage.type.basic",
+                "source.hlsl support.type.other",
+                "source.apex storage.type",
+                "source.nim storage.type",
+                "source.cpp entity.name.type",
+                "support.class.builtin",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "markup.raw.monospace",
+                "markup.mark",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric"
+            ],
+            "settings": {
+                "foreground": "#b3694d"
+            }
+        },
+        {
+            "name": "CONSTANT",
+            "scope": [
+                "constant",
+                "variable.other.constant",
+                "support.constant",
+                "punctuation.definition.entity",
+                "constant.character.entity",
+                "support.variable.magic",
+                "markup.quote",
+                "entity.name.type.type-parameter.cs",
+                "punctuation.bracket.angle",
+                "entity.name.function.preprocessor.c",
+                "storage.type.scala",
+                "entity.helper.apacheconf",
+                "variable.language.crystal",
+                "punctuation.definition.constant",
+                "support.constant punctuation.definition.variable",
+                "constant.character.math",
+                "support.class.math",
+                "source.graphql constant.character",
+                "source.reason constant.language.list",
+                "source.cpp variable.other.enummember",
+                "support.variable.class.hideshow",
+                "entity.other.attribute-name.class",
+                "meta.attribute.id entity.other.attribute-name",
+                "text.html entity.other.attribute-name",
+                "meta.tag.attributes entity.other.attribute-name",
+                "text.xml entity.other.attribute-name",
+                "source.cs entity.other.attribute-name",
+                "constant.character.format.placeholder",
+                "constant.other.placeholder",
+                "source.vue entity.other.attribute-name",
+                "entity.other.attribute-name.mjml",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "meta.definition.attribute-entry punctuation.separator"
+            ],
+            "settings": {
+                "foreground": "#a88c00"
+            }
+        },
+        {
+            "name": "TAG",
+            "scope": [
+                "variable.language",
+                "variable.parameter.function.language.special",
+                "punctuation.definition.italic",
+                "punctuation.definition.bold",
+                "entity.name.tag",
+                "variable.language punctuation.definition.variable",
+                "keyword.control.clojure",
+                "support.type.exception.python",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "keyword.other.var.cs",
+                "storage.modifier.super",
+                "source.go keyword",
+                "keyword.function.go",
+                "meta.separator",
+                "keyword.other.fn.rust",
+                "storage.modifier.static.rust",
+                "source.r meta.function.r keyword.control.r",
+                "storage.type.def",
+                "meta.class.identifier storage.modifier",
+                "source.scala keyword.declaration",
+                "storage.type",
+                "comment.block.documentation punctuation.definition.block.tag",
+                "comment.block.documentation punctuation.definition.inline.tag",
+                "entity.tag.apacheconf",
+                "keyword.other.julia",
+                "source.julia storage.modifier",
+                "constant.language.empty-list.haskell",
+                "meta.function.powershell storage.type.powershell",
+                "keyword.control.fun",
+                "punctuation.terminator.function",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml storage.type markup.underline",
+                "binding.fsharp keyword",
+                "function.anonymous keyword",
+                "function.anonymous keyword.symbol.fsharp",
+                "meta.embedded.block variable.language punctuation.definition.variable.php",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other.class",
+                "source.wsd keyword.other.linebegin",
+                "keyword.other.skinparam.keyword",
+                "keyword.other.nim",
+                "markup.deleted.diff",
+                "source.tf support.class.variable",
+                "meta.function.lua keyword.control.lua",
+                "markup.block entity.name.tag",
+                "markup.meta.attribute-list",
+                "source.zig keyword.default",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "foreground": "#e64100"
+            }
+        },
+        {
+            "name": "STRING",
+            "scope": [
+                "string",
+                "punctuation.definition.string",
+                "source.css support.constant",
+                "entity.name.import.go",
+                "markup.raw.texttt",
+                "markup.inserted.diff",
+                "source.scala punctuation.definition.character",
+                "constant.character.literal.scala",
+                "source.tf entity.name"
+            ],
+            "settings": {
+                "foreground": "#00b368"
+            }
+        },
+        {
+            "name": "STRINGINTERPOLATED",
+            "scope": [
+                "string.template",
+                "punctuation.definition.string.template",
+                "string.interpolated.python string.quoted.single.python",
+                "string.quoted.double.heredoc",
+                "string.quoted.interpolated.vala",
+                "string.quoted.interpolated.vala punctuation.definition.string",
+                "string.regexp.apacheconf",
+                "markup.inline.raw.string",
+                "markup.inline.raw punctuation.definition.raw",
+                "string.quoted.double.interpolated.crystal",
+                "string.quoted.double.interpolated.crystal punctuation.definition.string",
+                "text.tex markup.raw"
+            ],
+            "settings": {
+                "foreground": "#009456"
+            }
+        },
+        {
+            "name": "NUMBER",
+            "scope": [
+                "constant.numeric",
+                "constant.language",
+                "punctuation.separator.decimal.period.php",
+                "keyword.operator.null-conditional.cs",
+                "punctuation.separator.question-mark.cs",
+                "constant.integer.apacheconf",
+                "keyword.operator.nullable-type",
+                "constant.language punctuation.definition.variable",
+                "constant.others.fsharp",
+                "keyword.other.unit",
+                "string.quoted.double.skinparam.value",
+                "source.toml constant",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "foreground": "#5842ff"
+            }
+        },
+        {
+            "name": "FUNCTION",
+            "scope": [
+                "variable.function",
+                "support.type.property-name",
+                "entity.name.function",
+                "string.other.link",
+                "markup.link",
+                "support.type.vendored",
+                "support.other.variable",
+                "meta.function-call.generic.python",
+                "meta.method-call.groovy meta.method.groovy",
+                "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+                "punctuation.definition.decorator",
+                "support.function.any-method",
+                "text.tex support.function",
+                "text.tex punctuation.definition.function",
+                "entity.name.section.fsharp entity.name.section.fsharp",
+                "support.variable.class.function",
+                "keyword.control.cucumber.table",
+                "punctuation.decorator",
+                "source.tf support.class"
+            ],
+            "settings": {
+                "foreground": "#0095a8"
+            }
+        },
+        {
+            "name": "SUPPORT",
+            "scope": [
+                "entity.name",
+                "entity.other",
+                "support.orther.namespace.use.php",
+                "meta.use.php",
+                "support.other.namespace.php",
+                "support.type",
+                "support.class",
+                "punctuation.definition.parameters",
+                "support.function",
+                "support.function.construct",
+                "markup.changed.git_gutter",
+                "markup.underline.link",
+                "markup.underline.link.image",
+                "markup.underline",
+                "meta.symbol.namespace.clojure",
+                "entity.mime-type.apacheconf",
+                "keyword.operator.function.infix",
+                "entity.name.function.infix",
+                "entity.name.function.call.kotlin",
+                "text.tex support.function.verb",
+                "text.tex support.function.texttt",
+                "source.reason constant.language.unit",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "constant.language.unit.fsharp",
+                "source.wsd support.class.preprocessings",
+                "keyword.language.gherkin.feature.scenario",
+                "source.nim keyword.other.common.function",
+                "entity.name.type.namespace",
+                "entity.name.scope-resolution.function.call"
+            ],
+            "settings": {
+                "foreground": "#00bdd6"
+            }
+        },
+        {
+            "name": "MISC",
+            "scope": [
+                "source.js constant.other.object.key.js string.unquoted.label.js",
+                "source.js punctuation.section.embedded",
+                "punctuation.definition.template-expression",
+                "support.class",
+                "storage.type.string.python",
+                "string.interpolated.pug",
+                "support.constant.handlebars",
+                "source.clojure punctuation.section.set",
+                "source.clojure punctuation.section.metadata",
+                "entity.global.clojure",
+                "source.python meta.function-call.python support.type.python",
+                "entity.other.inherited-class.python",
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.section.embedded.end.ruby source.ruby",
+                "support.constant.math",
+                "entity.namespace.r",
+                "meta.method-call.groovy storage.type.groovy",
+                "source.scala entity.name.class.declaration",
+                "constant.character.escape",
+                "support.function.macro.julia",
+                "string.replacement.apacheconf",
+                "storage.modifier.using.vala",
+                "constant.other.haskell",
+                "source.objc entity.name.tag",
+                "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+                "meta.embedded.line.crystal punctuation.section.embedded",
+                "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+                "punctuation.section.embedded",
+                "punctuation.section.tag",
+                "punctuation.section.embedded source.swift",
+                "variable.other.bracket punctuation.definition.variable",
+                "string.interpolated.dollar punctuation.definition.string",
+                "constant.character.escape punctuation.definition.keyword",
+                "source.ocaml entity.name.class constant.numeric",
+                "source.reason entity.name.class",
+                "keyword.format.specifier.fsharp",
+                "support.module.elm",
+                "meta.embedded.block.php punctuation.definition.variable.php",
+                "source.vala storage.type",
+                "support.variable.class.group",
+                "entity.name.type.class",
+                "source.tf meta.keyword.list",
+                "source.tf meta.keyword.map",
+                "entity.name.class.lua",
+                "markup.substitution"
+            ],
+            "settings": {
+                "foreground": "#0094f0"
+            }
+        },
+        {
+            "name": "INVALID",
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#ff530f"
+            }
+        },
+        {
+            "name": "ITALIC",
+            "scope": [
+                "comment",
+                "storage.modifier",
+                "punctuation.definition.comment",
+                "entity.other",
+                "variable.language",
+                "support.type.vendored",
+                "support.constant.vendored",
+                "markup.quote",
+                "markup.italic",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "keyword.control.clojure",
+                "source.clojure meta.symbol.dynamic",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "variable.other.member.c",
+                "support.type.core.rust",
+                "variable.other.object.property",
+                "variable.other.property",
+                "source.r meta.function.r keyword.control.r",
+                "comment.line.roxygen.r keyword",
+                "comment.line.roxygen.r variable.parameter.r",
+                "keyword.control.inheritance.coffee",
+                "comment.block.documentation.phpdoc.php keyword",
+                "keyword.other.array.phpdoc.php",
+                "storage.type.modifier",
+                "comment.block.javadoc.java keyword",
+                "comment.block.javadoc.java variable.parameter.java",
+                "keyword.operator.documentation.powershell",
+                "storage.type.scala",
+                "variable.parameter.function.language.special",
+                "comment.block.documentation.scala keyword",
+                "comment.block.documentation.scala variable.parameter",
+                "support.function.builtin.go",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.ruby",
+                "source.vala storage.type.generic",
+                "constant.other.table-name",
+                "constant.other.placeholder",
+                "variable.other.field",
+                "entity.alias.import.go",
+                "source.swift keyword.other.declaration-specifier",
+                "support.variable.swift",
+                "keyword.other.capture-specifier",
+                "text.tex support.function.emph",
+                "constant.other.math",
+                "support.function.textit",
+                "entity.name.footnote",
+                "entity.name.function.directive.graphql",
+                "source.graphql support.type.enum",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "abstract.definition.fsharp keyword",
+                "abstract.definition.fsharp entity",
+                "function.anonymous keyword",
+                "entity.name.record.field.accessor.elm",
+                "support.type.primitive",
+                "support.type.builtin",
+                "keyword.type.cs",
+                "storage.type.built-in",
+                "storage.type.primitive",
+                "source.python support.type.python",
+                "storage.type.core.rust",
+                "source.swift support.type",
+                "source.go storage.type",
+                "storage.type.php",
+                "storage.type.function.kotlin",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "variable.other.member",
+                "keyword.other.import",
+                "keyword.package",
+                "keyword.import",
+                "source.wsd keyword.control.diagram",
+                "keyword.language.gherkin.feature.step",
+                "source.hlsl storage.type.basic",
+                "source.apex keyword.type",
+                "sharing.modifier",
+                "source.nim storage.type.concrete",
+                "meta.preprocessor.pragma.nim",
+                "storage.type.integral",
+                "entity.name.scope-resolution.function.call",
+                "support.class.builtin",
+                "comment.block.documentation storage.type.class",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "meta.import keyword.control",
+                "keyword.control.export",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "keyword.local.lua",
+                "markup.mark.constrained markup.mark",
+                "markup.block.open",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric",
+                "source.zig keyword.type",
+                "source.zig keyword.storage",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "BOLD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.operator",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.type.function.arrow",
+                "constant.other.color",
+                "punctuation.accessor",
+                "entity.name.section",
+                "markdown.heading",
+                "markup.inline.raw punctuation.definition.raw",
+                "markup.heading",
+                "storage.type.function.pug",
+                "storage.type.function.python",
+                "storage.type.annotation",
+                "punctuation.bracket.angle",
+                "keyword.other.new",
+                "storage.type.generic.wildcard",
+                "source.go keyword.operator",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "variable.parameter",
+                "support.function.builtin.rust",
+                "storage.type.function.coffee",
+                "entity.name.variable.parameter",
+                "punctuation.separator.hash.cs",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "meta.function.parameters variable.other",
+                "entity.name.type.annotation.kotlin",
+                "storage.type.objc",
+                "parameter.variable.function",
+                "markup punctuation.definition",
+                "punctuation.section.directive",
+                "punctuation.definition.preprocessor",
+                "source.ruby punctuation.definition.variable",
+                "support.function.textbf",
+                "source.graphql support.type.builtin",
+                "source.ocaml variable.interpolation string",
+                "entity.name.function.definition.special.constructor",
+                "entity.name.function.definition.special.member.destructor.",
+                "meta.function.parameters variable punctuation.definition.variable.php",
+                "source.wsd keyword.other.activity",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby",
+                "keyword.function.go",
+                "keyword.other.fn.rust",
+                "markup.other.anchor",
+                "markup.list.bullet",
+                "markup.list punctuation.definition",
+                "keyword.control.default",
+                "punctuation.section",
+                "punctuation.separator",
+                "punctuation.terminator",
+                "markup.bold.markdown",
+                "source.zig storage.type.function"
+            ],
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "BOLD-ITALIC",
+            "scope": [
+                "markup.quote markup.bold",
+                "text.html punctuation.section.embedded",
+                "variable.other.c",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "source.rust meta.attribute.rust",
+                "meta.attribute.id entity.other.attribute-name",
+                "source.ocaml punctuation.definition.tag emphasis",
+                "source.tf entity.name",
+                "markup.quote punctuation.definition",
+                "markup.fenced_code punctuation.definition",
+                "fenced_code.block.language"
+            ],
+            "settings": {
+                "fontStyle": "bold italic"
+            }
+        },
+        {
+            "name": "NORMAL",
+            "scope": [
+                "keyword.begin.tag.ejs",
+                "source.python meta.function.decorator.python support.type.python",
+                "source.cs keyword.other",
+                "keyword.other.var.cs",
+                "source.go keyword",
+                "storage.modifier.static.rust",
+                "variable.parameter.r",
+                "variable.parameter.handlebars",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "meta.class.identifier storage.modifier",
+                "keyword.operator.other.powershell",
+                "source.css variable.parameter",
+                "string.interpolated variable.parameter",
+                "source.apacheconf keyword",
+                "keyword.other.julia",
+                "storage.modifier.using.vala",
+                "source.objc keyword.other.property.attribute",
+                "source.sql keyword.other",
+                "keyword.other.using.vala",
+                "keyword.operator.function.infix",
+                "keyword.control.directive",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "entity.name.function.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "punctuation.definition.variable",
+                "entity.name.section.latex",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "keyword.format.specifier.fsharp",
+                "entity.name.section.fsharp",
+                "binding.fsharp keyword",
+                "binding.fsharp keyword.symbol",
+                "record.fsharp keyword",
+                "keyword.symbol.fsharp",
+                "entity.name.section.fsharp keyword",
+                "namespace.open.fsharp keyword",
+                "namespace.open.fsharp entity",
+                "storage.type",
+                "source.cpp keyword.other",
+                "source.c keyword.other",
+                "keyword.other.unit",
+                "storage.modifier.array.bracket",
+                "meta.import.haskell keyword",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other",
+                "keyword.other.skinparam",
+                "source.css keyword.control",
+                "source.css keyword.operator",
+                "keyword.language.gherkin.feature.scenario",
+                "keyword.control.cucumber.table",
+                "source.toml entity.other.attribute-name",
+                "source.toml keyword",
+                "keyword.other.nim",
+                "source.nim keyword.other.common.function",
+                "source.nim keyword.other",
+                "source.scala keyword.declaration",
+                "source.scala entity.name.class.declaration",
+                "keyword.control.lua",
+                "source.css punctuation.section",
+                "punctuation.section.embedded",
+                "source.c punctuation.section",
+                "source.cpp punctuation.section",
+                "source.java punctuation.section",
+                "source.php punctuation.section",
+                "source.powershell punctuation.section",
+                "source.r punctuation.section",
+                "source.ruby punctuation.section",
+                "source.swift punctuation.section",
+                "source.objc punctuation.section",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.default",
+                "source.zig keyword.statement",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "STRIKETHROUGH",
+            "scope": ["markup.strikethrough"],
+            "settings": {
+                "fontStyle": "strikethrough"
+            }
+        }
+    ]
+}

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

@@ -0,0 +1,1113 @@
+{
+   "name": "Noctis Minimus",
+   "type": "dark",
+   "colors": {
+      "selection.background": "#5998c077",
+      "descriptionForeground": "#6496b4",
+      "errorForeground": "#b96346",
+      "widget.shadow": "#00000044",
+      "editor.background": "#1b2932",
+      "editor.foreground": "#c5cdd3",
+      "editorLineNumber.foreground": "#5d6e79",
+      "editorLineNumber.activeForeground": "#6496b4",
+      "editorCursor.foreground": "#b3d2e6",
+      "badge.background": "#5998c0",
+      "badge.foreground": "#101213",
+      "activityBar.background": "#1b2932",
+      "activityBar.dropBackground": "#6496b465",
+      "activityBar.border": "#101213",
+      "activityBar.foreground": "#496d83",
+      "activityBar.inactiveForeground": "#496d8377",
+      "activityBarBadge.background": "#5998c0",
+      "activityBarBadge.foreground": "#101213",
+      "activityBar.activeBackground": "#5998c033",
+      "activityBar.activeBorder": "#5998c0",
+      "sideBar.background": "#17232b",
+      "sideBar.dropBackground": "#17232b",
+      "sideBar.border": "#101213",
+      "sideBar.foreground": "#96a8b6",
+      "sideBarSectionHeader.background": "#202e37",
+      "sideBarSectionHeader.foreground": "#96a8b6",
+      "sideBarTitle.foreground": "#96a8b6",
+      "sideBarSectionHeader.border": "#101213",
+      "statusBar.foreground": "#496d83",
+      "statusBar.background": "#1b2932",
+      "statusBar.border": "#101213",
+      "statusBar.debuggingBackground": "#1b2932",
+      "statusBar.debuggingForeground": "#d2799850",
+      "statusBar.debuggingBorder": "#d27998af",
+      "statusBar.noFolderForeground": "#98a6ae",
+      "statusBar.noFolderBackground": "#1b2932",
+      "statusBar.noFolderBorder": "#1b2932",
+      "statusBarItem.activeBackground": "#3d708f66",
+      "statusBarItem.hoverBackground": "#243742",
+      "statusBarItem.prominentBackground": "#152128",
+      "statusBarItem.prominentHoverBackground": "#102837",
+      "button.background": "#2e616b",
+      "button.foreground": "#ebf7ff",
+      "button.hoverBackground": "#3d818f",
+      "dropdown.background": "#202e37",
+      "dropdown.border": "#202e37",
+      "dropdown.foreground": "#6496b4",
+      "editorMarkerNavigation.background": "#43435629",
+      "editorMarkerNavigationError.background": "#b96346",
+      "editorMarkerNavigationWarning.background": "#c09159",
+      "editorError.border": "#1b2932",
+      "editorError.foreground": "#b96346",
+      "editorWarning.border": "#1b2932",
+      "editorWarning.foreground": "#c09159",
+      "editorInfo.border": "#1b2932",
+      "editorInfo.foreground": "#5998c0",
+      "editorHint.border": "#72c09f00",
+      "editorHint.foreground": "#72c09f",
+      "editorGroup.emptyBackground": "#5d6e7933",
+      "editorGroup.border": "#101213",
+      "editorGroup.dropBackground": "#5d6e7933",
+      "editorGroupHeader.noTabsBackground": "#202e37",
+      "editorGroupHeader.tabsBackground": "#24333d",
+      "editorGroupHeader.tabsBorder": "#202e37",
+      "tab.activeBackground": "#1b2932",
+      "tab.unfocusedActiveBackground": "#1e2b33",
+      "tab.activeForeground": "#5998c0",
+      "tab.border": "#101213",
+      "tab.inactiveBackground": "#202e37",
+      "tab.inactiveForeground": "#96a8b6",
+      "tab.unfocusedActiveForeground": "#96a8b6",
+      "tab.unfocusedInactiveForeground": "#96a8b6",
+      "tab.activeBorderTop": "#5998c0",
+      "tab.activeModifiedBorder": "#72c09f",
+      "tab.activeBorder": "#1b2932",
+      "tab.unfocusedActiveBorder": "#1b2932",
+      "tab.unfocusedHoverBackground": "#5998c021",
+      "textBlockQuote.background": "#1b2932",
+      "textBlockQuote.border": "#496d83",
+      "textCodeBlock.background": "#1b2932",
+      "textLink.activeForeground": "#5998c0",
+      "textLink.foreground": "#5998c0",
+      "textPreformat.foreground": "#dfc09f",
+      "textSeparator.foreground": "#1b2932",
+      "walkThrough.embeddedEditorBackground": "#1b2932",
+      "welcomePage.buttonBackground": "#0e1920",
+      "welcomePage.buttonHoverBackground": "#202e37",
+      "input.background": "#0e1920",
+      "input.border": "#1a2f3d",
+      "input.foreground": "#CDD3DE",
+      "input.placeholderForeground": "#98a6ae",
+      "inputOption.activeBorder": "#496d83",
+      "inputValidation.errorForeground": "#b96346",
+      "inputValidation.errorBackground": "#3b2016ee",
+      "inputValidation.errorBorder": "#4e291d",
+      "inputValidation.infoForeground": "#6fb0b8",
+      "inputValidation.infoBackground": "#2d575cee",
+      "inputValidation.infoBorder": "#3b7178",
+      "inputValidation.warningForeground": "#c09159",
+      "inputValidation.warningBackground": "#736759cc",
+      "inputValidation.warningBorder": "#94826b",
+      "editorWidget.background": "#202e37",
+      "editorWidget.border": "#101213",
+      "editorHoverWidget.background": "#14242e",
+      "editorHoverWidget.border": "#101213",
+      "editorSuggestWidget.background": "#14242e",
+      "editorSuggestWidget.border": "#101213",
+      "editorSuggestWidget.foreground": "#96a8b6",
+      "editorSuggestWidget.highlightForeground": "#5998c0",
+      "editorSuggestWidget.selectedBackground": "#2c414e",
+      "editorGutter.background": "#1b2932",
+      "editorGutter.addedBackground": "#a0d4a8",
+      "editorGutter.deletedBackground": "#b96346",
+      "editorGutter.modifiedBackground": "#dfc09f",
+      "editor.selectionBackground": "#496d8355",
+      "editor.selectionHighlightBackground": "#5998c033",
+      "editor.inactiveSelectionBackground": "#496d8333",
+      "editor.wordHighlightStrongBackground": "#b3994d33",
+      "editor.wordHighlightBackground": "#d3b69233",
+      "editor.findMatchBackground": "#72c09f25",
+      "editor.findMatchHighlightBackground": "#0e667179",
+      "editor.findRangeHighlightBackground": "#72c09f22",
+      "editor.hoverHighlightBackground": "#496d833f",
+      "editor.lineHighlightBackground": "#1d3544ee",
+      "editor.lineHighlightBorder": "#1d3544",
+      "editor.rangeHighlightBackground": "#72b7c022",
+      "editorLink.activeForeground": "#649fc4",
+      "editorWhitespace.foreground": "#ffffff21",
+      "editorIndentGuide.background": "#2f404b",
+      "editorIndentGuide.activeBackground": "#405f72",
+      "editorBracketMatch.background": "#496d8322",
+      "editorBracketMatch.border": "#496d83",
+      "editorRuler.foreground": "#334652",
+      "editorCodeLens.foreground": "#667c7f",
+      "terminal.ansiBlack": "#182a35",
+      "terminal.ansiRed": "#c08872",
+      "terminal.ansiGreen": "#72c09f",
+      "terminal.ansiYellow": "#c8a984",
+      "terminal.ansiBlue": "#6196b8",
+      "terminal.ansiMagenta": "#c28097",
+      "terminal.ansiCyan": "#72b7c0",
+      "terminal.ansiWhite": "#c5cdd3",
+      "terminal.ansiBrightBlack": "#425866",
+      "terminal.ansiBrightRed": "#ca8468",
+      "terminal.ansiBrightGreen": "#84c8ab",
+      "terminal.ansiBrightYellow": "#d1aa7b",
+      "terminal.ansiBrightBlue": "#68a4ca",
+      "terminal.ansiBrightMagenta": "#c88da2",
+      "terminal.ansiBrightCyan": "#84c0c8",
+      "terminal.ansiBrightWhite": "#c5d1d3",
+      "terminal.background": "#0e1920",
+      "terminal.foreground": "#c5cdd3",
+      "terminalCursor.background": "#0e1920",
+      "terminalCursor.foreground": "#c5cdd3",
+      "merge.border": "#1b293200",
+      "merge.currentContentBackground": "#a6d7dd22",
+      "merge.currentHeaderBackground": "#a6d7dd44",
+      "merge.incomingContentBackground": "#aea8dc22",
+      "merge.incomingHeaderBackground": "#aea8dc44",
+      "merge.commonContentBackground": "#dfc09f22",
+      "merge.commonHeaderBackground": "#dfc09f44",
+      "editorOverviewRuler.currentContentForeground": "#a6d7dd44",
+      "editorOverviewRuler.incomingContentForeground": "#cac4f544",
+      "editorOverviewRuler.commonContentForeground": "#dfc09f44",
+      "editorOverviewRuler.border": "#1b2932",
+      "notificationCenter.border": "#202e37",
+      "notificationCenterHeader.foreground": "#98a6ae",
+      "notificationCenterHeader.background": "#202e37",
+      "notificationToast.border": "#202e37",
+      "notifications.foreground": "#CDD3DE",
+      "notifications.background": "#202e37",
+      "notifications.border": "#202e37",
+      "notificationLink.foreground": "#98a6ae",
+      "diffEditor.insertedTextBackground": "#72c09f25",
+      "diffEditor.removedTextBackground": "#c3745530",
+      "debugToolBar.background": "#1b2932",
+      "debugExceptionWidget.background": "#1b2932",
+      "debugExceptionWidget.border": "#496d83",
+      "extensionButton.prominentBackground": "#28828a",
+      "extensionButton.prominentForeground": "#e5f5f5",
+      "extensionButton.prominentHoverBackground": "#39bac6",
+      "focusBorder": "#202e37",
+      "foreground": "#c5cdd3",
+      "panel.background": "#0e1920",
+      "panel.border": "#496d83",
+      "panelTitle.activeBorder": "#496d83",
+      "panelTitle.activeForeground": "#5998c0",
+      "panelTitle.inactiveForeground": "#5e7887",
+      "peekView.border": "#496d83",
+      "peekViewEditor.background": "#0e1c25",
+      "peekViewEditor.matchHighlightBackground": "#26526d33",
+      "peekViewEditor.matchHighlightBorder": "#3d708f",
+      "peekViewEditorGutter.background": "#0e1c25",
+      "peekViewResult.background": "#0d202b",
+      "peekViewResult.fileForeground": "#dfc09f",
+      "peekViewResult.lineForeground": "#98a6ae",
+      "peekViewResult.matchHighlightBackground": "#202e37",
+      "peekViewResult.selectionBackground": "#202e37",
+      "peekViewResult.selectionForeground": "#98a6ae",
+      "peekViewTitle.background": "#0d202b",
+      "peekViewTitleDescription.foreground": "#98a6ae",
+      "peekViewTitleLabel.foreground": "#dfc09f",
+      "progressBar.background": "#5998c0",
+      "scrollbar.shadow": "#00000044",
+      "scrollbarSlider.activeBackground": "#3f7fa677",
+      "scrollbarSlider.background": "#3f7fa633",
+      "scrollbarSlider.hoverBackground": "#3f7fa655",
+      "gitDecoration.addedResourceForeground": "#3f8d6c",
+      "gitDecoration.modifiedResourceForeground": "#72c09f",
+      "gitDecoration.deletedResourceForeground": "#b96346",
+      "gitDecoration.untrackedResourceForeground": "#6fb0b8",
+      "gitDecoration.ignoredResourceForeground": "#5b788b",
+      "gitDecoration.conflictingResourceForeground": "#dfc09f",
+      "pickerGroup.border": "#496d83",
+      "pickerGroup.foreground": "#5998c0",
+      "list.activeSelectionBackground": "#2c414e",
+      "list.activeSelectionForeground": "#ebf7ff",
+      "list.dropBackground": "#152837",
+      "list.focusBackground": "#213745",
+      "list.focusForeground": "#ebf7ff",
+      "list.highlightForeground": "#5998c0",
+      "list.hoverBackground": "#00558a",
+      "list.hoverForeground": "#ebf7ff",
+      "list.inactiveFocusBackground": "#1e2b33",
+      "list.inactiveSelectionBackground": "#22313a",
+      "list.inactiveSelectionForeground": "#c5cdd3",
+      "list.errorForeground": "#b96346",
+      "list.warningForeground": "#ffa857",
+      "listFilterWidget.background": "#152837",
+      "listFilterWidget.outline": "#72c09f",
+      "listFilterWidget.noMatchesOutline": "#b96346",
+      "tree.indentGuidesStroke": "#5d6e79",
+      "settings.headerForeground": "#c5cdd3",
+      "settings.modifiedItemIndicator": "#3f8d6c",
+      "settings.dropdownListBorder": "#2964a377",
+      "settings.dropdownBackground": "#202e37",
+      "settings.dropdownForeground": "#3d818f",
+      "settings.dropdownBorder": "#202e37",
+      "settings.checkboxBackground": "#202e37",
+      "settings.checkboxForeground": "#3d818f",
+      "settings.checkboxBorder": "#202e37",
+      "settings.textInputBackground": "#202e37",
+      "settings.textInputForeground": "#3d818f",
+      "settings.textInputBorder": "#202e37",
+      "settings.numberInputBackground": "#0e1920",
+      "settings.numberInputForeground": "#7068b1",
+      "settings.numberInputBorder": "#0e1920",
+      "breadcrumb.foreground": "#96a8b6",
+      "breadcrumb.background": "#1b2932",
+      "breadcrumb.focusForeground": "#5998c0",
+      "breadcrumb.activeSelectionForeground": "#ebf7ff",
+      "breadcrumbPicker.background": "#202e37",
+      "titleBar.activeBackground": "#1b2932",
+      "titleBar.activeForeground": "#c5cdd3",
+      "titleBar.inactiveBackground": "#1b2932",
+      "titleBar.inactiveForeground": "#96a8b6",
+      "menu.background": "#202e37",
+      "menu.foreground": "#96a8b6",
+      "menu.selectionBackground": "#213745",
+      "menu.selectionForeground": "#5998c0",
+      "menu.selectionBorder": "#213745",
+      "menu.separatorBackground": "#5998c0",
+      "menubar.selectionBackground": "#213745",
+      "menubar.selectionForeground": "#5998c0",
+      "menubar.selectionBorder": "#213745",
+      "editor.snippetTabstopHighlightBackground": "#0e1920",
+      "editor.snippetTabstopHighlightBorder": "#17232b",
+      "editor.snippetFinalTabstopHighlightBackground": "#0e1920",
+      "editor.snippetFinalTabstopHighlightBorder": "#17232b",
+      "minimap.findMatchHighlight": "#5998c0ee",
+      "minimap.errorHighlight": "#b96346ee",
+      "minimap.warningHighlight": "#c09159ee",
+      "minimapGutter.addedBackground": "#3f8d6c",
+      "minimapGutter.modifiedBackground": "#72c09f",
+      "minimapGutter.deletedBackground": "#b96346",
+      "minimap.background": "#1b293299"
+   },
+   "tokenColors": [
+      {
+         "name": "COMMENT",
+         "scope": [
+            "comment",
+            "punctuation.definition.comment",
+            "punctuation.definition.tag",
+            "comment.block.documentation punctuation.definition.bracket",
+            "source.ocaml comment constant.regexp meta.separator",
+            "markup.other.anchor support.constant",
+            "markup.fenced_code",
+            "markup.fenced_code punctuation.definition",
+            "punctuation.definition.heading",
+            "punctuation.definition.bold.markdown",
+            "punctuation.definition.italic.markdown",
+            "punctuation.definition.strikethrough.markdown"
+         ],
+         "settings": {
+            "foreground": "#5e7887"
+         }
+      },
+      {
+         "name": "TEXT",
+         "scope": [
+            "constant.character",
+            "constant.escape",
+            "text.html.markdown",
+            "punctuation.definition.list_item",
+            "keyword.begin.tag.ejs",
+            "constant.name.attribute.tag.pug",
+            "source.clojure meta.symbol",
+            "constant.other.description.jsdoc",
+            "keyword.other.array.phpdoc.php",
+            "keyword.operator.other.powershell",
+            "meta.link.inline punctuation.definition.string",
+            "source.sql",
+            "source meta.brace",
+            "source punctuation",
+            "text.html punctuation",
+            "markup meta punctuation.definition",
+            "meta.bracket.julia",
+            "meta.array.julia",
+            "entity.name.footnote",
+            "source.ocaml punctuation.definition.tag",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "entity.other.attribute-name strong",
+            "binding.fsharp keyword.symbol.fsharp",
+            "entity.name.record.field.elm",
+            "entity.name.record.field.accessor.elm",
+            "storage.modifier.array.bracket",
+            "source.css entity.other",
+            "meta.attribute-selector punctuation.definition.entity",
+            "markup.other.anchor string",
+            "punctuation.separator",
+            "punctuation.section",
+            "punctuation.terminator"
+         ],
+         "settings": {
+            "foreground": "#c5cdd3"
+         }
+      },
+      {
+         "name": "KEYWORD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.modifier",
+            "meta.tag.sgml",
+            "punctuation.accessor",
+            "constant.other.color",
+            "entity.name.section",
+            "markup.heading",
+            "markup.heading punctuation.definition",
+            "entity.other.attribute-name.pseudo-class",
+            "entity.other.attribute-name.pseudo-element",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "storage.type.function.pug",
+            "text.pug storage.type",
+            "text.pug meta.tag.other",
+            "source.clojure storage.control",
+            "meta.expression.clojure",
+            "punctuation.separator.slice.python",
+            "punctuation.separator.question-mark.cs",
+            "punctuation.definition.parameters.varargs",
+            "source.go keyword.operator",
+            "punctuation.separator.pointer-access",
+            "punctuation.separator.other.ruby",
+            "keyword.package",
+            "keyword.import",
+            "punctuation.definition.keyword",
+            "punctuation.separator.hash.cs",
+            "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+            "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+            "source.kotlin storage.type.import",
+            "source.kotlin storage.type.package",
+            "constant.string.documentation.powershell",
+            "punctuation.section.directive",
+            "storage.type.rust",
+            "punctuation.definition.attribute",
+            "punctuation.definition.preprocessor",
+            "punctuation.separator.namespace",
+            "punctuation.separator.method",
+            "keyword.control punctuation.definition.function",
+            "source.ocaml variable.interpolation string",
+            "source.reason variable.interpolation",
+            "punctuation.definition.directive",
+            "storage.type.modifier",
+            "keyword.other.class.fileds",
+            "source.toml entity.other.attribute-name",
+            "source.css entity.name.tag.custom",
+            "sharing.modifier",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby"
+         ],
+         "settings": {
+            "foreground": "#c88da2"
+         }
+      },
+      {
+         "name": "VARIABLE",
+         "scope": [
+            "variable",
+            "variable.object",
+            "variable.other",
+            "variable.parameter",
+            "support",
+            "entity.name.module",
+            "variable.import.parameter",
+            "variable.other.class",
+            "meta.toc-list.id.html",
+            "source.json meta.structure.dictionary.json support.type.property-name.json",
+            "meta.var.clojure",
+            "entity.name.variable",
+            "source.java meta.class.body.java",
+            "entity.name.package.go",
+            "source.c",
+            "source.cpp",
+            "source.go",
+            "source.python",
+            "meta.function-call.arguments.python",
+            "source.ruby",
+            "source.coffee.embedded.source",
+            "source.coffee",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "storage.type.annotation",
+            "punctuation.definition.annotation",
+            "source.groovy.embedded.source",
+            "punctuation.definition.variable",
+            "source.powershell",
+            "string.quoted.interpolated.vala constant.character.escape.vala",
+            "source.apacheconf",
+            "source.objc",
+            "source.crystal",
+            "string.quoted.double.kotlin entity.string.template.element.kotlin",
+            "entity.name.package.kotlin",
+            "meta.template.expression.kotlin",
+            "parameter.variable.function",
+            "variable.other.constant.elixir",
+            "source.elixir.embedded.source",
+            "source.sql.embedded",
+            "punctuation.definition.placeholder",
+            "source.swift",
+            "source.julia",
+            "source.shell",
+            "variable.other.normal punctuation.definition.variable.shell",
+            "source.reason variable.language",
+            "source.reason variable.language string.other.link",
+            "source.elm meta.value",
+            "source.elm meta.declaration.module",
+            "meta.embedded.block variable punctuation.definition.variable.php",
+            "string.quoted.double.class.other",
+            "source.toml keyword",
+            "support.type.nim",
+            "source.tf meta.template.expression",
+            "source.scala entity.name.import",
+            "markup.code",
+            "markup.fenced_code.block"
+         ],
+         "settings": {
+            "foreground": "#d3b692"
+         }
+      },
+      {
+         "name": "ANNOTATION",
+         "scope": [
+            "support.variable.property",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "entity.other.attribute-name.id",
+            "entity.other.attribute-name.id punctuation.definition.entity",
+            "entity.name.type.annotation.kotlin",
+            "support.type.primitive",
+            "meta.type.parameters entity.name.type",
+            "meta.type.annotation entity.name.type",
+            "punctuation.definition.typeparameters",
+            "source.python support.type.python",
+            "comment.block.documentation.phpdoc.php keyword.other.type.php",
+            "storage.type.php",
+            "keyword.type",
+            "storage.type.cs",
+            "storage.type.c",
+            "storage.type.objc",
+            "punctuation.definition.storage.type.objc",
+            "markup punctuation.definition",
+            "storage.type.powershell",
+            "comment.block.documentation entity.name.type",
+            "source.java storage.type",
+            "storage.type.primitive",
+            "source.groovy storage.type",
+            "storage.type.r",
+            "source.haskell storage.type",
+            "punctuation.separator.clause-head-body",
+            "source.go storage.type",
+            "storage.type.core.rust",
+            "storage.class.std.rust",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "support.type.vb",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "constant.other.reference",
+            "source.graphql support.type",
+            "source.reason support.type string",
+            "entity.name.type.fsharp",
+            "source.elm storage.type",
+            "storage.type.user-defined",
+            "storage.type.built-in",
+            "support.type.builtin",
+            "source.swift support.type",
+            "support.class.crystal",
+            "storage.type.integral",
+            "source.cpp storage.type.cpp",
+            "source.vala storage.type",
+            "source.hlsl storage.type.basic",
+            "source.hlsl support.type.other",
+            "source.apex storage.type",
+            "source.nim storage.type",
+            "source.cpp entity.name.type",
+            "support.class.builtin",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "markup.raw.monospace",
+            "markup.mark",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric"
+         ],
+         "settings": {
+            "foreground": "#be856f"
+         }
+      },
+      {
+         "name": "CONSTANT",
+         "scope": [
+            "constant",
+            "variable.other.constant",
+            "support.constant",
+            "punctuation.definition.entity",
+            "constant.character.entity",
+            "support.variable.magic",
+            "markup.quote",
+            "entity.name.type.type-parameter.cs",
+            "punctuation.bracket.angle",
+            "entity.name.function.preprocessor.c",
+            "storage.type.scala",
+            "entity.helper.apacheconf",
+            "variable.language.crystal",
+            "punctuation.definition.constant",
+            "support.constant punctuation.definition.variable",
+            "constant.character.math",
+            "support.class.math",
+            "source.graphql constant.character",
+            "source.reason constant.language.list",
+            "source.cpp variable.other.enummember",
+            "support.variable.class.hideshow",
+            "entity.other.attribute-name.class",
+            "meta.attribute.id entity.other.attribute-name",
+            "text.html entity.other.attribute-name",
+            "meta.tag.attributes entity.other.attribute-name",
+            "text.xml entity.other.attribute-name",
+            "source.cs entity.other.attribute-name",
+            "constant.character.format.placeholder",
+            "constant.other.placeholder",
+            "source.vue entity.other.attribute-name",
+            "entity.other.attribute-name.mjml",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "meta.definition.attribute-entry punctuation.separator"
+         ],
+         "settings": {
+            "foreground": "#a88c00"
+         }
+      },
+      {
+         "name": "TAG",
+         "scope": [
+            "variable.language",
+            "variable.parameter.function.language.special",
+            "punctuation.definition.italic",
+            "punctuation.definition.bold",
+            "entity.name.tag",
+            "variable.language punctuation.definition.variable",
+            "keyword.control.clojure",
+            "support.type.exception.python",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "keyword.other.var.cs",
+            "storage.modifier.super",
+            "source.go keyword",
+            "keyword.function.go",
+            "meta.separator",
+            "keyword.other.fn.rust",
+            "storage.modifier.static.rust",
+            "source.r meta.function.r keyword.control.r",
+            "storage.type.def",
+            "meta.class.identifier storage.modifier",
+            "source.scala keyword.declaration",
+            "storage.type",
+            "comment.block.documentation punctuation.definition.block.tag",
+            "comment.block.documentation punctuation.definition.inline.tag",
+            "entity.tag.apacheconf",
+            "keyword.other.julia",
+            "source.julia storage.modifier",
+            "constant.language.empty-list.haskell",
+            "meta.function.powershell storage.type.powershell",
+            "keyword.control.fun",
+            "punctuation.terminator.function",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml storage.type markup.underline",
+            "binding.fsharp keyword",
+            "function.anonymous keyword",
+            "function.anonymous keyword.symbol.fsharp",
+            "meta.embedded.block variable.language punctuation.definition.variable.php",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other.class",
+            "source.wsd keyword.other.linebegin",
+            "keyword.other.skinparam.keyword",
+            "keyword.other.nim",
+            "markup.deleted.diff",
+            "source.tf support.class.variable",
+            "meta.function.lua keyword.control.lua",
+            "markup.block entity.name.tag",
+            "markup.meta.attribute-list",
+            "source.zig keyword.default",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "foreground": "#c37455"
+         }
+      },
+      {
+         "name": "STRING",
+         "scope": [
+            "string",
+            "punctuation.definition.string",
+            "source.css support.constant",
+            "entity.name.import.go",
+            "markup.raw.texttt",
+            "markup.inserted.diff",
+            "source.scala punctuation.definition.character",
+            "constant.character.literal.scala",
+            "source.tf entity.name"
+         ],
+         "settings": {
+            "foreground": "#72c09f"
+         }
+      },
+      {
+         "name": "STRINGINTERPOLATED",
+         "scope": [
+            "string.template",
+            "punctuation.definition.string.template",
+            "string.interpolated.python string.quoted.single.python",
+            "string.quoted.double.heredoc",
+            "string.quoted.interpolated.vala",
+            "string.quoted.interpolated.vala punctuation.definition.string",
+            "string.regexp.apacheconf",
+            "markup.inline.raw.string",
+            "markup.inline.raw punctuation.definition.raw",
+            "string.quoted.double.interpolated.crystal",
+            "string.quoted.double.interpolated.crystal punctuation.definition.string",
+            "text.tex markup.raw"
+         ],
+         "settings": {
+            "foreground": "#3f8d6c"
+         }
+      },
+      {
+         "name": "NUMBER",
+         "scope": [
+            "constant.numeric",
+            "constant.language",
+            "punctuation.separator.decimal.period.php",
+            "keyword.operator.null-conditional.cs",
+            "punctuation.separator.question-mark.cs",
+            "constant.integer.apacheconf",
+            "keyword.operator.nullable-type",
+            "constant.language punctuation.definition.variable",
+            "constant.others.fsharp",
+            "keyword.other.unit",
+            "string.quoted.double.skinparam.value",
+            "source.toml constant",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "foreground": "#7068b1"
+         }
+      },
+      {
+         "name": "FUNCTION",
+         "scope": [
+            "variable.function",
+            "support.type.property-name",
+            "entity.name.function",
+            "string.other.link",
+            "markup.link",
+            "support.type.vendored",
+            "support.other.variable",
+            "meta.function-call.generic.python",
+            "meta.method-call.groovy meta.method.groovy",
+            "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+            "punctuation.definition.decorator",
+            "support.function.any-method",
+            "text.tex support.function",
+            "text.tex punctuation.definition.function",
+            "entity.name.section.fsharp entity.name.section.fsharp",
+            "support.variable.class.function",
+            "keyword.control.cucumber.table",
+            "punctuation.decorator",
+            "source.tf support.class"
+         ],
+         "settings": {
+            "foreground": "#3f848d"
+         }
+      },
+      {
+         "name": "SUPPORT",
+         "scope": [
+            "entity.name",
+            "entity.other",
+            "support.orther.namespace.use.php",
+            "meta.use.php",
+            "support.other.namespace.php",
+            "support.type",
+            "support.class",
+            "punctuation.definition.parameters",
+            "support.function",
+            "support.function.construct",
+            "markup.changed.git_gutter",
+            "markup.underline.link",
+            "markup.underline.link.image",
+            "markup.underline",
+            "meta.symbol.namespace.clojure",
+            "entity.mime-type.apacheconf",
+            "keyword.operator.function.infix",
+            "entity.name.function.infix",
+            "entity.name.function.call.kotlin",
+            "text.tex support.function.verb",
+            "text.tex support.function.texttt",
+            "source.reason constant.language.unit",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "constant.language.unit.fsharp",
+            "source.wsd support.class.preprocessings",
+            "keyword.language.gherkin.feature.scenario",
+            "source.nim keyword.other.common.function",
+            "entity.name.type.namespace",
+            "entity.name.scope-resolution.function.call"
+         ],
+         "settings": {
+            "foreground": "#72b7c0"
+         }
+      },
+      {
+         "name": "MISC",
+         "scope": [
+            "source.js constant.other.object.key.js string.unquoted.label.js",
+            "source.js punctuation.section.embedded",
+            "punctuation.definition.template-expression",
+            "support.class",
+            "storage.type.string.python",
+            "string.interpolated.pug",
+            "support.constant.handlebars",
+            "source.clojure punctuation.section.set",
+            "source.clojure punctuation.section.metadata",
+            "entity.global.clojure",
+            "source.python meta.function-call.python support.type.python",
+            "entity.other.inherited-class.python",
+            "punctuation.definition.interpolation",
+            "punctuation.section.embedded.begin.ruby",
+            "punctuation.section.embedded.end.ruby source.ruby",
+            "support.constant.math",
+            "entity.namespace.r",
+            "meta.method-call.groovy storage.type.groovy",
+            "source.scala entity.name.class.declaration",
+            "constant.character.escape",
+            "support.function.macro.julia",
+            "string.replacement.apacheconf",
+            "storage.modifier.using.vala",
+            "constant.other.haskell",
+            "source.objc entity.name.tag",
+            "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+            "meta.embedded.line.crystal punctuation.section.embedded",
+            "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+            "punctuation.section.embedded",
+            "punctuation.section.tag",
+            "punctuation.section.embedded source.swift",
+            "variable.other.bracket punctuation.definition.variable",
+            "string.interpolated.dollar punctuation.definition.string",
+            "constant.character.escape punctuation.definition.keyword",
+            "source.ocaml entity.name.class constant.numeric",
+            "source.reason entity.name.class",
+            "keyword.format.specifier.fsharp",
+            "support.module.elm",
+            "meta.embedded.block.php punctuation.definition.variable.php",
+            "source.vala storage.type",
+            "support.variable.class.group",
+            "entity.name.type.class",
+            "source.tf meta.keyword.list",
+            "source.tf meta.keyword.map",
+            "entity.name.class.lua",
+            "markup.substitution"
+         ],
+         "settings": {
+            "foreground": "#5998c0"
+         }
+      },
+      {
+         "name": "INVALID",
+         "scope": [
+            "invalid",
+            "invalid.illegal"
+         ],
+         "settings": {
+            "foreground": "#b16a4e"
+         }
+      },
+      {
+         "name": "ITALIC",
+         "scope": [
+            "comment",
+            "storage.modifier",
+            "punctuation.definition.comment",
+            "entity.other",
+            "variable.language",
+            "support.type.vendored",
+            "support.constant.vendored",
+            "markup.quote",
+            "markup.italic",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "keyword.control.clojure",
+            "source.clojure meta.symbol.dynamic",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "variable.other.member.c",
+            "support.type.core.rust",
+            "variable.other.object.property",
+            "variable.other.property",
+            "source.r meta.function.r keyword.control.r",
+            "comment.line.roxygen.r keyword",
+            "comment.line.roxygen.r variable.parameter.r",
+            "keyword.control.inheritance.coffee",
+            "comment.block.documentation.phpdoc.php keyword",
+            "keyword.other.array.phpdoc.php",
+            "storage.type.modifier",
+            "comment.block.javadoc.java keyword",
+            "comment.block.javadoc.java variable.parameter.java",
+            "keyword.operator.documentation.powershell",
+            "storage.type.scala",
+            "variable.parameter.function.language.special",
+            "comment.block.documentation.scala keyword",
+            "comment.block.documentation.scala variable.parameter",
+            "support.function.builtin.go",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.ruby",
+            "source.vala storage.type.generic",
+            "constant.other.table-name",
+            "constant.other.placeholder",
+            "variable.other.field",
+            "entity.alias.import.go",
+            "source.swift keyword.other.declaration-specifier",
+            "support.variable.swift",
+            "keyword.other.capture-specifier",
+            "text.tex support.function.emph",
+            "constant.other.math",
+            "support.function.textit",
+            "entity.name.footnote",
+            "entity.name.function.directive.graphql",
+            "source.graphql support.type.enum",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "abstract.definition.fsharp keyword",
+            "abstract.definition.fsharp entity",
+            "function.anonymous keyword",
+            "entity.name.record.field.accessor.elm",
+            "support.type.primitive",
+            "support.type.builtin",
+            "keyword.type.cs",
+            "storage.type.built-in",
+            "storage.type.primitive",
+            "source.python support.type.python",
+            "storage.type.core.rust",
+            "source.swift support.type",
+            "source.go storage.type",
+            "storage.type.php",
+            "storage.type.function.kotlin",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "variable.other.member",
+            "keyword.other.import",
+            "keyword.package",
+            "keyword.import",
+            "source.wsd keyword.control.diagram",
+            "keyword.language.gherkin.feature.step",
+            "source.hlsl storage.type.basic",
+            "source.apex keyword.type",
+            "sharing.modifier",
+            "source.nim storage.type.concrete",
+            "meta.preprocessor.pragma.nim",
+            "storage.type.integral",
+            "entity.name.scope-resolution.function.call",
+            "support.class.builtin",
+            "comment.block.documentation storage.type.class",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "meta.import keyword.control",
+            "keyword.control.export",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "keyword.local.lua",
+            "markup.mark.constrained markup.mark",
+            "markup.block.open",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric",
+            "source.zig keyword.type",
+            "source.zig keyword.storage",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "fontStyle": "italic"
+         }
+      },
+      {
+         "name": "BOLD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.operator",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.type.function.arrow",
+            "constant.other.color",
+            "punctuation.accessor",
+            "entity.name.section",
+            "markdown.heading",
+            "markup.inline.raw punctuation.definition.raw",
+            "markup.heading",
+            "storage.type.function.pug",
+            "storage.type.function.python",
+            "storage.type.annotation",
+            "punctuation.bracket.angle",
+            "keyword.other.new",
+            "storage.type.generic.wildcard",
+            "source.go keyword.operator",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "variable.parameter",
+            "support.function.builtin.rust",
+            "storage.type.function.coffee",
+            "entity.name.variable.parameter",
+            "punctuation.separator.hash.cs",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "meta.function.parameters variable.other",
+            "entity.name.type.annotation.kotlin",
+            "storage.type.objc",
+            "parameter.variable.function",
+            "markup punctuation.definition",
+            "punctuation.section.directive",
+            "punctuation.definition.preprocessor",
+            "source.ruby punctuation.definition.variable",
+            "support.function.textbf",
+            "source.graphql support.type.builtin",
+            "source.ocaml variable.interpolation string",
+            "entity.name.function.definition.special.constructor",
+            "entity.name.function.definition.special.member.destructor.",
+            "meta.function.parameters variable punctuation.definition.variable.php",
+            "source.wsd keyword.other.activity",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby",
+            "keyword.function.go",
+            "keyword.other.fn.rust",
+            "markup.other.anchor",
+            "markup.list.bullet",
+            "markup.list punctuation.definition",
+            "keyword.control.default",
+            "punctuation.section",
+            "punctuation.separator",
+            "punctuation.terminator",
+            "markup.bold.markdown",
+            "source.zig storage.type.function"
+         ],
+         "settings": {
+            "fontStyle": "bold"
+         }
+      },
+      {
+         "name": "BOLD-ITALIC",
+         "scope": [
+            "markup.quote markup.bold",
+            "text.html punctuation.section.embedded",
+            "variable.other.c",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "source.rust meta.attribute.rust",
+            "meta.attribute.id entity.other.attribute-name",
+            "source.ocaml punctuation.definition.tag emphasis",
+            "source.tf entity.name",
+            "markup.quote punctuation.definition",
+            "markup.fenced_code punctuation.definition",
+            "fenced_code.block.language"
+         ],
+         "settings": {
+            "fontStyle": "bold italic"
+         }
+      },
+      {
+         "name": "NORMAL",
+         "scope": [
+            "keyword.begin.tag.ejs",
+            "source.python meta.function.decorator.python support.type.python",
+            "source.cs keyword.other",
+            "keyword.other.var.cs",
+            "source.go keyword",
+            "storage.modifier.static.rust",
+            "variable.parameter.r",
+            "variable.parameter.handlebars",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "meta.class.identifier storage.modifier",
+            "keyword.operator.other.powershell",
+            "source.css variable.parameter",
+            "string.interpolated variable.parameter",
+            "source.apacheconf keyword",
+            "keyword.other.julia",
+            "storage.modifier.using.vala",
+            "source.objc keyword.other.property.attribute",
+            "source.sql keyword.other",
+            "keyword.other.using.vala",
+            "keyword.operator.function.infix",
+            "keyword.control.directive",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "entity.name.function.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "punctuation.definition.variable",
+            "entity.name.section.latex",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "keyword.format.specifier.fsharp",
+            "entity.name.section.fsharp",
+            "binding.fsharp keyword",
+            "binding.fsharp keyword.symbol",
+            "record.fsharp keyword",
+            "keyword.symbol.fsharp",
+            "entity.name.section.fsharp keyword",
+            "namespace.open.fsharp keyword",
+            "namespace.open.fsharp entity",
+            "storage.type",
+            "source.cpp keyword.other",
+            "source.c keyword.other",
+            "keyword.other.unit",
+            "storage.modifier.array.bracket",
+            "meta.import.haskell keyword",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other",
+            "keyword.other.skinparam",
+            "source.css keyword.control",
+            "source.css keyword.operator",
+            "keyword.language.gherkin.feature.scenario",
+            "keyword.control.cucumber.table",
+            "source.toml entity.other.attribute-name",
+            "source.toml keyword",
+            "keyword.other.nim",
+            "source.nim keyword.other.common.function",
+            "source.nim keyword.other",
+            "source.scala keyword.declaration",
+            "source.scala entity.name.class.declaration",
+            "keyword.control.lua",
+            "source.css punctuation.section",
+            "punctuation.section.embedded",
+            "source.c punctuation.section",
+            "source.cpp punctuation.section",
+            "source.java punctuation.section",
+            "source.php punctuation.section",
+            "source.powershell punctuation.section",
+            "source.r punctuation.section",
+            "source.ruby punctuation.section",
+            "source.swift punctuation.section",
+            "source.objc punctuation.section",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.default",
+            "source.zig keyword.statement",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "fontStyle": ""
+         }
+      },
+      {
+         "name": "STRIKETHROUGH",
+         "scope": [
+            "markup.strikethrough"
+         ],
+         "settings": {
+            "fontStyle": "strikethrough"
+         }
+      }
+   ]
+}

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

@@ -0,0 +1,1108 @@
+{
+    "name": "Noctis",
+    "type": "dark",
+    "colors": {
+        "selection.background": "#107684",
+        "descriptionForeground": "#929ea0",
+        "errorForeground": "#e34e1c",
+        "widget.shadow": "#00000044",
+        "editor.background": "#052529",
+        "editor.foreground": "#b2cacd",
+        "editorLineNumber.foreground": "#4e6b6e",
+        "editorLineNumber.activeForeground": "#169fb1",
+        "editorCursor.foreground": "#85efff",
+        "badge.background": "#40d4e7",
+        "badge.foreground": "#0f1415",
+        "activityBar.background": "#052529",
+        "activityBar.dropBackground": "#929ea065",
+        "activityBar.foreground": "#169fb1",
+        "activityBar.inactiveForeground": "#169fb177",
+        "activityBar.border": "#0f1415",
+        "activityBarBadge.background": "#40d4e7",
+        "activityBarBadge.foreground": "#0f1415",
+        "activityBar.activeBackground": "#40d4e733",
+        "activityBar.activeBorder": "#40d4e7",
+        "sideBar.background": "#041d20",
+        "sideBar.foreground": "#a5b5b5",
+        "sideBar.border": "#0f1415",
+        "sideBar.dropBackground": "#041d20",
+        "sideBarTitle.foreground": "#a5b5b5",
+        "sideBarSectionHeader.background": "#083d44",
+        "sideBarSectionHeader.foreground": "#a5b5b5",
+        "sideBarSectionHeader.border": "#0f1415",
+        "statusBar.background": "#041d20",
+        "statusBar.foreground": "#169fb1",
+        "statusBar.border": "#0f1415",
+        "statusBar.debuggingBackground": "#041d20",
+        "statusBar.debuggingForeground": "#df769b50",
+        "statusBar.debuggingBorder": "#df769baf",
+        "statusBar.noFolderForeground": "#87a7ab",
+        "statusBar.noFolderBackground": "#041d20",
+        "statusBar.noFolderBorder": "#041d20",
+        "statusBarItem.activeBackground": "#19bacc45",
+        "statusBarItem.hoverBackground": "#062e32",
+        "statusBarItem.prominentBackground": "#020c0e",
+        "statusBarItem.prominentHoverBackground": "#00292e",
+        "button.background": "#099099",
+        "button.foreground": "#ebfdff",
+        "button.hoverBackground": "#0cc",
+        "dropdown.background": "#073940",
+        "dropdown.border": "#073940",
+        "dropdown.foreground": "#87a7ab",
+        "editorMarkerNavigation.background": "#3a3a5e29",
+        "editorMarkerNavigationError.background": "#e34e1c",
+        "editorMarkerNavigationWarning.background": "#e69533",
+        "editorError.border": "#052529",
+        "editorError.foreground": "#e34e1c",
+        "editorWarning.border": "#052529",
+        "editorWarning.foreground": "#e69533",
+        "editorInfo.border": "#052529",
+        "editorInfo.foreground": "#40d4e7",
+        "editorHint.border": "#49e9a600",
+        "editorHint.foreground": "#49e9a6",
+        "editorGroup.emptyBackground": "#5f6b6d33",
+        "editorGroup.border": "#0f1415",
+        "editorGroup.dropBackground": "#5f6b6d33",
+        "editorGroupHeader.noTabsBackground": "#062e32",
+        "editorGroupHeader.tabsBackground": "#062e32",
+        "editorGroupHeader.tabsBorder": "#062e32",
+        "tab.activeBackground": "#052529",
+        "tab.unfocusedActiveBackground": "#0e1e20",
+        "tab.activeForeground": "#40d4e7",
+        "tab.border": "#0f1415",
+        "tab.inactiveBackground": "#062e32",
+        "tab.inactiveForeground": "#87a7ab",
+        "tab.unfocusedActiveForeground": "#87a7ab",
+        "tab.unfocusedInactiveForeground": "#87a7ab",
+        "tab.activeBorderTop": "#40d4e7",
+        "tab.activeModifiedBorder": "#49e9a6",
+        "tab.activeBorder": "#052529",
+        "tab.unfocusedActiveBorder": "#052529",
+        "tab.unfocusedHoverBackground": "#169fb121",
+        "textBlockQuote.background": "#041d20",
+        "textBlockQuote.border": "#16a3b6",
+        "textCodeBlock.background": "#041d20",
+        "textLink.activeForeground": "#40d4e7",
+        "textLink.foreground": "#40d4e7",
+        "textPreformat.foreground": "#e4b781",
+        "textSeparator.foreground": "#041d20",
+        "walkThrough.embeddedEditorBackground": "#041d20",
+        "welcomePage.buttonBackground": "#041d20",
+        "welcomePage.buttonHoverBackground": "#003742",
+        "input.background": "#052529",
+        "input.border": "#073940",
+        "input.foreground": "#CDD3DE",
+        "input.placeholderForeground": "#87a7ab",
+        "inputOption.activeBorder": "#169fb1",
+        "inputValidation.errorForeground": "#ff4000",
+        "inputValidation.errorBackground": "#501502ee",
+        "inputValidation.errorBorder": "#691c02",
+        "inputValidation.infoForeground": "#40d4e7",
+        "inputValidation.infoBackground": "#0f6e7bee",
+        "inputValidation.infoBorder": "#148f9f",
+        "inputValidation.warningForeground": "#e69533",
+        "inputValidation.warningBackground": "#82694acc",
+        "inputValidation.warningBorder": "#a88457",
+        "editorWidget.background": "#073940",
+        "editorWidget.border": "#0f1415",
+        "editorHoverWidget.background": "#073940",
+        "editorHoverWidget.border": "#0f1415",
+        "editorSuggestWidget.background": "#073940",
+        "editorSuggestWidget.border": "#0f1415",
+        "editorSuggestWidget.foreground": "#87a7ab",
+        "editorSuggestWidget.highlightForeground": "#40d4e7",
+        "editorSuggestWidget.selectedBackground": "#0e6671",
+        "editorGutter.background": "#052529",
+        "editorGutter.addedBackground": "#8ce99a",
+        "editorGutter.deletedBackground": "#e34e1c",
+        "editorGutter.modifiedBackground": "#e0c184",
+        "editor.selectionBackground": "#169fb144",
+        "editor.selectionHighlightBackground": "#49ace944",
+        "editor.inactiveSelectionBackground": "#0e657155",
+        "editor.wordHighlightStrongBackground": "#cc990033",
+        "editor.wordHighlightBackground": "#e4b78133",
+        "editor.findMatchBackground": "#40bf6a11",
+        "editor.findMatchHighlightBackground": "#0e667179",
+        "editor.findRangeHighlightBackground": "#49e9a633",
+        "editor.hoverHighlightBackground": "#169fb13f",
+        "editor.lineHighlightBackground": "#083d44ee",
+        "editor.lineHighlightBorder": "#083d44",
+        "editor.rangeHighlightBackground": "#083d44a1",
+        "editorLink.activeForeground": "#14a5ff",
+        "editorWhitespace.foreground": "#ffffff21",
+        "editorIndentGuide.background": "#223b3f",
+        "editorIndentGuide.activeBackground": "#3e6f74",
+        "editorBracketMatch.background": "#169fb122",
+        "editorBracketMatch.border": "#169fb1",
+        "editorRuler.foreground": "#29484c",
+        "editorCodeLens.foreground": "#507b95",
+        "terminal.ansiBlack": "#324a4d",
+        "terminal.ansiRed": "#e66533",
+        "terminal.ansiGreen": "#49e9a6",
+        "terminal.ansiYellow": "#e4b781",
+        "terminal.ansiBlue": "#49ace9",
+        "terminal.ansiMagenta": "#df769b",
+        "terminal.ansiCyan": "#49d6e9",
+        "terminal.ansiWhite": "#b2cacd",
+        "terminal.ansiBrightBlack": "#47686c",
+        "terminal.ansiBrightRed": "#e97749",
+        "terminal.ansiBrightGreen": "#60ebb1",
+        "terminal.ansiBrightYellow": "#e69533",
+        "terminal.ansiBrightBlue": "#60b6eb",
+        "terminal.ansiBrightMagenta": "#e798b3",
+        "terminal.ansiBrightCyan": "#60dbeb",
+        "terminal.ansiBrightWhite": "#c1d4d7",
+        "terminal.background": "#03191b",
+        "terminal.foreground": "#b2cacd",
+        "terminalCursor.background": "#03191b",
+        "terminalCursor.foreground": "#b2cacd",
+        "merge.border": "#05252900",
+        "merge.currentContentBackground": "#85f1ff22",
+        "merge.currentHeaderBackground": "#85f1ff44",
+        "merge.incomingContentBackground": "#9d92f222",
+        "merge.incomingHeaderBackground": "#9d92f244",
+        "merge.commonContentBackground": "#ffc18022",
+        "merge.commonHeaderBackground": "#ffc18044",
+        "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+        "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+        "editorOverviewRuler.commonContentForeground": "#ffc18044",
+        "editorOverviewRuler.border": "#052529",
+        "notificationCenter.border": "#073940",
+        "notificationCenterHeader.foreground": "#87a7ab",
+        "notificationCenterHeader.background": "#073940",
+        "notificationToast.border": "#073940",
+        "notifications.foreground": "#CDD3DE",
+        "notifications.background": "#073940",
+        "notifications.border": "#073940",
+        "notificationLink.foreground": "#87a7ab",
+        "diffEditor.insertedTextBackground": "#16b67327",
+        "diffEditor.removedTextBackground": "#e6653341",
+        "debugToolBar.background": "#041d20",
+        "debugExceptionWidget.background": "#041d20",
+        "debugExceptionWidget.border": "#16a3b6",
+        "extensionButton.prominentBackground": "#099099",
+        "extensionButton.prominentForeground": "#e5f5f5",
+        "extensionButton.prominentHoverBackground": "#0cc",
+        "focusBorder": "#073940",
+        "foreground": "#b2cacd",
+        "panel.background": "#03191b",
+        "panel.border": "#0e6671",
+        "panelTitle.activeBorder": "#0e6671",
+        "panelTitle.activeForeground": "#40d4e7",
+        "panelTitle.inactiveForeground": "#87a7ab",
+        "peekView.border": "#169fb1",
+        "peekViewEditor.background": "#002124",
+        "peekViewEditor.matchHighlightBackground": "#00718079",
+        "peekViewEditor.matchHighlightBorder": "#007180cc",
+        "peekViewEditorGutter.background": "#002124",
+        "peekViewResult.background": "#041d20",
+        "peekViewResult.fileForeground": "#e4b781",
+        "peekViewResult.lineForeground": "#87a7ab",
+        "peekViewResult.matchHighlightBackground": "#073940",
+        "peekViewResult.selectionBackground": "#073940",
+        "peekViewResult.selectionForeground": "#87a7ab",
+        "peekViewTitle.background": "#041d20",
+        "peekViewTitleDescription.foreground": "#87a7ab",
+        "peekViewTitleLabel.foreground": "#e4b781",
+        "progressBar.background": "#40d4e7",
+        "scrollbar.shadow": "#00000044",
+        "scrollbarSlider.activeBackground": "#169fb1ad",
+        "scrollbarSlider.background": "#6a90955b",
+        "scrollbarSlider.hoverBackground": "#169fb162",
+        "gitDecoration.addedResourceForeground": "#16b673",
+        "gitDecoration.modifiedResourceForeground": "#49e9a6",
+        "gitDecoration.deletedResourceForeground": "#e34e1c",
+        "gitDecoration.untrackedResourceForeground": "#40d4e7",
+        "gitDecoration.ignoredResourceForeground": "#5b858b",
+        "gitDecoration.conflictingResourceForeground": "#e4b781",
+        "pickerGroup.border": "#0e6671",
+        "pickerGroup.foreground": "#169fb1",
+        "list.activeSelectionBackground": "#0e6671",
+        "list.activeSelectionForeground": "#ebfdff",
+        "list.dropBackground": "#00404d",
+        "list.focusBackground": "#00404d",
+        "list.focusForeground": "#ebfdff",
+        "list.highlightForeground": "#40d4e7",
+        "list.hoverBackground": "#0b515b",
+        "list.hoverForeground": "#ebfdff",
+        "list.inactiveFocusBackground": "#062d32",
+        "list.inactiveSelectionBackground": "#07353b",
+        "list.inactiveSelectionForeground": "#b2cacd",
+        "list.errorForeground": "#e34e1c",
+        "list.warningForeground": "#ffa487",
+        "listFilterWidget.background": "#00404d",
+        "listFilterWidget.outline": "#49e9a6",
+        "listFilterWidget.noMatchesOutline": "#e34e1c",
+        "tree.indentGuidesStroke": "#3e6f74",
+        "settings.headerForeground": "#b2cacd",
+        "settings.modifiedItemIndicator": "#15ac31",
+        "settings.dropdownListBorder": "#0e657188",
+        "settings.dropdownBackground": "#073940",
+        "settings.dropdownForeground": "#0cc",
+        "settings.dropdownBorder": "#073940",
+        "settings.checkboxBackground": "#073940",
+        "settings.checkboxForeground": "#0cc",
+        "settings.checkboxBorder": "#073940",
+        "settings.textInputBackground": "#073940",
+        "settings.textInputForeground": "#0cc",
+        "settings.textInputBorder": "#073940",
+        "settings.numberInputBackground": "#041d20",
+        "settings.numberInputForeground": "#7060eb",
+        "settings.numberInputBorder": "#041d20",
+        "breadcrumb.foreground": "#87a7ab",
+        "breadcrumb.background": "#052529",
+        "breadcrumb.focusForeground": "#40d4e7",
+        "breadcrumb.activeSelectionForeground": "#ebfdff",
+        "breadcrumbPicker.background": "#073940",
+        "titleBar.activeBackground": "#041d20",
+        "titleBar.activeForeground": "#b2cacd",
+        "titleBar.inactiveBackground": "#041d20",
+        "titleBar.inactiveForeground": "#87a7ab",
+        "menu.background": "#073940",
+        "menu.foreground": "#87a7ab",
+        "menu.selectionBackground": "#0b515b",
+        "menu.selectionForeground": "#40d4e7",
+        "menu.selectionBorder": "#0b515b",
+        "menu.separatorBackground": "#40d4e7",
+        "menubar.selectionBackground": "#0b515b",
+        "menubar.selectionForeground": "#40d4e7",
+        "menubar.selectionBorder": "#0b515b",
+        "editor.snippetTabstopHighlightBackground": "#03181b",
+        "editor.snippetTabstopHighlightBorder": "#042124",
+        "editor.snippetFinalTabstopHighlightBackground": "#03181b",
+        "editor.snippetFinalTabstopHighlightBorder": "#042124",
+        "minimap.findMatchHighlight": "#49d6e9ee",
+        "minimap.errorHighlight": "#e34e1cee",
+        "minimap.warningHighlight": "#e69533ee",
+        "minimapGutter.addedBackground": "#16b673",
+        "minimapGutter.modifiedBackground": "#49e9a6",
+        "minimapGutter.deletedBackground": "#e34e1c",
+        "minimap.background": "#05252999"
+    },
+    "tokenColors": [
+        {
+            "name": "COMMENT",
+            "scope": [
+                "comment",
+                "punctuation.definition.comment",
+                "punctuation.definition.tag",
+                "comment.block.documentation punctuation.definition.bracket",
+                "source.ocaml comment constant.regexp meta.separator",
+                "markup.other.anchor support.constant",
+                "markup.fenced_code",
+                "markup.fenced_code punctuation.definition",
+                "punctuation.definition.heading",
+                "punctuation.definition.bold.markdown",
+                "punctuation.definition.italic.markdown",
+                "punctuation.definition.strikethrough.markdown"
+            ],
+            "settings": {
+                "foreground": "#5b858b"
+            }
+        },
+        {
+            "name": "TEXT",
+            "scope": [
+                "constant.character",
+                "constant.escape",
+                "text.html.markdown",
+                "punctuation.definition.list_item",
+                "keyword.begin.tag.ejs",
+                "constant.name.attribute.tag.pug",
+                "source.clojure meta.symbol",
+                "constant.other.description.jsdoc",
+                "keyword.other.array.phpdoc.php",
+                "keyword.operator.other.powershell",
+                "meta.link.inline punctuation.definition.string",
+                "source.sql",
+                "source meta.brace",
+                "source punctuation",
+                "text.html punctuation",
+                "markup meta punctuation.definition",
+                "meta.bracket.julia",
+                "meta.array.julia",
+                "entity.name.footnote",
+                "source.ocaml punctuation.definition.tag",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "entity.other.attribute-name strong",
+                "binding.fsharp keyword.symbol.fsharp",
+                "entity.name.record.field.elm",
+                "entity.name.record.field.accessor.elm",
+                "storage.modifier.array.bracket",
+                "source.css entity.other",
+                "meta.attribute-selector punctuation.definition.entity",
+                "markup.other.anchor string",
+                "punctuation.separator",
+                "punctuation.section",
+                "punctuation.terminator"
+            ],
+            "settings": {
+                "foreground": "#b2cacd"
+            }
+        },
+        {
+            "name": "KEYWORD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.modifier",
+                "meta.tag.sgml",
+                "punctuation.accessor",
+                "constant.other.color",
+                "entity.name.section",
+                "markup.heading",
+                "markup.heading punctuation.definition",
+                "entity.other.attribute-name.pseudo-class",
+                "entity.other.attribute-name.pseudo-element",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "storage.type.function.pug",
+                "text.pug storage.type",
+                "text.pug meta.tag.other",
+                "source.clojure storage.control",
+                "meta.expression.clojure",
+                "punctuation.separator.slice.python",
+                "punctuation.separator.question-mark.cs",
+                "punctuation.definition.parameters.varargs",
+                "source.go keyword.operator",
+                "punctuation.separator.pointer-access",
+                "punctuation.separator.other.ruby",
+                "keyword.package",
+                "keyword.import",
+                "punctuation.definition.keyword",
+                "punctuation.separator.hash.cs",
+                "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+                "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+                "source.kotlin storage.type.import",
+                "source.kotlin storage.type.package",
+                "constant.string.documentation.powershell",
+                "punctuation.section.directive",
+                "storage.type.rust",
+                "punctuation.definition.attribute",
+                "punctuation.definition.preprocessor",
+                "punctuation.separator.namespace",
+                "punctuation.separator.method",
+                "keyword.control punctuation.definition.function",
+                "source.ocaml variable.interpolation string",
+                "source.reason variable.interpolation",
+                "punctuation.definition.directive",
+                "storage.type.modifier",
+                "keyword.other.class.fileds",
+                "source.toml entity.other.attribute-name",
+                "source.css entity.name.tag.custom",
+                "sharing.modifier",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby"
+            ],
+            "settings": {
+                "foreground": "#df769b"
+            }
+        },
+        {
+            "name": "VARIABLE",
+            "scope": [
+                "variable",
+                "variable.object",
+                "variable.other",
+                "variable.parameter",
+                "support",
+                "entity.name.module",
+                "variable.import.parameter",
+                "variable.other.class",
+                "meta.toc-list.id.html",
+                "source.json meta.structure.dictionary.json support.type.property-name.json",
+                "meta.var.clojure",
+                "entity.name.variable",
+                "source.java meta.class.body.java",
+                "entity.name.package.go",
+                "source.c",
+                "source.cpp",
+                "source.go",
+                "source.python",
+                "meta.function-call.arguments.python",
+                "source.ruby",
+                "source.coffee.embedded.source",
+                "source.coffee",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "storage.type.annotation",
+                "punctuation.definition.annotation",
+                "source.groovy.embedded.source",
+                "punctuation.definition.variable",
+                "source.powershell",
+                "string.quoted.interpolated.vala constant.character.escape.vala",
+                "source.apacheconf",
+                "source.objc",
+                "source.crystal",
+                "string.quoted.double.kotlin entity.string.template.element.kotlin",
+                "entity.name.package.kotlin",
+                "meta.template.expression.kotlin",
+                "parameter.variable.function",
+                "variable.other.constant.elixir",
+                "source.elixir.embedded.source",
+                "source.sql.embedded",
+                "punctuation.definition.placeholder",
+                "source.swift",
+                "source.julia",
+                "source.shell",
+                "variable.other.normal punctuation.definition.variable.shell",
+                "source.reason variable.language",
+                "source.reason variable.language string.other.link",
+                "source.elm meta.value",
+                "source.elm meta.declaration.module",
+                "meta.embedded.block variable punctuation.definition.variable.php",
+                "string.quoted.double.class.other",
+                "source.toml keyword",
+                "support.type.nim",
+                "source.tf meta.template.expression",
+                "source.scala entity.name.import",
+                "markup.code",
+                "markup.fenced_code.block"
+            ],
+            "settings": {
+                "foreground": "#e4b781"
+            }
+        },
+        {
+            "name": "ANNOTATION",
+            "scope": [
+                "support.variable.property",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "entity.other.attribute-name.id",
+                "entity.other.attribute-name.id punctuation.definition.entity",
+                "entity.name.type.annotation.kotlin",
+                "support.type.primitive",
+                "meta.type.parameters entity.name.type",
+                "meta.type.annotation entity.name.type",
+                "punctuation.definition.typeparameters",
+                "source.python support.type.python",
+                "comment.block.documentation.phpdoc.php keyword.other.type.php",
+                "storage.type.php",
+                "keyword.type",
+                "storage.type.cs",
+                "storage.type.c",
+                "storage.type.objc",
+                "punctuation.definition.storage.type.objc",
+                "markup punctuation.definition",
+                "storage.type.powershell",
+                "comment.block.documentation entity.name.type",
+                "source.java storage.type",
+                "storage.type.primitive",
+                "source.groovy storage.type",
+                "storage.type.r",
+                "source.haskell storage.type",
+                "punctuation.separator.clause-head-body",
+                "source.go storage.type",
+                "storage.type.core.rust",
+                "storage.class.std.rust",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "support.type.vb",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "constant.other.reference",
+                "source.graphql support.type",
+                "source.reason support.type string",
+                "entity.name.type.fsharp",
+                "source.elm storage.type",
+                "storage.type.user-defined",
+                "storage.type.built-in",
+                "support.type.builtin",
+                "source.swift support.type",
+                "support.class.crystal",
+                "storage.type.integral",
+                "source.cpp storage.type.cpp",
+                "source.vala storage.type",
+                "source.hlsl storage.type.basic",
+                "source.hlsl support.type.other",
+                "source.apex storage.type",
+                "source.nim storage.type",
+                "source.cpp entity.name.type",
+                "support.class.builtin",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "markup.raw.monospace",
+                "markup.mark",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric"
+            ],
+            "settings": {
+                "foreground": "#d67e5c"
+            }
+        },
+        {
+            "name": "CONSTANT",
+            "scope": [
+                "constant",
+                "variable.other.constant",
+                "support.constant",
+                "punctuation.definition.entity",
+                "constant.character.entity",
+                "support.variable.magic",
+                "markup.quote",
+                "entity.name.type.type-parameter.cs",
+                "punctuation.bracket.angle",
+                "entity.name.function.preprocessor.c",
+                "storage.type.scala",
+                "entity.helper.apacheconf",
+                "variable.language.crystal",
+                "punctuation.definition.constant",
+                "support.constant punctuation.definition.variable",
+                "constant.character.math",
+                "support.class.math",
+                "source.graphql constant.character",
+                "source.reason constant.language.list",
+                "source.cpp variable.other.enummember",
+                "support.variable.class.hideshow",
+                "entity.other.attribute-name.class",
+                "meta.attribute.id entity.other.attribute-name",
+                "text.html entity.other.attribute-name",
+                "meta.tag.attributes entity.other.attribute-name",
+                "text.xml entity.other.attribute-name",
+                "source.cs entity.other.attribute-name",
+                "constant.character.format.placeholder",
+                "constant.other.placeholder",
+                "source.vue entity.other.attribute-name",
+                "entity.other.attribute-name.mjml",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "meta.definition.attribute-entry punctuation.separator"
+            ],
+            "settings": {
+                "foreground": "#d5971a"
+            }
+        },
+        {
+            "name": "TAG",
+            "scope": [
+                "variable.language",
+                "variable.parameter.function.language.special",
+                "punctuation.definition.italic",
+                "punctuation.definition.bold",
+                "entity.name.tag",
+                "variable.language punctuation.definition.variable",
+                "keyword.control.clojure",
+                "support.type.exception.python",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "keyword.other.var.cs",
+                "storage.modifier.super",
+                "source.go keyword",
+                "keyword.function.go",
+                "meta.separator",
+                "keyword.other.fn.rust",
+                "storage.modifier.static.rust",
+                "source.r meta.function.r keyword.control.r",
+                "storage.type.def",
+                "meta.class.identifier storage.modifier",
+                "source.scala keyword.declaration",
+                "storage.type",
+                "comment.block.documentation punctuation.definition.block.tag",
+                "comment.block.documentation punctuation.definition.inline.tag",
+                "entity.tag.apacheconf",
+                "keyword.other.julia",
+                "source.julia storage.modifier",
+                "constant.language.empty-list.haskell",
+                "meta.function.powershell storage.type.powershell",
+                "keyword.control.fun",
+                "punctuation.terminator.function",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml storage.type markup.underline",
+                "binding.fsharp keyword",
+                "function.anonymous keyword",
+                "function.anonymous keyword.symbol.fsharp",
+                "meta.embedded.block variable.language punctuation.definition.variable.php",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other.class",
+                "source.wsd keyword.other.linebegin",
+                "keyword.other.skinparam.keyword",
+                "keyword.other.nim",
+                "markup.deleted.diff",
+                "source.tf support.class.variable",
+                "meta.function.lua keyword.control.lua",
+                "markup.block entity.name.tag",
+                "markup.meta.attribute-list",
+                "source.zig keyword.default",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "foreground": "#e66533"
+            }
+        },
+        {
+            "name": "STRING",
+            "scope": [
+                "string",
+                "punctuation.definition.string",
+                "source.css support.constant",
+                "entity.name.import.go",
+                "markup.raw.texttt",
+                "markup.inserted.diff",
+                "source.scala punctuation.definition.character",
+                "constant.character.literal.scala",
+                "source.tf entity.name"
+            ],
+            "settings": {
+                "foreground": "#49e9a6"
+            }
+        },
+        {
+            "name": "STRINGINTERPOLATED",
+            "scope": [
+                "string.template",
+                "punctuation.definition.string.template",
+                "string.interpolated.python string.quoted.single.python",
+                "string.quoted.double.heredoc",
+                "string.quoted.interpolated.vala",
+                "string.quoted.interpolated.vala punctuation.definition.string",
+                "string.regexp.apacheconf",
+                "markup.inline.raw.string",
+                "markup.inline.raw punctuation.definition.raw",
+                "string.quoted.double.interpolated.crystal",
+                "string.quoted.double.interpolated.crystal punctuation.definition.string",
+                "text.tex markup.raw"
+            ],
+            "settings": {
+                "foreground": "#16b673"
+            }
+        },
+        {
+            "name": "NUMBER",
+            "scope": [
+                "constant.numeric",
+                "constant.language",
+                "punctuation.separator.decimal.period.php",
+                "keyword.operator.null-conditional.cs",
+                "punctuation.separator.question-mark.cs",
+                "constant.integer.apacheconf",
+                "keyword.operator.nullable-type",
+                "constant.language punctuation.definition.variable",
+                "constant.others.fsharp",
+                "keyword.other.unit",
+                "string.quoted.double.skinparam.value",
+                "source.toml constant",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "foreground": "#7060eb"
+            }
+        },
+        {
+            "name": "FUNCTION",
+            "scope": [
+                "variable.function",
+                "support.type.property-name",
+                "entity.name.function",
+                "string.other.link",
+                "markup.link",
+                "support.type.vendored",
+                "support.other.variable",
+                "meta.function-call.generic.python",
+                "meta.method-call.groovy meta.method.groovy",
+                "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+                "punctuation.definition.decorator",
+                "support.function.any-method",
+                "text.tex support.function",
+                "text.tex punctuation.definition.function",
+                "entity.name.section.fsharp entity.name.section.fsharp",
+                "support.variable.class.function",
+                "keyword.control.cucumber.table",
+                "punctuation.decorator",
+                "source.tf support.class"
+            ],
+            "settings": {
+                "foreground": "#16a3b6"
+            }
+        },
+        {
+            "name": "SUPPORT",
+            "scope": [
+                "entity.name",
+                "entity.other",
+                "support.orther.namespace.use.php",
+                "meta.use.php",
+                "support.other.namespace.php",
+                "support.type",
+                "support.class",
+                "punctuation.definition.parameters",
+                "support.function",
+                "support.function.construct",
+                "markup.changed.git_gutter",
+                "markup.underline.link",
+                "markup.underline.link.image",
+                "markup.underline",
+                "meta.symbol.namespace.clojure",
+                "entity.mime-type.apacheconf",
+                "keyword.operator.function.infix",
+                "entity.name.function.infix",
+                "entity.name.function.call.kotlin",
+                "text.tex support.function.verb",
+                "text.tex support.function.texttt",
+                "source.reason constant.language.unit",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "constant.language.unit.fsharp",
+                "source.wsd support.class.preprocessings",
+                "keyword.language.gherkin.feature.scenario",
+                "source.nim keyword.other.common.function",
+                "entity.name.type.namespace",
+                "entity.name.scope-resolution.function.call"
+            ],
+            "settings": {
+                "foreground": "#49d6e9"
+            }
+        },
+        {
+            "name": "MISC",
+            "scope": [
+                "source.js constant.other.object.key.js string.unquoted.label.js",
+                "source.js punctuation.section.embedded",
+                "punctuation.definition.template-expression",
+                "support.class",
+                "storage.type.string.python",
+                "string.interpolated.pug",
+                "support.constant.handlebars",
+                "source.clojure punctuation.section.set",
+                "source.clojure punctuation.section.metadata",
+                "entity.global.clojure",
+                "source.python meta.function-call.python support.type.python",
+                "entity.other.inherited-class.python",
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.section.embedded.end.ruby source.ruby",
+                "support.constant.math",
+                "entity.namespace.r",
+                "meta.method-call.groovy storage.type.groovy",
+                "source.scala entity.name.class.declaration",
+                "constant.character.escape",
+                "support.function.macro.julia",
+                "string.replacement.apacheconf",
+                "storage.modifier.using.vala",
+                "constant.other.haskell",
+                "source.objc entity.name.tag",
+                "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+                "meta.embedded.line.crystal punctuation.section.embedded",
+                "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+                "punctuation.section.embedded",
+                "punctuation.section.tag",
+                "punctuation.section.embedded source.swift",
+                "variable.other.bracket punctuation.definition.variable",
+                "string.interpolated.dollar punctuation.definition.string",
+                "constant.character.escape punctuation.definition.keyword",
+                "source.ocaml entity.name.class constant.numeric",
+                "source.reason entity.name.class",
+                "keyword.format.specifier.fsharp",
+                "support.module.elm",
+                "meta.embedded.block.php punctuation.definition.variable.php",
+                "source.vala storage.type",
+                "support.variable.class.group",
+                "entity.name.type.class",
+                "source.tf meta.keyword.list",
+                "source.tf meta.keyword.map",
+                "entity.name.class.lua",
+                "markup.substitution"
+            ],
+            "settings": {
+                "foreground": "#49ace9"
+            }
+        },
+        {
+            "name": "INVALID",
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#e3541c"
+            }
+        },
+        {
+            "name": "ITALIC",
+            "scope": [
+                "comment",
+                "storage.modifier",
+                "punctuation.definition.comment",
+                "entity.other",
+                "variable.language",
+                "support.type.vendored",
+                "support.constant.vendored",
+                "markup.quote",
+                "markup.italic",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "keyword.control.clojure",
+                "source.clojure meta.symbol.dynamic",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "variable.other.member.c",
+                "support.type.core.rust",
+                "variable.other.object.property",
+                "variable.other.property",
+                "source.r meta.function.r keyword.control.r",
+                "comment.line.roxygen.r keyword",
+                "comment.line.roxygen.r variable.parameter.r",
+                "keyword.control.inheritance.coffee",
+                "comment.block.documentation.phpdoc.php keyword",
+                "keyword.other.array.phpdoc.php",
+                "storage.type.modifier",
+                "comment.block.javadoc.java keyword",
+                "comment.block.javadoc.java variable.parameter.java",
+                "keyword.operator.documentation.powershell",
+                "storage.type.scala",
+                "variable.parameter.function.language.special",
+                "comment.block.documentation.scala keyword",
+                "comment.block.documentation.scala variable.parameter",
+                "support.function.builtin.go",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.ruby",
+                "source.vala storage.type.generic",
+                "constant.other.table-name",
+                "constant.other.placeholder",
+                "variable.other.field",
+                "entity.alias.import.go",
+                "source.swift keyword.other.declaration-specifier",
+                "support.variable.swift",
+                "keyword.other.capture-specifier",
+                "text.tex support.function.emph",
+                "constant.other.math",
+                "support.function.textit",
+                "entity.name.footnote",
+                "entity.name.function.directive.graphql",
+                "source.graphql support.type.enum",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "abstract.definition.fsharp keyword",
+                "abstract.definition.fsharp entity",
+                "function.anonymous keyword",
+                "entity.name.record.field.accessor.elm",
+                "support.type.primitive",
+                "support.type.builtin",
+                "keyword.type.cs",
+                "storage.type.built-in",
+                "storage.type.primitive",
+                "source.python support.type.python",
+                "storage.type.core.rust",
+                "source.swift support.type",
+                "source.go storage.type",
+                "storage.type.php",
+                "storage.type.function.kotlin",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "variable.other.member",
+                "keyword.other.import",
+                "keyword.package",
+                "keyword.import",
+                "source.wsd keyword.control.diagram",
+                "keyword.language.gherkin.feature.step",
+                "source.hlsl storage.type.basic",
+                "source.apex keyword.type",
+                "sharing.modifier",
+                "source.nim storage.type.concrete",
+                "meta.preprocessor.pragma.nim",
+                "storage.type.integral",
+                "entity.name.scope-resolution.function.call",
+                "support.class.builtin",
+                "comment.block.documentation storage.type.class",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "meta.import keyword.control",
+                "keyword.control.export",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "keyword.local.lua",
+                "markup.mark.constrained markup.mark",
+                "markup.block.open",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric",
+                "source.zig keyword.type",
+                "source.zig keyword.storage",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "BOLD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.operator",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.type.function.arrow",
+                "constant.other.color",
+                "punctuation.accessor",
+                "entity.name.section",
+                "markdown.heading",
+                "markup.inline.raw punctuation.definition.raw",
+                "markup.heading",
+                "storage.type.function.pug",
+                "storage.type.function.python",
+                "storage.type.annotation",
+                "punctuation.bracket.angle",
+                "keyword.other.new",
+                "storage.type.generic.wildcard",
+                "source.go keyword.operator",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "variable.parameter",
+                "support.function.builtin.rust",
+                "storage.type.function.coffee",
+                "entity.name.variable.parameter",
+                "punctuation.separator.hash.cs",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "meta.function.parameters variable.other",
+                "entity.name.type.annotation.kotlin",
+                "storage.type.objc",
+                "parameter.variable.function",
+                "markup punctuation.definition",
+                "punctuation.section.directive",
+                "punctuation.definition.preprocessor",
+                "source.ruby punctuation.definition.variable",
+                "support.function.textbf",
+                "source.graphql support.type.builtin",
+                "source.ocaml variable.interpolation string",
+                "entity.name.function.definition.special.constructor",
+                "entity.name.function.definition.special.member.destructor.",
+                "meta.function.parameters variable punctuation.definition.variable.php",
+                "source.wsd keyword.other.activity",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby",
+                "keyword.function.go",
+                "keyword.other.fn.rust",
+                "markup.other.anchor",
+                "markup.list.bullet",
+                "markup.list punctuation.definition",
+                "keyword.control.default",
+                "punctuation.section",
+                "punctuation.separator",
+                "punctuation.terminator",
+                "markup.bold.markdown",
+                "source.zig storage.type.function"
+            ],
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "BOLD-ITALIC",
+            "scope": [
+                "markup.quote markup.bold",
+                "text.html punctuation.section.embedded",
+                "variable.other.c",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "source.rust meta.attribute.rust",
+                "meta.attribute.id entity.other.attribute-name",
+                "source.ocaml punctuation.definition.tag emphasis",
+                "source.tf entity.name",
+                "markup.quote punctuation.definition",
+                "markup.fenced_code punctuation.definition",
+                "fenced_code.block.language"
+            ],
+            "settings": {
+                "fontStyle": "bold italic"
+            }
+        },
+        {
+            "name": "NORMAL",
+            "scope": [
+                "keyword.begin.tag.ejs",
+                "source.python meta.function.decorator.python support.type.python",
+                "source.cs keyword.other",
+                "keyword.other.var.cs",
+                "source.go keyword",
+                "storage.modifier.static.rust",
+                "variable.parameter.r",
+                "variable.parameter.handlebars",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "meta.class.identifier storage.modifier",
+                "keyword.operator.other.powershell",
+                "source.css variable.parameter",
+                "string.interpolated variable.parameter",
+                "source.apacheconf keyword",
+                "keyword.other.julia",
+                "storage.modifier.using.vala",
+                "source.objc keyword.other.property.attribute",
+                "source.sql keyword.other",
+                "keyword.other.using.vala",
+                "keyword.operator.function.infix",
+                "keyword.control.directive",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "entity.name.function.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "punctuation.definition.variable",
+                "entity.name.section.latex",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "keyword.format.specifier.fsharp",
+                "entity.name.section.fsharp",
+                "binding.fsharp keyword",
+                "binding.fsharp keyword.symbol",
+                "record.fsharp keyword",
+                "keyword.symbol.fsharp",
+                "entity.name.section.fsharp keyword",
+                "namespace.open.fsharp keyword",
+                "namespace.open.fsharp entity",
+                "storage.type",
+                "source.cpp keyword.other",
+                "source.c keyword.other",
+                "keyword.other.unit",
+                "storage.modifier.array.bracket",
+                "meta.import.haskell keyword",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other",
+                "keyword.other.skinparam",
+                "source.css keyword.control",
+                "source.css keyword.operator",
+                "keyword.language.gherkin.feature.scenario",
+                "keyword.control.cucumber.table",
+                "source.toml entity.other.attribute-name",
+                "source.toml keyword",
+                "keyword.other.nim",
+                "source.nim keyword.other.common.function",
+                "source.nim keyword.other",
+                "source.scala keyword.declaration",
+                "source.scala entity.name.class.declaration",
+                "keyword.control.lua",
+                "source.css punctuation.section",
+                "punctuation.section.embedded",
+                "source.c punctuation.section",
+                "source.cpp punctuation.section",
+                "source.java punctuation.section",
+                "source.php punctuation.section",
+                "source.powershell punctuation.section",
+                "source.r punctuation.section",
+                "source.ruby punctuation.section",
+                "source.swift punctuation.section",
+                "source.objc punctuation.section",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.default",
+                "source.zig keyword.statement",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "STRIKETHROUGH",
+            "scope": ["markup.strikethrough"],
+            "settings": {
+                "fontStyle": "strikethrough"
+            }
+        }
+    ]
+}

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

@@ -0,0 +1,1108 @@
+{
+    "name": "Noctis Obscuro",
+    "type": "dark",
+    "colors": {
+        "selection.background": "#107684",
+        "descriptionForeground": "#929ea0",
+        "errorForeground": "#e34e1c",
+        "widget.shadow": "#00000044",
+        "editor.background": "#031417",
+        "editor.foreground": "#b2cacd",
+        "editorLineNumber.foreground": "#4e6b6e",
+        "editorLineNumber.activeForeground": "#169fb1",
+        "editorCursor.foreground": "#85efff",
+        "badge.background": "#169fb1",
+        "badge.foreground": "#0f1415",
+        "activityBar.background": "#031417",
+        "activityBar.dropBackground": "#929ea065",
+        "activityBar.border": "#0f1415",
+        "activityBar.foreground": "#169fb1",
+        "activityBar.inactiveForeground": "#169fb177",
+        "activityBarBadge.background": "#169fb1",
+        "activityBarBadge.foreground": "#0f1415",
+        "activityBar.activeBackground": "#40d4e733",
+        "activityBar.activeBorder": "#40d4e7",
+        "sideBar.background": "#021012",
+        "sideBar.dropBackground": "#042124",
+        "sideBar.border": "#0f1415",
+        "sideBar.foreground": "#a5b5b5",
+        "sideBarSectionHeader.background": "#083d44",
+        "sideBarSectionHeader.foreground": "#a5b5b5",
+        "sideBarTitle.foreground": "#a5b5b5",
+        "sideBarSectionHeader.border": "#0f1415",
+        "statusBar.foreground": "#169fb1",
+        "statusBar.background": "#031417",
+        "statusBar.border": "#0f1415",
+        "statusBar.debuggingBackground": "#031417",
+        "statusBar.debuggingForeground": "#df769b50",
+        "statusBar.debuggingBorder": "#df769baf",
+        "statusBar.noFolderForeground": "#87a7ab",
+        "statusBar.noFolderBackground": "#031417",
+        "statusBar.noFolderBorder": "#031417",
+        "statusBarItem.activeBackground": "#19bacc45",
+        "statusBarItem.hoverBackground": "#062e32",
+        "statusBarItem.prominentBackground": "#020c0e",
+        "statusBarItem.prominentHoverBackground": "#00292e",
+        "button.background": "#099099",
+        "button.foreground": "#ebfdff",
+        "button.hoverBackground": "#0cc",
+        "dropdown.background": "#031417",
+        "dropdown.border": "#031417",
+        "dropdown.foreground": "#87a7ab",
+        "editorMarkerNavigation.background": "#3a3a5e29",
+        "editorMarkerNavigationError.background": "#e34e1c",
+        "editorMarkerNavigationWarning.background": "#e69533",
+        "editorError.border": "#031417",
+        "editorError.foreground": "#e34e1c",
+        "editorWarning.border": "#031417",
+        "editorWarning.foreground": "#e69533",
+        "editorInfo.border": "#031417",
+        "editorInfo.foreground": "#40d4e7",
+        "editorHint.border": "#49e9a600",
+        "editorHint.foreground": "#49e9a6",
+        "editorGroup.emptyBackground": "#5f6b6d33",
+        "editorGroup.border": "#0f1415",
+        "editorGroup.dropBackground": "#5f6b6d33",
+        "editorGroupHeader.noTabsBackground": "#062e32",
+        "editorGroupHeader.tabsBackground": "#062e32",
+        "editorGroupHeader.tabsBorder": "#062e32",
+        "tab.activeBackground": "#031417",
+        "tab.unfocusedActiveBackground": "#0b1819",
+        "tab.activeForeground": "#ebfdff",
+        "tab.border": "#0f1415",
+        "tab.inactiveBackground": "#062e32",
+        "tab.inactiveForeground": "#87a7ab",
+        "tab.unfocusedActiveForeground": "#87a7ab",
+        "tab.unfocusedInactiveForeground": "#87a7ab",
+        "tab.activeBorderTop": "#40d4e7",
+        "tab.activeModifiedBorder": "#49e9a6",
+        "tab.activeBorder": "#031417",
+        "tab.unfocusedActiveBorder": "#031417",
+        "tab.unfocusedHoverBackground": "#169fb121",
+        "textBlockQuote.background": "#031417",
+        "textBlockQuote.border": "#16a3b6",
+        "textCodeBlock.background": "#031417",
+        "textLink.activeForeground": "#40d4e7",
+        "textLink.foreground": "#40d4e7",
+        "textPreformat.foreground": "#e4b781",
+        "textSeparator.foreground": "#031417",
+        "walkThrough.embeddedEditorBackground": "#031417",
+        "welcomePage.buttonBackground": "#052529",
+        "welcomePage.buttonHoverBackground": "#062e32",
+        "input.background": "#052529",
+        "input.border": "#083f44",
+        "input.foreground": "#CDD3DE",
+        "input.placeholderForeground": "#87a7ab",
+        "inputOption.activeBorder": "#169fb1",
+        "inputValidation.errorForeground": "#ff4000",
+        "inputValidation.errorBackground": "#501502ee",
+        "inputValidation.errorBorder": "#691c02",
+        "inputValidation.infoForeground": "#40d4e7",
+        "inputValidation.infoBackground": "#0f6e7bee",
+        "inputValidation.infoBorder": "#148f9f",
+        "inputValidation.warningForeground": "#e69533",
+        "inputValidation.warningBackground": "#82694acc",
+        "inputValidation.warningBorder": "#a88457",
+        "editorWidget.background": "#062e32",
+        "editorWidget.border": "#0f1415",
+        "editorHoverWidget.background": "#062e32",
+        "editorHoverWidget.border": "#0f1415",
+        "editorSuggestWidget.background": "#062e32",
+        "editorSuggestWidget.border": "#0f1415",
+        "editorSuggestWidget.foreground": "#87a7ab",
+        "editorSuggestWidget.highlightForeground": "#40d4e7",
+        "editorSuggestWidget.selectedBackground": "#0e6671",
+        "editorGutter.background": "#031417",
+        "editorGutter.addedBackground": "#8ce99a",
+        "editorGutter.deletedBackground": "#e34e1c",
+        "editorGutter.modifiedBackground": "#e4b781",
+        "editor.selectionBackground": "#169fb144",
+        "editor.selectionHighlightBackground": "#49ace944",
+        "editor.inactiveSelectionBackground": "#0e657155",
+        "editor.wordHighlightStrongBackground": "#cc990033",
+        "editor.wordHighlightBackground": "#e4b78133",
+        "editor.findMatchBackground": "#40bf6a11",
+        "editor.findMatchHighlightBackground": "#0e667179",
+        "editor.findRangeHighlightBackground": "#49e9a633",
+        "editor.hoverHighlightBackground": "#169fb13f",
+        "editor.lineHighlightBackground": "#083d44ee",
+        "editor.lineHighlightBorder": "#083d44",
+        "editor.rangeHighlightBackground": "#083d44a1",
+        "editorLink.activeForeground": "#14a5ff",
+        "editorWhitespace.foreground": "#ffffff21",
+        "editorIndentGuide.background": "#223b3f",
+        "editorIndentGuide.activeBackground": "#3e6f74",
+        "editorBracketMatch.background": "#169fb122",
+        "editorBracketMatch.border": "#169fb1",
+        "editorRuler.foreground": "#243f42",
+        "editorCodeLens.foreground": "#507b95",
+        "terminal.ansiBlack": "#324a4d",
+        "terminal.ansiRed": "#e66533",
+        "terminal.ansiGreen": "#49e9a6",
+        "terminal.ansiYellow": "#e4b781",
+        "terminal.ansiBlue": "#49ace9",
+        "terminal.ansiMagenta": "#df769b",
+        "terminal.ansiCyan": "#49d6e9",
+        "terminal.ansiWhite": "#b2cacd",
+        "terminal.ansiBrightBlack": "#47686c",
+        "terminal.ansiBrightRed": "#e97749",
+        "terminal.ansiBrightGreen": "#60ebb1",
+        "terminal.ansiBrightYellow": "#e69533",
+        "terminal.ansiBrightBlue": "#60b6eb",
+        "terminal.ansiBrightMagenta": "#e798b3",
+        "terminal.ansiBrightCyan": "#60dbeb",
+        "terminal.ansiBrightWhite": "#c1d4d7",
+        "terminal.background": "#020c0e",
+        "terminal.foreground": "#b2cacd",
+        "terminalCursor.background": "#020c0e",
+        "terminalCursor.foreground": "#b2cacd",
+        "merge.border": "#03141700",
+        "merge.currentContentBackground": "#85f1ff22",
+        "merge.currentHeaderBackground": "#85f1ff44",
+        "merge.incomingContentBackground": "#9d92f222",
+        "merge.incomingHeaderBackground": "#9d92f244",
+        "merge.commonContentBackground": "#ffc18022",
+        "merge.commonHeaderBackground": "#ffc18044",
+        "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+        "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+        "editorOverviewRuler.commonContentForeground": "#ffc18044",
+        "editorOverviewRuler.border": "#031417",
+        "notificationCenter.border": "#062e32",
+        "notificationCenterHeader.foreground": "#87a7ab",
+        "notificationCenterHeader.background": "#062e32",
+        "notificationToast.border": "#062e32",
+        "notifications.foreground": "#CDD3DE",
+        "notifications.background": "#062e32",
+        "notifications.border": "#062e32",
+        "notificationLink.foreground": "#87a7ab",
+        "diffEditor.insertedTextBackground": "#16b67327",
+        "diffEditor.removedTextBackground": "#e6653341",
+        "debugToolBar.background": "#031417",
+        "debugExceptionWidget.background": "#031417",
+        "debugExceptionWidget.border": "#16a3b6",
+        "extensionButton.prominentBackground": "#099099",
+        "extensionButton.prominentForeground": "#e5f5f5",
+        "extensionButton.prominentHoverBackground": "#0cc",
+        "focusBorder": "#062e32",
+        "foreground": "#b2cacd",
+        "panel.background": "#020c0e",
+        "panel.border": "#0e6671",
+        "panelTitle.activeBorder": "#0e6671",
+        "panelTitle.activeForeground": "#40d4e7",
+        "panelTitle.inactiveForeground": "#87a7ab",
+        "peekView.border": "#169fb1",
+        "peekViewEditor.background": "#002124",
+        "peekViewEditor.matchHighlightBackground": "#00718079",
+        "peekViewEditor.matchHighlightBorder": "#007180cc",
+        "peekViewEditorGutter.background": "#002124",
+        "peekViewResult.background": "#031417",
+        "peekViewResult.fileForeground": "#e4b781",
+        "peekViewResult.lineForeground": "#87a7ab",
+        "peekViewResult.matchHighlightBackground": "#062e32",
+        "peekViewResult.selectionBackground": "#062e32",
+        "peekViewResult.selectionForeground": "#87a7ab",
+        "peekViewTitle.background": "#031417",
+        "peekViewTitleDescription.foreground": "#87a7ab",
+        "peekViewTitleLabel.foreground": "#e4b781",
+        "progressBar.background": "#40d4e7",
+        "scrollbar.shadow": "#00000044",
+        "scrollbarSlider.activeBackground": "#169fb1ad",
+        "scrollbarSlider.background": "#6a90955b",
+        "scrollbarSlider.hoverBackground": "#169fb162",
+        "gitDecoration.addedResourceForeground": "#16b673",
+        "gitDecoration.modifiedResourceForeground": "#49e9a6",
+        "gitDecoration.deletedResourceForeground": "#e34e1c",
+        "gitDecoration.untrackedResourceForeground": "#40d4e7",
+        "gitDecoration.ignoredResourceForeground": "#647e82",
+        "gitDecoration.conflictingResourceForeground": "#e4b781",
+        "pickerGroup.border": "#0e6671",
+        "pickerGroup.foreground": "#169fb1",
+        "list.activeSelectionBackground": "#0e6671",
+        "list.activeSelectionForeground": "#ebfdff",
+        "list.dropBackground": "#00404d",
+        "list.focusBackground": "#00404d",
+        "list.focusForeground": "#ebfdff",
+        "list.highlightForeground": "#40d4e7",
+        "list.hoverBackground": "#0b515b",
+        "list.hoverForeground": "#ebfdff",
+        "list.inactiveFocusBackground": "#062d32",
+        "list.inactiveSelectionBackground": "#07353b",
+        "list.inactiveSelectionForeground": "#b2cacd",
+        "list.errorForeground": "#e34e1c",
+        "list.warningForeground": "#ffa487",
+        "listFilterWidget.background": "#00404d",
+        "listFilterWidget.outline": "#49e9a6",
+        "listFilterWidget.noMatchesOutline": "#e34e1c",
+        "tree.indentGuidesStroke": "#3e6f74",
+        "settings.headerForeground": "#b2cacd",
+        "settings.modifiedItemIndicator": "#15ac31",
+        "settings.dropdownListBorder": "#0e657188",
+        "settings.dropdownBackground": "#073940",
+        "settings.dropdownForeground": "#0cc",
+        "settings.dropdownBorder": "#073940",
+        "settings.checkboxBackground": "#073940",
+        "settings.checkboxForeground": "#0cc",
+        "settings.checkboxBorder": "#073940",
+        "settings.textInputBackground": "#073940",
+        "settings.textInputForeground": "#0cc",
+        "settings.textInputBorder": "#073940",
+        "settings.numberInputBackground": "#062e32",
+        "settings.numberInputForeground": "#7060eb",
+        "settings.numberInputBorder": "#062e32",
+        "breadcrumb.foreground": "#87a7ab",
+        "breadcrumb.background": "#031417",
+        "breadcrumb.focusForeground": "#40d4e7",
+        "breadcrumb.activeSelectionForeground": "#ebfdff",
+        "breadcrumbPicker.background": "#062e32",
+        "titleBar.activeBackground": "#031417",
+        "titleBar.activeForeground": "#b2cacd",
+        "titleBar.inactiveBackground": "#031417",
+        "titleBar.inactiveForeground": "#87a7ab",
+        "menu.background": "#062e32",
+        "menu.foreground": "#87a7ab",
+        "menu.selectionBackground": "#0b515b",
+        "menu.selectionForeground": "#40d4e7",
+        "menu.selectionBorder": "#0b515b",
+        "menu.separatorBackground": "#40d4e7",
+        "menubar.selectionBackground": "#0b515b",
+        "menubar.selectionForeground": "#40d4e7",
+        "menubar.selectionBorder": "#0b515b",
+        "editor.snippetTabstopHighlightBackground": "#06292d",
+        "editor.snippetTabstopHighlightBorder": "#073136",
+        "editor.snippetFinalTabstopHighlightBackground": "#06292d",
+        "editor.snippetFinalTabstopHighlightBorder": "#073136",
+        "minimap.findMatchHighlight": "#49d6e9ee",
+        "minimap.errorHighlight": "#e34e1cee",
+        "minimap.warningHighlight": "#e69533ee",
+        "minimapGutter.addedBackground": "#16b673",
+        "minimapGutter.modifiedBackground": "#49e9a6",
+        "minimapGutter.deletedBackground": "#e34e1c",
+        "minimap.background": "#03141799"
+    },
+    "tokenColors": [
+        {
+            "name": "COMMENT",
+            "scope": [
+                "comment",
+                "punctuation.definition.comment",
+                "punctuation.definition.tag",
+                "comment.block.documentation punctuation.definition.bracket",
+                "source.ocaml comment constant.regexp meta.separator",
+                "markup.other.anchor support.constant",
+                "markup.fenced_code",
+                "markup.fenced_code punctuation.definition",
+                "punctuation.definition.heading",
+                "punctuation.definition.bold.markdown",
+                "punctuation.definition.italic.markdown",
+                "punctuation.definition.strikethrough.markdown"
+            ],
+            "settings": {
+                "foreground": "#5b858b"
+            }
+        },
+        {
+            "name": "TEXT",
+            "scope": [
+                "constant.character",
+                "constant.escape",
+                "text.html.markdown",
+                "punctuation.definition.list_item",
+                "keyword.begin.tag.ejs",
+                "constant.name.attribute.tag.pug",
+                "source.clojure meta.symbol",
+                "constant.other.description.jsdoc",
+                "keyword.other.array.phpdoc.php",
+                "keyword.operator.other.powershell",
+                "meta.link.inline punctuation.definition.string",
+                "source.sql",
+                "source meta.brace",
+                "source punctuation",
+                "text.html punctuation",
+                "markup meta punctuation.definition",
+                "meta.bracket.julia",
+                "meta.array.julia",
+                "entity.name.footnote",
+                "source.ocaml punctuation.definition.tag",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "entity.other.attribute-name strong",
+                "binding.fsharp keyword.symbol.fsharp",
+                "entity.name.record.field.elm",
+                "entity.name.record.field.accessor.elm",
+                "storage.modifier.array.bracket",
+                "source.css entity.other",
+                "meta.attribute-selector punctuation.definition.entity",
+                "markup.other.anchor string",
+                "punctuation.separator",
+                "punctuation.section",
+                "punctuation.terminator"
+            ],
+            "settings": {
+                "foreground": "#b2cacd"
+            }
+        },
+        {
+            "name": "KEYWORD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.modifier",
+                "meta.tag.sgml",
+                "punctuation.accessor",
+                "constant.other.color",
+                "entity.name.section",
+                "markup.heading",
+                "markup.heading punctuation.definition",
+                "entity.other.attribute-name.pseudo-class",
+                "entity.other.attribute-name.pseudo-element",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "storage.type.function.pug",
+                "text.pug storage.type",
+                "text.pug meta.tag.other",
+                "source.clojure storage.control",
+                "meta.expression.clojure",
+                "punctuation.separator.slice.python",
+                "punctuation.separator.question-mark.cs",
+                "punctuation.definition.parameters.varargs",
+                "source.go keyword.operator",
+                "punctuation.separator.pointer-access",
+                "punctuation.separator.other.ruby",
+                "keyword.package",
+                "keyword.import",
+                "punctuation.definition.keyword",
+                "punctuation.separator.hash.cs",
+                "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+                "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+                "source.kotlin storage.type.import",
+                "source.kotlin storage.type.package",
+                "constant.string.documentation.powershell",
+                "punctuation.section.directive",
+                "storage.type.rust",
+                "punctuation.definition.attribute",
+                "punctuation.definition.preprocessor",
+                "punctuation.separator.namespace",
+                "punctuation.separator.method",
+                "keyword.control punctuation.definition.function",
+                "source.ocaml variable.interpolation string",
+                "source.reason variable.interpolation",
+                "punctuation.definition.directive",
+                "storage.type.modifier",
+                "keyword.other.class.fileds",
+                "source.toml entity.other.attribute-name",
+                "source.css entity.name.tag.custom",
+                "sharing.modifier",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby"
+            ],
+            "settings": {
+                "foreground": "#df769b"
+            }
+        },
+        {
+            "name": "VARIABLE",
+            "scope": [
+                "variable",
+                "variable.object",
+                "variable.other",
+                "variable.parameter",
+                "support",
+                "entity.name.module",
+                "variable.import.parameter",
+                "variable.other.class",
+                "meta.toc-list.id.html",
+                "source.json meta.structure.dictionary.json support.type.property-name.json",
+                "meta.var.clojure",
+                "entity.name.variable",
+                "source.java meta.class.body.java",
+                "entity.name.package.go",
+                "source.c",
+                "source.cpp",
+                "source.go",
+                "source.python",
+                "meta.function-call.arguments.python",
+                "source.ruby",
+                "source.coffee.embedded.source",
+                "source.coffee",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "storage.type.annotation",
+                "punctuation.definition.annotation",
+                "source.groovy.embedded.source",
+                "punctuation.definition.variable",
+                "source.powershell",
+                "string.quoted.interpolated.vala constant.character.escape.vala",
+                "source.apacheconf",
+                "source.objc",
+                "source.crystal",
+                "string.quoted.double.kotlin entity.string.template.element.kotlin",
+                "entity.name.package.kotlin",
+                "meta.template.expression.kotlin",
+                "parameter.variable.function",
+                "variable.other.constant.elixir",
+                "source.elixir.embedded.source",
+                "source.sql.embedded",
+                "punctuation.definition.placeholder",
+                "source.swift",
+                "source.julia",
+                "source.shell",
+                "variable.other.normal punctuation.definition.variable.shell",
+                "source.reason variable.language",
+                "source.reason variable.language string.other.link",
+                "source.elm meta.value",
+                "source.elm meta.declaration.module",
+                "meta.embedded.block variable punctuation.definition.variable.php",
+                "string.quoted.double.class.other",
+                "source.toml keyword",
+                "support.type.nim",
+                "source.tf meta.template.expression",
+                "source.scala entity.name.import",
+                "markup.code",
+                "markup.fenced_code.block"
+            ],
+            "settings": {
+                "foreground": "#e4b781"
+            }
+        },
+        {
+            "name": "ANNOTATION",
+            "scope": [
+                "support.variable.property",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "entity.other.attribute-name.id",
+                "entity.other.attribute-name.id punctuation.definition.entity",
+                "entity.name.type.annotation.kotlin",
+                "support.type.primitive",
+                "meta.type.parameters entity.name.type",
+                "meta.type.annotation entity.name.type",
+                "punctuation.definition.typeparameters",
+                "source.python support.type.python",
+                "comment.block.documentation.phpdoc.php keyword.other.type.php",
+                "storage.type.php",
+                "keyword.type",
+                "storage.type.cs",
+                "storage.type.c",
+                "storage.type.objc",
+                "punctuation.definition.storage.type.objc",
+                "markup punctuation.definition",
+                "storage.type.powershell",
+                "comment.block.documentation entity.name.type",
+                "source.java storage.type",
+                "storage.type.primitive",
+                "source.groovy storage.type",
+                "storage.type.r",
+                "source.haskell storage.type",
+                "punctuation.separator.clause-head-body",
+                "source.go storage.type",
+                "storage.type.core.rust",
+                "storage.class.std.rust",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "support.type.vb",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "constant.other.reference",
+                "source.graphql support.type",
+                "source.reason support.type string",
+                "entity.name.type.fsharp",
+                "source.elm storage.type",
+                "storage.type.user-defined",
+                "storage.type.built-in",
+                "support.type.builtin",
+                "source.swift support.type",
+                "support.class.crystal",
+                "storage.type.integral",
+                "source.cpp storage.type.cpp",
+                "source.vala storage.type",
+                "source.hlsl storage.type.basic",
+                "source.hlsl support.type.other",
+                "source.apex storage.type",
+                "source.nim storage.type",
+                "source.cpp entity.name.type",
+                "support.class.builtin",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "markup.raw.monospace",
+                "markup.mark",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric"
+            ],
+            "settings": {
+                "foreground": "#d67e5c"
+            }
+        },
+        {
+            "name": "CONSTANT",
+            "scope": [
+                "constant",
+                "variable.other.constant",
+                "support.constant",
+                "punctuation.definition.entity",
+                "constant.character.entity",
+                "support.variable.magic",
+                "markup.quote",
+                "entity.name.type.type-parameter.cs",
+                "punctuation.bracket.angle",
+                "entity.name.function.preprocessor.c",
+                "storage.type.scala",
+                "entity.helper.apacheconf",
+                "variable.language.crystal",
+                "punctuation.definition.constant",
+                "support.constant punctuation.definition.variable",
+                "constant.character.math",
+                "support.class.math",
+                "source.graphql constant.character",
+                "source.reason constant.language.list",
+                "source.cpp variable.other.enummember",
+                "support.variable.class.hideshow",
+                "entity.other.attribute-name.class",
+                "meta.attribute.id entity.other.attribute-name",
+                "text.html entity.other.attribute-name",
+                "meta.tag.attributes entity.other.attribute-name",
+                "text.xml entity.other.attribute-name",
+                "source.cs entity.other.attribute-name",
+                "constant.character.format.placeholder",
+                "constant.other.placeholder",
+                "source.vue entity.other.attribute-name",
+                "entity.other.attribute-name.mjml",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "meta.definition.attribute-entry punctuation.separator"
+            ],
+            "settings": {
+                "foreground": "#d5971a"
+            }
+        },
+        {
+            "name": "TAG",
+            "scope": [
+                "variable.language",
+                "variable.parameter.function.language.special",
+                "punctuation.definition.italic",
+                "punctuation.definition.bold",
+                "entity.name.tag",
+                "variable.language punctuation.definition.variable",
+                "keyword.control.clojure",
+                "support.type.exception.python",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "keyword.other.var.cs",
+                "storage.modifier.super",
+                "source.go keyword",
+                "keyword.function.go",
+                "meta.separator",
+                "keyword.other.fn.rust",
+                "storage.modifier.static.rust",
+                "source.r meta.function.r keyword.control.r",
+                "storage.type.def",
+                "meta.class.identifier storage.modifier",
+                "source.scala keyword.declaration",
+                "storage.type",
+                "comment.block.documentation punctuation.definition.block.tag",
+                "comment.block.documentation punctuation.definition.inline.tag",
+                "entity.tag.apacheconf",
+                "keyword.other.julia",
+                "source.julia storage.modifier",
+                "constant.language.empty-list.haskell",
+                "meta.function.powershell storage.type.powershell",
+                "keyword.control.fun",
+                "punctuation.terminator.function",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml storage.type markup.underline",
+                "binding.fsharp keyword",
+                "function.anonymous keyword",
+                "function.anonymous keyword.symbol.fsharp",
+                "meta.embedded.block variable.language punctuation.definition.variable.php",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other.class",
+                "source.wsd keyword.other.linebegin",
+                "keyword.other.skinparam.keyword",
+                "keyword.other.nim",
+                "markup.deleted.diff",
+                "source.tf support.class.variable",
+                "meta.function.lua keyword.control.lua",
+                "markup.block entity.name.tag",
+                "markup.meta.attribute-list",
+                "source.zig keyword.default",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "foreground": "#e66533"
+            }
+        },
+        {
+            "name": "STRING",
+            "scope": [
+                "string",
+                "punctuation.definition.string",
+                "source.css support.constant",
+                "entity.name.import.go",
+                "markup.raw.texttt",
+                "markup.inserted.diff",
+                "source.scala punctuation.definition.character",
+                "constant.character.literal.scala",
+                "source.tf entity.name"
+            ],
+            "settings": {
+                "foreground": "#49e9a6"
+            }
+        },
+        {
+            "name": "STRINGINTERPOLATED",
+            "scope": [
+                "string.template",
+                "punctuation.definition.string.template",
+                "string.interpolated.python string.quoted.single.python",
+                "string.quoted.double.heredoc",
+                "string.quoted.interpolated.vala",
+                "string.quoted.interpolated.vala punctuation.definition.string",
+                "string.regexp.apacheconf",
+                "markup.inline.raw.string",
+                "markup.inline.raw punctuation.definition.raw",
+                "string.quoted.double.interpolated.crystal",
+                "string.quoted.double.interpolated.crystal punctuation.definition.string",
+                "text.tex markup.raw"
+            ],
+            "settings": {
+                "foreground": "#16b673"
+            }
+        },
+        {
+            "name": "NUMBER",
+            "scope": [
+                "constant.numeric",
+                "constant.language",
+                "punctuation.separator.decimal.period.php",
+                "keyword.operator.null-conditional.cs",
+                "punctuation.separator.question-mark.cs",
+                "constant.integer.apacheconf",
+                "keyword.operator.nullable-type",
+                "constant.language punctuation.definition.variable",
+                "constant.others.fsharp",
+                "keyword.other.unit",
+                "string.quoted.double.skinparam.value",
+                "source.toml constant",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "foreground": "#7060eb"
+            }
+        },
+        {
+            "name": "FUNCTION",
+            "scope": [
+                "variable.function",
+                "support.type.property-name",
+                "entity.name.function",
+                "string.other.link",
+                "markup.link",
+                "support.type.vendored",
+                "support.other.variable",
+                "meta.function-call.generic.python",
+                "meta.method-call.groovy meta.method.groovy",
+                "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+                "punctuation.definition.decorator",
+                "support.function.any-method",
+                "text.tex support.function",
+                "text.tex punctuation.definition.function",
+                "entity.name.section.fsharp entity.name.section.fsharp",
+                "support.variable.class.function",
+                "keyword.control.cucumber.table",
+                "punctuation.decorator",
+                "source.tf support.class"
+            ],
+            "settings": {
+                "foreground": "#16a3b6"
+            }
+        },
+        {
+            "name": "SUPPORT",
+            "scope": [
+                "entity.name",
+                "entity.other",
+                "support.orther.namespace.use.php",
+                "meta.use.php",
+                "support.other.namespace.php",
+                "support.type",
+                "support.class",
+                "punctuation.definition.parameters",
+                "support.function",
+                "support.function.construct",
+                "markup.changed.git_gutter",
+                "markup.underline.link",
+                "markup.underline.link.image",
+                "markup.underline",
+                "meta.symbol.namespace.clojure",
+                "entity.mime-type.apacheconf",
+                "keyword.operator.function.infix",
+                "entity.name.function.infix",
+                "entity.name.function.call.kotlin",
+                "text.tex support.function.verb",
+                "text.tex support.function.texttt",
+                "source.reason constant.language.unit",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "constant.language.unit.fsharp",
+                "source.wsd support.class.preprocessings",
+                "keyword.language.gherkin.feature.scenario",
+                "source.nim keyword.other.common.function",
+                "entity.name.type.namespace",
+                "entity.name.scope-resolution.function.call"
+            ],
+            "settings": {
+                "foreground": "#49d6e9"
+            }
+        },
+        {
+            "name": "MISC",
+            "scope": [
+                "source.js constant.other.object.key.js string.unquoted.label.js",
+                "source.js punctuation.section.embedded",
+                "punctuation.definition.template-expression",
+                "support.class",
+                "storage.type.string.python",
+                "string.interpolated.pug",
+                "support.constant.handlebars",
+                "source.clojure punctuation.section.set",
+                "source.clojure punctuation.section.metadata",
+                "entity.global.clojure",
+                "source.python meta.function-call.python support.type.python",
+                "entity.other.inherited-class.python",
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.section.embedded.end.ruby source.ruby",
+                "support.constant.math",
+                "entity.namespace.r",
+                "meta.method-call.groovy storage.type.groovy",
+                "source.scala entity.name.class.declaration",
+                "constant.character.escape",
+                "support.function.macro.julia",
+                "string.replacement.apacheconf",
+                "storage.modifier.using.vala",
+                "constant.other.haskell",
+                "source.objc entity.name.tag",
+                "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+                "meta.embedded.line.crystal punctuation.section.embedded",
+                "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+                "punctuation.section.embedded",
+                "punctuation.section.tag",
+                "punctuation.section.embedded source.swift",
+                "variable.other.bracket punctuation.definition.variable",
+                "string.interpolated.dollar punctuation.definition.string",
+                "constant.character.escape punctuation.definition.keyword",
+                "source.ocaml entity.name.class constant.numeric",
+                "source.reason entity.name.class",
+                "keyword.format.specifier.fsharp",
+                "support.module.elm",
+                "meta.embedded.block.php punctuation.definition.variable.php",
+                "source.vala storage.type",
+                "support.variable.class.group",
+                "entity.name.type.class",
+                "source.tf meta.keyword.list",
+                "source.tf meta.keyword.map",
+                "entity.name.class.lua",
+                "markup.substitution"
+            ],
+            "settings": {
+                "foreground": "#49ace9"
+            }
+        },
+        {
+            "name": "INVALID",
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#e3541c"
+            }
+        },
+        {
+            "name": "ITALIC",
+            "scope": [
+                "comment",
+                "storage.modifier",
+                "punctuation.definition.comment",
+                "entity.other",
+                "variable.language",
+                "support.type.vendored",
+                "support.constant.vendored",
+                "markup.quote",
+                "markup.italic",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "keyword.control.clojure",
+                "source.clojure meta.symbol.dynamic",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "variable.other.member.c",
+                "support.type.core.rust",
+                "variable.other.object.property",
+                "variable.other.property",
+                "source.r meta.function.r keyword.control.r",
+                "comment.line.roxygen.r keyword",
+                "comment.line.roxygen.r variable.parameter.r",
+                "keyword.control.inheritance.coffee",
+                "comment.block.documentation.phpdoc.php keyword",
+                "keyword.other.array.phpdoc.php",
+                "storage.type.modifier",
+                "comment.block.javadoc.java keyword",
+                "comment.block.javadoc.java variable.parameter.java",
+                "keyword.operator.documentation.powershell",
+                "storage.type.scala",
+                "variable.parameter.function.language.special",
+                "comment.block.documentation.scala keyword",
+                "comment.block.documentation.scala variable.parameter",
+                "support.function.builtin.go",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.ruby",
+                "source.vala storage.type.generic",
+                "constant.other.table-name",
+                "constant.other.placeholder",
+                "variable.other.field",
+                "entity.alias.import.go",
+                "source.swift keyword.other.declaration-specifier",
+                "support.variable.swift",
+                "keyword.other.capture-specifier",
+                "text.tex support.function.emph",
+                "constant.other.math",
+                "support.function.textit",
+                "entity.name.footnote",
+                "entity.name.function.directive.graphql",
+                "source.graphql support.type.enum",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "abstract.definition.fsharp keyword",
+                "abstract.definition.fsharp entity",
+                "function.anonymous keyword",
+                "entity.name.record.field.accessor.elm",
+                "support.type.primitive",
+                "support.type.builtin",
+                "keyword.type.cs",
+                "storage.type.built-in",
+                "storage.type.primitive",
+                "source.python support.type.python",
+                "storage.type.core.rust",
+                "source.swift support.type",
+                "source.go storage.type",
+                "storage.type.php",
+                "storage.type.function.kotlin",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "variable.other.member",
+                "keyword.other.import",
+                "keyword.package",
+                "keyword.import",
+                "source.wsd keyword.control.diagram",
+                "keyword.language.gherkin.feature.step",
+                "source.hlsl storage.type.basic",
+                "source.apex keyword.type",
+                "sharing.modifier",
+                "source.nim storage.type.concrete",
+                "meta.preprocessor.pragma.nim",
+                "storage.type.integral",
+                "entity.name.scope-resolution.function.call",
+                "support.class.builtin",
+                "comment.block.documentation storage.type.class",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "meta.import keyword.control",
+                "keyword.control.export",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "keyword.local.lua",
+                "markup.mark.constrained markup.mark",
+                "markup.block.open",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric",
+                "source.zig keyword.type",
+                "source.zig keyword.storage",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "BOLD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.operator",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.type.function.arrow",
+                "constant.other.color",
+                "punctuation.accessor",
+                "entity.name.section",
+                "markdown.heading",
+                "markup.inline.raw punctuation.definition.raw",
+                "markup.heading",
+                "storage.type.function.pug",
+                "storage.type.function.python",
+                "storage.type.annotation",
+                "punctuation.bracket.angle",
+                "keyword.other.new",
+                "storage.type.generic.wildcard",
+                "source.go keyword.operator",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "variable.parameter",
+                "support.function.builtin.rust",
+                "storage.type.function.coffee",
+                "entity.name.variable.parameter",
+                "punctuation.separator.hash.cs",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "meta.function.parameters variable.other",
+                "entity.name.type.annotation.kotlin",
+                "storage.type.objc",
+                "parameter.variable.function",
+                "markup punctuation.definition",
+                "punctuation.section.directive",
+                "punctuation.definition.preprocessor",
+                "source.ruby punctuation.definition.variable",
+                "support.function.textbf",
+                "source.graphql support.type.builtin",
+                "source.ocaml variable.interpolation string",
+                "entity.name.function.definition.special.constructor",
+                "entity.name.function.definition.special.member.destructor.",
+                "meta.function.parameters variable punctuation.definition.variable.php",
+                "source.wsd keyword.other.activity",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby",
+                "keyword.function.go",
+                "keyword.other.fn.rust",
+                "markup.other.anchor",
+                "markup.list.bullet",
+                "markup.list punctuation.definition",
+                "keyword.control.default",
+                "punctuation.section",
+                "punctuation.separator",
+                "punctuation.terminator",
+                "markup.bold.markdown",
+                "source.zig storage.type.function"
+            ],
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "BOLD-ITALIC",
+            "scope": [
+                "markup.quote markup.bold",
+                "text.html punctuation.section.embedded",
+                "variable.other.c",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "source.rust meta.attribute.rust",
+                "meta.attribute.id entity.other.attribute-name",
+                "source.ocaml punctuation.definition.tag emphasis",
+                "source.tf entity.name",
+                "markup.quote punctuation.definition",
+                "markup.fenced_code punctuation.definition",
+                "fenced_code.block.language"
+            ],
+            "settings": {
+                "fontStyle": "bold italic"
+            }
+        },
+        {
+            "name": "NORMAL",
+            "scope": [
+                "keyword.begin.tag.ejs",
+                "source.python meta.function.decorator.python support.type.python",
+                "source.cs keyword.other",
+                "keyword.other.var.cs",
+                "source.go keyword",
+                "storage.modifier.static.rust",
+                "variable.parameter.r",
+                "variable.parameter.handlebars",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "meta.class.identifier storage.modifier",
+                "keyword.operator.other.powershell",
+                "source.css variable.parameter",
+                "string.interpolated variable.parameter",
+                "source.apacheconf keyword",
+                "keyword.other.julia",
+                "storage.modifier.using.vala",
+                "source.objc keyword.other.property.attribute",
+                "source.sql keyword.other",
+                "keyword.other.using.vala",
+                "keyword.operator.function.infix",
+                "keyword.control.directive",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "entity.name.function.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "punctuation.definition.variable",
+                "entity.name.section.latex",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "keyword.format.specifier.fsharp",
+                "entity.name.section.fsharp",
+                "binding.fsharp keyword",
+                "binding.fsharp keyword.symbol",
+                "record.fsharp keyword",
+                "keyword.symbol.fsharp",
+                "entity.name.section.fsharp keyword",
+                "namespace.open.fsharp keyword",
+                "namespace.open.fsharp entity",
+                "storage.type",
+                "source.cpp keyword.other",
+                "source.c keyword.other",
+                "keyword.other.unit",
+                "storage.modifier.array.bracket",
+                "meta.import.haskell keyword",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other",
+                "keyword.other.skinparam",
+                "source.css keyword.control",
+                "source.css keyword.operator",
+                "keyword.language.gherkin.feature.scenario",
+                "keyword.control.cucumber.table",
+                "source.toml entity.other.attribute-name",
+                "source.toml keyword",
+                "keyword.other.nim",
+                "source.nim keyword.other.common.function",
+                "source.nim keyword.other",
+                "source.scala keyword.declaration",
+                "source.scala entity.name.class.declaration",
+                "keyword.control.lua",
+                "source.css punctuation.section",
+                "punctuation.section.embedded",
+                "source.c punctuation.section",
+                "source.cpp punctuation.section",
+                "source.java punctuation.section",
+                "source.php punctuation.section",
+                "source.powershell punctuation.section",
+                "source.r punctuation.section",
+                "source.ruby punctuation.section",
+                "source.swift punctuation.section",
+                "source.objc punctuation.section",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.default",
+                "source.zig keyword.statement",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "STRIKETHROUGH",
+            "scope": ["markup.strikethrough"],
+            "settings": {
+                "fontStyle": "strikethrough"
+            }
+        }
+    ]
+}

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

@@ -0,0 +1,1108 @@
+{
+    "name": "Noctis Sereno",
+    "type": "dark",
+    "colors": {
+        "selection.background": "#107684",
+        "descriptionForeground": "#929ea0",
+        "errorForeground": "#e34e1c",
+        "widget.shadow": "#00000044",
+        "editor.background": "#062e32",
+        "editor.foreground": "#b2cacd",
+        "editorLineNumber.foreground": "#4e6b6e",
+        "editorLineNumber.activeForeground": "#169fb1",
+        "editorCursor.foreground": "#85efff",
+        "badge.background": "#40d4e7",
+        "badge.foreground": "#0f1415",
+        "activityBar.background": "#062e32",
+        "activityBar.dropBackground": "#929ea065",
+        "activityBar.border": "#0f1415",
+        "activityBar.foreground": "#169fb1",
+        "activityBar.inactiveForeground": "#169fb177",
+        "activityBarBadge.background": "#40d4e7",
+        "activityBarBadge.foreground": "#0f1415",
+        "activityBar.activeBackground": "#40d4e733",
+        "activityBar.activeBorder": "#40d4e7",
+        "sideBar.background": "#052629",
+        "sideBar.dropBackground": "#052629dd",
+        "sideBar.border": "#0f1415",
+        "sideBar.foreground": "#a5b5b5",
+        "sideBarSectionHeader.background": "#083d44",
+        "sideBarSectionHeader.foreground": "#a5b5b5",
+        "sideBarSectionHeader.border": "#0f1415",
+        "sideBarTitle.foreground": "#a5b5b5",
+        "statusBar.background": "#052629",
+        "statusBar.foreground": "#169fb1",
+        "statusBar.border": "#0f1415",
+        "statusBar.debuggingBackground": "#052629",
+        "statusBar.debuggingForeground": "#df769b50",
+        "statusBar.debuggingBorder": "#df769baf",
+        "statusBar.noFolderForeground": "#87a7ab",
+        "statusBar.noFolderBackground": "#052629",
+        "statusBar.noFolderBorder": "#052629",
+        "statusBarItem.activeBackground": "#19bacc45",
+        "statusBarItem.hoverBackground": "#07373b",
+        "statusBarItem.prominentBackground": "#03191b",
+        "statusBarItem.prominentHoverBackground": "#003338",
+        "button.background": "#099099",
+        "button.foreground": "#ebfdff",
+        "button.hoverBackground": "#0cc",
+        "dropdown.background": "#083f44",
+        "dropdown.border": "#083f44",
+        "dropdown.foreground": "#87a7ab",
+        "editorMarkerNavigation.background": "#3a3a5e29",
+        "editorMarkerNavigationError.background": "#e34e1c",
+        "editorMarkerNavigationWarning.background": "#e69533",
+        "editorError.border": "#062e32",
+        "editorError.foreground": "#e34e1c",
+        "editorWarning.border": "#062e32",
+        "editorWarning.foreground": "#e69533",
+        "editorInfo.border": "#062e32",
+        "editorInfo.foreground": "#40d4e7",
+        "editorHint.border": "#49e9a600",
+        "editorHint.foreground": "#49e9a6",
+        "editorGroup.emptyBackground": "#5f6b6d33",
+        "editorGroup.border": "#0f1415",
+        "editorGroup.dropBackground": "#5f6b6d33",
+        "editorGroupHeader.noTabsBackground": "#062e32",
+        "editorGroupHeader.tabsBackground": "#062e32",
+        "editorGroupHeader.tabsBorder": "#062e32",
+        "tab.activeBackground": "#062e32",
+        "tab.unfocusedActiveBackground": "#112527",
+        "tab.activeForeground": "#40d4e7",
+        "tab.border": "#0f1415",
+        "tab.inactiveBackground": "#062e32",
+        "tab.inactiveForeground": "#87a7ab",
+        "tab.unfocusedActiveForeground": "#87a7ab",
+        "tab.unfocusedInactiveForeground": "#87a7ab",
+        "tab.activeBorderTop": "#40d4e7",
+        "tab.activeModifiedBorder": "#49e9a6",
+        "tab.activeBorder": "#062e32",
+        "tab.unfocusedActiveBorder": "#062e32",
+        "tab.unfocusedHoverBackground": "#169fb121",
+        "textBlockQuote.background": "#052629",
+        "textBlockQuote.border": "#16a3b6",
+        "textCodeBlock.background": "#052629",
+        "textLink.activeForeground": "#40d4e7",
+        "textLink.foreground": "#40d4e7",
+        "textPreformat.foreground": "#e4b781",
+        "textSeparator.foreground": "#052629",
+        "walkThrough.embeddedEditorBackground": "#052629",
+        "welcomePage.buttonBackground": "#052629",
+        "welcomePage.buttonHoverBackground": "#003742",
+        "input.background": "#062e32",
+        "input.border": "#083d44",
+        "input.foreground": "#CDD3DE",
+        "input.placeholderForeground": "#87a7ab",
+        "inputOption.activeBorder": "#169fb1",
+        "inputValidation.errorForeground": "#ff4000",
+        "inputValidation.errorBackground": "#501502ee",
+        "inputValidation.errorBorder": "#691c02",
+        "inputValidation.infoForeground": "#40d4e7",
+        "inputValidation.infoBackground": "#0f6e7bee",
+        "inputValidation.infoBorder": "#148f9f",
+        "inputValidation.warningForeground": "#e69533",
+        "inputValidation.warningBackground": "#82694acc",
+        "inputValidation.warningBorder": "#a88457",
+        "editorWidget.background": "#083d44",
+        "editorWidget.border": "#0f1415",
+        "editorHoverWidget.background": "#083d44",
+        "editorHoverWidget.border": "#0f1415",
+        "editorSuggestWidget.background": "#083d44",
+        "editorSuggestWidget.border": "#0f1415",
+        "editorSuggestWidget.foreground": "#87a7ab",
+        "editorSuggestWidget.highlightForeground": "#40d4e7",
+        "editorSuggestWidget.selectedBackground": "#0e6671",
+        "editorGutter.background": "#062e32",
+        "editorGutter.addedBackground": "#8ce99a",
+        "editorGutter.deletedBackground": "#e34e1c",
+        "editorGutter.modifiedBackground": "#e0c184",
+        "editor.selectionBackground": "#169fb144",
+        "editor.selectionHighlightBackground": "#49ace944",
+        "editor.inactiveSelectionBackground": "#0e657155",
+        "editor.wordHighlightStrongBackground": "#cc990033",
+        "editor.wordHighlightBackground": "#e4b78133",
+        "editor.findMatchBackground": "#40bf6a11",
+        "editor.findMatchHighlightBackground": "#0e667179",
+        "editor.findRangeHighlightBackground": "#49e9a633",
+        "editor.hoverHighlightBackground": "#169fb13f",
+        "editor.lineHighlightBackground": "#083d44ee",
+        "editor.lineHighlightBorder": "#083d44",
+        "editor.rangeHighlightBackground": "#083d44a1",
+        "editorLink.activeForeground": "#14a5ff",
+        "editorWhitespace.foreground": "#ffffff21",
+        "editorIndentGuide.background": "#223b3f",
+        "editorIndentGuide.activeBackground": "#3e6f74",
+        "editorBracketMatch.background": "#169fb122",
+        "editorBracketMatch.border": "#169fb1",
+        "editorRuler.foreground": "#29484c",
+        "editorCodeLens.foreground": "#507b95",
+        "terminal.ansiBlack": "#324a4d",
+        "terminal.ansiRed": "#e66533",
+        "terminal.ansiGreen": "#49e9a6",
+        "terminal.ansiYellow": "#e4b781",
+        "terminal.ansiBlue": "#49ace9",
+        "terminal.ansiMagenta": "#df769b",
+        "terminal.ansiCyan": "#49d6e9",
+        "terminal.ansiWhite": "#b2cacd",
+        "terminal.ansiBrightBlack": "#47686c",
+        "terminal.ansiBrightRed": "#e97749",
+        "terminal.ansiBrightGreen": "#60ebb1",
+        "terminal.ansiBrightYellow": "#e69533",
+        "terminal.ansiBrightBlue": "#60b6eb",
+        "terminal.ansiBrightMagenta": "#e798b3",
+        "terminal.ansiBrightCyan": "#60dbeb",
+        "terminal.ansiBrightWhite": "#c1d4d7",
+        "terminal.background": "#041d20",
+        "terminal.foreground": "#b2cacd",
+        "terminalCursor.background": "#041d20",
+        "terminalCursor.foreground": "#b2cacd",
+        "merge.border": "#062e3200",
+        "merge.currentContentBackground": "#85f1ff22",
+        "merge.currentHeaderBackground": "#85f1ff44",
+        "merge.incomingContentBackground": "#9d92f222",
+        "merge.incomingHeaderBackground": "#9d92f244",
+        "merge.commonContentBackground": "#ffc18022",
+        "merge.commonHeaderBackground": "#ffc18044",
+        "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+        "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+        "editorOverviewRuler.commonContentForeground": "#ffc18044",
+        "editorOverviewRuler.border": "#062e32",
+        "notificationCenter.border": "#083d44",
+        "notificationCenterHeader.foreground": "#87a7ab",
+        "notificationCenterHeader.background": "#083d44",
+        "notificationToast.border": "#083d44",
+        "notifications.foreground": "#CDD3DE",
+        "notifications.background": "#083d44",
+        "notifications.border": "#083d44",
+        "notificationLink.foreground": "#87a7ab",
+        "diffEditor.insertedTextBackground": "#16b67327",
+        "diffEditor.removedTextBackground": "#e6653341",
+        "debugToolBar.background": "#052629",
+        "debugExceptionWidget.background": "#052629",
+        "debugExceptionWidget.border": "#16a3b6",
+        "extensionButton.prominentBackground": "#099099",
+        "extensionButton.prominentForeground": "#e5f5f5",
+        "extensionButton.prominentHoverBackground": "#0cc",
+        "focusBorder": "#083d44",
+        "foreground": "#b2cacd",
+        "panel.background": "#041d20",
+        "panel.border": "#169fb1",
+        "panelTitle.activeBorder": "#169fb1",
+        "panelTitle.activeForeground": "#40d4e7",
+        "panelTitle.inactiveForeground": "#87a7ab",
+        "peekView.border": "#169fb1",
+        "peekViewEditor.background": "#002124",
+        "peekViewEditor.matchHighlightBackground": "#00718079",
+        "peekViewEditor.matchHighlightBorder": "#007180cc",
+        "peekViewEditorGutter.background": "#002124",
+        "peekViewResult.background": "#052629",
+        "peekViewResult.fileForeground": "#e4b781",
+        "peekViewResult.lineForeground": "#87a7ab",
+        "peekViewResult.matchHighlightBackground": "#083d44",
+        "peekViewResult.selectionBackground": "#083d44",
+        "peekViewResult.selectionForeground": "#87a7ab",
+        "peekViewTitle.background": "#052629",
+        "peekViewTitleDescription.foreground": "#87a7ab",
+        "peekViewTitleLabel.foreground": "#e4b781",
+        "progressBar.background": "#40d4e7",
+        "scrollbar.shadow": "#00000044",
+        "scrollbarSlider.activeBackground": "#169fb1ad",
+        "scrollbarSlider.background": "#6a90955b",
+        "scrollbarSlider.hoverBackground": "#169fb162",
+        "gitDecoration.addedResourceForeground": "#16b673",
+        "gitDecoration.modifiedResourceForeground": "#49e9a6",
+        "gitDecoration.deletedResourceForeground": "#e34e1c",
+        "gitDecoration.untrackedResourceForeground": "#40d4e7",
+        "gitDecoration.ignoredResourceForeground": "#647e82",
+        "gitDecoration.conflictingResourceForeground": "#e4b781",
+        "pickerGroup.border": "#0e6671",
+        "pickerGroup.foreground": "#169fb1",
+        "list.activeSelectionBackground": "#0e6671",
+        "list.activeSelectionForeground": "#ebfdff",
+        "list.dropBackground": "#00404d",
+        "list.focusBackground": "#00404d",
+        "list.focusForeground": "#ebfdff",
+        "list.highlightForeground": "#40d4e7",
+        "list.hoverBackground": "#0b515b",
+        "list.hoverForeground": "#ebfdff",
+        "list.inactiveFocusBackground": "#062d32",
+        "list.inactiveSelectionBackground": "#07353b",
+        "list.inactiveSelectionForeground": "#b2cacd",
+        "list.errorForeground": "#e34e1c",
+        "list.warningForeground": "#ffa487",
+        "listFilterWidget.background": "#00404d",
+        "listFilterWidget.outline": "#49e9a6",
+        "listFilterWidget.noMatchesOutline": "#e34e1c",
+        "tree.indentGuidesStroke": "#3e6f74",
+        "settings.headerForeground": "#b2cacd",
+        "settings.modifiedItemIndicator": "#15ac31",
+        "settings.dropdownListBorder": "#0e657188",
+        "settings.dropdownBackground": "#083d44",
+        "settings.dropdownForeground": "#0cc",
+        "settings.dropdownBorder": "#083d44",
+        "settings.checkboxBackground": "#083d44",
+        "settings.checkboxForeground": "#0cc",
+        "settings.checkboxBorder": "#083d44",
+        "settings.textInputBackground": "#083d44",
+        "settings.textInputForeground": "#0cc",
+        "settings.textInputBorder": "#083d44",
+        "settings.numberInputBackground": "#052629",
+        "settings.numberInputForeground": "#7060eb",
+        "settings.numberInputBorder": "#052629",
+        "breadcrumb.foreground": "#87a7ab",
+        "breadcrumb.background": "#062e32",
+        "breadcrumb.focusForeground": "#40d4e7",
+        "breadcrumb.activeSelectionForeground": "#ebfdff",
+        "breadcrumbPicker.background": "#083d44",
+        "titleBar.activeBackground": "#052629",
+        "titleBar.activeForeground": "#b2cacd",
+        "titleBar.inactiveBackground": "#052629",
+        "titleBar.inactiveForeground": "#87a7ab",
+        "menu.background": "#083d44",
+        "menu.foreground": "#87a7ab",
+        "menu.selectionBackground": "#0b515b",
+        "menu.selectionForeground": "#40d4e7",
+        "menu.selectionBorder": "#0b515b",
+        "menu.separatorBackground": "#40d4e7",
+        "menubar.selectionBackground": "#0b515b",
+        "menubar.selectionForeground": "#40d4e7",
+        "menubar.selectionBorder": "#0b515b",
+        "editor.snippetTabstopHighlightBackground": "#052629",
+        "editor.snippetTabstopHighlightBorder": "#062f32",
+        "editor.snippetFinalTabstopHighlightBackground": "#052629",
+        "editor.snippetFinalTabstopHighlightBorder": "#062f32",
+        "minimap.findMatchHighlight": "#49d6e9ee",
+        "minimap.errorHighlight": "#e34e1cee",
+        "minimap.warningHighlight": "#e69533ee",
+        "minimapGutter.addedBackground": "#16b673",
+        "minimapGutter.modifiedBackground": "#49e9a6",
+        "minimapGutter.deletedBackground": "#e34e1c",
+        "minimap.background": "#062e3299"
+    },
+    "tokenColors": [
+        {
+            "name": "COMMENT",
+            "scope": [
+                "comment",
+                "punctuation.definition.comment",
+                "punctuation.definition.tag",
+                "comment.block.documentation punctuation.definition.bracket",
+                "source.ocaml comment constant.regexp meta.separator",
+                "markup.other.anchor support.constant",
+                "markup.fenced_code",
+                "markup.fenced_code punctuation.definition",
+                "punctuation.definition.heading",
+                "punctuation.definition.bold.markdown",
+                "punctuation.definition.italic.markdown",
+                "punctuation.definition.strikethrough.markdown"
+            ],
+            "settings": {
+                "foreground": "#5b858b"
+            }
+        },
+        {
+            "name": "TEXT",
+            "scope": [
+                "constant.character",
+                "constant.escape",
+                "text.html.markdown",
+                "punctuation.definition.list_item",
+                "keyword.begin.tag.ejs",
+                "constant.name.attribute.tag.pug",
+                "source.clojure meta.symbol",
+                "constant.other.description.jsdoc",
+                "keyword.other.array.phpdoc.php",
+                "keyword.operator.other.powershell",
+                "meta.link.inline punctuation.definition.string",
+                "source.sql",
+                "source meta.brace",
+                "source punctuation",
+                "text.html punctuation",
+                "markup meta punctuation.definition",
+                "meta.bracket.julia",
+                "meta.array.julia",
+                "entity.name.footnote",
+                "source.ocaml punctuation.definition.tag",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "entity.other.attribute-name strong",
+                "binding.fsharp keyword.symbol.fsharp",
+                "entity.name.record.field.elm",
+                "entity.name.record.field.accessor.elm",
+                "storage.modifier.array.bracket",
+                "source.css entity.other",
+                "meta.attribute-selector punctuation.definition.entity",
+                "markup.other.anchor string",
+                "punctuation.separator",
+                "punctuation.section",
+                "punctuation.terminator"
+            ],
+            "settings": {
+                "foreground": "#b2cacd"
+            }
+        },
+        {
+            "name": "KEYWORD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.modifier",
+                "meta.tag.sgml",
+                "punctuation.accessor",
+                "constant.other.color",
+                "entity.name.section",
+                "markup.heading",
+                "markup.heading punctuation.definition",
+                "entity.other.attribute-name.pseudo-class",
+                "entity.other.attribute-name.pseudo-element",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "storage.type.function.pug",
+                "text.pug storage.type",
+                "text.pug meta.tag.other",
+                "source.clojure storage.control",
+                "meta.expression.clojure",
+                "punctuation.separator.slice.python",
+                "punctuation.separator.question-mark.cs",
+                "punctuation.definition.parameters.varargs",
+                "source.go keyword.operator",
+                "punctuation.separator.pointer-access",
+                "punctuation.separator.other.ruby",
+                "keyword.package",
+                "keyword.import",
+                "punctuation.definition.keyword",
+                "punctuation.separator.hash.cs",
+                "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+                "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+                "source.kotlin storage.type.import",
+                "source.kotlin storage.type.package",
+                "constant.string.documentation.powershell",
+                "punctuation.section.directive",
+                "storage.type.rust",
+                "punctuation.definition.attribute",
+                "punctuation.definition.preprocessor",
+                "punctuation.separator.namespace",
+                "punctuation.separator.method",
+                "keyword.control punctuation.definition.function",
+                "source.ocaml variable.interpolation string",
+                "source.reason variable.interpolation",
+                "punctuation.definition.directive",
+                "storage.type.modifier",
+                "keyword.other.class.fileds",
+                "source.toml entity.other.attribute-name",
+                "source.css entity.name.tag.custom",
+                "sharing.modifier",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby"
+            ],
+            "settings": {
+                "foreground": "#df769b"
+            }
+        },
+        {
+            "name": "VARIABLE",
+            "scope": [
+                "variable",
+                "variable.object",
+                "variable.other",
+                "variable.parameter",
+                "support",
+                "entity.name.module",
+                "variable.import.parameter",
+                "variable.other.class",
+                "meta.toc-list.id.html",
+                "source.json meta.structure.dictionary.json support.type.property-name.json",
+                "meta.var.clojure",
+                "entity.name.variable",
+                "source.java meta.class.body.java",
+                "entity.name.package.go",
+                "source.c",
+                "source.cpp",
+                "source.go",
+                "source.python",
+                "meta.function-call.arguments.python",
+                "source.ruby",
+                "source.coffee.embedded.source",
+                "source.coffee",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "storage.type.annotation",
+                "punctuation.definition.annotation",
+                "source.groovy.embedded.source",
+                "punctuation.definition.variable",
+                "source.powershell",
+                "string.quoted.interpolated.vala constant.character.escape.vala",
+                "source.apacheconf",
+                "source.objc",
+                "source.crystal",
+                "string.quoted.double.kotlin entity.string.template.element.kotlin",
+                "entity.name.package.kotlin",
+                "meta.template.expression.kotlin",
+                "parameter.variable.function",
+                "variable.other.constant.elixir",
+                "source.elixir.embedded.source",
+                "source.sql.embedded",
+                "punctuation.definition.placeholder",
+                "source.swift",
+                "source.julia",
+                "source.shell",
+                "variable.other.normal punctuation.definition.variable.shell",
+                "source.reason variable.language",
+                "source.reason variable.language string.other.link",
+                "source.elm meta.value",
+                "source.elm meta.declaration.module",
+                "meta.embedded.block variable punctuation.definition.variable.php",
+                "string.quoted.double.class.other",
+                "source.toml keyword",
+                "support.type.nim",
+                "source.tf meta.template.expression",
+                "source.scala entity.name.import",
+                "markup.code",
+                "markup.fenced_code.block"
+            ],
+            "settings": {
+                "foreground": "#e4b781"
+            }
+        },
+        {
+            "name": "ANNOTATION",
+            "scope": [
+                "support.variable.property",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "entity.other.attribute-name.id",
+                "entity.other.attribute-name.id punctuation.definition.entity",
+                "entity.name.type.annotation.kotlin",
+                "support.type.primitive",
+                "meta.type.parameters entity.name.type",
+                "meta.type.annotation entity.name.type",
+                "punctuation.definition.typeparameters",
+                "source.python support.type.python",
+                "comment.block.documentation.phpdoc.php keyword.other.type.php",
+                "storage.type.php",
+                "keyword.type",
+                "storage.type.cs",
+                "storage.type.c",
+                "storage.type.objc",
+                "punctuation.definition.storage.type.objc",
+                "markup punctuation.definition",
+                "storage.type.powershell",
+                "comment.block.documentation entity.name.type",
+                "source.java storage.type",
+                "storage.type.primitive",
+                "source.groovy storage.type",
+                "storage.type.r",
+                "source.haskell storage.type",
+                "punctuation.separator.clause-head-body",
+                "source.go storage.type",
+                "storage.type.core.rust",
+                "storage.class.std.rust",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "support.type.vb",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "constant.other.reference",
+                "source.graphql support.type",
+                "source.reason support.type string",
+                "entity.name.type.fsharp",
+                "source.elm storage.type",
+                "storage.type.user-defined",
+                "storage.type.built-in",
+                "support.type.builtin",
+                "source.swift support.type",
+                "support.class.crystal",
+                "storage.type.integral",
+                "source.cpp storage.type.cpp",
+                "source.vala storage.type",
+                "source.hlsl storage.type.basic",
+                "source.hlsl support.type.other",
+                "source.apex storage.type",
+                "source.nim storage.type",
+                "source.cpp entity.name.type",
+                "support.class.builtin",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "markup.raw.monospace",
+                "markup.mark",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric"
+            ],
+            "settings": {
+                "foreground": "#d67e5c"
+            }
+        },
+        {
+            "name": "CONSTANT",
+            "scope": [
+                "constant",
+                "variable.other.constant",
+                "support.constant",
+                "punctuation.definition.entity",
+                "constant.character.entity",
+                "support.variable.magic",
+                "markup.quote",
+                "entity.name.type.type-parameter.cs",
+                "punctuation.bracket.angle",
+                "entity.name.function.preprocessor.c",
+                "storage.type.scala",
+                "entity.helper.apacheconf",
+                "variable.language.crystal",
+                "punctuation.definition.constant",
+                "support.constant punctuation.definition.variable",
+                "constant.character.math",
+                "support.class.math",
+                "source.graphql constant.character",
+                "source.reason constant.language.list",
+                "source.cpp variable.other.enummember",
+                "support.variable.class.hideshow",
+                "entity.other.attribute-name.class",
+                "meta.attribute.id entity.other.attribute-name",
+                "text.html entity.other.attribute-name",
+                "meta.tag.attributes entity.other.attribute-name",
+                "text.xml entity.other.attribute-name",
+                "source.cs entity.other.attribute-name",
+                "constant.character.format.placeholder",
+                "constant.other.placeholder",
+                "source.vue entity.other.attribute-name",
+                "entity.other.attribute-name.mjml",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "meta.definition.attribute-entry punctuation.separator"
+            ],
+            "settings": {
+                "foreground": "#d5971a"
+            }
+        },
+        {
+            "name": "TAG",
+            "scope": [
+                "variable.language",
+                "variable.parameter.function.language.special",
+                "punctuation.definition.italic",
+                "punctuation.definition.bold",
+                "entity.name.tag",
+                "variable.language punctuation.definition.variable",
+                "keyword.control.clojure",
+                "support.type.exception.python",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "keyword.other.var.cs",
+                "storage.modifier.super",
+                "source.go keyword",
+                "keyword.function.go",
+                "meta.separator",
+                "keyword.other.fn.rust",
+                "storage.modifier.static.rust",
+                "source.r meta.function.r keyword.control.r",
+                "storage.type.def",
+                "meta.class.identifier storage.modifier",
+                "source.scala keyword.declaration",
+                "storage.type",
+                "comment.block.documentation punctuation.definition.block.tag",
+                "comment.block.documentation punctuation.definition.inline.tag",
+                "entity.tag.apacheconf",
+                "keyword.other.julia",
+                "source.julia storage.modifier",
+                "constant.language.empty-list.haskell",
+                "meta.function.powershell storage.type.powershell",
+                "keyword.control.fun",
+                "punctuation.terminator.function",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml storage.type markup.underline",
+                "binding.fsharp keyword",
+                "function.anonymous keyword",
+                "function.anonymous keyword.symbol.fsharp",
+                "meta.embedded.block variable.language punctuation.definition.variable.php",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other.class",
+                "source.wsd keyword.other.linebegin",
+                "keyword.other.skinparam.keyword",
+                "keyword.other.nim",
+                "markup.deleted.diff",
+                "source.tf support.class.variable",
+                "meta.function.lua keyword.control.lua",
+                "markup.block entity.name.tag",
+                "markup.meta.attribute-list",
+                "source.zig keyword.default",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "foreground": "#e66533"
+            }
+        },
+        {
+            "name": "STRING",
+            "scope": [
+                "string",
+                "punctuation.definition.string",
+                "source.css support.constant",
+                "entity.name.import.go",
+                "markup.raw.texttt",
+                "markup.inserted.diff",
+                "source.scala punctuation.definition.character",
+                "constant.character.literal.scala",
+                "source.tf entity.name"
+            ],
+            "settings": {
+                "foreground": "#49e9a6"
+            }
+        },
+        {
+            "name": "STRINGINTERPOLATED",
+            "scope": [
+                "string.template",
+                "punctuation.definition.string.template",
+                "string.interpolated.python string.quoted.single.python",
+                "string.quoted.double.heredoc",
+                "string.quoted.interpolated.vala",
+                "string.quoted.interpolated.vala punctuation.definition.string",
+                "string.regexp.apacheconf",
+                "markup.inline.raw.string",
+                "markup.inline.raw punctuation.definition.raw",
+                "string.quoted.double.interpolated.crystal",
+                "string.quoted.double.interpolated.crystal punctuation.definition.string",
+                "text.tex markup.raw"
+            ],
+            "settings": {
+                "foreground": "#16b673"
+            }
+        },
+        {
+            "name": "NUMBER",
+            "scope": [
+                "constant.numeric",
+                "constant.language",
+                "punctuation.separator.decimal.period.php",
+                "keyword.operator.null-conditional.cs",
+                "punctuation.separator.question-mark.cs",
+                "constant.integer.apacheconf",
+                "keyword.operator.nullable-type",
+                "constant.language punctuation.definition.variable",
+                "constant.others.fsharp",
+                "keyword.other.unit",
+                "string.quoted.double.skinparam.value",
+                "source.toml constant",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "foreground": "#7060eb"
+            }
+        },
+        {
+            "name": "FUNCTION",
+            "scope": [
+                "variable.function",
+                "support.type.property-name",
+                "entity.name.function",
+                "string.other.link",
+                "markup.link",
+                "support.type.vendored",
+                "support.other.variable",
+                "meta.function-call.generic.python",
+                "meta.method-call.groovy meta.method.groovy",
+                "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+                "punctuation.definition.decorator",
+                "support.function.any-method",
+                "text.tex support.function",
+                "text.tex punctuation.definition.function",
+                "entity.name.section.fsharp entity.name.section.fsharp",
+                "support.variable.class.function",
+                "keyword.control.cucumber.table",
+                "punctuation.decorator",
+                "source.tf support.class"
+            ],
+            "settings": {
+                "foreground": "#16a3b6"
+            }
+        },
+        {
+            "name": "SUPPORT",
+            "scope": [
+                "entity.name",
+                "entity.other",
+                "support.orther.namespace.use.php",
+                "meta.use.php",
+                "support.other.namespace.php",
+                "support.type",
+                "support.class",
+                "punctuation.definition.parameters",
+                "support.function",
+                "support.function.construct",
+                "markup.changed.git_gutter",
+                "markup.underline.link",
+                "markup.underline.link.image",
+                "markup.underline",
+                "meta.symbol.namespace.clojure",
+                "entity.mime-type.apacheconf",
+                "keyword.operator.function.infix",
+                "entity.name.function.infix",
+                "entity.name.function.call.kotlin",
+                "text.tex support.function.verb",
+                "text.tex support.function.texttt",
+                "source.reason constant.language.unit",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "constant.language.unit.fsharp",
+                "source.wsd support.class.preprocessings",
+                "keyword.language.gherkin.feature.scenario",
+                "source.nim keyword.other.common.function",
+                "entity.name.type.namespace",
+                "entity.name.scope-resolution.function.call"
+            ],
+            "settings": {
+                "foreground": "#49d6e9"
+            }
+        },
+        {
+            "name": "MISC",
+            "scope": [
+                "source.js constant.other.object.key.js string.unquoted.label.js",
+                "source.js punctuation.section.embedded",
+                "punctuation.definition.template-expression",
+                "support.class",
+                "storage.type.string.python",
+                "string.interpolated.pug",
+                "support.constant.handlebars",
+                "source.clojure punctuation.section.set",
+                "source.clojure punctuation.section.metadata",
+                "entity.global.clojure",
+                "source.python meta.function-call.python support.type.python",
+                "entity.other.inherited-class.python",
+                "punctuation.definition.interpolation",
+                "punctuation.section.embedded.begin.ruby",
+                "punctuation.section.embedded.end.ruby source.ruby",
+                "support.constant.math",
+                "entity.namespace.r",
+                "meta.method-call.groovy storage.type.groovy",
+                "source.scala entity.name.class.declaration",
+                "constant.character.escape",
+                "support.function.macro.julia",
+                "string.replacement.apacheconf",
+                "storage.modifier.using.vala",
+                "constant.other.haskell",
+                "source.objc entity.name.tag",
+                "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+                "meta.embedded.line.crystal punctuation.section.embedded",
+                "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+                "punctuation.section.embedded",
+                "punctuation.section.tag",
+                "punctuation.section.embedded source.swift",
+                "variable.other.bracket punctuation.definition.variable",
+                "string.interpolated.dollar punctuation.definition.string",
+                "constant.character.escape punctuation.definition.keyword",
+                "source.ocaml entity.name.class constant.numeric",
+                "source.reason entity.name.class",
+                "keyword.format.specifier.fsharp",
+                "support.module.elm",
+                "meta.embedded.block.php punctuation.definition.variable.php",
+                "source.vala storage.type",
+                "support.variable.class.group",
+                "entity.name.type.class",
+                "source.tf meta.keyword.list",
+                "source.tf meta.keyword.map",
+                "entity.name.class.lua",
+                "markup.substitution"
+            ],
+            "settings": {
+                "foreground": "#49ace9"
+            }
+        },
+        {
+            "name": "INVALID",
+            "scope": ["invalid", "invalid.illegal"],
+            "settings": {
+                "foreground": "#e3541c"
+            }
+        },
+        {
+            "name": "ITALIC",
+            "scope": [
+                "comment",
+                "storage.modifier",
+                "punctuation.definition.comment",
+                "entity.other",
+                "variable.language",
+                "support.type.vendored",
+                "support.constant.vendored",
+                "markup.quote",
+                "markup.italic",
+                "tag.decorator.js entity.name.tag.js",
+                "tag.decorator.js punctuation.definition.tag.js",
+                "keyword.control.clojure",
+                "source.clojure meta.symbol.dynamic",
+                "keyword.other.this.cs",
+                "keyword.other.base.cs",
+                "variable.other.member.c",
+                "support.type.core.rust",
+                "variable.other.object.property",
+                "variable.other.property",
+                "source.r meta.function.r keyword.control.r",
+                "comment.line.roxygen.r keyword",
+                "comment.line.roxygen.r variable.parameter.r",
+                "keyword.control.inheritance.coffee",
+                "comment.block.documentation.phpdoc.php keyword",
+                "keyword.other.array.phpdoc.php",
+                "storage.type.modifier",
+                "comment.block.javadoc.java keyword",
+                "comment.block.javadoc.java variable.parameter.java",
+                "keyword.operator.documentation.powershell",
+                "storage.type.scala",
+                "variable.parameter.function.language.special",
+                "comment.block.documentation.scala keyword",
+                "comment.block.documentation.scala variable.parameter",
+                "support.function.builtin.go",
+                "constant.other.symbol.hashkey.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.ruby",
+                "source.vala storage.type.generic",
+                "constant.other.table-name",
+                "constant.other.placeholder",
+                "variable.other.field",
+                "entity.alias.import.go",
+                "source.swift keyword.other.declaration-specifier",
+                "support.variable.swift",
+                "keyword.other.capture-specifier",
+                "text.tex support.function.emph",
+                "constant.other.math",
+                "support.function.textit",
+                "entity.name.footnote",
+                "entity.name.function.directive.graphql",
+                "source.graphql support.type.enum",
+                "source.ocaml entity.name.filename",
+                "source.reason entity.name.filename",
+                "abstract.definition.fsharp keyword",
+                "abstract.definition.fsharp entity",
+                "function.anonymous keyword",
+                "entity.name.record.field.accessor.elm",
+                "support.type.primitive",
+                "support.type.builtin",
+                "keyword.type.cs",
+                "storage.type.built-in",
+                "storage.type.primitive",
+                "source.python support.type.python",
+                "storage.type.core.rust",
+                "source.swift support.type",
+                "source.go storage.type",
+                "storage.type.php",
+                "storage.type.function.kotlin",
+                "entity.name.type.kotlin",
+                "support.type.julia",
+                "variable.other.member",
+                "keyword.other.import",
+                "keyword.package",
+                "keyword.import",
+                "source.wsd keyword.control.diagram",
+                "keyword.language.gherkin.feature.step",
+                "source.hlsl storage.type.basic",
+                "source.apex keyword.type",
+                "sharing.modifier",
+                "source.nim storage.type.concrete",
+                "meta.preprocessor.pragma.nim",
+                "storage.type.integral",
+                "entity.name.scope-resolution.function.call",
+                "support.class.builtin",
+                "comment.block.documentation storage.type.class",
+                "source.tf meta.keyword.string",
+                "source.tf meta.keyword.number",
+                "source.scala entity.name.class",
+                "meta.import keyword.control",
+                "keyword.control.export",
+                "source.vue meta.directive punctuation.separator.key-value",
+                "keyword.local.lua",
+                "markup.mark.constrained markup.mark",
+                "markup.block.open",
+                "entity.name.type.primitive",
+                "entity.name.type.numeric",
+                "source.zig keyword.type",
+                "source.zig keyword.storage",
+                "source.zig keyword.structure"
+            ],
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "BOLD",
+            "scope": [
+                "keyword",
+                "keyword.control",
+                "keyword.operator",
+                "keyword.other.template",
+                "keyword.other.substitution",
+                "storage.type.function.arrow",
+                "constant.other.color",
+                "punctuation.accessor",
+                "entity.name.section",
+                "markdown.heading",
+                "markup.inline.raw punctuation.definition.raw",
+                "markup.heading",
+                "storage.type.function.pug",
+                "storage.type.function.python",
+                "storage.type.annotation",
+                "punctuation.bracket.angle",
+                "keyword.other.new",
+                "storage.type.generic.wildcard",
+                "source.go keyword.operator",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "variable.parameter",
+                "support.function.builtin.rust",
+                "storage.type.function.coffee",
+                "entity.name.variable.parameter",
+                "punctuation.separator.hash.cs",
+                "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+                "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+                "meta.function.parameters variable.other",
+                "entity.name.type.annotation.kotlin",
+                "storage.type.objc",
+                "parameter.variable.function",
+                "markup punctuation.definition",
+                "punctuation.section.directive",
+                "punctuation.definition.preprocessor",
+                "source.ruby punctuation.definition.variable",
+                "support.function.textbf",
+                "source.graphql support.type.builtin",
+                "source.ocaml variable.interpolation string",
+                "entity.name.function.definition.special.constructor",
+                "entity.name.function.definition.special.member.destructor.",
+                "meta.function.parameters variable punctuation.definition.variable.php",
+                "source.wsd keyword.other.activity",
+                "keyword.control.class.ruby",
+                "keyword.control.def.ruby",
+                "keyword.function.go",
+                "keyword.other.fn.rust",
+                "markup.other.anchor",
+                "markup.list.bullet",
+                "markup.list punctuation.definition",
+                "keyword.control.default",
+                "punctuation.section",
+                "punctuation.separator",
+                "punctuation.terminator",
+                "markup.bold.markdown",
+                "source.zig storage.type.function"
+            ],
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "BOLD-ITALIC",
+            "scope": [
+                "markup.quote markup.bold",
+                "text.html punctuation.section.embedded",
+                "variable.other.c",
+                "storage.modifier.lifetime.rust",
+                "entity.name.lifetime.rust",
+                "source.rust meta.attribute.rust",
+                "meta.attribute.id entity.other.attribute-name",
+                "source.ocaml punctuation.definition.tag emphasis",
+                "source.tf entity.name",
+                "markup.quote punctuation.definition",
+                "markup.fenced_code punctuation.definition",
+                "fenced_code.block.language"
+            ],
+            "settings": {
+                "fontStyle": "bold italic"
+            }
+        },
+        {
+            "name": "NORMAL",
+            "scope": [
+                "keyword.begin.tag.ejs",
+                "source.python meta.function.decorator.python support.type.python",
+                "source.cs keyword.other",
+                "keyword.other.var.cs",
+                "source.go keyword",
+                "storage.modifier.static.rust",
+                "variable.parameter.r",
+                "variable.parameter.handlebars",
+                "storage.modifier.import",
+                "storage.modifier.package",
+                "meta.class.identifier storage.modifier",
+                "keyword.operator.other.powershell",
+                "source.css variable.parameter",
+                "string.interpolated variable.parameter",
+                "source.apacheconf keyword",
+                "keyword.other.julia",
+                "storage.modifier.using.vala",
+                "source.objc keyword.other.property.attribute",
+                "source.sql keyword.other",
+                "keyword.other.using.vala",
+                "keyword.operator.function.infix",
+                "keyword.control.directive",
+                "keyword.other.rust",
+                "keyword.other.declaration-specifier.swift",
+                "entity.name.function.swift",
+                "keyword.control.class",
+                "keyword.control.def",
+                "punctuation.definition.variable",
+                "entity.name.section.latex",
+                "source.ocaml keyword markup.underline",
+                "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+                "source.reason entity.other.attribute-name constant.language constant.numeric",
+                "keyword.format.specifier.fsharp",
+                "entity.name.section.fsharp",
+                "binding.fsharp keyword",
+                "binding.fsharp keyword.symbol",
+                "record.fsharp keyword",
+                "keyword.symbol.fsharp",
+                "entity.name.section.fsharp keyword",
+                "namespace.open.fsharp keyword",
+                "namespace.open.fsharp entity",
+                "storage.type",
+                "source.cpp keyword.other",
+                "source.c keyword.other",
+                "keyword.other.unit",
+                "storage.modifier.array.bracket",
+                "meta.import.haskell keyword",
+                "keyword.declaration.dart",
+                "source.wsd keyword.other",
+                "keyword.other.skinparam",
+                "source.css keyword.control",
+                "source.css keyword.operator",
+                "keyword.language.gherkin.feature.scenario",
+                "keyword.control.cucumber.table",
+                "source.toml entity.other.attribute-name",
+                "source.toml keyword",
+                "keyword.other.nim",
+                "source.nim keyword.other.common.function",
+                "source.nim keyword.other",
+                "source.scala keyword.declaration",
+                "source.scala entity.name.class.declaration",
+                "keyword.control.lua",
+                "source.css punctuation.section",
+                "punctuation.section.embedded",
+                "source.c punctuation.section",
+                "source.cpp punctuation.section",
+                "source.java punctuation.section",
+                "source.php punctuation.section",
+                "source.powershell punctuation.section",
+                "source.r punctuation.section",
+                "source.ruby punctuation.section",
+                "source.swift punctuation.section",
+                "source.objc punctuation.section",
+                "source.zig keyword.constant.bool",
+                "source.zig keyword.default",
+                "source.zig keyword.statement",
+                "source.zig keyword.constant.default"
+            ],
+            "settings": {
+                "fontStyle": ""
+            }
+        },
+        {
+            "name": "STRIKETHROUGH",
+            "scope": ["markup.strikethrough"],
+            "settings": {
+                "fontStyle": "strikethrough"
+            }
+        }
+    ]
+}

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

@@ -0,0 +1,1112 @@
+{
+   "name": "Noctis Uva",
+   "type": "dark",
+   "colors": {
+      "selection.background": "#7a70c277",
+      "descriptionForeground": "#7a70c2",
+      "errorForeground": "#e34e1c",
+      "widget.shadow": "#00000044",
+      "editor.background": "#292640",
+      "editor.foreground": "#c5c2d6",
+      "editorLineNumber.foreground": "#5c5973",
+      "editorLineNumber.activeForeground": "#7a70c2",
+      "editorCursor.foreground": "#bbb3ff",
+      "badge.background": "#998ef1",
+      "badge.foreground": "#171523",
+      "activityBar.background": "#292640",
+      "activityBar.dropBackground": "#7a70c265",
+      "activityBar.border": "#171523",
+      "activityBar.foreground": "#6e67a8",
+      "activityBar.inactiveForeground": "#6e67a877",
+      "activityBarBadge.background": "#998ef1",
+      "activityBarBadge.foreground": "#171523",
+      "activityBar.activeBackground": "#998ef133",
+      "activityBar.activeBorder": "#998ef1",
+      "sideBar.background": "#232136",
+      "sideBar.dropBackground": "#232136",
+      "sideBar.border": "#171523",
+      "sideBar.foreground": "#a9a5c0",
+      "sideBarSectionHeader.background": "#2f2c49",
+      "sideBarSectionHeader.foreground": "#a9a5c0",
+      "sideBarTitle.foreground": "#a9a5c0",
+      "sideBarSectionHeader.border": "#171523",
+      "statusBar.foreground": "#6e67a8",
+      "statusBar.background": "#292640",
+      "statusBar.border": "#171523",
+      "statusBar.debuggingBackground": "#292640",
+      "statusBar.debuggingForeground": "#ff80ac50",
+      "statusBar.debuggingBorder": "#ff80acaf",
+      "statusBar.noFolderForeground": "#8787ab",
+      "statusBar.noFolderBackground": "#292640",
+      "statusBar.noFolderBorder": "#292640",
+      "statusBarItem.activeBackground": "#564d9977",
+      "statusBarItem.hoverBackground": "#363253",
+      "statusBarItem.prominentBackground": "#1f1d30",
+      "statusBarItem.prominentHoverBackground": "#1b1641",
+      "button.background": "#007f99",
+      "button.foreground": "#edebff",
+      "button.hoverBackground": "#0ac",
+      "dropdown.background": "#2f2c49",
+      "dropdown.border": "#2f2c49",
+      "dropdown.foreground": "#7a70c2",
+      "editorMarkerNavigation.background": "#3a3a5e29",
+      "editorMarkerNavigationError.background": "#e34e1c",
+      "editorMarkerNavigationWarning.background": "#e69533",
+      "editorError.border": "#292640",
+      "editorError.foreground": "#e34e1c",
+      "editorWarning.border": "#292640",
+      "editorWarning.foreground": "#e69533",
+      "editorInfo.border": "#292640",
+      "editorInfo.foreground": "#998ef1",
+      "editorHint.border": "#49e9a600",
+      "editorHint.foreground": "#49e9a6",
+      "editorGroup.emptyBackground": "#5c597333",
+      "editorGroup.border": "#171523",
+      "editorGroup.dropBackground": "#5c597333",
+      "editorGroupHeader.noTabsBackground": "#2f2c49",
+      "editorGroupHeader.tabsBackground": "#2f2c49",
+      "editorGroupHeader.tabsBorder": "#2f2c49",
+      "tab.activeBackground": "#292640",
+      "tab.unfocusedActiveBackground": "#2d2b3b",
+      "tab.activeForeground": "#998ef1",
+      "tab.border": "#171523",
+      "tab.inactiveBackground": "#2f2c49",
+      "tab.inactiveForeground": "#a9a5c0",
+      "tab.unfocusedActiveForeground": "#a9a5c0",
+      "tab.unfocusedInactiveForeground": "#a9a5c0",
+      "tab.activeBorderTop": "#998ef1",
+      "tab.activeModifiedBorder": "#49e9a6",
+      "tab.activeBorder": "#292640",
+      "tab.unfocusedActiveBorder": "#292640",
+      "tab.unfocusedHoverBackground": "#998ef121",
+      "textBlockQuote.background": "#292640",
+      "textBlockQuote.border": "#6e67a8",
+      "textCodeBlock.background": "#292640",
+      "textLink.activeForeground": "#998ef1",
+      "textLink.foreground": "#998ef1",
+      "textPreformat.foreground": "#ffc180",
+      "textSeparator.foreground": "#292640",
+      "walkThrough.embeddedEditorBackground": "#292640",
+      "welcomePage.buttonBackground": "#1f1d30",
+      "welcomePage.buttonHoverBackground": "#2f2c49",
+      "input.background": "#1f1d30",
+      "input.border": "#27274e",
+      "input.foreground": "#CDD3DE",
+      "input.placeholderForeground": "#8787ab",
+      "inputOption.activeBorder": "#6e67a8",
+      "inputValidation.errorForeground": "#ff4000",
+      "inputValidation.errorBackground": "#501502ee",
+      "inputValidation.errorBorder": "#691c02",
+      "inputValidation.infoForeground": "#40d4e7",
+      "inputValidation.infoBackground": "#0f6e7bee",
+      "inputValidation.infoBorder": "#148f9f",
+      "inputValidation.warningForeground": "#e69533",
+      "inputValidation.warningBackground": "#82694acc",
+      "inputValidation.warningBorder": "#a88457",
+      "editorWidget.background": "#2f2c49",
+      "editorWidget.border": "#171523",
+      "editorHoverWidget.background": "#322d52",
+      "editorHoverWidget.border": "#171523",
+      "editorSuggestWidget.background": "#322d52",
+      "editorSuggestWidget.border": "#171523",
+      "editorSuggestWidget.foreground": "#a9a5c0",
+      "editorSuggestWidget.highlightForeground": "#998ef1",
+      "editorSuggestWidget.selectedBackground": "#453f73",
+      "editorGutter.background": "#292640",
+      "editorGutter.addedBackground": "#8ce99a",
+      "editorGutter.deletedBackground": "#e34e1c",
+      "editorGutter.modifiedBackground": "#ffc180",
+      "editor.selectionBackground": "#6e67a855",
+      "editor.selectionHighlightBackground": "#49ace933",
+      "editor.inactiveSelectionBackground": "#6e67a833",
+      "editor.wordHighlightStrongBackground": "#cc990033",
+      "editor.wordHighlightBackground": "#e4b78133",
+      "editor.findMatchBackground": "#40bf6a11",
+      "editor.findMatchHighlightBackground": "#0e667179",
+      "editor.findRangeHighlightBackground": "#49e9a622",
+      "editor.hoverHighlightBackground": "#6e67a83f",
+      "editor.lineHighlightBackground": "#35305aee",
+      "editor.lineHighlightBorder": "#35305a",
+      "editor.rangeHighlightBackground": "#49d6e922",
+      "editorLink.activeForeground": "#14a5ff",
+      "editorWhitespace.foreground": "#ffffff21",
+      "editorIndentGuide.background": "#383450",
+      "editorIndentGuide.activeBackground": "#595289",
+      "editorBracketMatch.background": "#6e67a822",
+      "editorBracketMatch.border": "#6e67a8",
+      "editorRuler.foreground": "#473856",
+      "editorCodeLens.foreground": "#776284",
+      "terminal.ansiBlack": "#302f3d",
+      "terminal.ansiRed": "#e66533",
+      "terminal.ansiGreen": "#49e9a6",
+      "terminal.ansiYellow": "#e4b781",
+      "terminal.ansiBlue": "#49ace9",
+      "terminal.ansiMagenta": "#df769b",
+      "terminal.ansiCyan": "#49d6e9",
+      "terminal.ansiWhite": "#b6b3cc",
+      "terminal.ansiBrightBlack": "#504e65",
+      "terminal.ansiBrightRed": "#e97749",
+      "terminal.ansiBrightGreen": "#60ebb1",
+      "terminal.ansiBrightYellow": "#e69533",
+      "terminal.ansiBrightBlue": "#60b6eb",
+      "terminal.ansiBrightMagenta": "#e798b3",
+      "terminal.ansiBrightCyan": "#60dbeb",
+      "terminal.ansiBrightWhite": "#c5c2d6",
+      "terminal.background": "#1f1d30",
+      "terminal.foreground": "#c5c2d6",
+      "terminalCursor.background": "#1f1d30",
+      "terminalCursor.foreground": "#c5c2d6",
+      "merge.border": "#29264000",
+      "merge.currentContentBackground": "#85f1ff22",
+      "merge.currentHeaderBackground": "#85f1ff44",
+      "merge.incomingContentBackground": "#9d92f222",
+      "merge.incomingHeaderBackground": "#9d92f244",
+      "merge.commonContentBackground": "#ffc18022",
+      "merge.commonHeaderBackground": "#ffc18044",
+      "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+      "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+      "editorOverviewRuler.commonContentForeground": "#ffc18044",
+      "editorOverviewRuler.border": "#292640",
+      "notificationCenter.border": "#2f2c49",
+      "notificationCenterHeader.foreground": "#8787ab",
+      "notificationCenterHeader.background": "#2f2c49",
+      "notificationToast.border": "#2f2c49",
+      "notifications.foreground": "#CDD3DE",
+      "notifications.background": "#2f2c49",
+      "notifications.border": "#2f2c49",
+      "notificationLink.foreground": "#8787ab",
+      "diffEditor.insertedTextBackground": "#16b67327",
+      "diffEditor.removedTextBackground": "#e6653341",
+      "debugToolBar.background": "#292640",
+      "debugExceptionWidget.background": "#292640",
+      "debugExceptionWidget.border": "#6e67a8",
+      "extensionButton.prominentBackground": "#008c99",
+      "extensionButton.prominentForeground": "#e5f5f5",
+      "extensionButton.prominentHoverBackground": "#00bbcc",
+      "focusBorder": "#2f2c49",
+      "foreground": "#c5c2d6",
+      "panel.background": "#1f1d30",
+      "panel.border": "#6e67a8",
+      "panelTitle.activeBorder": "#6e67a8",
+      "panelTitle.activeForeground": "#998ef1",
+      "panelTitle.inactiveForeground": "#716c93",
+      "peekView.border": "#6e67a8",
+      "peekViewEditor.background": "#201d3a",
+      "peekViewEditor.matchHighlightBackground": "#4c448899",
+      "peekViewEditorGutter.background": "#201d3a",
+      "peekViewResult.background": "#221f3d",
+      "peekViewResult.fileForeground": "#ffc180",
+      "peekViewResult.lineForeground": "#8787ab",
+      "peekViewResult.matchHighlightBackground": "#343050",
+      "peekViewResult.selectionBackground": "#343050",
+      "peekViewResult.selectionForeground": "#8787ab",
+      "peekViewTitle.background": "#221f3d",
+      "peekViewTitleDescription.foreground": "#8787ab",
+      "peekViewTitleLabel.foreground": "#ffc180",
+      "progressBar.background": "#998ef1",
+      "scrollbar.shadow": "#00000044",
+      "scrollbarSlider.activeBackground": "#7060eb77",
+      "scrollbarSlider.background": "#7060eb33",
+      "scrollbarSlider.hoverBackground": "#7060eb55",
+      "gitDecoration.addedResourceForeground": "#16b673",
+      "gitDecoration.modifiedResourceForeground": "#49e9a6",
+      "gitDecoration.deletedResourceForeground": "#e34e1c",
+      "gitDecoration.untrackedResourceForeground": "#40d4e7",
+      "gitDecoration.ignoredResourceForeground": "#5b788b",
+      "gitDecoration.conflictingResourceForeground": "#ffc180",
+      "pickerGroup.border": "#6e67a8",
+      "pickerGroup.foreground": "#998ef1",
+      "list.activeSelectionBackground": "#332e5c",
+      "list.activeSelectionForeground": "#edebff",
+      "list.dropBackground": "#202040",
+      "list.focusBackground": "#3a3a78",
+      "list.focusForeground": "#edebff",
+      "list.highlightForeground": "#998ef1",
+      "list.hoverBackground": "#383866",
+      "list.hoverForeground": "#edebff",
+      "list.inactiveFocusBackground": "#2b2843",
+      "list.inactiveSelectionBackground": "#2f2c49",
+      "list.inactiveSelectionForeground": "#c5c2d6",
+      "list.errorForeground": "#e34e1c",
+      "list.warningForeground": "#ffa857",
+      "listFilterWidget.background": "#202040",
+      "listFilterWidget.outline": "#49e9a6",
+      "listFilterWidget.noMatchesOutline": "#e34e1c",
+      "tree.indentGuidesStroke": "#5c5973",
+      "settings.headerForeground": "#c5c2d6",
+      "settings.modifiedItemIndicator": "#15ac31",
+      "settings.dropdownListBorder": "#49408c77",
+      "settings.dropdownBackground": "#2f2c49",
+      "settings.dropdownForeground": "#0ac",
+      "settings.dropdownBorder": "#2f2c49",
+      "settings.checkboxBackground": "#2f2c49",
+      "settings.checkboxForeground": "#0ac",
+      "settings.checkboxBorder": "#2f2c49",
+      "settings.textInputBackground": "#2f2c49",
+      "settings.textInputForeground": "#0ac",
+      "settings.textInputBorder": "#2f2c49",
+      "settings.numberInputBackground": "#1f1d30",
+      "settings.numberInputForeground": "#7060eb",
+      "settings.numberInputBorder": "#1f1d30",
+      "breadcrumb.foreground": "#a9a5c0",
+      "breadcrumb.background": "#292640",
+      "breadcrumb.focusForeground": "#998ef1",
+      "breadcrumb.activeSelectionForeground": "#edebff",
+      "breadcrumbPicker.background": "#2f2c49",
+      "titleBar.activeBackground": "#292640",
+      "titleBar.activeForeground": "#c5c2d6",
+      "titleBar.inactiveBackground": "#292640",
+      "titleBar.inactiveForeground": "#a9a5c0",
+      "menu.background": "#2f2c49",
+      "menu.foreground": "#a9a5c0",
+      "menu.selectionBackground": "#3a3a78",
+      "menu.selectionForeground": "#998ef1",
+      "menu.selectionBorder": "#3a3a78",
+      "menu.separatorBackground": "#998ef1",
+      "menubar.selectionBackground": "#3a3a78",
+      "menubar.selectionForeground": "#998ef1",
+      "menubar.selectionBorder": "#3a3a78",
+      "editor.snippetTabstopHighlightBackground": "#211f33",
+      "editor.snippetTabstopHighlightBorder": "#2b2843",
+      "editor.snippetFinalTabstopHighlightBackground": "#211f33",
+      "editor.snippetFinalTabstopHighlightBorder": "#2b2843",
+      "minimap.findMatchHighlight": "#998ef1ee",
+      "minimap.errorHighlight": "#e34e1cee",
+      "minimap.warningHighlight": "#e69533ee",
+      "minimapGutter.addedBackground": "#16b673",
+      "minimapGutter.modifiedBackground": "#49e9a6",
+      "minimapGutter.deletedBackground": "#e34e1c",
+      "minimap.background": "#29264099"
+   },
+   "tokenColors": [
+      {
+         "name": "COMMENT",
+         "scope": [
+            "comment",
+            "punctuation.definition.comment",
+            "punctuation.definition.tag",
+            "comment.block.documentation punctuation.definition.bracket",
+            "source.ocaml comment constant.regexp meta.separator",
+            "markup.other.anchor support.constant",
+            "markup.fenced_code",
+            "markup.fenced_code punctuation.definition",
+            "punctuation.definition.heading",
+            "punctuation.definition.bold.markdown",
+            "punctuation.definition.italic.markdown",
+            "punctuation.definition.strikethrough.markdown"
+         ],
+         "settings": {
+            "foreground": "#716c93"
+         }
+      },
+      {
+         "name": "TEXT",
+         "scope": [
+            "constant.character",
+            "constant.escape",
+            "text.html.markdown",
+            "punctuation.definition.list_item",
+            "keyword.begin.tag.ejs",
+            "constant.name.attribute.tag.pug",
+            "source.clojure meta.symbol",
+            "constant.other.description.jsdoc",
+            "keyword.other.array.phpdoc.php",
+            "keyword.operator.other.powershell",
+            "meta.link.inline punctuation.definition.string",
+            "source.sql",
+            "source meta.brace",
+            "source punctuation",
+            "text.html punctuation",
+            "markup meta punctuation.definition",
+            "meta.bracket.julia",
+            "meta.array.julia",
+            "entity.name.footnote",
+            "source.ocaml punctuation.definition.tag",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "entity.other.attribute-name strong",
+            "binding.fsharp keyword.symbol.fsharp",
+            "entity.name.record.field.elm",
+            "entity.name.record.field.accessor.elm",
+            "storage.modifier.array.bracket",
+            "source.css entity.other",
+            "meta.attribute-selector punctuation.definition.entity",
+            "markup.other.anchor string",
+            "punctuation.separator",
+            "punctuation.section",
+            "punctuation.terminator"
+         ],
+         "settings": {
+            "foreground": "#c5c2d6"
+         }
+      },
+      {
+         "name": "KEYWORD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.modifier",
+            "meta.tag.sgml",
+            "punctuation.accessor",
+            "constant.other.color",
+            "entity.name.section",
+            "markup.heading",
+            "markup.heading punctuation.definition",
+            "entity.other.attribute-name.pseudo-class",
+            "entity.other.attribute-name.pseudo-element",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "storage.type.function.pug",
+            "text.pug storage.type",
+            "text.pug meta.tag.other",
+            "source.clojure storage.control",
+            "meta.expression.clojure",
+            "punctuation.separator.slice.python",
+            "punctuation.separator.question-mark.cs",
+            "punctuation.definition.parameters.varargs",
+            "source.go keyword.operator",
+            "punctuation.separator.pointer-access",
+            "punctuation.separator.other.ruby",
+            "keyword.package",
+            "keyword.import",
+            "punctuation.definition.keyword",
+            "punctuation.separator.hash.cs",
+            "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+            "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+            "source.kotlin storage.type.import",
+            "source.kotlin storage.type.package",
+            "constant.string.documentation.powershell",
+            "punctuation.section.directive",
+            "storage.type.rust",
+            "punctuation.definition.attribute",
+            "punctuation.definition.preprocessor",
+            "punctuation.separator.namespace",
+            "punctuation.separator.method",
+            "keyword.control punctuation.definition.function",
+            "source.ocaml variable.interpolation string",
+            "source.reason variable.interpolation",
+            "punctuation.definition.directive",
+            "storage.type.modifier",
+            "keyword.other.class.fileds",
+            "source.toml entity.other.attribute-name",
+            "source.css entity.name.tag.custom",
+            "sharing.modifier",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby"
+         ],
+         "settings": {
+            "foreground": "#df769b"
+         }
+      },
+      {
+         "name": "VARIABLE",
+         "scope": [
+            "variable",
+            "variable.object",
+            "variable.other",
+            "variable.parameter",
+            "support",
+            "entity.name.module",
+            "variable.import.parameter",
+            "variable.other.class",
+            "meta.toc-list.id.html",
+            "source.json meta.structure.dictionary.json support.type.property-name.json",
+            "meta.var.clojure",
+            "entity.name.variable",
+            "source.java meta.class.body.java",
+            "entity.name.package.go",
+            "source.c",
+            "source.cpp",
+            "source.go",
+            "source.python",
+            "meta.function-call.arguments.python",
+            "source.ruby",
+            "source.coffee.embedded.source",
+            "source.coffee",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "storage.type.annotation",
+            "punctuation.definition.annotation",
+            "source.groovy.embedded.source",
+            "punctuation.definition.variable",
+            "source.powershell",
+            "string.quoted.interpolated.vala constant.character.escape.vala",
+            "source.apacheconf",
+            "source.objc",
+            "source.crystal",
+            "string.quoted.double.kotlin entity.string.template.element.kotlin",
+            "entity.name.package.kotlin",
+            "meta.template.expression.kotlin",
+            "parameter.variable.function",
+            "variable.other.constant.elixir",
+            "source.elixir.embedded.source",
+            "source.sql.embedded",
+            "punctuation.definition.placeholder",
+            "source.swift",
+            "source.julia",
+            "source.shell",
+            "variable.other.normal punctuation.definition.variable.shell",
+            "source.reason variable.language",
+            "source.reason variable.language string.other.link",
+            "source.elm meta.value",
+            "source.elm meta.declaration.module",
+            "meta.embedded.block variable punctuation.definition.variable.php",
+            "string.quoted.double.class.other",
+            "source.toml keyword",
+            "support.type.nim",
+            "source.tf meta.template.expression",
+            "source.scala entity.name.import",
+            "markup.code",
+            "markup.fenced_code.block"
+         ],
+         "settings": {
+            "foreground": "#e4b781"
+         }
+      },
+      {
+         "name": "ANNOTATION",
+         "scope": [
+            "support.variable.property",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "entity.other.attribute-name.id",
+            "entity.other.attribute-name.id punctuation.definition.entity",
+            "entity.name.type.annotation.kotlin",
+            "support.type.primitive",
+            "meta.type.parameters entity.name.type",
+            "meta.type.annotation entity.name.type",
+            "punctuation.definition.typeparameters",
+            "source.python support.type.python",
+            "comment.block.documentation.phpdoc.php keyword.other.type.php",
+            "storage.type.php",
+            "keyword.type",
+            "storage.type.cs",
+            "storage.type.c",
+            "storage.type.objc",
+            "punctuation.definition.storage.type.objc",
+            "markup punctuation.definition",
+            "storage.type.powershell",
+            "comment.block.documentation entity.name.type",
+            "source.java storage.type",
+            "storage.type.primitive",
+            "source.groovy storage.type",
+            "storage.type.r",
+            "source.haskell storage.type",
+            "punctuation.separator.clause-head-body",
+            "source.go storage.type",
+            "storage.type.core.rust",
+            "storage.class.std.rust",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "support.type.vb",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "constant.other.reference",
+            "source.graphql support.type",
+            "source.reason support.type string",
+            "entity.name.type.fsharp",
+            "source.elm storage.type",
+            "storage.type.user-defined",
+            "storage.type.built-in",
+            "support.type.builtin",
+            "source.swift support.type",
+            "support.class.crystal",
+            "storage.type.integral",
+            "source.cpp storage.type.cpp",
+            "source.vala storage.type",
+            "source.hlsl storage.type.basic",
+            "source.hlsl support.type.other",
+            "source.apex storage.type",
+            "source.nim storage.type",
+            "source.cpp entity.name.type",
+            "support.class.builtin",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "markup.raw.monospace",
+            "markup.mark",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric"
+         ],
+         "settings": {
+            "foreground": "#d67e5c"
+         }
+      },
+      {
+         "name": "CONSTANT",
+         "scope": [
+            "constant",
+            "variable.other.constant",
+            "support.constant",
+            "punctuation.definition.entity",
+            "constant.character.entity",
+            "support.variable.magic",
+            "markup.quote",
+            "entity.name.type.type-parameter.cs",
+            "punctuation.bracket.angle",
+            "entity.name.function.preprocessor.c",
+            "storage.type.scala",
+            "entity.helper.apacheconf",
+            "variable.language.crystal",
+            "punctuation.definition.constant",
+            "support.constant punctuation.definition.variable",
+            "constant.character.math",
+            "support.class.math",
+            "source.graphql constant.character",
+            "source.reason constant.language.list",
+            "source.cpp variable.other.enummember",
+            "support.variable.class.hideshow",
+            "entity.other.attribute-name.class",
+            "meta.attribute.id entity.other.attribute-name",
+            "text.html entity.other.attribute-name",
+            "meta.tag.attributes entity.other.attribute-name",
+            "text.xml entity.other.attribute-name",
+            "source.cs entity.other.attribute-name",
+            "constant.character.format.placeholder",
+            "constant.other.placeholder",
+            "source.vue entity.other.attribute-name",
+            "entity.other.attribute-name.mjml",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "meta.definition.attribute-entry punctuation.separator"
+         ],
+         "settings": {
+            "foreground": "#d5971a"
+         }
+      },
+      {
+         "name": "TAG",
+         "scope": [
+            "variable.language",
+            "variable.parameter.function.language.special",
+            "punctuation.definition.italic",
+            "punctuation.definition.bold",
+            "entity.name.tag",
+            "variable.language punctuation.definition.variable",
+            "keyword.control.clojure",
+            "support.type.exception.python",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "keyword.other.var.cs",
+            "storage.modifier.super",
+            "source.go keyword",
+            "keyword.function.go",
+            "meta.separator",
+            "keyword.other.fn.rust",
+            "storage.modifier.static.rust",
+            "source.r meta.function.r keyword.control.r",
+            "storage.type.def",
+            "meta.class.identifier storage.modifier",
+            "source.scala keyword.declaration",
+            "storage.type",
+            "comment.block.documentation punctuation.definition.block.tag",
+            "comment.block.documentation punctuation.definition.inline.tag",
+            "entity.tag.apacheconf",
+            "keyword.other.julia",
+            "source.julia storage.modifier",
+            "constant.language.empty-list.haskell",
+            "meta.function.powershell storage.type.powershell",
+            "keyword.control.fun",
+            "punctuation.terminator.function",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml storage.type markup.underline",
+            "binding.fsharp keyword",
+            "function.anonymous keyword",
+            "function.anonymous keyword.symbol.fsharp",
+            "meta.embedded.block variable.language punctuation.definition.variable.php",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other.class",
+            "source.wsd keyword.other.linebegin",
+            "keyword.other.skinparam.keyword",
+            "keyword.other.nim",
+            "markup.deleted.diff",
+            "source.tf support.class.variable",
+            "meta.function.lua keyword.control.lua",
+            "markup.block entity.name.tag",
+            "markup.meta.attribute-list",
+            "source.zig keyword.default",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "foreground": "#e66533"
+         }
+      },
+      {
+         "name": "STRING",
+         "scope": [
+            "string",
+            "punctuation.definition.string",
+            "source.css support.constant",
+            "entity.name.import.go",
+            "markup.raw.texttt",
+            "markup.inserted.diff",
+            "source.scala punctuation.definition.character",
+            "constant.character.literal.scala",
+            "source.tf entity.name"
+         ],
+         "settings": {
+            "foreground": "#49e9a6"
+         }
+      },
+      {
+         "name": "STRINGINTERPOLATED",
+         "scope": [
+            "string.template",
+            "punctuation.definition.string.template",
+            "string.interpolated.python string.quoted.single.python",
+            "string.quoted.double.heredoc",
+            "string.quoted.interpolated.vala",
+            "string.quoted.interpolated.vala punctuation.definition.string",
+            "string.regexp.apacheconf",
+            "markup.inline.raw.string",
+            "markup.inline.raw punctuation.definition.raw",
+            "string.quoted.double.interpolated.crystal",
+            "string.quoted.double.interpolated.crystal punctuation.definition.string",
+            "text.tex markup.raw"
+         ],
+         "settings": {
+            "foreground": "#16b673"
+         }
+      },
+      {
+         "name": "NUMBER",
+         "scope": [
+            "constant.numeric",
+            "constant.language",
+            "punctuation.separator.decimal.period.php",
+            "keyword.operator.null-conditional.cs",
+            "punctuation.separator.question-mark.cs",
+            "constant.integer.apacheconf",
+            "keyword.operator.nullable-type",
+            "constant.language punctuation.definition.variable",
+            "constant.others.fsharp",
+            "keyword.other.unit",
+            "string.quoted.double.skinparam.value",
+            "source.toml constant",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "foreground": "#7060eb"
+         }
+      },
+      {
+         "name": "FUNCTION",
+         "scope": [
+            "variable.function",
+            "support.type.property-name",
+            "entity.name.function",
+            "string.other.link",
+            "markup.link",
+            "support.type.vendored",
+            "support.other.variable",
+            "meta.function-call.generic.python",
+            "meta.method-call.groovy meta.method.groovy",
+            "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+            "punctuation.definition.decorator",
+            "support.function.any-method",
+            "text.tex support.function",
+            "text.tex punctuation.definition.function",
+            "entity.name.section.fsharp entity.name.section.fsharp",
+            "support.variable.class.function",
+            "keyword.control.cucumber.table",
+            "punctuation.decorator",
+            "source.tf support.class"
+         ],
+         "settings": {
+            "foreground": "#16a3b6"
+         }
+      },
+      {
+         "name": "SUPPORT",
+         "scope": [
+            "entity.name",
+            "entity.other",
+            "support.orther.namespace.use.php",
+            "meta.use.php",
+            "support.other.namespace.php",
+            "support.type",
+            "support.class",
+            "punctuation.definition.parameters",
+            "support.function",
+            "support.function.construct",
+            "markup.changed.git_gutter",
+            "markup.underline.link",
+            "markup.underline.link.image",
+            "markup.underline",
+            "meta.symbol.namespace.clojure",
+            "entity.mime-type.apacheconf",
+            "keyword.operator.function.infix",
+            "entity.name.function.infix",
+            "entity.name.function.call.kotlin",
+            "text.tex support.function.verb",
+            "text.tex support.function.texttt",
+            "source.reason constant.language.unit",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "constant.language.unit.fsharp",
+            "source.wsd support.class.preprocessings",
+            "keyword.language.gherkin.feature.scenario",
+            "source.nim keyword.other.common.function",
+            "entity.name.type.namespace",
+            "entity.name.scope-resolution.function.call"
+         ],
+         "settings": {
+            "foreground": "#49d6e9"
+         }
+      },
+      {
+         "name": "MISC",
+         "scope": [
+            "source.js constant.other.object.key.js string.unquoted.label.js",
+            "source.js punctuation.section.embedded",
+            "punctuation.definition.template-expression",
+            "support.class",
+            "storage.type.string.python",
+            "string.interpolated.pug",
+            "support.constant.handlebars",
+            "source.clojure punctuation.section.set",
+            "source.clojure punctuation.section.metadata",
+            "entity.global.clojure",
+            "source.python meta.function-call.python support.type.python",
+            "entity.other.inherited-class.python",
+            "punctuation.definition.interpolation",
+            "punctuation.section.embedded.begin.ruby",
+            "punctuation.section.embedded.end.ruby source.ruby",
+            "support.constant.math",
+            "entity.namespace.r",
+            "meta.method-call.groovy storage.type.groovy",
+            "source.scala entity.name.class.declaration",
+            "constant.character.escape",
+            "support.function.macro.julia",
+            "string.replacement.apacheconf",
+            "storage.modifier.using.vala",
+            "constant.other.haskell",
+            "source.objc entity.name.tag",
+            "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+            "meta.embedded.line.crystal punctuation.section.embedded",
+            "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+            "punctuation.section.embedded",
+            "punctuation.section.tag",
+            "punctuation.section.embedded source.swift",
+            "variable.other.bracket punctuation.definition.variable",
+            "string.interpolated.dollar punctuation.definition.string",
+            "constant.character.escape punctuation.definition.keyword",
+            "source.ocaml entity.name.class constant.numeric",
+            "source.reason entity.name.class",
+            "keyword.format.specifier.fsharp",
+            "support.module.elm",
+            "meta.embedded.block.php punctuation.definition.variable.php",
+            "source.vala storage.type",
+            "support.variable.class.group",
+            "entity.name.type.class",
+            "source.tf meta.keyword.list",
+            "source.tf meta.keyword.map",
+            "entity.name.class.lua",
+            "markup.substitution"
+         ],
+         "settings": {
+            "foreground": "#49ace9"
+         }
+      },
+      {
+         "name": "INVALID",
+         "scope": [
+            "invalid",
+            "invalid.illegal"
+         ],
+         "settings": {
+            "foreground": "#e3541c"
+         }
+      },
+      {
+         "name": "ITALIC",
+         "scope": [
+            "comment",
+            "storage.modifier",
+            "punctuation.definition.comment",
+            "entity.other",
+            "variable.language",
+            "support.type.vendored",
+            "support.constant.vendored",
+            "markup.quote",
+            "markup.italic",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "keyword.control.clojure",
+            "source.clojure meta.symbol.dynamic",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "variable.other.member.c",
+            "support.type.core.rust",
+            "variable.other.object.property",
+            "variable.other.property",
+            "source.r meta.function.r keyword.control.r",
+            "comment.line.roxygen.r keyword",
+            "comment.line.roxygen.r variable.parameter.r",
+            "keyword.control.inheritance.coffee",
+            "comment.block.documentation.phpdoc.php keyword",
+            "keyword.other.array.phpdoc.php",
+            "storage.type.modifier",
+            "comment.block.javadoc.java keyword",
+            "comment.block.javadoc.java variable.parameter.java",
+            "keyword.operator.documentation.powershell",
+            "storage.type.scala",
+            "variable.parameter.function.language.special",
+            "comment.block.documentation.scala keyword",
+            "comment.block.documentation.scala variable.parameter",
+            "support.function.builtin.go",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.ruby",
+            "source.vala storage.type.generic",
+            "constant.other.table-name",
+            "constant.other.placeholder",
+            "variable.other.field",
+            "entity.alias.import.go",
+            "source.swift keyword.other.declaration-specifier",
+            "support.variable.swift",
+            "keyword.other.capture-specifier",
+            "text.tex support.function.emph",
+            "constant.other.math",
+            "support.function.textit",
+            "entity.name.footnote",
+            "entity.name.function.directive.graphql",
+            "source.graphql support.type.enum",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "abstract.definition.fsharp keyword",
+            "abstract.definition.fsharp entity",
+            "function.anonymous keyword",
+            "entity.name.record.field.accessor.elm",
+            "support.type.primitive",
+            "support.type.builtin",
+            "keyword.type.cs",
+            "storage.type.built-in",
+            "storage.type.primitive",
+            "source.python support.type.python",
+            "storage.type.core.rust",
+            "source.swift support.type",
+            "source.go storage.type",
+            "storage.type.php",
+            "storage.type.function.kotlin",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "variable.other.member",
+            "keyword.other.import",
+            "keyword.package",
+            "keyword.import",
+            "source.wsd keyword.control.diagram",
+            "keyword.language.gherkin.feature.step",
+            "source.hlsl storage.type.basic",
+            "source.apex keyword.type",
+            "sharing.modifier",
+            "source.nim storage.type.concrete",
+            "meta.preprocessor.pragma.nim",
+            "storage.type.integral",
+            "entity.name.scope-resolution.function.call",
+            "support.class.builtin",
+            "comment.block.documentation storage.type.class",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "meta.import keyword.control",
+            "keyword.control.export",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "keyword.local.lua",
+            "markup.mark.constrained markup.mark",
+            "markup.block.open",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric",
+            "source.zig keyword.type",
+            "source.zig keyword.storage",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "fontStyle": "italic"
+         }
+      },
+      {
+         "name": "BOLD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.operator",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.type.function.arrow",
+            "constant.other.color",
+            "punctuation.accessor",
+            "entity.name.section",
+            "markdown.heading",
+            "markup.inline.raw punctuation.definition.raw",
+            "markup.heading",
+            "storage.type.function.pug",
+            "storage.type.function.python",
+            "storage.type.annotation",
+            "punctuation.bracket.angle",
+            "keyword.other.new",
+            "storage.type.generic.wildcard",
+            "source.go keyword.operator",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "variable.parameter",
+            "support.function.builtin.rust",
+            "storage.type.function.coffee",
+            "entity.name.variable.parameter",
+            "punctuation.separator.hash.cs",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "meta.function.parameters variable.other",
+            "entity.name.type.annotation.kotlin",
+            "storage.type.objc",
+            "parameter.variable.function",
+            "markup punctuation.definition",
+            "punctuation.section.directive",
+            "punctuation.definition.preprocessor",
+            "source.ruby punctuation.definition.variable",
+            "support.function.textbf",
+            "source.graphql support.type.builtin",
+            "source.ocaml variable.interpolation string",
+            "entity.name.function.definition.special.constructor",
+            "entity.name.function.definition.special.member.destructor.",
+            "meta.function.parameters variable punctuation.definition.variable.php",
+            "source.wsd keyword.other.activity",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby",
+            "keyword.function.go",
+            "keyword.other.fn.rust",
+            "markup.other.anchor",
+            "markup.list.bullet",
+            "markup.list punctuation.definition",
+            "keyword.control.default",
+            "punctuation.section",
+            "punctuation.separator",
+            "punctuation.terminator",
+            "markup.bold.markdown",
+            "source.zig storage.type.function"
+         ],
+         "settings": {
+            "fontStyle": "bold"
+         }
+      },
+      {
+         "name": "BOLD-ITALIC",
+         "scope": [
+            "markup.quote markup.bold",
+            "text.html punctuation.section.embedded",
+            "variable.other.c",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "source.rust meta.attribute.rust",
+            "meta.attribute.id entity.other.attribute-name",
+            "source.ocaml punctuation.definition.tag emphasis",
+            "source.tf entity.name",
+            "markup.quote punctuation.definition",
+            "markup.fenced_code punctuation.definition",
+            "fenced_code.block.language"
+         ],
+         "settings": {
+            "fontStyle": "bold italic"
+         }
+      },
+      {
+         "name": "NORMAL",
+         "scope": [
+            "keyword.begin.tag.ejs",
+            "source.python meta.function.decorator.python support.type.python",
+            "source.cs keyword.other",
+            "keyword.other.var.cs",
+            "source.go keyword",
+            "storage.modifier.static.rust",
+            "variable.parameter.r",
+            "variable.parameter.handlebars",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "meta.class.identifier storage.modifier",
+            "keyword.operator.other.powershell",
+            "source.css variable.parameter",
+            "string.interpolated variable.parameter",
+            "source.apacheconf keyword",
+            "keyword.other.julia",
+            "storage.modifier.using.vala",
+            "source.objc keyword.other.property.attribute",
+            "source.sql keyword.other",
+            "keyword.other.using.vala",
+            "keyword.operator.function.infix",
+            "keyword.control.directive",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "entity.name.function.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "punctuation.definition.variable",
+            "entity.name.section.latex",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "keyword.format.specifier.fsharp",
+            "entity.name.section.fsharp",
+            "binding.fsharp keyword",
+            "binding.fsharp keyword.symbol",
+            "record.fsharp keyword",
+            "keyword.symbol.fsharp",
+            "entity.name.section.fsharp keyword",
+            "namespace.open.fsharp keyword",
+            "namespace.open.fsharp entity",
+            "storage.type",
+            "source.cpp keyword.other",
+            "source.c keyword.other",
+            "keyword.other.unit",
+            "storage.modifier.array.bracket",
+            "meta.import.haskell keyword",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other",
+            "keyword.other.skinparam",
+            "source.css keyword.control",
+            "source.css keyword.operator",
+            "keyword.language.gherkin.feature.scenario",
+            "keyword.control.cucumber.table",
+            "source.toml entity.other.attribute-name",
+            "source.toml keyword",
+            "keyword.other.nim",
+            "source.nim keyword.other.common.function",
+            "source.nim keyword.other",
+            "source.scala keyword.declaration",
+            "source.scala entity.name.class.declaration",
+            "keyword.control.lua",
+            "source.css punctuation.section",
+            "punctuation.section.embedded",
+            "source.c punctuation.section",
+            "source.cpp punctuation.section",
+            "source.java punctuation.section",
+            "source.php punctuation.section",
+            "source.powershell punctuation.section",
+            "source.r punctuation.section",
+            "source.ruby punctuation.section",
+            "source.swift punctuation.section",
+            "source.objc punctuation.section",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.default",
+            "source.zig keyword.statement",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "fontStyle": ""
+         }
+      },
+      {
+         "name": "STRIKETHROUGH",
+         "scope": [
+            "markup.strikethrough"
+         ],
+         "settings": {
+            "fontStyle": "strikethrough"
+         }
+      }
+   ]
+}

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

@@ -0,0 +1,1112 @@
+{
+   "name": "Noctis Viola",
+   "type": "dark",
+   "colors": {
+      "selection.background": "#bf8ef166",
+      "descriptionForeground": "#996bc7",
+      "errorForeground": "#e34e1c",
+      "widget.shadow": "#00000044",
+      "editor.background": "#30243d",
+      "editor.foreground": "#ccbfd9",
+      "editorLineNumber.foreground": "#665973",
+      "editorLineNumber.activeForeground": "#996bc7",
+      "editorCursor.foreground": "#d9b3ff",
+      "badge.background": "#bf8ef1",
+      "badge.foreground": "#1c1226",
+      "activityBar.background": "#30243d",
+      "activityBar.dropBackground": "#996bc765",
+      "activityBar.border": "#1c1226",
+      "activityBar.foreground": "#8767a8",
+      "activityBar.inactiveForeground": "#8767a877",
+      "activityBarBadge.background": "#bf8ef1",
+      "activityBarBadge.foreground": "#1c1226",
+      "activityBar.activeBackground": "#bf8ef133",
+      "activityBar.activeBorder": "#bf8ef1",
+      "sideBar.background": "#2b2136",
+      "sideBar.dropBackground": "#2b2136",
+      "sideBar.border": "#1c1226",
+      "sideBar.foreground": "#b3a5c0",
+      "sideBarSectionHeader.background": "#3d2e4d",
+      "sideBarSectionHeader.foreground": "#b3a5c0",
+      "sideBarTitle.foreground": "#b3a5c0",
+      "sideBarSectionHeader.border": "#1c1226",
+      "statusBar.foreground": "#8767a8",
+      "statusBar.background": "#30243d",
+      "statusBar.border": "#1c1226",
+      "statusBar.debuggingBackground": "#30243d",
+      "statusBar.debuggingForeground": "#ff80ac50",
+      "statusBar.debuggingBorder": "#ff80acaf",
+      "statusBar.noFolderForeground": "#9987ab",
+      "statusBar.noFolderBackground": "#30243d",
+      "statusBar.noFolderBorder": "#30243d",
+      "statusBarItem.activeBackground": "#734b9b88",
+      "statusBarItem.hoverBackground": "#422b5a",
+      "statusBarItem.prominentBackground": "#21162d",
+      "statusBarItem.prominentHoverBackground": "#2b1145",
+      "button.background": "#007f99",
+      "button.foreground": "#edebff",
+      "button.hoverBackground": "#0ac",
+      "dropdown.background": "#3d2e4d",
+      "dropdown.border": "#3d2e4d",
+      "dropdown.foreground": "#996bc7",
+      "editorMarkerNavigation.background": "#4c326729",
+      "editorMarkerNavigationError.background": "#e34e1c",
+      "editorMarkerNavigationWarning.background": "#e69533",
+      "editorError.border": "#30243d",
+      "editorError.foreground": "#e34e1c",
+      "editorWarning.border": "#30243d",
+      "editorWarning.foreground": "#e69533",
+      "editorInfo.border": "#30243d",
+      "editorInfo.foreground": "#bf8ef1",
+      "editorHint.border": "#49e9a600",
+      "editorHint.foreground": "#49e9a6",
+      "editorGroup.emptyBackground": "#66597333",
+      "editorGroup.border": "#1c1226",
+      "editorGroup.dropBackground": "#66597333",
+      "editorGroupHeader.noTabsBackground": "#3d2e4d",
+      "editorGroupHeader.tabsBackground": "#3d2e4d",
+      "editorGroupHeader.tabsBorder": "#3d2e4d",
+      "tab.activeBackground": "#30243d",
+      "tab.unfocusedActiveBackground": "#302b36",
+      "tab.activeForeground": "#bf8ef1",
+      "tab.border": "#1c1226",
+      "tab.inactiveBackground": "#3d2e4d",
+      "tab.inactiveForeground": "#b3a5c0",
+      "tab.unfocusedActiveForeground": "#b3a5c0",
+      "tab.unfocusedInactiveForeground": "#b3a5c0",
+      "tab.activeBorderTop": "#bf8ef1",
+      "tab.activeModifiedBorder": "#49e9a6",
+      "tab.activeBorder": "#30243d",
+      "tab.unfocusedActiveBorder": "#30243d",
+      "tab.unfocusedHoverBackground": "#996bc721",
+      "textBlockQuote.background": "#30243d",
+      "textBlockQuote.border": "#8767a8",
+      "textCodeBlock.background": "#30243d",
+      "textLink.activeForeground": "#bf8ef1",
+      "textLink.foreground": "#bf8ef1",
+      "textPreformat.foreground": "#ffc180",
+      "textSeparator.foreground": "#30243d",
+      "walkThrough.embeddedEditorBackground": "#30243d",
+      "welcomePage.buttonBackground": "#291d35",
+      "welcomePage.buttonHoverBackground": "#3d2e4d",
+      "input.background": "#291d35",
+      "input.border": "#402956",
+      "input.foreground": "#CDD3DE",
+      "input.placeholderForeground": "#9987ab",
+      "inputOption.activeBorder": "#8767a8",
+      "inputValidation.errorForeground": "#ff4000",
+      "inputValidation.errorBackground": "#501502ee",
+      "inputValidation.errorBorder": "#691c02",
+      "inputValidation.infoForeground": "#40d4e7",
+      "inputValidation.infoBackground": "#0f6e7bee",
+      "inputValidation.infoBorder": "#148f9f",
+      "inputValidation.warningForeground": "#e69533",
+      "inputValidation.warningBackground": "#82694acc",
+      "inputValidation.warningBorder": "#a88457",
+      "editorWidget.background": "#3d2e4d",
+      "editorWidget.border": "#1c1226",
+      "editorHoverWidget.background": "#462d5d",
+      "editorHoverWidget.border": "#1c1226",
+      "editorSuggestWidget.background": "#462d5d",
+      "editorSuggestWidget.border": "#1c1226",
+      "editorSuggestWidget.foreground": "#b3a5c0",
+      "editorSuggestWidget.highlightForeground": "#bf8ef1",
+      "editorSuggestWidget.selectedBackground": "#593a78",
+      "editorGutter.background": "#30243d",
+      "editorGutter.addedBackground": "#8ce99a",
+      "editorGutter.deletedBackground": "#e34e1c",
+      "editorGutter.modifiedBackground": "#ffc180",
+      "editor.selectionBackground": "#8767a855",
+      "editor.selectionHighlightBackground": "#49ace933",
+      "editor.inactiveSelectionBackground": "#8767a833",
+      "editor.wordHighlightStrongBackground": "#cc990033",
+      "editor.wordHighlightBackground": "#e4b78133",
+      "editor.findMatchBackground": "#40bf6a11",
+      "editor.findMatchHighlightBackground": "#0e667179",
+      "editor.findRangeHighlightBackground": "#49e9a622",
+      "editor.hoverHighlightBackground": "#8767a83f",
+      "editor.lineHighlightBackground": "#402d53ee",
+      "editor.lineHighlightBorder": "#402d53",
+      "editor.rangeHighlightBackground": "#49d6e922",
+      "editorLink.activeForeground": "#14a5ff",
+      "editorWhitespace.foreground": "#ffffff21",
+      "editorIndentGuide.background": "#422e56",
+      "editorIndentGuide.activeBackground": "#595289",
+      "editorBracketMatch.background": "#8767a822",
+      "editorBracketMatch.border": "#8767a8",
+      "editorRuler.foreground": "#473856",
+      "editorCodeLens.foreground": "#776284",
+      "terminal.ansiBlack": "#362f3d",
+      "terminal.ansiRed": "#e66533",
+      "terminal.ansiGreen": "#49e9a6",
+      "terminal.ansiYellow": "#e4b781",
+      "terminal.ansiBlue": "#49ace9",
+      "terminal.ansiMagenta": "#df769b",
+      "terminal.ansiCyan": "#49d6e9",
+      "terminal.ansiWhite": "#bfafcf",
+      "terminal.ansiBrightBlack": "#594e65",
+      "terminal.ansiBrightRed": "#e97749",
+      "terminal.ansiBrightGreen": "#60ebb1",
+      "terminal.ansiBrightYellow": "#e69533",
+      "terminal.ansiBrightBlue": "#60b6eb",
+      "terminal.ansiBrightMagenta": "#e798b3",
+      "terminal.ansiBrightCyan": "#60dbeb",
+      "terminal.ansiBrightWhite": "#ccbfd9",
+      "terminal.background": "#291d35",
+      "terminal.foreground": "#ccbfd9",
+      "terminalCursor.background": "#291d35",
+      "terminalCursor.foreground": "#ccbfd9",
+      "merge.border": "#30243d00",
+      "merge.currentContentBackground": "#85f1ff22",
+      "merge.currentHeaderBackground": "#85f1ff44",
+      "merge.incomingContentBackground": "#9d92f222",
+      "merge.incomingHeaderBackground": "#9d92f244",
+      "merge.commonContentBackground": "#ffc18022",
+      "merge.commonHeaderBackground": "#ffc18044",
+      "editorOverviewRuler.currentContentForeground": "#85f1ff44",
+      "editorOverviewRuler.incomingContentForeground": "#9d92f244",
+      "editorOverviewRuler.commonContentForeground": "#ffc18044",
+      "editorOverviewRuler.border": "#30243d",
+      "notificationCenter.border": "#3d2e4d",
+      "notificationCenterHeader.foreground": "#9987ab",
+      "notificationCenterHeader.background": "#3d2e4d",
+      "notificationToast.border": "#3d2e4d",
+      "notifications.foreground": "#CDD3DE",
+      "notifications.background": "#3d2e4d",
+      "notifications.border": "#3d2e4d",
+      "notificationLink.foreground": "#9987ab",
+      "diffEditor.insertedTextBackground": "#16b67327",
+      "diffEditor.removedTextBackground": "#e6653341",
+      "debugToolBar.background": "#30243d",
+      "debugExceptionWidget.background": "#30243d",
+      "debugExceptionWidget.border": "#8767a8",
+      "extensionButton.prominentBackground": "#008c99",
+      "extensionButton.prominentForeground": "#e5f5f5",
+      "extensionButton.prominentHoverBackground": "#00bbcc",
+      "focusBorder": "#3d2e4d",
+      "foreground": "#ccbfd9",
+      "panel.background": "#291d35",
+      "panel.border": "#8767a8",
+      "panelTitle.activeBorder": "#8767a8",
+      "panelTitle.activeForeground": "#bf8ef1",
+      "panelTitle.inactiveForeground": "#725b8b",
+      "peekView.border": "#8767a8",
+      "peekViewEditor.background": "#2b1d3a",
+      "peekViewEditor.matchHighlightBackground": "#63438499",
+      "peekViewEditorGutter.background": "#2b1d3a",
+      "peekViewResult.background": "#2e1f3d",
+      "peekViewResult.fileForeground": "#ffc180",
+      "peekViewResult.lineForeground": "#9987ab",
+      "peekViewResult.matchHighlightBackground": "#343050",
+      "peekViewResult.selectionBackground": "#343050",
+      "peekViewResult.selectionForeground": "#9987ab",
+      "peekViewTitle.background": "#2e1f3d",
+      "peekViewTitleDescription.foreground": "#9987ab",
+      "peekViewTitleLabel.foreground": "#ffc180",
+      "progressBar.background": "#bf8ef1",
+      "scrollbar.shadow": "#00000044",
+      "scrollbarSlider.activeBackground": "#a660eb77",
+      "scrollbarSlider.background": "#a660eb33",
+      "scrollbarSlider.hoverBackground": "#a660eb55",
+      "gitDecoration.addedResourceForeground": "#16b673",
+      "gitDecoration.modifiedResourceForeground": "#49e9a6",
+      "gitDecoration.deletedResourceForeground": "#e34e1c",
+      "gitDecoration.untrackedResourceForeground": "#40d4e7",
+      "gitDecoration.ignoredResourceForeground": "#5b788b",
+      "gitDecoration.conflictingResourceForeground": "#ffc180",
+      "pickerGroup.border": "#8767a8",
+      "pickerGroup.foreground": "#bf8ef1",
+      "list.activeSelectionBackground": "#472e60",
+      "list.activeSelectionForeground": "#edebff",
+      "list.dropBackground": "#302040",
+      "list.focusBackground": "#593a78",
+      "list.focusForeground": "#edebff",
+      "list.highlightForeground": "#bf8ef1",
+      "list.hoverBackground": "#6a448d",
+      "list.hoverForeground": "#edebff",
+      "list.inactiveFocusBackground": "#362546",
+      "list.inactiveSelectionBackground": "#3d2e4d",
+      "list.inactiveSelectionForeground": "#ccbfd9",
+      "list.errorForeground": "#e34e1c",
+      "list.warningForeground": "#ffa857",
+      "listFilterWidget.background": "#302040",
+      "listFilterWidget.outline": "#49e9a6",
+      "listFilterWidget.noMatchesOutline": "#e34e1c",
+      "tree.indentGuidesStroke": "#665973",
+      "settings.headerForeground": "#ccbfd9",
+      "settings.modifiedItemIndicator": "#15ac31",
+      "settings.dropdownListBorder": "#66408c77",
+      "settings.dropdownBackground": "#3d2e4d",
+      "settings.dropdownForeground": "#0ac",
+      "settings.dropdownBorder": "#3d2e4d",
+      "settings.checkboxBackground": "#3d2e4d",
+      "settings.checkboxForeground": "#0ac",
+      "settings.checkboxBorder": "#3d2e4d",
+      "settings.textInputBackground": "#3d2e4d",
+      "settings.textInputForeground": "#0ac",
+      "settings.textInputBorder": "#3d2e4d",
+      "settings.numberInputBackground": "#291d35",
+      "settings.numberInputForeground": "#a660eb",
+      "settings.numberInputBorder": "#291d35",
+      "breadcrumb.foreground": "#b3a5c0",
+      "breadcrumb.background": "#30243d",
+      "breadcrumb.focusForeground": "#bf8ef1",
+      "breadcrumb.activeSelectionForeground": "#edebff",
+      "breadcrumbPicker.background": "#3d2e4d",
+      "titleBar.activeBackground": "#30243d",
+      "titleBar.activeForeground": "#ccbfd9",
+      "titleBar.inactiveBackground": "#30243d",
+      "titleBar.inactiveForeground": "#b3a5c0",
+      "menu.background": "#3d2e4d",
+      "menu.foreground": "#b3a5c0",
+      "menu.selectionBackground": "#593a78",
+      "menu.selectionForeground": "#bf8ef1",
+      "menu.selectionBorder": "#593a78",
+      "menu.separatorBackground": "#bf8ef1",
+      "menubar.selectionBackground": "#593a78",
+      "menubar.selectionForeground": "#bf8ef1",
+      "menubar.selectionBorder": "#593a78",
+      "editor.snippetTabstopHighlightBackground": "#21162d",
+      "editor.snippetTabstopHighlightBorder": "#30243d",
+      "editor.snippetFinalTabstopHighlightBackground": "#21162d",
+      "editor.snippetFinalTabstopHighlightBorder": "#30243d",
+      "minimap.findMatchHighlight": "#bf8ef1aa",
+      "minimap.errorHighlight": "#e34e1cee",
+      "minimap.warningHighlight": "#e69533ee",
+      "minimapGutter.addedBackground": "#16b673",
+      "minimapGutter.modifiedBackground": "#49e9a6",
+      "minimapGutter.deletedBackground": "#e34e1c",
+      "minimap.background": "#30243d99"
+   },
+   "tokenColors": [
+      {
+         "name": "COMMENT",
+         "scope": [
+            "comment",
+            "punctuation.definition.comment",
+            "punctuation.definition.tag",
+            "comment.block.documentation punctuation.definition.bracket",
+            "source.ocaml comment constant.regexp meta.separator",
+            "markup.other.anchor support.constant",
+            "markup.fenced_code",
+            "markup.fenced_code punctuation.definition",
+            "punctuation.definition.heading",
+            "punctuation.definition.bold.markdown",
+            "punctuation.definition.italic.markdown",
+            "punctuation.definition.strikethrough.markdown"
+         ],
+         "settings": {
+            "foreground": "#7f659a"
+         }
+      },
+      {
+         "name": "TEXT",
+         "scope": [
+            "constant.character",
+            "constant.escape",
+            "text.html.markdown",
+            "punctuation.definition.list_item",
+            "keyword.begin.tag.ejs",
+            "constant.name.attribute.tag.pug",
+            "source.clojure meta.symbol",
+            "constant.other.description.jsdoc",
+            "keyword.other.array.phpdoc.php",
+            "keyword.operator.other.powershell",
+            "meta.link.inline punctuation.definition.string",
+            "source.sql",
+            "source meta.brace",
+            "source punctuation",
+            "text.html punctuation",
+            "markup meta punctuation.definition",
+            "meta.bracket.julia",
+            "meta.array.julia",
+            "entity.name.footnote",
+            "source.ocaml punctuation.definition.tag",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "entity.other.attribute-name strong",
+            "binding.fsharp keyword.symbol.fsharp",
+            "entity.name.record.field.elm",
+            "entity.name.record.field.accessor.elm",
+            "storage.modifier.array.bracket",
+            "source.css entity.other",
+            "meta.attribute-selector punctuation.definition.entity",
+            "markup.other.anchor string",
+            "punctuation.separator",
+            "punctuation.section",
+            "punctuation.terminator"
+         ],
+         "settings": {
+            "foreground": "#ccbfd9"
+         }
+      },
+      {
+         "name": "KEYWORD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.modifier",
+            "meta.tag.sgml",
+            "punctuation.accessor",
+            "constant.other.color",
+            "entity.name.section",
+            "markup.heading",
+            "markup.heading punctuation.definition",
+            "entity.other.attribute-name.pseudo-class",
+            "entity.other.attribute-name.pseudo-element",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "storage.type.function.pug",
+            "text.pug storage.type",
+            "text.pug meta.tag.other",
+            "source.clojure storage.control",
+            "meta.expression.clojure",
+            "punctuation.separator.slice.python",
+            "punctuation.separator.question-mark.cs",
+            "punctuation.definition.parameters.varargs",
+            "source.go keyword.operator",
+            "punctuation.separator.pointer-access",
+            "punctuation.separator.other.ruby",
+            "keyword.package",
+            "keyword.import",
+            "punctuation.definition.keyword",
+            "punctuation.separator.hash.cs",
+            "entity.other.attribute-name.pseudo-class.css punctuation.definition.entity.css",
+            "entity.other.attribute-name.pseudo-element.css punctuation.definition.entity.css",
+            "source.kotlin storage.type.import",
+            "source.kotlin storage.type.package",
+            "constant.string.documentation.powershell",
+            "punctuation.section.directive",
+            "storage.type.rust",
+            "punctuation.definition.attribute",
+            "punctuation.definition.preprocessor",
+            "punctuation.separator.namespace",
+            "punctuation.separator.method",
+            "keyword.control punctuation.definition.function",
+            "source.ocaml variable.interpolation string",
+            "source.reason variable.interpolation",
+            "punctuation.definition.directive",
+            "storage.type.modifier",
+            "keyword.other.class.fileds",
+            "source.toml entity.other.attribute-name",
+            "source.css entity.name.tag.custom",
+            "sharing.modifier",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby"
+         ],
+         "settings": {
+            "foreground": "#df769b"
+         }
+      },
+      {
+         "name": "VARIABLE",
+         "scope": [
+            "variable",
+            "variable.object",
+            "variable.other",
+            "variable.parameter",
+            "support",
+            "entity.name.module",
+            "variable.import.parameter",
+            "variable.other.class",
+            "meta.toc-list.id.html",
+            "source.json meta.structure.dictionary.json support.type.property-name.json",
+            "meta.var.clojure",
+            "entity.name.variable",
+            "source.java meta.class.body.java",
+            "entity.name.package.go",
+            "source.c",
+            "source.cpp",
+            "source.go",
+            "source.python",
+            "meta.function-call.arguments.python",
+            "source.ruby",
+            "source.coffee.embedded.source",
+            "source.coffee",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "storage.type.annotation",
+            "punctuation.definition.annotation",
+            "source.groovy.embedded.source",
+            "punctuation.definition.variable",
+            "source.powershell",
+            "string.quoted.interpolated.vala constant.character.escape.vala",
+            "source.apacheconf",
+            "source.objc",
+            "source.crystal",
+            "string.quoted.double.kotlin entity.string.template.element.kotlin",
+            "entity.name.package.kotlin",
+            "meta.template.expression.kotlin",
+            "parameter.variable.function",
+            "variable.other.constant.elixir",
+            "source.elixir.embedded.source",
+            "source.sql.embedded",
+            "punctuation.definition.placeholder",
+            "source.swift",
+            "source.julia",
+            "source.shell",
+            "variable.other.normal punctuation.definition.variable.shell",
+            "source.reason variable.language",
+            "source.reason variable.language string.other.link",
+            "source.elm meta.value",
+            "source.elm meta.declaration.module",
+            "meta.embedded.block variable punctuation.definition.variable.php",
+            "string.quoted.double.class.other",
+            "source.toml keyword",
+            "support.type.nim",
+            "source.tf meta.template.expression",
+            "source.scala entity.name.import",
+            "markup.code",
+            "markup.fenced_code.block"
+         ],
+         "settings": {
+            "foreground": "#e4b781"
+         }
+      },
+      {
+         "name": "ANNOTATION",
+         "scope": [
+            "support.variable.property",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "entity.other.attribute-name.id",
+            "entity.other.attribute-name.id punctuation.definition.entity",
+            "entity.name.type.annotation.kotlin",
+            "support.type.primitive",
+            "meta.type.parameters entity.name.type",
+            "meta.type.annotation entity.name.type",
+            "punctuation.definition.typeparameters",
+            "source.python support.type.python",
+            "comment.block.documentation.phpdoc.php keyword.other.type.php",
+            "storage.type.php",
+            "keyword.type",
+            "storage.type.cs",
+            "storage.type.c",
+            "storage.type.objc",
+            "punctuation.definition.storage.type.objc",
+            "markup punctuation.definition",
+            "storage.type.powershell",
+            "comment.block.documentation entity.name.type",
+            "source.java storage.type",
+            "storage.type.primitive",
+            "source.groovy storage.type",
+            "storage.type.r",
+            "source.haskell storage.type",
+            "punctuation.separator.clause-head-body",
+            "source.go storage.type",
+            "storage.type.core.rust",
+            "storage.class.std.rust",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "support.type.vb",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "constant.other.reference",
+            "source.graphql support.type",
+            "source.reason support.type string",
+            "entity.name.type.fsharp",
+            "source.elm storage.type",
+            "storage.type.user-defined",
+            "storage.type.built-in",
+            "support.type.builtin",
+            "source.swift support.type",
+            "support.class.crystal",
+            "storage.type.integral",
+            "source.cpp storage.type.cpp",
+            "source.vala storage.type",
+            "source.hlsl storage.type.basic",
+            "source.hlsl support.type.other",
+            "source.apex storage.type",
+            "source.nim storage.type",
+            "source.cpp entity.name.type",
+            "support.class.builtin",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "markup.raw.monospace",
+            "markup.mark",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric"
+         ],
+         "settings": {
+            "foreground": "#d67e5c"
+         }
+      },
+      {
+         "name": "CONSTANT",
+         "scope": [
+            "constant",
+            "variable.other.constant",
+            "support.constant",
+            "punctuation.definition.entity",
+            "constant.character.entity",
+            "support.variable.magic",
+            "markup.quote",
+            "entity.name.type.type-parameter.cs",
+            "punctuation.bracket.angle",
+            "entity.name.function.preprocessor.c",
+            "storage.type.scala",
+            "entity.helper.apacheconf",
+            "variable.language.crystal",
+            "punctuation.definition.constant",
+            "support.constant punctuation.definition.variable",
+            "constant.character.math",
+            "support.class.math",
+            "source.graphql constant.character",
+            "source.reason constant.language.list",
+            "source.cpp variable.other.enummember",
+            "support.variable.class.hideshow",
+            "entity.other.attribute-name.class",
+            "meta.attribute.id entity.other.attribute-name",
+            "text.html entity.other.attribute-name",
+            "meta.tag.attributes entity.other.attribute-name",
+            "text.xml entity.other.attribute-name",
+            "source.cs entity.other.attribute-name",
+            "constant.character.format.placeholder",
+            "constant.other.placeholder",
+            "source.vue entity.other.attribute-name",
+            "entity.other.attribute-name.mjml",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "meta.definition.attribute-entry punctuation.separator"
+         ],
+         "settings": {
+            "foreground": "#d5971a"
+         }
+      },
+      {
+         "name": "TAG",
+         "scope": [
+            "variable.language",
+            "variable.parameter.function.language.special",
+            "punctuation.definition.italic",
+            "punctuation.definition.bold",
+            "entity.name.tag",
+            "variable.language punctuation.definition.variable",
+            "keyword.control.clojure",
+            "support.type.exception.python",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "keyword.other.var.cs",
+            "storage.modifier.super",
+            "source.go keyword",
+            "keyword.function.go",
+            "meta.separator",
+            "keyword.other.fn.rust",
+            "storage.modifier.static.rust",
+            "source.r meta.function.r keyword.control.r",
+            "storage.type.def",
+            "meta.class.identifier storage.modifier",
+            "source.scala keyword.declaration",
+            "storage.type",
+            "comment.block.documentation punctuation.definition.block.tag",
+            "comment.block.documentation punctuation.definition.inline.tag",
+            "entity.tag.apacheconf",
+            "keyword.other.julia",
+            "source.julia storage.modifier",
+            "constant.language.empty-list.haskell",
+            "meta.function.powershell storage.type.powershell",
+            "keyword.control.fun",
+            "punctuation.terminator.function",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml storage.type markup.underline",
+            "binding.fsharp keyword",
+            "function.anonymous keyword",
+            "function.anonymous keyword.symbol.fsharp",
+            "meta.embedded.block variable.language punctuation.definition.variable.php",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other.class",
+            "source.wsd keyword.other.linebegin",
+            "keyword.other.skinparam.keyword",
+            "keyword.other.nim",
+            "markup.deleted.diff",
+            "source.tf support.class.variable",
+            "meta.function.lua keyword.control.lua",
+            "markup.block entity.name.tag",
+            "markup.meta.attribute-list",
+            "source.zig keyword.default",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "foreground": "#e66533"
+         }
+      },
+      {
+         "name": "STRING",
+         "scope": [
+            "string",
+            "punctuation.definition.string",
+            "source.css support.constant",
+            "entity.name.import.go",
+            "markup.raw.texttt",
+            "markup.inserted.diff",
+            "source.scala punctuation.definition.character",
+            "constant.character.literal.scala",
+            "source.tf entity.name"
+         ],
+         "settings": {
+            "foreground": "#49e9a6"
+         }
+      },
+      {
+         "name": "STRINGINTERPOLATED",
+         "scope": [
+            "string.template",
+            "punctuation.definition.string.template",
+            "string.interpolated.python string.quoted.single.python",
+            "string.quoted.double.heredoc",
+            "string.quoted.interpolated.vala",
+            "string.quoted.interpolated.vala punctuation.definition.string",
+            "string.regexp.apacheconf",
+            "markup.inline.raw.string",
+            "markup.inline.raw punctuation.definition.raw",
+            "string.quoted.double.interpolated.crystal",
+            "string.quoted.double.interpolated.crystal punctuation.definition.string",
+            "text.tex markup.raw"
+         ],
+         "settings": {
+            "foreground": "#16b673"
+         }
+      },
+      {
+         "name": "NUMBER",
+         "scope": [
+            "constant.numeric",
+            "constant.language",
+            "punctuation.separator.decimal.period.php",
+            "keyword.operator.null-conditional.cs",
+            "punctuation.separator.question-mark.cs",
+            "constant.integer.apacheconf",
+            "keyword.operator.nullable-type",
+            "constant.language punctuation.definition.variable",
+            "constant.others.fsharp",
+            "keyword.other.unit",
+            "string.quoted.double.skinparam.value",
+            "source.toml constant",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "foreground": "#7060eb"
+         }
+      },
+      {
+         "name": "FUNCTION",
+         "scope": [
+            "variable.function",
+            "support.type.property-name",
+            "entity.name.function",
+            "string.other.link",
+            "markup.link",
+            "support.type.vendored",
+            "support.other.variable",
+            "meta.function-call.generic.python",
+            "meta.method-call.groovy meta.method.groovy",
+            "meta.class.body.groovy meta.method.body.java storage.type.groovy",
+            "punctuation.definition.decorator",
+            "support.function.any-method",
+            "text.tex support.function",
+            "text.tex punctuation.definition.function",
+            "entity.name.section.fsharp entity.name.section.fsharp",
+            "support.variable.class.function",
+            "keyword.control.cucumber.table",
+            "punctuation.decorator",
+            "source.tf support.class"
+         ],
+         "settings": {
+            "foreground": "#16a3b6"
+         }
+      },
+      {
+         "name": "SUPPORT",
+         "scope": [
+            "entity.name",
+            "entity.other",
+            "support.orther.namespace.use.php",
+            "meta.use.php",
+            "support.other.namespace.php",
+            "support.type",
+            "support.class",
+            "punctuation.definition.parameters",
+            "support.function",
+            "support.function.construct",
+            "markup.changed.git_gutter",
+            "markup.underline.link",
+            "markup.underline.link.image",
+            "markup.underline",
+            "meta.symbol.namespace.clojure",
+            "entity.mime-type.apacheconf",
+            "keyword.operator.function.infix",
+            "entity.name.function.infix",
+            "entity.name.function.call.kotlin",
+            "text.tex support.function.verb",
+            "text.tex support.function.texttt",
+            "source.reason constant.language.unit",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "constant.language.unit.fsharp",
+            "source.wsd support.class.preprocessings",
+            "keyword.language.gherkin.feature.scenario",
+            "source.nim keyword.other.common.function",
+            "entity.name.type.namespace",
+            "entity.name.scope-resolution.function.call"
+         ],
+         "settings": {
+            "foreground": "#49d6e9"
+         }
+      },
+      {
+         "name": "MISC",
+         "scope": [
+            "source.js constant.other.object.key.js string.unquoted.label.js",
+            "source.js punctuation.section.embedded",
+            "punctuation.definition.template-expression",
+            "support.class",
+            "storage.type.string.python",
+            "string.interpolated.pug",
+            "support.constant.handlebars",
+            "source.clojure punctuation.section.set",
+            "source.clojure punctuation.section.metadata",
+            "entity.global.clojure",
+            "source.python meta.function-call.python support.type.python",
+            "entity.other.inherited-class.python",
+            "punctuation.definition.interpolation",
+            "punctuation.section.embedded.begin.ruby",
+            "punctuation.section.embedded.end.ruby source.ruby",
+            "support.constant.math",
+            "entity.namespace.r",
+            "meta.method-call.groovy storage.type.groovy",
+            "source.scala entity.name.class.declaration",
+            "constant.character.escape",
+            "support.function.macro.julia",
+            "string.replacement.apacheconf",
+            "storage.modifier.using.vala",
+            "constant.other.haskell",
+            "source.objc entity.name.tag",
+            "string.quoted.other.literal.upper.crystal punctuation.definition.string",
+            "meta.embedded.line.crystal punctuation.section.embedded",
+            "meta.embedded.line.crystal punctuation.section.embedded source.crystal",
+            "punctuation.section.embedded",
+            "punctuation.section.tag",
+            "punctuation.section.embedded source.swift",
+            "variable.other.bracket punctuation.definition.variable",
+            "string.interpolated.dollar punctuation.definition.string",
+            "constant.character.escape punctuation.definition.keyword",
+            "source.ocaml entity.name.class constant.numeric",
+            "source.reason entity.name.class",
+            "keyword.format.specifier.fsharp",
+            "support.module.elm",
+            "meta.embedded.block.php punctuation.definition.variable.php",
+            "source.vala storage.type",
+            "support.variable.class.group",
+            "entity.name.type.class",
+            "source.tf meta.keyword.list",
+            "source.tf meta.keyword.map",
+            "entity.name.class.lua",
+            "markup.substitution"
+         ],
+         "settings": {
+            "foreground": "#49ace9"
+         }
+      },
+      {
+         "name": "INVALID",
+         "scope": [
+            "invalid",
+            "invalid.illegal"
+         ],
+         "settings": {
+            "foreground": "#e3541c"
+         }
+      },
+      {
+         "name": "ITALIC",
+         "scope": [
+            "comment",
+            "storage.modifier",
+            "punctuation.definition.comment",
+            "entity.other",
+            "variable.language",
+            "support.type.vendored",
+            "support.constant.vendored",
+            "markup.quote",
+            "markup.italic",
+            "tag.decorator.js entity.name.tag.js",
+            "tag.decorator.js punctuation.definition.tag.js",
+            "keyword.control.clojure",
+            "source.clojure meta.symbol.dynamic",
+            "keyword.other.this.cs",
+            "keyword.other.base.cs",
+            "variable.other.member.c",
+            "support.type.core.rust",
+            "variable.other.object.property",
+            "variable.other.property",
+            "source.r meta.function.r keyword.control.r",
+            "comment.line.roxygen.r keyword",
+            "comment.line.roxygen.r variable.parameter.r",
+            "keyword.control.inheritance.coffee",
+            "comment.block.documentation.phpdoc.php keyword",
+            "keyword.other.array.phpdoc.php",
+            "storage.type.modifier",
+            "comment.block.javadoc.java keyword",
+            "comment.block.javadoc.java variable.parameter.java",
+            "keyword.operator.documentation.powershell",
+            "storage.type.scala",
+            "variable.parameter.function.language.special",
+            "comment.block.documentation.scala keyword",
+            "comment.block.documentation.scala variable.parameter",
+            "support.function.builtin.go",
+            "constant.other.symbol.hashkey.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.ruby",
+            "source.vala storage.type.generic",
+            "constant.other.table-name",
+            "constant.other.placeholder",
+            "variable.other.field",
+            "entity.alias.import.go",
+            "source.swift keyword.other.declaration-specifier",
+            "support.variable.swift",
+            "keyword.other.capture-specifier",
+            "text.tex support.function.emph",
+            "constant.other.math",
+            "support.function.textit",
+            "entity.name.footnote",
+            "entity.name.function.directive.graphql",
+            "source.graphql support.type.enum",
+            "source.ocaml entity.name.filename",
+            "source.reason entity.name.filename",
+            "abstract.definition.fsharp keyword",
+            "abstract.definition.fsharp entity",
+            "function.anonymous keyword",
+            "entity.name.record.field.accessor.elm",
+            "support.type.primitive",
+            "support.type.builtin",
+            "keyword.type.cs",
+            "storage.type.built-in",
+            "storage.type.primitive",
+            "source.python support.type.python",
+            "storage.type.core.rust",
+            "source.swift support.type",
+            "source.go storage.type",
+            "storage.type.php",
+            "storage.type.function.kotlin",
+            "entity.name.type.kotlin",
+            "support.type.julia",
+            "variable.other.member",
+            "keyword.other.import",
+            "keyword.package",
+            "keyword.import",
+            "source.wsd keyword.control.diagram",
+            "keyword.language.gherkin.feature.step",
+            "source.hlsl storage.type.basic",
+            "source.apex keyword.type",
+            "sharing.modifier",
+            "source.nim storage.type.concrete",
+            "meta.preprocessor.pragma.nim",
+            "storage.type.integral",
+            "entity.name.scope-resolution.function.call",
+            "support.class.builtin",
+            "comment.block.documentation storage.type.class",
+            "source.tf meta.keyword.string",
+            "source.tf meta.keyword.number",
+            "source.scala entity.name.class",
+            "meta.import keyword.control",
+            "keyword.control.export",
+            "source.vue meta.directive punctuation.separator.key-value",
+            "keyword.local.lua",
+            "markup.mark.constrained markup.mark",
+            "markup.block.open",
+            "entity.name.type.primitive",
+            "entity.name.type.numeric",
+            "source.zig keyword.type",
+            "source.zig keyword.storage",
+            "source.zig keyword.structure"
+         ],
+         "settings": {
+            "fontStyle": "italic"
+         }
+      },
+      {
+         "name": "BOLD",
+         "scope": [
+            "keyword",
+            "keyword.control",
+            "keyword.operator",
+            "keyword.other.template",
+            "keyword.other.substitution",
+            "storage.type.function.arrow",
+            "constant.other.color",
+            "punctuation.accessor",
+            "entity.name.section",
+            "markdown.heading",
+            "markup.inline.raw punctuation.definition.raw",
+            "markup.heading",
+            "storage.type.function.pug",
+            "storage.type.function.python",
+            "storage.type.annotation",
+            "punctuation.bracket.angle",
+            "keyword.other.new",
+            "storage.type.generic.wildcard",
+            "source.go keyword.operator",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "variable.parameter",
+            "support.function.builtin.rust",
+            "storage.type.function.coffee",
+            "entity.name.variable.parameter",
+            "punctuation.separator.hash.cs",
+            "constant.other.symbol.ruby punctuation.definition.constant.ruby",
+            "constant.other.symbol.hashkey.ruby punctuation.definition.constant.ruby",
+            "meta.function.parameters variable.other",
+            "entity.name.type.annotation.kotlin",
+            "storage.type.objc",
+            "parameter.variable.function",
+            "markup punctuation.definition",
+            "punctuation.section.directive",
+            "punctuation.definition.preprocessor",
+            "source.ruby punctuation.definition.variable",
+            "support.function.textbf",
+            "source.graphql support.type.builtin",
+            "source.ocaml variable.interpolation string",
+            "entity.name.function.definition.special.constructor",
+            "entity.name.function.definition.special.member.destructor.",
+            "meta.function.parameters variable punctuation.definition.variable.php",
+            "source.wsd keyword.other.activity",
+            "keyword.control.class.ruby",
+            "keyword.control.def.ruby",
+            "keyword.function.go",
+            "keyword.other.fn.rust",
+            "markup.other.anchor",
+            "markup.list.bullet",
+            "markup.list punctuation.definition",
+            "keyword.control.default",
+            "punctuation.section",
+            "punctuation.separator",
+            "punctuation.terminator",
+            "markup.bold.markdown",
+            "source.zig storage.type.function"
+         ],
+         "settings": {
+            "fontStyle": "bold"
+         }
+      },
+      {
+         "name": "BOLD-ITALIC",
+         "scope": [
+            "markup.quote markup.bold",
+            "text.html punctuation.section.embedded",
+            "variable.other.c",
+            "storage.modifier.lifetime.rust",
+            "entity.name.lifetime.rust",
+            "source.rust meta.attribute.rust",
+            "meta.attribute.id entity.other.attribute-name",
+            "source.ocaml punctuation.definition.tag emphasis",
+            "source.tf entity.name",
+            "markup.quote punctuation.definition",
+            "markup.fenced_code punctuation.definition",
+            "fenced_code.block.language"
+         ],
+         "settings": {
+            "fontStyle": "bold italic"
+         }
+      },
+      {
+         "name": "NORMAL",
+         "scope": [
+            "keyword.begin.tag.ejs",
+            "source.python meta.function.decorator.python support.type.python",
+            "source.cs keyword.other",
+            "keyword.other.var.cs",
+            "source.go keyword",
+            "storage.modifier.static.rust",
+            "variable.parameter.r",
+            "variable.parameter.handlebars",
+            "storage.modifier.import",
+            "storage.modifier.package",
+            "meta.class.identifier storage.modifier",
+            "keyword.operator.other.powershell",
+            "source.css variable.parameter",
+            "string.interpolated variable.parameter",
+            "source.apacheconf keyword",
+            "keyword.other.julia",
+            "storage.modifier.using.vala",
+            "source.objc keyword.other.property.attribute",
+            "source.sql keyword.other",
+            "keyword.other.using.vala",
+            "keyword.operator.function.infix",
+            "keyword.control.directive",
+            "keyword.other.rust",
+            "keyword.other.declaration-specifier.swift",
+            "entity.name.function.swift",
+            "keyword.control.class",
+            "keyword.control.def",
+            "punctuation.definition.variable",
+            "entity.name.section.latex",
+            "source.ocaml keyword markup.underline",
+            "source.ocaml constant.language constant.numeric entity.other.attribute-name.id.css",
+            "source.reason entity.other.attribute-name constant.language constant.numeric",
+            "keyword.format.specifier.fsharp",
+            "entity.name.section.fsharp",
+            "binding.fsharp keyword",
+            "binding.fsharp keyword.symbol",
+            "record.fsharp keyword",
+            "keyword.symbol.fsharp",
+            "entity.name.section.fsharp keyword",
+            "namespace.open.fsharp keyword",
+            "namespace.open.fsharp entity",
+            "storage.type",
+            "source.cpp keyword.other",
+            "source.c keyword.other",
+            "keyword.other.unit",
+            "storage.modifier.array.bracket",
+            "meta.import.haskell keyword",
+            "keyword.declaration.dart",
+            "source.wsd keyword.other",
+            "keyword.other.skinparam",
+            "source.css keyword.control",
+            "source.css keyword.operator",
+            "keyword.language.gherkin.feature.scenario",
+            "keyword.control.cucumber.table",
+            "source.toml entity.other.attribute-name",
+            "source.toml keyword",
+            "keyword.other.nim",
+            "source.nim keyword.other.common.function",
+            "source.nim keyword.other",
+            "source.scala keyword.declaration",
+            "source.scala entity.name.class.declaration",
+            "keyword.control.lua",
+            "source.css punctuation.section",
+            "punctuation.section.embedded",
+            "source.c punctuation.section",
+            "source.cpp punctuation.section",
+            "source.java punctuation.section",
+            "source.php punctuation.section",
+            "source.powershell punctuation.section",
+            "source.r punctuation.section",
+            "source.ruby punctuation.section",
+            "source.swift punctuation.section",
+            "source.objc punctuation.section",
+            "source.zig keyword.constant.bool",
+            "source.zig keyword.default",
+            "source.zig keyword.statement",
+            "source.zig keyword.constant.default"
+         ],
+         "settings": {
+            "fontStyle": ""
+         }
+      },
+      {
+         "name": "STRIKETHROUGH",
+         "scope": [
+            "markup.strikethrough"
+         ],
+         "settings": {
+            "fontStyle": "strikethrough"
+         }
+      }
+   ]
+}

assets/themes/src/vscode/nord/LICENSE 🔗

@@ -0,0 +1,21 @@
+MIT License (MIT)
+
+Copyright (c) 2016-present Sven Greb <development@svengreb.de> (https://www.svengreb.de)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vscode/nord/nord.json 🔗

@@ -0,0 +1,1368 @@
+{
+    "name": "Nord",
+    "type": "dark",
+    "semanticHighlighting": true,
+    "colors": {
+        "focusBorder": "#3b4252",
+        "foreground": "#d8dee9",
+        "activityBar.background": "#2e3440",
+        "activityBar.dropBackground": "#3b4252",
+        "activityBar.foreground": "#d8dee9",
+        "activityBar.activeBorder": "#88c0d0",
+        "activityBar.activeBackground": "#3b4252",
+        "activityBarBadge.background": "#88c0d0",
+        "activityBarBadge.foreground": "#2e3440",
+        "badge.foreground": "#2e3440",
+        "badge.background": "#88c0d0",
+        "button.background": "#88c0d0ee",
+        "button.foreground": "#2e3440",
+        "button.hoverBackground": "#88c0d0",
+        "button.secondaryBackground": "#434c5e",
+        "button.secondaryForeground": "#d8dee9",
+        "button.secondaryHoverBackground": "#4c566a",
+        "charts.red": "#bf616a",
+        "charts.blue": "#81a1c1",
+        "charts.yellow": "#ebcb8b",
+        "charts.orange": "#d08770",
+        "charts.green": "#a3be8c",
+        "charts.purple": "#b48ead",
+        "charts.foreground": "#d8dee9",
+        "charts.lines": "#88c0d0",
+        "debugConsole.infoForeground": "#88c0d0",
+        "debugConsole.warningForeground": "#ebcb8b",
+        "debugConsole.errorForeground": "#bf616a",
+        "debugConsole.sourceForeground": "#616e88",
+        "debugConsoleInputIcon.foreground": "#81a1c1",
+        "debugExceptionWidget.background": "#4c566a",
+        "debugExceptionWidget.border": "#2e3440",
+        "debugToolBar.background": "#3b4252",
+        "descriptionForeground": "#d8dee9e6",
+        "diffEditor.insertedTextBackground": "#81a1c133",
+        "diffEditor.removedTextBackground": "#bf616a4d",
+        "dropdown.background": "#3b4252",
+        "dropdown.border": "#3b4252",
+        "dropdown.foreground": "#d8dee9",
+        "editorActiveLineNumber.foreground": "#d8dee9cc",
+        "editorCursor.foreground": "#d8dee9",
+        "editorHint.border": "#ebcb8b00",
+        "editorHint.foreground": "#ebcb8b",
+        "editorIndentGuide.background": "#434c5eb3",
+        "editorIndentGuide.activeBackground": "#4c566a",
+        "editorInlayHint.background": "#434c5e",
+        "editorInlayHint.foreground": "#d8dee9",
+        "editorLineNumber.foreground": "#4c566a",
+        "editorLineNumber.activeForeground": "#d8dee9",
+        "editorWhitespace.foreground": "#4c566ab3",
+        "editorWidget.background": "#2e3440",
+        "editorWidget.border": "#3b4252",
+        "editor.background": "#2e3440",
+        "editor.foreground": "#d8dee9",
+        "editor.hoverHighlightBackground": "#3b4252",
+        "editor.findMatchBackground": "#88c0d066",
+        "editor.findMatchHighlightBackground": "#88c0d033",
+        "editor.findRangeHighlightBackground": "#88c0d033",
+        "editor.lineHighlightBackground": "#3b4252",
+        "editor.lineHighlightBorder": "#3b4252",
+        "editor.inactiveSelectionBackground": "#434c5ecc",
+        "editor.inlineValuesBackground": "#4c566a",
+        "editor.inlineValuesForeground": "#eceff4",
+        "editor.selectionBackground": "#434c5ecc",
+        "editor.selectionHighlightBackground": "#434c5ecc",
+        "editor.rangeHighlightBackground": "#434c5e52",
+        "editor.wordHighlightBackground": "#81a1c166",
+        "editor.wordHighlightStrongBackground": "#81a1c199",
+        "editor.stackFrameHighlightBackground": "#5e81ac",
+        "editor.focusedStackFrameHighlightBackground": "#5e81ac",
+        "editorError.foreground": "#bf616a",
+        "editorError.border": "#bf616a00",
+        "editorWarning.foreground": "#ebcb8b",
+        "editorWarning.border": "#ebcb8b00",
+        "editorBracketMatch.background": "#2e344000",
+        "editorBracketMatch.border": "#88c0d0",
+        "editorBracketHighlight.foreground1": "#8fbcbb",
+        "editorBracketHighlight.foreground2": "#88c0d0",
+        "editorBracketHighlight.foreground3": "#81a1c1",
+        "editorBracketHighlight.foreground4": "#5e81ac",
+        "editorBracketHighlight.foreground5": "#8fbcbb",
+        "editorBracketHighlight.foreground6": "#88c0d0",
+        "editorBracketHighlight.unexpectedBracket.foreground": "#bf616a",
+        "editorCodeLens.foreground": "#4c566a",
+        "editorGroup.background": "#2e3440",
+        "editorGroup.border": "#3b425201",
+        "editorGroup.dropBackground": "#3b425299",
+        "editorGroupHeader.border": "#3b425200",
+        "editorGroupHeader.noTabsBackground": "#2e3440",
+        "editorGroupHeader.tabsBackground": "#2e3440",
+        "editorGroupHeader.tabsBorder": "#3b425200",
+        "editorGutter.background": "#2e3440",
+        "editorGutter.modifiedBackground": "#ebcb8b",
+        "editorGutter.addedBackground": "#a3be8c",
+        "editorGutter.deletedBackground": "#bf616a",
+        "editorHoverWidget.background": "#3b4252",
+        "editorHoverWidget.border": "#3b4252",
+        "editorLink.activeForeground": "#88c0d0",
+        "editorMarkerNavigation.background": "#5e81acc0",
+        "editorMarkerNavigationError.background": "#bf616ac0",
+        "editorMarkerNavigationWarning.background": "#ebcb8bc0",
+        "editorOverviewRuler.border": "#3b4252",
+        "editorOverviewRuler.currentContentForeground": "#3b4252",
+        "editorOverviewRuler.incomingContentForeground": "#3b4252",
+        "editorOverviewRuler.findMatchForeground": "#88c0d066",
+        "editorOverviewRuler.rangeHighlightForeground": "#88c0d066",
+        "editorOverviewRuler.selectionHighlightForeground": "#88c0d066",
+        "editorOverviewRuler.wordHighlightForeground": "#88c0d066",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#88c0d066",
+        "editorOverviewRuler.modifiedForeground": "#ebcb8b",
+        "editorOverviewRuler.addedForeground": "#a3be8c",
+        "editorOverviewRuler.deletedForeground": "#bf616a",
+        "editorOverviewRuler.errorForeground": "#bf616a",
+        "editorOverviewRuler.warningForeground": "#ebcb8b",
+        "editorOverviewRuler.infoForeground": "#81a1c1",
+        "editorRuler.foreground": "#434c5e",
+        "editorSuggestWidget.background": "#2e3440",
+        "editorSuggestWidget.border": "#3b4252",
+        "editorSuggestWidget.foreground": "#d8dee9",
+        "editorSuggestWidget.focusHighlightForeground": "#88c0d0",
+        "editorSuggestWidget.highlightForeground": "#88c0d0",
+        "editorSuggestWidget.selectedBackground": "#434c5e",
+        "editorSuggestWidget.selectedForeground": "#d8dee9",
+        "extensionButton.prominentForeground": "#d8dee9",
+        "extensionButton.prominentBackground": "#434c5e",
+        "extensionButton.prominentHoverBackground": "#4c566a",
+        "errorForeground": "#bf616a",
+        "gitDecoration.modifiedResourceForeground": "#ebcb8b",
+        "gitDecoration.deletedResourceForeground": "#bf616a",
+        "gitDecoration.untrackedResourceForeground": "#a3be8c",
+        "gitDecoration.ignoredResourceForeground": "#d8dee966",
+        "gitDecoration.conflictingResourceForeground": "#5e81ac",
+        "gitDecoration.submoduleResourceForeground": "#8fbcbb",
+        "gitDecoration.stageDeletedResourceForeground": "#bf616a",
+        "gitDecoration.stageModifiedResourceForeground": "#ebcb8b",
+        "input.background": "#3b4252",
+        "input.foreground": "#d8dee9",
+        "input.placeholderForeground": "#d8dee999",
+        "input.border": "#3b4252",
+        "inputOption.activeBackground": "#5e81ac",
+        "inputOption.activeBorder": "#5e81ac",
+        "inputOption.activeForeground": "#eceff4",
+        "inputValidation.errorBackground": "#bf616a",
+        "inputValidation.errorBorder": "#bf616a",
+        "inputValidation.infoBackground": "#81a1c1",
+        "inputValidation.infoBorder": "#81a1c1",
+        "inputValidation.warningBackground": "#d08770",
+        "inputValidation.warningBorder": "#d08770",
+        "keybindingLabel.background": "#4c566a",
+        "keybindingLabel.border": "#4c566a",
+        "keybindingLabel.bottomBorder": "#4c566a",
+        "keybindingLabel.foreground": "#d8dee9",
+        "list.activeSelectionBackground": "#88c0d0",
+        "list.activeSelectionForeground": "#2e3440",
+        "list.inactiveSelectionBackground": "#434c5e",
+        "list.inactiveSelectionForeground": "#d8dee9",
+        "list.inactiveFocusBackground": "#434c5ecc",
+        "list.hoverForeground": "#eceff4",
+        "list.focusForeground": "#d8dee9",
+        "list.focusBackground": "#88c0d099",
+        "list.focusHighlightForeground": "#eceff4",
+        "list.hoverBackground": "#3b4252",
+        "list.dropBackground": "#88c0d099",
+        "list.highlightForeground": "#88c0d0",
+        "list.errorForeground": "#bf616a",
+        "list.warningForeground": "#ebcb8b",
+        "merge.currentHeaderBackground": "#81a1c166",
+        "merge.currentContentBackground": "#81a1c14d",
+        "merge.incomingHeaderBackground": "#8fbcbb66",
+        "merge.incomingContentBackground": "#8fbcbb4d",
+        "merge.border": "#3b425200",
+        "minimap.background": "#2e3440",
+        "minimap.errorHighlight": "#bf616acc",
+        "minimap.findMatchHighlight": "#88c0d0",
+        "minimap.selectionHighlight": "#88c0d0cc",
+        "minimap.warningHighlight": "#ebcb8bcc",
+        "minimapGutter.addedBackground": "#a3be8c",
+        "minimapGutter.deletedBackground": "#bf616a",
+        "minimapGutter.modifiedBackground": "#ebcb8b",
+        "minimapSlider.activeBackground": "#434c5eaa",
+        "minimapSlider.background": "#434c5e99",
+        "minimapSlider.hoverBackground": "#434c5eaa",
+
+        "notification.background": "#3b4252",
+        "notification.buttonBackground": "#434c5e",
+        "notification.buttonForeground": "#d8dee9",
+        "notification.buttonHoverBackground": "#4c566a",
+        "notification.errorBackground": "#bf616a",
+        "notification.errorForeground": "#2e3440",
+        "notification.foreground": "#d8dee9",
+        "notification.infoBackground": "#88c0d0",
+        "notification.infoForeground": "#2e3440",
+        "notification.warningBackground": "#ebcb8b",
+        "notification.warningForeground": "#2e3440",
+
+        "notificationCenter.border": "#3b425200",
+        "notificationCenterHeader.background": "#2e3440",
+        "notificationCenterHeader.foreground": "#88c0d0",
+        "notificationLink.foreground": "#88c0d0",
+        "notifications.background": "#3b4252",
+        "notifications.border": "#2e3440",
+        "notifications.foreground": "#d8dee9",
+        "notificationToast.border": "#3b425200",
+
+        "panel.background": "#2e3440",
+        "panel.border": "#3b4252",
+        "panelTitle.activeBorder": "#88c0d000",
+        "panelTitle.activeForeground": "#88c0d0",
+        "panelTitle.inactiveForeground": "#d8dee9",
+        "peekView.border": "#4c566a",
+        "peekViewEditor.background": "#2e3440",
+        "peekViewEditorGutter.background": "#2e3440",
+        "peekViewEditor.matchHighlightBackground": "#88c0d04d",
+        "peekViewResult.background": "#2e3440",
+        "peekViewResult.fileForeground": "#88c0d0",
+        "peekViewResult.lineForeground": "#d8dee966",
+        "peekViewResult.matchHighlightBackground": "#88c0d0cc",
+        "peekViewResult.selectionBackground": "#434c5e",
+        "peekViewResult.selectionForeground": "#d8dee9",
+        "peekViewTitle.background": "#3b4252",
+        "peekViewTitleDescription.foreground": "#d8dee9",
+        "peekViewTitleLabel.foreground": "#88c0d0",
+        "pickerGroup.border": "#3b4252",
+        "pickerGroup.foreground": "#88c0d0",
+        "progressBar.background": "#88c0d0",
+        "quickInputList.focusBackground": "#88c0d0",
+        "quickInputList.focusForeground": "#2e3440",
+        "sash.hoverBorder": "#88c0d0",
+        "scrollbar.shadow": "#00000066",
+        "scrollbarSlider.activeBackground": "#434c5eaa",
+        "scrollbarSlider.background": "#434c5e99",
+        "scrollbarSlider.hoverBackground": "#434c5eaa",
+        "selection.background": "#88c0d099",
+        "sideBar.background": "#2e3440",
+        "sideBar.foreground": "#d8dee9",
+        "sideBar.border": "#3b4252",
+        "sideBarSectionHeader.background": "#3b4252",
+        "sideBarSectionHeader.foreground": "#d8dee9",
+        "sideBarTitle.foreground": "#d8dee9",
+        "statusBar.background": "#3b4252",
+        "statusBar.debuggingBackground": "#5e81ac",
+        "statusBar.debuggingForeground": "#d8dee9",
+        "statusBar.noFolderForeground": "#d8dee9",
+        "statusBar.noFolderBackground": "#3b4252",
+        "statusBar.foreground": "#d8dee9",
+        "statusBarItem.activeBackground": "#4c566a",
+        "statusBarItem.hoverBackground": "#434c5e",
+        "statusBarItem.prominentBackground": "#3b4252",
+        "statusBarItem.prominentHoverBackground": "#434c5e",
+        "statusBarItem.errorBackground": "#3b4252",
+        "statusBarItem.errorForeground": "#bf616a",
+        "statusBarItem.warningBackground": "#ebcb8b",
+        "statusBarItem.warningForeground": "#2e3440",
+        "statusBar.border": "#3b425200",
+        "tab.activeBackground": "#3b4252",
+        "tab.activeForeground": "#d8dee9",
+        "tab.border": "#3b425200",
+        "tab.activeBorder": "#88c0d000",
+        "tab.unfocusedActiveBorder": "#88c0d000",
+        "tab.inactiveBackground": "#2e3440",
+        "tab.inactiveForeground": "#d8dee966",
+        "tab.unfocusedActiveForeground": "#d8dee999",
+        "tab.unfocusedInactiveForeground": "#d8dee966",
+        "tab.hoverBackground": "#3b4252cc",
+        "tab.unfocusedHoverBackground": "#3b4252b3",
+        "tab.hoverBorder": "#88c0d000",
+        "tab.unfocusedHoverBorder": "#88c0d000",
+        "tab.activeBorderTop": "#88c0d000",
+        "tab.unfocusedActiveBorderTop": "#88c0d000",
+        "tab.lastPinnedBorder": "#4c566a",
+        "terminal.background": "#2e3440",
+        "terminal.foreground": "#d8dee9",
+        "terminal.ansiBlack": "#3b4252",
+        "terminal.ansiRed": "#bf616a",
+        "terminal.ansiGreen": "#a3be8c",
+        "terminal.ansiYellow": "#ebcb8b",
+        "terminal.ansiBlue": "#81a1c1",
+        "terminal.ansiMagenta": "#b48ead",
+        "terminal.ansiCyan": "#88c0d0",
+        "terminal.ansiWhite": "#e5e9f0",
+        "terminal.ansiBrightBlack": "#4c566a",
+        "terminal.ansiBrightRed": "#bf616a",
+        "terminal.ansiBrightGreen": "#a3be8c",
+        "terminal.ansiBrightYellow": "#ebcb8b",
+        "terminal.ansiBrightBlue": "#81a1c1",
+        "terminal.ansiBrightMagenta": "#b48ead",
+        "terminal.ansiBrightCyan": "#8fbcbb",
+        "terminal.ansiBrightWhite": "#eceff4",
+        "terminal.tab.activeBorder": "#88c0d0",
+        "textBlockQuote.background": "#3b4252",
+        "textBlockQuote.border": "#81a1c1",
+        "textCodeBlock.background": "#4c566a",
+        "textLink.activeForeground": "#88c0d0",
+        "textLink.foreground": "#88c0d0",
+        "textPreformat.foreground": "#8fbcbb",
+        "textSeparator.foreground": "#eceff4",
+        "titleBar.activeBackground": "#2e3440",
+        "titleBar.activeForeground": "#d8dee9",
+        "titleBar.border": "#2e344000",
+        "titleBar.inactiveBackground": "#2e3440",
+        "titleBar.inactiveForeground": "#d8dee966",
+        "tree.indentGuidesStroke": "#616e88",
+        "walkThrough.embeddedEditorBackground": "#2e3440",
+        "welcomePage.buttonBackground": "#434c5e",
+        "welcomePage.buttonHoverBackground": "#4c566a",
+        "widget.shadow": "#00000066"
+    },
+    "tokenColors": [
+        {
+            "settings": {
+                "foreground": "#d8dee9ff",
+                "background": "#2e3440ff"
+            }
+        },
+        {
+            "scope": "emphasis",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "strong",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Comment",
+            "scope": "comment",
+            "settings": {
+                "foreground": "#616E88"
+            }
+        },
+        {
+            "name": "Constant Character",
+            "scope": "constant.character",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "Constant Character Escape",
+            "scope": "constant.character.escape",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "Constant Language",
+            "scope": "constant.language",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Constant Numeric",
+            "scope": "constant.numeric",
+            "settings": {
+                "foreground": "#B48EAD"
+            }
+        },
+        {
+            "name": "Constant Regexp",
+            "scope": "constant.regexp",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "Entity Name Class/Type",
+            "scope": ["entity.name.class", "entity.name.type.class"],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "Entity Name Function",
+            "scope": "entity.name.function",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "Entity Name Tag",
+            "scope": "entity.name.tag",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Entity Other Attribute Name",
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "Entity Other Inherited Class",
+            "scope": "entity.other.inherited-class",
+            "settings": {
+                "fontStyle": "bold",
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "Invalid Deprecated",
+            "scope": "invalid.deprecated",
+            "settings": {
+                "foreground": "#D8DEE9",
+                "background": "#EBCB8B"
+            }
+        },
+        {
+            "name": "Invalid Illegal",
+            "scope": "invalid.illegal",
+            "settings": {
+                "foreground": "#D8DEE9",
+                "background": "#BF616A"
+            }
+        },
+        {
+            "name": "Keyword",
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Keyword Operator",
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Keyword Other New",
+            "scope": "keyword.other.new",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Markup Bold",
+            "scope": "markup.bold",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Markup Changed",
+            "scope": "markup.changed",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "Markup Deleted",
+            "scope": "markup.deleted",
+            "settings": {
+                "foreground": "#BF616A"
+            }
+        },
+        {
+            "name": "Markup Inserted",
+            "scope": "markup.inserted",
+            "settings": {
+                "foreground": "#A3BE8C"
+            }
+        },
+        {
+            "name": "Meta Preprocessor",
+            "scope": "meta.preprocessor",
+            "settings": {
+                "foreground": "#5E81AC"
+            }
+        },
+        {
+            "name": "Punctuation",
+            "scope": "punctuation",
+            "settings": {
+                "foreground": "#ECEFF4"
+            }
+        },
+        {
+            "name": "Punctuation Definition Parameters",
+            "scope": [
+                "punctuation.definition.method-parameters",
+                "punctuation.definition.function-parameters",
+                "punctuation.definition.parameters"
+            ],
+            "settings": {
+                "foreground": "#ECEFF4"
+            }
+        },
+        {
+            "name": "Punctuation Definition Tag",
+            "scope": "punctuation.definition.tag",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Punctuation Definition Comment",
+            "scope": [
+                "punctuation.definition.comment",
+                "punctuation.end.definition.comment",
+                "punctuation.start.definition.comment"
+            ],
+            "settings": {
+                "foreground": "#616E88"
+            }
+        },
+        {
+            "name": "Punctuation Section",
+            "scope": "punctuation.section",
+            "settings": {
+                "foreground": "#ECEFF4"
+            }
+        },
+        {
+            "name": "Punctuation Section Embedded",
+            "scope": ["punctuation.section.embedded.begin", "punctuation.section.embedded.end"],
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Punctuation Terminator",
+            "scope": "punctuation.terminator",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Punctuation Variable",
+            "scope": "punctuation.definition.variable",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Storage",
+            "scope": "storage",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "String",
+            "scope": "string",
+            "settings": {
+                "foreground": "#A3BE8C"
+            }
+        },
+        {
+            "name": "String Regexp",
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "Support Class",
+            "scope": "support.class",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "Support Constant",
+            "scope": "support.constant",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Support Function",
+            "scope": "support.function",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "Support Function Construct",
+            "scope": "support.function.construct",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Support Type",
+            "scope": "support.type",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "Support Type Exception",
+            "scope": "support.type.exception",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "Token Debug",
+            "scope": "token.debug-token",
+            "settings": {
+                "foreground": "#b48ead"
+            }
+        },
+        {
+            "name": "Token Error",
+            "scope": "token.error-token",
+            "settings": {
+                "foreground": "#bf616a"
+            }
+        },
+        {
+            "name": "Token Info",
+            "scope": "token.info-token",
+            "settings": {
+                "foreground": "#88c0d0"
+            }
+        },
+        {
+            "name": "Token Warning",
+            "scope": "token.warn-token",
+            "settings": {
+                "foreground": "#ebcb8b"
+            }
+        },
+        {
+            "name": "Variable",
+            "scope": "variable.other",
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "Variable Language",
+            "scope": "variable.language",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "Variable Parameter",
+            "scope": "variable.parameter",
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[C/CPP] Punctuation Separator Pointer-Access",
+            "scope": "punctuation.separator.pointer-access.c",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[C/CPP] Meta Preprocessor Include",
+            "scope": [
+                "source.c meta.preprocessor.include",
+                "source.c string.quoted.other.lt-gt.include"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[C/CPP] Conditional Directive",
+            "scope": [
+                "source.cpp keyword.control.directive.conditional",
+                "source.cpp punctuation.definition.directive",
+                "source.c keyword.control.directive.conditional",
+                "source.c punctuation.definition.directive"
+            ],
+            "settings": {
+                "foreground": "#5E81AC",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "[CSS] Constant Other Color RGB Value",
+            "scope": "source.css constant.other.color.rgb-value",
+            "settings": {
+                "foreground": "#B48EAD"
+            }
+        },
+        {
+            "name": "[CSS](Function) Meta Property-Value",
+            "scope": "source.css meta.property-value",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[CSS] Media Queries",
+            "scope": [
+                "source.css keyword.control.at-rule.media",
+                "source.css keyword.control.at-rule.media punctuation.definition.keyword"
+            ],
+            "settings": {
+                "foreground": "#D08770"
+            }
+        },
+        {
+            "name": "[CSS] Punctuation Definition Keyword",
+            "scope": "source.css punctuation.definition.keyword",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[CSS] Support Type Property Name",
+            "scope": "source.css support.type.property-name",
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[diff] Meta Range Context",
+            "scope": "source.diff meta.diff.range.context",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[diff] Meta Header From-File",
+            "scope": "source.diff meta.diff.header.from-file",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[diff] Punctuation Definition From-File",
+            "scope": "source.diff punctuation.definition.from-file",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[diff] Punctuation Definition Range",
+            "scope": "source.diff punctuation.definition.range",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[diff] Punctuation Definition Separator",
+            "scope": "source.diff punctuation.definition.separator",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Elixir](JakeBecker.elixir-ls) module names",
+            "scope": "entity.name.type.module.elixir",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Elixir](JakeBecker.elixir-ls) module attributes",
+            "scope": "variable.other.readwrite.module.elixir",
+            "settings": {
+                "foreground": "#D8DEE9",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "[Elixir](JakeBecker.elixir-ls) atoms",
+            "scope": "constant.other.symbol.elixir",
+            "settings": {
+                "foreground": "#D8DEE9",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "[Elixir](JakeBecker.elixir-ls) modules",
+            "scope": "variable.other.constant.elixir",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Go] String Format Placeholder",
+            "scope": "source.go constant.other.placeholder.go",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Comment Block Documentation HTML Entities",
+            "scope": "source.java comment.block.documentation.javadoc punctuation.definition.entity.html",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Constant Other",
+            "scope": "source.java constant.other",
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Keyword Other Documentation",
+            "scope": "source.java keyword.other.documentation",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Keyword Other Documentation Author",
+            "scope": "source.java keyword.other.documentation.author.javadoc",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Keyword Other Documentation Directive/Custom",
+            "scope": [
+                "source.java keyword.other.documentation.directive",
+                "source.java keyword.other.documentation.custom"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Keyword Other Documentation See",
+            "scope": "source.java keyword.other.documentation.see.javadoc",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java] Meta Method-Call",
+            "scope": "source.java meta.method-call meta.method",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Meta Tag Template Link",
+            "scope": [
+                "source.java meta.tag.template.link.javadoc",
+                "source.java string.other.link.title.javadoc"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Meta Tag Template Value",
+            "scope": "source.java meta.tag.template.value.javadoc",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Punctuation Definition Keyword",
+            "scope": "source.java punctuation.definition.keyword.javadoc",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java](JavaDoc) Punctuation Definition Tag",
+            "scope": [
+                "source.java punctuation.definition.tag.begin.javadoc",
+                "source.java punctuation.definition.tag.end.javadoc"
+            ],
+            "settings": {
+                "foreground": "#616E88"
+            }
+        },
+        {
+            "name": "[Java] Storage Modifier Import",
+            "scope": "source.java storage.modifier.import",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java] Storage Modifier Package",
+            "scope": "source.java storage.modifier.package",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java] Storage Type",
+            "scope": "source.java storage.type",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java] Storage Type Annotation",
+            "scope": "source.java storage.type.annotation",
+            "settings": {
+                "foreground": "#D08770"
+            }
+        },
+        {
+            "name": "[Java] Storage Type Generic",
+            "scope": "source.java storage.type.generic",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Java] Storage Type Primitive",
+            "scope": "source.java storage.type.primitive",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[JavaScript] Decorator",
+            "scope": [
+                "source.js punctuation.decorator",
+                "source.js meta.decorator variable.other.readwrite",
+                "source.js meta.decorator entity.name.function"
+            ],
+            "settings": {
+                "foreground": "#D08770"
+            }
+        },
+        {
+            "name": "[JavaScript] Meta Object-Literal Key",
+            "scope": "source.js meta.object-literal.key",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[JavaScript](JSDoc) Storage Type Class",
+            "scope": "source.js storage.type.class.jsdoc",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[JavaScript] String Template Literals Punctuation",
+            "scope": [
+                "source.js string.quoted.template punctuation.quasi.element.begin",
+                "source.js string.quoted.template punctuation.quasi.element.end",
+                "source.js string.template punctuation.definition.template-expression"
+            ],
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[JavaScript] Interpolated String Template Punctuation Functions",
+            "scope": "source.js string.quoted.template meta.method-call.with-arguments",
+            "settings": {
+                "foreground": "#ECEFF4"
+            }
+        },
+        {
+            "name": "[JavaScript] String Template Literal Variable",
+            "scope": [
+                "source.js string.template meta.template.expression support.variable.property",
+                "source.js string.template meta.template.expression variable.other.object"
+            ],
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[JavaScript] Support Type Primitive",
+            "scope": "source.js support.type.primitive",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[JavaScript] Variable Other Object",
+            "scope": "source.js variable.other.object",
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[JavaScript] Variable Other Read-Write Alias",
+            "scope": "source.js variable.other.readwrite.alias",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[JavaScript] Parentheses in Template Strings",
+            "scope": [
+                "source.js meta.embedded.line meta.brace.square",
+                "source.js meta.embedded.line meta.brace.round",
+                "source.js string.quoted.template meta.brace.square",
+                "source.js string.quoted.template meta.brace.round"
+            ],
+            "settings": {
+                "foreground": "#ECEFF4"
+            }
+        },
+        {
+            "name": "[HTML] Constant Character Entity",
+            "scope": "text.html.basic constant.character.entity.html",
+            "settings": {
+                "foreground": "#EBCB8B"
+            }
+        },
+        {
+            "name": "[HTML] Constant Other Inline-Data",
+            "scope": "text.html.basic constant.other.inline-data",
+            "settings": {
+                "foreground": "#D08770",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "[HTML] Meta Tag SGML Doctype",
+            "scope": "text.html.basic meta.tag.sgml.doctype",
+            "settings": {
+                "foreground": "#5E81AC"
+            }
+        },
+        {
+            "name": "[HTML] Punctuation Definition Entity",
+            "scope": "text.html.basic punctuation.definition.entity",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[INI] Entity Name Section Group-Title",
+            "scope": "source.properties entity.name.section.group-title.ini",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[INI] Punctuation Separator Key-Value",
+            "scope": "source.properties punctuation.separator.key-value.ini",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Fenced Code Block",
+            "scope": [
+                "text.html.markdown markup.fenced_code.block",
+                "text.html.markdown markup.fenced_code.block punctuation.definition"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Heading",
+            "scope": "markup.heading",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Inline",
+            "scope": [
+                "text.html.markdown markup.inline.raw",
+                "text.html.markdown markup.inline.raw punctuation.definition.raw"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Italic",
+            "scope": "text.html.markdown markup.italic",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Link",
+            "scope": "text.html.markdown markup.underline.link",
+            "settings": {
+                "fontStyle": "underline"
+            }
+        },
+        {
+            "name": "[Markdown] Markup List Numbered/Unnumbered",
+            "scope": "text.html.markdown beginning.punctuation.definition.list",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Quote Punctuation Definition",
+            "scope": "text.html.markdown beginning.punctuation.definition.quote",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Quote Punctuation Definition",
+            "scope": "text.html.markdown markup.quote",
+            "settings": {
+                "foreground": "#616E88"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Math Constant",
+            "scope": "text.html.markdown constant.character.math.tex",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Math Definition Marker",
+            "scope": [
+                "text.html.markdown punctuation.definition.math.begin",
+                "text.html.markdown punctuation.definition.math.end"
+            ],
+            "settings": {
+                "foreground": "#5E81AC"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Math Function Definition Marker",
+            "scope": "text.html.markdown punctuation.definition.function.math.tex",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Markdown] Markup Math Operator",
+            "scope": "text.html.markdown punctuation.math.operator.latex",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Markdown] Punctuation Definition Heading",
+            "scope": "text.html.markdown punctuation.definition.heading",
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Markdown] Punctuation Definition Constant/String",
+            "scope": [
+                "text.html.markdown punctuation.definition.constant",
+                "text.html.markdown punctuation.definition.string"
+            ],
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[Markdown] String Other Link Description/Title",
+            "scope": [
+                "text.html.markdown constant.other.reference.link",
+                "text.html.markdown string.other.link.description",
+                "text.html.markdown string.other.link.title"
+            ],
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Perl] Perl Sigils",
+            "scope": "source.perl punctuation.definition.variable",
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[PHP] Meta Function-Call Object",
+            "scope": ["source.php meta.function-call", "source.php meta.function-call.object"],
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Python] Decorator",
+            "scope": [
+                "source.python entity.name.function.decorator",
+                "source.python meta.function.decorator support.type"
+            ],
+            "settings": {
+                "foreground": "#D08770"
+            }
+        },
+        {
+            "name": "[Python] Function Call",
+            "scope": "source.python meta.function-call.generic",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Python] Support Type",
+            "scope": "source.python support.type",
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[Python] Function Parameter",
+            "scope": ["source.python variable.parameter.function.language"],
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[Python] Function Parameter Special",
+            "scope": [
+                "source.python meta.function.parameters variable.parameter.function.language.special.self"
+            ],
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[SCSS] Punctuation Definition Interpolation Bracket Curly",
+            "scope": [
+                "source.css.scss punctuation.definition.interpolation.begin.bracket.curly",
+                "source.css.scss punctuation.definition.interpolation.end.bracket.curly"
+            ],
+            "settings": {
+                "foreground": "#81A1C1"
+            }
+        },
+        {
+            "name": "[SCSS] Variable Interpolation",
+            "scope": "source.css.scss variable.interpolation",
+            "settings": {
+                "foreground": "#D8DEE9",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "[TypeScript] Decorators",
+            "scope": [
+                "source.ts punctuation.decorator",
+                "source.ts meta.decorator variable.other.readwrite",
+                "source.ts meta.decorator entity.name.function",
+                "source.tsx punctuation.decorator",
+                "source.tsx meta.decorator variable.other.readwrite",
+                "source.tsx meta.decorator entity.name.function"
+            ],
+            "settings": {
+                "foreground": "#D08770"
+            }
+        },
+        {
+            "name": "[TypeScript] Object-literal keys",
+            "scope": ["source.ts meta.object-literal.key", "source.tsx meta.object-literal.key"],
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[TypeScript] Object-literal functions",
+            "scope": [
+                "source.ts meta.object-literal.key entity.name.function",
+                "source.tsx meta.object-literal.key entity.name.function"
+            ],
+            "settings": {
+                "foreground": "#88C0D0"
+            }
+        },
+        {
+            "name": "[TypeScript] Type/Class",
+            "scope": [
+                "source.ts support.class",
+                "source.ts support.type",
+                "source.ts entity.name.type",
+                "source.ts entity.name.class",
+                "source.tsx support.class",
+                "source.tsx support.type",
+                "source.tsx entity.name.type",
+                "source.tsx entity.name.class"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[TypeScript] Static Class Support",
+            "scope": [
+                "source.ts support.constant.math",
+                "source.ts support.constant.dom",
+                "source.ts support.constant.json",
+                "source.tsx support.constant.math",
+                "source.tsx support.constant.dom",
+                "source.tsx support.constant.json"
+            ],
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[TypeScript] Variables",
+            "scope": ["source.ts support.variable", "source.tsx support.variable"],
+            "settings": {
+                "foreground": "#D8DEE9"
+            }
+        },
+        {
+            "name": "[TypeScript] Parentheses in Template Strings",
+            "scope": [
+                "source.ts meta.embedded.line meta.brace.square",
+                "source.ts meta.embedded.line meta.brace.round",
+                "source.tsx meta.embedded.line meta.brace.square",
+                "source.tsx meta.embedded.line meta.brace.round"
+            ],
+            "settings": {
+                "foreground": "#ECEFF4"
+            }
+        },
+        {
+            "name": "[XML] Entity Name Tag Namespace",
+            "scope": "text.xml entity.name.tag.namespace",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        },
+        {
+            "name": "[XML] Keyword Other Doctype",
+            "scope": "text.xml keyword.other.doctype",
+            "settings": {
+                "foreground": "#5E81AC"
+            }
+        },
+        {
+            "name": "[XML] Meta Tag Preprocessor",
+            "scope": "text.xml meta.tag.preprocessor entity.name.tag",
+            "settings": {
+                "foreground": "#5E81AC"
+            }
+        },
+        {
+            "name": "[XML] Entity Name Tag Namespace",
+            "scope": [
+                "text.xml string.unquoted.cdata",
+                "text.xml string.unquoted.cdata punctuation.definition.string"
+            ],
+            "settings": {
+                "foreground": "#D08770",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "[YAML] Entity Name Tag",
+            "scope": "source.yaml entity.name.tag",
+            "settings": {
+                "foreground": "#8FBCBB"
+            }
+        }
+    ]
+}

assets/themes/src/vscode/palenight/LICENSE 🔗

@@ -0,0 +1,7 @@
+Copyright (c) 2017-present Olaolu Olawuyi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

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

@@ -0,0 +1,21 @@
+{
+    "name": "Palenight",
+    "author": "Olaolu Olawuyi (whizkydee)",
+    "themes": [
+        {
+            "name": "Palenight",
+            "file_name": "palenight.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Palenight Operator",
+            "file_name": "palenight-operator.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Palenight (Mild Contrast)",
+            "file_name": "palenight-mild-contrast.json",
+            "appearance": "dark"
+        }
+    ]
+}

assets/themes/src/vscode/palenight/palenight-mild-contrast.json 🔗

@@ -0,0 +1,1569 @@
+{

+  "name": "Palenight (Mild Contrast)",

+  "author": "Olaolu Olawuyi",

+  "maintainers": ["Olaolu Olawuyi <mrolaolu@gmail.com>"],

+  "type": "dark",

+  "semanticClass": "palenight-mild-contrast",

+  "colors": {

+    "contrastActiveBorder": null,

+    "contrastBorder": "#2C2F40",

+    "focusBorder": "#2C2F40",

+    "foreground": "#ffffff",

+    "widget.shadow": "#232635",

+    "selection.background": "#7580B850",

+    "descriptionForeground": null,

+    "errorForeground": "#EF5350",

+    "button.background": "#7e57c2cc",

+    "button.foreground": "#ffffffcc",

+    "button.hoverBackground": "#7e57c2",

+    "dropdown.background": "#292D3E",

+    "dropdown.border": "#7e57c2",

+    "dropdown.foreground": "#ffffffcc",

+    "input.background": "#313850",

+    "input.border": "#7e57c2",

+    "input.foreground": "#ffffffcc",

+    "input.placeholderForeground": "#ffffffcc",

+    "inputOption.activeBorder": "#ffffffcc",

+    "inputValidation.errorBackground": "#ef5350f2",

+    "inputValidation.errorBorder": "#EF5350",

+    "inputValidation.infoBackground": "#64b5f6f2",

+    "inputValidation.infoBorder": "#64B5F6",

+    "inputValidation.warningBackground": "#ffca28f2",

+    "inputValidation.warningBorder": "#FFCA28",

+    "scrollbar.shadow": "#292D3E00",

+    "scrollbarSlider.activeBackground": "#694CA4cc",

+    "scrollbarSlider.background": "#694CA466",

+    "scrollbarSlider.hoverBackground": "#694CA4cc",

+    "badge.background": "#7e57c2",

+    "badge.foreground": "#ffffff",

+    "progress.background": "#7e57c2",

+    "list.activeSelectionBackground": "#7e57c2",

+    "list.activeSelectionForeground": "#ffffff",

+    "list.dropBackground": "#2E3245",

+    "list.focusBackground": "#0000002e",

+    "list.focusForeground": "#ffffff",

+    "list.highlightForeground": "#ffffff",

+    "list.hoverBackground": "#0000001a",

+    "list.hoverForeground": "#ffffff",

+    "list.inactiveSelectionBackground": "#929ac90d",

+    "list.inactiveSelectionForeground": "#929ac9",

+    "activityBar.background": "#242839",

+    "activityBar.dropBackground": "#7e57c2e3",

+    "activityBar.foreground": "#eeffff",

+    "activityBar.border": "#2E3243",

+    "activityBarBadge.background": "#7e57c2",

+    "activityBarBadge.foreground": "#ffffff",

+    "sideBar.background": "#25293A",

+    "sideBar.foreground": "#6C739A",

+    "sideBar.border": "#2C2F40",

+    "sideBarTitle.foreground": "#eeffff",

+    "sideBarSectionHeader.background": "#25293A",

+    "sideBarSectionHeader.foreground": "#eeffff",

+    "editorGroup.background": "#32374C",

+    "editorGroup.border": "#2E3245",

+    "editorGroup.dropBackground": "#7e57c273",

+    "editorGroupHeader.noTabsBackground": "#32374C",

+    "editorGroupHeader.tabsBackground": "#31364a",

+    "editorGroupHeader.tabsBorder": "#2C3041",

+    "tab.activeBackground": "#25293A",

+    "tab.activeForeground": "#eeffff",

+    "tab.border": "#272B3B",

+    "tab.activeBorder": "#2C3041",

+    "tab.unfocusedActiveBorder": "#2C3041",

+    "tab.inactiveBackground": "#31364A",

+    "tab.inactiveForeground": "#929ac9",

+    "tab.unfocusedActiveForeground": null,

+    "tab.unfocusedInactiveForeground": null,

+    "editor.background": "#292D3E",

+    "editor.foreground": "#BFC7D5",

+    "editorLineNumber.foreground": "#4c5374",

+    "editorLineNumber.activeForeground": "#eeffff",

+    "editorCursor.foreground": "#7e57c2",

+    "editorCursor.background": null,

+    "editor.selectionBackground": "#7580B850",

+    "editor.selectionHighlightBackground": "#383D51",

+    "editor.inactiveSelectionBackground": "#7e57c25a",

+    "editor.wordHighlightBackground": "#32374D",

+    "editor.wordHighlightStrongBackground": "#2E3250",

+    "editor.findMatchBackground": "#2e3248fc",

+    "editor.findMatchHighlightBackground": "#7e57c233",

+    "editor.findRangeHighlightBackground": null,

+    "editor.hoverHighlightBackground": "#7e57c25a",

+    "editor.lineHighlightBackground": "#0003",

+    "editor.lineHighlightBorder": null,

+    "editorLink.activeForeground": null,

+    "editor.rangeHighlightBackground": "#7e57c25a",

+    "editorWhitespace.foreground": null,

+    "editorIndentGuide.background": "#4E557980",

+    "editorRuler.foreground": "#4E557980",

+    "editorCodeLens.foreground": "#FFCA28",

+    "editorBracketMatch.background": null,

+    "editorBracketMatch.border": null,

+    "editorOverviewRuler.currentContentForeground": "#7e57c2",

+    "editorOverviewRuler.incomingContentForeground": "#7e57c2",

+    "editorOverviewRuler.commonContentForeground": "#7e57c2",

+    "editorError.foreground": "#EF5350",

+    "editorError.border": null,

+    "editorWarning.foreground": "#FFCA28",

+    "editorWarning.border": null,

+    "editorGutter.background": null,

+    "editorGutter.modifiedBackground": "#e2b93d",

+    "editorGutter.addedBackground": "#9CCC65",

+    "editorGutter.deletedBackground": "#EF5350",

+    "diffEditor.insertedTextBackground": "#99b76d23",

+    "diffEditor.removedTextBackground": "#ef535033",

+    "editorWidget.background": "#31364a",

+    "editorWidget.border": null,

+    "editorSuggestWidget.background": "#2C3043",

+    "editorSuggestWidget.border": "#2B2F40",

+    "editorSuggestWidget.foreground": "#bfc7d5",

+    "editorSuggestWidget.highlightForeground": "#ffffff",

+    "editorSuggestWidget.selectedBackground": "#7e57c2",

+    "editorHoverWidget.background": "#292D3E",

+    "editorHoverWidget.border": "#7e57c2",

+    "debugExceptionWidget.background": "#292D3E",

+    "debugExceptionWidget.border": "#7e57c2",

+    "editorMarkerNavigation.background": "#31364a",

+    "editorMarkerNavigationError.background": "#EF5350",

+    "editorMarkerNavigationWarning.background": "#FFCA28",

+    "peekView.border": "#7e57c2",

+    "peekViewEditor.background": "#232635",

+    "peekViewEditor.matchHighlightBackground": "#7e57c25a",

+    "peekViewResult.background": "#2E3245",

+    "peekViewResult.fileForeground": "#eeffff",

+    "peekViewResult.lineForeground": "#eeffff",

+    "peekViewResult.matchHighlightBackground": "#7e57c25a",

+    "peekViewResult.selectionBackground": "#2E3250",

+    "peekViewResult.selectionForeground": "#eeffff",

+    "peekViewTitle.background": "#292D3E",

+    "peekViewTitleDescription.foreground": "#697098",

+    "peekViewTitleLabel.foreground": "#eeffff",

+    "merge.currentHeaderBackground": "#7e57c25a",

+    "merge.currentContentBackground": null,

+    "merge.incomingHeaderBackground": "#7e57c25a",

+    "merge.incomingContentBackground": null,

+    "merge.border": null,

+    "panel.background": "#25293A",

+    "panel.border": "#2C2F40",

+    "panelTitle.activeBorder": "#7e57c2",

+    "panelTitle.activeForeground": "#eeffff",

+    "panelTitle.inactiveForeground": "#bfc7d580",

+    "statusBar.background": "#25293A",

+    "statusBar.foreground": "#676E95",

+    "statusBar.border": "#2C3041",

+    "statusBar.debuggingBackground": "#202431",

+    "statusBar.debuggingForeground": null,

+    "statusBar.debuggingBorder": "#1F2330",

+    "statusBar.noFolderForeground": null,

+    "statusBar.noFolderBackground": "#292D3E",

+    "statusBar.noFolderBorder": "#25293A",

+    "statusBarItem.activeBackground": "#202431",

+    "statusBarItem.hoverBackground": "#202431",

+    "statusBarItem.prominentBackground": "#202431",

+    "statusBarItem.prominentHoverBackground": "#202431",

+    "titleBar.activeBackground": "#25293A",

+    "titleBar.activeForeground": "#eeefff",

+    "titleBar.border": "#2C3041",

+    "titleBar.inactiveBackground": "#30364c",

+    "titleBar.inactiveForeground": null,

+    "notifications.background": "#292D3E",

+    "notifications.foreground": "#ffffffcc",

+    "notificationLink.foreground": "#80CBC4",

+    "extensionButton.prominentForeground": "#ffffffcc",

+    "extensionButton.prominentBackground": "#7e57c2cc",

+    "extensionButton.prominentHoverBackground": "#7e57c2",

+    "pickerGroup.foreground": "#d1aaff",

+    "pickerGroup.border": "#2E3245",

+    "terminal.ansiWhite": "#ffffff",

+    "terminal.ansiBlack": "#676E95",

+    "terminal.ansiBlue": "#82AAFF",

+    "terminal.ansiCyan": "#89DDFF",

+    "terminal.ansiGreen": "#a9c77d",

+    "terminal.ansiMagenta": "#C792EA",

+    "terminal.ansiRed": "#ff5572",

+    "terminal.ansiYellow": "#FFCB6B",

+    "terminal.ansiBrightWhite": "#ffffff",

+    "terminal.ansiBrightBlack": "#676E95",

+    "terminal.ansiBrightBlue": "#82AAFF",

+    "terminal.ansiBrightCyan": "#89DDFF",

+    "terminal.ansiBrightGreen": "#C3E88D",

+    "terminal.ansiBrightMagenta": "#C792EA",

+    "terminal.ansiBrightRed": "#ff5572",

+    "terminal.ansiBrightYellow": "#FFCB6B",

+    "debugToolBar.background": "#292D3E",

+    "welcomePage.buttonBackground": null,

+    "welcomePage.buttonHoverBackground": null,

+    "walkThrough.embeddedEditorBackground": "#232635",

+    "gitDecoration.modifiedResourceForeground": "#e2c08de6",

+    "gitDecoration.deletedResourceForeground": "#EF535090",

+    "gitDecoration.untrackedResourceForeground": "#a9c77dff",

+    "gitDecoration.ignoredResourceForeground": "#69709890",

+    "gitDecoration.conflictingResourceForeground": "#FFEB95CC",

+    "editorActiveLineNumber.foreground": "#eeffff",

+    "breadcrumb.foreground": "#6c739a",

+    "breadcrumb.focusForeground": "#bfc7d5",

+    "breadcrumb.activeSelectionForeground": "#eeffff",

+    "breadcrumbPicker.background": "#292D3E"

+  },

+  "tokenColors": [

+    {

+      "name": "Global settings",

+      "settings": {

+        "background": "#292D3E",

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Comment",

+      "scope": "comment",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "String",

+      "scope": "string",

+      "settings": {

+        "foreground": "#C3E88D"

+      }

+    },

+    {

+      "name": "String Quoted",

+      "scope": "string.quoted",

+      "settings": {

+        "foreground": "#C3E88D"

+      }

+    },

+    {

+      "name": "String Unquoted",

+      "scope": "string.unquoted",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Support Constant Math",

+      "scope": "support.constant.math",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Number",

+      "scope": ["constant.numeric", "constant.character.numeric"],

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Built-in constant",

+      "scope": [

+        "constant.language",

+        "punctuation.definition.constant",

+        "variable.other.constant"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "User-defined constant",

+      "scope": ["constant.character", "constant.other"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Constant Character Escape",

+      "scope": "constant.character.escape",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "RegExp String",

+      "scope": ["string.regexp", "string.regexp keyword.other"],

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Comma in functions",

+      "scope": "meta.function punctuation.separator.comma",

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "Variable",

+      "scope": "variable",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Keyword",

+      "scope": ["punctuation.accessor", "keyword"],

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Storage",

+      "scope": [

+        "storage",

+        "storage.type",

+        "meta.var.expr storage.type",

+        "storage.type.property.js",

+        "storage.type.property.ts",

+        "storage.type.property.tsx",

+        "meta.class meta.method.declaration meta.var.expr storage.type.js"

+      ],

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Class name",

+      "scope": ["entity.name.class", "meta.class entity.name.type.class"],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Inherited class",

+      "scope": "entity.other.inherited-class",

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Function name",

+      "scope": "entity.name.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Function Parameters",

+      "scope": "variable.parameter",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "Meta Tag",

+      "scope": ["punctuation.definition.tag", "meta.tag"],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "HTML Tag names",

+      "scope": [

+        "entity.name.tag support.class.component",

+        "meta.tag.other.html",

+        "meta.tag.other.js",

+        "meta.tag.other.tsx",

+        "entity.name.tag.tsx",

+        "entity.name.tag.js",

+        "entity.name.tag",

+        "meta.tag.js",

+        "meta.tag.tsx",

+        "meta.tag.html"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Tag attribute",

+      "scope": "entity.other.attribute-name",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Entity Name Tag Custom",

+      "scope": "entity.name.tag.custom",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Library (function & constant)",

+      "scope": ["support.function", "support.constant"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Support Constant Property Value meta",

+      "scope": "support.constant.meta.property-value",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Library class/type",

+      "scope": ["support.type", "support.class"],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Support Variable DOM",

+      "scope": "support.variable.dom",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Invalid",

+      "scope": "invalid",

+      "settings": {

+        "background": "#ff2c83",

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Invalid deprecated",

+      "scope": "invalid.deprecated",

+      "settings": {

+        "foreground": "#ffffff",

+        "background": "#d3423e"

+      }

+    },

+    {

+      "name": "Keyword Operator",

+      "scope": "keyword.operator",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Relational",

+      "scope": "keyword.operator.relational",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Keyword Operator Assignment",

+      "scope": "keyword.operator.assignment",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Double-Slashed Comment",

+      "scope": "comment.line.double-slash",

+      "settings": {

+        "foreground": "#697098"

+      }

+    },

+    {

+      "name": "Object",

+      "scope": "object",

+      "settings": {

+        "foreground": "#cdebf7"

+      }

+    },

+    {

+      "name": "Null",

+      "scope": "constant.language.null",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Meta Brace",

+      "scope": "meta.brace",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Meta Delimiter Period",

+      "scope": "meta.delimiter.period",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Punctuation Definition String",

+      "scope": "punctuation.definition.string",

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Boolean",

+      "scope": "constant.language.boolean",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Object Comma",

+      "scope": "object.comma",

+      "settings": {

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Variable Parameter Function",

+      "scope": "variable.parameter.function",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Support Type Property Name & entity name tags",

+      "scope": [

+        "support.type.vendored.property-name",

+        "support.constant.vendored.property-value",

+        "support.type.property-name",

+        "meta.property-list entity.name.tag"

+      ],

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Entity Name tag reference in stylesheets",

+      "scope": "meta.property-list entity.name.tag.reference",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Constant Other Color RGB Value Punctuation Definition Constant",

+      "scope": "constant.other.color.rgb-value punctuation.definition.constant",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Constant Other Color",

+      "scope": "constant.other.color",

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Keyword Other Unit",

+      "scope": "keyword.other.unit",

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Meta Selector",

+      "scope": "meta.selector",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Entity Other Attribute Name Id",

+      "scope": "entity.other.attribute-name.id",

+      "settings": {

+        "foreground": "#FAD430"

+      }

+    },

+    {

+      "name": "Meta Property Name",

+      "scope": "meta.property-name",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Doctypes",

+      "scope": ["entity.name.tag.doctype", "meta.tag.sgml.doctype"],

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Punctuation Definition Parameters",

+      "scope": "punctuation.definition.parameters",

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Keyword Control Operator",

+      "scope": "keyword.control.operator",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Logical",

+      "scope": "keyword.operator.logical",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Variable Instances",

+      "scope": [

+        "variable.instance",

+        "variable.other.instance",

+        "variable.reaedwrite.instance",

+        "variable.other.readwrite.instance"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Variable Property Other",

+      "scope": ["variable.other.property", "variable.other.object.property"],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Entity Name Function",

+      "scope": "entity.name.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Comparison",

+      "scope": "keyword.operator.comparison",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Support Constant, `new` keyword, Special Method Keyword",

+      "scope": [

+        "support.constant",

+        "keyword.other.special-method",

+        "keyword.other.new"

+      ],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Support Function",

+      "scope": "support.function",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Invalid Broken",

+      "scope": "invalid.broken",

+      "settings": {

+        "foreground": "#020e14",

+        "background": "#F78C6C"

+      }

+    },

+    {

+      "name": "Invalid Unimplemented",

+      "scope": "invalid.unimplemented",

+      "settings": {

+        "background": "#8BD649",

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Invalid Illegal",

+      "scope": "invalid.illegal",

+      "settings": {

+        "foreground": "#ffffff",

+        "background": "#ec5f67"

+      }

+    },

+    {

+      "name": "Language Variable",

+      "scope": "variable.language",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Support Variable Property",

+      "scope": "support.variable.property",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Variable Function",

+      "scope": "variable.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Variable Interpolation",

+      "scope": "variable.interpolation",

+      "settings": {

+        "foreground": "#ec5f67"

+      }

+    },

+    {

+      "name": "Meta Function Call",

+      "scope": "meta.function-call",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Punctuation Section Embedded",

+      "scope": "punctuation.section.embedded",

+      "settings": {

+        "foreground": "#d3423e"

+      }

+    },

+    {

+      "name": "Punctuation Tweaks",

+      "scope": [

+        "punctuation.terminator.expression",

+        "punctuation.definition.arguments",

+        "punctuation.definition.array",

+        "punctuation.section.array",

+        "meta.array"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "More Punctuation Tweaks",

+      "scope": [

+        "punctuation.definition.list.begin",

+        "punctuation.definition.list.end",

+        "punctuation.separator.arguments",

+        "punctuation.definition.list"

+      ],

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Template Strings",

+      "scope": "string.template meta.template.expression",

+      "settings": {

+        "foreground": "#d3423e"

+      }

+    },

+    {

+      "name": "Backtics(``) in Template Strings",

+      "scope": "string.template punctuation.definition.string",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Italics",

+      "scope": "italic",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Bold",

+      "scope": "bold",

+      "settings": {

+        "foreground": "#ffcb6b",

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Quote",

+      "scope": "quote",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Raw Code",

+      "scope": "raw",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "CoffeScript Variable Assignment",

+      "scope": "variable.assignment.coffee",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "CoffeScript Parameter Function",

+      "scope": "variable.parameter.function.coffee",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "CoffeeScript Assignments",

+      "scope": "variable.assignment.coffee",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "C# Readwrite Variables",

+      "scope": "variable.other.readwrite.cs",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "C# Classes & Storage types",

+      "scope": ["entity.name.type.class.cs", "storage.type.cs"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "C# Namespaces",

+      "scope": "entity.name.type.namespace.cs",

+      "settings": {

+        "foreground": "#B2CCD6"

+      }

+    },

+    {

+      "name": "Tag names in Stylesheets",

+      "scope": [

+        "entity.name.tag.css",

+        "entity.name.tag.less",

+        "entity.name.tag.custom.css"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Wildcard(*) selector in Stylesheets",

+      "scope": [

+        "entity.name.tag.wildcard.css",

+        "entity.name.tag.wildcard.less",

+        "entity.name.tag.wildcard.scss",

+        "entity.name.tag.wildcard.sass"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "(C|SC|SA|LE)SS property value unit",

+      "scope": [

+        "keyword.other.unit.css",

+        "constant.length.units.css",

+        "keyword.other.unit.less",

+        "constant.length.units.less",

+        "keyword.other.unit.scss",

+        "constant.length.units.scss",

+        "keyword.other.unit.sass",

+        "constant.length.units.sass"

+      ],

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Attribute Name for CSS",

+      "scope": "meta.attribute-selector.css entity.other.attribute-name.attribute",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "punctuations in styled components",

+      "scope": [

+        "source.js source.css meta.property-list",

+        "source.js source.css punctuation.section",

+        "source.js source.css punctuation.terminator.rule",

+        "source.js source.css punctuation.definition.entity.end.bracket",

+        "source.js source.css punctuation.definition.entity.begin.bracket",

+        "source.js source.css punctuation.separator.key-value",

+        "source.js source.css punctuation.definition.attribute-selector",

+        "source.js source.css meta.property-list",

+        "source.js source.css meta.property-list punctuation.separator.comma",

+        "source.ts source.css punctuation.section",

+        "source.ts source.css punctuation.terminator.rule",

+        "source.ts source.css punctuation.definition.entity.end.bracket",

+        "source.ts source.css punctuation.definition.entity.begin.bracket",

+        "source.ts source.css punctuation.separator.key-value",

+        "source.ts source.css punctuation.definition.attribute-selector",

+        "source.ts source.css meta.property-list",

+        "source.ts source.css meta.property-list punctuation.separator.comma"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Elixir Classes",

+      "scope": [

+        "source.elixir support.type.elixir",

+        "source.elixir meta.module.elixir entity.name.class.elixir"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Elixir Functions",

+      "scope": "source.elixir entity.name.function",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Elixir Constants",

+      "scope": [

+        "source.elixir constant.other.symbol.elixir",

+        "source.elixir constant.other.keywords.elixir"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Elixir String Punctuations",

+      "scope": "source.elixir punctuation.definition.string",

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Elixir",

+      "scope": [

+        "source.elixir variable.other.readwrite.module.elixir",

+        "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"

+      ],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Elixir Binary Punctuations",

+      "scope": "source.elixir .punctuation.binary.elixir",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Go Function Calls",

+      "scope": "source.go meta.function-call.go",

+      "settings": {

+        "foreground": "#DDDDDD"

+      }

+    },

+    {

+      "name": "GraphQL Variables",

+      "scope": "variable.qraphql",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "ID Attribute Name in HTML",

+      "scope": "entity.other.attribute-name.id.html",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "HTML Punctuation Definition Tag",

+      "scope": "punctuation.definition.tag.html",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "HTML Doctype",

+      "scope": "meta.tag.sgml.doctype.html",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "JavaScript Classes",

+      "scope": "meta.class entity.name.type.class.js",

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "JavaScript Method Declaration e.g. `constructor`",

+      "scope": "meta.method.declaration storage.type.js",

+      "settings": {

+        "foreground": "#82AAFF",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "JavaScript Terminator",

+      "scope": "terminator.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Meta Punctuation Definition",

+      "scope": "meta.js punctuation.definition.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Entity Names in Code Documentations",

+      "scope": [

+        "entity.name.type.instance.jsdoc",

+        "entity.name.type.instance.phpdoc"

+      ],

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "Other Variables in Code Documentations",

+      "scope": ["variable.other.jsdoc", "variable.other.phpdoc"],

+      "settings": {

+        "foreground": "#78ccf0"

+      }

+    },

+    {

+      "name": "JavaScript module imports and exports",

+      "scope": [

+        "variable.other.meta.import.js",

+        "meta.import.js variable.other",

+        "variable.other.meta.export.js",

+        "meta.export.js variable.other"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Variable Parameter Function",

+      "scope": "variable.parameter.function.js",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "JavaScript Variable Other ReadWrite",

+      "scope": "variable.other.readwrite.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Text nested in React tags",

+      "scope": [

+        "meta.jsx.children",

+        "meta.jsx.children.js",

+        "meta.jsx.children.tsx"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript[React] Variable Other Object",

+      "scope": [

+        "variable.other.object.js",

+        "variable.other.object.jsx",

+        "meta.object-literal.key.js",

+        "meta.object-literal.key.jsx",

+        "variable.object.property.js",

+        "variable.object.property.jsx"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Variables",

+      "scope": ["variable.js", "variable.other.js"],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Entity Name Type",

+      "scope": ["entity.name.type.js", "entity.name.type.module.js"],

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "JavaScript Support Classes",

+      "scope": "support.class.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JSON Property Names",

+      "scope": "support.type.property-name.json",

+      "settings": {

+        "foreground": "#C3E88D",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "JSON Support Constants",

+      "scope": "support.constant.json",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "JSON Property values (string)",

+      "scope": "meta.structure.dictionary.value.json string.quoted.double",

+      "settings": {

+        "foreground": "#80CBC4",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "Strings in JSON values",

+      "scope": "string.quoted.double.json punctuation.definition.string.json",

+      "settings": {

+        "foreground": "#80CBC4",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "Specific JSON Property values like null",

+      "scope": "meta.structure.dictionary.json meta.structure.dictionary.value constant.language",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Ruby Variables",

+      "scope": "variable.other.ruby",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Ruby Hashkeys",

+      "scope": "constant.language.symbol.hashkey.ruby",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "LESS Tag names",

+      "scope": "entity.name.tag.less",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Attribute Name for LESS",

+      "scope": "meta.attribute-selector.less entity.other.attribute-name.attribute",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Markup Headings",

+      "scope": "markup.heading",

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Markup Italics",

+      "scope": "markup.italic",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markup Bold",

+      "scope": "markup.bold",

+      "settings": {

+        "foreground": "#ffcb6b",

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Markup Quote + others",

+      "scope": "markup.quote",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markup Raw Code + others",

+      "scope": "markup.inline.raw",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Markup Links",

+      "scope": ["markup.underline.link", "markup.underline.link.image"],

+      "settings": {

+        "foreground": "#ff869a"

+      }

+    },

+    {

+      "name": "Markup Attributes",

+      "scope": ["markup.meta.attribute-list"],

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Markup Admonitions",

+      "scope": "markup.admonition",

+      "settings": {

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Markup Lists",

+      "scope": "markup.list.bullet",

+      "settings": {

+        "foreground": "#D9F5DD"

+      }

+    },

+    {

+      "name": "Markup Superscript and Subscript",

+      "scope": ["markup.superscript", "markup.subscript"],

+      "settings": {

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markdown Link Title and Description",

+      "scope": [

+        "string.other.link.title.markdown",

+        "string.other.link.description.markdown"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Markdown Punctuation",

+      "scope": [

+        "punctuation.definition.string.markdown",

+        "punctuation.definition.string.begin.markdown",

+        "punctuation.definition.string.end.markdown",

+        "meta.link.inline.markdown punctuation.definition.string"

+      ],

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Markdown MetaData Punctuation",

+      "scope": ["punctuation.definition.metadata.markdown"],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Markdown List Punctuation",

+      "scope": ["beginning.punctuation.definition.list.markdown"],

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Asciidoc Function",

+      "scope": "entity.name.function.asciidoc",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "PHP Variables",

+      "scope": "variable.other.php",

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "Support Classes in PHP",

+      "scope": "support.class.php",

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "Punctuations in PHP function calls",

+      "scope": "meta.function-call.php punctuation",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "PHP Global Variables",

+      "scope": "variable.other.global.php",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Declaration Punctuation in PHP Global Variables",

+      "scope": "variable.other.global.php punctuation.definition.variable",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Language Constants in Python",

+      "scope": "constant.language.python",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Python Function Parameter and Arguments",

+      "scope": [

+        "variable.parameter.function.python",

+        "meta.function-call.arguments.python"

+      ],

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "Python Function Call",

+      "scope": [

+        "meta.function-call.python",

+        "meta.function-call.generic.python"

+      ],

+      "settings": {

+        "foreground": "#B2CCD6"

+      }

+    },

+    {

+      "name": "Punctuations in Python",

+      "scope": "punctuation.python",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Decorator Functions in Python",

+      "scope": "entity.name.function.decorator.python",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Python Language Variable",

+      "scope": "source.python variable.language.special",

+      "settings": {

+        "foreground": "#8EACE3"

+      }

+    },

+    {

+      "name": "SCSS Variable",

+      "scope": [

+        "variable.scss",

+        "variable.sass",

+        "variable.parameter.url.scss",

+        "variable.parameter.url.sass"

+      ],

+      "settings": {

+        "foreground": "#DDDDDD"

+      }

+    },

+    {

+      "name": "Variables in SASS At-Rules",

+      "scope": [

+        "source.css.scss meta.at-rule variable",

+        "source.css.sass meta.at-rule variable"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Variables in SASS At-Rules",

+      "scope": [

+        "source.css.scss meta.at-rule variable",

+        "source.css.sass meta.at-rule variable"

+      ],

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "Attribute Name for SASS",

+      "scope": [

+        "meta.attribute-selector.scss entity.other.attribute-name.attribute",

+        "meta.attribute-selector.sass entity.other.attribute-name.attribute"

+      ],

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Tag names in SASS",

+      "scope": ["entity.name.tag.scss", "entity.name.tag.sass"],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "TypeScript[React] Variables and Object Properties",

+      "scope": [

+        "variable.other.readwrite.alias.ts",

+        "variable.other.readwrite.alias.tsx",

+        "variable.other.readwrite.ts",

+        "variable.other.readwrite.tsx",

+        "variable.other.object.ts",

+        "variable.other.object.tsx",

+        "variable.object.property.ts",

+        "variable.object.property.tsx",

+        "variable.other.ts",

+        "variable.other.tsx",

+        "variable.tsx",

+        "variable.ts"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "TypeScript[React] Entity Name Types",

+      "scope": ["entity.name.type.ts", "entity.name.type.tsx"],

+      "settings": {

+        "foreground": "#78ccf0"

+      }

+    },

+    {

+      "name": "TypeScript[React] Node Classes",

+      "scope": ["support.class.node.ts", "support.class.node.tsx"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "TypeScript[React] Entity Name Types as Parameters",

+      "scope": [

+        "meta.type.parameters.ts entity.name.type",

+        "meta.type.parameters.tsx entity.name.type"

+      ],

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "TypeScript[React] Import/Export Punctuations",

+      "scope": [

+        "meta.import.ts punctuation.definition.block",

+        "meta.import.tsx punctuation.definition.block",

+        "meta.export.ts punctuation.definition.block",

+        "meta.export.tsx punctuation.definition.block"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "TypeScript[React] Punctuation Decorators",

+      "scope": [

+        "meta.decorator punctuation.decorator.ts",

+        "meta.decorator punctuation.decorator.tsx"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "TypeScript[React] Punctuation Decorators",

+      "scope": "meta.tag.js meta.jsx.children.tsx",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "YAML Entity Name Tags",

+      "scope": "entity.name.tag.yaml",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "handlebars variables",

+      "scope": "variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "handlebars parameters",

+      "scope": "entity.other.attribute-name.handlebars variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "handlebars enitity attribute names",

+      "scope": "entity.other.attribute-name.handlebars",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "handlebars enitity attribute values",

+      "scope": "entity.other.attribute-value.handlebars variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "normalize font style of certain components",

+      "scope": [

+        "meta.tag.js meta.embedded.expression.js punctuation.section.embedded.begin.js",

+        "meta.tag.js meta.embedded.expression.js punctuation.section.embedded.end.js",

+        "meta.property-list.css meta.property-value.css variable.other.less",

+        "punctuation.section.embedded.begin.js.jsx",

+        "punctuation.section.embedded.end.js.jsx",

+        "meta.property-list.scss variable.scss",

+        "meta.property-list.sass variable.sass",

+        "keyword.operator.logical",

+        "keyword.operator.arithmetic",

+        "keyword.operator.bitwise",

+        "keyword.operator.increment",

+        "keyword.operator.ternary",

+        "keyword.operator.comparison",

+        "keyword.operator.assignment",

+        "keyword.operator.operator",

+        "keyword.operator.or.regexp",

+        "keyword.operator.expression.in",

+        "keyword.operator.type",

+        "punctuation.section.embedded.js",

+        "punctuation.definintion.string",

+        "punctuation"

+      ],

+      "settings": {

+        "fontStyle": "normal"

+      }

+    }

+  ]

+}

assets/themes/src/vscode/palenight/palenight-operator.json 🔗

@@ -0,0 +1,1640 @@
+{

+  "name": "Palenight Operator",

+  "author": "Olaolu Olawuyi",

+  "maintainers": ["Olaolu Olawuyi <mrolaolu@gmail.com>"],

+  "type": "dark",

+  "semanticClass": "palenight-operator",

+  "colors": {

+    "contrastActiveBorder": null,

+    "contrastBorder": "#282B3C",

+    "focusBorder": "#282B3C",

+    "foreground": "#ffffff",

+    "widget.shadow": "#232635",

+    "selection.background": "#7580B850",

+    "descriptionForeground": null,

+    "errorForeground": "#EF5350",

+    "button.background": "#7e57c2cc",

+    "button.foreground": "#ffffffcc",

+    "button.hoverBackground": "#7e57c2",

+    "dropdown.background": "#292D3E",

+    "dropdown.border": "#7e57c2",

+    "dropdown.foreground": "#ffffffcc",

+    "input.background": "#313850",

+    "input.border": "#7e57c2",

+    "input.foreground": "#ffffffcc",

+    "input.placeholderForeground": "#ffffffcc",

+    "inputOption.activeBorder": "#ffffffcc",

+    "inputValidation.errorBackground": "#ef5350f2",

+    "inputValidation.errorBorder": "#EF5350",

+    "inputValidation.infoBackground": "#64b5f6f2",

+    "inputValidation.infoBorder": "#64B5F6",

+    "inputValidation.warningBackground": "#ffca28f2",

+    "inputValidation.warningBorder": "#FFCA28",

+    "scrollbar.shadow": "#292D3E00",

+    "scrollbarSlider.activeBackground": "#694CA4cc",

+    "scrollbarSlider.background": "#694CA466",

+    "scrollbarSlider.hoverBackground": "#694CA4cc",

+    "badge.background": "#7e57c2",

+    "badge.foreground": "#ffffff",

+    "progress.background": "#7e57c2",

+    "list.activeSelectionBackground": "#7e57c2",

+    "list.activeSelectionForeground": "#ffffff",

+    "list.dropBackground": "#2E3245",

+    "list.focusBackground": "#0000002e",

+    "list.focusForeground": "#ffffff",

+    "list.highlightForeground": "#ffffff",

+    "list.hoverBackground": "#0000001a",

+    "list.hoverForeground": "#ffffff",

+    "list.inactiveSelectionBackground": "#929ac90d",

+    "list.inactiveSelectionForeground": "#929ac9",

+    "activityBar.background": "#282C3D",

+    "activityBar.dropBackground": "#7e57c2e3",

+    "activityBar.foreground": "#eeffff",

+    "activityBar.border": "#282C3D",

+    "activityBarBadge.background": "#7e57c2",

+    "activityBarBadge.foreground": "#ffffff",

+    "sideBar.background": "#292D3E",

+    "sideBar.foreground": "#6C739A",

+    "sideBar.border": "#282B3C",

+    "sideBarTitle.foreground": "#eeffff",

+    "sideBarSectionHeader.background": "#292D3E",

+    "sideBarSectionHeader.foreground": "#eeffff",

+    "editorGroup.background": "#32374C",

+    "editorGroup.border": "#2E3245",

+    "editorGroup.dropBackground": "#7e57c273",

+    "editorGroupHeader.noTabsBackground": "#32374C",

+    "editorGroupHeader.tabsBackground": "#31364a",

+    "editorGroupHeader.tabsBorder": "#262A39",

+    "tab.activeBackground": "#292D3E",

+    "tab.activeForeground": "#eeffff",

+    "tab.border": "#272B3B",

+    "tab.activeBorder": "#262A39",

+    "tab.unfocusedActiveBorder": "#262A39",

+    "tab.inactiveBackground": "#31364A",

+    "tab.inactiveForeground": "#929ac9",

+    "tab.unfocusedActiveForeground": null,

+    "tab.unfocusedInactiveForeground": null,

+    "editor.background": "#292D3E",

+    "editor.foreground": "#BFC7D5",

+    "editorLineNumber.foreground": "#4c5374",

+    "editorLineNumber.activeForeground": "#eeffff",

+    "editorCursor.foreground": "#7e57c2",

+    "editorCursor.background": null,

+    "editor.selectionBackground": "#7580B850",

+    "editor.selectionHighlightBackground": "#383D51",

+    "editor.inactiveSelectionBackground": "#7e57c25a",

+    "editor.wordHighlightBackground": "#32374D",

+    "editor.wordHighlightStrongBackground": "#2E3250",

+    "editor.findMatchBackground": "#2e3248fc",

+    "editor.findMatchHighlightBackground": "#7e57c233",

+    "editor.findRangeHighlightBackground": null,

+    "editor.hoverHighlightBackground": "#7e57c25a",

+    "editor.lineHighlightBackground": "#0003",

+    "editor.lineHighlightBorder": null,

+    "editorLink.activeForeground": null,

+    "editor.rangeHighlightBackground": "#7e57c25a",

+    "editorWhitespace.foreground": null,

+    "editorIndentGuide.background": "#4E557980",

+    "editorRuler.foreground": "#4E557980",

+    "editorCodeLens.foreground": "#FFCA28",

+    "editorBracketMatch.background": null,

+    "editorBracketMatch.border": null,

+    "editorOverviewRuler.currentContentForeground": "#7e57c2",

+    "editorOverviewRuler.incomingContentForeground": "#7e57c2",

+    "editorOverviewRuler.commonContentForeground": "#7e57c2",

+    "editorError.foreground": "#EF5350",

+    "editorError.border": null,

+    "editorWarning.foreground": "#FFCA28",

+    "editorWarning.border": null,

+    "editorGutter.background": null,

+    "editorGutter.modifiedBackground": "#e2b93d",

+    "editorGutter.addedBackground": "#9CCC65",

+    "editorGutter.deletedBackground": "#EF5350",

+    "diffEditor.insertedTextBackground": "#99b76d23",

+    "diffEditor.removedTextBackground": "#ef535033",

+    "editorWidget.background": "#31364a",

+    "editorWidget.border": null,

+    "editorSuggestWidget.background": "#2C3043",

+    "editorSuggestWidget.border": "#2B2F40",

+    "editorSuggestWidget.foreground": "#bfc7d5",

+    "editorSuggestWidget.highlightForeground": "#ffffff",

+    "editorSuggestWidget.selectedBackground": "#7e57c2",

+    "editorHoverWidget.background": "#292D3E",

+    "editorHoverWidget.border": "#7e57c2",

+    "debugExceptionWidget.background": "#292D3E",

+    "debugExceptionWidget.border": "#7e57c2",

+    "editorMarkerNavigation.background": "#31364a",

+    "editorMarkerNavigationError.background": "#EF5350",

+    "editorMarkerNavigationWarning.background": "#FFCA28",

+    "peekView.border": "#7e57c2",

+    "peekViewEditor.background": "#232635",

+    "peekViewEditor.matchHighlightBackground": "#7e57c25a",

+    "peekViewResult.background": "#2E3245",

+    "peekViewResult.fileForeground": "#eeffff",

+    "peekViewResult.lineForeground": "#eeffff",

+    "peekViewResult.matchHighlightBackground": "#7e57c25a",

+    "peekViewResult.selectionBackground": "#2E3250",

+    "peekViewResult.selectionForeground": "#eeffff",

+    "peekViewTitle.background": "#292D3E",

+    "peekViewTitleDescription.foreground": "#697098",

+    "peekViewTitleLabel.foreground": "#eeffff",

+    "merge.currentHeaderBackground": "#7e57c25a",

+    "merge.currentContentBackground": null,

+    "merge.incomingHeaderBackground": "#7e57c25a",

+    "merge.incomingContentBackground": null,

+    "merge.border": null,

+    "panel.background": "#292D3E",

+    "panel.border": "#282B3C",

+    "panelTitle.activeBorder": "#7e57c2",

+    "panelTitle.activeForeground": "#eeffff",

+    "panelTitle.inactiveForeground": "#bfc7d580",

+    "statusBar.background": "#282C3D",

+    "statusBar.foreground": "#676E95",

+    "statusBar.border": "#262A39",

+    "statusBar.debuggingBackground": "#202431",

+    "statusBar.debuggingForeground": null,

+    "statusBar.debuggingBorder": "#1F2330",

+    "statusBar.noFolderForeground": null,

+    "statusBar.noFolderBackground": "#292D3E",

+    "statusBar.noFolderBorder": "#25293A",

+    "statusBarItem.activeBackground": "#202431",

+    "statusBarItem.hoverBackground": "#202431",

+    "statusBarItem.prominentBackground": "#202431",

+    "statusBarItem.prominentHoverBackground": "#202431",

+    "titleBar.activeBackground": "#292d3e",

+    "titleBar.activeForeground": "#eeefff",

+    "titleBar.border": "#30364c",

+    "titleBar.inactiveBackground": "#30364c",

+    "titleBar.inactiveForeground": null,

+    "notifications.background": "#292D3E",

+    "notifications.foreground": "#ffffffcc",

+    "notificationLink.foreground": "#80CBC4",

+    "extensionButton.prominentForeground": "#ffffffcc",

+    "extensionButton.prominentBackground": "#7e57c2cc",

+    "extensionButton.prominentHoverBackground": "#7e57c2",

+    "pickerGroup.foreground": "#d1aaff",

+    "pickerGroup.border": "#2E3245",

+    "terminal.ansiWhite": "#ffffff",

+    "terminal.ansiBlack": "#676E95",

+    "terminal.ansiBlue": "#82AAFF",

+    "terminal.ansiCyan": "#89DDFF",

+    "terminal.ansiGreen": "#a9c77d",

+    "terminal.ansiMagenta": "#C792EA",

+    "terminal.ansiRed": "#ff5572",

+    "terminal.ansiYellow": "#FFCB6B",

+    "terminal.ansiBrightWhite": "#ffffff",

+    "terminal.ansiBrightBlack": "#676E95",

+    "terminal.ansiBrightBlue": "#82AAFF",

+    "terminal.ansiBrightCyan": "#89DDFF",

+    "terminal.ansiBrightGreen": "#C3E88D",

+    "terminal.ansiBrightMagenta": "#C792EA",

+    "terminal.ansiBrightRed": "#ff5572",

+    "terminal.ansiBrightYellow": "#FFCB6B",

+    "debugToolBar.background": "#292D3E",

+    "welcomePage.buttonBackground": null,

+    "welcomePage.buttonHoverBackground": null,

+    "walkThrough.embeddedEditorBackground": "#232635",

+    "gitDecoration.modifiedResourceForeground": "#e2c08de6",

+    "gitDecoration.deletedResourceForeground": "#EF535090",

+    "gitDecoration.untrackedResourceForeground": "#a9c77dff",

+    "gitDecoration.ignoredResourceForeground": "#69709890",

+    "gitDecoration.conflictingResourceForeground": "#FFEB95CC",

+    "editorActiveLineNumber.foreground": "#eeffff",

+    "breadcrumb.foreground": "#6c739a",

+    "breadcrumb.focusForeground": "#bfc7d5",

+    "breadcrumb.activeSelectionForeground": "#eeffff",

+    "breadcrumbPicker.background": "#292D3E"

+  },

+  "tokenColors": [

+    {

+      "name": "Global settings",

+      "settings": {

+        "background": "#292D3E",

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Comment",

+      "scope": "comment",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "String",

+      "scope": "string",

+      "settings": {

+        "foreground": "#C3E88D"

+      }

+    },

+    {

+      "name": "String Quoted",

+      "scope": "string.quoted",

+      "settings": {

+        "foreground": "#C3E88D"

+      }

+    },

+    {

+      "name": "String Unquoted",

+      "scope": "string.unquoted",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Support Constant Math",

+      "scope": "support.constant.math",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Number",

+      "scope": ["constant.numeric", "constant.character.numeric"],

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Built-in constant",

+      "scope": [

+        "constant.language",

+        "punctuation.definition.constant",

+        "variable.other.constant"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "User-defined constant",

+      "scope": ["constant.character", "constant.other"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Constant Character Escape",

+      "scope": "constant.character.escape",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "RegExp String",

+      "scope": ["string.regexp", "string.regexp keyword.other"],

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Comma in functions",

+      "scope": "meta.function punctuation.separator.comma",

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "Variable",

+      "scope": "variable",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Keyword",

+      "scope": ["punctuation.accessor", "keyword"],

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Storage",

+      "scope": [

+        "storage",

+        "storage.type",

+        "meta.var.expr storage.type",

+        "storage.type.property.js",

+        "storage.type.property.ts",

+        "storage.type.property.tsx",

+        "meta.class meta.method.declaration meta.var.expr storage.type.js"

+      ],

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Class name",

+      "scope": ["entity.name.class", "meta.class entity.name.type.class"],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Inherited class",

+      "scope": "entity.other.inherited-class",

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Function name",

+      "scope": "entity.name.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Function Parameters",

+      "scope": "variable.parameter",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "Meta Tag",

+      "scope": ["punctuation.definition.tag", "meta.tag"],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "HTML Tag names",

+      "scope": [

+        "entity.name.tag support.class.component",

+        "meta.tag.other.html",

+        "meta.tag.other.js",

+        "meta.tag.other.tsx",

+        "entity.name.tag.tsx",

+        "entity.name.tag.js",

+        "entity.name.tag",

+        "meta.tag.js",

+        "meta.tag.tsx",

+        "meta.tag.html"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Tag attribute",

+      "scope": "entity.other.attribute-name",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Entity Name Tag Custom",

+      "scope": "entity.name.tag.custom",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Library (function & constant)",

+      "scope": ["support.function", "support.constant"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Support Constant Property Value meta",

+      "scope": "support.constant.meta.property-value",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Library class/type",

+      "scope": ["support.type", "support.class"],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Support Variable DOM",

+      "scope": "support.variable.dom",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Invalid",

+      "scope": "invalid",

+      "settings": {

+        "background": "#ff2c83",

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Invalid deprecated",

+      "scope": "invalid.deprecated",

+      "settings": {

+        "foreground": "#ffffff",

+        "background": "#d3423e"

+      }

+    },

+    {

+      "name": "Keyword Operator",

+      "scope": "keyword.operator",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Relational",

+      "scope": "keyword.operator.relational",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Keyword Operator Assignment",

+      "scope": "keyword.operator.assignment",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Double-Slashed Comment",

+      "scope": "comment.line.double-slash",

+      "settings": {

+        "foreground": "#697098"

+      }

+    },

+    {

+      "name": "Object",

+      "scope": "object",

+      "settings": {

+        "foreground": "#cdebf7"

+      }

+    },

+    {

+      "name": "Null",

+      "scope": "constant.language.null",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Meta Brace",

+      "scope": "meta.brace",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Meta Delimiter Period",

+      "scope": "meta.delimiter.period",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Punctuation Definition String",

+      "scope": "punctuation.definition.string",

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Boolean",

+      "scope": "constant.language.boolean",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Object Comma",

+      "scope": "object.comma",

+      "settings": {

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Variable Parameter Function",

+      "scope": "variable.parameter.function",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Support Type Property Name & entity name tags",

+      "scope": [

+        "support.type.vendored.property-name",

+        "support.constant.vendored.property-value",

+        "support.type.property-name",

+        "meta.property-list entity.name.tag"

+      ],

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Entity Name tag reference in stylesheets",

+      "scope": "meta.property-list entity.name.tag.reference",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Constant Other Color RGB Value Punctuation Definition Constant",

+      "scope": "constant.other.color.rgb-value punctuation.definition.constant",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Constant Other Color",

+      "scope": "constant.other.color",

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Keyword Other Unit",

+      "scope": "keyword.other.unit",

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Meta Selector",

+      "scope": "meta.selector",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Entity Other Attribute Name Id",

+      "scope": "entity.other.attribute-name.id",

+      "settings": {

+        "foreground": "#FAD430"

+      }

+    },

+    {

+      "name": "Meta Property Name",

+      "scope": "meta.property-name",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Doctypes",

+      "scope": ["entity.name.tag.doctype", "meta.tag.sgml.doctype"],

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Punctuation Definition Parameters",

+      "scope": "punctuation.definition.parameters",

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Keyword Control Operator",

+      "scope": "keyword.control.operator",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Logical",

+      "scope": "keyword.operator.logical",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Variable Instances",

+      "scope": [

+        "variable.instance",

+        "variable.other.instance",

+        "variable.reaedwrite.instance",

+        "variable.other.readwrite.instance"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Variable Property Other",

+      "scope": ["variable.other.property", "variable.other.object.property"],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Entity Name Function",

+      "scope": "entity.name.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Comparison",

+      "scope": "keyword.operator.comparison",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Support Constant, `new` keyword, Special Method Keyword",

+      "scope": [

+        "support.constant",

+        "keyword.other.special-method",

+        "keyword.other.new"

+      ],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Support Function",

+      "scope": "support.function",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Invalid Broken",

+      "scope": "invalid.broken",

+      "settings": {

+        "foreground": "#020e14",

+        "background": "#F78C6C"

+      }

+    },

+    {

+      "name": "Invalid Unimplemented",

+      "scope": "invalid.unimplemented",

+      "settings": {

+        "background": "#8BD649",

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Invalid Illegal",

+      "scope": "invalid.illegal",

+      "settings": {

+        "foreground": "#ffffff",

+        "background": "#ec5f67"

+      }

+    },

+    {

+      "name": "Language Variable",

+      "scope": "variable.language",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Support Variable Property",

+      "scope": "support.variable.property",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Variable Function",

+      "scope": "variable.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Variable Interpolation",

+      "scope": "variable.interpolation",

+      "settings": {

+        "foreground": "#ec5f67"

+      }

+    },

+    {

+      "name": "Meta Function Call",

+      "scope": "meta.function-call",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Punctuation Section Embedded",

+      "scope": "punctuation.section.embedded",

+      "settings": {

+        "foreground": "#d3423e"

+      }

+    },

+    {

+      "name": "Punctuation Tweaks",

+      "scope": [

+        "punctuation.terminator.expression",

+        "punctuation.definition.arguments",

+        "punctuation.definition.array",

+        "punctuation.section.array",

+        "meta.array"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "More Punctuation Tweaks",

+      "scope": [

+        "punctuation.definition.list.begin",

+        "punctuation.definition.list.end",

+        "punctuation.separator.arguments",

+        "punctuation.definition.list"

+      ],

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Template Strings",

+      "scope": "string.template meta.template.expression",

+      "settings": {

+        "foreground": "#d3423e"

+      }

+    },

+    {

+      "name": "Backtics(``) in Template Strings",

+      "scope": "string.template punctuation.definition.string",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Italics",

+      "scope": "italic",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Bold",

+      "scope": "bold",

+      "settings": {

+        "foreground": "#ffcb6b",

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Quote",

+      "scope": "quote",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Raw Code",

+      "scope": "raw",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "CoffeScript Variable Assignment",

+      "scope": "variable.assignment.coffee",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "CoffeScript Parameter Function",

+      "scope": "variable.parameter.function.coffee",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "CoffeeScript Assignments",

+      "scope": "variable.assignment.coffee",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "C# Readwrite Variables",

+      "scope": "variable.other.readwrite.cs",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "C# Classes & Storage types",

+      "scope": ["entity.name.type.class.cs", "storage.type.cs"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "C# Namespaces",

+      "scope": "entity.name.type.namespace.cs",

+      "settings": {

+        "foreground": "#B2CCD6"

+      }

+    },

+    {

+      "name": "Tag names in Stylesheets",

+      "scope": [

+        "entity.name.tag.css",

+        "entity.name.tag.less",

+        "entity.name.tag.custom.css"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Wildcard(*) selector in Stylesheets",

+      "scope": [

+        "entity.name.tag.wildcard.css",

+        "entity.name.tag.wildcard.less",

+        "entity.name.tag.wildcard.scss",

+        "entity.name.tag.wildcard.sass"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "(C|SC|SA|LE)SS property value unit",

+      "scope": [

+        "keyword.other.unit.css",

+        "constant.length.units.css",

+        "keyword.other.unit.less",

+        "constant.length.units.less",

+        "keyword.other.unit.scss",

+        "constant.length.units.scss",

+        "keyword.other.unit.sass",

+        "constant.length.units.sass"

+      ],

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Attribute Name for CSS",

+      "scope": "meta.attribute-selector.css entity.other.attribute-name.attribute",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "punctuations in styled components",

+      "scope": [

+        "source.js source.css meta.property-list",

+        "source.js source.css punctuation.section",

+        "source.js source.css punctuation.terminator.rule",

+        "source.js source.css punctuation.definition.entity.end.bracket",

+        "source.js source.css punctuation.definition.entity.begin.bracket",

+        "source.js source.css punctuation.separator.key-value",

+        "source.js source.css punctuation.definition.attribute-selector",

+        "source.js source.css meta.property-list",

+        "source.js source.css meta.property-list punctuation.separator.comma",

+        "source.ts source.css punctuation.section",

+        "source.ts source.css punctuation.terminator.rule",

+        "source.ts source.css punctuation.definition.entity.end.bracket",

+        "source.ts source.css punctuation.definition.entity.begin.bracket",

+        "source.ts source.css punctuation.separator.key-value",

+        "source.ts source.css punctuation.definition.attribute-selector",

+        "source.ts source.css meta.property-list",

+        "source.ts source.css meta.property-list punctuation.separator.comma"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Elixir Classes",

+      "scope": [

+        "source.elixir support.type.elixir",

+        "source.elixir meta.module.elixir entity.name.class.elixir"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Elixir Functions",

+      "scope": "source.elixir entity.name.function",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Elixir Constants",

+      "scope": [

+        "source.elixir constant.other.symbol.elixir",

+        "source.elixir constant.other.keywords.elixir"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Elixir String Punctuations",

+      "scope": "source.elixir punctuation.definition.string",

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Elixir",

+      "scope": [

+        "source.elixir variable.other.readwrite.module.elixir",

+        "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"

+      ],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Elixir Binary Punctuations",

+      "scope": "source.elixir .punctuation.binary.elixir",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Go Function Calls",

+      "scope": "source.go meta.function-call.go",

+      "settings": {

+        "foreground": "#DDDDDD"

+      }

+    },

+    {

+      "name": "GraphQL Variables",

+      "scope": "variable.qraphql",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "ID Attribute Name in HTML",

+      "scope": "entity.other.attribute-name.id.html",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "HTML Punctuation Definition Tag",

+      "scope": "punctuation.definition.tag.html",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "HTML Doctype",

+      "scope": "meta.tag.sgml.doctype.html",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "JavaScript Classes",

+      "scope": "meta.class entity.name.type.class.js",

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "JavaScript Method Declaration e.g. `constructor`",

+      "scope": "meta.method.declaration storage.type.js",

+      "settings": {

+        "foreground": "#82AAFF",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "JavaScript Terminator",

+      "scope": "terminator.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Meta Punctuation Definition",

+      "scope": "meta.js punctuation.definition.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Entity Names in Code Documentations",

+      "scope": [

+        "entity.name.type.instance.jsdoc",

+        "entity.name.type.instance.phpdoc"

+      ],

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "Other Variables in Code Documentations",

+      "scope": ["variable.other.jsdoc", "variable.other.phpdoc"],

+      "settings": {

+        "foreground": "#78ccf0"

+      }

+    },

+    {

+      "name": "JavaScript module imports and exports",

+      "scope": [

+        "variable.other.meta.import.js",

+        "meta.import.js variable.other",

+        "variable.other.meta.export.js",

+        "meta.export.js variable.other"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Variable Parameter Function",

+      "scope": "variable.parameter.function.js",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "JavaScript Variable Other ReadWrite",

+      "scope": "variable.other.readwrite.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Text nested in React tags",

+      "scope": [

+        "meta.jsx.children",

+        "meta.jsx.children.js",

+        "meta.jsx.children.tsx"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript[React] Variable Other Object",

+      "scope": [

+        "variable.other.object.js",

+        "variable.other.object.jsx",

+        "meta.object-literal.key.js",

+        "meta.object-literal.key.jsx",

+        "variable.object.property.js",

+        "variable.object.property.jsx"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Variables",

+      "scope": ["variable.js", "variable.other.js"],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Entity Name Type",

+      "scope": ["entity.name.type.js", "entity.name.type.module.js"],

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "JavaScript Support Classes",

+      "scope": "support.class.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JSON Property Names",

+      "scope": "support.type.property-name.json",

+      "settings": {

+        "foreground": "#C3E88D",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "JSON Support Constants",

+      "scope": "support.constant.json",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "JSON Property values (string)",

+      "scope": "meta.structure.dictionary.value.json string.quoted.double",

+      "settings": {

+        "foreground": "#80CBC4",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "Strings in JSON values",

+      "scope": "string.quoted.double.json punctuation.definition.string.json",

+      "settings": {

+        "foreground": "#80CBC4",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "Specific JSON Property values like null",

+      "scope": "meta.structure.dictionary.json meta.structure.dictionary.value constant.language",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Ruby Variables",

+      "scope": "variable.other.ruby",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Ruby Hashkeys",

+      "scope": "constant.language.symbol.hashkey.ruby",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "LESS Tag names",

+      "scope": "entity.name.tag.less",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Attribute Name for LESS",

+      "scope": "meta.attribute-selector.less entity.other.attribute-name.attribute",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Markup Headings",

+      "scope": "markup.heading",

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Markup Italics",

+      "scope": "markup.italic",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markup Bold",

+      "scope": "markup.bold",

+      "settings": {

+        "foreground": "#ffcb6b",

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Markup Quote + others",

+      "scope": "markup.quote",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markup Raw Code + others",

+      "scope": "markup.inline.raw",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Markup Links",

+      "scope": ["markup.underline.link", "markup.underline.link.image"],

+      "settings": {

+        "foreground": "#ff869a"

+      }

+    },

+    {

+      "name": "Markup Attributes",

+      "scope": ["markup.meta.attribute-list"],

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Markup Admonitions",

+      "scope": "markup.admonition",

+      "settings": {

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Markup Lists",

+      "scope": "markup.list.bullet",

+      "settings": {

+        "foreground": "#D9F5DD"

+      }

+    },

+    {

+      "name": "Markup Superscript and Subscript",

+      "scope": ["markup.superscript", "markup.subscript"],

+      "settings": {

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markdown Link Title and Description",

+      "scope": [

+        "string.other.link.title.markdown",

+        "string.other.link.description.markdown"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Markdown Punctuation",

+      "scope": [

+        "punctuation.definition.string.markdown",

+        "punctuation.definition.string.begin.markdown",

+        "punctuation.definition.string.end.markdown",

+        "meta.link.inline.markdown punctuation.definition.string"

+      ],

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Markdown MetaData Punctuation",

+      "scope": ["punctuation.definition.metadata.markdown"],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Markdown List Punctuation",

+      "scope": ["beginning.punctuation.definition.list.markdown"],

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Asciidoc Function",

+      "scope": "entity.name.function.asciidoc",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "PHP Variables",

+      "scope": "variable.other.php",

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "Support Classes in PHP",

+      "scope": "support.class.php",

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "Punctuations in PHP function calls",

+      "scope": "meta.function-call.php punctuation",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "PHP Global Variables",

+      "scope": "variable.other.global.php",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Declaration Punctuation in PHP Global Variables",

+      "scope": "variable.other.global.php punctuation.definition.variable",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Language Constants in Python",

+      "scope": "constant.language.python",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Python Function Parameter and Arguments",

+      "scope": [

+        "variable.parameter.function.python",

+        "meta.function-call.arguments.python"

+      ],

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "Python Function Call",

+      "scope": [

+        "meta.function-call.python",

+        "meta.function-call.generic.python"

+      ],

+      "settings": {

+        "foreground": "#B2CCD6"

+      }

+    },

+    {

+      "name": "Punctuations in Python",

+      "scope": "punctuation.python",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Decorator Functions in Python",

+      "scope": "entity.name.function.decorator.python",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Python Language Variable",

+      "scope": "source.python variable.language.special",

+      "settings": {

+        "foreground": "#8EACE3"

+      }

+    },

+    {

+      "name": "SCSS Variable",

+      "scope": [

+        "variable.scss",

+        "variable.sass",

+        "variable.parameter.url.scss",

+        "variable.parameter.url.sass"

+      ],

+      "settings": {

+        "foreground": "#DDDDDD"

+      }

+    },

+    {

+      "name": "Variables in SASS At-Rules",

+      "scope": [

+        "source.css.scss meta.at-rule variable",

+        "source.css.sass meta.at-rule variable"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Variables in SASS At-Rules",

+      "scope": [

+        "source.css.scss meta.at-rule variable",

+        "source.css.sass meta.at-rule variable"

+      ],

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "Attribute Name for SASS",

+      "scope": [

+        "meta.attribute-selector.scss entity.other.attribute-name.attribute",

+        "meta.attribute-selector.sass entity.other.attribute-name.attribute"

+      ],

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Tag names in SASS",

+      "scope": ["entity.name.tag.scss", "entity.name.tag.sass"],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "TypeScript[React] Variables and Object Properties",

+      "scope": [

+        "variable.other.readwrite.alias.ts",

+        "variable.other.readwrite.alias.tsx",

+        "variable.other.readwrite.ts",

+        "variable.other.readwrite.tsx",

+        "variable.other.object.ts",

+        "variable.other.object.tsx",

+        "variable.object.property.ts",

+        "variable.object.property.tsx",

+        "variable.other.ts",

+        "variable.other.tsx",

+        "variable.tsx",

+        "variable.ts"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "TypeScript[React] Entity Name Types",

+      "scope": ["entity.name.type.ts", "entity.name.type.tsx"],

+      "settings": {

+        "foreground": "#78ccf0"

+      }

+    },

+    {

+      "name": "TypeScript[React] Node Classes",

+      "scope": ["support.class.node.ts", "support.class.node.tsx"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "TypeScript[React] Entity Name Types as Parameters",

+      "scope": [

+        "meta.type.parameters.ts entity.name.type",

+        "meta.type.parameters.tsx entity.name.type"

+      ],

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "TypeScript[React] Import/Export Punctuations",

+      "scope": [

+        "meta.import.ts punctuation.definition.block",

+        "meta.import.tsx punctuation.definition.block",

+        "meta.export.ts punctuation.definition.block",

+        "meta.export.tsx punctuation.definition.block"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "TypeScript[React] Punctuation Decorators",

+      "scope": [

+        "meta.decorator punctuation.decorator.ts",

+        "meta.decorator punctuation.decorator.tsx"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "TypeScript[React] Punctuation Decorators",

+      "scope": "meta.tag.js meta.jsx.children.tsx",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "YAML Entity Name Tags",

+      "scope": "entity.name.tag.yaml",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "handlebars variables",

+      "scope": "variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "handlebars parameters",

+      "scope": "entity.other.attribute-name.handlebars variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "handlebars enitity attribute names",

+      "scope": "entity.other.attribute-name.handlebars",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "handlebars enitity attribute values",

+      "scope": "entity.other.attribute-value.handlebars variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "normalize font style of certain components",

+      "scope": [

+        "meta.tag.js meta.embedded.expression.js punctuation.section.embedded.begin.js",

+        "meta.tag.js meta.embedded.expression.js punctuation.section.embedded.end.js",

+        "meta.property-list.css meta.property-value.css variable.other.less",

+        "punctuation.section.embedded.begin.js.jsx",

+        "punctuation.section.embedded.end.js.jsx",

+        "meta.property-list.scss variable.scss",

+        "meta.property-list.sass variable.sass",

+        "keyword.operator.logical",

+        "keyword.operator.arithmetic",

+        "keyword.operator.bitwise",

+        "keyword.operator.increment",

+        "keyword.operator.ternary",

+        "keyword.operator.comparison",

+        "keyword.operator.assignment",

+        "keyword.operator.operator",

+        "keyword.operator.or.regexp",

+        "keyword.operator.expression.in",

+        "keyword.operator.type",

+        "punctuation.section.embedded.js",

+        "punctuation.definintion.string",

+        "punctuation"

+      ],

+      "settings": {

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "italicsify for operator mono",

+      "scope": [

+        "keyword.other.unit",

+        "support.type.property-name.css",

+        "support.type.vendored.property-name.css",

+        "support.constant.vendored.property-value.css",

+        "meta.import.ts meta.block.ts variable.other.readwrite.alias.ts",

+        "meta.import.tsx meta.block.tsx variable.other.readwrite.alias.tsx",

+        "meta.import.js variable.other",

+        "meta.export.ts meta.block.ts variable.other.readwrite.alias.ts",

+        "meta.export.tsx meta.block.tsx variable.other.readwrite.alias.tsx",

+        "meta.export.js variable.other",

+        "entity.name.function.ts",

+        "entity.name.function.tsx",

+        "support.type.primitive",

+        "entity.name.tag.yaml",

+        "entity.other.attribute-name",

+        "meta.tag.sgml.doctype.html",

+        "entity.name.tag.doctype",

+        "meta.tag.sgml.doctype",

+        "entity.name.tag.custom",

+        "source.js.jsx keyword.control.flow.js",

+        "support.type.property.css",

+        "support.function.basic_functions",

+        "constant.other.color.rgb-value.hex.css",

+        "constant.other.rgb-value.css",

+        "variable.assignment.coffee",

+        "support.function.basic_functions",

+        "keyword.operator.expression.typeof",

+        "punctuation.section.embedded",

+        "keyword.operator.type.annotation",

+        "variable.object.property.ts",

+        "variable.object.property.js",

+        "variable.object.property.jsx",

+        "variable.object.property.tsx",

+        "assignment.coffee",

+        "entity.name.type.ts",

+        "support.constant.math",

+        "meta.object-literal.key",

+        "meta.var.expr storage.type",

+        "variable.scss",

+        "variable.sass",

+        "variable.other.less",

+        "variable.parameter.url.scss",

+        "variable.parameter.url.sass",

+        "parameter",

+        "string",

+        "italic",

+        "quote",

+        "keyword",

+        "storage",

+        "language",

+        "constant.language",

+        "variable.language",

+        "type .function",

+        "type.function",

+        "storage.type.class",

+        "type.var",

+        "meta.parameter",

+        "variable.parameter",

+        "meta.parameters",

+        "keyword.control",

+        "modifier",

+        "this",

+        "comment"

+      ],

+      "settings": {

+        "fontStyle": "italic"

+      }

+    }

+  ]

+}

assets/themes/src/vscode/palenight/palenight.json 🔗

@@ -0,0 +1,1569 @@
+{

+  "name": "Palenight Theme",

+  "author": "Olaolu Olawuyi",

+  "maintainers": ["Olaolu Olawuyi <mrolaolu@gmail.com>"],

+  "type": "dark",

+  "semanticClass": "palenight",

+  "colors": {

+    "contrastActiveBorder": null,

+    "contrastBorder": "#282B3C",

+    "focusBorder": "#282B3C",

+    "foreground": "#ffffff",

+    "widget.shadow": "#232635",

+    "selection.background": "#7580B850",

+    "descriptionForeground": null,

+    "errorForeground": "#EF5350",

+    "button.background": "#7e57c2cc",

+    "button.foreground": "#ffffffcc",

+    "button.hoverBackground": "#7e57c2",

+    "dropdown.background": "#292D3E",

+    "dropdown.border": "#7e57c2",

+    "dropdown.foreground": "#ffffffcc",

+    "input.background": "#313850",

+    "input.border": "#7e57c2",

+    "input.foreground": "#ffffffcc",

+    "input.placeholderForeground": "#ffffffcc",

+    "inputOption.activeBorder": "#ffffffcc",

+    "inputValidation.errorBackground": "#ef5350f2",

+    "inputValidation.errorBorder": "#EF5350",

+    "inputValidation.infoBackground": "#64b5f6f2",

+    "inputValidation.infoBorder": "#64B5F6",

+    "inputValidation.warningBackground": "#ffca28f2",

+    "inputValidation.warningBorder": "#FFCA28",

+    "scrollbar.shadow": "#292D3E00",

+    "scrollbarSlider.activeBackground": "#694CA4cc",

+    "scrollbarSlider.background": "#694CA466",

+    "scrollbarSlider.hoverBackground": "#694CA4cc",

+    "badge.background": "#7e57c2",

+    "badge.foreground": "#ffffff",

+    "progress.background": "#7e57c2",

+    "list.activeSelectionBackground": "#7e57c2",

+    "list.activeSelectionForeground": "#ffffff",

+    "list.dropBackground": "#2E3245",

+    "list.focusBackground": "#0000002e",

+    "list.focusForeground": "#ffffff",

+    "list.highlightForeground": "#ffffff",

+    "list.hoverBackground": "#0000001a",

+    "list.hoverForeground": "#ffffff",

+    "list.inactiveSelectionBackground": "#929ac90d",

+    "list.inactiveSelectionForeground": "#929ac9",

+    "activityBar.background": "#282C3D",

+    "activityBar.dropBackground": "#7e57c2e3",

+    "activityBar.foreground": "#eeffff",

+    "activityBar.border": "#282C3D",

+    "activityBarBadge.background": "#7e57c2",

+    "activityBarBadge.foreground": "#ffffff",

+    "sideBar.background": "#292D3E",

+    "sideBar.foreground": "#6C739A",

+    "sideBar.border": "#282B3C",

+    "sideBarTitle.foreground": "#eeffff",

+    "sideBarSectionHeader.background": "#292D3E",

+    "sideBarSectionHeader.foreground": "#eeffff",

+    "editorGroup.background": "#32374C",

+    "editorGroup.border": "#2E3245",

+    "editorGroup.dropBackground": "#7e57c273",

+    "editorGroupHeader.noTabsBackground": "#32374C",

+    "editorGroupHeader.tabsBackground": "#31364a",

+    "editorGroupHeader.tabsBorder": "#262A39",

+    "tab.activeBackground": "#292D3E",

+    "tab.activeForeground": "#eeffff",

+    "tab.border": "#272B3B",

+    "tab.activeBorder": "#262A39",

+    "tab.unfocusedActiveBorder": "#262A39",

+    "tab.inactiveBackground": "#31364A",

+    "tab.inactiveForeground": "#929ac9",

+    "tab.unfocusedActiveForeground": null,

+    "tab.unfocusedInactiveForeground": null,

+    "editor.background": "#292D3E",

+    "editor.foreground": "#BFC7D5",

+    "editorLineNumber.foreground": "#4c5374",

+    "editorLineNumber.activeForeground": "#eeffff",

+    "editorCursor.foreground": "#7e57c2",

+    "editorCursor.background": null,

+    "editor.selectionBackground": "#7580B850",

+    "editor.selectionHighlightBackground": "#383D51",

+    "editor.inactiveSelectionBackground": "#7e57c25a",

+    "editor.wordHighlightBackground": "#32374D",

+    "editor.wordHighlightStrongBackground": "#2E3250",

+    "editor.findMatchBackground": "#2e3248fc",

+    "editor.findMatchHighlightBackground": "#7e57c233",

+    "editor.findRangeHighlightBackground": null,

+    "editor.hoverHighlightBackground": "#7e57c25a",

+    "editor.lineHighlightBackground": "#0003",

+    "editor.lineHighlightBorder": null,

+    "editorLink.activeForeground": null,

+    "editor.rangeHighlightBackground": "#7e57c25a",

+    "editorWhitespace.foreground": null,

+    "editorIndentGuide.background": "#4E557980",

+    "editorRuler.foreground": "#4E557980",

+    "editorCodeLens.foreground": "#FFCA28",

+    "editorBracketMatch.background": null,

+    "editorBracketMatch.border": null,

+    "editorOverviewRuler.currentContentForeground": "#7e57c2",

+    "editorOverviewRuler.incomingContentForeground": "#7e57c2",

+    "editorOverviewRuler.commonContentForeground": "#7e57c2",

+    "editorError.foreground": "#EF5350",

+    "editorError.border": null,

+    "editorWarning.foreground": "#FFCA28",

+    "editorWarning.border": null,

+    "editorGutter.background": null,

+    "editorGutter.modifiedBackground": "#e2b93d",

+    "editorGutter.addedBackground": "#9CCC65",

+    "editorGutter.deletedBackground": "#EF5350",

+    "diffEditor.insertedTextBackground": "#99b76d23",

+    "diffEditor.removedTextBackground": "#ef535033",

+    "editorWidget.background": "#31364a",

+    "editorWidget.border": null,

+    "editorSuggestWidget.background": "#2C3043",

+    "editorSuggestWidget.border": "#2B2F40",

+    "editorSuggestWidget.foreground": "#bfc7d5",

+    "editorSuggestWidget.highlightForeground": "#ffffff",

+    "editorSuggestWidget.selectedBackground": "#7e57c2",

+    "editorHoverWidget.background": "#292D3E",

+    "editorHoverWidget.border": "#7e57c2",

+    "debugExceptionWidget.background": "#292D3E",

+    "debugExceptionWidget.border": "#7e57c2",

+    "editorMarkerNavigation.background": "#31364a",

+    "editorMarkerNavigationError.background": "#EF5350",

+    "editorMarkerNavigationWarning.background": "#FFCA28",

+    "peekView.border": "#7e57c2",

+    "peekViewEditor.background": "#232635",

+    "peekViewEditor.matchHighlightBackground": "#7e57c25a",

+    "peekViewResult.background": "#2E3245",

+    "peekViewResult.fileForeground": "#eeffff",

+    "peekViewResult.lineForeground": "#eeffff",

+    "peekViewResult.matchHighlightBackground": "#7e57c25a",

+    "peekViewResult.selectionBackground": "#2E3250",

+    "peekViewResult.selectionForeground": "#eeffff",

+    "peekViewTitle.background": "#292D3E",

+    "peekViewTitleDescription.foreground": "#697098",

+    "peekViewTitleLabel.foreground": "#eeffff",

+    "merge.currentHeaderBackground": "#7e57c25a",

+    "merge.currentContentBackground": null,

+    "merge.incomingHeaderBackground": "#7e57c25a",

+    "merge.incomingContentBackground": null,

+    "merge.border": null,

+    "panel.background": "#292D3E",

+    "panel.border": "#282B3C",

+    "panelTitle.activeBorder": "#7e57c2",

+    "panelTitle.activeForeground": "#eeffff",

+    "panelTitle.inactiveForeground": "#bfc7d580",

+    "statusBar.background": "#282C3D",

+    "statusBar.foreground": "#676E95",

+    "statusBar.border": "#262A39",

+    "statusBar.debuggingBackground": "#202431",

+    "statusBar.debuggingForeground": null,

+    "statusBar.debuggingBorder": "#1F2330",

+    "statusBar.noFolderForeground": null,

+    "statusBar.noFolderBackground": "#292D3E",

+    "statusBar.noFolderBorder": "#25293A",

+    "statusBarItem.activeBackground": "#202431",

+    "statusBarItem.hoverBackground": "#202431",

+    "statusBarItem.prominentBackground": "#202431",

+    "statusBarItem.prominentHoverBackground": "#202431",

+    "titleBar.activeBackground": "#292d3e",

+    "titleBar.activeForeground": "#eeefff",

+    "titleBar.border": "#30364c",

+    "titleBar.inactiveBackground": "#30364c",

+    "titleBar.inactiveForeground": null,

+    "notifications.background": "#292D3E",

+    "notifications.foreground": "#ffffffcc",

+    "notificationLink.foreground": "#80CBC4",

+    "extensionButton.prominentForeground": "#ffffffcc",

+    "extensionButton.prominentBackground": "#7e57c2cc",

+    "extensionButton.prominentHoverBackground": "#7e57c2",

+    "pickerGroup.foreground": "#d1aaff",

+    "pickerGroup.border": "#2E3245",

+    "terminal.ansiWhite": "#ffffff",

+    "terminal.ansiBlack": "#676E95",

+    "terminal.ansiBlue": "#82AAFF",

+    "terminal.ansiCyan": "#89DDFF",

+    "terminal.ansiGreen": "#a9c77d",

+    "terminal.ansiMagenta": "#C792EA",

+    "terminal.ansiRed": "#ff5572",

+    "terminal.ansiYellow": "#FFCB6B",

+    "terminal.ansiBrightWhite": "#ffffff",

+    "terminal.ansiBrightBlack": "#676E95",

+    "terminal.ansiBrightBlue": "#82AAFF",

+    "terminal.ansiBrightCyan": "#89DDFF",

+    "terminal.ansiBrightGreen": "#C3E88D",

+    "terminal.ansiBrightMagenta": "#C792EA",

+    "terminal.ansiBrightRed": "#ff5572",

+    "terminal.ansiBrightYellow": "#FFCB6B",

+    "debugToolBar.background": "#292D3E",

+    "welcomePage.buttonBackground": null,

+    "welcomePage.buttonHoverBackground": null,

+    "walkThrough.embeddedEditorBackground": "#232635",

+    "gitDecoration.modifiedResourceForeground": "#e2c08de6",

+    "gitDecoration.deletedResourceForeground": "#EF535090",

+    "gitDecoration.untrackedResourceForeground": "#a9c77dff",

+    "gitDecoration.ignoredResourceForeground": "#69709890",

+    "gitDecoration.conflictingResourceForeground": "#FFEB95CC",

+    "editorActiveLineNumber.foreground": "#eeffff",

+    "breadcrumb.foreground": "#6c739a",

+    "breadcrumb.focusForeground": "#bfc7d5",

+    "breadcrumb.activeSelectionForeground": "#eeffff",

+    "breadcrumbPicker.background": "#292D3E"

+  },

+  "tokenColors": [

+    {

+      "name": "Global settings",

+      "settings": {

+        "background": "#292D3E",

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Comment",

+      "scope": "comment",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "String",

+      "scope": "string",

+      "settings": {

+        "foreground": "#C3E88D"

+      }

+    },

+    {

+      "name": "String Quoted",

+      "scope": "string.quoted",

+      "settings": {

+        "foreground": "#C3E88D"

+      }

+    },

+    {

+      "name": "String Unquoted",

+      "scope": "string.unquoted",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Support Constant Math",

+      "scope": "support.constant.math",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Number",

+      "scope": ["constant.numeric", "constant.character.numeric"],

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Built-in constant",

+      "scope": [

+        "constant.language",

+        "punctuation.definition.constant",

+        "variable.other.constant"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "User-defined constant",

+      "scope": ["constant.character", "constant.other"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Constant Character Escape",

+      "scope": "constant.character.escape",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "RegExp String",

+      "scope": ["string.regexp", "string.regexp keyword.other"],

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Comma in functions",

+      "scope": "meta.function punctuation.separator.comma",

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "Variable",

+      "scope": "variable",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Keyword",

+      "scope": ["punctuation.accessor", "keyword"],

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Storage",

+      "scope": [

+        "storage",

+        "storage.type",

+        "meta.var.expr storage.type",

+        "storage.type.property.js",

+        "storage.type.property.ts",

+        "storage.type.property.tsx",

+        "meta.class meta.method.declaration meta.var.expr storage.type.js"

+      ],

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Class name",

+      "scope": ["entity.name.class", "meta.class entity.name.type.class"],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Inherited class",

+      "scope": "entity.other.inherited-class",

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Function name",

+      "scope": "entity.name.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Function Parameters",

+      "scope": "variable.parameter",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "Meta Tag",

+      "scope": ["punctuation.definition.tag", "meta.tag"],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "HTML Tag names",

+      "scope": [

+        "entity.name.tag support.class.component",

+        "meta.tag.other.html",

+        "meta.tag.other.js",

+        "meta.tag.other.tsx",

+        "entity.name.tag.tsx",

+        "entity.name.tag.js",

+        "entity.name.tag",

+        "meta.tag.js",

+        "meta.tag.tsx",

+        "meta.tag.html"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Tag attribute",

+      "scope": "entity.other.attribute-name",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Entity Name Tag Custom",

+      "scope": "entity.name.tag.custom",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Library (function & constant)",

+      "scope": ["support.function", "support.constant"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Support Constant Property Value meta",

+      "scope": "support.constant.meta.property-value",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Library class/type",

+      "scope": ["support.type", "support.class"],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Support Variable DOM",

+      "scope": "support.variable.dom",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Invalid",

+      "scope": "invalid",

+      "settings": {

+        "background": "#ff2c83",

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Invalid deprecated",

+      "scope": "invalid.deprecated",

+      "settings": {

+        "foreground": "#ffffff",

+        "background": "#d3423e"

+      }

+    },

+    {

+      "name": "Keyword Operator",

+      "scope": "keyword.operator",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Relational",

+      "scope": "keyword.operator.relational",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Keyword Operator Assignment",

+      "scope": "keyword.operator.assignment",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Double-Slashed Comment",

+      "scope": "comment.line.double-slash",

+      "settings": {

+        "foreground": "#697098"

+      }

+    },

+    {

+      "name": "Object",

+      "scope": "object",

+      "settings": {

+        "foreground": "#cdebf7"

+      }

+    },

+    {

+      "name": "Null",

+      "scope": "constant.language.null",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Meta Brace",

+      "scope": "meta.brace",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Meta Delimiter Period",

+      "scope": "meta.delimiter.period",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Punctuation Definition String",

+      "scope": "punctuation.definition.string",

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Boolean",

+      "scope": "constant.language.boolean",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Object Comma",

+      "scope": "object.comma",

+      "settings": {

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Variable Parameter Function",

+      "scope": "variable.parameter.function",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Support Type Property Name & entity name tags",

+      "scope": [

+        "support.type.vendored.property-name",

+        "support.constant.vendored.property-value",

+        "support.type.property-name",

+        "meta.property-list entity.name.tag"

+      ],

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Entity Name tag reference in stylesheets",

+      "scope": "meta.property-list entity.name.tag.reference",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Constant Other Color RGB Value Punctuation Definition Constant",

+      "scope": "constant.other.color.rgb-value punctuation.definition.constant",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Constant Other Color",

+      "scope": "constant.other.color",

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Keyword Other Unit",

+      "scope": "keyword.other.unit",

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Meta Selector",

+      "scope": "meta.selector",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Entity Other Attribute Name Id",

+      "scope": "entity.other.attribute-name.id",

+      "settings": {

+        "foreground": "#FAD430"

+      }

+    },

+    {

+      "name": "Meta Property Name",

+      "scope": "meta.property-name",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Doctypes",

+      "scope": ["entity.name.tag.doctype", "meta.tag.sgml.doctype"],

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Punctuation Definition Parameters",

+      "scope": "punctuation.definition.parameters",

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Keyword Control Operator",

+      "scope": "keyword.control.operator",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Logical",

+      "scope": "keyword.operator.logical",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Variable Instances",

+      "scope": [

+        "variable.instance",

+        "variable.other.instance",

+        "variable.reaedwrite.instance",

+        "variable.other.readwrite.instance"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Variable Property Other",

+      "scope": ["variable.other.property", "variable.other.object.property"],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Entity Name Function",

+      "scope": "entity.name.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Keyword Operator Comparison",

+      "scope": "keyword.operator.comparison",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Support Constant, `new` keyword, Special Method Keyword",

+      "scope": [

+        "support.constant",

+        "keyword.other.special-method",

+        "keyword.other.new"

+      ],

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Support Function",

+      "scope": "support.function",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Invalid Broken",

+      "scope": "invalid.broken",

+      "settings": {

+        "foreground": "#020e14",

+        "background": "#F78C6C"

+      }

+    },

+    {

+      "name": "Invalid Unimplemented",

+      "scope": "invalid.unimplemented",

+      "settings": {

+        "background": "#8BD649",

+        "foreground": "#ffffff"

+      }

+    },

+    {

+      "name": "Invalid Illegal",

+      "scope": "invalid.illegal",

+      "settings": {

+        "foreground": "#ffffff",

+        "background": "#ec5f67"

+      }

+    },

+    {

+      "name": "Language Variable",

+      "scope": "variable.language",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Support Variable Property",

+      "scope": "support.variable.property",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "Variable Function",

+      "scope": "variable.function",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Variable Interpolation",

+      "scope": "variable.interpolation",

+      "settings": {

+        "foreground": "#ec5f67"

+      }

+    },

+    {

+      "name": "Meta Function Call",

+      "scope": "meta.function-call",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Punctuation Section Embedded",

+      "scope": "punctuation.section.embedded",

+      "settings": {

+        "foreground": "#d3423e"

+      }

+    },

+    {

+      "name": "Punctuation Tweaks",

+      "scope": [

+        "punctuation.terminator.expression",

+        "punctuation.definition.arguments",

+        "punctuation.definition.array",

+        "punctuation.section.array",

+        "meta.array"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "More Punctuation Tweaks",

+      "scope": [

+        "punctuation.definition.list.begin",

+        "punctuation.definition.list.end",

+        "punctuation.separator.arguments",

+        "punctuation.definition.list"

+      ],

+      "settings": {

+        "foreground": "#d9f5dd"

+      }

+    },

+    {

+      "name": "Template Strings",

+      "scope": "string.template meta.template.expression",

+      "settings": {

+        "foreground": "#d3423e"

+      }

+    },

+    {

+      "name": "Backtics(``) in Template Strings",

+      "scope": "string.template punctuation.definition.string",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Italics",

+      "scope": "italic",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Bold",

+      "scope": "bold",

+      "settings": {

+        "foreground": "#ffcb6b",

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Quote",

+      "scope": "quote",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Raw Code",

+      "scope": "raw",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "CoffeScript Variable Assignment",

+      "scope": "variable.assignment.coffee",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "CoffeScript Parameter Function",

+      "scope": "variable.parameter.function.coffee",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "CoffeeScript Assignments",

+      "scope": "variable.assignment.coffee",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "C# Readwrite Variables",

+      "scope": "variable.other.readwrite.cs",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "C# Classes & Storage types",

+      "scope": ["entity.name.type.class.cs", "storage.type.cs"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "C# Namespaces",

+      "scope": "entity.name.type.namespace.cs",

+      "settings": {

+        "foreground": "#B2CCD6"

+      }

+    },

+    {

+      "name": "Tag names in Stylesheets",

+      "scope": [

+        "entity.name.tag.css",

+        "entity.name.tag.less",

+        "entity.name.tag.custom.css"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Wildcard(*) selector in Stylesheets",

+      "scope": [

+        "entity.name.tag.wildcard.css",

+        "entity.name.tag.wildcard.less",

+        "entity.name.tag.wildcard.scss",

+        "entity.name.tag.wildcard.sass"

+      ],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "(C|SC|SA|LE)SS property value unit",

+      "scope": [

+        "keyword.other.unit.css",

+        "constant.length.units.css",

+        "keyword.other.unit.less",

+        "constant.length.units.less",

+        "keyword.other.unit.scss",

+        "constant.length.units.scss",

+        "keyword.other.unit.sass",

+        "constant.length.units.sass"

+      ],

+      "settings": {

+        "foreground": "#FFEB95"

+      }

+    },

+    {

+      "name": "Attribute Name for CSS",

+      "scope": "meta.attribute-selector.css entity.other.attribute-name.attribute",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "punctuations in styled components",

+      "scope": [

+        "source.js source.css meta.property-list",

+        "source.js source.css punctuation.section",

+        "source.js source.css punctuation.terminator.rule",

+        "source.js source.css punctuation.definition.entity.end.bracket",

+        "source.js source.css punctuation.definition.entity.begin.bracket",

+        "source.js source.css punctuation.separator.key-value",

+        "source.js source.css punctuation.definition.attribute-selector",

+        "source.js source.css meta.property-list",

+        "source.js source.css meta.property-list punctuation.separator.comma",

+        "source.ts source.css punctuation.section",

+        "source.ts source.css punctuation.terminator.rule",

+        "source.ts source.css punctuation.definition.entity.end.bracket",

+        "source.ts source.css punctuation.definition.entity.begin.bracket",

+        "source.ts source.css punctuation.separator.key-value",

+        "source.ts source.css punctuation.definition.attribute-selector",

+        "source.ts source.css meta.property-list",

+        "source.ts source.css meta.property-list punctuation.separator.comma"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Elixir Classes",

+      "scope": [

+        "source.elixir support.type.elixir",

+        "source.elixir meta.module.elixir entity.name.class.elixir"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Elixir Functions",

+      "scope": "source.elixir entity.name.function",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Elixir Constants",

+      "scope": [

+        "source.elixir constant.other.symbol.elixir",

+        "source.elixir constant.other.keywords.elixir"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Elixir String Punctuations",

+      "scope": "source.elixir punctuation.definition.string",

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Elixir",

+      "scope": [

+        "source.elixir variable.other.readwrite.module.elixir",

+        "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"

+      ],

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Elixir Binary Punctuations",

+      "scope": "source.elixir .punctuation.binary.elixir",

+      "settings": {

+        "foreground": "#c792ea"

+      }

+    },

+    {

+      "name": "Go Function Calls",

+      "scope": "source.go meta.function-call.go",

+      "settings": {

+        "foreground": "#DDDDDD"

+      }

+    },

+    {

+      "name": "GraphQL Variables",

+      "scope": "variable.qraphql",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "ID Attribute Name in HTML",

+      "scope": "entity.other.attribute-name.id.html",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "HTML Punctuation Definition Tag",

+      "scope": "punctuation.definition.tag.html",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "HTML Doctype",

+      "scope": "meta.tag.sgml.doctype.html",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "JavaScript Classes",

+      "scope": "meta.class entity.name.type.class.js",

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "JavaScript Method Declaration e.g. `constructor`",

+      "scope": "meta.method.declaration storage.type.js",

+      "settings": {

+        "foreground": "#82AAFF",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "JavaScript Terminator",

+      "scope": "terminator.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Meta Punctuation Definition",

+      "scope": "meta.js punctuation.definition.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Entity Names in Code Documentations",

+      "scope": [

+        "entity.name.type.instance.jsdoc",

+        "entity.name.type.instance.phpdoc"

+      ],

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "Other Variables in Code Documentations",

+      "scope": ["variable.other.jsdoc", "variable.other.phpdoc"],

+      "settings": {

+        "foreground": "#78ccf0"

+      }

+    },

+    {

+      "name": "JavaScript module imports and exports",

+      "scope": [

+        "variable.other.meta.import.js",

+        "meta.import.js variable.other",

+        "variable.other.meta.export.js",

+        "meta.export.js variable.other"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Variable Parameter Function",

+      "scope": "variable.parameter.function.js",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "JavaScript Variable Other ReadWrite",

+      "scope": "variable.other.readwrite.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Text nested in React tags",

+      "scope": [

+        "meta.jsx.children",

+        "meta.jsx.children.js",

+        "meta.jsx.children.tsx"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript[React] Variable Other Object",

+      "scope": [

+        "variable.other.object.js",

+        "variable.other.object.jsx",

+        "meta.object-literal.key.js",

+        "meta.object-literal.key.jsx",

+        "variable.object.property.js",

+        "variable.object.property.jsx"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Variables",

+      "scope": ["variable.js", "variable.other.js"],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JavaScript Entity Name Type",

+      "scope": ["entity.name.type.js", "entity.name.type.module.js"],

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "JavaScript Support Classes",

+      "scope": "support.class.js",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "JSON Property Names",

+      "scope": "support.type.property-name.json",

+      "settings": {

+        "foreground": "#C3E88D",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "JSON Support Constants",

+      "scope": "support.constant.json",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "JSON Property values (string)",

+      "scope": "meta.structure.dictionary.value.json string.quoted.double",

+      "settings": {

+        "foreground": "#80CBC4",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "Strings in JSON values",

+      "scope": "string.quoted.double.json punctuation.definition.string.json",

+      "settings": {

+        "foreground": "#80CBC4",

+        "fontStyle": "normal"

+      }

+    },

+    {

+      "name": "Specific JSON Property values like null",

+      "scope": "meta.structure.dictionary.json meta.structure.dictionary.value constant.language",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Ruby Variables",

+      "scope": "variable.other.ruby",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Ruby Hashkeys",

+      "scope": "constant.language.symbol.hashkey.ruby",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "LESS Tag names",

+      "scope": "entity.name.tag.less",

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Attribute Name for LESS",

+      "scope": "meta.attribute-selector.less entity.other.attribute-name.attribute",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Markup Headings",

+      "scope": "markup.heading",

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Markup Italics",

+      "scope": "markup.italic",

+      "settings": {

+        "foreground": "#c792ea",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markup Bold",

+      "scope": "markup.bold",

+      "settings": {

+        "foreground": "#ffcb6b",

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Markup Quote + others",

+      "scope": "markup.quote",

+      "settings": {

+        "foreground": "#697098",

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markup Raw Code + others",

+      "scope": "markup.inline.raw",

+      "settings": {

+        "foreground": "#80CBC4"

+      }

+    },

+    {

+      "name": "Markup Links",

+      "scope": ["markup.underline.link", "markup.underline.link.image"],

+      "settings": {

+        "foreground": "#ff869a"

+      }

+    },

+    {

+      "name": "Markup Attributes",

+      "scope": ["markup.meta.attribute-list"],

+      "settings": {

+        "foreground": "#a9c77d"

+      }

+    },

+    {

+      "name": "Markup Admonitions",

+      "scope": "markup.admonition",

+      "settings": {

+        "fontStyle": "bold"

+      }

+    },

+    {

+      "name": "Markup Lists",

+      "scope": "markup.list.bullet",

+      "settings": {

+        "foreground": "#D9F5DD"

+      }

+    },

+    {

+      "name": "Markup Superscript and Subscript",

+      "scope": ["markup.superscript", "markup.subscript"],

+      "settings": {

+        "fontStyle": "italic"

+      }

+    },

+    {

+      "name": "Markdown Link Title and Description",

+      "scope": [

+        "string.other.link.title.markdown",

+        "string.other.link.description.markdown"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Markdown Punctuation",

+      "scope": [

+        "punctuation.definition.string.markdown",

+        "punctuation.definition.string.begin.markdown",

+        "punctuation.definition.string.end.markdown",

+        "meta.link.inline.markdown punctuation.definition.string"

+      ],

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Markdown MetaData Punctuation",

+      "scope": ["punctuation.definition.metadata.markdown"],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "Markdown List Punctuation",

+      "scope": ["beginning.punctuation.definition.list.markdown"],

+      "settings": {

+        "foreground": "#82b1ff"

+      }

+    },

+    {

+      "name": "Asciidoc Function",

+      "scope": "entity.name.function.asciidoc",

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "PHP Variables",

+      "scope": "variable.other.php",

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "Support Classes in PHP",

+      "scope": "support.class.php",

+      "settings": {

+        "foreground": "#ffcb8b"

+      }

+    },

+    {

+      "name": "Punctuations in PHP function calls",

+      "scope": "meta.function-call.php punctuation",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "PHP Global Variables",

+      "scope": "variable.other.global.php",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Declaration Punctuation in PHP Global Variables",

+      "scope": "variable.other.global.php punctuation.definition.variable",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Language Constants in Python",

+      "scope": "constant.language.python",

+      "settings": {

+        "foreground": "#ff5874"

+      }

+    },

+    {

+      "name": "Python Function Parameter and Arguments",

+      "scope": [

+        "variable.parameter.function.python",

+        "meta.function-call.arguments.python"

+      ],

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "Python Function Call",

+      "scope": [

+        "meta.function-call.python",

+        "meta.function-call.generic.python"

+      ],

+      "settings": {

+        "foreground": "#B2CCD6"

+      }

+    },

+    {

+      "name": "Punctuations in Python",

+      "scope": "punctuation.python",

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "Decorator Functions in Python",

+      "scope": "entity.name.function.decorator.python",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "Python Language Variable",

+      "scope": "source.python variable.language.special",

+      "settings": {

+        "foreground": "#8EACE3"

+      }

+    },

+    {

+      "name": "SCSS Variable",

+      "scope": [

+        "variable.scss",

+        "variable.sass",

+        "variable.parameter.url.scss",

+        "variable.parameter.url.sass"

+      ],

+      "settings": {

+        "foreground": "#DDDDDD"

+      }

+    },

+    {

+      "name": "Variables in SASS At-Rules",

+      "scope": [

+        "source.css.scss meta.at-rule variable",

+        "source.css.sass meta.at-rule variable"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "Variables in SASS At-Rules",

+      "scope": [

+        "source.css.scss meta.at-rule variable",

+        "source.css.sass meta.at-rule variable"

+      ],

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "Attribute Name for SASS",

+      "scope": [

+        "meta.attribute-selector.scss entity.other.attribute-name.attribute",

+        "meta.attribute-selector.sass entity.other.attribute-name.attribute"

+      ],

+      "settings": {

+        "foreground": "#F78C6C"

+      }

+    },

+    {

+      "name": "Tag names in SASS",

+      "scope": ["entity.name.tag.scss", "entity.name.tag.sass"],

+      "settings": {

+        "foreground": "#ff5572"

+      }

+    },

+    {

+      "name": "TypeScript[React] Variables and Object Properties",

+      "scope": [

+        "variable.other.readwrite.alias.ts",

+        "variable.other.readwrite.alias.tsx",

+        "variable.other.readwrite.ts",

+        "variable.other.readwrite.tsx",

+        "variable.other.object.ts",

+        "variable.other.object.tsx",

+        "variable.object.property.ts",

+        "variable.object.property.tsx",

+        "variable.other.ts",

+        "variable.other.tsx",

+        "variable.tsx",

+        "variable.ts"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "TypeScript[React] Entity Name Types",

+      "scope": ["entity.name.type.ts", "entity.name.type.tsx"],

+      "settings": {

+        "foreground": "#78ccf0"

+      }

+    },

+    {

+      "name": "TypeScript[React] Node Classes",

+      "scope": ["support.class.node.ts", "support.class.node.tsx"],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "TypeScript[React] Entity Name Types as Parameters",

+      "scope": [

+        "meta.type.parameters.ts entity.name.type",

+        "meta.type.parameters.tsx entity.name.type"

+      ],

+      "settings": {

+        "foreground": "#eeffff"

+      }

+    },

+    {

+      "name": "TypeScript[React] Import/Export Punctuations",

+      "scope": [

+        "meta.import.ts punctuation.definition.block",

+        "meta.import.tsx punctuation.definition.block",

+        "meta.export.ts punctuation.definition.block",

+        "meta.export.tsx punctuation.definition.block"

+      ],

+      "settings": {

+        "foreground": "#bfc7d5"

+      }

+    },

+    {

+      "name": "TypeScript[React] Punctuation Decorators",

+      "scope": [

+        "meta.decorator punctuation.decorator.ts",

+        "meta.decorator punctuation.decorator.tsx"

+      ],

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "TypeScript[React] Punctuation Decorators",

+      "scope": "meta.tag.js meta.jsx.children.tsx",

+      "settings": {

+        "foreground": "#82AAFF"

+      }

+    },

+    {

+      "name": "YAML Entity Name Tags",

+      "scope": "entity.name.tag.yaml",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "handlebars variables",

+      "scope": "variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#bec5d4"

+      }

+    },

+    {

+      "name": "handlebars parameters",

+      "scope": "entity.other.attribute-name.handlebars variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#ffcb6b"

+      }

+    },

+    {

+      "name": "handlebars enitity attribute names",

+      "scope": "entity.other.attribute-name.handlebars",

+      "settings": {

+        "foreground": "#89DDFF"

+      }

+    },

+    {

+      "name": "handlebars enitity attribute values",

+      "scope": "entity.other.attribute-value.handlebars variable.parameter.handlebars",

+      "settings": {

+        "foreground": "#7986E7"

+      }

+    },

+    {

+      "name": "normalize font style of certain components",

+      "scope": [

+        "meta.tag.js meta.embedded.expression.js punctuation.section.embedded.begin.js",

+        "meta.tag.js meta.embedded.expression.js punctuation.section.embedded.end.js",

+        "meta.property-list.css meta.property-value.css variable.other.less",

+        "punctuation.section.embedded.begin.js.jsx",

+        "punctuation.section.embedded.end.js.jsx",

+        "meta.property-list.scss variable.scss",

+        "meta.property-list.sass variable.sass",

+        "keyword.operator.logical",

+        "keyword.operator.arithmetic",

+        "keyword.operator.bitwise",

+        "keyword.operator.increment",

+        "keyword.operator.ternary",

+        "keyword.operator.comparison",

+        "keyword.operator.assignment",

+        "keyword.operator.operator",

+        "keyword.operator.or.regexp",

+        "keyword.operator.expression.in",

+        "keyword.operator.type",

+        "punctuation.section.embedded.js",

+        "punctuation.definintion.string",

+        "punctuation"

+      ],

+      "settings": {

+        "fontStyle": "normal"

+      }

+    }

+  ]

+}

assets/themes/src/vscode/rose-pine/LICENSE 🔗

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2021 Rosé Pine
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vscode/rose-pine/family.json 🔗

@@ -0,0 +1,21 @@
+{
+    "name": "Rose Pine",
+    "author": "Rosé Pine",
+    "themes": [
+        {
+            "name": "Rose Pine",
+            "file_name": "rose-pine.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Rose Moon",
+            "file_name": "rose-pine-moon.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Rose Pine Dawn",
+            "file_name": "rose-pine-dawn.json",
+            "appearance": "light"
+        }
+    ]
+}

assets/themes/src/vscode/rose-pine/rose-pine-dawn.json 🔗

@@ -0,0 +1,680 @@
+{
+    "name": "Rosé Pine Dawn",
+    "type": "light",
+    "colors": {
+        "activityBar.activeBorder": "#575279",
+        "activityBar.background": "#faf4ed",
+        "activityBar.dropBorder": "#f2e9e1",
+        "activityBar.foreground": "#575279",
+        "activityBar.inactiveForeground": "#797593",
+        "activityBarBadge.background": "#d7827e",
+        "activityBarBadge.foreground": "#faf4ed",
+        "badge.background": "#d7827e",
+        "badge.foreground": "#faf4ed",
+        "banner.background": "#fffaf3",
+        "banner.foreground": "#575279",
+        "banner.iconForeground": "#797593",
+        "breadcrumb.activeSelectionForeground": "#d7827e",
+        "breadcrumb.background": "#faf4ed",
+        "breadcrumb.focusForeground": "#797593",
+        "breadcrumb.foreground": "#9893a5",
+        "breadcrumbPicker.background": "#fffaf3",
+        "button.background": "#d7827e",
+        "button.foreground": "#faf4ed",
+        "button.hoverBackground": "#d7827ee6",
+        "button.secondaryBackground": "#fffaf3",
+        "button.secondaryForeground": "#575279",
+        "button.secondaryHoverBackground": "#f2e9e1",
+        "charts.blue": "#56949f",
+        "charts.foreground": "#575279",
+        "charts.green": "#286983",
+        "charts.lines": "#797593",
+        "charts.orange": "#d7827e",
+        "charts.purple": "#907aa9",
+        "charts.red": "#b4637a",
+        "charts.yellow": "#ea9d34",
+        "checkbox.background": "#fffaf3",
+        "checkbox.border": "#6e6a8614",
+        "checkbox.foreground": "#575279",
+        "debugExceptionWidget.background": "#fffaf3",
+        "debugExceptionWidget.border": "#6e6a8614",
+        "debugIcon.breakpointCurrentStackframeForeground": "#797593",
+        "debugIcon.breakpointDisabledForeground": "#797593",
+        "debugIcon.breakpointForeground": "#797593",
+        "debugIcon.breakpointStackframeForeground": "#797593",
+        "debugIcon.breakpointUnverifiedForeground": "#797593",
+        "debugIcon.continueForeground": "#797593",
+        "debugIcon.disconnectForeground": "#797593",
+        "debugIcon.pauseForeground": "#797593",
+        "debugIcon.restartForeground": "#797593",
+        "debugIcon.startForeground": "#797593",
+        "debugIcon.stepBackForeground": "#797593",
+        "debugIcon.stepIntoForeground": "#797593",
+        "debugIcon.stepOutForeground": "#797593",
+        "debugIcon.stepOverForeground": "#797593",
+        "debugIcon.stopForeground": "#b4637a",
+        "debugToolBar.background": "#fffaf3",
+        "debugToolBar.border": "#f2e9e1",
+        "descriptionForeground": "#797593",
+        "diffEditor.border": "#f2e9e1",
+        "diffEditor.diagonalFill": "#6e6a8626",
+        "diffEditor.insertedLineBackground": "#56949f26",
+        "diffEditor.insertedTextBackground": "#56949f26",
+        "diffEditor.removedLineBackground": "#b4637a26",
+        "diffEditor.removedTextBackground": "#b4637a26",
+        "diffEditorOverview.insertedForeground": "#56949f80",
+        "diffEditorOverview.removedForeground": "#b4637a80",
+        "dropdown.background": "#fffaf3",
+        "dropdown.border": "#6e6a8614",
+        "dropdown.foreground": "#575279",
+        "dropdown.listBackground": "#fffaf3",
+        "editor.background": "#faf4ed",
+        "editor.findMatchBackground": "#6e6a8626",
+        "editor.findMatchHighlightBackground": "#6e6a8626",
+        "editor.findRangeHighlightBackground": "#6e6a8626",
+        "editor.findRangeHighlightBorder": "#000000",
+        "editor.focusedStackFrameHighlightBackground": "#6e6a8614",
+        "editor.foldBackground": "#fffaf3",
+        "editor.foreground": "#575279",
+        "editor.hoverHighlightBackground": "#000000",
+        "editor.inactiveSelectionBackground": "#6e6a860d",
+        "editor.inlineValuesBackground": "#000000",
+        "editor.inlineValuesForeground": "#797593",
+        "editor.lineHighlightBackground": "#6e6a860d",
+        "editor.lineHighlightBorder": "#000000",
+        "editor.linkedEditingBackground": "#fffaf3",
+        "editor.rangeHighlightBackground": "#6e6a860d",
+        "editor.selectionBackground": "#6e6a8614",
+        "editor.selectionForeground": "#575279",
+        "editor.selectionHighlightBackground": "#6e6a8614",
+        "editor.selectionHighlightBorder": "#faf4ed",
+        "editor.snippetFinalTabstopHighlightBackground": "#6e6a8614",
+        "editor.snippetFinalTabstopHighlightBorder": "#fffaf3",
+        "editor.snippetTabstopHighlightBackground": "#6e6a8614",
+        "editor.snippetTabstopHighlightBorder": "#fffaf3",
+        "editor.stackFrameHighlightBackground": "#6e6a8614",
+        "editor.symbolHighlightBackground": "#6e6a8614",
+        "editor.symbolHighlightBorder": "#000000",
+        "editor.wordHighlightBackground": "#6e6a8614",
+        "editor.wordHighlightBorder": "#000000",
+        "editor.wordHighlightStrongBackground": "#6e6a8614",
+        "editor.wordHighlightStrongBorder": "#6e6a8614",
+        "editorBracketHighlight.foreground1": "#b4637a80",
+        "editorBracketHighlight.foreground2": "#28698380",
+        "editorBracketHighlight.foreground3": "#ea9d3480",
+        "editorBracketHighlight.foreground4": "#56949f80",
+        "editorBracketHighlight.foreground5": "#d7827e80",
+        "editorBracketHighlight.foreground6": "#907aa980",
+        "editorBracketMatch.background": "#000000",
+        "editorBracketMatch.border": "#797593",
+        "editorBracketPairGuide.activeBackground1": "#286983",
+        "editorBracketPairGuide.activeBackground2": "#d7827e",
+        "editorBracketPairGuide.activeBackground3": "#907aa9",
+        "editorBracketPairGuide.activeBackground4": "#56949f",
+        "editorBracketPairGuide.activeBackground5": "#ea9d34",
+        "editorBracketPairGuide.activeBackground6": "#b4637a",
+        "editorBracketPairGuide.background1": "#28698380",
+        "editorBracketPairGuide.background2": "#d7827e80",
+        "editorBracketPairGuide.background3": "#907aa980",
+        "editorBracketPairGuide.background4": "#56949f80",
+        "editorBracketPairGuide.background5": "#ea9d3480",
+        "editorBracketPairGuide.background6": "#b4637a80",
+        "editorCodeLens.foreground": "#d7827e",
+        "editorCursor.background": "#575279",
+        "editorCursor.foreground": "#9893a5",
+        "editorError.border": "#000000",
+        "editorError.foreground": "#b4637a",
+        "editorGhostText.foreground": "#797593",
+        "editorGroup.border": "#000000",
+        "editorGroup.dropBackground": "#fffaf3",
+        "editorGroup.emptyBackground": "#000000",
+        "editorGroup.focusedEmptyBorder": "#000000",
+        "editorGroupHeader.noTabsBackground": "#000000",
+        "editorGroupHeader.tabsBackground": "#000000",
+        "editorGroupHeader.tabsBorder": "#000000",
+        "editorGutter.addedBackground": "#56949f",
+        "editorGutter.background": "#faf4ed",
+        "editorGutter.commentRangeForeground": "#797593",
+        "editorGutter.deletedBackground": "#b4637a",
+        "editorGutter.foldingControlForeground": "#907aa9",
+        "editorGutter.modifiedBackground": "#d7827e",
+        "editorHint.border": "#000000",
+        "editorHint.foreground": "#797593",
+        "editorHoverWidget.background": "#fffaf3",
+        "editorHoverWidget.border": "#9893a580",
+        "editorHoverWidget.foreground": "#797593",
+        "editorHoverWidget.highlightForeground": "#575279",
+        "editorHoverWidget.statusBarBackground": "#000000",
+        "editorIndentGuide.activeBackground": "#9893a5",
+        "editorIndentGuide.background": "#6e6a8626",
+        "editorInfo.border": "#f2e9e1",
+        "editorInfo.foreground": "#56949f",
+        "editorInlayHint.background": "#f2e9e1",
+        "editorInlayHint.foreground": "#797593",
+        "editorInlayHint.parameterBackground": "#f2e9e1",
+        "editorInlayHint.parameterForeground": "#907aa9",
+        "editorInlayHint.typeBackground": "#f2e9e1",
+        "editorInlayHint.typeForeground": "#56949f",
+        "editorLightBulb.foreground": "#286983",
+        "editorLightBulbAutoFix.foreground": "#d7827e",
+        "editorLineNumber.activeForeground": "#575279",
+        "editorLineNumber.foreground": "#797593",
+        "editorLink.activeForeground": "#d7827e",
+        "editorMarkerNavigation.background": "#fffaf3",
+        "editorMarkerNavigationError.background": "#fffaf3",
+        "editorMarkerNavigationInfo.background": "#fffaf3",
+        "editorMarkerNavigationWarning.background": "#fffaf3",
+        "editorOverviewRuler.addedForeground": "#56949f80",
+        "editorOverviewRuler.background": "#faf4ed",
+        "editorOverviewRuler.border": "#6e6a8626",
+        "editorOverviewRuler.bracketMatchForeground": "#797593",
+        "editorOverviewRuler.commonContentForeground": "#6e6a860d",
+        "editorOverviewRuler.currentContentForeground": "#6e6a8614",
+        "editorOverviewRuler.deletedForeground": "#b4637a80",
+        "editorOverviewRuler.errorForeground": "#b4637a80",
+        "editorOverviewRuler.findMatchForeground": "#6e6a8626",
+        "editorOverviewRuler.incomingContentForeground": "#907aa980",
+        "editorOverviewRuler.infoForeground": "#56949f80",
+        "editorOverviewRuler.modifiedForeground": "#d7827e80",
+        "editorOverviewRuler.rangeHighlightForeground": "#6e6a8626",
+        "editorOverviewRuler.selectionHighlightForeground": "#6e6a8626",
+        "editorOverviewRuler.warningForeground": "#ea9d3480",
+        "editorOverviewRuler.wordHighlightForeground": "#6e6a8614",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8626",
+        "editorPane.background": "#000000",
+        "editorRuler.foreground": "#6e6a8626",
+        "editorSuggestWidget.background": "#fffaf3",
+        "editorSuggestWidget.border": "#000000",
+        "editorSuggestWidget.focusHighlightForeground": "#d7827e",
+        "editorSuggestWidget.foreground": "#797593",
+        "editorSuggestWidget.highlightForeground": "#d7827e",
+        "editorSuggestWidget.selectedBackground": "#6e6a8614",
+        "editorSuggestWidget.selectedForeground": "#575279",
+        "editorSuggestWidget.selectedIconForeground": "#575279",
+        "editorUnnecessaryCode.border": "#000000",
+        "editorUnnecessaryCode.opacity": "#57527980",
+        "editorWarning.border": "#000000",
+        "editorWarning.foreground": "#ea9d34",
+        "editorWhitespace.foreground": "#9893a5",
+        "editorWidget.background": "#fffaf3",
+        "editorWidget.border": "#f2e9e1",
+        "editorWidget.foreground": "#797593",
+        "editorWidget.resizeBorder": "#9893a5",
+        "errorForeground": "#b4637a",
+        "extensionBadge.remoteBackground": "#907aa9",
+        "extensionBadge.remoteForeground": "#faf4ed",
+        "extensionButton.prominentBackground": "#d7827e",
+        "extensionButton.prominentForeground": "#faf4ed",
+        "extensionButton.prominentHoverBackground": "#d7827ee6",
+        "extensionIcon.preReleaseForeground": "#286983",
+        "extensionIcon.starForeground": "#d7827e",
+        "extensionIcon.verifiedForeground": "#907aa9",
+        "focusBorder": "#6e6a8614",
+        "foreground": "#575279",
+        "gitDecoration.addedResourceForeground": "#56949f",
+        "gitDecoration.conflictingResourceForeground": "#b4637a",
+        "gitDecoration.deletedResourceForeground": "#797593",
+        "gitDecoration.ignoredResourceForeground": "#9893a5",
+        "gitDecoration.modifiedResourceForeground": "#d7827e",
+        "gitDecoration.renamedResourceForeground": "#286983",
+        "gitDecoration.stageDeletedResourceForeground": "#b4637a",
+        "gitDecoration.stageModifiedResourceForeground": "#907aa9",
+        "gitDecoration.submoduleResourceForeground": "#ea9d34",
+        "gitDecoration.untrackedResourceForeground": "#ea9d34",
+        "icon.foreground": "#797593",
+        "input.background": "#f2e9e180",
+        "input.border": "#6e6a8614",
+        "input.foreground": "#575279",
+        "input.placeholderForeground": "#797593",
+        "inputOption.activeBackground": "#d7827e26",
+        "inputOption.activeForeground": "#d7827e",
+        "inputValidation.errorBackground": "#fffaf3",
+        "inputValidation.errorBorder": "#6e6a8626",
+        "inputValidation.errorForeground": "#b4637a",
+        "inputValidation.infoBackground": "#fffaf3",
+        "inputValidation.infoBorder": "#6e6a8626",
+        "inputValidation.infoForeground": "#56949f",
+        "inputValidation.warningBackground": "#fffaf3",
+        "inputValidation.warningBorder": "#6e6a8626",
+        "inputValidation.warningForeground": "#56949f80",
+        "keybindingLabel.background": "#f2e9e1",
+        "keybindingLabel.border": "#6e6a8626",
+        "keybindingLabel.bottomBorder": "#6e6a8626",
+        "keybindingLabel.foreground": "#907aa9",
+        "keybindingTable.headerBackground": "#f2e9e1",
+        "keybindingTable.rowsBackground": "#fffaf3",
+        "list.activeSelectionBackground": "#6e6a8614",
+        "list.activeSelectionForeground": "#575279",
+        "list.deemphasizedForeground": "#797593",
+        "list.dropBackground": "#fffaf3",
+        "list.errorForeground": "#b4637a",
+        "list.filterMatchBackground": "#fffaf3",
+        "list.filterMatchBorder": "#d7827e",
+        "list.focusBackground": "#6e6a8626",
+        "list.focusForeground": "#575279",
+        "list.focusOutline": "#6e6a8614",
+        "list.highlightForeground": "#d7827e",
+        "list.hoverBackground": "#6e6a860d",
+        "list.hoverForeground": "#575279",
+        "list.inactiveFocusBackground": "#6e6a860d",
+        "list.inactiveSelectionBackground": "#fffaf3",
+        "list.inactiveSelectionForeground": "#575279",
+        "list.invalidItemForeground": "#b4637a",
+        "list.warningForeground": "#ea9d34",
+        "listFilterWidget.background": "#fffaf3",
+        "listFilterWidget.noMatchesOutline": "#b4637a",
+        "listFilterWidget.outline": "#f2e9e1",
+        "menu.background": "#fffaf3",
+        "menu.border": "#6e6a860d",
+        "menu.foreground": "#575279",
+        "menu.selectionBackground": "#6e6a8614",
+        "menu.selectionBorder": "#f2e9e1",
+        "menu.selectionForeground": "#575279",
+        "menu.separatorBackground": "#6e6a8626",
+        "menubar.selectionBackground": "#6e6a8614",
+        "menubar.selectionBorder": "#6e6a860d",
+        "menubar.selectionForeground": "#575279",
+        "merge.border": "#f2e9e1",
+        "merge.commonContentBackground": "#6e6a8614",
+        "merge.commonHeaderBackground": "#6e6a8614",
+        "merge.currentContentBackground": "#ea9d3480",
+        "merge.currentHeaderBackground": "#ea9d3480",
+        "merge.incomingContentBackground": "#56949f80",
+        "merge.incomingHeaderBackground": "#56949f80",
+        "minimap.background": "#fffaf3",
+        "minimap.errorHighlight": "#b4637a80",
+        "minimap.findMatchHighlight": "#6e6a8614",
+        "minimap.selectionHighlight": "#6e6a8614",
+        "minimap.warningHighlight": "#ea9d3480",
+        "minimapGutter.addedBackground": "#56949f",
+        "minimapGutter.deletedBackground": "#b4637a",
+        "minimapGutter.modifiedBackground": "#d7827e",
+        "minimapSlider.activeBackground": "#6e6a8626",
+        "minimapSlider.background": "#6e6a8614",
+        "minimapSlider.hoverBackground": "#6e6a8614",
+        "notebook.cellBorderColor": "#56949f80",
+        "notebook.cellEditorBackground": "#fffaf3",
+        "notebook.cellHoverBackground": "#f2e9e180",
+        "notebook.focusedCellBackground": "#6e6a860d",
+        "notebook.focusedCellBorder": "#56949f",
+        "notebook.outputContainerBackgroundColor": "#6e6a860d",
+        "notificationCenter.border": "#6e6a8614",
+        "notificationCenterHeader.background": "#fffaf3",
+        "notificationCenterHeader.foreground": "#797593",
+        "notificationLink.foreground": "#907aa9",
+        "notifications.background": "#fffaf3",
+        "notifications.border": "#6e6a8614",
+        "notifications.foreground": "#575279",
+        "notificationsErrorIcon.foreground": "#b4637a",
+        "notificationsInfoIcon.foreground": "#56949f",
+        "notificationsWarningIcon.foreground": "#ea9d34",
+        "notificationToast.border": "#6e6a8614",
+        "panel.background": "#fffaf3",
+        "panel.border": "#000000",
+        "panel.dropBorder": "#f2e9e1",
+        "panelInput.border": "#fffaf3",
+        "panelSection.dropBackground": "#6e6a8614",
+        "panelSectionHeader.background": "#fffaf3",
+        "panelSectionHeader.foreground": "#575279",
+        "panelTitle.activeBorder": "#6e6a8626",
+        "panelTitle.activeForeground": "#575279",
+        "panelTitle.inactiveForeground": "#797593",
+        "peekView.border": "#f2e9e1",
+        "peekViewEditor.background": "#fffaf3",
+        "peekViewEditor.matchHighlightBackground": "#6e6a8626",
+        "peekViewResult.background": "#fffaf3",
+        "peekViewResult.fileForeground": "#797593",
+        "peekViewResult.lineForeground": "#797593",
+        "peekViewResult.matchHighlightBackground": "#6e6a8626",
+        "peekViewResult.selectionBackground": "#6e6a8614",
+        "peekViewResult.selectionForeground": "#575279",
+        "peekViewTitle.background": "#f2e9e1",
+        "peekViewTitleDescription.foreground": "#797593",
+        "pickerGroup.border": "#6e6a8626",
+        "pickerGroup.foreground": "#907aa9",
+        "ports.iconRunningProcessForeground": "#d7827e",
+        "problemsErrorIcon.foreground": "#b4637a",
+        "problemsInfoIcon.foreground": "#56949f",
+        "problemsWarningIcon.foreground": "#ea9d34",
+        "progressBar.background": "#d7827e",
+        "quickInput.background": "#fffaf3",
+        "quickInput.foreground": "#797593",
+        "quickInputList.focusBackground": "#6e6a8614",
+        "quickInputList.focusForeground": "#575279",
+        "quickInputList.focusIconForeground": "#575279",
+        "scrollbar.shadow": "#fffaf34d",
+        "scrollbarSlider.activeBackground": "#28698380",
+        "scrollbarSlider.background": "#6e6a8614",
+        "scrollbarSlider.hoverBackground": "#6e6a8626",
+        "searchEditor.findMatchBackground": "#6e6a8614",
+        "selection.background": "#6e6a8626",
+        "settings.focusedRowBackground": "#fffaf3",
+        "settings.headerForeground": "#575279",
+        "settings.modifiedItemIndicator": "#d7827e",
+        "settings.focusedRowBorder": "#6e6a8614",
+        "settings.rowHoverBackground": "#fffaf3",
+        "sideBar.background": "#faf4ed",
+        "sideBar.dropBackground": "#fffaf3",
+        "sideBar.foreground": "#797593",
+        "sideBarSectionHeader.background": "#000000",
+        "sideBarSectionHeader.border": "#6e6a8614",
+        "statusBar.background": "#faf4ed",
+        "statusBar.debuggingBackground": "#907aa9",
+        "statusBar.debuggingForeground": "#faf4ed",
+        "statusBar.foreground": "#797593",
+        "statusBar.noFolderBackground": "#faf4ed",
+        "statusBar.noFolderForeground": "#797593",
+        "statusBarItem.activeBackground": "#6e6a8626",
+        "statusBarItem.hoverBackground": "#6e6a8614",
+        "statusBarItem.prominentBackground": "#f2e9e1",
+        "statusBarItem.prominentForeground": "#575279",
+        "statusBarItem.prominentHoverBackground": "#6e6a8614",
+        "statusBarItem.remoteBackground": "#faf4ed",
+        "statusBarItem.remoteForeground": "#ea9d34",
+        "statusBarItem.errorBackground": "#faf4ed",
+        "statusBarItem.errorForeground": "#b4637a",
+        "symbolIcon.arrayForeground": "#797593",
+        "symbolIcon.classForeground": "#797593",
+        "symbolIcon.colorForeground": "#797593",
+        "symbolIcon.constantForeground": "#797593",
+        "symbolIcon.constructorForeground": "#797593",
+        "symbolIcon.enumeratorForeground": "#797593",
+        "symbolIcon.enumeratorMemberForeground": "#797593",
+        "symbolIcon.eventForeground": "#797593",
+        "symbolIcon.fieldForeground": "#797593",
+        "symbolIcon.fileForeground": "#797593",
+        "symbolIcon.folderForeground": "#797593",
+        "symbolIcon.functionForeground": "#797593",
+        "symbolIcon.interfaceForeground": "#797593",
+        "symbolIcon.keyForeground": "#797593",
+        "symbolIcon.keywordForeground": "#797593",
+        "symbolIcon.methodForeground": "#797593",
+        "symbolIcon.moduleForeground": "#797593",
+        "symbolIcon.namespaceForeground": "#797593",
+        "symbolIcon.nullForeground": "#797593",
+        "symbolIcon.numberForeground": "#797593",
+        "symbolIcon.objectForeground": "#797593",
+        "symbolIcon.operatorForeground": "#797593",
+        "symbolIcon.packageForeground": "#797593",
+        "symbolIcon.propertyForeground": "#797593",
+        "symbolIcon.referenceForeground": "#797593",
+        "symbolIcon.snippetForeground": "#797593",
+        "symbolIcon.stringForeground": "#797593",
+        "symbolIcon.structForeground": "#797593",
+        "symbolIcon.textForeground": "#797593",
+        "symbolIcon.typeParameterForeground": "#797593",
+        "symbolIcon.unitForeground": "#797593",
+        "symbolIcon.variableForeground": "#797593",
+        "tab.activeBackground": "#6e6a860d",
+        "tab.activeForeground": "#575279",
+        "tab.activeModifiedBorder": "#56949f",
+        "tab.border": "#000000",
+        "tab.hoverBackground": "#6e6a8614",
+        "tab.inactiveBackground": "#000000",
+        "tab.inactiveForeground": "#797593",
+        "tab.inactiveModifiedBorder": "#56949f80",
+        "tab.lastPinnedBorder": "#9893a5",
+        "tab.unfocusedActiveBackground": "#000000",
+        "tab.unfocusedHoverBackground": "#000000",
+        "tab.unfocusedInactiveBackground": "#000000",
+        "tab.unfocusedInactiveModifiedBorder": "#56949f80",
+        "terminal.ansiBlack": "#f2e9e1",
+        "terminal.ansiBlue": "#56949f",
+        "terminal.ansiBrightBlack": "#797593",
+        "terminal.ansiBrightBlue": "#56949f",
+        "terminal.ansiBrightCyan": "#d7827e",
+        "terminal.ansiBrightGreen": "#286983",
+        "terminal.ansiBrightMagenta": "#907aa9",
+        "terminal.ansiBrightRed": "#b4637a",
+        "terminal.ansiBrightWhite": "#575279",
+        "terminal.ansiBrightYellow": "#ea9d34",
+        "terminal.ansiCyan": "#d7827e",
+        "terminal.ansiGreen": "#286983",
+        "terminal.ansiMagenta": "#907aa9",
+        "terminal.ansiRed": "#b4637a",
+        "terminal.ansiWhite": "#575279",
+        "terminal.ansiYellow": "#ea9d34",
+        "terminal.dropBackground": "#6e6a8614",
+        "terminal.foreground": "#575279",
+        "terminal.selectionBackground": "#6e6a8614",
+        "terminal.tab.activeBorder": "#575279",
+        "terminalCursor.background": "#575279",
+        "terminalCursor.foreground": "#9893a5",
+        "textBlockQuote.background": "#fffaf3",
+        "textBlockQuote.border": "#6e6a8614",
+        "textCodeBlock.background": "#fffaf3",
+        "textLink.activeForeground": "#907aa9e6",
+        "textLink.foreground": "#907aa9",
+        "textPreformat.foreground": "#ea9d34",
+        "textSeparator.foreground": "#797593",
+        "titleBar.activeBackground": "#faf4ed",
+        "titleBar.activeForeground": "#797593",
+        "titleBar.inactiveBackground": "#fffaf3",
+        "titleBar.inactiveForeground": "#797593",
+        "toolbar.activeBackground": "#6e6a8626",
+        "toolbar.hoverBackground": "#6e6a8614",
+        "tree.indentGuidesStroke": "#797593",
+        "walkThrough.embeddedEditorBackground": "#faf4ed",
+        "welcomePage.background": "#faf4ed",
+        "welcomePage.buttonBackground": "#fffaf3",
+        "welcomePage.buttonHoverBackground": "#f2e9e1",
+        "widget.shadow": "#fffaf34d",
+        "window.activeBorder": "#fffaf3",
+        "window.inactiveBorder": "#fffaf3"
+    },
+    "tokenColors": [
+        {
+            "scope": ["comment"],
+            "settings": {
+                "foreground": "#9893a5",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant"],
+            "settings": {
+                "foreground": "#286983"
+            }
+        },
+        {
+            "scope": ["constant.numeric", "constant.language"],
+            "settings": {
+                "foreground": "#d7827e"
+            }
+        },
+        {
+            "scope": ["entity.name"],
+            "settings": {
+                "foreground": "#d7827e"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.section",
+                "entity.name.tag",
+                "entity.name.namespace",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#56949f"
+            }
+        },
+        {
+            "scope": ["entity.other.attribute-name", "entity.other.inherited-class"],
+            "settings": {
+                "foreground": "#907aa9",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["invalid"],
+            "settings": {
+                "foreground": "#b4637a"
+            }
+        },
+        {
+            "scope": ["invalid.deprecated"],
+            "settings": {
+                "foreground": "#797593"
+            }
+        },
+        {
+            "scope": ["keyword"],
+            "settings": {
+                "foreground": "#286983"
+            }
+        },
+        {
+            "scope": ["markup.inserted.diff"],
+            "settings": {
+                "foreground": "#56949f"
+            }
+        },
+        {
+            "scope": ["markup.deleted.diff"],
+            "settings": {
+                "foreground": "#b4637a"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "markup.bold.markdown",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "markup.italic.markdown",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["meta.diff.range"],
+            "settings": {
+                "foreground": "#907aa9"
+            }
+        },
+        {
+            "scope": ["meta.tag", "meta.brace"],
+            "settings": {
+                "foreground": "#575279"
+            }
+        },
+        {
+            "scope": ["meta.import", "meta.export"],
+            "settings": {
+                "foreground": "#286983"
+            }
+        },
+        {
+            "scope": "meta.directive.vue",
+            "settings": {
+                "foreground": "#907aa9",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "meta.property-name.css",
+            "settings": {
+                "foreground": "#56949f"
+            }
+        },
+        {
+            "scope": "meta.property-value.css",
+            "settings": {
+                "foreground": "#ea9d34"
+            }
+        },
+        {
+            "scope": "meta.tag.other.html",
+            "settings": {
+                "foreground": "#797593"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#797593"
+            }
+        },
+        {
+            "scope": ["punctuation.accessor"],
+            "settings": {
+                "foreground": "#286983"
+            }
+        },
+        {
+            "scope": ["punctuation.definition.string"],
+            "settings": {
+                "foreground": "#ea9d34"
+            }
+        },
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#9893a5"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#286983"
+            }
+        },
+        {
+            "scope": ["string"],
+            "settings": {
+                "foreground": "#ea9d34"
+            }
+        },
+        {
+            "scope": ["support"],
+            "settings": {
+                "foreground": "#56949f"
+            }
+        },
+        {
+            "scope": ["support.constant"],
+            "settings": {
+                "foreground": "#ea9d34"
+            }
+        },
+        {
+            "scope": ["support.function"],
+            "settings": {
+                "foreground": "#b4637a",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["variable"],
+            "settings": {
+                "foreground": "#d7827e",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": [
+                "variable.other",
+                "variable.language",
+                "variable.function",
+                "variable.argument"
+            ],
+            "settings": {
+                "foreground": "#575279"
+            }
+        },
+        {
+            "scope": ["variable.parameter"],
+            "settings": {
+                "foreground": "#907aa9"
+            }
+        }
+    ]
+}

assets/themes/src/vscode/rose-pine/rose-pine-moon.json 🔗

@@ -0,0 +1,680 @@
+{
+    "name": "Rosé Pine Moon",
+    "type": "dark",
+    "colors": {
+        "activityBar.activeBorder": "#e0def4",
+        "activityBar.background": "#232136",
+        "activityBar.dropBorder": "#393552",
+        "activityBar.foreground": "#e0def4",
+        "activityBar.inactiveForeground": "#908caa",
+        "activityBarBadge.background": "#ea9a97",
+        "activityBarBadge.foreground": "#232136",
+        "badge.background": "#ea9a97",
+        "badge.foreground": "#232136",
+        "banner.background": "#2a273f",
+        "banner.foreground": "#e0def4",
+        "banner.iconForeground": "#908caa",
+        "breadcrumb.activeSelectionForeground": "#ea9a97",
+        "breadcrumb.background": "#232136",
+        "breadcrumb.focusForeground": "#908caa",
+        "breadcrumb.foreground": "#6e6a86",
+        "breadcrumbPicker.background": "#2a273f",
+        "button.background": "#ea9a97",
+        "button.foreground": "#232136",
+        "button.hoverBackground": "#ea9a97e6",
+        "button.secondaryBackground": "#2a273f",
+        "button.secondaryForeground": "#e0def4",
+        "button.secondaryHoverBackground": "#393552",
+        "charts.blue": "#9ccfd8",
+        "charts.foreground": "#e0def4",
+        "charts.green": "#3e8fb0",
+        "charts.lines": "#908caa",
+        "charts.orange": "#ea9a97",
+        "charts.purple": "#c4a7e7",
+        "charts.red": "#eb6f92",
+        "charts.yellow": "#f6c177",
+        "checkbox.background": "#2a273f",
+        "checkbox.border": "#817c9c26",
+        "checkbox.foreground": "#e0def4",
+        "debugExceptionWidget.background": "#2a273f",
+        "debugExceptionWidget.border": "#817c9c26",
+        "debugIcon.breakpointCurrentStackframeForeground": "#908caa",
+        "debugIcon.breakpointDisabledForeground": "#908caa",
+        "debugIcon.breakpointForeground": "#908caa",
+        "debugIcon.breakpointStackframeForeground": "#908caa",
+        "debugIcon.breakpointUnverifiedForeground": "#908caa",
+        "debugIcon.continueForeground": "#908caa",
+        "debugIcon.disconnectForeground": "#908caa",
+        "debugIcon.pauseForeground": "#908caa",
+        "debugIcon.restartForeground": "#908caa",
+        "debugIcon.startForeground": "#908caa",
+        "debugIcon.stepBackForeground": "#908caa",
+        "debugIcon.stepIntoForeground": "#908caa",
+        "debugIcon.stepOutForeground": "#908caa",
+        "debugIcon.stepOverForeground": "#908caa",
+        "debugIcon.stopForeground": "#eb6f92",
+        "debugToolBar.background": "#2a273f",
+        "debugToolBar.border": "#393552",
+        "descriptionForeground": "#908caa",
+        "diffEditor.border": "#393552",
+        "diffEditor.diagonalFill": "#817c9c4d",
+        "diffEditor.insertedLineBackground": "#9ccfd826",
+        "diffEditor.insertedTextBackground": "#9ccfd826",
+        "diffEditor.removedLineBackground": "#eb6f9226",
+        "diffEditor.removedTextBackground": "#eb6f9226",
+        "diffEditorOverview.insertedForeground": "#9ccfd880",
+        "diffEditorOverview.removedForeground": "#eb6f9280",
+        "dropdown.background": "#2a273f",
+        "dropdown.border": "#817c9c26",
+        "dropdown.foreground": "#e0def4",
+        "dropdown.listBackground": "#2a273f",
+        "editor.background": "#232136",
+        "editor.findMatchBackground": "#817c9c4d",
+        "editor.findMatchHighlightBackground": "#817c9c4d",
+        "editor.findRangeHighlightBackground": "#817c9c4d",
+        "editor.findRangeHighlightBorder": "#000000",
+        "editor.focusedStackFrameHighlightBackground": "#817c9c26",
+        "editor.foldBackground": "#2a273f",
+        "editor.foreground": "#e0def4",
+        "editor.hoverHighlightBackground": "#000000",
+        "editor.inactiveSelectionBackground": "#817c9c14",
+        "editor.inlineValuesBackground": "#000000",
+        "editor.inlineValuesForeground": "#908caa",
+        "editor.lineHighlightBackground": "#817c9c14",
+        "editor.lineHighlightBorder": "#000000",
+        "editor.linkedEditingBackground": "#2a273f",
+        "editor.rangeHighlightBackground": "#817c9c14",
+        "editor.selectionBackground": "#817c9c26",
+        "editor.selectionForeground": "#e0def4",
+        "editor.selectionHighlightBackground": "#817c9c26",
+        "editor.selectionHighlightBorder": "#232136",
+        "editor.snippetFinalTabstopHighlightBackground": "#817c9c26",
+        "editor.snippetFinalTabstopHighlightBorder": "#2a273f",
+        "editor.snippetTabstopHighlightBackground": "#817c9c26",
+        "editor.snippetTabstopHighlightBorder": "#2a273f",
+        "editor.stackFrameHighlightBackground": "#817c9c26",
+        "editor.symbolHighlightBackground": "#817c9c26",
+        "editor.symbolHighlightBorder": "#000000",
+        "editor.wordHighlightBackground": "#817c9c26",
+        "editor.wordHighlightBorder": "#000000",
+        "editor.wordHighlightStrongBackground": "#817c9c26",
+        "editor.wordHighlightStrongBorder": "#817c9c26",
+        "editorBracketHighlight.foreground1": "#eb6f9280",
+        "editorBracketHighlight.foreground2": "#3e8fb080",
+        "editorBracketHighlight.foreground3": "#f6c17780",
+        "editorBracketHighlight.foreground4": "#9ccfd880",
+        "editorBracketHighlight.foreground5": "#ea9a9780",
+        "editorBracketHighlight.foreground6": "#c4a7e780",
+        "editorBracketMatch.background": "#000000",
+        "editorBracketMatch.border": "#908caa",
+        "editorBracketPairGuide.activeBackground1": "#3e8fb0",
+        "editorBracketPairGuide.activeBackground2": "#ea9a97",
+        "editorBracketPairGuide.activeBackground3": "#c4a7e7",
+        "editorBracketPairGuide.activeBackground4": "#9ccfd8",
+        "editorBracketPairGuide.activeBackground5": "#f6c177",
+        "editorBracketPairGuide.activeBackground6": "#eb6f92",
+        "editorBracketPairGuide.background1": "#3e8fb080",
+        "editorBracketPairGuide.background2": "#ea9a9780",
+        "editorBracketPairGuide.background3": "#c4a7e780",
+        "editorBracketPairGuide.background4": "#9ccfd880",
+        "editorBracketPairGuide.background5": "#f6c17780",
+        "editorBracketPairGuide.background6": "#eb6f9280",
+        "editorCodeLens.foreground": "#ea9a97",
+        "editorCursor.background": "#e0def4",
+        "editorCursor.foreground": "#6e6a86",
+        "editorError.border": "#000000",
+        "editorError.foreground": "#eb6f92",
+        "editorGhostText.foreground": "#908caa",
+        "editorGroup.border": "#000000",
+        "editorGroup.dropBackground": "#2a273f",
+        "editorGroup.emptyBackground": "#000000",
+        "editorGroup.focusedEmptyBorder": "#000000",
+        "editorGroupHeader.noTabsBackground": "#000000",
+        "editorGroupHeader.tabsBackground": "#000000",
+        "editorGroupHeader.tabsBorder": "#000000",
+        "editorGutter.addedBackground": "#9ccfd8",
+        "editorGutter.background": "#232136",
+        "editorGutter.commentRangeForeground": "#908caa",
+        "editorGutter.deletedBackground": "#eb6f92",
+        "editorGutter.foldingControlForeground": "#c4a7e7",
+        "editorGutter.modifiedBackground": "#ea9a97",
+        "editorHint.border": "#000000",
+        "editorHint.foreground": "#908caa",
+        "editorHoverWidget.background": "#2a273f",
+        "editorHoverWidget.border": "#6e6a8680",
+        "editorHoverWidget.foreground": "#908caa",
+        "editorHoverWidget.highlightForeground": "#e0def4",
+        "editorHoverWidget.statusBarBackground": "#000000",
+        "editorIndentGuide.activeBackground": "#6e6a86",
+        "editorIndentGuide.background": "#817c9c4d",
+        "editorInfo.border": "#393552",
+        "editorInfo.foreground": "#9ccfd8",
+        "editorInlayHint.background": "#393552",
+        "editorInlayHint.foreground": "#908caa",
+        "editorInlayHint.parameterBackground": "#393552",
+        "editorInlayHint.parameterForeground": "#c4a7e7",
+        "editorInlayHint.typeBackground": "#393552",
+        "editorInlayHint.typeForeground": "#9ccfd8",
+        "editorLightBulb.foreground": "#3e8fb0",
+        "editorLightBulbAutoFix.foreground": "#ea9a97",
+        "editorLineNumber.activeForeground": "#e0def4",
+        "editorLineNumber.foreground": "#908caa",
+        "editorLink.activeForeground": "#ea9a97",
+        "editorMarkerNavigation.background": "#2a273f",
+        "editorMarkerNavigationError.background": "#2a273f",
+        "editorMarkerNavigationInfo.background": "#2a273f",
+        "editorMarkerNavigationWarning.background": "#2a273f",
+        "editorOverviewRuler.addedForeground": "#9ccfd880",
+        "editorOverviewRuler.background": "#232136",
+        "editorOverviewRuler.border": "#817c9c4d",
+        "editorOverviewRuler.bracketMatchForeground": "#908caa",
+        "editorOverviewRuler.commonContentForeground": "#817c9c14",
+        "editorOverviewRuler.currentContentForeground": "#817c9c26",
+        "editorOverviewRuler.deletedForeground": "#eb6f9280",
+        "editorOverviewRuler.errorForeground": "#eb6f9280",
+        "editorOverviewRuler.findMatchForeground": "#817c9c4d",
+        "editorOverviewRuler.incomingContentForeground": "#c4a7e780",
+        "editorOverviewRuler.infoForeground": "#9ccfd880",
+        "editorOverviewRuler.modifiedForeground": "#ea9a9780",
+        "editorOverviewRuler.rangeHighlightForeground": "#817c9c4d",
+        "editorOverviewRuler.selectionHighlightForeground": "#817c9c4d",
+        "editorOverviewRuler.warningForeground": "#f6c17780",
+        "editorOverviewRuler.wordHighlightForeground": "#817c9c26",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#817c9c4d",
+        "editorPane.background": "#000000",
+        "editorRuler.foreground": "#817c9c4d",
+        "editorSuggestWidget.background": "#2a273f",
+        "editorSuggestWidget.border": "#000000",
+        "editorSuggestWidget.focusHighlightForeground": "#ea9a97",
+        "editorSuggestWidget.foreground": "#908caa",
+        "editorSuggestWidget.highlightForeground": "#ea9a97",
+        "editorSuggestWidget.selectedBackground": "#817c9c26",
+        "editorSuggestWidget.selectedForeground": "#e0def4",
+        "editorSuggestWidget.selectedIconForeground": "#e0def4",
+        "editorUnnecessaryCode.border": "#000000",
+        "editorUnnecessaryCode.opacity": "#e0def480",
+        "editorWarning.border": "#000000",
+        "editorWarning.foreground": "#f6c177",
+        "editorWhitespace.foreground": "#6e6a86",
+        "editorWidget.background": "#2a273f",
+        "editorWidget.border": "#393552",
+        "editorWidget.foreground": "#908caa",
+        "editorWidget.resizeBorder": "#6e6a86",
+        "errorForeground": "#eb6f92",
+        "extensionBadge.remoteBackground": "#c4a7e7",
+        "extensionBadge.remoteForeground": "#232136",
+        "extensionButton.prominentBackground": "#ea9a97",
+        "extensionButton.prominentForeground": "#232136",
+        "extensionButton.prominentHoverBackground": "#ea9a97e6",
+        "extensionIcon.preReleaseForeground": "#3e8fb0",
+        "extensionIcon.starForeground": "#ea9a97",
+        "extensionIcon.verifiedForeground": "#c4a7e7",
+        "focusBorder": "#817c9c26",
+        "foreground": "#e0def4",
+        "gitDecoration.addedResourceForeground": "#9ccfd8",
+        "gitDecoration.conflictingResourceForeground": "#eb6f92",
+        "gitDecoration.deletedResourceForeground": "#908caa",
+        "gitDecoration.ignoredResourceForeground": "#6e6a86",
+        "gitDecoration.modifiedResourceForeground": "#ea9a97",
+        "gitDecoration.renamedResourceForeground": "#3e8fb0",
+        "gitDecoration.stageDeletedResourceForeground": "#eb6f92",
+        "gitDecoration.stageModifiedResourceForeground": "#c4a7e7",
+        "gitDecoration.submoduleResourceForeground": "#f6c177",
+        "gitDecoration.untrackedResourceForeground": "#f6c177",
+        "icon.foreground": "#908caa",
+        "input.background": "#39355280",
+        "input.border": "#817c9c26",
+        "input.foreground": "#e0def4",
+        "input.placeholderForeground": "#908caa",
+        "inputOption.activeBackground": "#ea9a9726",
+        "inputOption.activeForeground": "#ea9a97",
+        "inputValidation.errorBackground": "#2a273f",
+        "inputValidation.errorBorder": "#817c9c4d",
+        "inputValidation.errorForeground": "#eb6f92",
+        "inputValidation.infoBackground": "#2a273f",
+        "inputValidation.infoBorder": "#817c9c4d",
+        "inputValidation.infoForeground": "#9ccfd8",
+        "inputValidation.warningBackground": "#2a273f",
+        "inputValidation.warningBorder": "#817c9c4d",
+        "inputValidation.warningForeground": "#9ccfd880",
+        "keybindingLabel.background": "#393552",
+        "keybindingLabel.border": "#817c9c4d",
+        "keybindingLabel.bottomBorder": "#817c9c4d",
+        "keybindingLabel.foreground": "#c4a7e7",
+        "keybindingTable.headerBackground": "#393552",
+        "keybindingTable.rowsBackground": "#2a273f",
+        "list.activeSelectionBackground": "#817c9c26",
+        "list.activeSelectionForeground": "#e0def4",
+        "list.deemphasizedForeground": "#908caa",
+        "list.dropBackground": "#2a273f",
+        "list.errorForeground": "#eb6f92",
+        "list.filterMatchBackground": "#2a273f",
+        "list.filterMatchBorder": "#ea9a97",
+        "list.focusBackground": "#817c9c4d",
+        "list.focusForeground": "#e0def4",
+        "list.focusOutline": "#817c9c26",
+        "list.highlightForeground": "#ea9a97",
+        "list.hoverBackground": "#817c9c14",
+        "list.hoverForeground": "#e0def4",
+        "list.inactiveFocusBackground": "#817c9c14",
+        "list.inactiveSelectionBackground": "#2a273f",
+        "list.inactiveSelectionForeground": "#e0def4",
+        "list.invalidItemForeground": "#eb6f92",
+        "list.warningForeground": "#f6c177",
+        "listFilterWidget.background": "#2a273f",
+        "listFilterWidget.noMatchesOutline": "#eb6f92",
+        "listFilterWidget.outline": "#393552",
+        "menu.background": "#2a273f",
+        "menu.border": "#817c9c14",
+        "menu.foreground": "#e0def4",
+        "menu.selectionBackground": "#817c9c26",
+        "menu.selectionBorder": "#393552",
+        "menu.selectionForeground": "#e0def4",
+        "menu.separatorBackground": "#817c9c4d",
+        "menubar.selectionBackground": "#817c9c26",
+        "menubar.selectionBorder": "#817c9c14",
+        "menubar.selectionForeground": "#e0def4",
+        "merge.border": "#393552",
+        "merge.commonContentBackground": "#817c9c26",
+        "merge.commonHeaderBackground": "#817c9c26",
+        "merge.currentContentBackground": "#f6c17780",
+        "merge.currentHeaderBackground": "#f6c17780",
+        "merge.incomingContentBackground": "#9ccfd880",
+        "merge.incomingHeaderBackground": "#9ccfd880",
+        "minimap.background": "#2a273f",
+        "minimap.errorHighlight": "#eb6f9280",
+        "minimap.findMatchHighlight": "#817c9c26",
+        "minimap.selectionHighlight": "#817c9c26",
+        "minimap.warningHighlight": "#f6c17780",
+        "minimapGutter.addedBackground": "#9ccfd8",
+        "minimapGutter.deletedBackground": "#eb6f92",
+        "minimapGutter.modifiedBackground": "#ea9a97",
+        "minimapSlider.activeBackground": "#817c9c4d",
+        "minimapSlider.background": "#817c9c26",
+        "minimapSlider.hoverBackground": "#817c9c26",
+        "notebook.cellBorderColor": "#9ccfd880",
+        "notebook.cellEditorBackground": "#2a273f",
+        "notebook.cellHoverBackground": "#39355280",
+        "notebook.focusedCellBackground": "#817c9c14",
+        "notebook.focusedCellBorder": "#9ccfd8",
+        "notebook.outputContainerBackgroundColor": "#817c9c14",
+        "notificationCenter.border": "#817c9c26",
+        "notificationCenterHeader.background": "#2a273f",
+        "notificationCenterHeader.foreground": "#908caa",
+        "notificationLink.foreground": "#c4a7e7",
+        "notifications.background": "#2a273f",
+        "notifications.border": "#817c9c26",
+        "notifications.foreground": "#e0def4",
+        "notificationsErrorIcon.foreground": "#eb6f92",
+        "notificationsInfoIcon.foreground": "#9ccfd8",
+        "notificationsWarningIcon.foreground": "#f6c177",
+        "notificationToast.border": "#817c9c26",
+        "panel.background": "#2a273f",
+        "panel.border": "#000000",
+        "panel.dropBorder": "#393552",
+        "panelInput.border": "#2a273f",
+        "panelSection.dropBackground": "#817c9c26",
+        "panelSectionHeader.background": "#2a273f",
+        "panelSectionHeader.foreground": "#e0def4",
+        "panelTitle.activeBorder": "#817c9c4d",
+        "panelTitle.activeForeground": "#e0def4",
+        "panelTitle.inactiveForeground": "#908caa",
+        "peekView.border": "#393552",
+        "peekViewEditor.background": "#2a273f",
+        "peekViewEditor.matchHighlightBackground": "#817c9c4d",
+        "peekViewResult.background": "#2a273f",
+        "peekViewResult.fileForeground": "#908caa",
+        "peekViewResult.lineForeground": "#908caa",
+        "peekViewResult.matchHighlightBackground": "#817c9c4d",
+        "peekViewResult.selectionBackground": "#817c9c26",
+        "peekViewResult.selectionForeground": "#e0def4",
+        "peekViewTitle.background": "#393552",
+        "peekViewTitleDescription.foreground": "#908caa",
+        "pickerGroup.border": "#817c9c4d",
+        "pickerGroup.foreground": "#c4a7e7",
+        "ports.iconRunningProcessForeground": "#ea9a97",
+        "problemsErrorIcon.foreground": "#eb6f92",
+        "problemsInfoIcon.foreground": "#9ccfd8",
+        "problemsWarningIcon.foreground": "#f6c177",
+        "progressBar.background": "#ea9a97",
+        "quickInput.background": "#2a273f",
+        "quickInput.foreground": "#908caa",
+        "quickInputList.focusBackground": "#817c9c26",
+        "quickInputList.focusForeground": "#e0def4",
+        "quickInputList.focusIconForeground": "#e0def4",
+        "scrollbar.shadow": "#2a273f4d",
+        "scrollbarSlider.activeBackground": "#3e8fb080",
+        "scrollbarSlider.background": "#817c9c26",
+        "scrollbarSlider.hoverBackground": "#817c9c4d",
+        "searchEditor.findMatchBackground": "#817c9c26",
+        "selection.background": "#817c9c4d",
+        "settings.focusedRowBackground": "#2a273f",
+        "settings.headerForeground": "#e0def4",
+        "settings.modifiedItemIndicator": "#ea9a97",
+        "settings.focusedRowBorder": "#817c9c26",
+        "settings.rowHoverBackground": "#2a273f",
+        "sideBar.background": "#232136",
+        "sideBar.dropBackground": "#2a273f",
+        "sideBar.foreground": "#908caa",
+        "sideBarSectionHeader.background": "#000000",
+        "sideBarSectionHeader.border": "#817c9c26",
+        "statusBar.background": "#232136",
+        "statusBar.debuggingBackground": "#c4a7e7",
+        "statusBar.debuggingForeground": "#232136",
+        "statusBar.foreground": "#908caa",
+        "statusBar.noFolderBackground": "#232136",
+        "statusBar.noFolderForeground": "#908caa",
+        "statusBarItem.activeBackground": "#817c9c4d",
+        "statusBarItem.hoverBackground": "#817c9c26",
+        "statusBarItem.prominentBackground": "#393552",
+        "statusBarItem.prominentForeground": "#e0def4",
+        "statusBarItem.prominentHoverBackground": "#817c9c26",
+        "statusBarItem.remoteBackground": "#232136",
+        "statusBarItem.remoteForeground": "#f6c177",
+        "statusBarItem.errorBackground": "#232136",
+        "statusBarItem.errorForeground": "#eb6f92",
+        "symbolIcon.arrayForeground": "#908caa",
+        "symbolIcon.classForeground": "#908caa",
+        "symbolIcon.colorForeground": "#908caa",
+        "symbolIcon.constantForeground": "#908caa",
+        "symbolIcon.constructorForeground": "#908caa",
+        "symbolIcon.enumeratorForeground": "#908caa",
+        "symbolIcon.enumeratorMemberForeground": "#908caa",
+        "symbolIcon.eventForeground": "#908caa",
+        "symbolIcon.fieldForeground": "#908caa",
+        "symbolIcon.fileForeground": "#908caa",
+        "symbolIcon.folderForeground": "#908caa",
+        "symbolIcon.functionForeground": "#908caa",
+        "symbolIcon.interfaceForeground": "#908caa",
+        "symbolIcon.keyForeground": "#908caa",
+        "symbolIcon.keywordForeground": "#908caa",
+        "symbolIcon.methodForeground": "#908caa",
+        "symbolIcon.moduleForeground": "#908caa",
+        "symbolIcon.namespaceForeground": "#908caa",
+        "symbolIcon.nullForeground": "#908caa",
+        "symbolIcon.numberForeground": "#908caa",
+        "symbolIcon.objectForeground": "#908caa",
+        "symbolIcon.operatorForeground": "#908caa",
+        "symbolIcon.packageForeground": "#908caa",
+        "symbolIcon.propertyForeground": "#908caa",
+        "symbolIcon.referenceForeground": "#908caa",
+        "symbolIcon.snippetForeground": "#908caa",
+        "symbolIcon.stringForeground": "#908caa",
+        "symbolIcon.structForeground": "#908caa",
+        "symbolIcon.textForeground": "#908caa",
+        "symbolIcon.typeParameterForeground": "#908caa",
+        "symbolIcon.unitForeground": "#908caa",
+        "symbolIcon.variableForeground": "#908caa",
+        "tab.activeBackground": "#817c9c14",
+        "tab.activeForeground": "#e0def4",
+        "tab.activeModifiedBorder": "#9ccfd8",
+        "tab.border": "#000000",
+        "tab.hoverBackground": "#817c9c26",
+        "tab.inactiveBackground": "#000000",
+        "tab.inactiveForeground": "#908caa",
+        "tab.inactiveModifiedBorder": "#9ccfd880",
+        "tab.lastPinnedBorder": "#6e6a86",
+        "tab.unfocusedActiveBackground": "#000000",
+        "tab.unfocusedHoverBackground": "#000000",
+        "tab.unfocusedInactiveBackground": "#000000",
+        "tab.unfocusedInactiveModifiedBorder": "#9ccfd880",
+        "terminal.ansiBlack": "#393552",
+        "terminal.ansiBlue": "#9ccfd8",
+        "terminal.ansiBrightBlack": "#908caa",
+        "terminal.ansiBrightBlue": "#9ccfd8",
+        "terminal.ansiBrightCyan": "#ea9a97",
+        "terminal.ansiBrightGreen": "#3e8fb0",
+        "terminal.ansiBrightMagenta": "#c4a7e7",
+        "terminal.ansiBrightRed": "#eb6f92",
+        "terminal.ansiBrightWhite": "#e0def4",
+        "terminal.ansiBrightYellow": "#f6c177",
+        "terminal.ansiCyan": "#ea9a97",
+        "terminal.ansiGreen": "#3e8fb0",
+        "terminal.ansiMagenta": "#c4a7e7",
+        "terminal.ansiRed": "#eb6f92",
+        "terminal.ansiWhite": "#e0def4",
+        "terminal.ansiYellow": "#f6c177",
+        "terminal.dropBackground": "#817c9c26",
+        "terminal.foreground": "#e0def4",
+        "terminal.selectionBackground": "#817c9c26",
+        "terminal.tab.activeBorder": "#e0def4",
+        "terminalCursor.background": "#e0def4",
+        "terminalCursor.foreground": "#6e6a86",
+        "textBlockQuote.background": "#2a273f",
+        "textBlockQuote.border": "#817c9c26",
+        "textCodeBlock.background": "#2a273f",
+        "textLink.activeForeground": "#c4a7e7e6",
+        "textLink.foreground": "#c4a7e7",
+        "textPreformat.foreground": "#f6c177",
+        "textSeparator.foreground": "#908caa",
+        "titleBar.activeBackground": "#232136",
+        "titleBar.activeForeground": "#908caa",
+        "titleBar.inactiveBackground": "#2a273f",
+        "titleBar.inactiveForeground": "#908caa",
+        "toolbar.activeBackground": "#817c9c4d",
+        "toolbar.hoverBackground": "#817c9c26",
+        "tree.indentGuidesStroke": "#908caa",
+        "walkThrough.embeddedEditorBackground": "#232136",
+        "welcomePage.background": "#232136",
+        "welcomePage.buttonBackground": "#2a273f",
+        "welcomePage.buttonHoverBackground": "#393552",
+        "widget.shadow": "#2a273f4d",
+        "window.activeBorder": "#2a273f",
+        "window.inactiveBorder": "#2a273f"
+    },
+    "tokenColors": [
+        {
+            "scope": ["comment"],
+            "settings": {
+                "foreground": "#6e6a86",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant"],
+            "settings": {
+                "foreground": "#3e8fb0"
+            }
+        },
+        {
+            "scope": ["constant.numeric", "constant.language"],
+            "settings": {
+                "foreground": "#ea9a97"
+            }
+        },
+        {
+            "scope": ["entity.name"],
+            "settings": {
+                "foreground": "#ea9a97"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.section",
+                "entity.name.tag",
+                "entity.name.namespace",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": ["entity.other.attribute-name", "entity.other.inherited-class"],
+            "settings": {
+                "foreground": "#c4a7e7",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["invalid"],
+            "settings": {
+                "foreground": "#eb6f92"
+            }
+        },
+        {
+            "scope": ["invalid.deprecated"],
+            "settings": {
+                "foreground": "#908caa"
+            }
+        },
+        {
+            "scope": ["keyword"],
+            "settings": {
+                "foreground": "#3e8fb0"
+            }
+        },
+        {
+            "scope": ["markup.inserted.diff"],
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": ["markup.deleted.diff"],
+            "settings": {
+                "foreground": "#eb6f92"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "markup.bold.markdown",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "markup.italic.markdown",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["meta.diff.range"],
+            "settings": {
+                "foreground": "#c4a7e7"
+            }
+        },
+        {
+            "scope": ["meta.tag", "meta.brace"],
+            "settings": {
+                "foreground": "#e0def4"
+            }
+        },
+        {
+            "scope": ["meta.import", "meta.export"],
+            "settings": {
+                "foreground": "#3e8fb0"
+            }
+        },
+        {
+            "scope": "meta.directive.vue",
+            "settings": {
+                "foreground": "#c4a7e7",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "meta.property-name.css",
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": "meta.property-value.css",
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": "meta.tag.other.html",
+            "settings": {
+                "foreground": "#908caa"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#908caa"
+            }
+        },
+        {
+            "scope": ["punctuation.accessor"],
+            "settings": {
+                "foreground": "#3e8fb0"
+            }
+        },
+        {
+            "scope": ["punctuation.definition.string"],
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#6e6a86"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#3e8fb0"
+            }
+        },
+        {
+            "scope": ["string"],
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": ["support"],
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": ["support.constant"],
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": ["support.function"],
+            "settings": {
+                "foreground": "#eb6f92",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["variable"],
+            "settings": {
+                "foreground": "#ea9a97",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": [
+                "variable.other",
+                "variable.language",
+                "variable.function",
+                "variable.argument"
+            ],
+            "settings": {
+                "foreground": "#e0def4"
+            }
+        },
+        {
+            "scope": ["variable.parameter"],
+            "settings": {
+                "foreground": "#c4a7e7"
+            }
+        }
+    ]
+}

assets/themes/src/vscode/rose-pine/rose-pine.json 🔗

@@ -0,0 +1,680 @@
+{
+    "name": "Rosé Pine",
+    "type": "dark",
+    "colors": {
+        "activityBar.activeBorder": "#e0def4",
+        "activityBar.background": "#191724",
+        "activityBar.dropBorder": "#26233a",
+        "activityBar.foreground": "#e0def4",
+        "activityBar.inactiveForeground": "#908caa",
+        "activityBarBadge.background": "#ebbcba",
+        "activityBarBadge.foreground": "#191724",
+        "badge.background": "#ebbcba",
+        "badge.foreground": "#191724",
+        "banner.background": "#1f1d2e",
+        "banner.foreground": "#e0def4",
+        "banner.iconForeground": "#908caa",
+        "breadcrumb.activeSelectionForeground": "#ebbcba",
+        "breadcrumb.background": "#191724",
+        "breadcrumb.focusForeground": "#908caa",
+        "breadcrumb.foreground": "#6e6a86",
+        "breadcrumbPicker.background": "#1f1d2e",
+        "button.background": "#ebbcba",
+        "button.foreground": "#191724",
+        "button.hoverBackground": "#ebbcbae6",
+        "button.secondaryBackground": "#1f1d2e",
+        "button.secondaryForeground": "#e0def4",
+        "button.secondaryHoverBackground": "#26233a",
+        "charts.blue": "#9ccfd8",
+        "charts.foreground": "#e0def4",
+        "charts.green": "#31748f",
+        "charts.lines": "#908caa",
+        "charts.orange": "#ebbcba",
+        "charts.purple": "#c4a7e7",
+        "charts.red": "#eb6f92",
+        "charts.yellow": "#f6c177",
+        "checkbox.background": "#1f1d2e",
+        "checkbox.border": "#6e6a8633",
+        "checkbox.foreground": "#e0def4",
+        "debugExceptionWidget.background": "#1f1d2e",
+        "debugExceptionWidget.border": "#6e6a8633",
+        "debugIcon.breakpointCurrentStackframeForeground": "#908caa",
+        "debugIcon.breakpointDisabledForeground": "#908caa",
+        "debugIcon.breakpointForeground": "#908caa",
+        "debugIcon.breakpointStackframeForeground": "#908caa",
+        "debugIcon.breakpointUnverifiedForeground": "#908caa",
+        "debugIcon.continueForeground": "#908caa",
+        "debugIcon.disconnectForeground": "#908caa",
+        "debugIcon.pauseForeground": "#908caa",
+        "debugIcon.restartForeground": "#908caa",
+        "debugIcon.startForeground": "#908caa",
+        "debugIcon.stepBackForeground": "#908caa",
+        "debugIcon.stepIntoForeground": "#908caa",
+        "debugIcon.stepOutForeground": "#908caa",
+        "debugIcon.stepOverForeground": "#908caa",
+        "debugIcon.stopForeground": "#eb6f92",
+        "debugToolBar.background": "#1f1d2e",
+        "debugToolBar.border": "#26233a",
+        "descriptionForeground": "#908caa",
+        "diffEditor.border": "#26233a",
+        "diffEditor.diagonalFill": "#6e6a8666",
+        "diffEditor.insertedLineBackground": "#9ccfd826",
+        "diffEditor.insertedTextBackground": "#9ccfd826",
+        "diffEditor.removedLineBackground": "#eb6f9226",
+        "diffEditor.removedTextBackground": "#eb6f9226",
+        "diffEditorOverview.insertedForeground": "#9ccfd880",
+        "diffEditorOverview.removedForeground": "#eb6f9280",
+        "dropdown.background": "#1f1d2e",
+        "dropdown.border": "#6e6a8633",
+        "dropdown.foreground": "#e0def4",
+        "dropdown.listBackground": "#1f1d2e",
+        "editor.background": "#191724",
+        "editor.findMatchBackground": "#6e6a8666",
+        "editor.findMatchHighlightBackground": "#6e6a8666",
+        "editor.findRangeHighlightBackground": "#6e6a8666",
+        "editor.findRangeHighlightBorder": "#000000",
+        "editor.focusedStackFrameHighlightBackground": "#6e6a8633",
+        "editor.foldBackground": "#1f1d2e",
+        "editor.foreground": "#e0def4",
+        "editor.hoverHighlightBackground": "#000000",
+        "editor.inactiveSelectionBackground": "#6e6a861a",
+        "editor.inlineValuesBackground": "#000000",
+        "editor.inlineValuesForeground": "#908caa",
+        "editor.lineHighlightBackground": "#6e6a861a",
+        "editor.lineHighlightBorder": "#000000",
+        "editor.linkedEditingBackground": "#1f1d2e",
+        "editor.rangeHighlightBackground": "#6e6a861a",
+        "editor.selectionBackground": "#6e6a8633",
+        "editor.selectionForeground": "#e0def4",
+        "editor.selectionHighlightBackground": "#6e6a8633",
+        "editor.selectionHighlightBorder": "#191724",
+        "editor.snippetFinalTabstopHighlightBackground": "#6e6a8633",
+        "editor.snippetFinalTabstopHighlightBorder": "#1f1d2e",
+        "editor.snippetTabstopHighlightBackground": "#6e6a8633",
+        "editor.snippetTabstopHighlightBorder": "#1f1d2e",
+        "editor.stackFrameHighlightBackground": "#6e6a8633",
+        "editor.symbolHighlightBackground": "#6e6a8633",
+        "editor.symbolHighlightBorder": "#000000",
+        "editor.wordHighlightBackground": "#6e6a8633",
+        "editor.wordHighlightBorder": "#000000",
+        "editor.wordHighlightStrongBackground": "#6e6a8633",
+        "editor.wordHighlightStrongBorder": "#6e6a8633",
+        "editorBracketHighlight.foreground1": "#eb6f9280",
+        "editorBracketHighlight.foreground2": "#31748f80",
+        "editorBracketHighlight.foreground3": "#f6c17780",
+        "editorBracketHighlight.foreground4": "#9ccfd880",
+        "editorBracketHighlight.foreground5": "#ebbcba80",
+        "editorBracketHighlight.foreground6": "#c4a7e780",
+        "editorBracketMatch.background": "#000000",
+        "editorBracketMatch.border": "#908caa",
+        "editorBracketPairGuide.activeBackground1": "#31748f",
+        "editorBracketPairGuide.activeBackground2": "#ebbcba",
+        "editorBracketPairGuide.activeBackground3": "#c4a7e7",
+        "editorBracketPairGuide.activeBackground4": "#9ccfd8",
+        "editorBracketPairGuide.activeBackground5": "#f6c177",
+        "editorBracketPairGuide.activeBackground6": "#eb6f92",
+        "editorBracketPairGuide.background1": "#31748f80",
+        "editorBracketPairGuide.background2": "#ebbcba80",
+        "editorBracketPairGuide.background3": "#c4a7e780",
+        "editorBracketPairGuide.background4": "#9ccfd880",
+        "editorBracketPairGuide.background5": "#f6c17780",
+        "editorBracketPairGuide.background6": "#eb6f9280",
+        "editorCodeLens.foreground": "#ebbcba",
+        "editorCursor.background": "#e0def4",
+        "editorCursor.foreground": "#6e6a86",
+        "editorError.border": "#000000",
+        "editorError.foreground": "#eb6f92",
+        "editorGhostText.foreground": "#908caa",
+        "editorGroup.border": "#000000",
+        "editorGroup.dropBackground": "#1f1d2e",
+        "editorGroup.emptyBackground": "#000000",
+        "editorGroup.focusedEmptyBorder": "#000000",
+        "editorGroupHeader.noTabsBackground": "#000000",
+        "editorGroupHeader.tabsBackground": "#000000",
+        "editorGroupHeader.tabsBorder": "#000000",
+        "editorGutter.addedBackground": "#9ccfd8",
+        "editorGutter.background": "#191724",
+        "editorGutter.commentRangeForeground": "#908caa",
+        "editorGutter.deletedBackground": "#eb6f92",
+        "editorGutter.foldingControlForeground": "#c4a7e7",
+        "editorGutter.modifiedBackground": "#ebbcba",
+        "editorHint.border": "#000000",
+        "editorHint.foreground": "#908caa",
+        "editorHoverWidget.background": "#1f1d2e",
+        "editorHoverWidget.border": "#6e6a8680",
+        "editorHoverWidget.foreground": "#908caa",
+        "editorHoverWidget.highlightForeground": "#e0def4",
+        "editorHoverWidget.statusBarBackground": "#000000",
+        "editorIndentGuide.activeBackground": "#6e6a86",
+        "editorIndentGuide.background": "#6e6a8666",
+        "editorInfo.border": "#26233a",
+        "editorInfo.foreground": "#9ccfd8",
+        "editorInlayHint.background": "#26233a",
+        "editorInlayHint.foreground": "#908caa",
+        "editorInlayHint.parameterBackground": "#26233a",
+        "editorInlayHint.parameterForeground": "#c4a7e7",
+        "editorInlayHint.typeBackground": "#26233a",
+        "editorInlayHint.typeForeground": "#9ccfd8",
+        "editorLightBulb.foreground": "#31748f",
+        "editorLightBulbAutoFix.foreground": "#ebbcba",
+        "editorLineNumber.activeForeground": "#e0def4",
+        "editorLineNumber.foreground": "#908caa",
+        "editorLink.activeForeground": "#ebbcba",
+        "editorMarkerNavigation.background": "#1f1d2e",
+        "editorMarkerNavigationError.background": "#1f1d2e",
+        "editorMarkerNavigationInfo.background": "#1f1d2e",
+        "editorMarkerNavigationWarning.background": "#1f1d2e",
+        "editorOverviewRuler.addedForeground": "#9ccfd880",
+        "editorOverviewRuler.background": "#191724",
+        "editorOverviewRuler.border": "#6e6a8666",
+        "editorOverviewRuler.bracketMatchForeground": "#908caa",
+        "editorOverviewRuler.commonContentForeground": "#6e6a861a",
+        "editorOverviewRuler.currentContentForeground": "#6e6a8633",
+        "editorOverviewRuler.deletedForeground": "#eb6f9280",
+        "editorOverviewRuler.errorForeground": "#eb6f9280",
+        "editorOverviewRuler.findMatchForeground": "#6e6a8666",
+        "editorOverviewRuler.incomingContentForeground": "#c4a7e780",
+        "editorOverviewRuler.infoForeground": "#9ccfd880",
+        "editorOverviewRuler.modifiedForeground": "#ebbcba80",
+        "editorOverviewRuler.rangeHighlightForeground": "#6e6a8666",
+        "editorOverviewRuler.selectionHighlightForeground": "#6e6a8666",
+        "editorOverviewRuler.warningForeground": "#f6c17780",
+        "editorOverviewRuler.wordHighlightForeground": "#6e6a8633",
+        "editorOverviewRuler.wordHighlightStrongForeground": "#6e6a8666",
+        "editorPane.background": "#000000",
+        "editorRuler.foreground": "#6e6a8666",
+        "editorSuggestWidget.background": "#1f1d2e",
+        "editorSuggestWidget.border": "#000000",
+        "editorSuggestWidget.focusHighlightForeground": "#ebbcba",
+        "editorSuggestWidget.foreground": "#908caa",
+        "editorSuggestWidget.highlightForeground": "#ebbcba",
+        "editorSuggestWidget.selectedBackground": "#6e6a8633",
+        "editorSuggestWidget.selectedForeground": "#e0def4",
+        "editorSuggestWidget.selectedIconForeground": "#e0def4",
+        "editorUnnecessaryCode.border": "#000000",
+        "editorUnnecessaryCode.opacity": "#e0def480",
+        "editorWarning.border": "#000000",
+        "editorWarning.foreground": "#f6c177",
+        "editorWhitespace.foreground": "#6e6a86",
+        "editorWidget.background": "#1f1d2e",
+        "editorWidget.border": "#26233a",
+        "editorWidget.foreground": "#908caa",
+        "editorWidget.resizeBorder": "#6e6a86",
+        "errorForeground": "#eb6f92",
+        "extensionBadge.remoteBackground": "#c4a7e7",
+        "extensionBadge.remoteForeground": "#191724",
+        "extensionButton.prominentBackground": "#ebbcba",
+        "extensionButton.prominentForeground": "#191724",
+        "extensionButton.prominentHoverBackground": "#ebbcbae6",
+        "extensionIcon.preReleaseForeground": "#31748f",
+        "extensionIcon.starForeground": "#ebbcba",
+        "extensionIcon.verifiedForeground": "#c4a7e7",
+        "focusBorder": "#6e6a8633",
+        "foreground": "#e0def4",
+        "gitDecoration.addedResourceForeground": "#9ccfd8",
+        "gitDecoration.conflictingResourceForeground": "#eb6f92",
+        "gitDecoration.deletedResourceForeground": "#908caa",
+        "gitDecoration.ignoredResourceForeground": "#6e6a86",
+        "gitDecoration.modifiedResourceForeground": "#ebbcba",
+        "gitDecoration.renamedResourceForeground": "#31748f",
+        "gitDecoration.stageDeletedResourceForeground": "#eb6f92",
+        "gitDecoration.stageModifiedResourceForeground": "#c4a7e7",
+        "gitDecoration.submoduleResourceForeground": "#f6c177",
+        "gitDecoration.untrackedResourceForeground": "#f6c177",
+        "icon.foreground": "#908caa",
+        "input.background": "#26233a80",
+        "input.border": "#6e6a8633",
+        "input.foreground": "#e0def4",
+        "input.placeholderForeground": "#908caa",
+        "inputOption.activeBackground": "#ebbcba26",
+        "inputOption.activeForeground": "#ebbcba",
+        "inputValidation.errorBackground": "#1f1d2e",
+        "inputValidation.errorBorder": "#6e6a8666",
+        "inputValidation.errorForeground": "#eb6f92",
+        "inputValidation.infoBackground": "#1f1d2e",
+        "inputValidation.infoBorder": "#6e6a8666",
+        "inputValidation.infoForeground": "#9ccfd8",
+        "inputValidation.warningBackground": "#1f1d2e",
+        "inputValidation.warningBorder": "#6e6a8666",
+        "inputValidation.warningForeground": "#9ccfd880",
+        "keybindingLabel.background": "#26233a",
+        "keybindingLabel.border": "#6e6a8666",
+        "keybindingLabel.bottomBorder": "#6e6a8666",
+        "keybindingLabel.foreground": "#c4a7e7",
+        "keybindingTable.headerBackground": "#26233a",
+        "keybindingTable.rowsBackground": "#1f1d2e",
+        "list.activeSelectionBackground": "#6e6a8633",
+        "list.activeSelectionForeground": "#e0def4",
+        "list.deemphasizedForeground": "#908caa",
+        "list.dropBackground": "#1f1d2e",
+        "list.errorForeground": "#eb6f92",
+        "list.filterMatchBackground": "#1f1d2e",
+        "list.filterMatchBorder": "#ebbcba",
+        "list.focusBackground": "#6e6a8666",
+        "list.focusForeground": "#e0def4",
+        "list.focusOutline": "#6e6a8633",
+        "list.highlightForeground": "#ebbcba",
+        "list.hoverBackground": "#6e6a861a",
+        "list.hoverForeground": "#e0def4",
+        "list.inactiveFocusBackground": "#6e6a861a",
+        "list.inactiveSelectionBackground": "#1f1d2e",
+        "list.inactiveSelectionForeground": "#e0def4",
+        "list.invalidItemForeground": "#eb6f92",
+        "list.warningForeground": "#f6c177",
+        "listFilterWidget.background": "#1f1d2e",
+        "listFilterWidget.noMatchesOutline": "#eb6f92",
+        "listFilterWidget.outline": "#26233a",
+        "menu.background": "#1f1d2e",
+        "menu.border": "#6e6a861a",
+        "menu.foreground": "#e0def4",
+        "menu.selectionBackground": "#6e6a8633",
+        "menu.selectionBorder": "#26233a",
+        "menu.selectionForeground": "#e0def4",
+        "menu.separatorBackground": "#6e6a8666",
+        "menubar.selectionBackground": "#6e6a8633",
+        "menubar.selectionBorder": "#6e6a861a",
+        "menubar.selectionForeground": "#e0def4",
+        "merge.border": "#26233a",
+        "merge.commonContentBackground": "#6e6a8633",
+        "merge.commonHeaderBackground": "#6e6a8633",
+        "merge.currentContentBackground": "#f6c17780",
+        "merge.currentHeaderBackground": "#f6c17780",
+        "merge.incomingContentBackground": "#9ccfd880",
+        "merge.incomingHeaderBackground": "#9ccfd880",
+        "minimap.background": "#1f1d2e",
+        "minimap.errorHighlight": "#eb6f9280",
+        "minimap.findMatchHighlight": "#6e6a8633",
+        "minimap.selectionHighlight": "#6e6a8633",
+        "minimap.warningHighlight": "#f6c17780",
+        "minimapGutter.addedBackground": "#9ccfd8",
+        "minimapGutter.deletedBackground": "#eb6f92",
+        "minimapGutter.modifiedBackground": "#ebbcba",
+        "minimapSlider.activeBackground": "#6e6a8666",
+        "minimapSlider.background": "#6e6a8633",
+        "minimapSlider.hoverBackground": "#6e6a8633",
+        "notebook.cellBorderColor": "#9ccfd880",
+        "notebook.cellEditorBackground": "#1f1d2e",
+        "notebook.cellHoverBackground": "#26233a80",
+        "notebook.focusedCellBackground": "#6e6a861a",
+        "notebook.focusedCellBorder": "#9ccfd8",
+        "notebook.outputContainerBackgroundColor": "#6e6a861a",
+        "notificationCenter.border": "#6e6a8633",
+        "notificationCenterHeader.background": "#1f1d2e",
+        "notificationCenterHeader.foreground": "#908caa",
+        "notificationLink.foreground": "#c4a7e7",
+        "notifications.background": "#1f1d2e",
+        "notifications.border": "#6e6a8633",
+        "notifications.foreground": "#e0def4",
+        "notificationsErrorIcon.foreground": "#eb6f92",
+        "notificationsInfoIcon.foreground": "#9ccfd8",
+        "notificationsWarningIcon.foreground": "#f6c177",
+        "notificationToast.border": "#6e6a8633",
+        "panel.background": "#1f1d2e",
+        "panel.border": "#000000",
+        "panel.dropBorder": "#26233a",
+        "panelInput.border": "#1f1d2e",
+        "panelSection.dropBackground": "#6e6a8633",
+        "panelSectionHeader.background": "#1f1d2e",
+        "panelSectionHeader.foreground": "#e0def4",
+        "panelTitle.activeBorder": "#6e6a8666",
+        "panelTitle.activeForeground": "#e0def4",
+        "panelTitle.inactiveForeground": "#908caa",
+        "peekView.border": "#26233a",
+        "peekViewEditor.background": "#1f1d2e",
+        "peekViewEditor.matchHighlightBackground": "#6e6a8666",
+        "peekViewResult.background": "#1f1d2e",
+        "peekViewResult.fileForeground": "#908caa",
+        "peekViewResult.lineForeground": "#908caa",
+        "peekViewResult.matchHighlightBackground": "#6e6a8666",
+        "peekViewResult.selectionBackground": "#6e6a8633",
+        "peekViewResult.selectionForeground": "#e0def4",
+        "peekViewTitle.background": "#26233a",
+        "peekViewTitleDescription.foreground": "#908caa",
+        "pickerGroup.border": "#6e6a8666",
+        "pickerGroup.foreground": "#c4a7e7",
+        "ports.iconRunningProcessForeground": "#ebbcba",
+        "problemsErrorIcon.foreground": "#eb6f92",
+        "problemsInfoIcon.foreground": "#9ccfd8",
+        "problemsWarningIcon.foreground": "#f6c177",
+        "progressBar.background": "#ebbcba",
+        "quickInput.background": "#1f1d2e",
+        "quickInput.foreground": "#908caa",
+        "quickInputList.focusBackground": "#6e6a8633",
+        "quickInputList.focusForeground": "#e0def4",
+        "quickInputList.focusIconForeground": "#e0def4",
+        "scrollbar.shadow": "#1f1d2e4d",
+        "scrollbarSlider.activeBackground": "#31748f80",
+        "scrollbarSlider.background": "#6e6a8633",
+        "scrollbarSlider.hoverBackground": "#6e6a8666",
+        "searchEditor.findMatchBackground": "#6e6a8633",
+        "selection.background": "#6e6a8666",
+        "settings.focusedRowBackground": "#1f1d2e",
+        "settings.headerForeground": "#e0def4",
+        "settings.modifiedItemIndicator": "#ebbcba",
+        "settings.focusedRowBorder": "#6e6a8633",
+        "settings.rowHoverBackground": "#1f1d2e",
+        "sideBar.background": "#191724",
+        "sideBar.dropBackground": "#1f1d2e",
+        "sideBar.foreground": "#908caa",
+        "sideBarSectionHeader.background": "#000000",
+        "sideBarSectionHeader.border": "#6e6a8633",
+        "statusBar.background": "#191724",
+        "statusBar.debuggingBackground": "#c4a7e7",
+        "statusBar.debuggingForeground": "#191724",
+        "statusBar.foreground": "#908caa",
+        "statusBar.noFolderBackground": "#191724",
+        "statusBar.noFolderForeground": "#908caa",
+        "statusBarItem.activeBackground": "#6e6a8666",
+        "statusBarItem.hoverBackground": "#6e6a8633",
+        "statusBarItem.prominentBackground": "#26233a",
+        "statusBarItem.prominentForeground": "#e0def4",
+        "statusBarItem.prominentHoverBackground": "#6e6a8633",
+        "statusBarItem.remoteBackground": "#191724",
+        "statusBarItem.remoteForeground": "#f6c177",
+        "statusBarItem.errorBackground": "#191724",
+        "statusBarItem.errorForeground": "#eb6f92",
+        "symbolIcon.arrayForeground": "#908caa",
+        "symbolIcon.classForeground": "#908caa",
+        "symbolIcon.colorForeground": "#908caa",
+        "symbolIcon.constantForeground": "#908caa",
+        "symbolIcon.constructorForeground": "#908caa",
+        "symbolIcon.enumeratorForeground": "#908caa",
+        "symbolIcon.enumeratorMemberForeground": "#908caa",
+        "symbolIcon.eventForeground": "#908caa",
+        "symbolIcon.fieldForeground": "#908caa",
+        "symbolIcon.fileForeground": "#908caa",
+        "symbolIcon.folderForeground": "#908caa",
+        "symbolIcon.functionForeground": "#908caa",
+        "symbolIcon.interfaceForeground": "#908caa",
+        "symbolIcon.keyForeground": "#908caa",
+        "symbolIcon.keywordForeground": "#908caa",
+        "symbolIcon.methodForeground": "#908caa",
+        "symbolIcon.moduleForeground": "#908caa",
+        "symbolIcon.namespaceForeground": "#908caa",
+        "symbolIcon.nullForeground": "#908caa",
+        "symbolIcon.numberForeground": "#908caa",
+        "symbolIcon.objectForeground": "#908caa",
+        "symbolIcon.operatorForeground": "#908caa",
+        "symbolIcon.packageForeground": "#908caa",
+        "symbolIcon.propertyForeground": "#908caa",
+        "symbolIcon.referenceForeground": "#908caa",
+        "symbolIcon.snippetForeground": "#908caa",
+        "symbolIcon.stringForeground": "#908caa",
+        "symbolIcon.structForeground": "#908caa",
+        "symbolIcon.textForeground": "#908caa",
+        "symbolIcon.typeParameterForeground": "#908caa",
+        "symbolIcon.unitForeground": "#908caa",
+        "symbolIcon.variableForeground": "#908caa",
+        "tab.activeBackground": "#6e6a861a",
+        "tab.activeForeground": "#e0def4",
+        "tab.activeModifiedBorder": "#9ccfd8",
+        "tab.border": "#000000",
+        "tab.hoverBackground": "#6e6a8633",
+        "tab.inactiveBackground": "#000000",
+        "tab.inactiveForeground": "#908caa",
+        "tab.inactiveModifiedBorder": "#9ccfd880",
+        "tab.lastPinnedBorder": "#6e6a86",
+        "tab.unfocusedActiveBackground": "#000000",
+        "tab.unfocusedHoverBackground": "#000000",
+        "tab.unfocusedInactiveBackground": "#000000",
+        "tab.unfocusedInactiveModifiedBorder": "#9ccfd880",
+        "terminal.ansiBlack": "#26233a",
+        "terminal.ansiBlue": "#9ccfd8",
+        "terminal.ansiBrightBlack": "#908caa",
+        "terminal.ansiBrightBlue": "#9ccfd8",
+        "terminal.ansiBrightCyan": "#ebbcba",
+        "terminal.ansiBrightGreen": "#31748f",
+        "terminal.ansiBrightMagenta": "#c4a7e7",
+        "terminal.ansiBrightRed": "#eb6f92",
+        "terminal.ansiBrightWhite": "#e0def4",
+        "terminal.ansiBrightYellow": "#f6c177",
+        "terminal.ansiCyan": "#ebbcba",
+        "terminal.ansiGreen": "#31748f",
+        "terminal.ansiMagenta": "#c4a7e7",
+        "terminal.ansiRed": "#eb6f92",
+        "terminal.ansiWhite": "#e0def4",
+        "terminal.ansiYellow": "#f6c177",
+        "terminal.dropBackground": "#6e6a8633",
+        "terminal.foreground": "#e0def4",
+        "terminal.selectionBackground": "#6e6a8633",
+        "terminal.tab.activeBorder": "#e0def4",
+        "terminalCursor.background": "#e0def4",
+        "terminalCursor.foreground": "#6e6a86",
+        "textBlockQuote.background": "#1f1d2e",
+        "textBlockQuote.border": "#6e6a8633",
+        "textCodeBlock.background": "#1f1d2e",
+        "textLink.activeForeground": "#c4a7e7e6",
+        "textLink.foreground": "#c4a7e7",
+        "textPreformat.foreground": "#f6c177",
+        "textSeparator.foreground": "#908caa",
+        "titleBar.activeBackground": "#191724",
+        "titleBar.activeForeground": "#908caa",
+        "titleBar.inactiveBackground": "#1f1d2e",
+        "titleBar.inactiveForeground": "#908caa",
+        "toolbar.activeBackground": "#6e6a8666",
+        "toolbar.hoverBackground": "#6e6a8633",
+        "tree.indentGuidesStroke": "#908caa",
+        "walkThrough.embeddedEditorBackground": "#191724",
+        "welcomePage.background": "#191724",
+        "welcomePage.buttonBackground": "#1f1d2e",
+        "welcomePage.buttonHoverBackground": "#26233a",
+        "widget.shadow": "#1f1d2e4d",
+        "window.activeBorder": "#1f1d2e",
+        "window.inactiveBorder": "#1f1d2e"
+    },
+    "tokenColors": [
+        {
+            "scope": ["comment"],
+            "settings": {
+                "foreground": "#6e6a86",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["constant"],
+            "settings": {
+                "foreground": "#31748f"
+            }
+        },
+        {
+            "scope": ["constant.numeric", "constant.language"],
+            "settings": {
+                "foreground": "#ebbcba"
+            }
+        },
+        {
+            "scope": ["entity.name"],
+            "settings": {
+                "foreground": "#ebbcba"
+            }
+        },
+        {
+            "scope": [
+                "entity.name.section",
+                "entity.name.tag",
+                "entity.name.namespace",
+                "entity.name.type"
+            ],
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": ["entity.other.attribute-name", "entity.other.inherited-class"],
+            "settings": {
+                "foreground": "#c4a7e7",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["invalid"],
+            "settings": {
+                "foreground": "#eb6f92"
+            }
+        },
+        {
+            "scope": ["invalid.deprecated"],
+            "settings": {
+                "foreground": "#908caa"
+            }
+        },
+        {
+            "scope": ["keyword"],
+            "settings": {
+                "foreground": "#31748f"
+            }
+        },
+        {
+            "scope": ["markup.inserted.diff"],
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": ["markup.deleted.diff"],
+            "settings": {
+                "foreground": "#eb6f92"
+            }
+        },
+        {
+            "scope": "markup.heading",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "markup.bold.markdown",
+            "settings": {
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "scope": "markup.italic.markdown",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["meta.diff.range"],
+            "settings": {
+                "foreground": "#c4a7e7"
+            }
+        },
+        {
+            "scope": ["meta.tag", "meta.brace"],
+            "settings": {
+                "foreground": "#e0def4"
+            }
+        },
+        {
+            "scope": ["meta.import", "meta.export"],
+            "settings": {
+                "foreground": "#31748f"
+            }
+        },
+        {
+            "scope": "meta.directive.vue",
+            "settings": {
+                "foreground": "#c4a7e7",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": "meta.property-name.css",
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": "meta.property-value.css",
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": "meta.tag.other.html",
+            "settings": {
+                "foreground": "#908caa"
+            }
+        },
+        {
+            "scope": ["punctuation"],
+            "settings": {
+                "foreground": "#908caa"
+            }
+        },
+        {
+            "scope": ["punctuation.accessor"],
+            "settings": {
+                "foreground": "#31748f"
+            }
+        },
+        {
+            "scope": ["punctuation.definition.string"],
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#6e6a86"
+            }
+        },
+        {
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#31748f"
+            }
+        },
+        {
+            "scope": ["string"],
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": ["support"],
+            "settings": {
+                "foreground": "#9ccfd8"
+            }
+        },
+        {
+            "scope": ["support.constant"],
+            "settings": {
+                "foreground": "#f6c177"
+            }
+        },
+        {
+            "scope": ["support.function"],
+            "settings": {
+                "foreground": "#eb6f92",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": ["variable"],
+            "settings": {
+                "foreground": "#ebbcba",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "scope": [
+                "variable.other",
+                "variable.language",
+                "variable.function",
+                "variable.argument"
+            ],
+            "settings": {
+                "foreground": "#e0def4"
+            }
+        },
+        {
+            "scope": ["variable.parameter"],
+            "settings": {
+                "foreground": "#c4a7e7"
+            }
+        }
+    ]
+}

assets/themes/src/vscode/solarized/LICENSE 🔗

@@ -0,0 +1,19 @@
+Copyright (c) 2011 Ethan Schoonover
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.

assets/themes/src/vscode/solarized/dark.json 🔗

@@ -0,0 +1,558 @@
+{
+  "type": "dark",
+  "colors": {
+    "errorForeground": "#ffeaea",
+    "focusBorder": "#2aa19899",
+    "selection.background": "#2aa19899",
+    "input.background": "#003847",
+    "input.foreground": "#93a1a1",
+    "inputOption.activeBorder": "#2aa19899",
+    "input.placeholderForeground": "#93a1a1aa",
+    "inputValidation.infoBackground": "#052730",
+    "inputValidation.infoBorder": "#363b5f",
+    "inputValidation.warningBackground": "#5d5938",
+    "inputValidation.warningBorder": "#9d8a5e",
+    "inputValidation.errorBackground": "#571b26",
+    "inputValidation.errorBorder": "#a92049",
+    "dropdown.background": "#00212b",
+    "dropdown.border": "#2aa19899",
+    "list.focusBackground": "#005a6f",
+    "list.activeSelectionBackground": "#005a6f",
+    "list.inactiveSelectionBackground": "#00445488",
+    "list.hoverBackground": "#004454aa",
+    "list.dropBackground": "#00445488",
+    "list.highlightForeground": "#1ebcc5",
+    "pickerGroup.foreground": "#2aa19899",
+    "pickerGroup.border": "#2aa19899",
+    "button.background": "#2aa19899",
+    "badge.background": "#047aa6",
+    "progressBar.background": "#047aa6",
+    "editor.background": "#002b36",
+    "editorWidget.background": "#00212b",
+    "editor.selectionBackground": "#073642",
+    "editor.selectionHighlightBackground": "#005a6faa",
+    "editorHoverWidget.background": "#004052",
+    "editor.lineHighlightBackground": "#073642",
+    "editorCursor.foreground": "#839496",
+    "editorWhitespace.foreground": "#93a1a180",
+    "editorLineNumber.foreground": "#566c74",
+    "editorLineNumber.activeForeground": "#6e8a93",
+    "editorGutter.background": "#073642",
+    "editorMarkerNavigationError.background": "#ab395b",
+    "editorMarkerNavigationWarning.background": "#5b7e7a",
+    "editor.wordHighlightBackground": "#004454aa",
+    "editor.wordHighlightStrongBackground": "#005a6faa",
+    "peekViewTitle.background": "#00212b",
+    "peekView.border": "#003847",
+    "peekViewResult.background": "#00212b",
+    "peekViewEditor.background": "#10192c",
+    "peekViewEditorGutter.background": "#073642",
+    "peekViewEditor.matchHighlightBackground": "#7744aa40",
+    "tab.activeBackground": "#002b37",
+    "tab.inactiveBackground": "#004052",
+    "tab.border": "#003847",
+    "tab.activeForeground": "#d6dbdb",
+    "tab.inactiveForeground": "#93a1a1",
+    "editorGroup.background": "#011b23",
+    "editorGroupHeader.tabsBackground": "#004052",
+    "editorGroup.border": "#00212b",
+    "editorGroup.dropBackground": "#2aa19844",
+    "panel.border": "#003847",
+    "statusBar.foreground": "#93a1a1",
+    "statusBar.background": "#00212b",
+    "statusBar.noFolderBackground": "#00212b",
+    "statusBarItem.prominentBackground": "#003847",
+    "statusBarItem.prominentHoverBackground": "#003847",
+    "activityBar.background": "#003847",
+    "sideBar.background": "#00212b",
+    "sideBarTitle.foreground": "#93a1a1",
+    "titleBar.activeBackground": "#002c39",
+    "terminal.foreground": "#839496",
+    "statusBar.debuggingBackground": "#00212b",
+    "debugExceptionWidget.border": "#ab395b",
+    "debugExceptionWidget.background": "#00212b",
+    "debugToolBar.background": "#00212b",
+    "terminal.ansiBlack": "#073642",
+    "terminal.ansiRed": "#dc322f",
+    "terminal.ansiGreen": "#859900",
+    "terminal.ansiYellow": "#b58900",
+    "terminal.ansiBlue": "#268bd2",
+    "terminal.ansiMagenta": "#d33682",
+    "terminal.ansiCyan": "#2aa198",
+    "terminal.ansiWhite": "#839496",
+    "terminal.ansiBrightBlack": "#586e75",
+    "terminal.ansiBrightRed": "#cb4b16",
+    "terminal.ansiBrightGreen": "#859900",
+    "terminal.ansiBrightYellow": "#657b83",
+    "terminal.ansiBrightBlue": "#839496",
+    "terminal.ansiBrightMagenta": "#6c71c4",
+    "terminal.ansiBrightCyan": "#93a1a1",
+    "terminal.ansiBrightWhite": "#839496",
+    "editorBracketHighlight.foreground1": "#268bd2",
+    "editorBracketHighlight.foreground2": "#b58900",
+    "editorBracketHighlight.foreground3": "#d33682"
+  },
+  "tokenColors": [
+    {
+      "settings": {
+        "foreground": "#bbbbbbff",
+        "background": "#002b36ff"
+      }
+    },
+    {
+      "scope": ["meta.embedded", "source.groovy.embedded"],
+      "settings": {
+        "background": "#002B36",
+        "foreground": "#93A1A1"
+      }
+    },
+    {
+      "name": "Comment",
+      "scope": "comment",
+      "settings": {
+        "fontStyle": "italic",
+        "foreground": "#657B83"
+      }
+    },
+    {
+      "name": "String",
+      "scope": "string",
+      "settings": {
+        "foreground": "#2AA198"
+      }
+    },
+    {
+      "name": "Regexp",
+      "scope": "string.regexp",
+      "settings": {
+        "foreground": "#D30102"
+      }
+    },
+    {
+      "name": "Number",
+      "scope": "constant.numeric",
+      "settings": {
+        "foreground": "#D33682"
+      }
+    },
+    {
+      "name": "Variable",
+      "scope": ["variable.language", "variable.other"],
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "name": "Keyword",
+      "scope": "keyword",
+      "settings": {
+        "foreground": "#859900"
+      }
+    },
+    {
+      "name": "Storage",
+      "scope": "storage",
+      "settings": {
+        "fontStyle": "bold",
+        "foreground": "#93A1A1"
+      }
+    },
+    {
+      "name": "Class name",
+      "scope": ["entity.name.class", "entity.name.type"],
+      "settings": {
+        "fontStyle": "",
+        "foreground": "#CB4B16"
+      }
+    },
+    {
+      "name": "Function name",
+      "scope": "entity.name.function",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "name": "Variable start",
+      "scope": "punctuation.definition.variable",
+      "settings": {
+        "foreground": "#859900"
+      }
+    },
+    {
+      "name": "Embedded code markers",
+      "scope": [
+        "punctuation.section.embedded.begin",
+        "punctuation.section.embedded.end"
+      ],
+      "settings": {
+        "foreground": "#D30102"
+      }
+    },
+    {
+      "name": "Built-in constant",
+      "scope": ["constant.language", "meta.preprocessor"],
+      "settings": {
+        "foreground": "#B58900"
+      }
+    },
+    {
+      "name": "Support.construct",
+      "scope": ["support.function.construct", "keyword.other.new"],
+      "settings": {
+        "foreground": "#CB4B16"
+      }
+    },
+    {
+      "name": "User-defined constant",
+      "scope": ["constant.character", "constant.other"],
+      "settings": {
+        "foreground": "#CB4B16"
+      }
+    },
+    {
+      "name": "Inherited class",
+      "scope": "entity.other.inherited-class",
+      "settings": {
+        "foreground": "#6C71C4"
+      }
+    },
+    {
+      "name": "Function argument",
+      "scope": "variable.parameter",
+      "settings": {}
+    },
+    {
+      "name": "Tag name",
+      "scope": "entity.name.tag",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "name": "Tag start/end",
+      "scope": "punctuation.definition.tag",
+      "settings": {
+        "foreground": "#657B83"
+      }
+    },
+    {
+      "name": "Tag attribute",
+      "scope": "entity.other.attribute-name",
+      "settings": {
+        "foreground": "#93A1A1"
+      }
+    },
+    {
+      "name": "Library function",
+      "scope": "support.function",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "name": "Continuation",
+      "scope": "punctuation.separator.continuation",
+      "settings": {
+        "foreground": "#D30102"
+      }
+    },
+    {
+      "name": "Library constant",
+      "scope": "support.constant",
+      "settings": {}
+    },
+    {
+      "name": "Library class/type",
+      "scope": ["support.type", "support.class"],
+      "settings": {
+        "foreground": "#859900"
+      }
+    },
+    {
+      "name": "Library Exception",
+      "scope": "support.type.exception",
+      "settings": {
+        "foreground": "#CB4B16"
+      }
+    },
+    {
+      "name": "Library variable",
+      "scope": "support.other.variable",
+      "settings": {}
+    },
+    {
+      "name": "Invalid",
+      "scope": "invalid",
+      "settings": {}
+    },
+    {
+      "name": "diff: header",
+      "scope": ["meta.diff", "meta.diff.header"],
+      "settings": {
+        "background": "#b58900",
+        "fontStyle": "italic",
+        "foreground": "#E0EDDD"
+      }
+    },
+    {
+      "name": "diff: deleted",
+      "scope": "markup.deleted",
+      "settings": {
+        "background": "#eee8d5",
+        "fontStyle": "",
+        "foreground": "#dc322f"
+      }
+    },
+    {
+      "name": "diff: changed",
+      "scope": "markup.changed",
+      "settings": {
+        "background": "#eee8d5",
+        "fontStyle": "",
+        "foreground": "#cb4b16"
+      }
+    },
+    {
+      "name": "diff: inserted",
+      "scope": "markup.inserted",
+      "settings": {
+        "background": "#eee8d5",
+        "foreground": "#219186"
+      }
+    },
+    {
+      "name": "Markup Quote",
+      "scope": "markup.quote",
+      "settings": {
+        "foreground": "#859900"
+      }
+    },
+    {
+      "name": "Markup Lists",
+      "scope": "markup.list",
+      "settings": {
+        "foreground": "#B58900"
+      }
+    },
+    {
+      "name": "Markup Styling",
+      "scope": ["markup.bold", "markup.italic"],
+      "settings": {
+        "foreground": "#D33682"
+      }
+    },
+    {
+      "name": "Markup Inline",
+      "scope": "markup.inline.raw",
+      "settings": {
+        "fontStyle": "",
+        "foreground": "#2AA198"
+      }
+    },
+    {
+      "name": "Markup Headings",
+      "scope": "markup.heading",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "name": "Markup Setext Header",
+      "scope": "markup.heading.setext",
+      "settings": {
+        "fontStyle": "",
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "scope": "token.info-token",
+      "settings": {
+        "foreground": "#6796e6"
+      }
+    },
+    {
+      "scope": "token.warn-token",
+      "settings": {
+        "foreground": "#cd9731"
+      }
+    },
+    {
+      "scope": "token.error-token",
+      "settings": {
+        "foreground": "#f44747"
+      }
+    },
+    {
+      "scope": "token.debug-token",
+      "settings": {
+        "foreground": "#b267e6"
+      }
+    },
+    {
+      "scope": "variable.object.property",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "variable.parameter",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "support.type",
+      "settings": {
+        "fontStyle": ""
+      }
+    },
+    {
+      "scope": "storage.type.function",
+      "settings": {
+        "fontStyle": ""
+      }
+    },
+    {
+      "scope": "entity.other.inherited-class",
+      "settings": {
+        "foreground": "#b58900"
+      }
+    },
+    {
+      "scope": "storage.modifier",
+      "settings": {
+        "foreground": "#859900ff",
+        "fontStyle": ""
+      }
+    },
+    {
+      "scope": "storage.type",
+      "settings": {
+        "foreground": "#859900ff",
+        "fontStyle": ""
+      }
+    },
+    {
+      "scope": "keyword.control.import",
+      "settings": {
+        "foreground": "#D33682"
+      }
+    },
+    {
+      "scope": "storage.modifier.async",
+      "settings": {
+        "foreground": "#859900ff",
+        "fontStyle": ""
+      }
+    },
+    {
+      "scope": "meta.import",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "source.ts",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "meta.function-call",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "entity.name.type",
+      "settings": {
+        "foreground": "#b58900"
+      }
+    },
+    {
+      "scope": "entity.name.function",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "variable.other",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "storage.modifier.tsx",
+      "settings": {
+        "foreground": "#859900"
+      }
+    },
+    {
+      "scope": "entity.name.type.class.python",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "scope": "support.type.python",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "scope": "source.python",
+      "settings": {
+        "foreground": "#839496"
+      }
+    },
+    {
+      "scope": "keyword.control.import",
+      "settings": {
+        "foreground": "#cb4b16"
+      }
+    },
+    {
+      "scope": "keyword.control.from",
+      "settings": {
+        "foreground": "#cb4b16"
+      }
+    },
+    {
+      "scope": "constant.language.python",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "scope": "entity.name.function.python",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "scope": "punctuation.separator.dictionary.key-value.json, punctuation.separator.array.json, punctuation.separator.dictionary.pair.json",
+      "settings": {
+        "foreground": "#657B83"
+      }
+    },
+    {
+      "scope": "storage.type.ts",
+      "settings": {
+        "foreground": "#268BD2"
+      }
+    },
+    {
+      "scope": "support.type.primitive",
+      "settings": {
+        "foreground": "#b58900"
+      }
+    },
+    {
+      "scope": "punctuation.definition.dictionary.begin.json, punctuation.definition.dictionary.end.json, punctuation.definition.array.begin.json, punctuation.definition.array.end.json",
+      "settings": {
+        "foreground": "#DC3272"
+      }
+    }
+  ]
+}

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

@@ -0,0 +1,16 @@
+{
+    "name": "Solarized",
+    "author": "Ethan Schoonover (altercation)",
+    "themes": [
+        {
+            "name": "Solarized Dark",
+            "file_name": "dark.json",
+            "appearance": "dark"
+        },
+        {
+            "name": "Solarized Light",
+            "file_name": "light.json",
+            "appearance": "light"
+        }
+    ]
+}

assets/themes/src/vscode/solarized/light.json 🔗

@@ -0,0 +1,591 @@
+{
+	"type": "light",
+	"colors": {
+		"focusBorder": "#d3af86",
+		"selection.background": "#ccc4b0",
+		"input.background": "#ddd6c1",
+		"input.foreground": "#586e75",
+		"inputOption.activeBorder": "#d3af86",
+		"input.placeholderForeground": "#586e75aa",
+		"dropdown.background": "#eee8d5",
+		"dropdown.border": "#d3af86",
+		"list.focusBackground": "#dfca8866",
+		"list.activeSelectionBackground": "#dfca88",
+		"list.activeSelectionForeground": "#6c6c6c",
+		"list.inactiveSelectionBackground": "#d1cbb8",
+		"list.hoverBackground": "#dfca8844",
+		"list.highlightForeground": "#b58900",
+		"pickerGroup.foreground": "#2aa19899",
+		"pickerGroup.border": "#2aa19899",
+		"button.background": "#ac9d57",
+		"badge.background": "#b58900aa",
+		"progressBar.background": "#b58900",
+		"editor.background": "#fdf6e3",
+		"editorWidget.background": "#eee8d5",
+		"editor.selectionBackground": "#eee8d5",
+		"editorHoverWidget.background": "#ccc4b0",
+		"editor.lineHighlightBackground": "#eee8d5",
+		"editorCursor.foreground": "#657b83",
+		"editorWhitespace.foreground": "#586e7580",
+		"editorLineNumber.foreground": "#9ca8a6",
+		"editorLineNumber.activeForeground": "#6f7776",
+		"editorGutter.background": "#eee8d5",
+		"peekViewTitle.background": "#eee8d5",
+		"peekView.border": "#b58900",
+		"peekViewResult.background": "#eee8d5",
+		"peekViewEditor.background": "#fffbf2",
+		"peekViewEditor.matchHighlightBackground": "#7744aa40",
+		"tab.activeBackground": "#fdf6e3",
+		"tab.inactiveBackground": "#d3cbb7",
+		"tab.border": "#ddd6c1",
+		"tab.inactiveForeground": "#586e75",
+		"editorGroup.background": "#fffbf2",
+		"editorGroupHeader.tabsBackground": "#d9d2c2",
+		"editorGroup.border": "#ddd6c1",
+		"editorGroup.dropBackground": "#ddd6c1aa",
+		"panel.border": "#ddd6c1",
+		"statusBar.foreground": "#586e75",
+		"statusBar.background": "#eee8d5",
+		"statusBar.noFolderBackground": "#eee8d5",
+		"statusBarItem.prominentBackground": "#ddd6c1",
+		"statusBarItem.prominentHoverBackground": "#ddd6c199",
+		"activityBar.background": "#ddd6c1",
+		"activityBar.foreground": "#584c27",
+		"activityBar.dropBackground": "#eee8d5",
+		"activityBarBadge.background": "#b58900",
+		"sideBar.background": "#eee8d5",
+		"sideBarTitle.foreground": "#586e75",
+		"titleBar.activeBackground": "#eee8d5",
+		"terminal.foreground": "#657b83",
+		"statusBar.debuggingBackground": "#eee8d5",
+		"debugExceptionWidget.border": "#ab395b",
+		"debugExceptionWidget.background": "#ddd6c1",
+		"debugToolBar.background": "#ddd6c1",
+		"extensionButton.prominentBackground": "#b58900",
+		"extensionButton.prominentHoverBackground": "#584c27aa",
+		"terminal.ansiBlack": "#657b83",
+		"terminal.ansiRed": "#dc322f",
+		"terminal.ansiGreen": "#859900",
+		"terminal.ansiYellow": "#b58900",
+		"terminal.ansiBlue": "#268bd2",
+		"terminal.ansiMagenta": "#d33682",
+		"terminal.ansiCyan": "#2aa198",
+		"terminal.ansiWhite": "#eee8d5",
+		"terminal.ansiBrightBlack": "#657b83",
+		"terminal.ansiBrightRed": "#cb4b16",
+		"terminal.ansiBrightGreen": "#859900",
+		"terminal.ansiBrightYellow": "#657b83",
+		"terminal.ansiBrightBlue": "#839496",
+		"terminal.ansiBrightMagenta": "#6c71c4",
+		"terminal.ansiBrightCyan": "#93a1a1",
+		"terminal.ansiBrightWhite": "#eee8d5",
+		"editorBracketHighlight.foreground1": "#268bd2",
+		"editorBracketHighlight.foreground2": "#b58900",
+		"editorBracketHighlight.foreground3": "#d33682"
+	},
+	"tokenColors": [
+		{
+			"settings": {
+				"foreground": "#333333ff",
+				"background": "#fdf6e3ff"
+			}
+		},
+		{
+			"scope": [
+				"meta.embedded",
+				"source.groovy.embedded"
+			],
+			"settings": {
+				"background": "#FDF6E3",
+				"foreground": "#657B83"
+			}
+		},
+		{
+			"name": "Comment",
+			"scope": "comment",
+			"settings": {
+				"fontStyle": "italic",
+				"foreground": "#93A1A1"
+			}
+		},
+		{
+			"name": "String",
+			"scope": "string",
+			"settings": {
+				"foreground": "#2AA198"
+			}
+		},
+		{
+			"name": "Regexp",
+			"scope": "string.regexp",
+			"settings": {
+				"foreground": "#D30102"
+			}
+		},
+		{
+			"name": "Number",
+			"scope": "constant.numeric",
+			"settings": {
+				"foreground": "#D33682"
+			}
+		},
+		{
+			"name": "Variable",
+			"scope": [
+				"variable.language",
+				"variable.other"
+			],
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"name": "Keyword",
+			"scope": "keyword",
+			"settings": {
+				"foreground": "#859900"
+			}
+		},
+		{
+			"name": "Storage",
+			"scope": "storage",
+			"settings": {
+				"fontStyle": "bold",
+				"foreground": "#073642"
+			}
+		},
+		{
+			"name": "Class name",
+			"scope": [
+				"entity.name.class",
+				"entity.name.type"
+			],
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"name": "Function name",
+			"scope": "entity.name.function",
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"name": "Variable start",
+			"scope": "punctuation.definition.variable",
+			"settings": {
+				"foreground": "#859900"
+			}
+		},
+		{
+			"name": "Embedded code markers",
+			"scope": [
+				"punctuation.section.embedded.begin",
+				"punctuation.section.embedded.end"
+			],
+			"settings": {
+				"foreground": "#D30102"
+			}
+		},
+		{
+			"name": "Built-in constant",
+			"scope": [
+				"constant.language",
+				"meta.preprocessor"
+			],
+			"settings": {
+				"foreground": "#B58900"
+			}
+		},
+		{
+			"name": "Support.construct",
+			"scope": [
+				"support.function.construct",
+				"keyword.other.new"
+			],
+			"settings": {
+				"foreground": "#D30102"
+			}
+		},
+		{
+			"name": "User-defined constant",
+			"scope": [
+				"constant.character",
+				"constant.other"
+			],
+			"settings": {
+				"foreground": "#CB4B16"
+			}
+		},
+		{
+			"name": "Inherited class",
+			"scope": "entity.other.inherited-class",
+			"settings": {}
+		},
+		{
+			"name": "Function argument",
+			"scope": "variable.parameter",
+			"settings": {}
+		},
+		{
+			"name": "Tag name",
+			"scope": "entity.name.tag",
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"name": "Tag start/end",
+			"scope": [
+				"punctuation.definition.tag.begin",
+				"punctuation.definition.tag.end"
+			],
+			"settings": {
+				"foreground": "#93A1A1"
+			}
+		},
+		{
+			"name": "Tag attribute",
+			"scope": "entity.other.attribute-name",
+			"settings": {
+				"foreground": "#93A1A1"
+			}
+		},
+		{
+			"name": "Library function",
+			"scope": "support.function",
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"name": "Continuation",
+			"scope": "punctuation.separator.continuation",
+			"settings": {
+				"foreground": "#D30102"
+			}
+		},
+		{
+			"name": "Library constant",
+			"scope": "support.constant",
+			"settings": {}
+		},
+		{
+			"name": "Library class/type",
+			"scope": [
+				"support.type",
+				"support.class"
+			],
+			"settings": {
+				"foreground": "#859900"
+			}
+		},
+		{
+			"name": "Library Exception",
+			"scope": "support.type.exception",
+			"settings": {
+				"foreground": "#CB4B16"
+			}
+		},
+		{
+			"name": "Library variable",
+			"scope": "support.other.variable",
+			"settings": {}
+		},
+		{
+			"name": "Invalid",
+			"scope": "invalid",
+			"settings": {}
+		},
+		{
+			"name": "diff: header",
+			"scope": [
+				"meta.diff",
+				"meta.diff.header"
+			],
+			"settings": {
+				"background": "#b58900",
+				"fontStyle": "italic",
+				"foreground": "#E0EDDD"
+			}
+		},
+		{
+			"name": "diff: deleted",
+			"scope": "markup.deleted",
+			"settings": {
+				"background": "#eee8d5",
+				"fontStyle": "",
+				"foreground": "#dc322f"
+			}
+		},
+		{
+			"name": "diff: changed",
+			"scope": "markup.changed",
+			"settings": {
+				"background": "#eee8d5",
+				"fontStyle": "",
+				"foreground": "#cb4b16"
+			}
+		},
+		{
+			"name": "diff: inserted",
+			"scope": "markup.inserted",
+			"settings": {
+				"background": "#eee8d5",
+				"foreground": "#219186"
+			}
+		},
+		{
+			"name": "Markup Quote",
+			"scope": "markup.quote",
+			"settings": {
+				"foreground": "#859900"
+			}
+		},
+		{
+			"name": "Markup Lists",
+			"scope": "markup.list",
+			"settings": {
+				"foreground": "#B58900"
+			}
+		},
+		{
+			"name": "Markup Styling",
+			"scope": [
+				"markup.bold",
+				"markup.italic"
+			],
+			"settings": {
+				"foreground": "#D33682"
+			}
+		},
+		{
+			"name": "Markup Inline",
+			"scope": "markup.inline.raw",
+			"settings": {
+				"fontStyle": "",
+				"foreground": "#2AA198"
+			}
+		},
+		{
+			"name": "Markup Headings",
+			"scope": "markup.heading",
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"name": "Markup Setext Header",
+			"scope": "markup.heading.setext",
+			"settings": {
+				"fontStyle": "",
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"scope": "token.info-token",
+			"settings": {
+				"foreground": "#316bcd"
+			}
+		},
+		{
+			"scope": "token.warn-token",
+			"settings": {
+				"foreground": "#cd9731"
+			}
+		},
+		{
+			"scope": "token.error-token",
+			"settings": {
+				"foreground": "#cd3131"
+			}
+		},
+		{
+			"scope": "token.debug-token",
+			"settings": {
+				"foreground": "#800080"
+			}
+		},
+		{
+			"scope": "storage.modifier",
+			"settings": {
+				"foreground": "#859900ff",
+				"fontStyle": ""
+			}
+		},
+		{
+			"scope": "storage.type",
+			"settings": {
+				"foreground": "#859900ff",
+				"fontStyle": ""
+			}
+		},
+		{
+			"scope": "keyword.control.import",
+			"settings": {
+				"foreground": "#D33682"
+			}
+		},
+		{
+			"scope": "storage.modifier.async",
+			"settings": {
+				"foreground": "#859900ff",
+				"fontStyle": ""
+			}
+		},
+		{
+			"scope": "meta.import",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "source.ts",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "meta.function-call",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "entity.name.type",
+			"settings": {
+				"foreground": "#b58900"
+			}
+		},
+		{
+			"scope": "entity.name.function",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "variable.other",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "storage.modifier.tsx",
+			"settings": {
+				"foreground": "#859900"
+			}
+		},
+		{
+			"scope": "storage.modifier",
+			"settings": {
+				"foreground": "#859900ff",
+				"fontStyle": ""
+			}
+		},
+		{
+			"scope": "storage.type",
+			"settings": {
+				"foreground": "#859900ff",
+				"fontStyle": ""
+			}
+		},
+		{
+			"scope": "keyword.control.import",
+			"settings": {
+				"foreground": "#D33682"
+			}
+		},
+		{
+			"scope": "storage.modifier.async",
+			"settings": {
+				"foreground": "#859900ff",
+				"fontStyle": ""
+			}
+		},
+		{
+			"scope": "meta.import",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "source.ts",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "meta.function-call",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "entity.name.type",
+			"settings": {
+				"foreground": "#b58900"
+			}
+		},
+		{
+			"scope": "entity.name.function",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "variable.other",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		},
+		{
+			"scope": "storage.modifier.tsx",
+			"settings": {
+				"foreground": "#859900"
+			}
+		},
+		{
+			"scope": "punctuation.separator.dictionary.key-value.json, punctuation.separator.array.json, punctuation.separator.dictionary.pair.json",
+			"settings": {
+				"foreground": "#657B83"
+			}
+		},
+		{
+			"scope": "storage.type",
+			"settings": {
+				"foreground": "#268BD2"
+			}
+		},
+		{
+			"scope": "punctuation.definition.dictionary.begin.json, punctuation.definition.dictionary.end.json, punctuation.definition.array.begin.json, punctuation.definition.array.end.json",
+			"settings": {
+				"foreground": "#DC3272"
+			}
+		},
+		{
+			"scope": "support.type.primitive",
+			"settings": {
+				"foreground": "#b58900"
+			}
+		},
+		{
+			"scope": "keyword.control.import",
+			"settings": {
+				"foreground": "#cb4b16"
+			}
+		},
+		{
+			"scope": "keyword.control.from",
+			"settings": {
+				"foreground": "#cb4b16"
+			}
+		},
+		{
+			"scope": "source",
+			"settings": {
+				"foreground": "#657b83"
+			}
+		}
+	]
+}

assets/themes/src/vscode/synthwave-84/LICENSE 🔗

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Robb Owen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

assets/themes/src/vscode/synthwave-84/synthwave.json 🔗

@@ -0,0 +1,822 @@
+{
+    "name": "SynthWave 84",
+    "type": "dark",
+    "semanticHighlighting": true,
+    "colors": {
+        "focusBorder": "#1f212b",
+        "foreground": "#ffffff",
+        "widget.shadow": "#2a2139",
+        "selection.background": "#ffffff20",
+        "errorForeground": "#fe4450",
+        "textLink.activeForeground": "#ff7edb",
+        "textLink.foreground": "#f97e72",
+        "button.background": "#614D85",
+        "dropdown.background": "#232530",
+        "dropdown.listBackground": "#2a2139",
+        "input.background": "#2a2139",
+        "inputOption.activeBorder": "#ff7edb99",
+        "inputValidation.errorBackground": "#fe445080",
+        "inputValidation.errorBorder": "#fe445000",
+        "scrollbar.shadow": "#2a2139",
+        "scrollbarSlider.activeBackground": "#9d8bca20",
+        "scrollbarSlider.background": "#9d8bca30",
+        "scrollbarSlider.hoverBackground": "#9d8bca50",
+        "badge.foreground": "#ffffff",
+        "badge.background": "#2a2139",
+        "progressBar.background": "#f97e72",
+        "list.activeSelectionBackground": "#ffffff20",
+        "list.activeSelectionForeground": "#ffffff",
+        "list.dropBackground": "#34294f66",
+        "list.focusBackground": "#ffffff20",
+        "list.focusForeground": "#ffffff",
+        "list.highlightForeground": "#f97e72",
+        "list.hoverBackground": "#37294d99",
+        "list.hoverForeground": "#ffffff",
+        "list.inactiveSelectionBackground": "#ffffff20",
+        "list.inactiveSelectionForeground": "#ffffff",
+        "list.inactiveFocusBackground": "#2a213999",
+        "list.errorForeground": "#fe4450E6",
+        "list.warningForeground": "#72f1b8bb",
+        "activityBar.background": "#171520",
+        "activityBar.dropBackground": "#34294f66",
+        "activityBar.foreground": "#ffffffCC",
+        "activityBarBadge.background": "#f97e72",
+        "activityBarBadge.foreground": "#2a2139",
+        "sideBar.background": "#241b2f",
+        "sideBar.foreground": "#ffffff99",
+        "sideBar.dropBackground": "#34294f4c",
+        "sideBarSectionHeader.background": "#241b2f",
+        "sideBarSectionHeader.foreground": "#ffffffca",
+        "menu.background": "#463465",
+        "editorGroup.border": "#495495",
+        "editorGroup.dropBackground": "#4954954a",
+        "editorGroupHeader.tabsBackground": "#241b2f",
+        "tab.border": "#241b2f00",
+        "tab.activeBorder": "#880088",
+        "tab.inactiveBackground": "#262335",
+        "editor.background": "#262335",
+        "editorLineNumber.foreground": "#ffffff73",
+        "editorLineNumber.activeForeground": "#ffffffcc",
+        "editorCursor.background": "#241b2f",
+        "editorCursor.foreground": "#f97e72",
+        "editor.selectionBackground": "#ffffff20",
+        "editor.selectionHighlightBackground": "#ffffff20",
+        "editor.wordHighlightBackground": "#34294f88",
+        "editor.wordHighlightStrongBackground": "#34294f88",
+        "editor.findMatchBackground": "#D18616bb",
+        "editor.findMatchHighlightBackground": "#D1861655",
+        "editor.findRangeHighlightBackground": "#34294f1a",
+        "editor.hoverHighlightBackground": "#463564",
+        "editor.lineHighlightBorder": "#7059AB66",
+        "editor.rangeHighlightBackground": "#49549539",
+        "editorIndentGuide.background": "#444251",
+        "editorIndentGuide.activeBackground": "#A148AB80",
+        "editorRuler.foreground": "#A148AB80",
+        "editorCodeLens.foreground": "#ffffff7c",
+        "editorBracketMatch.background": "#34294f66",
+        "editorBracketMatch.border": "#495495",
+        "editorOverviewRuler.border": "#34294fb3",
+        "editorOverviewRuler.findMatchForeground": "#D1861699",
+        "editorOverviewRuler.modifiedForeground": "#b893ce99",
+        "editorOverviewRuler.addedForeground": "#09f7a099",
+        "editorOverviewRuler.deletedForeground": "#fe445099",
+        "editorOverviewRuler.errorForeground": "#fe4450dd",
+        "editorOverviewRuler.warningForeground": "#72f1b8cc",
+        "editorError.foreground": "#fe4450",
+        "editorWarning.foreground": "#72f1b8cc",
+        "editorGutter.modifiedBackground": "#b893ce8f",
+        "editorGutter.addedBackground": "#206d4bd6",
+        "editorGutter.deletedBackground": "#fa2e46a4",
+        "diffEditor.insertedTextBackground": "#0beb9935",
+        "diffEditor.removedTextBackground": "#fe445035",
+        "editorWidget.background": "#171520DC",
+        "editorWidget.border": "#ffffff22",
+        "editorWidget.resizeBorder": "#ffffff44",
+        "editorSuggestWidget.highlightForeground": "#f97e72",
+        "editorSuggestWidget.selectedBackground": "#ffffff36",
+        "peekView.border": "#495495",
+        "peekViewEditor.background": "#232530",
+        "peekViewEditor.matchHighlightBackground": "#D18616bb",
+        "peekViewResult.background": "#232530",
+        "peekViewResult.matchHighlightBackground": "#D1861655",
+        "peekViewResult.selectionBackground": "#2a213980",
+        "peekViewTitle.background": "#232530",
+        "panelTitle.activeBorder": "#f97e72",
+        "statusBar.background": "#241b2f",
+        "statusBar.foreground": "#ffffff80",
+        "statusBar.debuggingBackground": "#f97e72",
+        "statusBar.debuggingForeground": "#08080f",
+        "statusBar.noFolderBackground": "#241b2f",
+        "statusBarItem.prominentBackground": "#2a2139",
+        "statusBarItem.prominentHoverBackground": "#34294f",
+        "titleBar.activeBackground": "#241b2f",
+        "titleBar.inactiveBackground": "#241b2f",
+        "extensionButton.prominentBackground": "#f97e72",
+        "extensionButton.prominentHoverBackground": "#ff7edb",
+        "pickerGroup.foreground": "#f97e72ea",
+        "terminal.foreground": "#ffffff",
+        "terminal.ansiBlue": "#03edf9",
+        "terminal.ansiBrightBlue": "#03edf9",
+        "terminal.ansiBrightCyan": "#03edf9",
+        "terminal.ansiBrightGreen": "#72f1b8",
+        "terminal.ansiBrightMagenta": "#ff7edb",
+        "terminal.ansiBrightRed": "#fe4450",
+        "terminal.ansiBrightYellow": "#fede5d",
+        "terminal.ansiCyan": "#03edf9",
+        "terminal.ansiGreen": "#72f1b8",
+        "terminal.ansiMagenta": "#ff7edb",
+        "terminal.ansiRed": "#fe4450",
+        "terminal.ansiYellow": "#f3e70f",
+        "terminal.selectionBackground": "#ffffff20",
+        "terminalCursor.background": "#ffffff",
+        "terminalCursor.foreground": "#03edf9",
+        "debugToolBar.background": "#463465",
+        "walkThrough.embeddedEditorBackground": "#232530",
+        "gitDecoration.modifiedResourceForeground": "#b893ceee",
+        "gitDecoration.deletedResourceForeground": "#fe4450",
+        "gitDecoration.addedResourceForeground": "#72f1b8cc",
+        "gitDecoration.untrackedResourceForeground": "#72f1b8",
+        "gitDecoration.ignoredResourceForeground": "#ffffff59",
+        "minimapGutter.addedBackground": "#09f7a099",
+        "minimapGutter.modifiedBackground": "#b893ce",
+        "minimapGutter.deletedBackground": "#fe4450",
+        "breadcrumbPicker.background": "#232530"
+    },
+    "tokenColors": [
+        {
+            "name": "Comment",
+            "scope": [
+                "comment",
+                "string.quoted.docstring.multi.python",
+                "string.quoted.docstring.multi.python punctuation.definition.string.begin.python",
+                "string.quoted.docstring.multi.python punctuation.definition.string.end.python"
+            ],
+            "settings": {
+                "foreground": "#848bbd",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "String",
+            "scope": ["string.quoted", "string.template", "punctuation.definition.string"],
+            "settings": {
+                "foreground": "#ff8b39"
+            }
+        },
+        {
+            "name": "Punctuation within templates",
+            "scope": "string.template meta.embedded.line",
+            "settings": {
+                "foreground": "#b6b1b1"
+            }
+        },
+        {
+            "name": "Variable",
+            "scope": ["variable", "entity.name.variable"],
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "Language variable",
+            "scope": "variable.language",
+            "settings": {
+                "foreground": "#fe4450",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Parameter",
+            "scope": "variable.parameter",
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Storage (declaration or modifier keyword)",
+            "scope": ["storage.type", "storage.modifier"],
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Constant",
+            "scope": "constant",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Regex",
+            "scope": "string.regexp",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Number",
+            "scope": "constant.numeric",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Language constant (boolean, null)",
+            "scope": "constant.language",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Character escape",
+            "scope": "constant.character.escape",
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Entity",
+            "scope": "entity.name",
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "HTML or XML tag",
+            "scope": "entity.name.tag",
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "HTML or XML tag brackets",
+            "scope": ["punctuation.definition.tag"],
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Tag attribute",
+            "scope": "entity.other.attribute-name",
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Tag attribute HTML",
+            "scope": "entity.other.attribute-name.html",
+            "settings": {
+                "foreground": "#fede5d",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Class",
+            "scope": ["entity.name.type", "meta.attribute.class.html"],
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "Inherited class",
+            "scope": "entity.other.inherited-class",
+            "settings": {
+                "foreground": "#D50"
+            }
+        },
+        {
+            "name": "Function",
+            "scope": ["entity.name.function", "variable.function"],
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "JS Export",
+            "scope": ["keyword.control.export.js", "keyword.control.import.js"],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "JS Numerics",
+            "scope": ["constant.numeric.decimal.js"],
+            "settings": {
+                "foreground": "#2EE2FA"
+            }
+        },
+        {
+            "name": "Keyword",
+            "scope": "keyword",
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Control keyword",
+            "scope": "keyword.control",
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Operator",
+            "scope": "keyword.operator",
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Special operator",
+            "scope": [
+                "keyword.operator.new",
+                "keyword.operator.expression",
+                "keyword.operator.logical"
+            ],
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Unit",
+            "scope": "keyword.other.unit",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Support",
+            "scope": "support",
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "Support function",
+            "scope": "support.function",
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Support variable",
+            "scope": "support.variable",
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "Object literal key / property",
+            "scope": ["meta.object-literal.key", "support.type.property-name"],
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "Key-value separator",
+            "scope": "punctuation.separator.key-value",
+            "settings": {
+                "foreground": "#b6b1b1"
+            }
+        },
+        {
+            "name": "Embedded punctuation",
+            "scope": "punctuation.section.embedded",
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Template expression",
+            "scope": [
+                "punctuation.definition.template-expression.begin",
+                "punctuation.definition.template-expression.end"
+            ],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "CSS property",
+            "scope": ["support.type.property-name.css", "support.type.property-name.json"],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "JS Switch control",
+            "scope": "switch-block.expr.js",
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "JS object path",
+            "scope": "variable.other.constant.property.js, variable.other.property.js",
+            "settings": {
+                "foreground": "#2ee2fa"
+            }
+        },
+        {
+            "name": "Color",
+            "scope": "constant.other.color",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Font names",
+            "scope": "support.constant.font-name",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "CSS #id",
+            "scope": "entity.other.attribute-name.id",
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Pseudo CSS",
+            "scope": [
+                "entity.other.attribute-name.pseudo-element",
+                "entity.other.attribute-name.pseudo-class"
+            ],
+            "settings": {
+                "foreground": "#D50"
+            }
+        },
+        {
+            "name": "CSS support functions (rgb)",
+            "scope": "support.function.misc.css",
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "Markup heading",
+            "scope": ["markup.heading", "entity.name.section"],
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "Markup text",
+            "scope": ["text.html", "keyword.operator.assignment"],
+            "settings": {
+                "foreground": "#ffffffee"
+            }
+        },
+        {
+            "name": "Markup quote",
+            "scope": "markup.quote",
+            "settings": {
+                "foreground": "#b6b1b1cc",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Markup list",
+            "scope": "beginning.punctuation.definition.list",
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "Markup link",
+            "scope": "markup.underline.link",
+            "settings": {
+                "foreground": "#D50"
+            }
+        },
+        {
+            "name": "Markup link description",
+            "scope": "string.other.link.description",
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Python function call",
+            "scope": "meta.function-call.generic.python",
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Python variable params",
+            "scope": "variable.parameter.function-call.python",
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "C# storage type",
+            "scope": "storage.type.cs",
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "C# local variable",
+            "scope": "entity.name.variable.local.cs",
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "C# properties and fields",
+            "scope": ["entity.name.variable.field.cs", "entity.name.variable.property.cs"],
+            "settings": {
+                "foreground": "#ff7edb"
+            }
+        },
+        {
+            "name": "C placeholder",
+            "scope": "constant.other.placeholder.c",
+            "settings": {
+                "foreground": "#72f1b8",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "C preprocessors",
+            "scope": ["keyword.control.directive.include.c", "keyword.control.directive.define.c"],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "C storage modifier",
+            "scope": "storage.modifier.c",
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "C++ operators",
+            "scope": "source.cpp keyword.operator",
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "C++ placeholder",
+            "scope": "constant.other.placeholder.cpp",
+            "settings": {
+                "foreground": "#72f1b8",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "C++ include",
+            "scope": [
+                "keyword.control.directive.include.cpp",
+                "keyword.control.directive.define.cpp"
+            ],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "C++ constant modifier",
+            "scope": "storage.modifier.specifier.const.cpp",
+            "settings": {
+                "foreground": "#fe4450"
+            }
+        },
+        {
+            "name": "Elixir Classes",
+            "scope": [
+                "source.elixir support.type.elixir",
+                "source.elixir meta.module.elixir entity.name.class.elixir"
+            ],
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Elixir Functions",
+            "scope": "source.elixir entity.name.function",
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "Elixir Constants",
+            "scope": [
+                "source.elixir constant.other.symbol.elixir",
+                "source.elixir constant.other.keywords.elixir"
+            ],
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Elixir String Punctuation",
+            "scope": "source.elixir punctuation.definition.string",
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "Elixir",
+            "scope": [
+                "source.elixir variable.other.readwrite.module.elixir",
+                "source.elixir variable.other.readwrite.module.elixir punctuation.definition.variable.elixir"
+            ],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "Elixir Binary Punctuation",
+            "scope": "source.elixir .punctuation.binary.elixir",
+            "settings": {
+                "foreground": "#ff7edb",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Clojure Globals",
+            "scope": ["entity.global.clojure"],
+            "settings": {
+                "foreground": "#36f9f6",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Clojure Storage",
+            "scope": ["storage.control.clojure"],
+            "settings": {
+                "foreground": "#36f9f6",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Clojure Metadata",
+            "scope": ["meta.metadata.simple.clojure", "meta.metadata.map.clojure"],
+            "settings": {
+                "foreground": "#fe4450",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Clojure Macros, Quoted",
+            "scope": ["meta.quoted-expression.clojure"],
+            "settings": {
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Clojure Symbols",
+            "scope": ["meta.symbol.clojure"],
+            "settings": {
+                "foreground": "#ff7edbff"
+            }
+        },
+        {
+            "name": "Go basic",
+            "scope": "source.go",
+            "settings": {
+                "foreground": "#ff7edbff"
+            }
+        },
+        {
+            "name": "Go Function Calls",
+            "scope": "source.go meta.function-call.go",
+            "settings": {
+                "foreground": "#36f9f6"
+            }
+        },
+        {
+            "name": "Go Keywords",
+            "scope": [
+                "source.go keyword.package.go",
+                "source.go keyword.import.go",
+                "source.go keyword.function.go",
+                "source.go keyword.type.go",
+                "source.go keyword.const.go",
+                "source.go keyword.var.go",
+                "source.go keyword.map.go",
+                "source.go keyword.channel.go",
+                "source.go keyword.control.go"
+            ],
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Go interfaces",
+            "scope": [
+                "source.go storage.type",
+                "source.go keyword.struct.go",
+                "source.go keyword.interface.go"
+            ],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "Go Constants e.g. nil, string format (%s, %d, etc.)",
+            "scope": [
+                "source.go constant.language.go",
+                "source.go constant.other.placeholder.go",
+                "source.go variable"
+            ],
+            "settings": {
+                "foreground": "#2EE2FA"
+            }
+        },
+        {
+            "name": "Markdown links and image paths",
+            "scope": ["markup.underline.link.markdown", "markup.inline.raw.string.markdown"],
+            "settings": {
+                "foreground": "#72f1b8",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Markdown links and image paths",
+            "scope": ["string.other.link.title.markdown"],
+            "settings": {
+                "foreground": "#fede5d"
+            }
+        },
+        {
+            "name": "Markdown headings",
+            "scope": ["markup.heading.markdown", "entity.name.section.markdown"],
+            "settings": {
+                "foreground": "#ff7edb",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Markdown italic",
+            "scope": ["markup.italic.markdown"],
+            "settings": {
+                "foreground": "#2EE2FA",
+                "fontStyle": "italic"
+            }
+        },
+        {
+            "name": "Markdown bold",
+            "scope": ["markup.bold.markdown"],
+            "settings": {
+                "foreground": "#2EE2FA",
+                "fontStyle": "bold"
+            }
+        },
+        {
+            "name": "Markdown quotes",
+            "scope": ["punctuation.definition.quote.begin.markdown", "markup.quote.markdown"],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "Basic source colours",
+            "scope": ["source.dart", "source.python", "source.scala"],
+            "settings": {
+                "foreground": "#ff7edbff"
+            }
+        },
+        {
+            "name": "Dart strings",
+            "scope": ["string.interpolated.single.dart"],
+            "settings": {
+                "foreground": "#f97e72"
+            }
+        },
+        {
+            "name": "Dart variable params",
+            "scope": ["variable.parameter.dart"],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        },
+        {
+            "name": "Dart numerics",
+            "scope": ["constant.numeric.dart"],
+            "settings": {
+                "foreground": "#2EE2FA"
+            }
+        },
+        {
+            "name": "Scala variable params",
+            "scope": ["variable.parameter.scala"],
+            "settings": {
+                "foreground": "#2EE2FA"
+            }
+        },
+        {
+            "name": "Scala",
+            "scope": ["meta.template.expression.scala"],
+            "settings": {
+                "foreground": "#72f1b8"
+            }
+        }
+    ]
+}

crates/channel2/Cargo.toml 🔗

@@ -0,0 +1,54 @@
+[package]
+name = "channel2"
+version = "0.1.0"
+edition = "2021"
+publish = false
+
+[lib]
+path = "src/channel2.rs"
+doctest = false
+
+[features]
+test-support = ["collections/test-support", "gpui/test-support", "rpc/test-support"]
+
+[dependencies]
+client = { package = "client2", path = "../client2" }
+collections = { path = "../collections" }
+db = { package = "db2", path = "../db2" }
+gpui = { package = "gpui2", path = "../gpui2" }
+util = { path = "../util" }
+rpc = { package = "rpc2", path = "../rpc2" }
+text = { path = "../text" }
+language = { package = "language2", path = "../language2" }
+settings = { package = "settings2", path = "../settings2" }
+feature_flags = { package = "feature_flags2", path = "../feature_flags2" }
+sum_tree = { path = "../sum_tree" }
+clock = { path = "../clock" }
+
+anyhow.workspace = true
+futures.workspace = true
+image = "0.23"
+lazy_static.workspace = true
+smallvec.workspace = true
+log.workspace = true
+parking_lot.workspace = true
+postage.workspace = true
+rand.workspace = true
+schemars.workspace = true
+smol.workspace = true
+thiserror.workspace = true
+time.workspace = true
+tiny_http = "0.8"
+uuid.workspace = true
+url = "2.2"
+serde.workspace = true
+serde_derive.workspace = true
+tempfile = "3"
+
+[dev-dependencies]
+collections = { path = "../collections", features = ["test-support"] }
+gpui = { package = "gpui2", path = "../gpui2", features = ["test-support"] }
+rpc = { package = "rpc2", path = "../rpc2", features = ["test-support"] }
+client = { package = "client2", path = "../client2", features = ["test-support"] }
+settings = { package = "settings2", path = "../settings2", features = ["test-support"] }
+util = { path = "../util", features = ["test-support"] }

crates/channel2/src/channel2.rs 🔗

@@ -0,0 +1,23 @@
+mod channel_buffer;
+mod channel_chat;
+mod channel_store;
+
+use client::{Client, UserStore};
+use gpui::{AppContext, Model};
+use std::sync::Arc;
+
+pub use channel_buffer::{ChannelBuffer, ChannelBufferEvent, ACKNOWLEDGE_DEBOUNCE_INTERVAL};
+pub use channel_chat::{
+    mentions_to_proto, ChannelChat, ChannelChatEvent, ChannelMessage, ChannelMessageId,
+    MessageParams,
+};
+pub use channel_store::{Channel, ChannelEvent, ChannelId, ChannelMembership, ChannelStore};
+
+#[cfg(test)]
+mod channel_store_tests;
+
+pub fn init(client: &Arc<Client>, user_store: Model<UserStore>, cx: &mut AppContext) {
+    channel_store::init(client, user_store, cx);
+    channel_buffer::init(client);
+    channel_chat::init(client);
+}

crates/channel2/src/channel_buffer.rs 🔗

@@ -0,0 +1,259 @@
+use crate::{Channel, ChannelId, ChannelStore};
+use anyhow::Result;
+use client::{Client, Collaborator, UserStore};
+use collections::HashMap;
+use gpui::{AppContext, AsyncAppContext, Context, EventEmitter, Model, ModelContext, Task};
+use language::proto::serialize_version;
+use rpc::{
+    proto::{self, PeerId},
+    TypedEnvelope,
+};
+use std::{sync::Arc, time::Duration};
+use util::ResultExt;
+
+pub const ACKNOWLEDGE_DEBOUNCE_INTERVAL: Duration = Duration::from_millis(250);
+
+pub(crate) fn init(client: &Arc<Client>) {
+    client.add_model_message_handler(ChannelBuffer::handle_update_channel_buffer);
+    client.add_model_message_handler(ChannelBuffer::handle_update_channel_buffer_collaborators);
+}
+
+pub struct ChannelBuffer {
+    pub channel_id: ChannelId,
+    connected: bool,
+    collaborators: HashMap<PeerId, Collaborator>,
+    user_store: Model<UserStore>,
+    channel_store: Model<ChannelStore>,
+    buffer: Model<language::Buffer>,
+    buffer_epoch: u64,
+    client: Arc<Client>,
+    subscription: Option<client::Subscription>,
+    acknowledge_task: Option<Task<Result<()>>>,
+}
+
+pub enum ChannelBufferEvent {
+    CollaboratorsChanged,
+    Disconnected,
+    BufferEdited,
+    ChannelChanged,
+}
+
+impl EventEmitter for ChannelBuffer {
+    type Event = ChannelBufferEvent;
+}
+
+impl ChannelBuffer {
+    pub(crate) async fn new(
+        channel: Arc<Channel>,
+        client: Arc<Client>,
+        user_store: Model<UserStore>,
+        channel_store: Model<ChannelStore>,
+        mut cx: AsyncAppContext,
+    ) -> Result<Model<Self>> {
+        let response = client
+            .request(proto::JoinChannelBuffer {
+                channel_id: channel.id,
+            })
+            .await?;
+
+        let base_text = response.base_text;
+        let operations = response
+            .operations
+            .into_iter()
+            .map(language::proto::deserialize_operation)
+            .collect::<Result<Vec<_>, _>>()?;
+
+        let buffer = cx.build_model(|_| {
+            language::Buffer::remote(response.buffer_id, response.replica_id as u16, base_text)
+        })?;
+        buffer.update(&mut cx, |buffer, cx| buffer.apply_ops(operations, cx))??;
+
+        let subscription = client.subscribe_to_entity(channel.id)?;
+
+        anyhow::Ok(cx.build_model(|cx| {
+            cx.subscribe(&buffer, Self::on_buffer_update).detach();
+            cx.on_release(Self::release).detach();
+            let mut this = Self {
+                buffer,
+                buffer_epoch: response.epoch,
+                client,
+                connected: true,
+                collaborators: Default::default(),
+                acknowledge_task: None,
+                channel_id: channel.id,
+                subscription: Some(subscription.set_model(&cx.handle(), &mut cx.to_async())),
+                user_store,
+                channel_store,
+            };
+            this.replace_collaborators(response.collaborators, cx);
+            this
+        })?)
+    }
+
+    fn release(&mut self, _: &mut AppContext) {
+        if self.connected {
+            if let Some(task) = self.acknowledge_task.take() {
+                task.detach();
+            }
+            self.client
+                .send(proto::LeaveChannelBuffer {
+                    channel_id: self.channel_id,
+                })
+                .log_err();
+        }
+    }
+
+    pub fn remote_id(&self, cx: &AppContext) -> u64 {
+        self.buffer.read(cx).remote_id()
+    }
+
+    pub fn user_store(&self) -> &Model<UserStore> {
+        &self.user_store
+    }
+
+    pub(crate) fn replace_collaborators(
+        &mut self,
+        collaborators: Vec<proto::Collaborator>,
+        cx: &mut ModelContext<Self>,
+    ) {
+        let mut new_collaborators = HashMap::default();
+        for collaborator in collaborators {
+            if let Ok(collaborator) = Collaborator::from_proto(collaborator) {
+                new_collaborators.insert(collaborator.peer_id, collaborator);
+            }
+        }
+
+        for (_, old_collaborator) in &self.collaborators {
+            if !new_collaborators.contains_key(&old_collaborator.peer_id) {
+                self.buffer.update(cx, |buffer, cx| {
+                    buffer.remove_peer(old_collaborator.replica_id as u16, cx)
+                });
+            }
+        }
+        self.collaborators = new_collaborators;
+        cx.emit(ChannelBufferEvent::CollaboratorsChanged);
+        cx.notify();
+    }
+
+    async fn handle_update_channel_buffer(
+        this: Model<Self>,
+        update_channel_buffer: TypedEnvelope<proto::UpdateChannelBuffer>,
+        _: Arc<Client>,
+        mut cx: AsyncAppContext,
+    ) -> Result<()> {
+        let ops = update_channel_buffer
+            .payload
+            .operations
+            .into_iter()
+            .map(language::proto::deserialize_operation)
+            .collect::<Result<Vec<_>, _>>()?;
+
+        this.update(&mut cx, |this, cx| {
+            cx.notify();
+            this.buffer
+                .update(cx, |buffer, cx| buffer.apply_ops(ops, cx))
+        })??;
+
+        Ok(())
+    }
+
+    async fn handle_update_channel_buffer_collaborators(
+        this: Model<Self>,
+        message: TypedEnvelope<proto::UpdateChannelBufferCollaborators>,
+        _: Arc<Client>,
+        mut cx: AsyncAppContext,
+    ) -> Result<()> {
+        this.update(&mut cx, |this, cx| {
+            this.replace_collaborators(message.payload.collaborators, cx);
+            cx.emit(ChannelBufferEvent::CollaboratorsChanged);
+            cx.notify();
+        })
+    }
+
+    fn on_buffer_update(
+        &mut self,
+        _: Model<language::Buffer>,
+        event: &language::Event,
+        cx: &mut ModelContext<Self>,
+    ) {
+        match event {
+            language::Event::Operation(operation) => {
+                let operation = language::proto::serialize_operation(operation);
+                self.client
+                    .send(proto::UpdateChannelBuffer {
+                        channel_id: self.channel_id,
+                        operations: vec![operation],
+                    })
+                    .log_err();
+            }
+            language::Event::Edited => {
+                cx.emit(ChannelBufferEvent::BufferEdited);
+            }
+            _ => {}
+        }
+    }
+
+    pub fn acknowledge_buffer_version(&mut self, cx: &mut ModelContext<'_, ChannelBuffer>) {
+        let buffer = self.buffer.read(cx);
+        let version = buffer.version();
+        let buffer_id = buffer.remote_id();
+        let client = self.client.clone();
+        let epoch = self.epoch();
+
+        self.acknowledge_task = Some(cx.spawn(move |_, cx| async move {
+            cx.background_executor()
+                .timer(ACKNOWLEDGE_DEBOUNCE_INTERVAL)
+                .await;
+            client
+                .send(proto::AckBufferOperation {
+                    buffer_id,
+                    epoch,
+                    version: serialize_version(&version),
+                })
+                .ok();
+            Ok(())
+        }));
+    }
+
+    pub fn epoch(&self) -> u64 {
+        self.buffer_epoch
+    }
+
+    pub fn buffer(&self) -> Model<language::Buffer> {
+        self.buffer.clone()
+    }
+
+    pub fn collaborators(&self) -> &HashMap<PeerId, Collaborator> {
+        &self.collaborators
+    }
+
+    pub fn channel(&self, cx: &AppContext) -> Option<Arc<Channel>> {
+        self.channel_store
+            .read(cx)
+            .channel_for_id(self.channel_id)
+            .cloned()
+    }
+
+    pub(crate) fn disconnect(&mut self, cx: &mut ModelContext<Self>) {
+        log::info!("channel buffer {} disconnected", self.channel_id);
+        if self.connected {
+            self.connected = false;
+            self.subscription.take();
+            cx.emit(ChannelBufferEvent::Disconnected);
+            cx.notify()
+        }
+    }
+
+    pub(crate) fn channel_changed(&mut self, cx: &mut ModelContext<Self>) {
+        cx.emit(ChannelBufferEvent::ChannelChanged);
+        cx.notify()
+    }
+
+    pub fn is_connected(&self) -> bool {
+        self.connected
+    }
+
+    pub fn replica_id(&self, cx: &AppContext) -> u16 {
+        self.buffer.read(cx).replica_id()
+    }
+}

crates/channel2/src/channel_chat.rs 🔗

@@ -0,0 +1,647 @@
+use crate::{Channel, ChannelId, ChannelStore};
+use anyhow::{anyhow, Result};
+use client::{
+    proto,
+    user::{User, UserStore},
+    Client, Subscription, TypedEnvelope, UserId,
+};
+use futures::lock::Mutex;
+use gpui::{AppContext, AsyncAppContext, Context, EventEmitter, Model, ModelContext, Task};
+use rand::prelude::*;
+use std::{
+    collections::HashSet,
+    mem,
+    ops::{ControlFlow, Range},
+    sync::Arc,
+};
+use sum_tree::{Bias, SumTree};
+use time::OffsetDateTime;
+use util::{post_inc, ResultExt as _, TryFutureExt};
+
+pub struct ChannelChat {
+    pub channel_id: ChannelId,
+    messages: SumTree<ChannelMessage>,
+    acknowledged_message_ids: HashSet<u64>,
+    channel_store: Model<ChannelStore>,
+    loaded_all_messages: bool,
+    last_acknowledged_id: Option<u64>,
+    next_pending_message_id: usize,
+    user_store: Model<UserStore>,
+    rpc: Arc<Client>,
+    outgoing_messages_lock: Arc<Mutex<()>>,
+    rng: StdRng,
+    _subscription: Subscription,
+}
+
+#[derive(Debug, PartialEq, Eq)]
+pub struct MessageParams {
+    pub text: String,
+    pub mentions: Vec<(Range<usize>, UserId)>,
+}
+
+#[derive(Clone, Debug)]
+pub struct ChannelMessage {
+    pub id: ChannelMessageId,
+    pub body: String,
+    pub timestamp: OffsetDateTime,
+    pub sender: Arc<User>,
+    pub nonce: u128,
+    pub mentions: Vec<(Range<usize>, UserId)>,
+}
+
+#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
+pub enum ChannelMessageId {
+    Saved(u64),
+    Pending(usize),
+}
+
+#[derive(Clone, Debug, Default)]
+pub struct ChannelMessageSummary {
+    max_id: ChannelMessageId,
+    count: usize,
+}
+
+#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, PartialOrd, Ord)]
+struct Count(usize);
+
+#[derive(Clone, Debug, PartialEq)]
+pub enum ChannelChatEvent {
+    MessagesUpdated {
+        old_range: Range<usize>,
+        new_count: usize,
+    },
+    NewMessage {
+        channel_id: ChannelId,
+        message_id: u64,
+    },
+}
+
+impl EventEmitter for ChannelChat {
+    type Event = ChannelChatEvent;
+}
+pub fn init(client: &Arc<Client>) {
+    client.add_model_message_handler(ChannelChat::handle_message_sent);
+    client.add_model_message_handler(ChannelChat::handle_message_removed);
+}
+
+impl ChannelChat {
+    pub async fn new(
+        channel: Arc<Channel>,
+        channel_store: Model<ChannelStore>,
+        user_store: Model<UserStore>,
+        client: Arc<Client>,
+        mut cx: AsyncAppContext,
+    ) -> Result<Model<Self>> {
+        let channel_id = channel.id;
+        let subscription = client.subscribe_to_entity(channel_id).unwrap();
+
+        let response = client
+            .request(proto::JoinChannelChat { channel_id })
+            .await?;
+        let messages = messages_from_proto(response.messages, &user_store, &mut cx).await?;
+        let loaded_all_messages = response.done;
+
+        Ok(cx.build_model(|cx| {
+            cx.on_release(Self::release).detach();
+            let mut this = Self {
+                channel_id: channel.id,
+                user_store,
+                channel_store,
+                rpc: client,
+                outgoing_messages_lock: Default::default(),
+                messages: Default::default(),
+                acknowledged_message_ids: Default::default(),
+                loaded_all_messages,
+                next_pending_message_id: 0,
+                last_acknowledged_id: None,
+                rng: StdRng::from_entropy(),
+                _subscription: subscription.set_model(&cx.handle(), &mut cx.to_async()),
+            };
+            this.insert_messages(messages, cx);
+            this
+        })?)
+    }
+
+    fn release(&mut self, _: &mut AppContext) {
+        self.rpc
+            .send(proto::LeaveChannelChat {
+                channel_id: self.channel_id,
+            })
+            .log_err();
+    }
+
+    pub fn channel(&self, cx: &AppContext) -> Option<Arc<Channel>> {
+        self.channel_store
+            .read(cx)
+            .channel_for_id(self.channel_id)
+            .cloned()
+    }
+
+    pub fn client(&self) -> &Arc<Client> {
+        &self.rpc
+    }
+
+    pub fn send_message(
+        &mut self,
+        message: MessageParams,
+        cx: &mut ModelContext<Self>,
+    ) -> Result<Task<Result<u64>>> {
+        if message.text.is_empty() {
+            Err(anyhow!("message body can't be empty"))?;
+        }
+
+        let current_user = self
+            .user_store
+            .read(cx)
+            .current_user()
+            .ok_or_else(|| anyhow!("current_user is not present"))?;
+
+        let channel_id = self.channel_id;
+        let pending_id = ChannelMessageId::Pending(post_inc(&mut self.next_pending_message_id));
+        let nonce = self.rng.gen();
+        self.insert_messages(
+            SumTree::from_item(
+                ChannelMessage {
+                    id: pending_id,
+                    body: message.text.clone(),
+                    sender: current_user,
+                    timestamp: OffsetDateTime::now_utc(),
+                    mentions: message.mentions.clone(),
+                    nonce,
+                },
+                &(),
+            ),
+            cx,
+        );
+        let user_store = self.user_store.clone();
+        let rpc = self.rpc.clone();
+        let outgoing_messages_lock = self.outgoing_messages_lock.clone();
+        Ok(cx.spawn(move |this, mut cx| async move {
+            let outgoing_message_guard = outgoing_messages_lock.lock().await;
+            let request = rpc.request(proto::SendChannelMessage {
+                channel_id,
+                body: message.text,
+                nonce: Some(nonce.into()),
+                mentions: mentions_to_proto(&message.mentions),
+            });
+            let response = request.await?;
+            drop(outgoing_message_guard);
+            let response = response.message.ok_or_else(|| anyhow!("invalid message"))?;
+            let id = response.id;
+            let message = ChannelMessage::from_proto(response, &user_store, &mut cx).await?;
+            this.update(&mut cx, |this, cx| {
+                this.insert_messages(SumTree::from_item(message, &()), cx);
+            })?;
+            Ok(id)
+        }))
+    }
+
+    pub fn remove_message(&mut self, id: u64, cx: &mut ModelContext<Self>) -> Task<Result<()>> {
+        let response = self.rpc.request(proto::RemoveChannelMessage {
+            channel_id: self.channel_id,
+            message_id: id,
+        });
+        cx.spawn(move |this, mut cx| async move {
+            response.await?;
+            this.update(&mut cx, |this, cx| {
+                this.message_removed(id, cx);
+            })?;
+            Ok(())
+        })
+    }
+
+    pub fn load_more_messages(&mut self, cx: &mut ModelContext<Self>) -> Option<Task<Option<()>>> {
+        if self.loaded_all_messages {
+            return None;
+        }
+
+        let rpc = self.rpc.clone();
+        let user_store = self.user_store.clone();
+        let channel_id = self.channel_id;
+        let before_message_id = self.first_loaded_message_id()?;
+        Some(cx.spawn(move |this, mut cx| {
+            async move {
+                let response = rpc
+                    .request(proto::GetChannelMessages {
+                        channel_id,
+                        before_message_id,
+                    })
+                    .await?;
+                let loaded_all_messages = response.done;
+                let messages = messages_from_proto(response.messages, &user_store, &mut cx).await?;
+                this.update(&mut cx, |this, cx| {
+                    this.loaded_all_messages = loaded_all_messages;
+                    this.insert_messages(messages, cx);
+                })?;
+                anyhow::Ok(())
+            }
+            .log_err()
+        }))
+    }
+
+    pub fn first_loaded_message_id(&mut self) -> Option<u64> {
+        self.messages.first().and_then(|message| match message.id {
+            ChannelMessageId::Saved(id) => Some(id),
+            ChannelMessageId::Pending(_) => None,
+        })
+    }
+
+    /// Load all of the chat messages since a certain message id.
+    ///
+    /// For now, we always maintain a suffix of the channel's messages.
+    pub async fn load_history_since_message(
+        chat: Model<Self>,
+        message_id: u64,
+        mut cx: AsyncAppContext,
+    ) -> Option<usize> {
+        loop {
+            let step = chat
+                .update(&mut cx, |chat, cx| {
+                    if let Some(first_id) = chat.first_loaded_message_id() {
+                        if first_id <= message_id {
+                            let mut cursor = chat.messages.cursor::<(ChannelMessageId, Count)>();
+                            let message_id = ChannelMessageId::Saved(message_id);
+                            cursor.seek(&message_id, Bias::Left, &());
+                            return ControlFlow::Break(
+                                if cursor
+                                    .item()
+                                    .map_or(false, |message| message.id == message_id)
+                                {
+                                    Some(cursor.start().1 .0)
+                                } else {
+                                    None
+                                },
+                            );
+                        }
+                    }
+                    ControlFlow::Continue(chat.load_more_messages(cx))
+                })
+                .log_err()?;
+            match step {
+                ControlFlow::Break(ix) => return ix,
+                ControlFlow::Continue(task) => task?.await?,
+            }
+        }
+    }
+
+    pub fn acknowledge_last_message(&mut self, cx: &mut ModelContext<Self>) {
+        if let ChannelMessageId::Saved(latest_message_id) = self.messages.summary().max_id {
+            if self
+                .last_acknowledged_id
+                .map_or(true, |acknowledged_id| acknowledged_id < latest_message_id)
+            {
+                self.rpc
+                    .send(proto::AckChannelMessage {
+                        channel_id: self.channel_id,
+                        message_id: latest_message_id,
+                    })
+                    .ok();
+                self.last_acknowledged_id = Some(latest_message_id);
+                self.channel_store.update(cx, |store, cx| {
+                    store.acknowledge_message_id(self.channel_id, latest_message_id, cx);
+                });
+            }
+        }
+    }
+
+    pub fn rejoin(&mut self, cx: &mut ModelContext<Self>) {
+        let user_store = self.user_store.clone();
+        let rpc = self.rpc.clone();
+        let channel_id = self.channel_id;
+        cx.spawn(move |this, mut cx| {
+            async move {
+                let response = rpc.request(proto::JoinChannelChat { channel_id }).await?;
+                let messages = messages_from_proto(response.messages, &user_store, &mut cx).await?;
+                let loaded_all_messages = response.done;
+
+                let pending_messages = this.update(&mut cx, |this, cx| {
+                    if let Some((first_new_message, last_old_message)) =
+                        messages.first().zip(this.messages.last())
+                    {
+                        if first_new_message.id > last_old_message.id {
+                            let old_messages = mem::take(&mut this.messages);
+                            cx.emit(ChannelChatEvent::MessagesUpdated {
+                                old_range: 0..old_messages.summary().count,
+                                new_count: 0,
+                            });
+                            this.loaded_all_messages = loaded_all_messages;
+                        }
+                    }
+
+                    this.insert_messages(messages, cx);
+                    if loaded_all_messages {
+                        this.loaded_all_messages = loaded_all_messages;
+                    }
+
+                    this.pending_messages().cloned().collect::<Vec<_>>()
+                })?;
+
+                for pending_message in pending_messages {
+                    let request = rpc.request(proto::SendChannelMessage {
+                        channel_id,
+                        body: pending_message.body,
+                        mentions: mentions_to_proto(&pending_message.mentions),
+                        nonce: Some(pending_message.nonce.into()),
+                    });
+                    let response = request.await?;
+                    let message = ChannelMessage::from_proto(
+                        response.message.ok_or_else(|| anyhow!("invalid message"))?,
+                        &user_store,
+                        &mut cx,
+                    )
+                    .await?;
+                    this.update(&mut cx, |this, cx| {
+                        this.insert_messages(SumTree::from_item(message, &()), cx);
+                    })?;
+                }
+
+                anyhow::Ok(())
+            }
+            .log_err()
+        })
+        .detach();
+    }
+
+    pub fn message_count(&self) -> usize {
+        self.messages.summary().count
+    }
+
+    pub fn messages(&self) -> &SumTree<ChannelMessage> {
+        &self.messages
+    }
+
+    pub fn message(&self, ix: usize) -> &ChannelMessage {
+        let mut cursor = self.messages.cursor::<Count>();
+        cursor.seek(&Count(ix), Bias::Right, &());
+        cursor.item().unwrap()
+    }
+
+    pub fn acknowledge_message(&mut self, id: u64) {
+        if self.acknowledged_message_ids.insert(id) {
+            self.rpc
+                .send(proto::AckChannelMessage {
+                    channel_id: self.channel_id,
+                    message_id: id,
+                })
+                .ok();
+        }
+    }
+
+    pub fn messages_in_range(&self, range: Range<usize>) -> impl Iterator<Item = &ChannelMessage> {
+        let mut cursor = self.messages.cursor::<Count>();
+        cursor.seek(&Count(range.start), Bias::Right, &());
+        cursor.take(range.len())
+    }
+
+    pub fn pending_messages(&self) -> impl Iterator<Item = &ChannelMessage> {
+        let mut cursor = self.messages.cursor::<ChannelMessageId>();
+        cursor.seek(&ChannelMessageId::Pending(0), Bias::Left, &());
+        cursor
+    }
+
+    async fn handle_message_sent(
+        this: Model<Self>,
+        message: TypedEnvelope<proto::ChannelMessageSent>,
+        _: Arc<Client>,
+        mut cx: AsyncAppContext,
+    ) -> Result<()> {
+        let user_store = this.update(&mut cx, |this, _| this.user_store.clone())?;
+        let message = message
+            .payload
+            .message
+            .ok_or_else(|| anyhow!("empty message"))?;
+        let message_id = message.id;
+
+        let message = ChannelMessage::from_proto(message, &user_store, &mut cx).await?;
+        this.update(&mut cx, |this, cx| {
+            this.insert_messages(SumTree::from_item(message, &()), cx);
+            cx.emit(ChannelChatEvent::NewMessage {
+                channel_id: this.channel_id,
+                message_id,
+            })
+        })?;
+
+        Ok(())
+    }
+
+    async fn handle_message_removed(
+        this: Model<Self>,
+        message: TypedEnvelope<proto::RemoveChannelMessage>,
+        _: Arc<Client>,
+        mut cx: AsyncAppContext,
+    ) -> Result<()> {
+        this.update(&mut cx, |this, cx| {
+            this.message_removed(message.payload.message_id, cx)
+        })?;
+        Ok(())
+    }
+
+    fn insert_messages(&mut self, messages: SumTree<ChannelMessage>, cx: &mut ModelContext<Self>) {
+        if let Some((first_message, last_message)) = messages.first().zip(messages.last()) {
+            let nonces = messages
+                .cursor::<()>()
+                .map(|m| m.nonce)
+                .collect::<HashSet<_>>();
+
+            let mut old_cursor = self.messages.cursor::<(ChannelMessageId, Count)>();
+            let mut new_messages = old_cursor.slice(&first_message.id, Bias::Left, &());
+            let start_ix = old_cursor.start().1 .0;
+            let removed_messages = old_cursor.slice(&last_message.id, Bias::Right, &());
+            let removed_count = removed_messages.summary().count;
+            let new_count = messages.summary().count;
+            let end_ix = start_ix + removed_count;
+
+            new_messages.append(messages, &());
+
+            let mut ranges = Vec::<Range<usize>>::new();
+            if new_messages.last().unwrap().is_pending() {
+                new_messages.append(old_cursor.suffix(&()), &());
+            } else {
+                new_messages.append(
+                    old_cursor.slice(&ChannelMessageId::Pending(0), Bias::Left, &()),
+                    &(),
+                );
+
+                while let Some(message) = old_cursor.item() {
+                    let message_ix = old_cursor.start().1 .0;
+                    if nonces.contains(&message.nonce) {
+                        if ranges.last().map_or(false, |r| r.end == message_ix) {
+                            ranges.last_mut().unwrap().end += 1;
+                        } else {
+                            ranges.push(message_ix..message_ix + 1);
+                        }
+                    } else {
+                        new_messages.push(message.clone(), &());
+                    }
+                    old_cursor.next(&());
+                }
+            }
+
+            drop(old_cursor);
+            self.messages = new_messages;
+
+            for range in ranges.into_iter().rev() {
+                cx.emit(ChannelChatEvent::MessagesUpdated {
+                    old_range: range,
+                    new_count: 0,
+                });
+            }
+            cx.emit(ChannelChatEvent::MessagesUpdated {
+                old_range: start_ix..end_ix,
+                new_count,
+            });
+
+            cx.notify();
+        }
+    }
+
+    fn message_removed(&mut self, id: u64, cx: &mut ModelContext<Self>) {
+        let mut cursor = self.messages.cursor::<ChannelMessageId>();
+        let mut messages = cursor.slice(&ChannelMessageId::Saved(id), Bias::Left, &());
+        if let Some(item) = cursor.item() {
+            if item.id == ChannelMessageId::Saved(id) {
+                let ix = messages.summary().count;
+                cursor.next(&());
+                messages.append(cursor.suffix(&()), &());
+                drop(cursor);
+                self.messages = messages;
+                cx.emit(ChannelChatEvent::MessagesUpdated {
+                    old_range: ix..ix + 1,
+                    new_count: 0,
+                });
+            }
+        }
+    }
+}
+
+async fn messages_from_proto(
+    proto_messages: Vec<proto::ChannelMessage>,
+    user_store: &Model<UserStore>,
+    cx: &mut AsyncAppContext,
+) -> Result<SumTree<ChannelMessage>> {
+    let messages = ChannelMessage::from_proto_vec(proto_messages, user_store, cx).await?;
+    let mut result = SumTree::new();
+    result.extend(messages, &());
+    Ok(result)
+}
+
+impl ChannelMessage {
+    pub async fn from_proto(
+        message: proto::ChannelMessage,
+        user_store: &Model<UserStore>,
+        cx: &mut AsyncAppContext,
+    ) -> Result<Self> {
+        let sender = user_store
+            .update(cx, |user_store, cx| {
+                user_store.get_user(message.sender_id, cx)
+            })?
+            .await?;
+        Ok(ChannelMessage {
+            id: ChannelMessageId::Saved(message.id),
+            body: message.body,
+            mentions: message
+                .mentions
+                .into_iter()
+                .filter_map(|mention| {
+                    let range = mention.range?;
+                    Some((range.start as usize..range.end as usize, mention.user_id))
+                })
+                .collect(),
+            timestamp: OffsetDateTime::from_unix_timestamp(message.timestamp as i64)?,
+            sender,
+            nonce: message
+                .nonce
+                .ok_or_else(|| anyhow!("nonce is required"))?
+                .into(),
+        })
+    }
+
+    pub fn is_pending(&self) -> bool {
+        matches!(self.id, ChannelMessageId::Pending(_))
+    }
+
+    pub async fn from_proto_vec(
+        proto_messages: Vec<proto::ChannelMessage>,
+        user_store: &Model<UserStore>,
+        cx: &mut AsyncAppContext,
+    ) -> Result<Vec<Self>> {
+        let unique_user_ids = proto_messages
+            .iter()
+            .map(|m| m.sender_id)
+            .collect::<HashSet<_>>()
+            .into_iter()
+            .collect();
+        user_store
+            .update(cx, |user_store, cx| {
+                user_store.get_users(unique_user_ids, cx)
+            })?
+            .await?;
+
+        let mut messages = Vec::with_capacity(proto_messages.len());
+        for message in proto_messages {
+            messages.push(ChannelMessage::from_proto(message, user_store, cx).await?);
+        }
+        Ok(messages)
+    }
+}
+
+pub fn mentions_to_proto(mentions: &[(Range<usize>, UserId)]) -> Vec<proto::ChatMention> {
+    mentions
+        .iter()
+        .map(|(range, user_id)| proto::ChatMention {
+            range: Some(proto::Range {
+                start: range.start as u64,
+                end: range.end as u64,
+            }),
+            user_id: *user_id as u64,
+        })
+        .collect()
+}
+
+impl sum_tree::Item for ChannelMessage {
+    type Summary = ChannelMessageSummary;
+
+    fn summary(&self) -> Self::Summary {
+        ChannelMessageSummary {
+            max_id: self.id,
+            count: 1,
+        }
+    }
+}
+
+impl Default for ChannelMessageId {
+    fn default() -> Self {
+        Self::Saved(0)
+    }
+}
+
+impl sum_tree::Summary for ChannelMessageSummary {
+    type Context = ();
+
+    fn add_summary(&mut self, summary: &Self, _: &()) {
+        self.max_id = summary.max_id;
+        self.count += summary.count;
+    }
+}
+
+impl<'a> sum_tree::Dimension<'a, ChannelMessageSummary> for ChannelMessageId {
+    fn add_summary(&mut self, summary: &'a ChannelMessageSummary, _: &()) {
+        debug_assert!(summary.max_id > *self);
+        *self = summary.max_id;
+    }
+}
+
+impl<'a> sum_tree::Dimension<'a, ChannelMessageSummary> for Count {
+    fn add_summary(&mut self, summary: &'a ChannelMessageSummary, _: &()) {
+        self.0 += summary.count;
+    }
+}
+
+impl<'a> From<&'a str> for MessageParams {
+    fn from(value: &'a str) -> Self {
+        Self {
+            text: value.into(),
+            mentions: Vec::new(),
+        }
+    }
+}

crates/channel2/src/channel_store.rs 🔗

@@ -0,0 +1,1021 @@
+mod channel_index;
+
+use crate::{channel_buffer::ChannelBuffer, channel_chat::ChannelChat, ChannelMessage};
+use anyhow::{anyhow, Result};
+use channel_index::ChannelIndex;
+use client::{Client, Subscription, User, UserId, UserStore};
+use collections::{hash_map, HashMap, HashSet};
+use db::RELEASE_CHANNEL;
+use futures::{channel::mpsc, future::Shared, Future, FutureExt, StreamExt};
+use gpui::{
+    AppContext, AsyncAppContext, Context, EventEmitter, Model, ModelContext, Task, WeakModel,
+};
+use rpc::{
+    proto::{self, ChannelVisibility},
+    TypedEnvelope,
+};
+use std::{mem, sync::Arc, time::Duration};
+use util::{async_maybe, ResultExt};
+
+pub fn init(client: &Arc<Client>, user_store: Model<UserStore>, cx: &mut AppContext) {
+    let channel_store =
+        cx.build_model(|cx| ChannelStore::new(client.clone(), user_store.clone(), cx));
+    cx.set_global(channel_store);
+}
+
+pub const RECONNECT_TIMEOUT: Duration = Duration::from_secs(30);
+
+pub type ChannelId = u64;
+
+pub struct ChannelStore {
+    pub channel_index: ChannelIndex,
+    channel_invitations: Vec<Arc<Channel>>,
+    channel_participants: HashMap<ChannelId, Vec<Arc<User>>>,
+    outgoing_invites: HashSet<(ChannelId, UserId)>,
+    update_channels_tx: mpsc::UnboundedSender<proto::UpdateChannels>,
+    opened_buffers: HashMap<ChannelId, OpenedModelHandle<ChannelBuffer>>,
+    opened_chats: HashMap<ChannelId, OpenedModelHandle<ChannelChat>>,
+    client: Arc<Client>,
+    user_store: Model<UserStore>,
+    _rpc_subscription: Subscription,
+    _watch_connection_status: Task<Option<()>>,
+    disconnect_channel_buffers_task: Option<Task<()>>,
+    _update_channels: Task<()>,
+}
+
+#[derive(Clone, Debug, PartialEq)]
+pub struct Channel {
+    pub id: ChannelId,
+    pub name: String,
+    pub visibility: proto::ChannelVisibility,
+    pub role: proto::ChannelRole,
+    pub unseen_note_version: Option<(u64, clock::Global)>,
+    pub unseen_message_id: Option<u64>,
+    pub parent_path: Vec<u64>,
+}
+
+impl Channel {
+    pub fn link(&self) -> String {
+        RELEASE_CHANNEL.link_prefix().to_owned()
+            + "channel/"
+            + &self.slug()
+            + "-"
+            + &self.id.to_string()
+    }
+
+    pub fn slug(&self) -> String {
+        let slug: String = self
+            .name
+            .chars()
+            .map(|c| if c.is_alphanumeric() { c } else { '-' })
+            .collect();
+
+        slug.trim_matches(|c| c == '-').to_string()
+    }
+
+    pub fn can_edit_notes(&self) -> bool {
+        self.role == proto::ChannelRole::Member || self.role == proto::ChannelRole::Admin
+    }
+}
+
+pub struct ChannelMembership {
+    pub user: Arc<User>,
+    pub kind: proto::channel_member::Kind,
+    pub role: proto::ChannelRole,
+}
+impl ChannelMembership {
+    pub fn sort_key(&self) -> MembershipSortKey {
+        MembershipSortKey {
+            role_order: match self.role {
+                proto::ChannelRole::Admin => 0,
+                proto::ChannelRole::Member => 1,
+                proto::ChannelRole::Banned => 2,
+                proto::ChannelRole::Guest => 3,
+            },
+            kind_order: match self.kind {
+                proto::channel_member::Kind::Member => 0,
+                proto::channel_member::Kind::AncestorMember => 1,
+                proto::channel_member::Kind::Invitee => 2,
+            },
+            username_order: self.user.github_login.as_str(),
+        }
+    }
+}
+
+#[derive(PartialOrd, Ord, PartialEq, Eq)]
+pub struct MembershipSortKey<'a> {
+    role_order: u8,
+    kind_order: u8,
+    username_order: &'a str,
+}
+
+pub enum ChannelEvent {
+    ChannelCreated(ChannelId),
+    ChannelRenamed(ChannelId),
+}
+
+impl EventEmitter for ChannelStore {
+    type Event = ChannelEvent;
+}
+
+enum OpenedModelHandle<E> {
+    Open(WeakModel<E>),
+    Loading(Shared<Task<Result<Model<E>, Arc<anyhow::Error>>>>),
+}
+
+impl ChannelStore {
+    pub fn global(cx: &AppContext) -> Model<Self> {
+        cx.global::<Model<Self>>().clone()
+    }
+
+    pub fn new(
+        client: Arc<Client>,
+        user_store: Model<UserStore>,
+        cx: &mut ModelContext<Self>,
+    ) -> Self {
+        let rpc_subscription =
+            client.add_message_handler(cx.weak_model(), Self::handle_update_channels);
+
+        let mut connection_status = client.status();
+        let (update_channels_tx, mut update_channels_rx) = mpsc::unbounded();
+        let watch_connection_status = cx.spawn(|this, mut cx| async move {
+            while let Some(status) = connection_status.next().await {
+                let this = this.upgrade()?;
+                match status {
+                    client::Status::Connected { .. } => {
+                        this.update(&mut cx, |this, cx| this.handle_connect(cx))
+                            .ok()?
+                            .await
+                            .log_err()?;
+                    }
+                    client::Status::SignedOut | client::Status::UpgradeRequired => {
+                        this.update(&mut cx, |this, cx| this.handle_disconnect(false, cx))
+                            .ok();
+                    }
+                    _ => {
+                        this.update(&mut cx, |this, cx| this.handle_disconnect(true, cx))
+                            .ok();
+                    }
+                }
+            }
+            Some(())
+        });
+
+        Self {
+            channel_invitations: Vec::default(),
+            channel_index: ChannelIndex::default(),
+            channel_participants: Default::default(),
+            outgoing_invites: Default::default(),
+            opened_buffers: Default::default(),
+            opened_chats: Default::default(),
+            update_channels_tx,
+            client,
+            user_store,
+            _rpc_subscription: rpc_subscription,
+            _watch_connection_status: watch_connection_status,
+            disconnect_channel_buffers_task: None,
+            _update_channels: cx.spawn(|this, mut cx| async move {
+                async_maybe!({
+                    while let Some(update_channels) = update_channels_rx.next().await {
+                        if let Some(this) = this.upgrade() {
+                            let update_task = this.update(&mut cx, |this, cx| {
+                                this.update_channels(update_channels, cx)
+                            })?;
+                            if let Some(update_task) = update_task {
+                                update_task.await.log_err();
+                            }
+                        }
+                    }
+                    anyhow::Ok(())
+                })
+                .await
+                .log_err();
+            }),
+        }
+    }
+
+    pub fn client(&self) -> Arc<Client> {
+        self.client.clone()
+    }
+
+    /// Returns the number of unique channels in the store
+    pub fn channel_count(&self) -> usize {
+        self.channel_index.by_id().len()
+    }
+
+    /// Returns the index of a channel ID in the list of unique channels
+    pub fn index_of_channel(&self, channel_id: ChannelId) -> Option<usize> {
+        self.channel_index
+            .by_id()
+            .keys()
+            .position(|id| *id == channel_id)
+    }
+
+    /// Returns an iterator over all unique channels
+    pub fn channels(&self) -> impl '_ + Iterator<Item = &Arc<Channel>> {
+        self.channel_index.by_id().values()
+    }
+
+    /// Iterate over all entries in the channel DAG
+    pub fn ordered_channels(&self) -> impl '_ + Iterator<Item = (usize, &Arc<Channel>)> {
+        self.channel_index
+            .ordered_channels()
+            .iter()
+            .filter_map(move |id| {
+                let channel = self.channel_index.by_id().get(id)?;
+                Some((channel.parent_path.len(), channel))
+            })
+    }
+
+    pub fn channel_at_index(&self, ix: usize) -> Option<&Arc<Channel>> {
+        let channel_id = self.channel_index.ordered_channels().get(ix)?;
+        self.channel_index.by_id().get(channel_id)
+    }
+
+    pub fn channel_at(&self, ix: usize) -> Option<&Arc<Channel>> {
+        self.channel_index.by_id().values().nth(ix)
+    }
+
+    pub fn has_channel_invitation(&self, channel_id: ChannelId) -> bool {
+        self.channel_invitations
+            .iter()
+            .any(|channel| channel.id == channel_id)
+    }
+
+    pub fn channel_invitations(&self) -> &[Arc<Channel>] {
+        &self.channel_invitations
+    }
+
+    pub fn channel_for_id(&self, channel_id: ChannelId) -> Option<&Arc<Channel>> {
+        self.channel_index.by_id().get(&channel_id)
+    }
+
+    pub fn has_open_channel_buffer(&self, channel_id: ChannelId, _cx: &AppContext) -> bool {
+        if let Some(buffer) = self.opened_buffers.get(&channel_id) {
+            if let OpenedModelHandle::Open(buffer) = buffer {
+                return buffer.upgrade().is_some();
+            }
+        }
+        false
+    }
+
+    pub fn open_channel_buffer(
+        &mut self,
+        channel_id: ChannelId,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<Model<ChannelBuffer>>> {
+        let client = self.client.clone();
+        let user_store = self.user_store.clone();
+        let channel_store = cx.handle();
+        self.open_channel_resource(
+            channel_id,
+            |this| &mut this.opened_buffers,
+            |channel, cx| ChannelBuffer::new(channel, client, user_store, channel_store, cx),
+            cx,
+        )
+    }
+
+    pub fn fetch_channel_messages(
+        &self,
+        message_ids: Vec<u64>,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<Vec<ChannelMessage>>> {
+        let request = if message_ids.is_empty() {
+            None
+        } else {
+            Some(
+                self.client
+                    .request(proto::GetChannelMessagesById { message_ids }),
+            )
+        };
+        cx.spawn(|this, mut cx| async move {
+            if let Some(request) = request {
+                let response = request.await?;
+                let this = this
+                    .upgrade()
+                    .ok_or_else(|| anyhow!("channel store dropped"))?;
+                let user_store = this.update(&mut cx, |this, _| this.user_store.clone())?;
+                ChannelMessage::from_proto_vec(response.messages, &user_store, &mut cx).await
+            } else {
+                Ok(Vec::new())
+            }
+        })
+    }
+
+    pub fn has_channel_buffer_changed(&self, channel_id: ChannelId) -> Option<bool> {
+        self.channel_index
+            .by_id()
+            .get(&channel_id)
+            .map(|channel| channel.unseen_note_version.is_some())
+    }
+
+    pub fn has_new_messages(&self, channel_id: ChannelId) -> Option<bool> {
+        self.channel_index
+            .by_id()
+            .get(&channel_id)
+            .map(|channel| channel.unseen_message_id.is_some())
+    }
+
+    pub fn notes_changed(
+        &mut self,
+        channel_id: ChannelId,
+        epoch: u64,
+        version: &clock::Global,
+        cx: &mut ModelContext<Self>,
+    ) {
+        self.channel_index.note_changed(channel_id, epoch, version);
+        cx.notify();
+    }
+
+    pub fn new_message(
+        &mut self,
+        channel_id: ChannelId,
+        message_id: u64,
+        cx: &mut ModelContext<Self>,
+    ) {
+        self.channel_index.new_message(channel_id, message_id);
+        cx.notify();
+    }
+
+    pub fn acknowledge_message_id(
+        &mut self,
+        channel_id: ChannelId,
+        message_id: u64,
+        cx: &mut ModelContext<Self>,
+    ) {
+        self.channel_index
+            .acknowledge_message_id(channel_id, message_id);
+        cx.notify();
+    }
+
+    pub fn acknowledge_notes_version(
+        &mut self,
+        channel_id: ChannelId,
+        epoch: u64,
+        version: &clock::Global,
+        cx: &mut ModelContext<Self>,
+    ) {
+        self.channel_index
+            .acknowledge_note_version(channel_id, epoch, version);
+        cx.notify();
+    }
+
+    pub fn open_channel_chat(
+        &mut self,
+        channel_id: ChannelId,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<Model<ChannelChat>>> {
+        let client = self.client.clone();
+        let user_store = self.user_store.clone();
+        let this = cx.handle();
+        self.open_channel_resource(
+            channel_id,
+            |this| &mut this.opened_chats,
+            |channel, cx| ChannelChat::new(channel, this, user_store, client, cx),
+            cx,
+        )
+    }
+
+    /// Asynchronously open a given resource associated with a channel.
+    ///
+    /// Make sure that the resource is only opened once, even if this method
+    /// is called multiple times with the same channel id while the first task
+    /// is still running.
+    fn open_channel_resource<T, F, Fut>(
+        &mut self,
+        channel_id: ChannelId,
+        get_map: fn(&mut Self) -> &mut HashMap<ChannelId, OpenedModelHandle<T>>,
+        load: F,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<Model<T>>>
+    where
+        F: 'static + FnOnce(Arc<Channel>, AsyncAppContext) -> Fut,
+        Fut: Future<Output = Result<Model<T>>>,
+        T: 'static,
+    {
+        let task = loop {
+            match get_map(self).entry(channel_id) {
+                hash_map::Entry::Occupied(e) => match e.get() {
+                    OpenedModelHandle::Open(model) => {
+                        if let Some(model) = model.upgrade() {
+                            break Task::ready(Ok(model)).shared();
+                        } else {
+                            get_map(self).remove(&channel_id);
+                            continue;
+                        }
+                    }
+                    OpenedModelHandle::Loading(task) => {
+                        break task.clone();
+                    }
+                },
+                hash_map::Entry::Vacant(e) => {
+                    let task = cx
+                        .spawn(move |this, mut cx| async move {
+                            let channel = this.update(&mut cx, |this, _| {
+                                this.channel_for_id(channel_id).cloned().ok_or_else(|| {
+                                    Arc::new(anyhow!("no channel for id: {}", channel_id))
+                                })
+                            })??;
+
+                            load(channel, cx).await.map_err(Arc::new)
+                        })
+                        .shared();
+
+                    e.insert(OpenedModelHandle::Loading(task.clone()));
+                    cx.spawn({
+                        let task = task.clone();
+                        move |this, mut cx| async move {
+                            let result = task.await;
+                            this.update(&mut cx, |this, _| match result {
+                                Ok(model) => {
+                                    get_map(this).insert(
+                                        channel_id,
+                                        OpenedModelHandle::Open(model.downgrade()),
+                                    );
+                                }
+                                Err(_) => {
+                                    get_map(this).remove(&channel_id);
+                                }
+                            })
+                            .ok();
+                        }
+                    })
+                    .detach();
+                    break task;
+                }
+            }
+        };
+        cx.background_executor()
+            .spawn(async move { task.await.map_err(|error| anyhow!("{}", error)) })
+    }
+
+    pub fn is_channel_admin(&self, channel_id: ChannelId) -> bool {
+        let Some(channel) = self.channel_for_id(channel_id) else {
+            return false;
+        };
+        channel.role == proto::ChannelRole::Admin
+    }
+
+    pub fn channel_participants(&self, channel_id: ChannelId) -> &[Arc<User>] {
+        self.channel_participants
+            .get(&channel_id)
+            .map_or(&[], |v| v.as_slice())
+    }
+
+    pub fn create_channel(
+        &self,
+        name: &str,
+        parent_id: Option<ChannelId>,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<ChannelId>> {
+        let client = self.client.clone();
+        let name = name.trim_start_matches("#").to_owned();
+        cx.spawn(move |this, mut cx| async move {
+            let response = client
+                .request(proto::CreateChannel { name, parent_id })
+                .await?;
+
+            let channel = response
+                .channel
+                .ok_or_else(|| anyhow!("missing channel in response"))?;
+            let channel_id = channel.id;
+
+            this.update(&mut cx, |this, cx| {
+                let task = this.update_channels(
+                    proto::UpdateChannels {
+                        channels: vec![channel],
+                        ..Default::default()
+                    },
+                    cx,
+                );
+                assert!(task.is_none());
+
+                // This event is emitted because the collab panel wants to clear the pending edit state
+                // before this frame is rendered. But we can't guarantee that the collab panel's future
+                // will resolve before this flush_effects finishes. Synchronously emitting this event
+                // ensures that the collab panel will observe this creation before the frame completes
+                cx.emit(ChannelEvent::ChannelCreated(channel_id));
+            })?;
+
+            Ok(channel_id)
+        })
+    }
+
+    pub fn move_channel(
+        &mut self,
+        channel_id: ChannelId,
+        to: Option<ChannelId>,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        let client = self.client.clone();
+        cx.spawn(move |_, _| async move {
+            let _ = client
+                .request(proto::MoveChannel { channel_id, to })
+                .await?;
+
+            Ok(())
+        })
+    }
+
+    pub fn set_channel_visibility(
+        &mut self,
+        channel_id: ChannelId,
+        visibility: ChannelVisibility,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        let client = self.client.clone();
+        cx.spawn(move |_, _| async move {
+            let _ = client
+                .request(proto::SetChannelVisibility {
+                    channel_id,
+                    visibility: visibility.into(),
+                })
+                .await?;
+
+            Ok(())
+        })
+    }
+
+    pub fn invite_member(
+        &mut self,
+        channel_id: ChannelId,
+        user_id: UserId,
+        role: proto::ChannelRole,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        if !self.outgoing_invites.insert((channel_id, user_id)) {
+            return Task::ready(Err(anyhow!("invite request already in progress")));
+        }
+
+        cx.notify();
+        let client = self.client.clone();
+        cx.spawn(move |this, mut cx| async move {
+            let result = client
+                .request(proto::InviteChannelMember {
+                    channel_id,
+                    user_id,
+                    role: role.into(),
+                })
+                .await;
+
+            this.update(&mut cx, |this, cx| {
+                this.outgoing_invites.remove(&(channel_id, user_id));
+                cx.notify();
+            })?;
+
+            result?;
+
+            Ok(())
+        })
+    }
+
+    pub fn remove_member(
+        &mut self,
+        channel_id: ChannelId,
+        user_id: u64,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        if !self.outgoing_invites.insert((channel_id, user_id)) {
+            return Task::ready(Err(anyhow!("invite request already in progress")));
+        }
+
+        cx.notify();
+        let client = self.client.clone();
+        cx.spawn(move |this, mut cx| async move {
+            let result = client
+                .request(proto::RemoveChannelMember {
+                    channel_id,
+                    user_id,
+                })
+                .await;
+
+            this.update(&mut cx, |this, cx| {
+                this.outgoing_invites.remove(&(channel_id, user_id));
+                cx.notify();
+            })?;
+            result?;
+            Ok(())
+        })
+    }
+
+    pub fn set_member_role(
+        &mut self,
+        channel_id: ChannelId,
+        user_id: UserId,
+        role: proto::ChannelRole,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        if !self.outgoing_invites.insert((channel_id, user_id)) {
+            return Task::ready(Err(anyhow!("member request already in progress")));
+        }
+
+        cx.notify();
+        let client = self.client.clone();
+        cx.spawn(move |this, mut cx| async move {
+            let result = client
+                .request(proto::SetChannelMemberRole {
+                    channel_id,
+                    user_id,
+                    role: role.into(),
+                })
+                .await;
+
+            this.update(&mut cx, |this, cx| {
+                this.outgoing_invites.remove(&(channel_id, user_id));
+                cx.notify();
+            })?;
+
+            result?;
+            Ok(())
+        })
+    }
+
+    pub fn rename(
+        &mut self,
+        channel_id: ChannelId,
+        new_name: &str,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        let client = self.client.clone();
+        let name = new_name.to_string();
+        cx.spawn(move |this, mut cx| async move {
+            let channel = client
+                .request(proto::RenameChannel { channel_id, name })
+                .await?
+                .channel
+                .ok_or_else(|| anyhow!("missing channel in response"))?;
+            this.update(&mut cx, |this, cx| {
+                let task = this.update_channels(
+                    proto::UpdateChannels {
+                        channels: vec![channel],
+                        ..Default::default()
+                    },
+                    cx,
+                );
+                assert!(task.is_none());
+
+                // This event is emitted because the collab panel wants to clear the pending edit state
+                // before this frame is rendered. But we can't guarantee that the collab panel's future
+                // will resolve before this flush_effects finishes. Synchronously emitting this event
+                // ensures that the collab panel will observe this creation before the frame complete
+                cx.emit(ChannelEvent::ChannelRenamed(channel_id))
+            })?;
+            Ok(())
+        })
+    }
+
+    pub fn respond_to_channel_invite(
+        &mut self,
+        channel_id: ChannelId,
+        accept: bool,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<()>> {
+        let client = self.client.clone();
+        cx.background_executor().spawn(async move {
+            client
+                .request(proto::RespondToChannelInvite { channel_id, accept })
+                .await?;
+            Ok(())
+        })
+    }
+
+    pub fn get_channel_member_details(
+        &self,
+        channel_id: ChannelId,
+        cx: &mut ModelContext<Self>,
+    ) -> Task<Result<Vec<ChannelMembership>>> {
+        let client = self.client.clone();
+        let user_store = self.user_store.downgrade();
+        cx.spawn(move |_, mut cx| async move {
+            let response = client
+                .request(proto::GetChannelMembers { channel_id })
+                .await?;
+
+            let user_ids = response.members.iter().map(|m| m.user_id).collect();
+            let user_store = user_store
+                .upgrade()
+                .ok_or_else(|| anyhow!("user store dropped"))?;
+            let users = user_store
+                .update(&mut cx, |user_store, cx| user_store.get_users(user_ids, cx))?
+                .await?;
+
+            Ok(users
+                .into_iter()
+                .zip(response.members)
+                .filter_map(|(user, member)| {
+                    Some(ChannelMembership {
+                        user,
+                        role: member.role(),
+                        kind: member.kind(),
+                    })
+                })
+                .collect())
+        })
+    }
+
+    pub fn remove_channel(&self, channel_id: ChannelId) -> impl Future<Output = Result<()>> {
+        let client = self.client.clone();
+        async move {
+            client.request(proto::DeleteChannel { channel_id }).await?;
+            Ok(())
+        }
+    }
+
+    pub fn has_pending_channel_invite_response(&self, _: &Arc<Channel>) -> bool {
+        false
+    }
+
+    pub fn has_pending_channel_invite(&self, channel_id: ChannelId, user_id: UserId) -> bool {
+        self.outgoing_invites.contains(&(channel_id, user_id))
+    }
+
+    async fn handle_update_channels(
+        this: Model<Self>,
+        message: TypedEnvelope<proto::UpdateChannels>,
+        _: Arc<Client>,
+        mut cx: AsyncAppContext,
+    ) -> Result<()> {
+        this.update(&mut cx, |this, _| {
+            this.update_channels_tx
+                .unbounded_send(message.payload)
+                .unwrap();
+        })?;
+        Ok(())
+    }
+
+    fn handle_connect(&mut self, cx: &mut ModelContext<Self>) -> Task<Result<()>> {
+        self.channel_index.clear();
+        self.channel_invitations.clear();
+        self.channel_participants.clear();
+        self.channel_index.clear();
+        self.outgoing_invites.clear();
+        self.disconnect_channel_buffers_task.take();
+
+        for chat in self.opened_chats.values() {
+            if let OpenedModelHandle::Open(chat) = chat {
+                if let Some(chat) = chat.upgrade() {
+                    chat.update(cx, |chat, cx| {
+                        chat.rejoin(cx);
+                    });
+                }
+            }
+        }
+
+        let mut buffer_versions = Vec::new();
+        for buffer in self.opened_buffers.values() {
+            if let OpenedModelHandle::Open(buffer) = buffer {
+                if let Some(buffer) = buffer.upgrade() {
+                    let channel_buffer = buffer.read(cx);
+                    let buffer = channel_buffer.buffer().read(cx);
+                    buffer_versions.push(proto::ChannelBufferVersion {
+                        channel_id: channel_buffer.channel_id,
+                        epoch: channel_buffer.epoch(),
+                        version: language::proto::serialize_version(&buffer.version()),
+                    });
+                }
+            }
+        }
+
+        if buffer_versions.is_empty() {
+            return Task::ready(Ok(()));
+        }
+
+        let response = self.client.request(proto::RejoinChannelBuffers {
+            buffers: buffer_versions,
+        });
+
+        cx.spawn(|this, mut cx| async move {
+            let mut response = response.await?;
+
+            this.update(&mut cx, |this, cx| {
+                this.opened_buffers.retain(|_, buffer| match buffer {
+                    OpenedModelHandle::Open(channel_buffer) => {
+                        let Some(channel_buffer) = channel_buffer.upgrade() else {
+                            return false;
+                        };
+
+                        channel_buffer.update(cx, |channel_buffer, cx| {
+                            let channel_id = channel_buffer.channel_id;
+                            if let Some(remote_buffer) = response
+                                .buffers
+                                .iter_mut()
+                                .find(|buffer| buffer.channel_id == channel_id)
+                            {
+                                let channel_id = channel_buffer.channel_id;
+                                let remote_version =
+                                    language::proto::deserialize_version(&remote_buffer.version);
+
+                                channel_buffer.replace_collaborators(
+                                    mem::take(&mut remote_buffer.collaborators),
+                                    cx,
+                                );
+
+                                let operations = channel_buffer
+                                    .buffer()
+                                    .update(cx, |buffer, cx| {
+                                        let outgoing_operations =
+                                            buffer.serialize_ops(Some(remote_version), cx);
+                                        let incoming_operations =
+                                            mem::take(&mut remote_buffer.operations)
+                                                .into_iter()
+                                                .map(language::proto::deserialize_operation)
+                                                .collect::<Result<Vec<_>>>()?;
+                                        buffer.apply_ops(incoming_operations, cx)?;
+                                        anyhow::Ok(outgoing_operations)
+                                    })
+                                    .log_err();
+
+                                if let Some(operations) = operations {
+                                    let client = this.client.clone();
+                                    cx.background_executor()
+                                        .spawn(async move {
+                                            let operations = operations.await;
+                                            for chunk in
+                                                language::proto::split_operations(operations)
+                                            {
+                                                client
+                                                    .send(proto::UpdateChannelBuffer {
+                                                        channel_id,
+                                                        operations: chunk,
+                                                    })
+                                                    .ok();
+                                            }
+                                        })
+                                        .detach();
+                                    return true;
+                                }
+                            }
+
+                            channel_buffer.disconnect(cx);
+                            false
+                        })
+                    }
+                    OpenedModelHandle::Loading(_) => true,
+                });
+            })
+            .ok();
+            anyhow::Ok(())
+        })
+    }
+
+    fn handle_disconnect(&mut self, wait_for_reconnect: bool, cx: &mut ModelContext<Self>) {
+        cx.notify();
+
+        self.disconnect_channel_buffers_task.get_or_insert_with(|| {
+            cx.spawn(move |this, mut cx| async move {
+                if wait_for_reconnect {
+                    cx.background_executor().timer(RECONNECT_TIMEOUT).await;
+                }
+
+                if let Some(this) = this.upgrade() {
+                    this.update(&mut cx, |this, cx| {
+                        for (_, buffer) in this.opened_buffers.drain() {
+                            if let OpenedModelHandle::Open(buffer) = buffer {
+                                if let Some(buffer) = buffer.upgrade() {
+                                    buffer.update(cx, |buffer, cx| buffer.disconnect(cx));
+                                }
+                            }
+                        }
+                    })
+                    .ok();
+                }
+            })
+        });
+    }
+
+    pub(crate) fn update_channels(
+        &mut self,
+        payload: proto::UpdateChannels,
+        cx: &mut ModelContext<ChannelStore>,
+    ) -> Option<Task<Result<()>>> {
+        if !payload.remove_channel_invitations.is_empty() {
+            self.channel_invitations
+                .retain(|channel| !payload.remove_channel_invitations.contains(&channel.id));
+        }
+        for channel in payload.channel_invitations {
+            match self
+                .channel_invitations
+                .binary_search_by_key(&channel.id, |c| c.id)
+            {
+                Ok(ix) => Arc::make_mut(&mut self.channel_invitations[ix]).name = channel.name,
+                Err(ix) => self.channel_invitations.insert(
+                    ix,
+                    Arc::new(Channel {
+                        id: channel.id,
+                        visibility: channel.visibility(),
+                        role: channel.role(),
+                        name: channel.name,
+                        unseen_note_version: None,
+                        unseen_message_id: None,
+                        parent_path: channel.parent_path,
+                    }),
+                ),
+            }
+        }
+
+        let channels_changed = !payload.channels.is_empty()
+            || !payload.delete_channels.is_empty()
+            || !payload.unseen_channel_messages.is_empty()
+            || !payload.unseen_channel_buffer_changes.is_empty();
+
+        if channels_changed {
+            if !payload.delete_channels.is_empty() {
+                self.channel_index.delete_channels(&payload.delete_channels);
+                self.channel_participants
+                    .retain(|channel_id, _| !&payload.delete_channels.contains(channel_id));
+
+                for channel_id in &payload.delete_channels {
+                    let channel_id = *channel_id;
+                    if payload
+                        .channels
+                        .iter()
+                        .any(|channel| channel.id == channel_id)
+                    {
+                        continue;
+                    }
+                    if let Some(OpenedModelHandle::Open(buffer)) =
+                        self.opened_buffers.remove(&channel_id)
+                    {
+                        if let Some(buffer) = buffer.upgrade() {
+                            buffer.update(cx, ChannelBuffer::disconnect);
+                        }
+                    }
+                }
+            }
+
+            let mut index = self.channel_index.bulk_insert();
+            for channel in payload.channels {
+                let id = channel.id;
+                let channel_changed = index.insert(channel);
+
+                if channel_changed {
+                    if let Some(OpenedModelHandle::Open(buffer)) = self.opened_buffers.get(&id) {
+                        if let Some(buffer) = buffer.upgrade() {
+                            buffer.update(cx, ChannelBuffer::channel_changed);
+                        }
+                    }
+                }
+            }
+
+            for unseen_buffer_change in payload.unseen_channel_buffer_changes {
+                let version = language::proto::deserialize_version(&unseen_buffer_change.version);
+                index.note_changed(
+                    unseen_buffer_change.channel_id,
+                    unseen_buffer_change.epoch,
+                    &version,
+                );
+            }
+
+            for unseen_channel_message in payload.unseen_channel_messages {
+                index.new_messages(
+                    unseen_channel_message.channel_id,
+                    unseen_channel_message.message_id,
+                );
+            }
+        }
+
+        cx.notify();
+        if payload.channel_participants.is_empty() {
+            return None;
+        }
+
+        let mut all_user_ids = Vec::new();
+        let channel_participants = payload.channel_participants;
+        for entry in &channel_participants {
+            for user_id in entry.participant_user_ids.iter() {
+                if let Err(ix) = all_user_ids.binary_search(user_id) {
+                    all_user_ids.insert(ix, *user_id);
+                }
+            }
+        }
+
+        let users = self
+            .user_store
+            .update(cx, |user_store, cx| user_store.get_users(all_user_ids, cx));
+        Some(cx.spawn(|this, mut cx| async move {
+            let users = users.await?;
+
+            this.update(&mut cx, |this, cx| {
+                for entry in &channel_participants {
+                    let mut participants: Vec<_> = entry
+                        .participant_user_ids
+                        .iter()
+                        .filter_map(|user_id| {
+                            users
+                                .binary_search_by_key(&user_id, |user| &user.id)
+                                .ok()
+                                .map(|ix| users[ix].clone())
+                        })
+                        .collect();
+
+                    participants.sort_by_key(|u| u.id);
+
+                    this.channel_participants
+                        .insert(entry.channel_id, participants);
+                }
+
+                cx.notify();
+            })
+        }))
+    }
+}

crates/channel2/src/channel_store/channel_index.rs 🔗

@@ -0,0 +1,184 @@
+use crate::{Channel, ChannelId};
+use collections::BTreeMap;
+use rpc::proto;
+use std::sync::Arc;
+
+#[derive(Default, Debug)]
+pub struct ChannelIndex {
+    channels_ordered: Vec<ChannelId>,
+    channels_by_id: BTreeMap<ChannelId, Arc<Channel>>,
+}
+
+impl ChannelIndex {
+    pub fn by_id(&self) -> &BTreeMap<ChannelId, Arc<Channel>> {
+        &self.channels_by_id
+    }
+
+    pub fn ordered_channels(&self) -> &[ChannelId] {
+        &self.channels_ordered
+    }
+
+    pub fn clear(&mut self) {
+        self.channels_ordered.clear();
+        self.channels_by_id.clear();
+    }
+
+    /// Delete the given channels from this index.
+    pub fn delete_channels(&mut self, channels: &[ChannelId]) {
+        self.channels_by_id
+            .retain(|channel_id, _| !channels.contains(channel_id));
+        self.channels_ordered
+            .retain(|channel_id| !channels.contains(channel_id));
+    }
+
+    pub fn bulk_insert(&mut self) -> ChannelPathsInsertGuard {
+        ChannelPathsInsertGuard {
+            channels_ordered: &mut self.channels_ordered,
+            channels_by_id: &mut self.channels_by_id,
+        }
+    }
+
+    pub fn acknowledge_note_version(
+        &mut self,
+        channel_id: ChannelId,
+        epoch: u64,
+        version: &clock::Global,
+    ) {
+        if let Some(channel) = self.channels_by_id.get_mut(&channel_id) {
+            let channel = Arc::make_mut(channel);
+            if let Some((unseen_epoch, unseen_version)) = &channel.unseen_note_version {
+                if epoch > *unseen_epoch
+                    || epoch == *unseen_epoch && version.observed_all(unseen_version)
+                {
+                    channel.unseen_note_version = None;
+                }
+            }
+        }
+    }
+
+    pub fn acknowledge_message_id(&mut self, channel_id: ChannelId, message_id: u64) {
+        if let Some(channel) = self.channels_by_id.get_mut(&channel_id) {
+            let channel = Arc::make_mut(channel);
+            if let Some(unseen_message_id) = channel.unseen_message_id {
+                if message_id >= unseen_message_id {
+                    channel.unseen_message_id = None;
+                }
+            }
+        }
+    }
+
+    pub fn note_changed(&mut self, channel_id: ChannelId, epoch: u64, version: &clock::Global) {
+        insert_note_changed(&mut self.channels_by_id, channel_id, epoch, version);
+    }
+
+    pub fn new_message(&mut self, channel_id: ChannelId, message_id: u64) {
+        insert_new_message(&mut self.channels_by_id, channel_id, message_id)
+    }
+}
+
+/// A guard for ensuring that the paths index maintains its sort and uniqueness
+/// invariants after a series of insertions
+#[derive(Debug)]
+pub struct ChannelPathsInsertGuard<'a> {
+    channels_ordered: &'a mut Vec<ChannelId>,
+    channels_by_id: &'a mut BTreeMap<ChannelId, Arc<Channel>>,
+}
+
+impl<'a> ChannelPathsInsertGuard<'a> {
+    pub fn note_changed(&mut self, channel_id: ChannelId, epoch: u64, version: &clock::Global) {
+        insert_note_changed(&mut self.channels_by_id, channel_id, epoch, &version);
+    }
+
+    pub fn new_messages(&mut self, channel_id: ChannelId, message_id: u64) {
+        insert_new_message(&mut self.channels_by_id, channel_id, message_id)
+    }
+
+    pub fn insert(&mut self, channel_proto: proto::Channel) -> bool {
+        let mut ret = false;
+        if let Some(existing_channel) = self.channels_by_id.get_mut(&channel_proto.id) {
+            let existing_channel = Arc::make_mut(existing_channel);
+
+            ret = existing_channel.visibility != channel_proto.visibility()
+                || existing_channel.role != channel_proto.role()
+                || existing_channel.name != channel_proto.name;
+
+            existing_channel.visibility = channel_proto.visibility();
+            existing_channel.role = channel_proto.role();
+            existing_channel.name = channel_proto.name;
+        } else {
+            self.channels_by_id.insert(
+                channel_proto.id,
+                Arc::new(Channel {
+                    id: channel_proto.id,
+                    visibility: channel_proto.visibility(),
+                    role: channel_proto.role(),
+                    name: channel_proto.name,
+                    unseen_note_version: None,
+                    unseen_message_id: None,
+                    parent_path: channel_proto.parent_path,
+                }),
+            );
+            self.insert_root(channel_proto.id);
+        }
+        ret
+    }
+
+    fn insert_root(&mut self, channel_id: ChannelId) {
+        self.channels_ordered.push(channel_id);
+    }
+}
+
+impl<'a> Drop for ChannelPathsInsertGuard<'a> {
+    fn drop(&mut self) {
+        self.channels_ordered.sort_by(|a, b| {
+            let a = channel_path_sorting_key(*a, &self.channels_by_id);
+            let b = channel_path_sorting_key(*b, &self.channels_by_id);
+            a.cmp(b)
+        });
+        self.channels_ordered.dedup();
+    }
+}
+
+fn channel_path_sorting_key<'a>(
+    id: ChannelId,
+    channels_by_id: &'a BTreeMap<ChannelId, Arc<Channel>>,
+) -> impl Iterator<Item = &str> {
+    let (parent_path, name) = channels_by_id
+        .get(&id)
+        .map_or((&[] as &[_], None), |channel| {
+            (channel.parent_path.as_slice(), Some(channel.name.as_str()))
+        });
+    parent_path
+        .iter()
+        .filter_map(|id| Some(channels_by_id.get(id)?.name.as_str()))
+        .chain(name)
+}
+
+fn insert_note_changed(
+    channels_by_id: &mut BTreeMap<ChannelId, Arc<Channel>>,
+    channel_id: u64,
+    epoch: u64,
+    version: &clock::Global,
+) {
+    if let Some(channel) = channels_by_id.get_mut(&channel_id) {
+        let unseen_version = Arc::make_mut(channel)
+            .unseen_note_version
+            .get_or_insert((0, clock::Global::new()));
+        if epoch > unseen_version.0 {
+            *unseen_version = (epoch, version.clone());
+        } else {
+            unseen_version.1.join(&version);
+        }
+    }
+}
+
+fn insert_new_message(
+    channels_by_id: &mut BTreeMap<ChannelId, Arc<Channel>>,
+    channel_id: u64,
+    message_id: u64,
+) {
+    if let Some(channel) = channels_by_id.get_mut(&channel_id) {
+        let unseen_message_id = Arc::make_mut(channel).unseen_message_id.get_or_insert(0);
+        *unseen_message_id = message_id.max(*unseen_message_id);
+    }
+}

crates/channel2/src/channel_store_tests.rs 🔗

@@ -0,0 +1,380 @@
+use crate::channel_chat::ChannelChatEvent;
+
+use super::*;
+use client::{test::FakeServer, Client, UserStore};
+use gpui::{AppContext, Context, Model, TestAppContext};
+use rpc::proto::{self};
+use settings::SettingsStore;
+use util::http::FakeHttpClient;
+
+#[gpui::test]
+fn test_update_channels(cx: &mut AppContext) {
+    let channel_store = init_test(cx);
+
+    update_channels(
+        &channel_store,
+        proto::UpdateChannels {
+            channels: vec![
+                proto::Channel {
+                    id: 1,
+                    name: "b".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Admin.into(),
+                    parent_path: Vec::new(),
+                },
+                proto::Channel {
+                    id: 2,
+                    name: "a".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Member.into(),
+                    parent_path: Vec::new(),
+                },
+            ],
+            ..Default::default()
+        },
+        cx,
+    );
+    assert_channels(
+        &channel_store,
+        &[
+            //
+            (0, "a".to_string(), proto::ChannelRole::Member),
+            (0, "b".to_string(), proto::ChannelRole::Admin),
+        ],
+        cx,
+    );
+
+    update_channels(
+        &channel_store,
+        proto::UpdateChannels {
+            channels: vec![
+                proto::Channel {
+                    id: 3,
+                    name: "x".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Admin.into(),
+                    parent_path: vec![1],
+                },
+                proto::Channel {
+                    id: 4,
+                    name: "y".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Member.into(),
+                    parent_path: vec![2],
+                },
+            ],
+            ..Default::default()
+        },
+        cx,
+    );
+    assert_channels(
+        &channel_store,
+        &[
+            (0, "a".to_string(), proto::ChannelRole::Member),
+            (1, "y".to_string(), proto::ChannelRole::Member),
+            (0, "b".to_string(), proto::ChannelRole::Admin),
+            (1, "x".to_string(), proto::ChannelRole::Admin),
+        ],
+        cx,
+    );
+}
+
+#[gpui::test]
+fn test_dangling_channel_paths(cx: &mut AppContext) {
+    let channel_store = init_test(cx);
+
+    update_channels(
+        &channel_store,
+        proto::UpdateChannels {
+            channels: vec![
+                proto::Channel {
+                    id: 0,
+                    name: "a".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Admin.into(),
+                    parent_path: vec![],
+                },
+                proto::Channel {
+                    id: 1,
+                    name: "b".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Admin.into(),
+                    parent_path: vec![0],
+                },
+                proto::Channel {
+                    id: 2,
+                    name: "c".to_string(),
+                    visibility: proto::ChannelVisibility::Members as i32,
+                    role: proto::ChannelRole::Admin.into(),
+                    parent_path: vec![0, 1],
+                },
+            ],
+            ..Default::default()
+        },
+        cx,
+    );
+    // Sanity check
+    assert_channels(
+        &channel_store,
+        &[
+            //
+            (0, "a".to_string(), proto::ChannelRole::Admin),
+            (1, "b".to_string(), proto::ChannelRole::Admin),
+            (2, "c".to_string(), proto::ChannelRole::Admin),
+        ],
+        cx,
+    );
+
+    update_channels(
+        &channel_store,
+        proto::UpdateChannels {
+            delete_channels: vec![1, 2],
+            ..Default::default()
+        },
+        cx,
+    );
+
+    // Make sure that the 1/2/3 path is gone
+    assert_channels(
+        &channel_store,
+        &[(0, "a".to_string(), proto::ChannelRole::Admin)],
+        cx,
+    );
+}
+
+#[gpui::test]
+async fn test_channel_messages(cx: &mut TestAppContext) {
+    let user_id = 5;
+    let channel_id = 5;
+    let channel_store = cx.update(init_test);
+    let client = channel_store.update(cx, |s, _| s.client());
+    let server = FakeServer::for_client(user_id, &client, cx).await;
+
+    // Get the available channels.
+    server.send(proto::UpdateChannels {
+        channels: vec![proto::Channel {
+            id: channel_id,
+            name: "the-channel".to_string(),
+            visibility: proto::ChannelVisibility::Members as i32,
+            role: proto::ChannelRole::Member.into(),
+            parent_path: vec![],
+        }],
+        ..Default::default()
+    });
+    cx.executor().run_until_parked();
+    cx.update(|cx| {
+        assert_channels(
+            &channel_store,
+            &[(0, "the-channel".to_string(), proto::ChannelRole::Member)],
+            cx,
+        );
+    });
+
+    let get_users = server.receive::<proto::GetUsers>().await.unwrap();
+    assert_eq!(get_users.payload.user_ids, vec![5]);
+    server.respond(
+        get_users.receipt(),
+        proto::UsersResponse {
+            users: vec![proto::User {
+                id: 5,
+                github_login: "nathansobo".into(),
+                avatar_url: "http://avatar.com/nathansobo".into(),
+            }],
+        },
+    );
+
+    // Join a channel and populate its existing messages.
+    let channel = channel_store.update(cx, |store, cx| {
+        let channel_id = store.ordered_channels().next().unwrap().1.id;
+        store.open_channel_chat(channel_id, cx)
+    });
+    let join_channel = server.receive::<proto::JoinChannelChat>().await.unwrap();
+    server.respond(
+        join_channel.receipt(),
+        proto::JoinChannelChatResponse {
+            messages: vec![
+                proto::ChannelMessage {
+                    id: 10,
+                    body: "a".into(),
+                    timestamp: 1000,
+                    sender_id: 5,
+                    mentions: vec![],
+                    nonce: Some(1.into()),
+                },
+                proto::ChannelMessage {
+                    id: 11,
+                    body: "b".into(),
+                    timestamp: 1001,
+                    sender_id: 6,
+                    mentions: vec![],
+                    nonce: Some(2.into()),
+                },
+            ],
+            done: false,
+        },
+    );
+
+    cx.executor().start_waiting();
+
+    // Client requests all users for the received messages
+    let mut get_users = server.receive::<proto::GetUsers>().await.unwrap();
+    get_users.payload.user_ids.sort();
+    assert_eq!(get_users.payload.user_ids, vec![6]);
+    server.respond(
+        get_users.receipt(),
+        proto::UsersResponse {
+            users: vec![proto::User {
+                id: 6,
+                github_login: "maxbrunsfeld".into(),
+                avatar_url: "http://avatar.com/maxbrunsfeld".into(),
+            }],
+        },
+    );
+
+    let channel = channel.await.unwrap();
+    channel.update(cx, |channel, _| {
+        assert_eq!(
+            channel
+                .messages_in_range(0..2)
+                .map(|message| (message.sender.github_login.clone(), message.body.clone()))
+                .collect::<Vec<_>>(),
+            &[
+                ("nathansobo".into(), "a".into()),
+                ("maxbrunsfeld".into(), "b".into())
+            ]
+        );
+    });
+
+    // Receive a new message.
+    server.send(proto::ChannelMessageSent {
+        channel_id,
+        message: Some(proto::ChannelMessage {
+            id: 12,
+            body: "c".into(),
+            timestamp: 1002,
+            sender_id: 7,
+            mentions: vec![],
+            nonce: Some(3.into()),
+        }),
+    });
+
+    // Client requests user for message since they haven't seen them yet
+    let get_users = server.receive::<proto::GetUsers>().await.unwrap();
+    assert_eq!(get_users.payload.user_ids, vec![7]);
+    server.respond(
+        get_users.receipt(),
+        proto::UsersResponse {
+            users: vec![proto::User {
+                id: 7,
+                github_login: "as-cii".into(),
+                avatar_url: "http://avatar.com/as-cii".into(),
+            }],
+        },
+    );
+
+    assert_eq!(
+        channel.next_event(cx),
+        ChannelChatEvent::MessagesUpdated {
+            old_range: 2..2,
+            new_count: 1,
+        }
+    );
+    channel.update(cx, |channel, _| {
+        assert_eq!(
+            channel
+                .messages_in_range(2..3)
+                .map(|message| (message.sender.github_login.clone(), message.body.clone()))
+                .collect::<Vec<_>>(),
+            &[("as-cii".into(), "c".into())]
+        )
+    });
+
+    // Scroll up to view older messages.
+    channel.update(cx, |channel, cx| {
+        channel.load_more_messages(cx).unwrap().detach();
+    });
+    let get_messages = server.receive::<proto::GetChannelMessages>().await.unwrap();
+    assert_eq!(get_messages.payload.channel_id, 5);
+    assert_eq!(get_messages.payload.before_message_id, 10);
+    server.respond(
+        get_messages.receipt(),
+        proto::GetChannelMessagesResponse {
+            done: true,
+            messages: vec![
+                proto::ChannelMessage {
+                    id: 8,
+                    body: "y".into(),
+                    timestamp: 998,
+                    sender_id: 5,
+                    nonce: Some(4.into()),
+                    mentions: vec![],
+                },
+                proto::ChannelMessage {
+                    id: 9,
+                    body: "z".into(),
+                    timestamp: 999,
+                    sender_id: 6,
+                    nonce: Some(5.into()),
+                    mentions: vec![],
+                },
+            ],
+        },
+    );
+
+    assert_eq!(
+        channel.next_event(cx),
+        ChannelChatEvent::MessagesUpdated {
+            old_range: 0..0,
+            new_count: 2,
+        }
+    );
+    channel.update(cx, |channel, _| {
+        assert_eq!(
+            channel
+                .messages_in_range(0..2)
+                .map(|message| (message.sender.github_login.clone(), message.body.clone()))
+                .collect::<Vec<_>>(),
+            &[
+                ("nathansobo".into(), "y".into()),
+                ("maxbrunsfeld".into(), "z".into())
+            ]
+        );
+    });
+}
+
+fn init_test(cx: &mut AppContext) -> Model<ChannelStore> {
+    let http = FakeHttpClient::with_404_response();
+    let client = Client::new(http.clone(), cx);
+    let user_store = cx.build_model(|cx| UserStore::new(client.clone(), http, cx));
+
+    let settings_store = SettingsStore::test(cx);
+    cx.set_global(settings_store);
+    client::init(&client, cx);
+    crate::init(&client, user_store, cx);
+
+    ChannelStore::global(cx)
+}
+
+fn update_channels(
+    channel_store: &Model<ChannelStore>,
+    message: proto::UpdateChannels,
+    cx: &mut AppContext,
+) {
+    let task = channel_store.update(cx, |store, cx| store.update_channels(message, cx));
+    assert!(task.is_none());
+}
+
+#[track_caller]
+fn assert_channels(
+    channel_store: &Model<ChannelStore>,
+    expected_channels: &[(usize, String, proto::ChannelRole)],
+    cx: &mut AppContext,
+) {
+    let actual = channel_store.update(cx, |store, _| {
+        store
+            .ordered_channels()
+            .map(|(depth, channel)| (depth, channel.name.to_string(), channel.role))
+            .collect::<Vec<_>>()
+    });
+    assert_eq!(actual, expected_channels);
+}

crates/client2/src/user.rs 🔗

@@ -292,22 +292,18 @@ impl UserStore {
                         .upgrade()
                         .ok_or_else(|| anyhow!("can't upgrade user store handle"))?;
                     for contact in message.contacts {
-                        let should_notify = contact.should_notify;
-                        updated_contacts.push((
-                            Arc::new(Contact::from_proto(contact, &this, &mut cx).await?),
-                            should_notify,
+                        updated_contacts.push(Arc::new(
+                            Contact::from_proto(contact, &this, &mut cx).await?,
                         ));
                     }
 
                     let mut incoming_requests = Vec::new();
                     for request in message.incoming_requests {
                         incoming_requests.push({
-                            let user = this
-                                .update(&mut cx, |this, cx| {
-                                    this.get_user(request.requester_id, cx)
-                                })?
-                                .await?;
-                            (user, request.should_notify)
+                            this.update(&mut cx, |this, cx| {
+                                this.get_user(request.requester_id, cx)
+                            })?
+                            .await?
                         });
                     }
 
@@ -331,13 +327,7 @@ impl UserStore {
                         this.contacts
                             .retain(|contact| !removed_contacts.contains(&contact.user.id));
                         // Update existing contacts and insert new ones
-                        for (updated_contact, should_notify) in updated_contacts {
-                            if should_notify {
-                                cx.emit(Event::Contact {
-                                    user: updated_contact.user.clone(),
-                                    kind: ContactEventKind::Accepted,
-                                });
-                            }
+                        for updated_contact in updated_contacts {
                             match this.contacts.binary_search_by_key(
                                 &&updated_contact.user.github_login,
                                 |contact| &contact.user.github_login,
@@ -360,14 +350,7 @@ impl UserStore {
                             }
                         });
                         // Update existing incoming requests and insert new ones
-                        for (user, should_notify) in incoming_requests {
-                            if should_notify {
-                                cx.emit(Event::Contact {
-                                    user: user.clone(),
-                                    kind: ContactEventKind::Requested,
-                                });
-                            }
-
+                        for user in incoming_requests {
                             match this
                                 .incoming_contact_requests
                                 .binary_search_by_key(&&user.github_login, |contact| {

crates/collab_ui/src/channel_view.rs 🔗

@@ -75,23 +75,23 @@ impl ChannelView {
         let workspace = workspace.read(cx);
         let project = workspace.project().to_owned();
         let channel_store = ChannelStore::global(cx);
-        let markdown = workspace
-            .app_state()
-            .languages
-            .language_for_name("Markdown");
+        let language_registry = workspace.app_state().languages.clone();
+        let markdown = language_registry.language_for_name("Markdown");
         let channel_buffer =
             channel_store.update(cx, |store, cx| store.open_channel_buffer(channel_id, cx));
 
         cx.spawn(|mut cx| async move {
             let channel_buffer = channel_buffer.await?;
+            let markdown = markdown.await.log_err();
 
-            if let Some(markdown) = markdown.await.log_err() {
-                channel_buffer.update(&mut cx, |buffer, cx| {
-                    buffer.buffer().update(cx, |buffer, cx| {
+            channel_buffer.update(&mut cx, |buffer, cx| {
+                buffer.buffer().update(cx, |buffer, cx| {
+                    buffer.set_language_registry(language_registry);
+                    if let Some(markdown) = markdown {
                         buffer.set_language(Some(markdown), cx);
-                    })
-                });
-            }
+                    }
+                })
+            });
 
             pane.update(&mut cx, |pane, cx| {
                 let buffer_id = channel_buffer.read(cx).remote_id(cx);

crates/diagnostics/Cargo.toml 🔗

@@ -20,7 +20,9 @@ theme = { path = "../theme" }
 util = { path = "../util" }
 workspace = { path = "../workspace" }
 
+log.workspace = true
 anyhow.workspace = true
+futures.workspace = true
 schemars.workspace = true
 serde.workspace = true
 serde_derive.workspace = true

crates/diagnostics/src/diagnostics.rs 🔗

@@ -2,8 +2,8 @@ pub mod items;
 mod project_diagnostics_settings;
 mod toolbar_controls;
 
-use anyhow::Result;
-use collections::{BTreeSet, HashSet};
+use anyhow::{Context, Result};
+use collections::{HashMap, HashSet};
 use editor::{
     diagnostic_block_renderer,
     display_map::{BlockDisposition, BlockId, BlockProperties, BlockStyle, RenderBlock},
@@ -11,9 +11,10 @@ use editor::{
     scroll::autoscroll::Autoscroll,
     Editor, ExcerptId, ExcerptRange, MultiBuffer, ToOffset,
 };
+use futures::future::try_join_all;
 use gpui::{
     actions, elements::*, fonts::TextStyle, serde_json, AnyViewHandle, AppContext, Entity,
-    ModelHandle, Task, View, ViewContext, ViewHandle, WeakViewHandle,
+    ModelHandle, Subscription, Task, View, ViewContext, ViewHandle, WeakViewHandle,
 };
 use language::{
     Anchor, Bias, Buffer, Diagnostic, DiagnosticEntry, DiagnosticSeverity, Point, Selection,
@@ -28,6 +29,7 @@ use std::{
     any::{Any, TypeId},
     borrow::Cow,
     cmp::Ordering,
+    mem,
     ops::Range,
     path::PathBuf,
     sync::Arc,
@@ -60,8 +62,10 @@ struct ProjectDiagnosticsEditor {
     summary: DiagnosticSummary,
     excerpts: ModelHandle<MultiBuffer>,
     path_states: Vec<PathState>,
-    paths_to_update: BTreeSet<(ProjectPath, LanguageServerId)>,
+    paths_to_update: HashMap<LanguageServerId, HashSet<ProjectPath>>,
+    current_diagnostics: HashMap<LanguageServerId, HashSet<ProjectPath>>,
     include_warnings: bool,
+    _subscriptions: Vec<Subscription>,
 }
 
 struct PathState {
@@ -125,9 +129,12 @@ impl View for ProjectDiagnosticsEditor {
                 "summary": project.diagnostic_summary(cx),
             }),
             "summary": self.summary,
-            "paths_to_update": self.paths_to_update.iter().map(|(path, server_id)|
-                (path.path.to_string_lossy(), server_id.0)
-            ).collect::<Vec<_>>(),
+            "paths_to_update": self.paths_to_update.iter().map(|(server_id, paths)|
+                (server_id.0, paths.into_iter().map(|path| path.path.to_string_lossy()).collect::<Vec<_>>())
+            ).collect::<HashMap<_, _>>(),
+            "current_diagnostics": self.current_diagnostics.iter().map(|(server_id, paths)|
+                (server_id.0, paths.into_iter().map(|path| path.path.to_string_lossy()).collect::<Vec<_>>())
+            ).collect::<HashMap<_, _>>(),
             "paths_states": self.path_states.iter().map(|state|
                 json!({
                     "path": state.path.path.to_string_lossy(),
@@ -149,21 +156,30 @@ impl ProjectDiagnosticsEditor {
         workspace: WeakViewHandle<Workspace>,
         cx: &mut ViewContext<Self>,
     ) -> Self {
-        cx.subscribe(&project_handle, |this, _, event, cx| match event {
-            project::Event::DiskBasedDiagnosticsFinished { language_server_id } => {
-                this.update_excerpts(Some(*language_server_id), cx);
-                this.update_title(cx);
-            }
-            project::Event::DiagnosticsUpdated {
-                language_server_id,
-                path,
-            } => {
-                this.paths_to_update
-                    .insert((path.clone(), *language_server_id));
-            }
-            _ => {}
-        })
-        .detach();
+        let project_event_subscription =
+            cx.subscribe(&project_handle, |this, _, event, cx| match event {
+                project::Event::DiskBasedDiagnosticsFinished { language_server_id } => {
+                    log::debug!("Disk based diagnostics finished for server {language_server_id}");
+                    this.update_excerpts(Some(*language_server_id), cx);
+                }
+                project::Event::DiagnosticsUpdated {
+                    language_server_id,
+                    path,
+                } => {
+                    log::debug!("Adding path {path:?} to update for server {language_server_id}");
+                    this.paths_to_update
+                        .entry(*language_server_id)
+                        .or_default()
+                        .insert(path.clone());
+                    let no_multiselections = this.editor.update(cx, |editor, cx| {
+                        editor.selections.all::<usize>(cx).len() <= 1
+                    });
+                    if no_multiselections && !this.is_dirty(cx) {
+                        this.update_excerpts(Some(*language_server_id), cx);
+                    }
+                }
+                _ => {}
+            });
 
         let excerpts = cx.add_model(|cx| MultiBuffer::new(project_handle.read(cx).replica_id()));
         let editor = cx.add_view(|cx| {
@@ -172,19 +188,14 @@ impl ProjectDiagnosticsEditor {
             editor.set_vertical_scroll_margin(5, cx);
             editor
         });
-        cx.subscribe(&editor, |this, _, event, cx| {
+        let editor_event_subscription = cx.subscribe(&editor, |this, _, event, cx| {
             cx.emit(event.clone());
             if event == &editor::Event::Focused && this.path_states.is_empty() {
                 cx.focus_self()
             }
-        })
-        .detach();
+        });
 
         let project = project_handle.read(cx);
-        let paths_to_update = project
-            .diagnostic_summaries(cx)
-            .map(|(path, server_id, _)| (path, server_id))
-            .collect();
         let summary = project.diagnostic_summary(cx);
         let mut this = Self {
             project: project_handle,
@@ -193,8 +204,10 @@ impl ProjectDiagnosticsEditor {
             excerpts,
             editor,
             path_states: Default::default(),
-            paths_to_update,
+            paths_to_update: HashMap::default(),
             include_warnings: settings::get::<ProjectDiagnosticsSettings>(cx).include_warnings,
+            current_diagnostics: HashMap::default(),
+            _subscriptions: vec![project_event_subscription, editor_event_subscription],
         };
         this.update_excerpts(None, cx);
         this
@@ -214,12 +227,7 @@ impl ProjectDiagnosticsEditor {
 
     fn toggle_warnings(&mut self, _: &ToggleWarnings, cx: &mut ViewContext<Self>) {
         self.include_warnings = !self.include_warnings;
-        self.paths_to_update = self
-            .project
-            .read(cx)
-            .diagnostic_summaries(cx)
-            .map(|(path, server_id, _)| (path, server_id))
-            .collect();
+        self.paths_to_update = self.current_diagnostics.clone();
         self.update_excerpts(None, cx);
         cx.notify();
     }
@@ -229,29 +237,94 @@ impl ProjectDiagnosticsEditor {
         language_server_id: Option<LanguageServerId>,
         cx: &mut ViewContext<Self>,
     ) {
-        let mut paths = Vec::new();
-        self.paths_to_update.retain(|(path, server_id)| {
-            if language_server_id
-                .map_or(true, |language_server_id| language_server_id == *server_id)
-            {
-                paths.push(path.clone());
-                false
+        log::debug!("Updating excerpts for server {language_server_id:?}");
+        let mut paths_to_recheck = HashSet::default();
+        let mut new_summaries: HashMap<LanguageServerId, HashSet<ProjectPath>> = self
+            .project
+            .read(cx)
+            .diagnostic_summaries(cx)
+            .fold(HashMap::default(), |mut summaries, (path, server_id, _)| {
+                summaries.entry(server_id).or_default().insert(path);
+                summaries
+            });
+        let mut old_diagnostics = if let Some(language_server_id) = language_server_id {
+            new_summaries.retain(|server_id, _| server_id == &language_server_id);
+            self.paths_to_update.retain(|server_id, paths| {
+                if server_id == &language_server_id {
+                    paths_to_recheck.extend(paths.drain());
+                    false
+                } else {
+                    true
+                }
+            });
+            let mut old_diagnostics = HashMap::default();
+            if let Some(new_paths) = new_summaries.get(&language_server_id) {
+                if let Some(old_paths) = self
+                    .current_diagnostics
+                    .insert(language_server_id, new_paths.clone())
+                {
+                    old_diagnostics.insert(language_server_id, old_paths);
+                }
             } else {
-                true
+                if let Some(old_paths) = self.current_diagnostics.remove(&language_server_id) {
+                    old_diagnostics.insert(language_server_id, old_paths);
+                }
             }
-        });
+            old_diagnostics
+        } else {
+            paths_to_recheck.extend(self.paths_to_update.drain().flat_map(|(_, paths)| paths));
+            mem::replace(&mut self.current_diagnostics, new_summaries.clone())
+        };
+        for (server_id, new_paths) in new_summaries {
+            match old_diagnostics.remove(&server_id) {
+                Some(mut old_paths) => {
+                    paths_to_recheck.extend(
+                        new_paths
+                            .into_iter()
+                            .filter(|new_path| !old_paths.remove(new_path)),
+                    );
+                    paths_to_recheck.extend(old_paths);
+                }
+                None => paths_to_recheck.extend(new_paths),
+            }
+        }
+        paths_to_recheck.extend(old_diagnostics.into_iter().flat_map(|(_, paths)| paths));
+
+        if paths_to_recheck.is_empty() {
+            log::debug!("No paths to recheck for language server {language_server_id:?}");
+            return;
+        }
+        log::debug!(
+            "Rechecking {} paths for language server {:?}",
+            paths_to_recheck.len(),
+            language_server_id
+        );
         let project = self.project.clone();
         cx.spawn(|this, mut cx| {
             async move {
-                for path in paths {
-                    let buffer = project
-                        .update(&mut cx, |project, cx| project.open_buffer(path.clone(), cx))
-                        .await?;
-                    this.update(&mut cx, |this, cx| {
-                        this.populate_excerpts(path, language_server_id, buffer, cx)
-                    })?;
-                }
-                Result::<_, anyhow::Error>::Ok(())
+                let _: Vec<()> = try_join_all(paths_to_recheck.into_iter().map(|path| {
+                    let mut cx = cx.clone();
+                    let project = project.clone();
+                    async move {
+                        let buffer = project
+                            .update(&mut cx, |project, cx| project.open_buffer(path.clone(), cx))
+                            .await
+                            .with_context(|| format!("opening buffer for path {path:?}"))?;
+                        this.update(&mut cx, |this, cx| {
+                            this.populate_excerpts(path, language_server_id, buffer, cx);
+                        })
+                        .context("missing project")?;
+                        anyhow::Ok(())
+                    }
+                }))
+                .await
+                .context("rechecking diagnostics for paths")?;
+
+                this.update(&mut cx, |this, cx| {
+                    this.summary = this.project.read(cx).diagnostic_summary(cx);
+                    cx.emit(Event::TitleChanged);
+                })?;
+                anyhow::Ok(())
             }
             .log_err()
         })
@@ -554,11 +627,6 @@ impl ProjectDiagnosticsEditor {
         }
         cx.notify();
     }
-
-    fn update_title(&mut self, cx: &mut ViewContext<Self>) {
-        self.summary = self.project.read(cx).diagnostic_summary(cx);
-        cx.emit(Event::TitleChanged);
-    }
 }
 
 impl Item for ProjectDiagnosticsEditor {
@@ -1301,25 +1369,6 @@ mod tests {
                     cx,
                 )
                 .unwrap();
-            project
-                .update_diagnostic_entries(
-                    server_id_2,
-                    PathBuf::from("/test/main.js"),
-                    None,
-                    vec![DiagnosticEntry {
-                        range: Unclipped(PointUtf16::new(1, 0))..Unclipped(PointUtf16::new(1, 1)),
-                        diagnostic: Diagnostic {
-                            message: "warning 1".to_string(),
-                            severity: DiagnosticSeverity::ERROR,
-                            is_primary: true,
-                            is_disk_based: true,
-                            group_id: 2,
-                            ..Default::default()
-                        },
-                    }],
-                    cx,
-                )
-                .unwrap();
         });
 
         // The first language server finishes
@@ -1353,6 +1402,25 @@ mod tests {
 
         // The second language server finishes
         project.update(cx, |project, cx| {
+            project
+                .update_diagnostic_entries(
+                    server_id_2,
+                    PathBuf::from("/test/main.js"),
+                    None,
+                    vec![DiagnosticEntry {
+                        range: Unclipped(PointUtf16::new(1, 0))..Unclipped(PointUtf16::new(1, 1)),
+                        diagnostic: Diagnostic {
+                            message: "warning 1".to_string(),
+                            severity: DiagnosticSeverity::ERROR,
+                            is_primary: true,
+                            is_disk_based: true,
+                            group_id: 2,
+                            ..Default::default()
+                        },
+                    }],
+                    cx,
+                )
+                .unwrap();
             project.disk_based_diagnostics_finished(server_id_2, cx);
         });
 

crates/editor/src/items.rs 🔗

@@ -33,9 +33,9 @@ use util::{
     paths::{PathExt, FILE_ROW_COLUMN_DELIMITER},
     ResultExt, TryFutureExt,
 };
-use workspace::item::{BreadcrumbText, FollowableItemHandle};
+use workspace::item::{BreadcrumbText, FollowableItemHandle, ItemHandle};
 use workspace::{
-    item::{FollowableItem, Item, ItemEvent, ItemHandle, ProjectItem},
+    item::{FollowableItem, Item, ItemEvent, ProjectItem},
     searchable::{Direction, SearchEvent, SearchableItem, SearchableItemHandle},
     ItemId, ItemNavHistory, Pane, StatusItemView, ToolbarItemLocation, ViewId, Workspace,
     WorkspaceId,

crates/editor2/src/display_map.rs 🔗

@@ -510,8 +510,8 @@ impl DisplaySnapshot {
         self.chunks(
             display_rows,
             language_aware,
-            Some(theme.styles.inlay_highlight_style),
-            Some(theme.styles.suggestion_highlight_style),
+            None, // todo!("add inlay highlight style")
+            None, // todo!("add suggestion highlight style")
         )
         .map(|chunk| {
             let mut highlight_style = chunk

crates/editor2/src/editor.rs 🔗

@@ -9335,7 +9335,7 @@ impl Render for Editor {
             underline: None,
         };
         EditorElement::new(EditorStyle {
-            background: cx.theme().colors().editor,
+            background: cx.theme().colors().editor_background,
             local_player: cx.theme().players().local(),
             text: text_style,
             line_height_scalar: settings.buffer_line_height.value(),

crates/editor2/src/element.rs 🔗

@@ -508,7 +508,7 @@ impl EditorElement {
         let bounds = gutter_bounds.union(&text_bounds);
         let scroll_top =
             layout.position_map.snapshot.scroll_position().y * layout.position_map.line_height;
-        let gutter_bg = cx.theme().colors().editor_gutter;
+        let gutter_bg = cx.theme().colors().editor_gutter_background;
         cx.paint_quad(
             gutter_bounds,
             Corners::default(),
@@ -545,7 +545,7 @@ impl EditorElement {
                         bounds.size.width,
                         layout.position_map.line_height * (end_row - start_row + 1) as f32,
                     );
-                    let active_line_bg = cx.theme().colors().editor_active_line;
+                    let active_line_bg = cx.theme().colors().editor_active_line_background;
                     cx.paint_quad(
                         Bounds { origin, size },
                         Corners::default(),
@@ -567,7 +567,7 @@ impl EditorElement {
                     bounds.size.width,
                     layout.position_map.line_height * highlighted_rows.len() as f32,
                 );
-                let highlighted_line_bg = cx.theme().colors().editor_highlighted_line;
+                let highlighted_line_bg = cx.theme().colors().editor_highlighted_line_background;
                 cx.paint_quad(
                     Bounds { origin, size },
                     Corners::default(),

crates/gpui2/build.rs 🔗

@@ -20,6 +20,7 @@ fn generate_dispatch_bindings() {
         .header("src/platform/mac/dispatch.h")
         .allowlist_var("_dispatch_main_q")
         .allowlist_var("DISPATCH_QUEUE_PRIORITY_DEFAULT")
+        .allowlist_var("DISPATCH_TIME_NOW")
         .allowlist_function("dispatch_get_global_queue")
         .allowlist_function("dispatch_async_f")
         .allowlist_function("dispatch_after_f")

crates/gpui2/src/app.rs 🔗

@@ -46,13 +46,17 @@ pub struct AppCell {
 }
 
 impl AppCell {
+    #[track_caller]
     pub fn borrow(&self) -> AppRef {
+        let thread_id = std::thread::current().id();
+        eprintln!("borrowed {thread_id:?}");
         AppRef(self.app.borrow())
     }
 
+    #[track_caller]
     pub fn borrow_mut(&self) -> AppRefMut {
-        // let thread_id = std::thread::current().id();
-        // dbg!("borrowed {thread_id:?}");
+        let thread_id = std::thread::current().id();
+        eprintln!("borrowed {thread_id:?}");
         AppRefMut(self.app.borrow_mut())
     }
 }
@@ -157,6 +161,7 @@ pub struct AppContext {
     flushing_effects: bool,
     pending_updates: usize,
     pub(crate) active_drag: Option<AnyDrag>,
+    pub(crate) active_tooltip: Option<AnyTooltip>,
     pub(crate) next_frame_callbacks: HashMap<DisplayId, Vec<FrameCallback>>,
     pub(crate) frame_consumers: HashMap<DisplayId, Task<()>>,
     pub(crate) background_executor: BackgroundExecutor,
@@ -215,6 +220,7 @@ impl AppContext {
                 flushing_effects: false,
                 pending_updates: 0,
                 active_drag: None,
+                active_tooltip: None,
                 next_frame_callbacks: HashMap::default(),
                 frame_consumers: HashMap::default(),
                 background_executor: executor,
@@ -896,3 +902,9 @@ pub(crate) struct AnyDrag {
     pub view: AnyView,
     pub cursor_offset: Point<Pixels>,
 }
+
+#[derive(Clone)]
+pub(crate) struct AnyTooltip {
+    pub view: AnyView,
+    pub cursor_offset: Point<Pixels>,
+}

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

@@ -189,3 +189,22 @@ impl TestAppContext {
         .unwrap();
     }
 }
+
+impl<T: Send + EventEmitter> Model<T> {
+    pub fn next_event(&self, cx: &mut TestAppContext) -> T::Event
+    where
+        T::Event: Send + Clone,
+    {
+        let (tx, mut rx) = futures::channel::mpsc::unbounded();
+        let _subscription = self.update(cx, |_, cx| {
+            cx.subscribe(self, move |_, _, event, _| {
+                tx.unbounded_send(event.clone()).ok();
+            })
+        });
+
+        cx.executor().run_until_parked();
+        rx.try_next()
+            .expect("no event received")
+            .expect("model was dropped")
+    }
+}

crates/gpui2/src/element.rs 🔗

@@ -212,6 +212,19 @@ pub trait Component<V> {
     {
         self.map(|this| if condition { then(this) } else { this })
     }
+
+    fn when_some<T>(self, option: Option<T>, then: impl FnOnce(Self, T) -> Self) -> Self
+    where
+        Self: Sized,
+    {
+        self.map(|this| {
+            if let Some(value) = option {
+                then(this, value)
+            } else {
+                this
+            }
+        })
+    }
 }
 
 impl<V> Component<V> for AnyElement<V> {

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

@@ -3,7 +3,7 @@ use crate::{
     ElementInteraction, FocusDisabled, FocusEnabled, FocusHandle, FocusListeners, Focusable,
     GlobalElementId, GroupBounds, InteractiveElementState, LayoutId, Overflow, ParentElement,
     Pixels, Point, SharedString, StatefulInteraction, StatefulInteractive, StatelessInteraction,
-    StatelessInteractive, Style, StyleRefinement, Styled, ViewContext,
+    StatelessInteractive, Style, StyleRefinement, Styled, ViewContext, Visibility,
 };
 use refineable::Refineable;
 use smallvec::SmallVec;
@@ -249,11 +249,22 @@ where
         cx: &mut ViewContext<V>,
     ) {
         self.with_element_id(cx, |this, _global_id, cx| {
+            let style = this.compute_style(bounds, element_state, cx);
+            if style.visibility == Visibility::Hidden {
+                return;
+            }
+
+            if let Some(mouse_cursor) = style.mouse_cursor {
+                let hovered = bounds.contains_point(&cx.mouse_position());
+                if hovered {
+                    cx.set_cursor_style(mouse_cursor);
+                }
+            }
+
             if let Some(group) = this.group.clone() {
                 GroupBounds::push(group, bounds, cx);
             }
 
-            let style = this.compute_style(bounds, element_state, cx);
             let z_index = style.z_index.unwrap_or(0);
 
             let mut child_min = point(Pixels::MAX, Pixels::MAX);

crates/gpui2/src/geometry.rs 🔗

@@ -21,7 +21,7 @@ pub fn point<T: Clone + Debug + Default>(x: T, y: T) -> Point<T> {
 }
 
 impl<T: Clone + Debug + Default> Point<T> {
-    pub fn new(x: T, y: T) -> Self {
+    pub const fn new(x: T, y: T) -> Self {
         Self { x, y }
     }
 

crates/gpui2/src/interactive.rs 🔗

@@ -1,8 +1,8 @@
 use crate::{
-    div, point, px, Action, AnyDrag, AnyView, AppContext, BorrowWindow, Bounds, Component,
-    DispatchContext, DispatchPhase, Div, Element, ElementId, FocusHandle, KeyMatch, Keystroke,
-    Modifiers, Overflow, Pixels, Point, Render, SharedString, Size, Style, StyleRefinement, View,
-    ViewContext,
+    div, point, px, Action, AnyDrag, AnyTooltip, AnyView, AppContext, BorrowWindow, Bounds,
+    Component, DispatchContext, DispatchPhase, Div, Element, ElementId, FocusHandle, KeyMatch,
+    Keystroke, Modifiers, Overflow, Pixels, Point, Render, SharedString, Size, Style,
+    StyleRefinement, Task, View, ViewContext,
 };
 use collections::HashMap;
 use derive_more::{Deref, DerefMut};
@@ -17,9 +17,12 @@ use std::{
     ops::Deref,
     path::PathBuf,
     sync::Arc,
+    time::Duration,
 };
 
 const DRAG_THRESHOLD: f64 = 2.;
+const TOOLTIP_DELAY: Duration = Duration::from_millis(500);
+const TOOLTIP_OFFSET: Point<Pixels> = Point::new(px(10.0), px(8.0));
 
 pub trait StatelessInteractive<V: 'static>: Element<V> {
     fn stateless_interaction(&mut self) -> &mut StatelessInteraction<V>;
@@ -333,6 +336,37 @@ pub trait StatefulInteractive<V: 'static>: StatelessInteractive<V> {
             }));
         self
     }
+
+    fn on_hover(mut self, listener: impl 'static + Fn(&mut V, bool, &mut ViewContext<V>)) -> Self
+    where
+        Self: Sized,
+    {
+        debug_assert!(
+            self.stateful_interaction().hover_listener.is_none(),
+            "calling on_hover more than once on the same element is not supported"
+        );
+        self.stateful_interaction().hover_listener = Some(Box::new(listener));
+        self
+    }
+
+    fn tooltip<W>(
+        mut self,
+        build_tooltip: impl Fn(&mut V, &mut ViewContext<V>) -> View<W> + 'static,
+    ) -> Self
+    where
+        Self: Sized,
+        W: 'static + Render,
+    {
+        debug_assert!(
+            self.stateful_interaction().tooltip_builder.is_none(),
+            "calling tooltip more than once on the same element is not supported"
+        );
+        self.stateful_interaction().tooltip_builder = Some(Arc::new(move |view_state, cx| {
+            build_tooltip(view_state, cx).into()
+        }));
+
+        self
+    }
 }
 
 pub trait ElementInteraction<V: 'static>: 'static {
@@ -568,6 +602,77 @@ pub trait ElementInteraction<V: 'static>: 'static {
                 }
             }
 
+            if let Some(hover_listener) = stateful.hover_listener.take() {
+                let was_hovered = element_state.hover_state.clone();
+                let has_mouse_down = element_state.pending_mouse_down.clone();
+
+                cx.on_mouse_event(move |view_state, event: &MouseMoveEvent, phase, cx| {
+                    if phase != DispatchPhase::Bubble {
+                        return;
+                    }
+                    let is_hovered =
+                        bounds.contains_point(&event.position) && has_mouse_down.lock().is_none();
+                    let mut was_hovered = was_hovered.lock();
+
+                    if is_hovered != was_hovered.clone() {
+                        *was_hovered = is_hovered;
+                        drop(was_hovered);
+
+                        hover_listener(view_state, is_hovered, cx);
+                    }
+                });
+            }
+
+            if let Some(tooltip_builder) = stateful.tooltip_builder.take() {
+                let active_tooltip = element_state.active_tooltip.clone();
+                let pending_mouse_down = element_state.pending_mouse_down.clone();
+
+                cx.on_mouse_event(move |_, event: &MouseMoveEvent, phase, cx| {
+                    if phase != DispatchPhase::Bubble {
+                        return;
+                    }
+
+                    let is_hovered = bounds.contains_point(&event.position)
+                        && pending_mouse_down.lock().is_none();
+                    if !is_hovered {
+                        active_tooltip.lock().take();
+                        return;
+                    }
+
+                    if active_tooltip.lock().is_none() {
+                        let task = cx.spawn({
+                            let active_tooltip = active_tooltip.clone();
+                            let tooltip_builder = tooltip_builder.clone();
+
+                            move |view, mut cx| async move {
+                                cx.background_executor().timer(TOOLTIP_DELAY).await;
+                                view.update(&mut cx, move |view_state, cx| {
+                                    active_tooltip.lock().replace(ActiveTooltip {
+                                        waiting: None,
+                                        tooltip: Some(AnyTooltip {
+                                            view: tooltip_builder(view_state, cx),
+                                            cursor_offset: cx.mouse_position() + TOOLTIP_OFFSET,
+                                        }),
+                                    });
+                                    cx.notify();
+                                })
+                                .ok();
+                            }
+                        });
+                        active_tooltip.lock().replace(ActiveTooltip {
+                            waiting: Some(task),
+                            tooltip: None,
+                        });
+                    }
+                });
+
+                if let Some(active_tooltip) = element_state.active_tooltip.lock().as_ref() {
+                    if active_tooltip.tooltip.is_some() {
+                        cx.active_tooltip = active_tooltip.tooltip.clone()
+                    }
+                }
+            }
+
             let active_state = element_state.active_state.clone();
             if active_state.lock().is_none() {
                 let active_group_bounds = stateful
@@ -639,6 +744,8 @@ pub struct StatefulInteraction<V> {
     active_style: StyleRefinement,
     group_active_style: Option<GroupStyle>,
     drag_listener: Option<DragListener<V>>,
+    hover_listener: Option<HoverListener<V>>,
+    tooltip_builder: Option<TooltipBuilder<V>>,
 }
 
 impl<V: 'static> ElementInteraction<V> for StatefulInteraction<V> {
@@ -666,6 +773,8 @@ impl<V> From<ElementId> for StatefulInteraction<V> {
             stateless: StatelessInteraction::default(),
             click_listeners: SmallVec::new(),
             drag_listener: None,
+            hover_listener: None,
+            tooltip_builder: None,
             active_style: StyleRefinement::default(),
             group_active_style: None,
         }
@@ -695,6 +804,8 @@ impl<V> StatelessInteraction<V> {
             stateless: self,
             click_listeners: SmallVec::new(),
             drag_listener: None,
+            hover_listener: None,
+            tooltip_builder: None,
             active_style: StyleRefinement::default(),
             group_active_style: None,
         }
@@ -746,8 +857,16 @@ impl ActiveState {
 #[derive(Default)]
 pub struct InteractiveElementState {
     active_state: Arc<Mutex<ActiveState>>,
+    hover_state: Arc<Mutex<bool>>,
     pending_mouse_down: Arc<Mutex<Option<MouseDownEvent>>>,
     scroll_offset: Option<Arc<Mutex<Point<Pixels>>>>,
+    active_tooltip: Arc<Mutex<Option<ActiveTooltip>>>,
+}
+
+struct ActiveTooltip {
+    #[allow(unused)] // used to drop the task
+    waiting: Option<Task<()>>,
+    tooltip: Option<AnyTooltip>,
 }
 
 impl InteractiveElementState {
@@ -1097,6 +1216,10 @@ pub type ClickListener<V> = Box<dyn Fn(&mut V, &ClickEvent, &mut ViewContext<V>)
 pub(crate) type DragListener<V> =
     Box<dyn Fn(&mut V, Point<Pixels>, &mut ViewContext<V>) -> AnyDrag + 'static>;
 
+pub(crate) type HoverListener<V> = Box<dyn Fn(&mut V, bool, &mut ViewContext<V>) + 'static>;
+
+pub(crate) type TooltipBuilder<V> = Arc<dyn Fn(&mut V, &mut ViewContext<V>) -> AnyView + 'static>;
+
 pub type KeyListener<V> = Box<
     dyn Fn(
             &mut V,

crates/gpui2/src/platform/mac/dispatcher.rs 🔗

@@ -11,11 +11,7 @@ use objc::{
 };
 use parking::{Parker, Unparker};
 use parking_lot::Mutex;
-use std::{
-    ffi::c_void,
-    sync::Arc,
-    time::{Duration, SystemTime},
-};
+use std::{ffi::c_void, sync::Arc, time::Duration};
 
 include!(concat!(env!("OUT_DIR"), "/dispatch_sys.rs"));
 
@@ -62,16 +58,10 @@ impl PlatformDispatcher for MacDispatcher {
     }
 
     fn dispatch_after(&self, duration: Duration, runnable: Runnable) {
-        let now = SystemTime::now();
-        let after_duration = now
-            .duration_since(SystemTime::UNIX_EPOCH)
-            .unwrap()
-            .as_nanos() as u64
-            + duration.as_nanos() as u64;
         unsafe {
             let queue =
                 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT.try_into().unwrap(), 0);
-            let when = dispatch_time(0, after_duration as i64);
+            let when = dispatch_time(DISPATCH_TIME_NOW as u64, duration.as_nanos() as i64);
             dispatch_after_f(
                 when,
                 queue,

crates/gpui2/src/style.rs 🔗

@@ -1,8 +1,8 @@
 use crate::{
     black, phi, point, rems, AbsoluteLength, BorrowAppContext, BorrowWindow, Bounds, ContentMask,
-    Corners, CornersRefinement, DefiniteLength, Edges, EdgesRefinement, Font, FontFeatures,
-    FontStyle, FontWeight, Hsla, Length, Pixels, Point, PointRefinement, Result, Rgba,
-    SharedString, Size, SizeRefinement, Styled, TextRun, ViewContext, WindowContext,
+    Corners, CornersRefinement, CursorStyle, DefiniteLength, Edges, EdgesRefinement, Font,
+    FontFeatures, FontStyle, FontWeight, Hsla, Length, Pixels, Point, PointRefinement, Result,
+    Rgba, SharedString, Size, SizeRefinement, Styled, TextRun, ViewContext, WindowContext,
 };
 use refineable::{Cascade, Refineable};
 use smallvec::SmallVec;
@@ -19,6 +19,9 @@ pub struct Style {
     /// What layout strategy should be used?
     pub display: Display,
 
+    /// Should the element be painted on screen?
+    pub visibility: Visibility,
+
     // Overflow properties
     /// How children overflowing their container should affect layout
     #[refineable]
@@ -98,6 +101,9 @@ pub struct Style {
     /// TEXT
     pub text: TextStyleRefinement,
 
+    /// The mouse cursor style shown when the mouse pointer is over an element.
+    pub mouse_cursor: Option<CursorStyle>,
+
     pub z_index: Option<u32>,
 }
 
@@ -107,6 +113,13 @@ impl Styled for StyleRefinement {
     }
 }
 
+#[derive(Default, Clone, Copy, Debug, Eq, PartialEq)]
+pub enum Visibility {
+    #[default]
+    Visible,
+    Hidden,
+}
+
 #[derive(Clone, Debug)]
 pub struct BoxShadow {
     pub color: Hsla,
@@ -297,6 +310,7 @@ impl Default for Style {
     fn default() -> Self {
         Style {
             display: Display::Block,
+            visibility: Visibility::Visible,
             overflow: Point {
                 x: Overflow::Visible,
                 y: Overflow::Visible,
@@ -328,6 +342,7 @@ impl Default for Style {
             corner_radii: Corners::default(),
             box_shadow: Default::default(),
             text: TextStyleRefinement::default(),
+            mouse_cursor: None,
             z_index: None,
         }
     }

crates/gpui2/src/styled.rs 🔗

@@ -1,7 +1,7 @@
 use crate::{
-    self as gpui2, hsla, point, px, relative, rems, AbsoluteLength, AlignItems, DefiniteLength,
-    Display, Fill, FlexDirection, Hsla, JustifyContent, Length, Position, SharedString,
-    StyleRefinement,
+    self as gpui, hsla, point, px, relative, rems, AbsoluteLength, AlignItems, CursorStyle,
+    DefiniteLength, Display, Fill, FlexDirection, Hsla, JustifyContent, Length, Position,
+    SharedString, StyleRefinement, Visibility,
 };
 use crate::{BoxShadow, TextStyleRefinement};
 use smallvec::smallvec;
@@ -61,6 +61,54 @@ pub trait Styled {
         self
     }
 
+    /// Sets the visibility of the element to `visible`.
+    /// [Docs](https://tailwindcss.com/docs/visibility)
+    fn visible(mut self) -> Self
+    where
+        Self: Sized,
+    {
+        self.style().visibility = Some(Visibility::Visible);
+        self
+    }
+
+    /// Sets the visibility of the element to `hidden`.
+    /// [Docs](https://tailwindcss.com/docs/visibility)
+    fn invisible(mut self) -> Self
+    where
+        Self: Sized,
+    {
+        self.style().visibility = Some(Visibility::Hidden);
+        self
+    }
+
+    fn cursor(mut self, cursor: CursorStyle) -> Self
+    where
+        Self: Sized,
+    {
+        self.style().mouse_cursor = Some(cursor);
+        self
+    }
+
+    /// Sets the cursor style when hovering an element to `default`.
+    /// [Docs](https://tailwindcss.com/docs/cursor)
+    fn cursor_default(mut self) -> Self
+    where
+        Self: Sized,
+    {
+        self.style().mouse_cursor = Some(CursorStyle::Arrow);
+        self
+    }
+
+    /// Sets the cursor style when hovering an element to `pointer`.
+    /// [Docs](https://tailwindcss.com/docs/cursor)
+    fn cursor_pointer(mut self) -> Self
+    where
+        Self: Sized,
+    {
+        self.style().mouse_cursor = Some(CursorStyle::PointingHand);
+        self
+    }
+
     /// Sets the flex direction of the element to `column`.
     /// [Docs](https://tailwindcss.com/docs/flex-direction#column)
     fn flex_col(mut self) -> Self

crates/gpui2/src/subscription.rs 🔗

@@ -38,7 +38,7 @@ where
         lock.subscribers
             .entry(emitter_key.clone())
             .or_default()
-            .insert(Default::default())
+            .get_or_insert_with(|| Default::default())
             .insert(subscriber_id, callback);
         let this = self.0.clone();
         Subscription {

crates/gpui2/src/window.rs 🔗

@@ -1,14 +1,14 @@
 use crate::{
     px, size, Action, AnyBox, AnyDrag, AnyView, AppContext, AsyncWindowContext, AvailableSpace,
-    Bounds, BoxShadow, Context, Corners, DevicePixels, DispatchContext, DisplayId, Edges, Effect,
-    Entity, EntityId, EventEmitter, FileDropEvent, FocusEvent, FontId, GlobalElementId, GlyphId,
-    Hsla, ImageData, InputEvent, IsZero, KeyListener, KeyMatch, KeyMatcher, Keystroke, LayoutId,
-    Model, ModelContext, Modifiers, MonochromeSprite, MouseButton, MouseDownEvent, MouseMoveEvent,
-    MouseUpEvent, Path, Pixels, PlatformAtlas, PlatformDisplay, PlatformWindow, Point,
-    PolychromeSprite, PromptLevel, Quad, Render, RenderGlyphParams, RenderImageParams,
-    RenderSvgParams, ScaledPixels, SceneBuilder, Shadow, SharedString, Size, Style, SubscriberSet,
-    Subscription, TaffyLayoutEngine, Task, Underline, UnderlineStyle, View, VisualContext,
-    WeakView, WindowBounds, WindowOptions, SUBPIXEL_VARIANTS,
+    Bounds, BoxShadow, Context, Corners, CursorStyle, DevicePixels, DispatchContext, DisplayId,
+    Edges, Effect, Entity, EntityId, EventEmitter, FileDropEvent, FocusEvent, FontId,
+    GlobalElementId, GlyphId, Hsla, ImageData, InputEvent, IsZero, KeyListener, KeyMatch,
+    KeyMatcher, Keystroke, LayoutId, Model, ModelContext, Modifiers, MonochromeSprite, MouseButton,
+    MouseDownEvent, MouseMoveEvent, MouseUpEvent, Path, Pixels, PlatformAtlas, PlatformDisplay,
+    PlatformWindow, Point, PolychromeSprite, PromptLevel, Quad, Render, RenderGlyphParams,
+    RenderImageParams, RenderSvgParams, ScaledPixels, SceneBuilder, Shadow, SharedString, Size,
+    Style, SubscriberSet, Subscription, TaffyLayoutEngine, Task, Underline, UnderlineStyle, View,
+    VisualContext, WeakView, WindowBounds, WindowOptions, SUBPIXEL_VARIANTS,
 };
 use anyhow::{anyhow, Result};
 use collections::HashMap;
@@ -190,6 +190,7 @@ pub struct Window {
     pub(crate) focus_handles: Arc<RwLock<SlotMap<FocusId, AtomicUsize>>>,
     default_prevented: bool,
     mouse_position: Point<Pixels>,
+    requested_cursor_style: Option<CursorStyle>,
     scale_factor: f32,
     bounds: WindowBounds,
     bounds_observers: SubscriberSet<(), AnyObserver>,
@@ -283,6 +284,7 @@ impl Window {
             focus_handles: Arc::new(RwLock::new(SlotMap::with_key())),
             default_prevented: true,
             mouse_position,
+            requested_cursor_style: None,
             scale_factor,
             bounds,
             bounds_observers: SubscriberSet::new(),
@@ -669,6 +671,10 @@ impl<'a> WindowContext<'a> {
         self.window.mouse_position
     }
 
+    pub fn set_cursor_style(&mut self, style: CursorStyle) {
+        self.window.requested_cursor_style = Some(style)
+    }
+
     /// Called during painting to invoke the given closure in a new stacking context. The given
     /// z-index is interpreted relative to the previous call to `stack`.
     pub fn stack<R>(&mut self, z_index: u32, f: impl FnOnce(&mut Self) -> R) -> R {
@@ -981,12 +987,27 @@ impl<'a> WindowContext<'a> {
                     cx.active_drag = Some(active_drag);
                 });
             });
+        } else if let Some(active_tooltip) = self.app.active_tooltip.take() {
+            self.stack(1, |cx| {
+                cx.with_element_offset(Some(active_tooltip.cursor_offset), |cx| {
+                    let available_space =
+                        size(AvailableSpace::MinContent, AvailableSpace::MinContent);
+                    active_tooltip.view.draw(available_space, cx);
+                });
+            });
         }
 
         self.window.root_view = Some(root_view);
         let scene = self.window.scene_builder.build();
 
         self.window.platform_window.draw(scene);
+        let cursor_style = self
+            .window
+            .requested_cursor_style
+            .take()
+            .unwrap_or(CursorStyle::Arrow);
+        self.platform.set_cursor_style(cursor_style);
+
         self.window.dirty = false;
     }
 

crates/gpui2_macros/src/derive_component.rs 🔗

@@ -28,9 +28,9 @@ pub fn derive_component(input: TokenStream) -> TokenStream {
     let (_, ty_generics, _) = ast.generics.split_for_impl();
 
     let expanded = quote! {
-        impl #impl_generics gpui2::Component<#view_type> for #name #ty_generics #where_clause {
-            fn render(self) -> gpui2::AnyElement<#view_type> {
-                (move |view_state: &mut #view_type, cx: &mut gpui2::ViewContext<'_, #view_type>| self.render(view_state, cx))
+        impl #impl_generics gpui::Component<#view_type> for #name #ty_generics #where_clause {
+            fn render(self) -> gpui::AnyElement<#view_type> {
+                (move |view_state: &mut #view_type, cx: &mut gpui::ViewContext<'_, #view_type>| self.render(view_state, cx))
                     .render()
             }
         }

crates/gpui2_macros/src/style_helpers.rs 🔗

@@ -123,7 +123,7 @@ fn generate_predefined_setter(
         .iter()
         .map(|field_tokens| {
             quote! {
-                style.#field_tokens = Some((#negation_token gpui2::#length_tokens).into());
+                style.#field_tokens = Some((#negation_token gpui::#length_tokens).into());
             }
         })
         .collect::<Vec<_>>();
@@ -163,7 +163,7 @@ fn generate_custom_value_setter(
 
     let method = quote! {
         #[doc = #doc_string]
-        fn #method_name(mut self, length: impl std::clone::Clone + Into<gpui2::#length_type>) -> Self where Self: std::marker::Sized {
+        fn #method_name(mut self, length: impl std::clone::Clone + Into<gpui::#length_type>) -> Self where Self: std::marker::Sized {
             let style = self.style();
             #(#field_assignments)*
             self

crates/gpui2_macros/src/test.rs 🔗

@@ -175,6 +175,7 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream {
                                 inner_fn_args.extend(quote!(&mut #cx_varname_lock,));
                                 cx_teardowns.extend(quote!(
                                     #cx_varname_lock.quit();
+                                    drop(#cx_varname_lock);
                                     dispatcher.run_until_parked();
                                 ));
                                 continue;

crates/gpui_macros/src/gpui_macros.rs 🔗

@@ -170,6 +170,8 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream {
                     #max_retries,
                     #detect_nondeterminism,
                     &mut |cx, foreground_platform, deterministic, seed| {
+                        // some of the macro contents do not use all variables, silence the warnings
+                        let _ = (&cx, &foreground_platform, &deterministic, &seed);
                         #cx_vars
                         cx.foreground().run(#inner_fn_name(#inner_fn_args));
                         #cx_teardowns
@@ -247,6 +249,8 @@ pub fn test(args: TokenStream, function: TokenStream) -> TokenStream {
                     #max_retries,
                     #detect_nondeterminism,
                     &mut |cx, foreground_platform, deterministic, seed| {
+                        // some of the macro contents do not use all variables, silence the warnings
+                        let _ = (&cx, &foreground_platform, &deterministic, &seed);
                         #cx_vars
                         #inner_fn_name(#inner_fn_args);
                         #cx_teardowns

crates/live_kit_client2/Cargo.toml 🔗

@@ -16,14 +16,14 @@ name = "test_app"
 test-support = [
     "async-trait",
     "collections/test-support",
-    "gpui2/test-support",
+    "gpui/test-support",
     "live_kit_server",
     "nanoid",
 ]
 
 [dependencies]
 collections = { path = "../collections", optional = true }
-gpui2 = { package = "gpui2", path = "../gpui2", optional = true }
+gpui = { package = "gpui2", path = "../gpui2", optional = true }
 live_kit_server = { path = "../live_kit_server", optional = true }
 media = { path = "../media" }
 
@@ -41,7 +41,7 @@ nanoid = { version ="0.4", optional = true}
 
 [dev-dependencies]
 collections = { path = "../collections", features = ["test-support"] }
-gpui2 = { package = "gpui2", path = "../gpui2", features = ["test-support"] }
+gpui = { package = "gpui2", path = "../gpui2", features = ["test-support"] }
 live_kit_server = { path = "../live_kit_server" }
 media = { path = "../media" }
 nanoid = "0.4"

crates/live_kit_client2/examples/test_app.rs 🔗

@@ -1,7 +1,7 @@
 use std::{sync::Arc, time::Duration};
 
 use futures::StreamExt;
-use gpui2::KeyBinding;
+use gpui::KeyBinding;
 use live_kit_client2::{
     LocalAudioTrack, LocalVideoTrack, RemoteAudioTrackUpdate, RemoteVideoTrackUpdate, Room,
 };
@@ -16,7 +16,7 @@ struct Quit;
 fn main() {
     SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger");
 
-    gpui2::App::production(Arc::new(())).run(|cx| {
+    gpui::App::production(Arc::new(())).run(|cx| {
         #[cfg(any(test, feature = "test-support"))]
         println!("USING TEST LIVEKIT");
 
@@ -173,6 +173,6 @@ fn main() {
     });
 }
 
-fn quit(_: &Quit, cx: &mut gpui2::AppContext) {
+fn quit(_: &Quit, cx: &mut gpui::AppContext) {
     cx.quit();
 }

crates/live_kit_client2/src/test.rs 🔗

@@ -2,7 +2,7 @@ use anyhow::{anyhow, Context, Result};
 use async_trait::async_trait;
 use collections::{BTreeMap, HashMap};
 use futures::Stream;
-use gpui2::BackgroundExecutor;
+use gpui::BackgroundExecutor;
 use live_kit_server::token;
 use media::core_video::CVImageBuffer;
 use parking_lot::Mutex;

crates/refineable/derive_refineable/src/derive_refineable.rs 🔗

@@ -16,9 +16,33 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream {
         ..
     } = parse_macro_input!(input);
 
-    let impl_debug_on_refinement = attrs
-        .iter()
-        .any(|attr| attr.path.is_ident("refineable") && attr.tokens.to_string().contains("debug"));
+    let refineable_attr = attrs.iter().find(|attr| attr.path.is_ident("refineable"));
+
+    let mut impl_debug_on_refinement = false;
+    let mut derive_serialize_on_refinement = false;
+    let mut derive_deserialize_on_refinement = false;
+
+    if let Some(refineable_attr) = refineable_attr {
+        if let Ok(syn::Meta::List(meta_list)) = refineable_attr.parse_meta() {
+            for nested in meta_list.nested {
+                let syn::NestedMeta::Meta(syn::Meta::Path(path)) = nested else {
+                    continue;
+                };
+
+                if path.is_ident("debug") {
+                    impl_debug_on_refinement = true;
+                }
+
+                if path.is_ident("serialize") {
+                    derive_serialize_on_refinement = true;
+                }
+
+                if path.is_ident("deserialize") {
+                    derive_deserialize_on_refinement = true;
+                }
+            }
+        }
+    }
 
     let refinement_ident = format_ident!("{}Refinement", ident);
     let (impl_generics, ty_generics, where_clause) = generics.split_for_impl();
@@ -235,8 +259,22 @@ pub fn derive_refineable(input: TokenStream) -> TokenStream {
         quote! {}
     };
 
+    let derive_serialize = if derive_serialize_on_refinement {
+        quote! { #[derive(serde::Serialize)]}
+    } else {
+        quote! {}
+    };
+
+    let derive_deserialize = if derive_deserialize_on_refinement {
+        quote! { #[derive(serde::Deserialize)]}
+    } else {
+        quote! {}
+    };
+
     let gen = quote! {
         #[derive(Clone)]
+        #derive_serialize
+        #derive_deserialize
         pub struct #refinement_ident #impl_generics {
             #( #field_visibilities #field_names: #wrapped_types ),*
         }

crates/rpc2/proto/zed.proto 🔗

@@ -89,88 +89,96 @@ message Envelope {
         FormatBuffersResponse format_buffers_response = 70;
         GetCompletions get_completions = 71;
         GetCompletionsResponse get_completions_response = 72;
-        ApplyCompletionAdditionalEdits apply_completion_additional_edits = 73;
-        ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 74;
-        GetCodeActions get_code_actions = 75;
-        GetCodeActionsResponse get_code_actions_response = 76;
-        GetHover get_hover = 77;
-        GetHoverResponse get_hover_response = 78;
-        ApplyCodeAction apply_code_action = 79;
-        ApplyCodeActionResponse apply_code_action_response = 80;
-        PrepareRename prepare_rename = 81;
-        PrepareRenameResponse prepare_rename_response = 82;
-        PerformRename perform_rename = 83;
-        PerformRenameResponse perform_rename_response = 84;
-        SearchProject search_project = 85;
-        SearchProjectResponse search_project_response = 86;
-
-        UpdateContacts update_contacts = 87;
-        UpdateInviteInfo update_invite_info = 88;
-        ShowContacts show_contacts = 89;
-
-        GetUsers get_users = 90;
-        FuzzySearchUsers fuzzy_search_users = 91;
-        UsersResponse users_response = 92;
-        RequestContact request_contact = 93;
-        RespondToContactRequest respond_to_contact_request = 94;
-        RemoveContact remove_contact = 95;
-
-        Follow follow = 96;
-        FollowResponse follow_response = 97;
-        UpdateFollowers update_followers = 98;
-        Unfollow unfollow = 99;
-        GetPrivateUserInfo get_private_user_info = 100;
-        GetPrivateUserInfoResponse get_private_user_info_response = 101;
-        UpdateDiffBase update_diff_base = 102;
-
-        OnTypeFormatting on_type_formatting = 103;
-        OnTypeFormattingResponse on_type_formatting_response = 104;
-
-        UpdateWorktreeSettings update_worktree_settings = 105;
-
-        InlayHints inlay_hints = 106;
-        InlayHintsResponse inlay_hints_response = 107;
-        ResolveInlayHint resolve_inlay_hint = 108;
-        ResolveInlayHintResponse resolve_inlay_hint_response = 109;
-        RefreshInlayHints refresh_inlay_hints = 110;
-
-        CreateChannel create_channel = 111;
-        CreateChannelResponse create_channel_response = 112;
-        InviteChannelMember invite_channel_member = 113;
-        RemoveChannelMember remove_channel_member = 114;
-        RespondToChannelInvite respond_to_channel_invite = 115;
-        UpdateChannels update_channels = 116;
-        JoinChannel join_channel = 117;
-        DeleteChannel delete_channel = 118;
-        GetChannelMembers get_channel_members = 119;
-        GetChannelMembersResponse get_channel_members_response = 120;
-        SetChannelMemberAdmin set_channel_member_admin = 121;
-        RenameChannel rename_channel = 122;
-        RenameChannelResponse rename_channel_response = 123;
-
-        JoinChannelBuffer join_channel_buffer = 124;
-        JoinChannelBufferResponse join_channel_buffer_response = 125;
-        UpdateChannelBuffer update_channel_buffer = 126;
-        LeaveChannelBuffer leave_channel_buffer = 127;
-        UpdateChannelBufferCollaborators update_channel_buffer_collaborators = 128;
-        RejoinChannelBuffers rejoin_channel_buffers = 129;
-        RejoinChannelBuffersResponse rejoin_channel_buffers_response = 130;
-        AckBufferOperation ack_buffer_operation = 143;
-
-        JoinChannelChat join_channel_chat = 131;
-        JoinChannelChatResponse join_channel_chat_response = 132;
-        LeaveChannelChat leave_channel_chat = 133;
-        SendChannelMessage send_channel_message = 134;
-        SendChannelMessageResponse send_channel_message_response = 135;
-        ChannelMessageSent channel_message_sent = 136;
-        GetChannelMessages get_channel_messages = 137;
-        GetChannelMessagesResponse get_channel_messages_response = 138;
-        RemoveChannelMessage remove_channel_message = 139;
-        AckChannelMessage ack_channel_message = 144;
-
-        LinkChannel link_channel = 140;
-        UnlinkChannel unlink_channel = 141;
-        MoveChannel move_channel = 142; // current max: 144
+        ResolveCompletionDocumentation resolve_completion_documentation = 73;
+        ResolveCompletionDocumentationResponse resolve_completion_documentation_response = 74;
+        ApplyCompletionAdditionalEdits apply_completion_additional_edits = 75;
+        ApplyCompletionAdditionalEditsResponse apply_completion_additional_edits_response = 76;
+        GetCodeActions get_code_actions = 77;
+        GetCodeActionsResponse get_code_actions_response = 78;
+        GetHover get_hover = 79;
+        GetHoverResponse get_hover_response = 80;
+        ApplyCodeAction apply_code_action = 81;
+        ApplyCodeActionResponse apply_code_action_response = 82;
+        PrepareRename prepare_rename = 83;
+        PrepareRenameResponse prepare_rename_response = 84;
+        PerformRename perform_rename = 85;
+        PerformRenameResponse perform_rename_response = 86;
+        SearchProject search_project = 87;
+        SearchProjectResponse search_project_response = 88;
+
+        UpdateContacts update_contacts = 89;
+        UpdateInviteInfo update_invite_info = 90;
+        ShowContacts show_contacts = 91;
+
+        GetUsers get_users = 92;
+        FuzzySearchUsers fuzzy_search_users = 93;
+        UsersResponse users_response = 94;
+        RequestContact request_contact = 95;
+        RespondToContactRequest respond_to_contact_request = 96;
+        RemoveContact remove_contact = 97;
+
+        Follow follow = 98;
+        FollowResponse follow_response = 99;
+        UpdateFollowers update_followers = 100;
+        Unfollow unfollow = 101;
+        GetPrivateUserInfo get_private_user_info = 102;
+        GetPrivateUserInfoResponse get_private_user_info_response = 103;
+        UpdateDiffBase update_diff_base = 104;
+
+        OnTypeFormatting on_type_formatting = 105;
+        OnTypeFormattingResponse on_type_formatting_response = 106;
+
+        UpdateWorktreeSettings update_worktree_settings = 107;
+
+        InlayHints inlay_hints = 108;
+        InlayHintsResponse inlay_hints_response = 109;
+        ResolveInlayHint resolve_inlay_hint = 110;
+        ResolveInlayHintResponse resolve_inlay_hint_response = 111;
+        RefreshInlayHints refresh_inlay_hints = 112;
+
+        CreateChannel create_channel = 113;
+        CreateChannelResponse create_channel_response = 114;
+        InviteChannelMember invite_channel_member = 115;
+        RemoveChannelMember remove_channel_member = 116;
+        RespondToChannelInvite respond_to_channel_invite = 117;
+        UpdateChannels update_channels = 118;
+        JoinChannel join_channel = 119;
+        DeleteChannel delete_channel = 120;
+        GetChannelMembers get_channel_members = 121;
+        GetChannelMembersResponse get_channel_members_response = 122;
+        SetChannelMemberRole set_channel_member_role = 123;
+        RenameChannel rename_channel = 124;
+        RenameChannelResponse rename_channel_response = 125;
+
+        JoinChannelBuffer join_channel_buffer = 126;
+        JoinChannelBufferResponse join_channel_buffer_response = 127;
+        UpdateChannelBuffer update_channel_buffer = 128;
+        LeaveChannelBuffer leave_channel_buffer = 129;
+        UpdateChannelBufferCollaborators update_channel_buffer_collaborators = 130;
+        RejoinChannelBuffers rejoin_channel_buffers = 131;
+        RejoinChannelBuffersResponse rejoin_channel_buffers_response = 132;
+        AckBufferOperation ack_buffer_operation = 133;
+
+        JoinChannelChat join_channel_chat = 134;
+        JoinChannelChatResponse join_channel_chat_response = 135;
+        LeaveChannelChat leave_channel_chat = 136;
+        SendChannelMessage send_channel_message = 137;
+        SendChannelMessageResponse send_channel_message_response = 138;
+        ChannelMessageSent channel_message_sent = 139;
+        GetChannelMessages get_channel_messages = 140;
+        GetChannelMessagesResponse get_channel_messages_response = 141;
+        RemoveChannelMessage remove_channel_message = 142;
+        AckChannelMessage ack_channel_message = 143;
+        GetChannelMessagesById get_channel_messages_by_id = 144;
+
+        MoveChannel move_channel = 147;
+        SetChannelVisibility set_channel_visibility = 148;
+
+        AddNotification add_notification = 149;
+        GetNotifications get_notifications = 150;
+        GetNotificationsResponse get_notifications_response = 151;
+        DeleteNotification delete_notification = 152;
+        MarkNotificationRead mark_notification_read = 153; // Current max
     }
 }
 
@@ -332,6 +340,7 @@ message RoomUpdated {
 message LiveKitConnectionInfo {
     string server_url = 1;
     string token = 2;
+    bool can_publish = 3;
 }
 
 message ShareProject {
@@ -832,6 +841,17 @@ message ResolveState {
     }
 }
 
+message ResolveCompletionDocumentation {
+    uint64 project_id = 1;
+    uint64 language_server_id = 2;
+    bytes lsp_completion = 3;
+}
+
+message ResolveCompletionDocumentationResponse {
+    string text = 1;
+    bool is_markdown = 2;
+}
+
 message ResolveInlayHint {
     uint64 project_id = 1;
     uint64 buffer_id = 2;
@@ -950,13 +970,10 @@ message LspDiskBasedDiagnosticsUpdated {}
 
 message UpdateChannels {
     repeated Channel channels = 1;
-    repeated ChannelEdge insert_edge = 2;
-    repeated ChannelEdge delete_edge = 3;
     repeated uint64 delete_channels = 4;
     repeated Channel channel_invitations = 5;
     repeated uint64 remove_channel_invitations = 6;
     repeated ChannelParticipants channel_participants = 7;
-    repeated ChannelPermission channel_permissions = 8;
     repeated UnseenChannelMessage unseen_channel_messages = 9;
     repeated UnseenChannelBufferChange unseen_channel_buffer_changes = 10;
 }
@@ -972,14 +989,9 @@ message UnseenChannelBufferChange {
     repeated VectorClockEntry version = 3;
 }
 
-message ChannelEdge {
-    uint64 channel_id = 1;
-    uint64 parent_id = 2;
-}
-
 message ChannelPermission {
     uint64 channel_id = 1;
-    bool is_admin = 2;
+    ChannelRole role = 3;
 }
 
 message ChannelParticipants {
@@ -1005,8 +1017,8 @@ message GetChannelMembersResponse {
 
 message ChannelMember {
     uint64 user_id = 1;
-    bool admin = 2;
     Kind kind = 3;
+    ChannelRole role = 4;
 
     enum Kind {
         Member = 0;
@@ -1028,7 +1040,7 @@ message CreateChannelResponse {
 message InviteChannelMember {
     uint64 channel_id = 1;
     uint64 user_id = 2;
-    bool admin = 3;
+    ChannelRole role = 4;
 }
 
 message RemoveChannelMember {
@@ -1036,10 +1048,22 @@ message RemoveChannelMember {
     uint64 user_id = 2;
 }
 
-message SetChannelMemberAdmin {
+enum ChannelRole {
+    Admin = 0;
+    Member = 1;
+    Guest = 2;
+    Banned = 3;
+}
+
+message SetChannelMemberRole {
     uint64 channel_id = 1;
     uint64 user_id = 2;
-    bool admin = 3;
+    ChannelRole role = 3;
+}
+
+message SetChannelVisibility {
+    uint64 channel_id = 1;
+    ChannelVisibility visibility = 2;
 }
 
 message RenameChannel {
@@ -1068,6 +1092,7 @@ message SendChannelMessage {
     uint64 channel_id = 1;
     string body = 2;
     Nonce nonce = 3;
+    repeated ChatMention mentions = 4;
 }
 
 message RemoveChannelMessage {
@@ -1099,20 +1124,13 @@ message GetChannelMessagesResponse {
     bool done = 2;
 }
 
-message LinkChannel {
-    uint64 channel_id = 1;
-    uint64 to = 2;
-}
-
-message UnlinkChannel {
-    uint64 channel_id = 1;
-    uint64 from = 2;
+message GetChannelMessagesById {
+    repeated uint64 message_ids = 1;
 }
 
 message MoveChannel {
     uint64 channel_id = 1;
-    uint64 from = 2;
-    uint64 to = 3;
+    optional uint64 to = 2;
 }
 
 message JoinChannelBuffer {
@@ -1125,6 +1143,12 @@ message ChannelMessage {
     uint64 timestamp = 3;
     uint64 sender_id = 4;
     Nonce nonce = 5;
+    repeated ChatMention mentions = 6;
+}
+
+message ChatMention {
+    Range range = 1;
+    uint64 user_id = 2;
 }
 
 message RejoinChannelBuffers {
@@ -1216,7 +1240,6 @@ message ShowContacts {}
 
 message IncomingContactRequest {
     uint64 requester_id = 1;
-    bool should_notify = 2;
 }
 
 message UpdateDiagnostics {
@@ -1533,16 +1556,23 @@ message Nonce {
     uint64 lower_half = 2;
 }
 
+enum ChannelVisibility {
+    Public = 0;
+    Members = 1;
+}
+
 message Channel {
     uint64 id = 1;
     string name = 2;
+    ChannelVisibility visibility = 3;
+    ChannelRole role = 4;
+    repeated uint64 parent_path = 5;
 }
 
 message Contact {
     uint64 user_id = 1;
     bool online = 2;
     bool busy = 3;
-    bool should_notify = 4;
 }
 
 message WorktreeMetadata {
@@ -1557,3 +1587,34 @@ message UpdateDiffBase {
     uint64 buffer_id = 2;
     optional string diff_base = 3;
 }
+
+message GetNotifications {
+    optional uint64 before_id = 1;
+}
+
+message AddNotification {
+    Notification notification = 1;
+}
+
+message GetNotificationsResponse {
+    repeated Notification notifications = 1;
+    bool done = 2;
+}
+
+message DeleteNotification {
+    uint64 notification_id = 1;
+}
+
+message MarkNotificationRead {
+    uint64 notification_id = 1;
+}
+
+message Notification {
+    uint64 id = 1;
+    uint64 timestamp = 2;
+    string kind = 3;
+    optional uint64 entity_id = 4;
+    string content = 5;
+    bool is_read = 6;
+    optional bool response = 7;
+}

crates/rpc2/src/proto.rs 🔗

@@ -133,6 +133,9 @@ impl fmt::Display for PeerId {
 
 messages!(
     (Ack, Foreground),
+    (AckBufferOperation, Background),
+    (AckChannelMessage, Background),
+    (AddNotification, Foreground),
     (AddProjectCollaborator, Foreground),
     (ApplyCodeAction, Background),
     (ApplyCodeActionResponse, Background),
@@ -143,57 +146,74 @@ messages!(
     (Call, Foreground),
     (CallCanceled, Foreground),
     (CancelCall, Foreground),
+    (ChannelMessageSent, Foreground),
     (CopyProjectEntry, Foreground),
     (CreateBufferForPeer, Foreground),
     (CreateChannel, Foreground),
     (CreateChannelResponse, Foreground),
-    (ChannelMessageSent, Foreground),
     (CreateProjectEntry, Foreground),
     (CreateRoom, Foreground),
     (CreateRoomResponse, Foreground),
     (DeclineCall, Foreground),
+    (DeleteChannel, Foreground),
+    (DeleteNotification, Foreground),
     (DeleteProjectEntry, Foreground),
     (Error, Foreground),
     (ExpandProjectEntry, Foreground),
+    (ExpandProjectEntryResponse, Foreground),
     (Follow, Foreground),
     (FollowResponse, Foreground),
     (FormatBuffers, Foreground),
     (FormatBuffersResponse, Foreground),
     (FuzzySearchUsers, Foreground),
-    (GetCodeActions, Background),
-    (GetCodeActionsResponse, Background),
-    (GetHover, Background),
-    (GetHoverResponse, Background),
+    (GetChannelMembers, Foreground),
+    (GetChannelMembersResponse, Foreground),
     (GetChannelMessages, Background),
+    (GetChannelMessagesById, Background),
     (GetChannelMessagesResponse, Background),
-    (SendChannelMessage, Background),
-    (SendChannelMessageResponse, Background),
+    (GetCodeActions, Background),
+    (GetCodeActionsResponse, Background),
     (GetCompletions, Background),
     (GetCompletionsResponse, Background),
     (GetDefinition, Background),
     (GetDefinitionResponse, Background),
-    (GetTypeDefinition, Background),
-    (GetTypeDefinitionResponse, Background),
     (GetDocumentHighlights, Background),
     (GetDocumentHighlightsResponse, Background),
-    (GetReferences, Background),
-    (GetReferencesResponse, Background),
+    (GetHover, Background),
+    (GetHoverResponse, Background),
+    (GetNotifications, Foreground),
+    (GetNotificationsResponse, Foreground),
+    (GetPrivateUserInfo, Foreground),
+    (GetPrivateUserInfoResponse, Foreground),
     (GetProjectSymbols, Background),
     (GetProjectSymbolsResponse, Background),
+    (GetReferences, Background),
+    (GetReferencesResponse, Background),
+    (GetTypeDefinition, Background),
+    (GetTypeDefinitionResponse, Background),
     (GetUsers, Foreground),
     (Hello, Foreground),
     (IncomingCall, Foreground),
+    (InlayHints, Background),
+    (InlayHintsResponse, Background),
     (InviteChannelMember, Foreground),
-    (UsersResponse, Foreground),
+    (JoinChannel, Foreground),
+    (JoinChannelBuffer, Foreground),
+    (JoinChannelBufferResponse, Foreground),
+    (JoinChannelChat, Foreground),
+    (JoinChannelChatResponse, Foreground),
     (JoinProject, Foreground),
     (JoinProjectResponse, Foreground),
     (JoinRoom, Foreground),
     (JoinRoomResponse, Foreground),
-    (JoinChannelChat, Foreground),
-    (JoinChannelChatResponse, Foreground),
+    (LeaveChannelBuffer, Background),
     (LeaveChannelChat, Foreground),
     (LeaveProject, Foreground),
     (LeaveRoom, Foreground),
+    (MarkNotificationRead, Foreground),
+    (MoveChannel, Foreground),
+    (OnTypeFormatting, Background),
+    (OnTypeFormattingResponse, Background),
     (OpenBufferById, Background),
     (OpenBufferByPath, Background),
     (OpenBufferForSymbol, Background),
@@ -201,58 +221,56 @@ messages!(
     (OpenBufferResponse, Background),
     (PerformRename, Background),
     (PerformRenameResponse, Background),
-    (OnTypeFormatting, Background),
-    (OnTypeFormattingResponse, Background),
-    (InlayHints, Background),
-    (InlayHintsResponse, Background),
-    (ResolveInlayHint, Background),
-    (ResolveInlayHintResponse, Background),
-    (RefreshInlayHints, Foreground),
     (Ping, Foreground),
     (PrepareRename, Background),
     (PrepareRenameResponse, Background),
-    (ExpandProjectEntryResponse, Foreground),
     (ProjectEntryResponse, Foreground),
+    (RefreshInlayHints, Foreground),
+    (RejoinChannelBuffers, Foreground),
+    (RejoinChannelBuffersResponse, Foreground),
     (RejoinRoom, Foreground),
     (RejoinRoomResponse, Foreground),
-    (RemoveContact, Foreground),
-    (RemoveChannelMember, Foreground),
-    (RemoveChannelMessage, Foreground),
     (ReloadBuffers, Foreground),
     (ReloadBuffersResponse, Foreground),
+    (RemoveChannelMember, Foreground),
+    (RemoveChannelMessage, Foreground),
+    (RemoveContact, Foreground),
     (RemoveProjectCollaborator, Foreground),
+    (RenameChannel, Foreground),
+    (RenameChannelResponse, Foreground),
     (RenameProjectEntry, Foreground),
     (RequestContact, Foreground),
-    (RespondToContactRequest, Foreground),
+    (ResolveCompletionDocumentation, Background),
+    (ResolveCompletionDocumentationResponse, Background),
+    (ResolveInlayHint, Background),
+    (ResolveInlayHintResponse, Background),
     (RespondToChannelInvite, Foreground),
-    (JoinChannel, Foreground),
+    (RespondToContactRequest, Foreground),
     (RoomUpdated, Foreground),
     (SaveBuffer, Foreground),
-    (RenameChannel, Foreground),
-    (RenameChannelResponse, Foreground),
-    (SetChannelMemberAdmin, Foreground),
+    (SetChannelMemberRole, Foreground),
+    (SetChannelVisibility, Foreground),
     (SearchProject, Background),
     (SearchProjectResponse, Background),
+    (SendChannelMessage, Background),
+    (SendChannelMessageResponse, Background),
     (ShareProject, Foreground),
     (ShareProjectResponse, Foreground),
     (ShowContacts, Foreground),
     (StartLanguageServer, Foreground),
     (SynchronizeBuffers, Foreground),
     (SynchronizeBuffersResponse, Foreground),
-    (RejoinChannelBuffers, Foreground),
-    (RejoinChannelBuffersResponse, Foreground),
     (Test, Foreground),
     (Unfollow, Foreground),
     (UnshareProject, Foreground),
     (UpdateBuffer, Foreground),
     (UpdateBufferFile, Foreground),
-    (UpdateContacts, Foreground),
-    (DeleteChannel, Foreground),
-    (MoveChannel, Foreground),
-    (LinkChannel, Foreground),
-    (UnlinkChannel, Foreground),
+    (UpdateChannelBuffer, Foreground),
+    (UpdateChannelBufferCollaborators, Foreground),
     (UpdateChannels, Foreground),
+    (UpdateContacts, Foreground),
     (UpdateDiagnosticSummary, Foreground),
+    (UpdateDiffBase, Foreground),
     (UpdateFollowers, Foreground),
     (UpdateInviteInfo, Foreground),
     (UpdateLanguageServer, Foreground),
@@ -261,18 +279,7 @@ messages!(
     (UpdateProjectCollaborator, Foreground),
     (UpdateWorktree, Foreground),
     (UpdateWorktreeSettings, Foreground),
-    (UpdateDiffBase, Foreground),
-    (GetPrivateUserInfo, Foreground),
-    (GetPrivateUserInfoResponse, Foreground),
-    (GetChannelMembers, Foreground),
-    (GetChannelMembersResponse, Foreground),
-    (JoinChannelBuffer, Foreground),
-    (JoinChannelBufferResponse, Foreground),
-    (LeaveChannelBuffer, Background),
-    (UpdateChannelBuffer, Foreground),
-    (UpdateChannelBufferCollaborators, Foreground),
-    (AckBufferOperation, Background),
-    (AckChannelMessage, Background),
+    (UsersResponse, Foreground),
 );
 
 request_messages!(
@@ -284,72 +291,78 @@ request_messages!(
     (Call, Ack),
     (CancelCall, Ack),
     (CopyProjectEntry, ProjectEntryResponse),
+    (CreateChannel, CreateChannelResponse),
     (CreateProjectEntry, ProjectEntryResponse),
     (CreateRoom, CreateRoomResponse),
-    (CreateChannel, CreateChannelResponse),
     (DeclineCall, Ack),
+    (DeleteChannel, Ack),
     (DeleteProjectEntry, ProjectEntryResponse),
     (ExpandProjectEntry, ExpandProjectEntryResponse),
     (Follow, FollowResponse),
     (FormatBuffers, FormatBuffersResponse),
+    (FuzzySearchUsers, UsersResponse),
+    (GetChannelMembers, GetChannelMembersResponse),
+    (GetChannelMessages, GetChannelMessagesResponse),
+    (GetChannelMessagesById, GetChannelMessagesResponse),
     (GetCodeActions, GetCodeActionsResponse),
-    (GetHover, GetHoverResponse),
     (GetCompletions, GetCompletionsResponse),
     (GetDefinition, GetDefinitionResponse),
-    (GetTypeDefinition, GetTypeDefinitionResponse),
     (GetDocumentHighlights, GetDocumentHighlightsResponse),
-    (GetReferences, GetReferencesResponse),
+    (GetHover, GetHoverResponse),
+    (GetNotifications, GetNotificationsResponse),
     (GetPrivateUserInfo, GetPrivateUserInfoResponse),
     (GetProjectSymbols, GetProjectSymbolsResponse),
-    (FuzzySearchUsers, UsersResponse),
+    (GetReferences, GetReferencesResponse),
+    (GetTypeDefinition, GetTypeDefinitionResponse),
     (GetUsers, UsersResponse),
+    (IncomingCall, Ack),
+    (InlayHints, InlayHintsResponse),
     (InviteChannelMember, Ack),
+    (JoinChannel, JoinRoomResponse),
+    (JoinChannelBuffer, JoinChannelBufferResponse),
+    (JoinChannelChat, JoinChannelChatResponse),
     (JoinProject, JoinProjectResponse),
     (JoinRoom, JoinRoomResponse),
-    (JoinChannelChat, JoinChannelChatResponse),
+    (LeaveChannelBuffer, Ack),
     (LeaveRoom, Ack),
-    (RejoinRoom, RejoinRoomResponse),
-    (IncomingCall, Ack),
+    (MarkNotificationRead, Ack),
+    (MoveChannel, Ack),
+    (OnTypeFormatting, OnTypeFormattingResponse),
     (OpenBufferById, OpenBufferResponse),
     (OpenBufferByPath, OpenBufferResponse),
     (OpenBufferForSymbol, OpenBufferForSymbolResponse),
-    (Ping, Ack),
     (PerformRename, PerformRenameResponse),
+    (Ping, Ack),
     (PrepareRename, PrepareRenameResponse),
-    (OnTypeFormatting, OnTypeFormattingResponse),
-    (InlayHints, InlayHintsResponse),
-    (ResolveInlayHint, ResolveInlayHintResponse),
     (RefreshInlayHints, Ack),
+    (RejoinChannelBuffers, RejoinChannelBuffersResponse),
+    (RejoinRoom, RejoinRoomResponse),
     (ReloadBuffers, ReloadBuffersResponse),
-    (RequestContact, Ack),
     (RemoveChannelMember, Ack),
-    (RemoveContact, Ack),
-    (RespondToContactRequest, Ack),
-    (RespondToChannelInvite, Ack),
-    (SetChannelMemberAdmin, Ack),
-    (SendChannelMessage, SendChannelMessageResponse),
-    (GetChannelMessages, GetChannelMessagesResponse),
-    (GetChannelMembers, GetChannelMembersResponse),
-    (JoinChannel, JoinRoomResponse),
     (RemoveChannelMessage, Ack),
-    (DeleteChannel, Ack),
-    (RenameProjectEntry, ProjectEntryResponse),
+    (RemoveContact, Ack),
     (RenameChannel, RenameChannelResponse),
-    (LinkChannel, Ack),
-    (UnlinkChannel, Ack),
-    (MoveChannel, Ack),
+    (RenameProjectEntry, ProjectEntryResponse),
+    (RequestContact, Ack),
+    (
+        ResolveCompletionDocumentation,
+        ResolveCompletionDocumentationResponse
+    ),
+    (ResolveInlayHint, ResolveInlayHintResponse),
+    (RespondToChannelInvite, Ack),
+    (RespondToContactRequest, Ack),
     (SaveBuffer, BufferSaved),
     (SearchProject, SearchProjectResponse),
+    (SendChannelMessage, SendChannelMessageResponse),
+    (SetChannelMemberRole, Ack),
+    (SetChannelVisibility, Ack),
     (ShareProject, ShareProjectResponse),
     (SynchronizeBuffers, SynchronizeBuffersResponse),
-    (RejoinChannelBuffers, RejoinChannelBuffersResponse),
     (Test, Test),
     (UpdateBuffer, Ack),
     (UpdateParticipantLocation, Ack),
     (UpdateProject, Ack),
     (UpdateWorktree, Ack),
-    (JoinChannelBuffer, JoinChannelBufferResponse),
-    (LeaveChannelBuffer, Ack)
 );
 
 entity_messages!(
@@ -368,25 +381,26 @@ entity_messages!(
     GetCodeActions,
     GetCompletions,
     GetDefinition,
-    GetTypeDefinition,
     GetDocumentHighlights,
     GetHover,
-    GetReferences,
     GetProjectSymbols,
+    GetReferences,
+    GetTypeDefinition,
+    InlayHints,
     JoinProject,
     LeaveProject,
+    OnTypeFormatting,
     OpenBufferById,
     OpenBufferByPath,
     OpenBufferForSymbol,
     PerformRename,
-    OnTypeFormatting,
-    InlayHints,
-    ResolveInlayHint,
-    RefreshInlayHints,
     PrepareRename,
+    RefreshInlayHints,
     ReloadBuffers,
     RemoveProjectCollaborator,
     RenameProjectEntry,
+    ResolveCompletionDocumentation,
+    ResolveInlayHint,
     SaveBuffer,
     SearchProject,
     StartLanguageServer,
@@ -395,19 +409,19 @@ entity_messages!(
     UpdateBuffer,
     UpdateBufferFile,
     UpdateDiagnosticSummary,
+    UpdateDiffBase,
     UpdateLanguageServer,
     UpdateProject,
     UpdateProjectCollaborator,
     UpdateWorktree,
     UpdateWorktreeSettings,
-    UpdateDiffBase
 );
 
 entity_messages!(
     channel_id,
     ChannelMessageSent,
-    UpdateChannelBuffer,
     RemoveChannelMessage,
+    UpdateChannelBuffer,
     UpdateChannelBufferCollaborators,
 );
 

crates/storybook2/Cargo.toml 🔗

@@ -14,7 +14,7 @@ anyhow.workspace = true
 backtrace-on-stack-overflow = "0.3.0"
 clap = { version = "4.4", features = ["derive", "string"] }
 chrono = "0.4"
-gpui2 = { path = "../gpui2" }
+gpui = { package = "gpui2", path = "../gpui2" }
 itertools = "0.11.0"
 log.workspace = true
 rust-embed.workspace = true
@@ -29,4 +29,4 @@ ui = { package = "ui2", path = "../ui2", features = ["stories"] }
 util = { path = "../util" }
 
 [dev-dependencies]
-gpui2 = { path = "../gpui2", features = ["test-support"] }
+gpui = { package = "gpui2", path = "../gpui2", features = ["test-support"] }

crates/storybook2/src/assets.rs 🔗

@@ -1,7 +1,7 @@
 use std::borrow::Cow;
 
 use anyhow::{anyhow, Result};
-use gpui2::{AssetSource, SharedString};
+use gpui::{AssetSource, SharedString};
 use rust_embed::RustEmbed;
 
 #[derive(RustEmbed)]

crates/storybook2/src/components.rs 🔗

@@ -1,97 +0,0 @@
-use gpui2::{
-    div, ArcCow, Element, EventContext, Interactive, IntoElement, MouseButton, ParentElement,
-    StyleHelpers, ViewContext,
-};
-use std::{marker::PhantomData, rc::Rc};
-
-struct ButtonHandlers<V, D> {
-    click: Option<Rc<dyn Fn(&mut V, &D, &mut EventContext<V>)>>,
-}
-
-impl<V, D> Default for ButtonHandlers<V, D> {
-    fn default() -> Self {
-        Self { click: None }
-    }
-}
-
-#[derive(Component)]
-pub struct Button<V: 'static, D: 'static> {
-    handlers: ButtonHandlers<V, D>,
-    label: Option<ArcCow<'static, str>>,
-    icon: Option<ArcCow<'static, str>>,
-    data: Rc<D>,
-    view_type: PhantomData<V>,
-}
-
-// Impl block for buttons without data.
-// See below for an impl block for any button.
-impl<V: 'static> Button<V, ()> {
-    fn new() -> Self {
-        Self {
-            handlers: ButtonHandlers::default(),
-            label: None,
-            icon: None,
-            data: Rc::new(()),
-            view_type: PhantomData,
-        }
-    }
-
-    pub fn data<D: 'static>(self, data: D) -> Button<V, D> {
-        Button {
-            handlers: ButtonHandlers::default(),
-            label: self.label,
-            icon: self.icon,
-            data: Rc::new(data),
-            view_type: PhantomData,
-        }
-    }
-}
-
-// Impl block for button regardless of its data type.
-impl<V: 'static, D: 'static> Button<V, D> {
-    pub fn label(mut self, label: impl Into<ArcCow<'static, str>>) -> Self {
-        self.label = Some(label.into());
-        self
-    }
-
-    pub fn icon(mut self, icon: impl Into<ArcCow<'static, str>>) -> Self {
-        self.icon = Some(icon.into());
-        self
-    }
-
-    pub fn on_click(
-        mut self,
-        handler: impl Fn(&mut V, &D, &mut EventContext<V>) + 'static,
-    ) -> Self {
-        self.handlers.click = Some(Rc::new(handler));
-        self
-    }
-}
-
-pub fn button<V>() -> Button<V, ()> {
-    Button::new()
-}
-
-impl<V: 'static, D: 'static> Button<V, D> {
-    fn render(
-        &mut self,
-        view: &mut V,
-        cx: &mut ViewContext<V>,
-    ) -> impl IntoElement<V> + Interactive<V> {
-        // let colors = &cx.theme::<Theme>().colors;
-
-        let button = div()
-            // .fill(colors.error(0.5))
-            .h_4()
-            .children(self.label.clone());
-
-        if let Some(handler) = self.handlers.click.clone() {
-            let data = self.data.clone();
-            button.on_mouse_down(MouseButton::Left, move |view, event, cx| {
-                handler(view, data.as_ref(), cx)
-            })
-        } else {
-            button
-        }
-    }
-}

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

@@ -1,5 +1,5 @@
 use crate::story::Story;
-use gpui2::{px, Div, Render};
+use gpui::{px, Div, Render};
 use theme2::{default_color_scales, ColorScaleStep};
 use ui::prelude::*;
 
@@ -20,7 +20,7 @@ impl Render for ColorsStory {
                     .flex_col()
                     .gap_1()
                     .overflow_y_scroll()
-                    .text_color(gpui2::white())
+                    .text_color(gpui::white())
                     .children(color_scales.into_iter().map(|scale| {
                         div()
                             .flex()

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

@@ -1,4 +1,4 @@
-use gpui2::{
+use gpui::{
     div, Div, FocusEnabled, Focusable, KeyBinding, ParentElement, Render, StatefulInteraction,
     StatelessInteractive, Styled, View, VisualContext, WindowContext,
 };
@@ -33,7 +33,7 @@ impl FocusStory {
 impl Render for FocusStory {
     type Element = Div<Self, StatefulInteraction<Self>, FocusEnabled<Self>>;
 
-    fn render(&mut self, cx: &mut gpui2::ViewContext<Self>) -> Self::Element {
+    fn render(&mut self, cx: &mut gpui::ViewContext<Self>) -> Self::Element {
         let theme = cx.theme();
         let color_1 = theme.styles.git.created;
         let color_2 = theme.styles.git.modified;

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

@@ -1,8 +1,5 @@
-use crate::{
-    story::Story,
-    story_selector::{ComponentStory, ElementStory},
-};
-use gpui2::{Div, Render, StatefulInteraction, View, VisualContext};
+use crate::{story::Story, story_selector::ComponentStory};
+use gpui::{Div, Render, StatefulInteraction, View, VisualContext};
 use strum::IntoEnumIterator;
 use ui::prelude::*;
 
@@ -18,9 +15,6 @@ impl Render for KitchenSinkStory {
     type Element = Div<Self, StatefulInteraction<Self>>;
 
     fn render(&mut self, cx: &mut ViewContext<Self>) -> Self::Element {
-        let element_stories = ElementStory::iter()
-            .map(|selector| selector.story(cx))
-            .collect::<Vec<_>>();
         let component_stories = ComponentStory::iter()
             .map(|selector| selector.story(cx))
             .collect::<Vec<_>>();
@@ -29,8 +23,6 @@ impl Render for KitchenSinkStory {
             .id("kitchen-sink")
             .overflow_y_scroll()
             .child(Story::title(cx, "Kitchen Sink"))
-            .child(Story::label(cx, "Elements"))
-            .child(div().flex().flex_col().children(element_stories))
             .child(Story::label(cx, "Components"))
             .child(div().flex().flex_col().children(component_stories))
             // Add a bit of space at the bottom of the kitchen sink so elements

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

@@ -1,4 +1,4 @@
-use gpui2::{
+use gpui::{
     div, px, Component, Div, ParentElement, Render, SharedString, StatefulInteraction, Styled,
     View, VisualContext, WindowContext,
 };
@@ -15,7 +15,7 @@ impl ScrollStory {
 impl Render for ScrollStory {
     type Element = Div<Self, StatefulInteraction<Self>>;
 
-    fn render(&mut self, cx: &mut gpui2::ViewContext<Self>) -> Self::Element {
+    fn render(&mut self, cx: &mut gpui::ViewContext<Self>) -> Self::Element {
         let theme = cx.theme();
         let color_1 = theme.styles.git.created;
         let color_2 = theme.styles.git.modified;

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

@@ -1,4 +1,4 @@
-use gpui2::{div, white, Div, ParentElement, Render, Styled, View, VisualContext, WindowContext};
+use gpui::{div, white, Div, ParentElement, Render, Styled, View, VisualContext, WindowContext};
 
 pub struct TextStory;
 
@@ -11,7 +11,7 @@ impl TextStory {
 impl Render for TextStory {
     type Element = Div<Self>;
 
-    fn render(&mut self, cx: &mut gpui2::ViewContext<Self>) -> Self::Element {
+    fn render(&mut self, cx: &mut gpui::ViewContext<Self>) -> Self::Element {
         div().size_full().bg(white()).child(concat!(
             "The quick brown fox jumps over the lazy dog. ",
             "Meanwhile, the lazy dog decided it was time for a change. ",

crates/storybook2/src/story_selector.rs 🔗

@@ -5,57 +5,33 @@ use crate::stories::*;
 use anyhow::anyhow;
 use clap::builder::PossibleValue;
 use clap::ValueEnum;
-use gpui2::{AnyView, VisualContext};
+use gpui::{AnyView, VisualContext};
 use strum::{EnumIter, EnumString, IntoEnumIterator};
-use ui::{prelude::*, AvatarStory, ButtonStory, DetailsStory, IconStory, InputStory, LabelStory};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy, strum::Display, EnumString, EnumIter)]
-#[strum(serialize_all = "snake_case")]
-pub enum ElementStory {
-    Avatar,
-    Button,
-    Colors,
-    Details,
-    Focus,
-    Icon,
-    Input,
-    Label,
-    Scroll,
-    Text,
-    ZIndex,
-}
-
-impl ElementStory {
-    pub fn story(&self, cx: &mut WindowContext) -> AnyView {
-        match self {
-            Self::Colors => cx.build_view(|_| ColorsStory).into(),
-            Self::Avatar => cx.build_view(|_| AvatarStory).into(),
-            Self::Button => cx.build_view(|_| ButtonStory).into(),
-            Self::Details => cx.build_view(|_| DetailsStory).into(),
-            Self::Focus => FocusStory::view(cx).into(),
-            Self::Icon => cx.build_view(|_| IconStory).into(),
-            Self::Input => cx.build_view(|_| InputStory).into(),
-            Self::Label => cx.build_view(|_| LabelStory).into(),
-            Self::Scroll => ScrollStory::view(cx).into(),
-            Self::Text => TextStory::view(cx).into(),
-            Self::ZIndex => cx.build_view(|_| ZIndexStory).into(),
-        }
-    }
-}
+use ui::prelude::*;
+use ui::{AvatarStory, ButtonStory, DetailsStory, IconStory, InputStory, LabelStory};
 
 #[derive(Debug, PartialEq, Eq, Clone, Copy, strum::Display, EnumString, EnumIter)]
 #[strum(serialize_all = "snake_case")]
 pub enum ComponentStory {
     AssistantPanel,
+    Avatar,
     Breadcrumb,
     Buffer,
+    Button,
     ChatPanel,
+    Checkbox,
     CollabPanel,
+    Colors,
     CommandPalette,
-    Copilot,
     ContextMenu,
+    Copilot,
+    Details,
     Facepile,
+    Focus,
+    Icon,
+    Input,
     Keybinding,
+    Label,
     LanguageSelector,
     MultiBuffer,
     NotificationsPanel,
@@ -63,29 +39,42 @@ pub enum ComponentStory {
     Panel,
     ProjectPanel,
     RecentProjects,
+    Scroll,
     Tab,
     TabBar,
     Terminal,
+    Text,
     ThemeSelector,
     TitleBar,
     Toast,
     Toolbar,
     TrafficLights,
     Workspace,
+    ZIndex,
 }
 
 impl ComponentStory {
     pub fn story(&self, cx: &mut WindowContext) -> AnyView {
         match self {
             Self::AssistantPanel => cx.build_view(|_| ui::AssistantPanelStory).into(),
-            Self::Buffer => cx.build_view(|_| ui::BufferStory).into(),
+            Self::Avatar => cx.build_view(|_| AvatarStory).into(),
             Self::Breadcrumb => cx.build_view(|_| ui::BreadcrumbStory).into(),
+            Self::Buffer => cx.build_view(|_| ui::BufferStory).into(),
+            Self::Button => cx.build_view(|_| ButtonStory).into(),
             Self::ChatPanel => cx.build_view(|_| ui::ChatPanelStory).into(),
+            Self::Checkbox => cx.build_view(|_| ui::CheckboxStory).into(),
             Self::CollabPanel => cx.build_view(|_| ui::CollabPanelStory).into(),
+            Self::Colors => cx.build_view(|_| ColorsStory).into(),
             Self::CommandPalette => cx.build_view(|_| ui::CommandPaletteStory).into(),
             Self::ContextMenu => cx.build_view(|_| ui::ContextMenuStory).into(),
+            Self::Copilot => cx.build_view(|_| ui::CopilotModalStory).into(),
+            Self::Details => cx.build_view(|_| DetailsStory).into(),
             Self::Facepile => cx.build_view(|_| ui::FacepileStory).into(),
+            Self::Focus => FocusStory::view(cx).into(),
+            Self::Icon => cx.build_view(|_| IconStory).into(),
+            Self::Input => cx.build_view(|_| InputStory).into(),
             Self::Keybinding => cx.build_view(|_| ui::KeybindingStory).into(),
+            Self::Label => cx.build_view(|_| LabelStory).into(),
             Self::LanguageSelector => cx.build_view(|_| ui::LanguageSelectorStory).into(),
             Self::MultiBuffer => cx.build_view(|_| ui::MultiBufferStory).into(),
             Self::NotificationsPanel => cx.build_view(|cx| ui::NotificationsPanelStory).into(),
@@ -93,23 +82,24 @@ impl ComponentStory {
             Self::Panel => cx.build_view(|cx| ui::PanelStory).into(),
             Self::ProjectPanel => cx.build_view(|_| ui::ProjectPanelStory).into(),
             Self::RecentProjects => cx.build_view(|_| ui::RecentProjectsStory).into(),
+            Self::Scroll => ScrollStory::view(cx).into(),
             Self::Tab => cx.build_view(|_| ui::TabStory).into(),
             Self::TabBar => cx.build_view(|_| ui::TabBarStory).into(),
             Self::Terminal => cx.build_view(|_| ui::TerminalStory).into(),
+            Self::Text => TextStory::view(cx).into(),
             Self::ThemeSelector => cx.build_view(|_| ui::ThemeSelectorStory).into(),
+            Self::TitleBar => ui::TitleBarStory::view(cx).into(),
             Self::Toast => cx.build_view(|_| ui::ToastStory).into(),
             Self::Toolbar => cx.build_view(|_| ui::ToolbarStory).into(),
             Self::TrafficLights => cx.build_view(|_| ui::TrafficLightsStory).into(),
-            Self::Copilot => cx.build_view(|_| ui::CopilotModalStory).into(),
-            Self::TitleBar => ui::TitleBarStory::view(cx).into(),
             Self::Workspace => ui::WorkspaceStory::view(cx).into(),
+            Self::ZIndex => cx.build_view(|_| ZIndexStory).into(),
         }
     }
 }
 
 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
 pub enum StorySelector {
-    Element(ElementStory),
     Component(ComponentStory),
     KitchenSink,
 }
@@ -126,13 +116,6 @@ impl FromStr for StorySelector {
             return Ok(Self::KitchenSink);
         }
 
-        if let Some((_, story)) = story.split_once("elements/") {
-            let element_story = ElementStory::from_str(story)
-                .with_context(|| format!("story not found for element '{story}'"))?;
-
-            return Ok(Self::Element(element_story));
-        }
-
         if let Some((_, story)) = story.split_once("components/") {
             let component_story = ComponentStory::from_str(story)
                 .with_context(|| format!("story not found for component '{story}'"))?;
@@ -147,7 +130,6 @@ impl FromStr for StorySelector {
 impl StorySelector {
     pub fn story(&self, cx: &mut WindowContext) -> AnyView {
         match self {
-            Self::Element(element_story) => element_story.story(cx),
             Self::Component(component_story) => component_story.story(cx),
             Self::KitchenSink => KitchenSinkStory::view(cx).into(),
         }
@@ -160,11 +142,9 @@ static ALL_STORY_SELECTORS: OnceLock<Vec<StorySelector>> = OnceLock::new();
 impl ValueEnum for StorySelector {
     fn value_variants<'a>() -> &'a [Self] {
         let stories = ALL_STORY_SELECTORS.get_or_init(|| {
-            let element_stories = ElementStory::iter().map(StorySelector::Element);
             let component_stories = ComponentStory::iter().map(StorySelector::Component);
 
-            element_stories
-                .chain(component_stories)
+            component_stories
                 .chain(std::iter::once(StorySelector::KitchenSink))
                 .collect::<Vec<_>>()
         });
@@ -174,7 +154,6 @@ impl ValueEnum for StorySelector {
 
     fn to_possible_value(&self) -> Option<clap::builder::PossibleValue> {
         let value = match self {
-            Self::Element(story) => format!("elements/{story}"),
             Self::Component(story) => format!("components/{story}"),
             Self::KitchenSink => "kitchen_sink".to_string(),
         };

crates/storybook2/src/storybook2.rs 🔗

@@ -8,7 +8,7 @@ mod story_selector;
 use std::sync::Arc;
 
 use clap::Parser;
-use gpui2::{
+use gpui::{
     div, px, size, AnyView, AppContext, Bounds, Div, Render, ViewContext, VisualContext,
     WindowBounds, WindowOptions,
 };
@@ -22,7 +22,7 @@ use ui::prelude::*;
 use crate::assets::Assets;
 use crate::story_selector::StorySelector;
 
-// gpui2::actions! {
+// gpui::actions! {
 //     storybook,
 //     [ToggleInspector]
 // }
@@ -51,7 +51,7 @@ fn main() {
     let theme_name = args.theme.unwrap_or("Zed Pro Moonlight".to_string());
 
     let asset_source = Arc::new(Assets);
-    gpui2::App::production(asset_source).run(move |cx| {
+    gpui::App::production(asset_source).run(move |cx| {
         load_embedded_fonts(cx).unwrap();
 
         let mut store = SettingsStore::default();
@@ -116,7 +116,7 @@ impl Render for StoryWrapper {
     }
 }
 
-fn load_embedded_fonts(cx: &AppContext) -> gpui2::Result<()> {
+fn load_embedded_fonts(cx: &AppContext) -> gpui::Result<()> {
     let font_paths = cx.asset_source().list("fonts")?;
     let mut embedded_fonts = Vec::new();
     for font_path in font_paths {

crates/terminal2/src/mappings/colors.rs 🔗

@@ -1,6 +1,6 @@
 // todo!()
 use alacritty_terminal::term::color::Rgb as AlacRgb;
-// use gpui2::color::Color;
+// use gpui::color::Color;
 // use theme2::TerminalStyle;
 
 ///Converts a 2, 8, or 24 bit color ANSI color to the GPUI equivalent

crates/theme2/src/colors.rs 🔗

@@ -1,4 +1,4 @@
-use gpui::{HighlightStyle, Hsla};
+use gpui::Hsla;
 use refineable::Refineable;
 
 use crate::SyntaxTheme;
@@ -64,24 +64,26 @@ pub struct GitStatusColors {
     pub renamed: Hsla,
 }
 
-#[derive(Refineable, Clone, Debug, Default)]
-#[refineable(debug)]
+#[derive(Refineable, Clone, Debug)]
+#[refineable(debug, deserialize)]
 pub struct ThemeColors {
     pub border: Hsla,
     pub border_variant: Hsla,
     pub border_focused: Hsla,
+    pub border_selected: Hsla,
     pub border_transparent: Hsla,
-    pub elevated_surface: Hsla,
-    pub surface: Hsla,
+    pub border_disabled: Hsla,
+    pub elevated_surface_background: Hsla,
+    pub surface_background: Hsla,
     pub background: Hsla,
-    pub element: Hsla,
+    pub element_background: Hsla,
     pub element_hover: Hsla,
     pub element_active: Hsla,
     pub element_selected: Hsla,
     pub element_disabled: Hsla,
     pub element_placeholder: Hsla,
     pub element_drop_target: Hsla,
-    pub ghost_element: Hsla,
+    pub ghost_element_background: Hsla,
     pub ghost_element_hover: Hsla,
     pub ghost_element_active: Hsla,
     pub ghost_element_selected: Hsla,
@@ -96,38 +98,57 @@ pub struct ThemeColors {
     pub icon_disabled: Hsla,
     pub icon_placeholder: Hsla,
     pub icon_accent: Hsla,
-    pub status_bar: Hsla,
-    pub title_bar: Hsla,
-    pub toolbar: Hsla,
-    pub tab_bar: Hsla,
-    pub tab_inactive: Hsla,
-    pub tab_active: Hsla,
-    pub editor: Hsla,
-    pub editor_gutter: Hsla,
-    pub editor_subheader: Hsla,
-    pub editor_active_line: Hsla,
-    pub editor_highlighted_line: Hsla,
+    pub status_bar_background: Hsla,
+    pub title_bar_background: Hsla,
+    pub toolbar_background: Hsla,
+    pub tab_bar_background: Hsla,
+    pub tab_inactive_background: Hsla,
+    pub tab_active_background: Hsla,
+    pub editor_background: Hsla,
+    pub editor_gutter_background: Hsla,
+    pub editor_subheader_background: Hsla,
+    pub editor_active_line_background: Hsla,
+    pub editor_highlighted_line_background: Hsla,
     pub editor_line_number: Hsla,
     pub editor_active_line_number: Hsla,
     pub editor_invisible: Hsla,
     pub editor_wrap_guide: Hsla,
     pub editor_active_wrap_guide: Hsla,
+    pub terminal_background: Hsla,
+    pub terminal_ansi_bright_black: Hsla,
+    pub terminal_ansi_bright_red: Hsla,
+    pub terminal_ansi_bright_green: Hsla,
+    pub terminal_ansi_bright_yellow: Hsla,
+    pub terminal_ansi_bright_blue: Hsla,
+    pub terminal_ansi_bright_magenta: Hsla,
+    pub terminal_ansi_bright_cyan: Hsla,
+    pub terminal_ansi_bright_white: Hsla,
+    pub terminal_ansi_black: Hsla,
+    pub terminal_ansi_red: Hsla,
+    pub terminal_ansi_green: Hsla,
+    pub terminal_ansi_yellow: Hsla,
+    pub terminal_ansi_blue: Hsla,
+    pub terminal_ansi_magenta: Hsla,
+    pub terminal_ansi_cyan: Hsla,
+    pub terminal_ansi_white: Hsla,
 }
 
 #[derive(Refineable, Clone)]
 pub struct ThemeStyles {
     pub system: SystemColors,
+
+    #[refineable]
     pub colors: ThemeColors,
     pub status: StatusColors,
     pub git: GitStatusColors,
     pub player: PlayerColors,
     pub syntax: SyntaxTheme,
-    pub inlay_highlight_style: HighlightStyle,
-    pub suggestion_highlight_style: HighlightStyle,
 }
 
 #[cfg(test)]
 mod tests {
+    use serde_json::json;
+
     use super::*;
 
     #[test]
@@ -169,4 +190,16 @@ mod tests {
         assert_eq!(colors.text, magenta);
         assert_eq!(colors.background, green);
     }
+
+    #[test]
+    fn deserialize_theme_colors_refinement_from_json() {
+        let colors: ThemeColorsRefinement = serde_json::from_value(json!({
+            "background": "#ff00ff",
+            "text": "#ff0000"
+        }))
+        .unwrap();
+
+        assert_eq!(colors.background, Some(gpui::rgb(0xff00ff)));
+        assert_eq!(colors.text, Some(gpui::rgb(0xff0000)));
+    }
 }

crates/theme2/src/default_colors.rs 🔗

@@ -205,18 +205,20 @@ impl ThemeColors {
             border: neutral().light().step_6(),
             border_variant: neutral().light().step_5(),
             border_focused: blue().light().step_5(),
+            border_disabled: neutral().light().step_3(),
+            border_selected: blue().light().step_5(),
             border_transparent: system.transparent,
-            elevated_surface: neutral().light().step_2(),
-            surface: neutral().light().step_2(),
+            elevated_surface_background: neutral().light().step_2(),
+            surface_background: neutral().light().step_2(),
             background: neutral().light().step_1(),
-            element: neutral().light().step_3(),
+            element_background: neutral().light().step_3(),
             element_hover: neutral().light().step_4(),
             element_active: neutral().light().step_5(),
             element_selected: neutral().light().step_5(),
             element_disabled: neutral().light_alpha().step_3(),
             element_placeholder: neutral().light().step_11(),
             element_drop_target: blue().light_alpha().step_2(),
-            ghost_element: system.transparent,
+            ghost_element_background: system.transparent,
             ghost_element_hover: neutral().light().step_4(),
             ghost_element_active: neutral().light().step_5(),
             ghost_element_selected: neutral().light().step_5(),
@@ -231,22 +233,39 @@ impl ThemeColors {
             icon_disabled: neutral().light().step_9(),
             icon_placeholder: neutral().light().step_10(),
             icon_accent: blue().light().step_11(),
-            status_bar: neutral().light().step_2(),
-            title_bar: neutral().light().step_2(),
-            toolbar: neutral().light().step_1(),
-            tab_bar: neutral().light().step_2(),
-            tab_active: neutral().light().step_1(),
-            tab_inactive: neutral().light().step_2(),
-            editor: neutral().light().step_1(),
-            editor_gutter: neutral().light().step_1(), // todo!("pick the right colors")
-            editor_subheader: neutral().light().step_2(),
-            editor_active_line: neutral().light_alpha().step_3(),
+            status_bar_background: neutral().light().step_2(),
+            title_bar_background: neutral().light().step_2(),
+            toolbar_background: neutral().light().step_1(),
+            tab_bar_background: neutral().light().step_2(),
+            tab_active_background: neutral().light().step_1(),
+            tab_inactive_background: neutral().light().step_2(),
+            editor_background: neutral().light().step_1(),
+            editor_gutter_background: neutral().light().step_1(), // todo!("pick the right colors")
+            editor_subheader_background: neutral().light().step_2(),
+            editor_active_line_background: neutral().light_alpha().step_3(),
             editor_line_number: neutral().light_alpha().step_3(), // todo!("pick the right colors")
             editor_active_line_number: neutral().light_alpha().step_3(), // todo!("pick the right colors")
-            editor_highlighted_line: neutral().light_alpha().step_4(), // todo!("pick the right colors")
+            editor_highlighted_line_background: neutral().light_alpha().step_4(), // todo!("pick the right colors")
             editor_invisible: neutral().light_alpha().step_4(), // todo!("pick the right colors")
             editor_wrap_guide: neutral().light_alpha().step_4(), // todo!("pick the right colors")
             editor_active_wrap_guide: neutral().light_alpha().step_4(), // todo!("pick the right colors")
+            terminal_background: neutral().light().step_1(),
+            terminal_ansi_black: black().light().step_12(),
+            terminal_ansi_red: red().light().step_11(),
+            terminal_ansi_green: green().light().step_11(),
+            terminal_ansi_yellow: yellow().light().step_11(),
+            terminal_ansi_blue: blue().light().step_11(),
+            terminal_ansi_magenta: violet().light().step_11(),
+            terminal_ansi_cyan: cyan().light().step_11(),
+            terminal_ansi_white: neutral().light().step_12(),
+            terminal_ansi_bright_black: black().light().step_11(),
+            terminal_ansi_bright_red: red().light().step_10(),
+            terminal_ansi_bright_green: green().light().step_10(),
+            terminal_ansi_bright_yellow: yellow().light().step_10(),
+            terminal_ansi_bright_blue: blue().light().step_10(),
+            terminal_ansi_bright_magenta: violet().light().step_10(),
+            terminal_ansi_bright_cyan: cyan().light().step_10(),
+            terminal_ansi_bright_white: neutral().light().step_11(),
         }
     }
 
@@ -257,18 +276,20 @@ impl ThemeColors {
             border: neutral().dark().step_6(),
             border_variant: neutral().dark().step_5(),
             border_focused: blue().dark().step_5(),
+            border_disabled: neutral().dark().step_3(),
+            border_selected: blue().dark().step_5(),
             border_transparent: system.transparent,
-            elevated_surface: neutral().dark().step_2(),
-            surface: neutral().dark().step_2(),
+            elevated_surface_background: neutral().dark().step_2(),
+            surface_background: neutral().dark().step_2(),
             background: neutral().dark().step_1(),
-            element: neutral().dark().step_3(),
+            element_background: neutral().dark().step_3(),
             element_hover: neutral().dark().step_4(),
             element_active: neutral().dark().step_5(),
             element_selected: neutral().dark().step_5(),
             element_disabled: neutral().dark_alpha().step_3(),
             element_placeholder: neutral().dark().step_11(),
             element_drop_target: blue().dark_alpha().step_2(),
-            ghost_element: system.transparent,
+            ghost_element_background: system.transparent,
             ghost_element_hover: neutral().dark().step_4(),
             ghost_element_active: neutral().dark().step_5(),
             ghost_element_selected: neutral().dark().step_5(),
@@ -283,22 +304,39 @@ impl ThemeColors {
             icon_disabled: neutral().dark().step_9(),
             icon_placeholder: neutral().dark().step_10(),
             icon_accent: blue().dark().step_11(),
-            status_bar: neutral().dark().step_2(),
-            title_bar: neutral().dark().step_2(),
-            toolbar: neutral().dark().step_1(),
-            tab_bar: neutral().dark().step_2(),
-            tab_active: neutral().dark().step_1(),
-            tab_inactive: neutral().dark().step_2(),
-            editor: neutral().dark().step_1(),
-            editor_gutter: neutral().dark().step_1(), // todo!("pick the right colors")
-            editor_subheader: neutral().dark().step_2(),
-            editor_active_line: neutral().dark_alpha().step_3(),
+            status_bar_background: neutral().dark().step_2(),
+            title_bar_background: neutral().dark().step_2(),
+            toolbar_background: neutral().dark().step_1(),
+            tab_bar_background: neutral().dark().step_2(),
+            tab_active_background: neutral().dark().step_1(),
+            tab_inactive_background: neutral().dark().step_2(),
+            editor_background: neutral().dark().step_1(),
+            editor_gutter_background: neutral().dark().step_1(), // todo!("pick the right colors")
+            editor_subheader_background: neutral().dark().step_2(),
+            editor_active_line_background: neutral().dark_alpha().step_3(),
             editor_line_number: neutral().dark_alpha().step_3(), // todo!("pick the right colors")
             editor_active_line_number: neutral().dark_alpha().step_3(), // todo!("pick the right colors")
-            editor_highlighted_line: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
+            editor_highlighted_line_background: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
             editor_invisible: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
             editor_wrap_guide: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
             editor_active_wrap_guide: neutral().dark_alpha().step_4(), // todo!("pick the right colors")
+            terminal_background: neutral().dark().step_1(),
+            terminal_ansi_black: black().dark().step_12(),
+            terminal_ansi_red: red().dark().step_11(),
+            terminal_ansi_green: green().dark().step_11(),
+            terminal_ansi_yellow: yellow().dark().step_11(),
+            terminal_ansi_blue: blue().dark().step_11(),
+            terminal_ansi_magenta: violet().dark().step_11(),
+            terminal_ansi_cyan: cyan().dark().step_11(),
+            terminal_ansi_white: neutral().dark().step_12(),
+            terminal_ansi_bright_black: black().dark().step_11(),
+            terminal_ansi_bright_red: red().dark().step_10(),
+            terminal_ansi_bright_green: green().dark().step_10(),
+            terminal_ansi_bright_yellow: yellow().dark().step_10(),
+            terminal_ansi_bright_blue: blue().dark().step_10(),
+            terminal_ansi_bright_magenta: violet().dark().step_10(),
+            terminal_ansi_bright_cyan: cyan().dark().step_10(),
+            terminal_ansi_bright_white: neutral().dark().step_11(),
         }
     }
 }

crates/theme2/src/default_theme.rs 🔗

@@ -15,8 +15,6 @@ fn zed_pro_daylight() -> ThemeVariant {
             git: GitStatusColors::default(),
             player: PlayerColors::default(),
             syntax: SyntaxTheme::default_light(),
-            inlay_highlight_style: Default::default(),
-            suggestion_highlight_style: Default::default(),
         },
     }
 }
@@ -33,8 +31,6 @@ pub(crate) fn zed_pro_moonlight() -> ThemeVariant {
             git: GitStatusColors::default(),
             player: PlayerColors::default(),
             syntax: SyntaxTheme::default_dark(),
-            inlay_highlight_style: Default::default(),
-            suggestion_highlight_style: Default::default(),
         },
     }
 }

crates/theme2/src/registry.rs 🔗

@@ -1,4 +1,4 @@
-use crate::{zed_pro_family, ThemeFamily, ThemeVariant};
+use crate::{all_imported_themes, zed_pro_family, ThemeFamily, ThemeVariant};
 use anyhow::{anyhow, Result};
 use gpui::SharedString;
 use std::{collections::HashMap, sync::Arc};
@@ -42,7 +42,10 @@ impl Default for ThemeRegistry {
             themes: HashMap::default(),
         };
 
-        this.insert_theme_families([zed_pro_family()]);
+        let mut all_themes = vec![zed_pro_family()];
+        all_themes.extend(all_imported_themes());
+
+        this.insert_theme_families(all_themes);
 
         this
     }

crates/theme2/src/theme2.rs 🔗

@@ -5,6 +5,7 @@ mod registry;
 mod scale;
 mod settings;
 mod syntax;
+mod themes;
 
 use std::sync::Arc;
 
@@ -16,10 +17,11 @@ pub use registry::*;
 pub use scale::*;
 pub use settings::*;
 pub use syntax::*;
+pub use themes::*;
 
 use gpui::{AppContext, Hsla, SharedString};
 
-#[derive(Debug, Clone, PartialEq)]
+#[derive(Debug, PartialEq, Clone, Copy)]
 pub enum Appearance {
     Light,
     Dark,
@@ -41,8 +43,7 @@ impl ActiveTheme for AppContext {
 }
 
 pub struct ThemeFamily {
-    #[allow(dead_code)]
-    pub(crate) id: String,
+    pub id: String,
     pub name: SharedString,
     pub author: SharedString,
     pub themes: Vec<ThemeVariant>,
@@ -52,8 +53,7 @@ pub struct ThemeFamily {
 impl ThemeFamily {}
 
 pub struct ThemeVariant {
-    #[allow(dead_code)]
-    pub(crate) id: String,
+    pub id: String,
     pub name: SharedString,
     pub appearance: Appearance,
     pub styles: ThemeStyles,

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

@@ -0,0 +1,333 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn andromeda() -> ThemeFamily {
+    ThemeFamily {
+        id: "192bb9a2-a028-4c9a-b713-4c92330b3fab".into(),
+        name: "Andromeda".into(),
+        author: "Eliver Lara (EliverLara)".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "a3aaa73f-f225-41bd-8d52-77ca1df0b7f7".into(),
+                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_disabled: rgba(0x1b1d23ff).into(),
+                        border_selected: rgba(0x1b1d23ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "91a17b19-1e74-487e-b0a0-56e2e5360ab8".into(),
+                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_disabled: rgba(0x1b1d23ff).into(),
+                        border_selected: rgba(0x1b1d23ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,491 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn ayu() -> ThemeFamily {
+    ThemeFamily {
+        id: "5ace5bd5-0231-4f26-a69f-40a96dd4163e".into(),
+        name: "Ayu".into(),
+        author: "dempfi (Ike Ku)".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "7781d65c-4575-421d-af3c-061ab0b0478a".into(),
+                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_disabled: rgba(0x6b7d8f1f).into(),
+                        border_selected: rgba(0x6b7d8f1f).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "68066666-5e56-4937-9434-510ffd0fe05f".into(),
+                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_disabled: rgba(0x171a24ff).into(),
+                        border_selected: rgba(0x171a24ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "d4f949b8-e5b9-4337-a52e-2ed1752a6c4f".into(),
+                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_disabled: rgba(0x1e232bff).into(),
+                        border_selected: rgba(0x1e232bff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,173 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn dracula() -> ThemeFamily {
+    ThemeFamily {
+        id: "20b9a8c0-0b74-483b-bed2-be7a053e1321".into(),
+        name: "Dracula".into(),
+        author: "Zeno Rocha".into(),
+        themes: vec![ThemeVariant {
+            id: "02f5624f-9b0a-48e0-8897-4557adc8f104".into(),
+            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_disabled: rgba(0xbd93f9ff).into(),
+                    border_selected: rgba(0xbd93f9ff).into(),
+                    border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                    editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).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()),
+                    ],
+                },
+            },
+        }],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,965 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn gruvbox() -> ThemeFamily {
+    ThemeFamily {
+        id: "c0b7f0e7-f261-4a33-a2bf-baf2e140aac4".into(),
+        name: "Gruvbox".into(),
+        author: "morhetz".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "fb9f8f64-372b-4fda-8dbd-d610c97a9691".into(),
+                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_disabled: rgba(0x3c3836ff).into(),
+                        border_selected: rgba(0x3c3836ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "72f0ea45-33bc-49d8-9f52-87540f858fb4".into(),
+                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_disabled: rgba(0x3c3836ff).into(),
+                        border_selected: rgba(0x3c3836ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "5ea1cdf8-6ed0-4e54-b44a-14c6634701cf".into(),
+                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_disabled: rgba(0x3c3836ff).into(),
+                        border_selected: rgba(0x3c3836ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "b0c9082f-00c8-4a02-a4de-9fd7af97c7f2".into(),
+                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_disabled: rgba(0xebdbb2ff).into(),
+                        border_selected: rgba(0xebdbb2ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "172c281c-ff0a-496e-8794-880e2fc3aa49".into(),
+                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_disabled: rgba(0xebdbb2ff).into(),
+                        border_selected: rgba(0xebdbb2ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "b94f3305-b755-44f2-948c-cfd8c9d3158f".into(),
+                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_disabled: rgba(0xebdbb2ff).into(),
+                        border_selected: rgba(0xebdbb2ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,41 @@
+// mod andromeda;
+// mod ayu;
+// mod dracula;
+// mod gruvbox;
+// mod night_owl;
+// mod nord;
+// mod notctis;
+// mod palenight;
+// mod rose_pine;
+// mod solarized;
+// mod synthwave_84;
+
+// pub use andromeda::*;
+// pub use ayu::*;
+// pub use dracula::*;
+// pub use gruvbox::*;
+// pub use night_owl::*;
+// pub use nord::*;
+// pub use notctis::*;
+// pub use palenight::*;
+// pub use rose_pine::*;
+// pub use solarized::*;
+// pub use synthwave_84::*;
+
+use crate::ThemeFamily;
+
+pub fn all_imported_themes() -> Vec<ThemeFamily> {
+    vec![
+        // rose_pine(),
+        // night_owl(),
+        // andromeda(),
+        // synthwave_84(),
+        // palenight(),
+        // dracula(),
+        // solarized(),
+        // nord(),
+        // notctis(),
+        // ayu(),
+        // gruvbox(),
+    ]
+}

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

@@ -0,0 +1,333 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn night_owl() -> ThemeFamily {
+    ThemeFamily {
+        id: "b6469599-df68-4604-be9d-44f63d877d53".into(),
+        name: "Night Owl".into(),
+        author: "Sarah Drasner (sdras)".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "2a04e5fa-e266-475b-b965-3d92efe77ad9".into(),
+                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_disabled: rgba(0x5f7e97ff).into(),
+                        border_selected: rgba(0x5f7e97ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "91901d29-1c1f-49ef-ac69-c25639425f7c".into(),
+                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_disabled: rgba(0xd9d9d9ff).into(),
+                        border_selected: rgba(0xd9d9d9ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,173 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn nord() -> ThemeFamily {
+    ThemeFamily {
+        id: "dcd03133-f540-47e7-9360-91bb1c94d16e".into(),
+        name: "Nord".into(),
+        author: "Sven Greb (svengreb)".into(),
+        themes: vec![ThemeVariant {
+            id: "ed7e8c08-321a-41f0-bd22-ca92c0b42e0e".into(),
+            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_disabled: rgba(0x3b4252ff).into(),
+                    border_selected: rgba(0x3b4252ff).into(),
+                    border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                    editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).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()),
+                    ],
+                },
+            },
+        }],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,1755 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn notctis() -> ThemeFamily {
+    ThemeFamily {
+        id: "077650e4-c11f-4cb5-96ec-73bc74923e95".into(),
+        name: "Notctis".into(),
+        author: "Liviu Schera (liviuschera)".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "47135df9-e9b5-480c-a71b-c85052b8ff93".into(),
+                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_disabled: rgba(0x1579b6ff).into(),
+                        border_selected: rgba(0x1579b6ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "5a3842b1-2273-47ce-ab82-4179842362b1".into(),
+                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_disabled: rgba(0x997582ff).into(),
+                        border_selected: rgba(0x997582ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "a83c02b3-23f3-496b-8644-57df3314601e".into(),
+                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_disabled: rgba(0x00c6e0ff).into(),
+                        border_selected: rgba(0x00c6e0ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "bda85aea-2260-455a-959a-c03b0a62b8f4".into(),
+                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_disabled: rgba(0xaea4f4ff).into(),
+                        border_selected: rgba(0xaea4f4ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "7720f487-6b09-4bb6-9add-272b030c013f".into(),
+                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_disabled: rgba(0x00c6e0ff).into(),
+                        border_selected: rgba(0x00c6e0ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "51dfe842-b4e2-4d95-a306-8e579a3bb51c".into(),
+                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_disabled: rgba(0x496c83ff).into(),
+                        border_selected: rgba(0x496c83ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "75a67a53-afbe-4073-a7c0-85a40b56c2cc".into(),
+                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_disabled: rgba(0x0d6571ff).into(),
+                        border_selected: rgba(0x0d6571ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "0202afff-5703-473b-b6b6-e86ac3a70718".into(),
+                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_disabled: rgba(0x0d6571ff).into(),
+                        border_selected: rgba(0x0d6571ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "213fd750-27ad-4762-8891-08282ed316c7".into(),
+                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_disabled: rgba(0x0d6571ff).into(),
+                        border_selected: rgba(0x0d6571ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "0cc2c841-1c01-40a7-8396-1234dd077ede".into(),
+                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_disabled: rgba(0x6d66a7ff).into(),
+                        border_selected: rgba(0x6d66a7ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "090a97c7-ad25-4a35-96e6-2fce5e471e6b".into(),
+                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_disabled: rgba(0x8666a7ff).into(),
+                        border_selected: rgba(0x8666a7ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,491 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn palenight() -> ThemeFamily {
+    ThemeFamily {
+        id: "3187cd2f-29da-4bde-9621-83016df3b393".into(),
+        name: "Palenight".into(),
+        author: "Olaolu Olawuyi (whizkydee)".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "0eaa3098-3aa2-4b8e-b1df-92d9ebd9a0b8".into(),
+                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_disabled: rgba(0x282b3bff).into(),
+                        border_selected: rgba(0x282b3bff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "b6a27c72-c5b1-431b-8bfe-29e33dbcb337".into(),
+                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_disabled: rgba(0x282b3bff).into(),
+                        border_selected: rgba(0x282b3bff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "4015bf85-061c-45ff-81ba-a31f017aac83".into(),
+                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_disabled: rgba(0x2c2f40ff).into(),
+                        border_selected: rgba(0x2c2f40ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,491 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn rose_pine() -> ThemeFamily {
+    ThemeFamily {
+        id: "48c308b9-7dbe-4a52-b935-0b44d9dac00d".into(),
+        name: "Rose Pine".into(),
+        author: "Rosé Pine".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "c2832e85-20cb-4a13-924f-026e68123068".into(),
+                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_disabled: rgba(0x000000ff).into(),
+                        border_selected: rgba(0x000000ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "3f6c3263-86f4-4a0e-92a6-144984aa2d38".into(),
+                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_disabled: rgba(0x000000ff).into(),
+                        border_selected: rgba(0x000000ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "d171cda6-de3b-4528-8559-cd8fb71b2e7c".into(),
+                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_disabled: rgba(0x000000ff).into(),
+                        border_selected: rgba(0x000000ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,333 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn solarized() -> ThemeFamily {
+    ThemeFamily {
+        id: "9a6f18c9-520f-46ec-9bfb-a7ee73508139".into(),
+        name: "Solarized".into(),
+        author: "Ethan Schoonover (altercation)".into(),
+        themes: vec![
+            ThemeVariant {
+                id: "74003db2-7f9a-4d26-8815-020c796bb551".into(),
+                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_disabled: rgba(0x003847ff).into(),
+                        border_selected: rgba(0x003847ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0x18191bff).into(),
+                        editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+            ThemeVariant {
+                id: "43be149b-2604-4eb2-a9ce-c8f902ab3bb3".into(),
+                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_disabled: rgba(0xddd6c1ff).into(),
+                        border_selected: rgba(0xddd6c1ff).into(),
+                        border_transparent: 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_subheader_background: rgba(0xf9f9fbff).into(),
+                        editor_active_line: rgba(0x0000320f).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(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).into(),
+                        },
+                        PlayerColor {
+                            cursor: rgba(0x00000000).into(),
+                            background: rgba(0x00000000).into(),
+                            selection: rgba(0x00000000).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()),
+                        ],
+                    },
+                },
+            },
+        ],
+        scales: default_color_scales(),
+    }
+}

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

@@ -0,0 +1,173 @@
+use gpui::rgba;
+
+use crate::{
+    default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+    SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+pub fn synthwave_84() -> ThemeFamily {
+    ThemeFamily {
+        id: "5e0f0cd5-5522-45cf-a652-caeb140eb3de".into(),
+        name: "Synthwave 84".into(),
+        author: "Robb Owen (robb0wen)".into(),
+        themes: vec![ThemeVariant {
+            id: "83110d9e-dbf0-4f36-9a4c-6b396ce9a5a4".into(),
+            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_disabled: rgba(0x212225ff).into(),
+                    border_selected: rgba(0x004073ff).into(),
+                    border_transparent: rgba(0x00000000).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_subheader_background: rgba(0x18191bff).into(),
+                    editor_active_line: rgba(0xddeaf814).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(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).into(),
+                    },
+                    PlayerColor {
+                        cursor: rgba(0x00000000).into(),
+                        background: rgba(0x00000000).into(),
+                        selection: rgba(0x00000000).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()),
+                    ],
+                },
+            },
+        }],
+        scales: default_color_scales(),
+    }
+}

crates/theme_importer/Cargo.toml 🔗

@@ -0,0 +1,18 @@
+[package]
+name = "theme_importer"
+version = "0.1.0"
+edition = "2021"
+publish = false
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+anyhow.workspace = true
+convert_case = "0.6.0"
+gpui = { package = "gpui2", path = "../gpui2" }
+log.workspace = true
+rust-embed.workspace = true
+serde.workspace = true
+simplelog = "0.9"
+theme = { package = "theme2", path = "../theme2" }
+uuid.workspace = true

crates/theme_importer/README.md 🔗

@@ -0,0 +1,124 @@
+# Zed Theme Importer
+
+---
+
+## Usage
+
+- `cargo run -p theme_importer` - Import the context of `assets/themes/src`
+
+---
+
+## Troubleshooting
+
+As the importer generates rust files, you may need to manually do some cleanup in `registry.rs` and `themes/mod.rs` if you remove themes or delete the `themes` folder in the theme crate.
+
+---
+
+## Required Structure
+
+To import a theme or series of themes 3 things are required:
+
+- `family.json`: A JSON file containing the theme family metadata and list of theme variants
+- `{theme_name}.json`: One theme json for each theme variant
+- `LICENSE`: A license file for the theme family
+
+### `family.json`
+
+#### `name`
+
+The name of the theme family. Avoid special characters.
+
+This will be used for the theme family directory name (lowercased) and the theme family name in the Zed UI.
+
+Good:
+
+- `Rose Pine`
+- `Synthwave 84`
+- `Monokai Solarized`
+
+Bad:
+
+- `Rosé Pine`
+- `Synthwave '84`
+- `Monokai (Solarized)`
+
+#### `author`
+
+The author of the theme family. This can be a name or a username.
+
+This will be used for the theme family author in the Zed UI.
+
+#### `themes`
+
+A list of theme variants.
+
+`appearance` can be either `light` or `dark`. This will impact which default fallback colors are used, and where the theme shows up in the Zed UI.
+
+### `{theme_name}.json`
+
+Each theme added to the family must have a corresponding JSON file. This JSON file can be obtained from the VSCode extensions folder (once you have installed it.) This is usually located at `~/.vscode/extensions` (on macOS).
+
+You can use `open ~/.vscode/extensions` to open the folder in Finder directly.
+
+Copy that json file into the theme family directory and tidy up the filenames as needed.
+
+### `LICENSE`
+
+A LICENSE file is required to import a theme family. Failing to provide a complete text license will cause it to be skipped when the import is run.
+
+If the theme only provices a license code (e.g. MIT, Apache 2.0, etc.) then put that code into the LICENSE file.
+
+If no license is provided, either contact the theme creator or don't add the theme.
+
+---
+
+### Complete Example:
+
+An example family with multiple variants:
+
+```json
+{
+  "name": "Ayu",
+  // When both name and username are available
+  // prefer the `username (name)` format
+  "author": "dempfi (Ike Ku)",
+  "themes": [
+    {
+      "name": "Ayu Light",
+      "file_name": "ayu-light.json",
+      "appearance": "light"
+    },
+    {
+      "name": "Ayu Mirage",
+      "file_name": "ayu-mirage.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Ayu Dark",
+      "file_name": "ayu-dark.json",
+      "appearance": "dark"
+    }
+  ]
+}
+```
+
+An example single variant family:
+
+```json
+{
+  "name": "Andromeda",
+  "author": "Eliver Lara (EliverLara)",
+  "themes": [
+    {
+      "name": "Andromeda",
+      "file_name": "andromeda.json",
+      "appearance": "dark"
+    },
+    {
+      "name": "Andromeda Bordered",
+      "file_name": "andromeda-bordered.json",
+      "appearance": "dark"
+    }
+  ]
+}
+```

crates/theme_importer/src/main.rs 🔗

@@ -0,0 +1,215 @@
+mod theme_printer;
+mod util;
+mod vscode;
+
+use std::fs::{self, File};
+use std::io::Write;
+use std::path::PathBuf;
+use std::str::FromStr;
+
+use anyhow::{anyhow, Context, Result};
+use convert_case::{Case, Casing};
+use gpui::serde_json;
+use log::LevelFilter;
+use serde::Deserialize;
+use simplelog::SimpleLogger;
+use theme::{default_color_scales, Appearance, ThemeFamily};
+use vscode::VsCodeThemeConverter;
+
+use crate::theme_printer::ThemeFamilyPrinter;
+use crate::vscode::VsCodeTheme;
+
+#[derive(Debug, Deserialize)]
+struct FamilyMetadata {
+    pub name: String,
+    pub author: String,
+    pub themes: Vec<ThemeMetadata>,
+}
+
+#[derive(Debug, Deserialize)]
+#[serde(rename_all = "snake_case")]
+pub enum ThemeAppearanceJson {
+    Light,
+    Dark,
+}
+
+impl From<ThemeAppearanceJson> for Appearance {
+    fn from(value: ThemeAppearanceJson) -> Self {
+        match value {
+            ThemeAppearanceJson::Light => Self::Light,
+            ThemeAppearanceJson::Dark => Self::Dark,
+        }
+    }
+}
+
+#[derive(Debug, Deserialize)]
+pub struct ThemeMetadata {
+    pub name: String,
+    pub file_name: String,
+    pub appearance: ThemeAppearanceJson,
+}
+
+fn main() -> Result<()> {
+    const SOURCE_PATH: &str = "assets/themes/src/vscode";
+    const OUT_PATH: &str = "crates/theme2/src/themes";
+
+    SimpleLogger::init(LevelFilter::Info, Default::default()).expect("could not initialize logger");
+
+    println!("Loading themes source...");
+    let vscode_themes_path = PathBuf::from_str(SOURCE_PATH)?;
+    if !vscode_themes_path.exists() {
+        return Err(anyhow!(format!(
+            "Couldn't find {}, make sure it exists",
+            SOURCE_PATH
+        )));
+    }
+
+    let mut theme_families = Vec::new();
+
+    for theme_family_dir in fs::read_dir(&vscode_themes_path)? {
+        let theme_family_dir = theme_family_dir?;
+
+        if !theme_family_dir.file_type()?.is_dir() {
+            continue;
+        }
+
+        let theme_family_slug = theme_family_dir
+            .path()
+            .file_stem()
+            .ok_or(anyhow!("no file stem"))
+            .map(|stem| stem.to_string_lossy().to_string())?;
+
+        let family_metadata_file = File::open(theme_family_dir.path().join("family.json"))
+            .context(format!(
+                "no `family.json` found for '{}'",
+                theme_family_slug
+            ))?;
+
+        let license_file_path = theme_family_dir.path().join("LICENSE");
+
+        if !license_file_path.exists() {
+            println!("Skipping theme family '{}' because it does not have a LICENSE file. This theme will only be imported once a LICENSE file is provided.", theme_family_slug);
+            continue;
+        }
+
+        let family_metadata: FamilyMetadata = serde_json::from_reader(family_metadata_file)
+            .context(format!(
+                "failed to parse `family.json` for '{theme_family_slug}'"
+            ))?;
+
+        let mut themes = Vec::new();
+
+        for theme_metadata in family_metadata.themes {
+            let theme_file_path = theme_family_dir.path().join(&theme_metadata.file_name);
+
+            let theme_file = match File::open(&theme_file_path) {
+                Ok(file) => file,
+                Err(_) => {
+                    println!("Failed to open file at path: {:?}", theme_file_path);
+                    continue;
+                }
+            };
+
+            let vscode_theme: VsCodeTheme = serde_json::from_reader(theme_file)
+                .context(format!("failed to parse theme {theme_file_path:?}"))?;
+
+            let converter = VsCodeThemeConverter::new(vscode_theme, theme_metadata);
+
+            let theme = converter.convert()?;
+
+            themes.push(theme);
+        }
+
+        let theme_family = ThemeFamily {
+            id: uuid::Uuid::new_v4().to_string(),
+            name: family_metadata.name.into(),
+            author: family_metadata.author.into(),
+            themes,
+            scales: default_color_scales(),
+        };
+
+        theme_families.push(theme_family);
+    }
+
+    let themes_output_path = PathBuf::from_str(OUT_PATH)?;
+
+    if !themes_output_path.exists() {
+        println!("Creating directory: {:?}", themes_output_path);
+        fs::create_dir_all(&themes_output_path)?;
+    }
+
+    let mut mod_rs_file = File::create(themes_output_path.join(format!("mod.rs")))?;
+
+    let mut theme_modules = Vec::new();
+
+    for theme_family in theme_families {
+        let theme_family_slug = theme_family.name.to_string().to_case(Case::Snake);
+
+        let mut output_file =
+            File::create(themes_output_path.join(format!("{theme_family_slug}.rs")))?;
+        println!(
+            "Creating file: {:?}",
+            themes_output_path.join(format!("{theme_family_slug}.rs"))
+        );
+
+        let theme_module = format!(
+            r#"
+            use gpui::rgba;
+
+            use crate::{{
+                default_color_scales, Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors,
+                SyntaxTheme, SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+            }};
+
+            pub fn {theme_family_slug}() -> ThemeFamily {{
+                {theme_family_definition}
+            }}
+            "#,
+            theme_family_definition = format!("{:#?}", ThemeFamilyPrinter::new(theme_family))
+        );
+
+        output_file.write_all(theme_module.as_bytes())?;
+
+        theme_modules.push(theme_family_slug);
+    }
+
+    let themes_vector_contents = format!(
+        r#"
+        use crate::ThemeFamily;
+
+        pub(crate) fn all_imported_themes() -> Vec<ThemeFamily> {{
+            vec![{all_themes}]
+        }}
+        "#,
+        all_themes = theme_modules
+            .iter()
+            .map(|module| format!("{}()", module))
+            .collect::<Vec<_>>()
+            .join(", ")
+    );
+
+    let mod_rs_contents = format!(
+        r#"
+        {mod_statements}
+
+        {use_statements}
+
+        {themes_vector_contents}
+        "#,
+        mod_statements = theme_modules
+            .iter()
+            .map(|module| format!("mod {module};"))
+            .collect::<Vec<_>>()
+            .join("\n"),
+        use_statements = theme_modules
+            .iter()
+            .map(|module| format!("pub use {module}::*;"))
+            .collect::<Vec<_>>()
+            .join("\n"),
+        themes_vector_contents = themes_vector_contents
+    );
+
+    mod_rs_file.write_all(mod_rs_contents.as_bytes())?;
+
+    Ok(())
+}

crates/theme_importer/src/theme_printer.rs 🔗

@@ -0,0 +1,384 @@
+use std::fmt::{self, Debug};
+
+use gpui::{Hsla, Rgba};
+use theme::{
+    Appearance, GitStatusColors, PlayerColor, PlayerColors, StatusColors, SyntaxTheme,
+    SystemColors, ThemeColors, ThemeFamily, ThemeStyles, ThemeVariant,
+};
+
+struct RawSyntaxPrinter<'a>(&'a str);
+
+impl<'a> Debug for RawSyntaxPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "{}", self.0)
+    }
+}
+
+struct HslaPrinter(Hsla);
+
+impl Debug for HslaPrinter {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "{:?}", IntoPrinter(&Rgba::from(self.0)))
+    }
+}
+
+struct IntoPrinter<'a, D: Debug>(&'a D);
+
+impl<'a, D: Debug> Debug for IntoPrinter<'a, D> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "{:?}.into()", self.0)
+    }
+}
+
+pub struct VecPrinter<'a, T>(&'a Vec<T>);
+
+impl<'a, T: Debug> Debug for VecPrinter<'a, T> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "vec!{:?}", &self.0)
+    }
+}
+
+pub struct ThemeFamilyPrinter(ThemeFamily);
+
+impl ThemeFamilyPrinter {
+    pub fn new(theme_family: ThemeFamily) -> Self {
+        Self(theme_family)
+    }
+}
+
+impl Debug for ThemeFamilyPrinter {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("ThemeFamily")
+            .field("id", &IntoPrinter(&self.0.id))
+            .field("name", &IntoPrinter(&self.0.name))
+            .field("author", &IntoPrinter(&self.0.author))
+            .field(
+                "themes",
+                &VecPrinter(
+                    &self
+                        .0
+                        .themes
+                        .iter()
+                        .map(|theme| ThemeVariantPrinter(theme))
+                        .collect(),
+                ),
+            )
+            .field("scales", &RawSyntaxPrinter("default_color_scales()"))
+            .finish()
+    }
+}
+
+pub struct ThemeVariantPrinter<'a>(&'a ThemeVariant);
+
+impl<'a> Debug for ThemeVariantPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("ThemeVariant")
+            .field("id", &IntoPrinter(&self.0.id))
+            .field("name", &IntoPrinter(&self.0.name))
+            .field("appearance", &AppearancePrinter(self.0.appearance))
+            .field("styles", &ThemeStylesPrinter(&self.0.styles))
+            .finish()
+    }
+}
+
+pub struct AppearancePrinter(Appearance);
+
+impl Debug for AppearancePrinter {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "Appearance::{:?}", self.0)
+    }
+}
+
+pub struct ThemeStylesPrinter<'a>(&'a ThemeStyles);
+
+impl<'a> Debug for ThemeStylesPrinter<'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))
+            .finish()
+    }
+}
+
+pub struct SystemColorsPrinter<'a>(&'a SystemColors);
+
+impl<'a> Debug for SystemColorsPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("SystemColors")
+            .field("transparent", &HslaPrinter(self.0.transparent))
+            .field(
+                "mac_os_traffic_light_red",
+                &HslaPrinter(self.0.mac_os_traffic_light_red),
+            )
+            .field(
+                "mac_os_traffic_light_yellow",
+                &HslaPrinter(self.0.mac_os_traffic_light_yellow),
+            )
+            .field(
+                "mac_os_traffic_light_green",
+                &HslaPrinter(self.0.mac_os_traffic_light_green),
+            )
+            .finish()
+    }
+}
+
+pub struct ThemeColorsPrinter<'a>(&'a ThemeColors);
+
+impl<'a> Debug for ThemeColorsPrinter<'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_disabled", &HslaPrinter(self.0.border_disabled))
+            .field("border_selected", &HslaPrinter(self.0.border_selected))
+            .field(
+                "border_transparent",
+                &HslaPrinter(self.0.border_transparent),
+            )
+            .field(
+                "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_subheader_background",
+                &HslaPrinter(self.0.editor_subheader_background),
+            )
+            .field(
+                "editor_active_line",
+                &HslaPrinter(self.0.editor_active_line_background),
+            )
+            .field(
+                "terminal_background",
+                &HslaPrinter(self.0.terminal_background),
+            )
+            .field(
+                "terminal_ansi_bright_black",
+                &HslaPrinter(self.0.terminal_ansi_bright_black),
+            )
+            .field(
+                "terminal_ansi_bright_red",
+                &HslaPrinter(self.0.terminal_ansi_bright_red),
+            )
+            .field(
+                "terminal_ansi_bright_green",
+                &HslaPrinter(self.0.terminal_ansi_bright_green),
+            )
+            .field(
+                "terminal_ansi_bright_yellow",
+                &HslaPrinter(self.0.terminal_ansi_bright_yellow),
+            )
+            .field(
+                "terminal_ansi_bright_blue",
+                &HslaPrinter(self.0.terminal_ansi_bright_blue),
+            )
+            .field(
+                "terminal_ansi_bright_magenta",
+                &HslaPrinter(self.0.terminal_ansi_bright_magenta),
+            )
+            .field(
+                "terminal_ansi_bright_cyan",
+                &HslaPrinter(self.0.terminal_ansi_bright_cyan),
+            )
+            .field(
+                "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()
+    }
+}
+
+pub struct StatusColorsPrinter<'a>(&'a StatusColors);
+
+impl<'a> Debug for StatusColorsPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("StatusColors")
+            .field("conflict", &HslaPrinter(self.0.conflict))
+            .field("created", &HslaPrinter(self.0.created))
+            .field("deleted", &HslaPrinter(self.0.deleted))
+            .field("error", &HslaPrinter(self.0.error))
+            .field("hidden", &HslaPrinter(self.0.hidden))
+            .field("ignored", &HslaPrinter(self.0.ignored))
+            .field("info", &HslaPrinter(self.0.info))
+            .field("modified", &HslaPrinter(self.0.modified))
+            .field("renamed", &HslaPrinter(self.0.renamed))
+            .field("success", &HslaPrinter(self.0.success))
+            .field("warning", &HslaPrinter(self.0.warning))
+            .finish()
+    }
+}
+
+pub struct GitStatusColorsPrinter<'a>(&'a GitStatusColors);
+
+impl<'a> Debug for GitStatusColorsPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("GitStatusColors")
+            .field("conflict", &HslaPrinter(self.0.conflict))
+            .field("created", &HslaPrinter(self.0.created))
+            .field("deleted", &HslaPrinter(self.0.deleted))
+            .field("ignored", &HslaPrinter(self.0.ignored))
+            .field("modified", &HslaPrinter(self.0.modified))
+            .field("renamed", &HslaPrinter(self.0.renamed))
+            .finish()
+    }
+}
+
+pub struct PlayerColorsPrinter<'a>(&'a PlayerColors);
+
+impl<'a> Debug for PlayerColorsPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_tuple("PlayerColors")
+            .field(&VecPrinter(
+                &self
+                    .0
+                     .0
+                    .iter()
+                    .map(|player_color| PlayerColorPrinter(player_color))
+                    .collect(),
+            ))
+            .finish()
+    }
+}
+
+pub struct PlayerColorPrinter<'a>(&'a PlayerColor);
+
+impl<'a> Debug for PlayerColorPrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("PlayerColor")
+            .field("cursor", &HslaPrinter(self.0.cursor))
+            .field("background", &HslaPrinter(self.0.background))
+            .field("selection", &HslaPrinter(self.0.selection))
+            .finish()
+    }
+}
+
+pub struct SyntaxThemePrinter<'a>(&'a SyntaxTheme);
+
+impl<'a> Debug for SyntaxThemePrinter<'a> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        f.debug_struct("SyntaxTheme")
+            .field(
+                "highlights",
+                &VecPrinter(
+                    &self
+                        .0
+                        .highlights
+                        .iter()
+                        .map(|(token, highlight)| {
+                            (IntoPrinter(token), HslaPrinter(highlight.color.unwrap()))
+                        })
+                        .collect(),
+                ),
+            )
+            .finish()
+    }
+}

crates/theme_importer/src/util.rs 🔗

@@ -0,0 +1,11 @@
+use anyhow::Result;
+
+pub trait Traverse<T, U> {
+    fn traverse(self, f: impl FnOnce(T) -> Result<U>) -> Result<Option<U>>;
+}
+
+impl<T, U> Traverse<T, U> for Option<T> {
+    fn traverse(self, f: impl FnOnce(T) -> Result<U>) -> Result<Option<U>> {
+        self.map_or(Ok(None), |value| f(value).map(Some))
+    }
+}

crates/theme_importer/src/vscode.rs 🔗

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

@@ -7,7 +7,7 @@ publish = false
 [dependencies]
 anyhow.workspace = true
 chrono = "0.4"
-gpui2 = { path = "../gpui2" }
+gpui = { package = "gpui2", path = "../gpui2" }
 itertools = { version = "0.11.0", optional = true }
 serde.workspace = true
 settings2 = { path = "../settings2" }

crates/ui2/docs/building-ui.md 🔗

@@ -0,0 +1,49 @@
+# Building UI with GPUI
+
+## Common patterns
+
+### Method ordering
+
+- id
+- Flex properties
+- Position properties
+- Size properties
+- Style properties
+- Handlers
+- State properties
+
+### Using the Label Component to Create UI Text
+
+The `Label` component helps in displaying text on user interfaces. It creates an interface where specific parameters such as label color, line height style, and strikethrough can be set.
+
+Firstly, to create a `Label` instance, use the `Label::new()` function. This function takes a string that will be displayed as text in the interface.
+
+```rust
+Label::new("Hello, world!");
+```
+
+Now let's dive a bit deeper into how to customize `Label` instances:
+
+- **Setting Color:** To set the color of the label using various predefined color options such as `Default`, `Muted`, `Created`, `Modified`, `Deleted`, etc, the `color()` function is called on the `Label` instance:
+
+    ```rust
+    Label::new("Hello, world!").color(LabelColor::Default);
+    ```
+
+- **Setting Line Height Style:** To set the line height style, the `line_height_style()` function is utilized:
+
+    ```rust
+    Label::new("Hello, world!").line_height_style(LineHeightStyle::TextLabel);
+    ```
+
+- **Adding a Strikethrough:** To add a strikethrough in a `Label`, the  `set_strikethrough()` function is used:
+
+    ```rust
+    Label::new("Hello, world!").set_strikethrough(true);
+    ```
+
+That's it! Now you can use the `Label` component to create and customize text on your application's interface.
+
+## Building a new component
+
+TODO

crates/ui2/docs/elevation.md 🔗

@@ -1,57 +0,0 @@
-# Elevation
-
-Elevation in Zed applies to all surfaces and components. Elevation is categorized into levels.
-
-Elevation accomplishes the following:
-- Allows surfaces to move in front of or behind others, such as content scrolling beneath app top bars.
-- Reflects spatial relationships, for instance, how a floating action button’s shadow intimates its disconnection from a collection of cards.
-- Directs attention to structures at the highest elevation, like a temporary dialog arising in front of other surfaces.
-
-Elevations are the initial elevation values assigned to components by default.
-
-Components may transition to a higher elevation in some cases, like user interations.
-
-On such occasions, components transition to predetermined dynamic elevation offsets. These are the typical elevations to which components move when they are not at rest.
-
-## Understanding Elevation
-
-Elevation can be thought of as the physical closeness of an element to the user. Elements with lower elevations are physically further away from the user on the z-axis and appear to be underneath elements with higher elevations.
-
-Material Design 3 has a some great visualizations of elevation that may be helpful to understanding the mental modal of elevation. [Material Design – Elevation](https://m3.material.io/styles/elevation/overview)
-
-## Elevation Levels
-
-Zed integrates six unique elevation levels in its design system. The elevation of a surface is expressed as a whole number ranging from 0 to 5, both numbers inclusive. A component’s elevation is ascertained by combining the component’s resting elevation with any dynamic elevation offsets.
-
-The levels are detailed as follows:
-
-0. App Background
-1. UI Surface
-2. Elevated Elements
-3. Wash
-4. Focused Element
-5. Dragged Element
-
-### 0. App Background
-
-The app background constitutes the lowest elevation layer, appearing behind all other surfaces and components. It is predominantly used for the background color of the app.
-
-### 1. UI Surface
-
-The UI Surface is the standard elevation for components and is placed above the app background. It is generally used for the background color of the app bar, card, and sheet.
-
-### 2. Elevated Elements
-
-Elevated elements appear above the UI surface layer surfaces and components. Elevated elements are predominantly used for creating popovers, context menus, and tooltips.
-
-### 3. Wash
-
-Wash denotes a distinct elevation reserved to isolate app UI layers from high elevation components such as modals, notifications, and overlaid panels. The wash may not consistently be visible when these components are active. This layer is often referred to as a scrim or overlay and the background color of the wash is typically deployed in its design.
-
-### 4. Focused Element
-
-Focused elements obtain a higher elevation above surfaces and components at wash elevation. They are often used for modals, notifications, and overlaid panels and indicate that they are the sole element the user is interacting with at the moment.
-
-### 5. Dragged Element
-
-Dragged elements gain the highest elevation, thus appearing above surfaces and components at the elevation of focused elements. These are typically used for elements that are being dragged, following the cursor

crates/ui2/docs/hello-world.md 🔗

@@ -0,0 +1,160 @@
+# Hello World
+
+Let's work through the prototypical "Build a todo app" example to showcase how we might build a simple component from scratch.
+
+## Setup
+
+We'll create a headline, a list of todo items, and a form to add new items.
+
+~~~rust
+struct TodoList<V: 'static> {
+    headline: SharedString,
+    items: Vec<TodoItem>,
+    submit_form: ClickHandler<V>
+}
+
+struct TodoItem<V: 'static> {
+    text: SharedString,
+    completed: bool,
+    delete: ClickHandler<V>
+}
+
+impl<V: 'static> TodoList<V> {
+    pub fn new(
+        // Here we impl Into<SharedString>
+        headline: impl Into<SharedString>,
+        items: Vec<TodoItem>,
+        submit_form: ClickHandler<V>
+    ) -> Self {
+        Self {
+            // and here we call .into() so we can simply pass a string
+            // when creating the headline. This pattern is used throughout
+            // outr components
+            headline: headline.into(),
+            items: Vec::new(),
+            submit_form,
+        }
+    }
+}
+~~~
+
+All of this is relatively straightforward.
+
+We use [gpui::SharedString] in components instead of [std::string::String]. This allows us to [TODO: someone who actually knows please explain why we use SharedString].
+
+When we want to pass an action we pass a `ClickHandler`. Whenever we want to add an action, the struct it belongs to needs to be generic over the view type `V`.
+
+~~~rust
+use gpui::hsla
+
+impl<V: 'static> TodoList<V> {
+    // ...
+    fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        div().size_4().bg(hsla(50.0/360.0, 1.0, 0.5, 1.0))
+    }
+}
+~~~
+
+Every component needs a render method, and it should return `impl Component<V>`. This basic component will render a 16x16px yellow square on the screen.
+
+A couple of questions might come to mind:
+
+**Why is `size_4()` 16px, not 4px?**
+
+gpui's style system is based on conventions created by [Tailwind CSS](https://tailwindcss.com/). Here is an example of the list of sizes for `width`: [Width - TailwindCSS Docs](https://tailwindcss.com/docs/width).
+
+I'll quote from the Tailwind [Core Concepts](https://tailwindcss.com/docs/utility-first) docs here:
+
+> Now I know what you’re thinking, “this is an atrocity, what a horrible mess!”
+> and you’re right, it’s kind of ugly. In fact it’s just about impossible to
+> think this is a good idea the first time you see it —
+> you have to actually try it.
+
+As you start using the Tailwind-style conventions you will be surprised how quick it makes it to build out UIs.
+
+**Why `50.0/360.0` in `hsla()`?**
+
+gpui [gpui::Hsla] use `0.0-1.0` for all it's values, but it is common for tools to use `0-360` for hue.
+
+This may change in the future, but this is a little trick that let's you use familiar looking values.
+
+## Building out the container
+
+Let's grab our [theme2::colors::ThemeColors] from the theme and start building out a basic container.
+
+We can access the current theme's colors like this:
+
+~~~rust
+impl<V: 'static> TodoList<V> {
+    // ...
+    fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        let color = cx.theme().colors()
+
+        div().size_4().hsla(50.0/360.0, 1.0, 0.5, 1.0)
+    }
+}
+~~~
+
+Now we have access to the complete set of colors defined in the theme.
+
+~~~rust
+use gpui::hsla
+
+impl<V: 'static> TodoList<V> {
+    // ...
+    fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        let color = cx.theme().colors()
+
+        div().size_4().bg(color.surface)
+    }
+}
+~~~
+
+Let's finish up some basic styles for the container then move on to adding the other elements.
+
+~~~rust
+use gpui::hsla
+
+impl<V: 'static> TodoList<V> {
+    // ...
+    fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        let color = cx.theme().colors()
+
+        div()
+            // Flex properties
+            .flex()
+            .flex_col()             // Stack elements vertically
+            .gap_2()                // Add 8px of space between elements
+            // Size properties
+            .w_96()                 // Set width to 384px
+            .p_4()                  // Add 16px of padding on all sides
+            // Color properties
+            .bg(color.surface)      // Set background color
+            .text_color(color.text) // Set text color
+            // Border properties
+            .rounded_md()           // Add 4px of border radius
+            .border()               // Add a 1px border
+            .border_color(color.border)
+            .child(
+                "Hello, world!"
+            )
+    }
+}
+~~~
+
+### Headline
+
+TODO
+
+### List of todo items
+
+TODO
+
+### Input
+
+TODO
+
+
+### End result
+
+TODO

crates/ui2/docs/todo.md 🔗

@@ -0,0 +1,25 @@
+## Documentation priorities:
+
+These are the priorities to get documented, in a rough stack rank order:
+
+- [ ] label
+- [ ] button
+- [ ] icon_button
+- [ ] icon
+- [ ] list
+- [ ] avatar
+- [ ] panel
+- [ ] modal
+- [ ] palette
+- [ ] input
+- [ ] facepile
+- [ ] player
+- [ ] stacks
+- [ ] context menu
+- [ ] input
+- [ ] textarea/multiline input (not built - not an editor)
+- [ ] indicator
+- [ ] public actor
+- [ ] keybinding
+- [ ] tab
+- [ ] toast

crates/ui2/src/components.rs 🔗

@@ -1,71 +1,53 @@
-mod assistant_panel;
-mod breadcrumb;
-mod buffer;
-mod buffer_search;
-mod chat_panel;
-mod collab_panel;
-mod command_palette;
+mod avatar;
+mod button;
+mod checkbox;
 mod context_menu;
-mod copilot;
-mod editor_pane;
+mod details;
 mod facepile;
+mod icon;
 mod icon_button;
+mod indicator;
+mod input;
 mod keybinding;
-mod language_selector;
+mod label;
 mod list;
 mod modal;
-mod multi_buffer;
 mod notification_toast;
-mod notifications_panel;
 mod palette;
 mod panel;
-mod panes;
+mod player;
 mod player_stack;
-mod project_panel;
-mod recent_projects;
-mod status_bar;
+mod slot;
+mod stack;
 mod tab;
-mod tab_bar;
-mod terminal;
-mod theme_selector;
-mod title_bar;
 mod toast;
-mod toolbar;
-mod traffic_lights;
-mod workspace;
+mod toggle;
+mod tool_divider;
+mod tooltip;
 
-pub use assistant_panel::*;
-pub use breadcrumb::*;
-pub use buffer::*;
-pub use buffer_search::*;
-pub use chat_panel::*;
-pub use collab_panel::*;
-pub use command_palette::*;
+pub use avatar::*;
+pub use button::*;
+pub use checkbox::*;
 pub use context_menu::*;
-pub use copilot::*;
-pub use editor_pane::*;
+pub use details::*;
 pub use facepile::*;
+pub use icon::*;
 pub use icon_button::*;
+pub use indicator::*;
+pub use input::*;
 pub use keybinding::*;
-pub use language_selector::*;
+pub use label::*;
 pub use list::*;
 pub use modal::*;
-pub use multi_buffer::*;
 pub use notification_toast::*;
-pub use notifications_panel::*;
 pub use palette::*;
 pub use panel::*;
-pub use panes::*;
+pub use player::*;
 pub use player_stack::*;
-pub use project_panel::*;
-pub use recent_projects::*;
-pub use status_bar::*;
+pub use slot::*;
+pub use stack::*;
 pub use tab::*;
-pub use tab_bar::*;
-pub use terminal::*;
-pub use theme_selector::*;
-pub use title_bar::*;
 pub use toast::*;
-pub use toolbar::*;
-pub use traffic_lights::*;
-pub use workspace::*;
+pub use toggle::*;
+pub use tool_divider::*;
+pub use tooltip::*;

crates/ui2/src/elements/avatar.rs → crates/ui2/src/components/avatar.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::img;
+use gpui::img;
 
 use crate::prelude::*;
 
@@ -33,7 +33,7 @@ impl Avatar {
         img.uri(self.src.clone())
             .size_4()
             // todo!(Pull the avatar fallback background from the theme.)
-            .bg(gpui2::red())
+            .bg(gpui::red())
     }
 }
 
@@ -44,7 +44,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct AvatarStory;
 

crates/ui2/src/elements/button.rs → crates/ui2/src/components/button.rs 🔗

@@ -1,9 +1,28 @@
 use std::sync::Arc;
 
-use gpui2::{div, rems, DefiniteLength, Hsla, MouseButton, WindowContext};
+use gpui::{div, rems, DefiniteLength, Hsla, MouseButton, WindowContext};
 
-use crate::prelude::*;
 use crate::{h_stack, Icon, IconColor, IconElement, Label, LabelColor, LineHeightStyle};
+use crate::{prelude::*, IconButton};
+
+/// Provides the flexibility to use either a standard
+/// button or an icon button in a given context.
+pub enum ButtonOrIconButton<V: 'static> {
+    Button(Button<V>),
+    IconButton(IconButton<V>),
+}
+
+impl<V: 'static> From<Button<V>> for ButtonOrIconButton<V> {
+    fn from(value: Button<V>) -> Self {
+        Self::Button(value)
+    }
+}
+
+impl<V: 'static> From<IconButton<V>> for ButtonOrIconButton<V> {
+    fn from(value: IconButton<V>) -> Self {
+        Self::IconButton(value)
+    }
+}
 
 #[derive(Default, PartialEq, Clone, Copy)]
 pub enum IconPosition {
@@ -22,8 +41,8 @@ pub enum ButtonVariant {
 impl ButtonVariant {
     pub fn bg_color(&self, cx: &mut WindowContext) -> Hsla {
         match self {
-            ButtonVariant::Ghost => cx.theme().colors().ghost_element,
-            ButtonVariant::Filled => cx.theme().colors().element,
+            ButtonVariant::Ghost => cx.theme().colors().ghost_element_background,
+            ButtonVariant::Filled => cx.theme().colors().element_background,
         }
     }
 
@@ -42,7 +61,7 @@ impl ButtonVariant {
     }
 }
 
-pub type ClickHandler<S> = Arc<dyn Fn(&mut S, &mut ViewContext<S>) + Send + Sync>;
+pub type ClickHandler<V> = Arc<dyn Fn(&mut V, &mut ViewContext<V>) + Send + Sync>;
 
 struct ButtonHandlers<V: 'static> {
     click: Option<ClickHandler<V>>,
@@ -215,7 +234,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{h_stack, v_stack, LabelColor, Story};
-    use gpui2::{rems, Div, Render};
+    use gpui::{rems, Div, Render};
     use strum::IntoEnumIterator;
 
     pub struct ButtonStory;

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

@@ -0,0 +1,229 @@
+use std::sync::Arc;
+
+use gpui::{
+    div, Component, ElementId, ParentElement, StatefulInteractive, StatelessInteractive, Styled,
+    ViewContext,
+};
+use theme2::ActiveTheme;
+
+use crate::{Icon, IconColor, IconElement, Selection};
+
+pub type CheckHandler<V> = Arc<dyn Fn(Selection, &mut V, &mut ViewContext<V>) + Send + Sync>;
+
+/// # Checkbox
+///
+/// Checkboxes are used for multiple choices, not for mutually exclusive choices.
+/// Each checkbox works independently from other checkboxes in the list,
+/// therefore checking an additional box does not affect any other selections.
+#[derive(Component)]
+pub struct Checkbox<V: 'static> {
+    id: ElementId,
+    checked: Selection,
+    disabled: bool,
+    on_click: Option<CheckHandler<V>>,
+}
+
+impl<V: 'static> Checkbox<V> {
+    pub fn new(id: impl Into<ElementId>, checked: Selection) -> Self {
+        Self {
+            id: id.into(),
+            checked,
+            disabled: false,
+            on_click: None,
+        }
+    }
+
+    pub fn disabled(mut self, disabled: bool) -> Self {
+        self.disabled = disabled;
+        self
+    }
+
+    pub fn on_click(
+        mut self,
+        handler: impl 'static + Fn(Selection, &mut V, &mut ViewContext<V>) + Send + Sync,
+    ) -> Self {
+        self.on_click = Some(Arc::new(handler));
+        self
+    }
+
+    pub fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        let group_id = format!("checkbox_group_{:?}", self.id);
+
+        let icon = match self.checked {
+            // When selected, we show a checkmark.
+            Selection::Selected => {
+                Some(
+                    IconElement::new(Icon::Check)
+                        .size(crate::IconSize::Small)
+                        .color(
+                            // If the checkbox is disabled we change the color of the icon.
+                            if self.disabled {
+                                IconColor::Disabled
+                            } else {
+                                IconColor::Selected
+                            },
+                        ),
+                )
+            }
+            // In an indeterminate state, we show a dash.
+            Selection::Indeterminate => {
+                Some(
+                    IconElement::new(Icon::Dash)
+                        .size(crate::IconSize::Small)
+                        .color(
+                            // If the checkbox is disabled we change the color of the icon.
+                            if self.disabled {
+                                IconColor::Disabled
+                            } else {
+                                IconColor::Selected
+                            },
+                        ),
+                )
+            }
+            // When unselected, we show nothing.
+            Selection::Unselected => None,
+        };
+
+        // A checkbox could be in an indeterminate state,
+        // for example the indeterminate state could represent:
+        //  - a group of options of which only some are selected
+        //  - an enabled option that is no longer available
+        //  - a previously agreed to license that has been updated
+        //
+        // For the sake of styles we treat the indeterminate state as selected,
+        // but it's icon will be different.
+        let selected =
+            self.checked == Selection::Selected || self.checked == Selection::Indeterminate;
+
+        // We could use something like this to make the checkbox background when selected:
+        //
+        // ~~~rust
+        // ...
+        // .when(selected, |this| {
+        //     this.bg(cx.theme().colors().element_selected)
+        // })
+        // ~~~
+        //
+        // But we use a match instead here because the checkbox might be disabled,
+        // and it could be disabled _while_ it is selected, as well as while it is not selected.
+        let (bg_color, border_color) = match (self.disabled, selected) {
+            (true, _) => (
+                cx.theme().colors().ghost_element_disabled,
+                cx.theme().colors().border_disabled,
+            ),
+            (false, true) => (
+                cx.theme().colors().element_selected,
+                cx.theme().colors().border,
+            ),
+            (false, false) => (
+                cx.theme().colors().element_background,
+                cx.theme().colors().border,
+            ),
+        };
+
+        div()
+            .id(self.id)
+            // Rather than adding `px_1()` to add some space around the checkbox,
+            // we use a larger parent element to create a slightly larger
+            // click area for the checkbox.
+            .size_5()
+            // Because we've enlarged the click area, we need to create a
+            // `group` to pass down interaction events to the checkbox.
+            .group(group_id.clone())
+            .child(
+                div()
+                    .flex()
+                    // This prevent the flex element from growing
+                    // or shrinking in response to any size changes
+                    .flex_none()
+                    // The combo of `justify_center()` and `items_center()`
+                    // is used frequently to center elements in a flex container.
+                    //
+                    // We use this to center the icon in the checkbox.
+                    .justify_center()
+                    .items_center()
+                    .m_1()
+                    .size_4()
+                    .rounded_sm()
+                    .bg(bg_color)
+                    .border()
+                    .border_color(border_color)
+                    // We only want the interaction states to fire when we
+                    // are in a checkbox that isn't disabled.
+                    .when(!self.disabled, |this| {
+                        // Here instead of `hover()` we use `group_hover()`
+                        // to pass it the group id.
+                        this.group_hover(group_id.clone(), |el| {
+                            el.bg(cx.theme().colors().element_hover)
+                        })
+                    })
+                    .children(icon),
+            )
+            .when_some(
+                self.on_click.filter(|_| !self.disabled),
+                |this, on_click| {
+                    this.on_click(move |view, _, cx| on_click(self.checked.inverse(), view, cx))
+                },
+            )
+    }
+}
+
+#[cfg(feature = "stories")]
+pub use stories::*;
+
+#[cfg(feature = "stories")]
+mod stories {
+    use super::*;
+    use crate::{h_stack, Story};
+    use gpui::{Div, Render};
+
+    pub struct CheckboxStory;
+
+    impl Render for CheckboxStory {
+        type Element = Div<Self>;
+
+        fn render(&mut self, cx: &mut ViewContext<Self>) -> Self::Element {
+            Story::container(cx)
+                .child(Story::title_for::<_, Checkbox<Self>>(cx))
+                .child(Story::label(cx, "Default"))
+                .child(
+                    h_stack()
+                        .p_2()
+                        .gap_2()
+                        .rounded_md()
+                        .border()
+                        .border_color(cx.theme().colors().border)
+                        .child(Checkbox::new("checkbox-enabled", Selection::Unselected))
+                        .child(Checkbox::new(
+                            "checkbox-intermediate",
+                            Selection::Indeterminate,
+                        ))
+                        .child(Checkbox::new("checkbox-selected", Selection::Selected)),
+                )
+                .child(Story::label(cx, "Disabled"))
+                .child(
+                    h_stack()
+                        .p_2()
+                        .gap_2()
+                        .rounded_md()
+                        .border()
+                        .border_color(cx.theme().colors().border)
+                        .child(
+                            Checkbox::new("checkbox-disabled", Selection::Unselected)
+                                .disabled(true),
+                        )
+                        .child(
+                            Checkbox::new(
+                                "checkbox-disabled-intermediate",
+                                Selection::Indeterminate,
+                            )
+                            .disabled(true),
+                        )
+                        .child(
+                            Checkbox::new("checkbox-disabled-selected", Selection::Selected)
+                                .disabled(true),
+                        ),
+                )
+        }
+    }
+}

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

@@ -8,7 +8,7 @@ pub enum ContextMenuItem {
 }
 
 impl ContextMenuItem {
-    fn to_list_item<V: 'static>(self) -> ListItem<V> {
+    fn to_list_item<V: 'static>(self) -> ListItem {
         match self {
             ContextMenuItem::Header(label) => ListSubHeader::new(label).into(),
             ContextMenuItem::Entry(label) => {
@@ -46,18 +46,15 @@ impl ContextMenu {
     fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
         v_stack()
             .flex()
-            .bg(cx.theme().colors().elevated_surface)
+            .bg(cx.theme().colors().elevated_surface_background)
             .border()
             .border_color(cx.theme().colors().border)
-            .child(
-                List::new(
-                    self.items
-                        .into_iter()
-                        .map(ContextMenuItem::to_list_item)
-                        .collect(),
-                )
-                .toggle(ToggleState::Toggled),
-            )
+            .child(List::new(
+                self.items
+                    .into_iter()
+                    .map(ContextMenuItem::to_list_item::<V>)
+                    .collect(),
+            ))
     }
 }
 
@@ -68,7 +65,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::story::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct ContextMenuStory;
 

crates/ui2/src/elements/details.rs → crates/ui2/src/components/details.rs 🔗

@@ -47,7 +47,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{Button, Story};
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct DetailsStory;
 

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

@@ -33,7 +33,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{static_players, Story};
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct FacepileStory;
 

crates/ui2/src/elements/icon.rs → crates/ui2/src/components/icon.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::{rems, svg, Hsla};
+use gpui::{rems, svg, Hsla};
 use strum::EnumIter;
 
 use crate::prelude::*;
@@ -22,6 +22,7 @@ pub enum IconColor {
     Warning,
     Success,
     Info,
+    Selected,
 }
 
 impl IconColor {
@@ -36,6 +37,7 @@ impl IconColor {
             IconColor::Warning => cx.theme().status().warning,
             IconColor::Success => cx.theme().status().success,
             IconColor::Info => cx.theme().status().info,
+            IconColor::Selected => cx.theme().colors().icon_accent,
         }
     }
 }
@@ -55,6 +57,7 @@ pub enum Icon {
     ChevronRight,
     ChevronUp,
     Close,
+    Dash,
     Exit,
     ExclamationTriangle,
     File,
@@ -112,6 +115,7 @@ impl Icon {
             Icon::ChevronRight => "icons/chevron_right.svg",
             Icon::ChevronUp => "icons/chevron_up.svg",
             Icon::Close => "icons/x.svg",
+            Icon::Dash => "icons/dash.svg",
             Icon::Exit => "icons/exit.svg",
             Icon::ExclamationTriangle => "icons/warning.svg",
             Icon::File => "icons/file.svg",
@@ -182,7 +186,6 @@ impl IconElement {
     }
 
     fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
-        let fill = self.color.color(cx);
         let svg_size = match self.size {
             IconSize::Small => rems(0.75),
             IconSize::Medium => rems(0.9375),
@@ -192,7 +195,7 @@ impl IconElement {
             .size(svg_size)
             .flex_none()
             .path(self.icon.path())
-            .text_color(fill)
+            .text_color(self.color.color(cx))
     }
 }
 
@@ -201,7 +204,7 @@ pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
     use strum::IntoEnumIterator;
 
     use crate::Story;

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

@@ -1,6 +1,6 @@
 use std::sync::Arc;
 
-use gpui2::{rems, MouseButton};
+use gpui::{rems, MouseButton};
 
 use crate::{h_stack, prelude::*};
 use crate::{ClickHandler, Icon, IconColor, IconElement};
@@ -73,12 +73,12 @@ impl<V: 'static> IconButton<V> {
 
         let (bg_color, bg_hover_color, bg_active_color) = match self.variant {
             ButtonVariant::Filled => (
-                cx.theme().colors().element,
+                cx.theme().colors().element_background,
                 cx.theme().colors().element_hover,
                 cx.theme().colors().element_active,
             ),
             ButtonVariant::Ghost => (
-                cx.theme().colors().ghost_element,
+                cx.theme().colors().ghost_element_background,
                 cx.theme().colors().ghost_element_hover,
                 cx.theme().colors().ghost_element_active,
             ),

crates/ui2/src/elements/indicator.rs → crates/ui2/src/components/indicator.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::px;
+use gpui::px;
 
 use crate::prelude::*;
 
@@ -14,7 +14,7 @@ impl UnreadIndicator {
         div()
             .rounded_full()
             .border_2()
-            .border_color(cx.theme().colors().surface)
+            .border_color(cx.theme().colors().surface_background)
             .w(px(9.0))
             .h(px(9.0))
             .z_index(2)

crates/ui2/src/elements/input.rs → crates/ui2/src/components/input.rs 🔗

@@ -59,12 +59,12 @@ impl Input {
     fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
         let (input_bg, input_hover_bg, input_active_bg) = match self.variant {
             InputVariant::Ghost => (
-                cx.theme().colors().ghost_element,
+                cx.theme().colors().ghost_element_background,
                 cx.theme().colors().ghost_element_hover,
                 cx.theme().colors().ghost_element_active,
             ),
             InputVariant::Filled => (
-                cx.theme().colors().element,
+                cx.theme().colors().element_background,
                 cx.theme().colors().element_hover,
                 cx.theme().colors().element_active,
             ),
@@ -111,7 +111,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct InputStory;
 

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

@@ -66,7 +66,7 @@ impl Key {
             .rounded_md()
             .text_sm()
             .text_color(cx.theme().colors().text)
-            .bg(cx.theme().colors().element)
+            .bg(cx.theme().colors().element_background)
             .child(self.key.clone())
     }
 }
@@ -158,7 +158,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
     use itertools::Itertools;
 
     pub struct KeybindingStory;

crates/ui2/src/elements/label.rs → crates/ui2/src/components/label.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::{relative, rems, Hsla, WindowContext};
+use gpui::{relative, rems, Hsla, WindowContext};
 use smallvec::SmallVec;
 
 use crate::prelude::*;
@@ -194,7 +194,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct LabelStory;
 

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

@@ -1,11 +1,11 @@
-use gpui2::{div, px, relative, Div};
+use gpui::div;
 
 use crate::settings::user_settings;
 use crate::{
-    h_stack, v_stack, Avatar, ClickHandler, Icon, IconColor, IconElement, IconSize, Label,
-    LabelColor,
+    disclosure_control, h_stack, v_stack, Avatar, Icon, IconColor, IconElement, IconSize, Label,
+    LabelColor, Toggle,
 };
-use crate::{prelude::*, Button};
+use crate::{prelude::*, GraphicSlot};
 
 #[derive(Clone, Copy, Default, Debug, PartialEq)]
 pub enum ListItemVariant {
@@ -29,7 +29,7 @@ pub struct ListHeader {
     left_icon: Option<Icon>,
     meta: Option<ListHeaderMeta>,
     variant: ListItemVariant,
-    toggleable: Toggleable,
+    toggle: Toggle,
 }
 
 impl ListHeader {
@@ -39,17 +39,12 @@ impl ListHeader {
             left_icon: None,
             meta: None,
             variant: ListItemVariant::default(),
-            toggleable: Toggleable::NotToggleable,
+            toggle: Toggle::NotToggleable,
         }
     }
 
-    pub fn toggle(mut self, toggle: ToggleState) -> Self {
-        self.toggleable = toggle.into();
-        self
-    }
-
-    pub fn toggleable(mut self, toggleable: Toggleable) -> Self {
-        self.toggleable = toggleable;
+    pub fn toggle(mut self, toggle: Toggle) -> Self {
+        self.toggle = toggle;
         self
     }
 
@@ -63,30 +58,8 @@ impl ListHeader {
         self
     }
 
-    fn disclosure_control<V: 'static>(&self) -> Div<V> {
-        let is_toggleable = self.toggleable != Toggleable::NotToggleable;
-        let is_toggled = Toggleable::is_toggled(&self.toggleable);
-
-        match (is_toggleable, is_toggled) {
-            (false, _) => div(),
-            (_, true) => div().child(
-                IconElement::new(Icon::ChevronDown)
-                    .color(IconColor::Muted)
-                    .size(IconSize::Small),
-            ),
-            (_, false) => div().child(
-                IconElement::new(Icon::ChevronRight)
-                    .color(IconColor::Muted)
-                    .size(IconSize::Small),
-            ),
-        }
-    }
-
     fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
-        let is_toggleable = self.toggleable != Toggleable::NotToggleable;
-        let is_toggled = self.toggleable.is_toggled();
-
-        let disclosure_control = self.disclosure_control();
+        let disclosure_control = disclosure_control(self.toggle);
 
         let meta = match self.meta {
             Some(ListHeaderMeta::Tools(icons)) => div().child(
@@ -106,7 +79,7 @@ impl ListHeader {
 
         h_stack()
             .w_full()
-            .bg(cx.theme().colors().surface)
+            .bg(cx.theme().colors().surface_background)
             // TODO: Add focus state
             // .when(self.state == InteractionState::Focused, |this| {
             //     this.border()
@@ -193,12 +166,6 @@ impl ListSubHeader {
     }
 }
 
-#[derive(Clone)]
-pub enum LeftContent {
-    Icon(Icon),
-    Avatar(SharedString),
-}
-
 #[derive(Default, PartialEq, Copy, Clone)]
 pub enum ListEntrySize {
     #[default]
@@ -207,44 +174,36 @@ pub enum ListEntrySize {
 }
 
 #[derive(Component)]
-pub enum ListItem<V: 'static> {
+pub enum ListItem {
     Entry(ListEntry),
-    Details(ListDetailsEntry<V>),
     Separator(ListSeparator),
     Header(ListSubHeader),
 }
 
-impl<V: 'static> From<ListEntry> for ListItem<V> {
+impl From<ListEntry> for ListItem {
     fn from(entry: ListEntry) -> Self {
         Self::Entry(entry)
     }
 }
 
-impl<V: 'static> From<ListDetailsEntry<V>> for ListItem<V> {
-    fn from(entry: ListDetailsEntry<V>) -> Self {
-        Self::Details(entry)
-    }
-}
-
-impl<V: 'static> From<ListSeparator> for ListItem<V> {
+impl From<ListSeparator> for ListItem {
     fn from(entry: ListSeparator) -> Self {
         Self::Separator(entry)
     }
 }
 
-impl<V: 'static> From<ListSubHeader> for ListItem<V> {
+impl From<ListSubHeader> for ListItem {
     fn from(entry: ListSubHeader) -> Self {
         Self::Header(entry)
     }
 }
 
-impl<V: 'static> ListItem<V> {
-    fn render(self, view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+impl ListItem {
+    fn render<V: 'static>(self, view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
         match self {
             ListItem::Entry(entry) => div().child(entry.render(view, cx)),
             ListItem::Separator(separator) => div().child(separator.render(view, cx)),
             ListItem::Header(header) => div().child(header.render(view, cx)),
-            ListItem::Details(details) => div().child(details.render(view, cx)),
         }
     }
 
@@ -263,31 +222,29 @@ impl<V: 'static> ListItem<V> {
 
 #[derive(Component)]
 pub struct ListEntry {
-    disclosure_control_style: DisclosureControlVisibility,
+    disabled: bool,
+    // TODO: Reintroduce this
+    // disclosure_control_style: DisclosureControlVisibility,
     indent_level: u32,
     label: Label,
-    left_content: Option<LeftContent>,
-    variant: ListItemVariant,
-    size: ListEntrySize,
-    state: InteractionState,
-    toggle: Option<ToggleState>,
+    left_slot: Option<GraphicSlot>,
     overflow: OverflowStyle,
+    size: ListEntrySize,
+    toggle: Toggle,
+    variant: ListItemVariant,
 }
 
 impl ListEntry {
     pub fn new(label: Label) -> Self {
         Self {
-            disclosure_control_style: DisclosureControlVisibility::default(),
+            disabled: false,
             indent_level: 0,
             label,
-            variant: ListItemVariant::default(),
-            left_content: None,
-            size: ListEntrySize::default(),
-            state: InteractionState::default(),
-            // TODO: Should use Toggleable::NotToggleable
-            // or remove Toggleable::NotToggleable from the system
-            toggle: None,
+            left_slot: None,
             overflow: OverflowStyle::Hidden,
+            size: ListEntrySize::default(),
+            toggle: Toggle::NotToggleable,
+            variant: ListItemVariant::default(),
         }
     }
 
@@ -301,28 +258,23 @@ impl ListEntry {
         self
     }
 
-    pub fn toggle(mut self, toggle: ToggleState) -> Self {
-        self.toggle = Some(toggle);
+    pub fn toggle(mut self, toggle: Toggle) -> Self {
+        self.toggle = toggle;
         self
     }
 
-    pub fn left_content(mut self, left_content: LeftContent) -> Self {
-        self.left_content = Some(left_content);
+    pub fn left_content(mut self, left_content: GraphicSlot) -> Self {
+        self.left_slot = Some(left_content);
         self
     }
 
     pub fn left_icon(mut self, left_icon: Icon) -> Self {
-        self.left_content = Some(LeftContent::Icon(left_icon));
+        self.left_slot = Some(GraphicSlot::Icon(left_icon));
         self
     }
 
     pub fn left_avatar(mut self, left_avatar: impl Into<SharedString>) -> Self {
-        self.left_content = Some(LeftContent::Avatar(left_avatar.into()));
-        self
-    }
-
-    pub fn state(mut self, state: InteractionState) -> Self {
-        self.state = state;
+        self.left_slot = Some(GraphicSlot::Avatar(left_avatar.into()));
         self
     }
 
@@ -331,63 +283,19 @@ impl ListEntry {
         self
     }
 
-    pub fn disclosure_control_style(
-        mut self,
-        disclosure_control_style: DisclosureControlVisibility,
-    ) -> Self {
-        self.disclosure_control_style = disclosure_control_style;
-        self
-    }
-
-    fn label_color(&self) -> LabelColor {
-        match self.state {
-            InteractionState::Disabled => LabelColor::Disabled,
-            _ => Default::default(),
-        }
-    }
-
-    fn icon_color(&self) -> IconColor {
-        match self.state {
-            InteractionState::Disabled => IconColor::Disabled,
-            _ => Default::default(),
-        }
-    }
-
-    fn disclosure_control<V: 'static>(
-        &mut self,
-        cx: &mut ViewContext<V>,
-    ) -> Option<impl Component<V>> {
-        let disclosure_control_icon = if let Some(ToggleState::Toggled) = self.toggle {
-            IconElement::new(Icon::ChevronDown)
-        } else {
-            IconElement::new(Icon::ChevronRight)
-        }
-        .color(IconColor::Muted)
-        .size(IconSize::Small);
-
-        match (self.toggle, self.disclosure_control_style) {
-            (Some(_), DisclosureControlVisibility::OnHover) => {
-                Some(div().absolute().neg_left_5().child(disclosure_control_icon))
-            }
-            (Some(_), DisclosureControlVisibility::Always) => {
-                Some(div().child(disclosure_control_icon))
-            }
-            (None, _) => None,
-        }
-    }
-
-    fn render<V: 'static>(mut self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+    fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
         let settings = user_settings(cx);
 
-        let left_content = match self.left_content.clone() {
-            Some(LeftContent::Icon(i)) => Some(
+        let left_content = match self.left_slot.clone() {
+            Some(GraphicSlot::Icon(i)) => Some(
                 h_stack().child(
                     IconElement::new(i)
                         .size(IconSize::Small)
                         .color(IconColor::Muted),
                 ),
             ),
-            Some(LeftContent::Avatar(src)) => Some(h_stack().child(Avatar::new(src))),
+            Some(GraphicSlot::Avatar(src)) => Some(h_stack().child(Avatar::new(src))),
+            Some(GraphicSlot::PublicActor(src)) => Some(h_stack().child(Avatar::new(src))),
             None => None,
         };
 
@@ -399,11 +307,12 @@ impl ListEntry {
         div()
             .relative()
             .group("")
-            .bg(cx.theme().colors().surface)
-            .when(self.state == InteractionState::Focused, |this| {
-                this.border()
-                    .border_color(cx.theme().colors().border_focused)
-            })
+            .bg(cx.theme().colors().surface_background)
+            // TODO: Add focus state
+            // .when(self.state == InteractionState::Focused, |this| {
+            //     this.border()
+            //         .border_color(cx.theme().colors().border_focused)
+            // })
             .child(
                 sized_item
                     .when(self.variant == ListItemVariant::Inset, |this| this.px_2())
@@ -425,131 +334,13 @@ impl ListEntry {
                     .gap_1()
                     .items_center()
                     .relative()
-                    .children(self.disclosure_control(cx))
+                    .child(disclosure_control(self.toggle))
                     .children(left_content)
                     .child(self.label),
             )
     }
 }
 
-struct ListDetailsEntryHandlers<V: 'static> {
-    click: Option<ClickHandler<V>>,
-}
-
-impl<V: 'static> Default for ListDetailsEntryHandlers<V> {
-    fn default() -> Self {
-        Self { click: None }
-    }
-}
-
-#[derive(Component)]
-pub struct ListDetailsEntry<V: 'static> {
-    label: SharedString,
-    meta: Option<SharedString>,
-    left_content: Option<LeftContent>,
-    handlers: ListDetailsEntryHandlers<V>,
-    actions: Option<Vec<Button<V>>>,
-    // TODO: make this more generic instead of
-    // specifically for notifications
-    seen: bool,
-}
-
-impl<V: 'static> ListDetailsEntry<V> {
-    pub fn new(label: impl Into<SharedString>) -> Self {
-        Self {
-            label: label.into(),
-            meta: None,
-            left_content: None,
-            handlers: ListDetailsEntryHandlers::default(),
-            actions: None,
-            seen: false,
-        }
-    }
-
-    pub fn meta(mut self, meta: impl Into<SharedString>) -> Self {
-        self.meta = Some(meta.into());
-        self
-    }
-
-    pub fn seen(mut self, seen: bool) -> Self {
-        self.seen = seen;
-        self
-    }
-
-    pub fn on_click(mut self, handler: ClickHandler<V>) -> Self {
-        self.handlers.click = Some(handler);
-        self
-    }
-
-    pub fn actions(mut self, actions: Vec<Button<V>>) -> Self {
-        self.actions = Some(actions);
-        self
-    }
-
-    fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
-        let settings = user_settings(cx);
-
-        let (item_bg, item_bg_hover, item_bg_active) = (
-            cx.theme().colors().ghost_element,
-            cx.theme().colors().ghost_element_hover,
-            cx.theme().colors().ghost_element_active,
-        );
-
-        let label_color = match self.seen {
-            true => LabelColor::Muted,
-            false => LabelColor::Default,
-        };
-
-        div()
-            .relative()
-            .group("")
-            .bg(item_bg)
-            .px_2()
-            .py_1p5()
-            .w_full()
-            .z_index(1)
-            .when(!self.seen, |this| {
-                this.child(
-                    div()
-                        .absolute()
-                        .left(px(3.0))
-                        .top_3()
-                        .rounded_full()
-                        .border_2()
-                        .border_color(cx.theme().colors().surface)
-                        .w(px(9.0))
-                        .h(px(9.0))
-                        .z_index(2)
-                        .bg(cx.theme().status().info),
-                )
-            })
-            .child(
-                v_stack()
-                    .w_full()
-                    .line_height(relative(1.2))
-                    .gap_1()
-                    .child(
-                        div()
-                            .w_5()
-                            .h_5()
-                            .rounded_full()
-                            .bg(cx.theme().colors().icon_accent),
-                    )
-                    .child(Label::new(self.label.clone()).color(label_color))
-                    .children(
-                        self.meta
-                            .map(|meta| Label::new(meta).color(LabelColor::Muted)),
-                    )
-                    .child(
-                        h_stack()
-                            .gap_1()
-                            .justify_end()
-                            .children(self.actions.unwrap_or_default()),
-                    ),
-            )
-    }
-}
-
 #[derive(Clone, Component)]
 pub struct ListSeparator;
 
@@ -564,20 +355,22 @@ impl ListSeparator {
 }
 
 #[derive(Component)]
-pub struct List<V: 'static> {
-    items: Vec<ListItem<V>>,
+pub struct List {
+    items: Vec<ListItem>,
+    /// Message to display when the list is empty
+    /// Defaults to "No items"
     empty_message: SharedString,
     header: Option<ListHeader>,
-    toggleable: Toggleable,
+    toggle: Toggle,
 }
 
-impl<V: 'static> List<V> {
-    pub fn new(items: Vec<ListItem<V>>) -> Self {
+impl List {
+    pub fn new(items: Vec<ListItem>) -> Self {
         Self {
             items,
             empty_message: "No items".into(),
             header: None,
-            toggleable: Toggleable::default(),
+            toggle: Toggle::NotToggleable,
         }
     }
 
@@ -591,19 +384,16 @@ impl<V: 'static> List<V> {
         self
     }
 
-    pub fn toggle(mut self, toggle: ToggleState) -> Self {
-        self.toggleable = toggle.into();
+    pub fn toggle(mut self, toggle: Toggle) -> Self {
+        self.toggle = toggle;
         self
     }
 
-    fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
-        let is_toggleable = self.toggleable != Toggleable::NotToggleable;
-        let is_toggled = Toggleable::is_toggled(&self.toggleable);
-
-        let list_content = match (self.items.is_empty(), is_toggled) {
+    fn render<V: 'static>(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
+        let list_content = match (self.items.is_empty(), self.toggle) {
             (false, _) => div().children(self.items),
-            (true, false) => div(),
-            (true, true) => {
+            (true, Toggle::Toggled(false)) => div(),
+            (true, _) => {
                 div().child(Label::new(self.empty_message.clone()).color(LabelColor::Muted))
             }
         };
@@ -611,7 +401,7 @@ impl<V: 'static> List<V> {
         v_stack()
             .w_full()
             .py_1()
-            .children(self.header.map(|header| header.toggleable(self.toggleable)))
+            .children(self.header.map(|header| header))
             .child(list_content)
     }
 }

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

@@ -1,4 +1,4 @@
-use gpui2::AnyElement;
+use gpui::AnyElement;
 use smallvec::SmallVec;
 
 use crate::{h_stack, prelude::*, v_stack, Button, Icon, IconButton, Label};

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

@@ -1,4 +1,4 @@
-use gpui2::rems;
+use gpui::rems;
 
 use crate::prelude::*;
 use crate::{h_stack, Icon};
@@ -34,7 +34,7 @@ impl NotificationToast {
             .px_1p5()
             .rounded_lg()
             .shadow_md()
-            .bg(cx.theme().colors().elevated_surface)
+            .bg(cx.theme().colors().elevated_surface_background)
             .child(div().size_full().child(self.label.clone()))
     }
 }

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

@@ -47,7 +47,7 @@ impl Palette {
             .id(self.id.clone())
             .w_96()
             .rounded_lg()
-            .bg(cx.theme().colors().elevated_surface)
+            .bg(cx.theme().colors().elevated_surface_background)
             .border()
             .border_color(cx.theme().colors().border)
             .child(
@@ -56,7 +56,12 @@ impl Palette {
                     .child(v_stack().py_0p5().px_1().child(div().px_2().py_0p5().child(
                         Label::new(self.input_placeholder.clone()).color(LabelColor::Placeholder),
                     )))
-                    .child(div().h_px().w_full().bg(cx.theme().colors().element))
+                    .child(
+                        div()
+                            .h_px()
+                            .w_full()
+                            .bg(cx.theme().colors().element_background),
+                    )
                     .child(
                         v_stack()
                             .id("items")
@@ -148,13 +153,13 @@ impl PaletteItem {
     }
 }
 
-use gpui2::ElementId;
+use gpui::ElementId;
 #[cfg(feature = "stories")]
 pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::{ModifierKeys, Story};
 

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

@@ -1,4 +1,4 @@
-use gpui2::{AbsoluteLength, AnyElement};
+use gpui::{AbsoluteLength, AnyElement};
 use smallvec::SmallVec;
 
 use crate::prelude::*;
@@ -107,7 +107,7 @@ impl<V: 'static> Panel<V> {
                 PanelSide::Right => this.border_l(),
                 PanelSide::Bottom => this.border_b().w_full().h(current_size),
             })
-            .bg(cx.theme().colors().surface)
+            .bg(cx.theme().colors().surface_background)
             .border_color(cx.theme().colors().border)
             .children(self.children)
     }
@@ -126,7 +126,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{Label, Story};
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct PanelStory;
 

crates/ui2/src/elements/player.rs → crates/ui2/src/components/player.rs 🔗

@@ -1,7 +1,25 @@
-use gpui2::{Hsla, ViewContext};
+use gpui::{Hsla, ViewContext};
 
 use crate::prelude::*;
 
+/// Represents a person with a Zed account's public profile.
+/// All data in this struct should be considered public.
+pub struct PublicPlayer {
+    pub username: SharedString,
+    pub avatar: SharedString,
+    pub is_contact: bool,
+}
+
+impl PublicPlayer {
+    pub fn new(username: impl Into<SharedString>, avatar: impl Into<SharedString>) -> Self {
+        Self {
+            username: username.into(),
+            avatar: avatar.into(),
+            is_contact: false,
+        }
+    }
+}
+
 #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy)]
 pub enum PlayerStatus {
     #[default]

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

@@ -0,0 +1,14 @@
+use gpui::SharedString;
+
+use crate::Icon;
+
+#[derive(Debug, Clone)]
+/// A slot utility that provides a way to to pass either
+/// an icon or an image to a component.
+///
+/// Can be filled with a []
+pub enum GraphicSlot {
+    Icon(Icon),
+    Avatar(SharedString),
+    PublicActor(SharedString),
+}

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

@@ -1,6 +1,6 @@
 use crate::prelude::*;
 use crate::{Icon, IconColor, IconElement, Label, LabelColor};
-use gpui2::{red, Div, ElementId, Render, View, VisualContext};
+use gpui::{red, Div, ElementId, Render, View, VisualContext};
 
 #[derive(Component, Clone)]
 pub struct Tab {
@@ -109,12 +109,12 @@ impl Tab {
 
         let (tab_bg, tab_hover_bg, tab_active_bg) = match self.current {
             false => (
-                cx.theme().colors().tab_inactive,
+                cx.theme().colors().tab_inactive_background,
                 cx.theme().colors().ghost_element_hover,
                 cx.theme().colors().ghost_element_active,
             ),
             true => (
-                cx.theme().colors().tab_active,
+                cx.theme().colors().tab_active_background,
                 cx.theme().colors().element_hover,
                 cx.theme().colors().element_active,
             ),

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

@@ -1,4 +1,4 @@
-use gpui2::AnyElement;
+use gpui::AnyElement;
 use smallvec::SmallVec;
 
 use crate::prelude::*;
@@ -54,7 +54,7 @@ impl<V: 'static> Toast<V> {
             .rounded_lg()
             .shadow_md()
             .overflow_hidden()
-            .bg(cx.theme().colors().elevated_surface)
+            .bg(cx.theme().colors().elevated_surface_background)
             .children(self.children)
     }
 }
@@ -70,7 +70,7 @@ pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::{Label, Story};
 

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

@@ -0,0 +1,61 @@
+use gpui::{div, Component, ParentElement};
+
+use crate::{Icon, IconColor, IconElement, IconSize};
+
+/// Whether the entry is toggleable, and if so, whether it is currently toggled.
+///
+/// To make an element toggleable, simply add a `Toggle::Toggled(_)` and handle it's cases.
+///
+/// You can check if an element is toggleable with `.is_toggleable()`
+///
+/// Possible values:
+/// - `Toggle::NotToggleable` - The entry is not toggleable
+/// - `Toggle::Toggled(true)` - The entry is toggleable and toggled
+/// - `Toggle::Toggled(false)` - The entry is toggleable and not toggled
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+pub enum Toggle {
+    NotToggleable,
+    Toggled(bool),
+}
+
+impl Toggle {
+    /// Returns true if the entry is toggled (or is not toggleable.)
+    ///
+    /// As element that isn't toggleable is always "expanded" or "enabled"
+    /// returning true in that case makes sense.
+    pub fn is_toggled(&self) -> bool {
+        match self {
+            Self::Toggled(false) => false,
+            _ => true,
+        }
+    }
+
+    pub fn is_toggleable(&self) -> bool {
+        match self {
+            Self::Toggled(_) => true,
+            _ => false,
+        }
+    }
+}
+
+impl From<bool> for Toggle {
+    fn from(toggled: bool) -> Self {
+        Toggle::Toggled(toggled)
+    }
+}
+
+pub fn disclosure_control<V: 'static>(toggle: Toggle) -> impl Component<V> {
+    match (toggle.is_toggleable(), toggle.is_toggled()) {
+        (false, _) => div(),
+        (_, true) => div().child(
+            IconElement::new(Icon::ChevronDown)
+                .color(IconColor::Muted)
+                .size(IconSize::Small),
+        ),
+        (_, false) => div().child(
+            IconElement::new(Icon::ChevronRight)
+                .color(IconColor::Muted)
+                .size(IconSize::Small),
+        ),
+    }
+}

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

@@ -0,0 +1,31 @@
+use gpui::{div, px, Div, ParentElement, Render, SharedString, Styled, ViewContext};
+use theme2::ActiveTheme;
+
+#[derive(Clone, Debug)]
+pub struct TextTooltip {
+    title: SharedString,
+}
+
+impl TextTooltip {
+    pub fn new(str: SharedString) -> Self {
+        Self { title: str }
+    }
+}
+
+impl Render for TextTooltip {
+    type Element = Div<Self>;
+
+    fn render(&mut self, cx: &mut ViewContext<Self>) -> Self::Element {
+        let theme = cx.theme();
+        div()
+            .bg(theme.colors().background)
+            .rounded(px(8.))
+            .border()
+            .font("Zed Sans")
+            .border_color(theme.colors().border)
+            .text_color(theme.colors().text)
+            .pl_2()
+            .pr_2()
+            .child(self.title.clone())
+    }
+}

crates/ui2/src/elements.rs 🔗

@@ -1,21 +0,0 @@
-mod avatar;
-mod button;
-mod details;
-mod icon;
-mod indicator;
-mod input;
-mod label;
-mod player;
-mod stack;
-mod tool_divider;
-
-pub use avatar::*;
-pub use button::*;
-pub use details::*;
-pub use icon::*;
-pub use indicator::*;
-pub use input::*;
-pub use label::*;
-pub use player::*;
-pub use stack::*;
-pub use tool_divider::*;

crates/ui2/src/lib.rs 🔗

@@ -7,28 +7,25 @@
 //! This crate is still a work in progress. The initial primitives and components are built for getting all the UI on the screen,
 //! much of the state and functionality is mocked or hard codeded, and performance has not been a focus.
 //!
-//! Expect some inconsistencies from component to component as we work out the best way to build these components.
-//!
-//! ## Design Philosophy
-//!
-//! Work in Progress!
-//!
 
+#![doc = include_str!("../docs/hello-world.md")]
+#![doc = include_str!("../docs/building-ui.md")]
+#![doc = include_str!("../docs/todo.md")]
 // TODO: Fix warnings instead of supressing.
 #![allow(dead_code, unused_variables)]
 
 mod components;
-mod elements;
 mod elevation;
 pub mod prelude;
 pub mod settings;
 mod static_data;
+mod to_extract;
 pub mod utils;
 
 pub use components::*;
-pub use elements::*;
 pub use prelude::*;
 pub use static_data::*;
+pub use to_extract::*;
 
 // This needs to be fully qualified with `crate::` otherwise we get a panic
 // at:

crates/ui2/src/prelude.rs 🔗

@@ -1,4 +1,4 @@
-pub use gpui2::{
+pub use gpui::{
     div, Component, Element, ElementId, ParentElement, SharedString, StatefulInteractive,
     StatelessInteractive, Styled, ViewContext, WindowContext,
 };
@@ -7,27 +7,9 @@ pub use crate::elevation::*;
 pub use crate::ButtonVariant;
 pub use theme2::ActiveTheme;
 
-use gpui2::Hsla;
+use gpui::Hsla;
 use strum::EnumIter;
 
-/// Represents a person with a Zed account's public profile.
-/// All data in this struct should be considered public.
-pub struct PublicActor {
-    pub username: SharedString,
-    pub avatar: SharedString,
-    pub is_contact: bool,
-}
-
-impl PublicActor {
-    pub fn new(username: impl Into<SharedString>, avatar: impl Into<SharedString>) -> Self {
-        Self {
-            username: username.into(),
-            avatar: avatar.into(),
-            is_contact: false,
-        }
-    }
-}
-
 #[derive(Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, EnumIter)]
 pub enum FileSystemStatus {
     #[default]
@@ -172,68 +154,19 @@ impl InteractionState {
     }
 }
 
-#[derive(Default, PartialEq)]
-pub enum SelectedState {
+#[derive(Debug, Default, PartialEq, Eq, Hash, Clone, Copy)]
+pub enum Selection {
     #[default]
     Unselected,
-    PartiallySelected,
+    Indeterminate,
     Selected,
 }
 
-#[derive(Default, Debug, Copy, Clone, PartialEq, Eq)]
-pub enum Toggleable {
-    Toggleable(ToggleState),
-    #[default]
-    NotToggleable,
-}
-
-impl Toggleable {
-    pub fn is_toggled(&self) -> bool {
+impl Selection {
+    pub fn inverse(&self) -> Self {
         match self {
-            Self::Toggleable(ToggleState::Toggled) => true,
-            _ => false,
-        }
-    }
-}
-
-impl From<ToggleState> for Toggleable {
-    fn from(state: ToggleState) -> Self {
-        Self::Toggleable(state)
-    }
-}
-
-#[derive(Default, Debug, Copy, Clone, PartialEq, Eq)]
-pub enum ToggleState {
-    /// The "on" state of a toggleable element.
-    ///
-    /// Example:
-    ///     - A collasable list that is currently expanded
-    ///     - A toggle button that is currently on.
-    Toggled,
-    /// The "off" state of a toggleable element.
-    ///
-    /// Example:
-    ///     - A collasable list that is currently collapsed
-    ///     - A toggle button that is currently off.
-    #[default]
-    NotToggled,
-}
-
-impl From<Toggleable> for ToggleState {
-    fn from(toggleable: Toggleable) -> Self {
-        match toggleable {
-            Toggleable::Toggleable(state) => state,
-            Toggleable::NotToggleable => ToggleState::NotToggled,
-        }
-    }
-}
-
-impl From<bool> for ToggleState {
-    fn from(toggled: bool) -> Self {
-        if toggled {
-            ToggleState::Toggled
-        } else {
-            ToggleState::NotToggled
+            Self::Unselected | Self::Indeterminate => Self::Selected,
+            Self::Selected => Self::Unselected,
         }
     }
 }

crates/ui2/src/settings.rs 🔗

@@ -1,6 +1,6 @@
 use std::ops::Deref;
 
-use gpui2::{rems, AbsoluteLength, AppContext, WindowContext};
+use gpui::{rems, AbsoluteLength, AppContext, WindowContext};
 
 use crate::prelude::*;
 

crates/ui2/src/static_data.rs 🔗

@@ -3,17 +3,17 @@ use std::str::FromStr;
 use std::sync::Arc;
 
 use chrono::DateTime;
-use gpui2::{AppContext, ViewContext};
+use gpui::{AppContext, ViewContext};
 use rand::Rng;
 use theme2::ActiveTheme;
 
+use crate::HighlightedText;
 use crate::{
     Buffer, BufferRow, BufferRows, Button, EditorPane, FileSystemStatus, GitStatus,
-    HighlightedLine, Icon, Keybinding, Label, LabelColor, ListEntry, ListEntrySize, ListSubHeader,
-    Livestream, MicStatus, ModifierKeys, Notification, PaletteItem, Player, PlayerCallStatus,
-    PlayerWithCallStatus, PublicActor, ScreenShareStatus, Symbol, Tab, ToggleState, VideoStatus,
+    HighlightedLine, Icon, Keybinding, Label, LabelColor, ListEntry, ListEntrySize, Livestream,
+    MicStatus, ModifierKeys, Notification, PaletteItem, Player, PlayerCallStatus,
+    PlayerWithCallStatus, PublicPlayer, ScreenShareStatus, Symbol, Tab, Toggle, VideoStatus,
 };
-use crate::{HighlightedText, ListDetailsEntry};
 use crate::{ListItem, NotificationAction};
 
 pub fn static_tabs_example() -> Vec<Tab> {
@@ -345,7 +345,7 @@ pub fn static_new_notification_items_2<V: 'static>() -> Vec<Notification<V>> {
             DateTime::parse_from_rfc3339("2023-11-02T12:09:07Z")
                 .unwrap()
                 .naive_local(),
-            PublicActor::new("as-cii", "http://github.com/as-cii.png?s=50"),
+            PublicPlayer::new("as-cii", "http://github.com/as-cii.png?s=50"),
             [
                 NotificationAction::new(
                     Button::new("Decline"),
@@ -374,7 +374,7 @@ pub fn static_new_notification_items_2<V: 'static>() -> Vec<Notification<V>> {
             DateTime::parse_from_rfc3339("2023-11-01T12:09:07Z")
                 .unwrap()
                 .naive_local(),
-            PublicActor::new("as-cii", "http://github.com/as-cii.png?s=50"),
+            PublicPlayer::new("as-cii", "http://github.com/as-cii.png?s=50"),
             [
                 NotificationAction::new(
                     Button::new("Decline"),
@@ -403,7 +403,7 @@ pub fn static_new_notification_items_2<V: 'static>() -> Vec<Notification<V>> {
             DateTime::parse_from_rfc3339("2022-10-25T12:09:07Z")
                 .unwrap()
                 .naive_local(),
-            PublicActor::new("as-cii", "http://github.com/as-cii.png?s=50"),
+            PublicPlayer::new("as-cii", "http://github.com/as-cii.png?s=50"),
             [
                 NotificationAction::new(
                     Button::new("Decline"),
@@ -432,7 +432,7 @@ pub fn static_new_notification_items_2<V: 'static>() -> Vec<Notification<V>> {
             DateTime::parse_from_rfc3339("2021-10-12T12:09:07Z")
                 .unwrap()
                 .naive_local(),
-            PublicActor::new("as-cii", "http://github.com/as-cii.png?s=50"),
+            PublicPlayer::new("as-cii", "http://github.com/as-cii.png?s=50"),
             [
                 NotificationAction::new(
                     Button::new("Decline"),
@@ -461,7 +461,7 @@ pub fn static_new_notification_items_2<V: 'static>() -> Vec<Notification<V>> {
             DateTime::parse_from_rfc3339("1969-07-20T00:00:00Z")
                 .unwrap()
                 .naive_local(),
-            PublicActor::new("as-cii", "http://github.com/as-cii.png?s=50"),
+            PublicPlayer::new("as-cii", "http://github.com/as-cii.png?s=50"),
             [
                 NotificationAction::new(
                     Button::new("Decline"),
@@ -478,89 +478,12 @@ pub fn static_new_notification_items_2<V: 'static>() -> Vec<Notification<V>> {
     ]
 }
 
-pub fn static_new_notification_items<V: 'static>() -> Vec<ListItem<V>> {
-    vec![
-        ListItem::Header(ListSubHeader::new("New")),
-        ListItem::Details(
-            ListDetailsEntry::new("maxdeviant invited you to join a stream in #design.")
-                .meta("4 people in stream."),
-        ),
-        ListItem::Details(ListDetailsEntry::new(
-            "nathansobo accepted your contact request.",
-        )),
-        ListItem::Header(ListSubHeader::new("Earlier")),
-        ListItem::Details(
-            ListDetailsEntry::new("mikaylamaki added you as a contact.").actions(vec![
-                Button::new("Decline"),
-                Button::new("Accept").variant(crate::ButtonVariant::Filled),
-            ]),
-        ),
-        ListItem::Details(
-            ListDetailsEntry::new("maxdeviant invited you to a stream in #design.")
-                .seen(true)
-                .meta("This stream has ended."),
-        ),
-        ListItem::Details(ListDetailsEntry::new(
-            "as-cii accepted your contact request.",
-        )),
-        ListItem::Details(
-            ListDetailsEntry::new("You were added as an admin on the #gpui2 channel.").seen(true),
-        ),
-        ListItem::Details(ListDetailsEntry::new(
-            "osiewicz accepted your contact request.",
-        )),
-        ListItem::Details(ListDetailsEntry::new(
-            "ConradIrwin accepted your contact request.",
-        )),
-        ListItem::Details(
-            ListDetailsEntry::new("nathansobo invited you to a stream in #gpui2.")
-                .seen(true)
-                .meta("This stream has ended."),
-        ),
-        ListItem::Details(ListDetailsEntry::new(
-            "nathansobo accepted your contact request.",
-        )),
-        ListItem::Header(ListSubHeader::new("Earlier")),
-        ListItem::Details(
-            ListDetailsEntry::new("mikaylamaki added you as a contact.").actions(vec![
-                Button::new("Decline"),
-                Button::new("Accept").variant(crate::ButtonVariant::Filled),
-            ]),
-        ),
-        ListItem::Details(
-            ListDetailsEntry::new("maxdeviant invited you to a stream in #design.")
-                .seen(true)
-                .meta("This stream has ended."),
-        ),
-        ListItem::Details(ListDetailsEntry::new(
-            "as-cii accepted your contact request.",
-        )),
-        ListItem::Details(
-            ListDetailsEntry::new("You were added as an admin on the #gpui2 channel.").seen(true),
-        ),
-        ListItem::Details(ListDetailsEntry::new(
-            "osiewicz accepted your contact request.",
-        )),
-        ListItem::Details(ListDetailsEntry::new(
-            "ConradIrwin accepted your contact request.",
-        )),
-        ListItem::Details(
-            ListDetailsEntry::new("nathansobo invited you to a stream in #gpui2.")
-                .seen(true)
-                .meta("This stream has ended."),
-        ),
-    ]
-    .into_iter()
-    .map(From::from)
-    .collect()
-}
-
-pub fn static_project_panel_project_items<V: 'static>() -> Vec<ListItem<V>> {
+pub fn static_project_panel_project_items() -> Vec<ListItem> {
     vec![
         ListEntry::new(Label::new("zed"))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(0)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new(".cargo"))
             .left_icon(Icon::Folder.into())
             .indent_level(1),
@@ -579,14 +502,14 @@ pub fn static_project_panel_project_items<V: 'static>() -> Vec<ListItem<V>> {
         ListEntry::new(Label::new("assets"))
             .left_icon(Icon::Folder.into())
             .indent_level(1)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("cargo-target").color(LabelColor::Hidden))
             .left_icon(Icon::Folder.into())
             .indent_level(1),
         ListEntry::new(Label::new("crates"))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(1)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("activity_indicator"))
             .left_icon(Icon::Folder.into())
             .indent_level(2),
@@ -608,38 +531,38 @@ pub fn static_project_panel_project_items<V: 'static>() -> Vec<ListItem<V>> {
         ListEntry::new(Label::new("sqlez").color(LabelColor::Modified))
             .left_icon(Icon::Folder.into())
             .indent_level(2)
-            .toggle(ToggleState::NotToggled),
+            .toggle(Toggle::Toggled(false)),
         ListEntry::new(Label::new("gpui2"))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(2)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("src"))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(3)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("derive_element.rs"))
             .left_icon(Icon::FileRust.into())
             .indent_level(4),
         ListEntry::new(Label::new("storybook").color(LabelColor::Modified))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(1)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("docs").color(LabelColor::Default))
             .left_icon(Icon::Folder.into())
             .indent_level(2)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("src").color(LabelColor::Modified))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(3)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("ui").color(LabelColor::Modified))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(4)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("component").color(LabelColor::Created))
             .left_icon(Icon::FolderOpen.into())
             .indent_level(5)
-            .toggle(ToggleState::Toggled),
+            .toggle(Toggle::Toggled(true)),
         ListEntry::new(Label::new("facepile.rs").color(LabelColor::Default))
             .left_icon(Icon::FileRust.into())
             .indent_level(6),
@@ -682,7 +605,7 @@ pub fn static_project_panel_project_items<V: 'static>() -> Vec<ListItem<V>> {
     .collect()
 }
 
-pub fn static_project_panel_single_items<V: 'static>() -> Vec<ListItem<V>> {
+pub fn static_project_panel_single_items() -> Vec<ListItem> {
     vec![
         ListEntry::new(Label::new("todo.md"))
             .left_icon(Icon::FileDoc.into())
@@ -699,7 +622,7 @@ pub fn static_project_panel_single_items<V: 'static>() -> Vec<ListItem<V>> {
     .collect()
 }
 
-pub fn static_collab_panel_current_call<V: 'static>() -> Vec<ListItem<V>> {
+pub fn static_collab_panel_current_call() -> Vec<ListItem> {
     vec![
         ListEntry::new(Label::new("as-cii")).left_avatar("http://github.com/as-cii.png?s=50"),
         ListEntry::new(Label::new("nathansobo"))
@@ -712,7 +635,7 @@ pub fn static_collab_panel_current_call<V: 'static>() -> Vec<ListItem<V>> {
     .collect()
 }
 
-pub fn static_collab_panel_channels<V: 'static>() -> Vec<ListItem<V>> {
+pub fn static_collab_panel_channels() -> Vec<ListItem> {
     vec![
         ListEntry::new(Label::new("zed"))
             .left_icon(Icon::Hash.into())

crates/ui2/src/to_extract.rs 🔗

@@ -0,0 +1,47 @@
+mod assistant_panel;
+mod breadcrumb;
+mod buffer;
+mod buffer_search;
+mod chat_panel;
+mod collab_panel;
+mod command_palette;
+mod copilot;
+mod editor_pane;
+mod language_selector;
+mod multi_buffer;
+mod notifications_panel;
+mod panes;
+mod project_panel;
+mod recent_projects;
+mod status_bar;
+mod tab_bar;
+mod terminal;
+mod theme_selector;
+mod title_bar;
+mod toolbar;
+mod traffic_lights;
+mod workspace;
+
+pub use assistant_panel::*;
+pub use breadcrumb::*;
+pub use buffer::*;
+pub use buffer_search::*;
+pub use chat_panel::*;
+pub use collab_panel::*;
+pub use command_palette::*;
+pub use copilot::*;
+pub use editor_pane::*;
+pub use language_selector::*;
+pub use multi_buffer::*;
+pub use notifications_panel::*;
+pub use panes::*;
+pub use project_panel::*;
+pub use recent_projects::*;
+pub use status_bar::*;
+pub use tab_bar::*;
+pub use terminal::*;
+pub use theme_selector::*;
+pub use title_bar::*;
+pub use toolbar::*;
+pub use traffic_lights::*;
+pub use workspace::*;

crates/ui2/src/components/assistant_panel.rs → crates/ui2/src/to_extract/assistant_panel.rs 🔗

@@ -1,6 +1,6 @@
 use crate::prelude::*;
 use crate::{Icon, IconButton, Label, Panel, PanelSide};
-use gpui2::{rems, AbsoluteLength};
+use gpui::{rems, AbsoluteLength};
 
 #[derive(Component)]
 pub struct AssistantPanel {
@@ -77,7 +77,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
     pub struct AssistantPanelStory;
 
     impl Render for AssistantPanelStory {

crates/ui2/src/components/breadcrumb.rs → crates/ui2/src/to_extract/breadcrumb.rs 🔗

@@ -2,7 +2,7 @@ use std::path::PathBuf;
 
 use crate::prelude::*;
 use crate::{h_stack, HighlightedText};
-use gpui2::Div;
+use gpui::Div;
 
 #[derive(Clone)]
 pub struct Symbol(pub Vec<HighlightedText>);
@@ -73,7 +73,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::Render;
+    use gpui::Render;
     use std::str::FromStr;
 
     pub struct BreadcrumbStory;

crates/ui2/src/components/buffer.rs → crates/ui2/src/to_extract/buffer.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::{Hsla, WindowContext};
+use gpui::{Hsla, WindowContext};
 
 use crate::prelude::*;
 use crate::{h_stack, v_stack, Icon, IconElement};
@@ -156,7 +156,7 @@ impl Buffer {
 
     fn render_row<V: 'static>(row: BufferRow, cx: &WindowContext) -> impl Component<V> {
         let line_background = if row.current {
-            cx.theme().colors().editor_active_line
+            cx.theme().colors().editor_active_line_background
         } else {
             cx.theme().styles.system.transparent
         };
@@ -220,7 +220,7 @@ impl Buffer {
             .flex_1()
             .w_full()
             .h_full()
-            .bg(cx.theme().colors().editor)
+            .bg(cx.theme().colors().editor_background)
             .children(rows)
     }
 }
@@ -235,7 +235,7 @@ mod stories {
         empty_buffer_example, hello_world_rust_buffer_example,
         hello_world_rust_buffer_with_status_example, Story,
     };
-    use gpui2::{rems, Div, Render};
+    use gpui::{rems, Div, Render};
 
     pub struct BufferStory;
 

crates/ui2/src/components/buffer_search.rs → crates/ui2/src/to_extract/buffer_search.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::{Div, Render, View, VisualContext};
+use gpui::{Div, Render, View, VisualContext};
 
 use crate::prelude::*;
 use crate::{h_stack, Icon, IconButton, IconColor, Input};
@@ -30,14 +30,17 @@ impl Render for BufferSearch {
     type Element = Div<Self>;
 
     fn render(&mut self, cx: &mut ViewContext<Self>) -> Div<Self> {
-        h_stack().bg(cx.theme().colors().toolbar).p_2().child(
-            h_stack().child(Input::new("Search")).child(
-                IconButton::<Self>::new("replace", Icon::Replace)
-                    .when(self.is_replace_open, |this| this.color(IconColor::Accent))
-                    .on_click(|buffer_search, cx| {
-                        buffer_search.toggle_replace(cx);
-                    }),
-            ),
-        )
+        h_stack()
+            .bg(cx.theme().colors().toolbar_background)
+            .p_2()
+            .child(
+                h_stack().child(Input::new("Search")).child(
+                    IconButton::<Self>::new("replace", Icon::Replace)
+                        .when(self.is_replace_open, |this| this.color(IconColor::Accent))
+                        .on_click(|buffer_search, cx| {
+                            buffer_search.toggle_replace(cx);
+                        }),
+                ),
+            )
     }
 }

crates/ui2/src/components/chat_panel.rs → crates/ui2/src/to_extract/chat_panel.rs 🔗

@@ -108,7 +108,7 @@ pub use stories::*;
 #[cfg(feature = "stories")]
 mod stories {
     use chrono::DateTime;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::{Panel, Story};
 

crates/ui2/src/components/collab_panel.rs → crates/ui2/src/to_extract/collab_panel.rs 🔗

@@ -1,7 +1,6 @@
-use crate::prelude::*;
+use crate::{prelude::*, Toggle};
 use crate::{
-    static_collab_panel_channels, static_collab_panel_current_call, v_stack, Icon, List,
-    ListHeader, ToggleState,
+    static_collab_panel_channels, static_collab_panel_current_call, v_stack, Icon, List, ListHeader,
 };
 
 #[derive(Component)]
@@ -18,7 +17,7 @@ impl CollabPanel {
         v_stack()
             .id(self.id.clone())
             .h_full()
-            .bg(cx.theme().colors().surface)
+            .bg(cx.theme().colors().surface_background)
             .child(
                 v_stack()
                     .id("crdb")
@@ -34,17 +33,17 @@ impl CollabPanel {
                                     .header(
                                         ListHeader::new("CRDB")
                                             .left_icon(Icon::Hash.into())
-                                            .toggle(ToggleState::Toggled),
+                                            .toggle(Toggle::Toggled(true)),
                                     )
-                                    .toggle(ToggleState::Toggled),
+                                    .toggle(Toggle::Toggled(true)),
                             ),
                     )
                     .child(
                         v_stack().id("channels").py_1().child(
                             List::new(static_collab_panel_channels())
-                                .header(ListHeader::new("CHANNELS").toggle(ToggleState::Toggled))
+                                .header(ListHeader::new("CHANNELS").toggle(Toggle::Toggled(true)))
                                 .empty_message("No channels yet. Add a channel to get started.")
-                                .toggle(ToggleState::Toggled),
+                                .toggle(Toggle::Toggled(true)),
                         ),
                     )
                     .child(
@@ -52,9 +51,9 @@ impl CollabPanel {
                             List::new(static_collab_panel_current_call())
                                 .header(
                                     ListHeader::new("CONTACTS – ONLINE")
-                                        .toggle(ToggleState::Toggled),
+                                        .toggle(Toggle::Toggled(true)),
                                 )
-                                .toggle(ToggleState::Toggled),
+                                .toggle(Toggle::Toggled(true)),
                         ),
                     )
                     .child(
@@ -62,9 +61,9 @@ impl CollabPanel {
                             List::new(static_collab_panel_current_call())
                                 .header(
                                     ListHeader::new("CONTACTS – OFFLINE")
-                                        .toggle(ToggleState::NotToggled),
+                                        .toggle(Toggle::Toggled(false)),
                                 )
-                                .toggle(ToggleState::NotToggled),
+                                .toggle(Toggle::Toggled(false)),
                         ),
                     ),
             )
@@ -93,7 +92,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct CollabPanelStory;
 

crates/ui2/src/components/command_palette.rs → crates/ui2/src/to_extract/command_palette.rs 🔗

@@ -27,7 +27,7 @@ pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::Story;
 

crates/ui2/src/components/copilot.rs → crates/ui2/src/to_extract/copilot.rs 🔗

@@ -25,7 +25,7 @@ pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::Story;
 

crates/ui2/src/components/editor_pane.rs → crates/ui2/src/to_extract/editor_pane.rs 🔗

@@ -1,6 +1,6 @@
 use std::path::PathBuf;
 
-use gpui2::{Div, Render, View, VisualContext};
+use gpui::{Div, Render, View, VisualContext};
 
 use crate::prelude::*;
 use crate::{

crates/ui2/src/components/language_selector.rs → crates/ui2/src/to_extract/language_selector.rs 🔗

@@ -40,7 +40,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct LanguageSelectorStory;
 

crates/ui2/src/components/multi_buffer.rs → crates/ui2/src/to_extract/multi_buffer.rs 🔗

@@ -24,7 +24,7 @@ impl MultiBuffer {
                             .items_center()
                             .justify_between()
                             .p_4()
-                            .bg(cx.theme().colors().editor_subheader)
+                            .bg(cx.theme().colors().editor_subheader_background)
                             .child(Label::new("main.rs"))
                             .child(IconButton::new("arrow_up_right", Icon::ArrowUpRight)),
                     )
@@ -40,7 +40,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{hello_world_rust_buffer_example, Story};
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct MultiBufferStory;
 

crates/ui2/src/components/notifications_panel.rs → crates/ui2/src/to_extract/notifications_panel.rs 🔗

@@ -1,8 +1,8 @@
 use crate::utils::naive_format_distance_from_now;
 use crate::{
-    h_stack, prelude::*, static_new_notification_items_2, v_stack, Avatar, Button, Icon,
-    IconButton, IconElement, Label, LabelColor, LineHeightStyle, ListHeaderMeta, ListSeparator,
-    UnreadIndicator,
+    h_stack, prelude::*, static_new_notification_items_2, v_stack, Avatar, ButtonOrIconButton,
+    Icon, IconElement, Label, LabelColor, LineHeightStyle, ListHeaderMeta, ListSeparator,
+    PublicPlayer, UnreadIndicator,
 };
 use crate::{ClickHandler, ListHeader};
 
@@ -22,7 +22,7 @@ impl NotificationsPanel {
             .flex()
             .flex_col()
             .size_full()
-            .bg(cx.theme().colors().surface)
+            .bg(cx.theme().colors().surface_background)
             .child(
                 ListHeader::new("Notifications").meta(Some(ListHeaderMeta::Tools(vec![
                     Icon::AtSign,
@@ -43,7 +43,7 @@ impl NotificationsPanel {
                             .p_1()
                             // TODO: Add cursor style
                             // .cursor(Cursor::IBeam)
-                            .bg(cx.theme().colors().element)
+                            .bg(cx.theme().colors().element_background)
                             .border()
                             .border_color(cx.theme().colors().border_variant)
                             .child(
@@ -57,23 +57,6 @@ impl NotificationsPanel {
     }
 }
 
-pub enum ButtonOrIconButton<V: 'static> {
-    Button(Button<V>),
-    IconButton(IconButton<V>),
-}
-
-impl<V: 'static> From<Button<V>> for ButtonOrIconButton<V> {
-    fn from(value: Button<V>) -> Self {
-        Self::Button(value)
-    }
-}
-
-impl<V: 'static> From<IconButton<V>> for ButtonOrIconButton<V> {
-    fn from(value: IconButton<V>) -> Self {
-        Self::IconButton(value)
-    }
-}
-
 pub struct NotificationAction<V: 'static> {
     button: ButtonOrIconButton<V>,
     tooltip: SharedString,
@@ -102,7 +85,7 @@ impl<V: 'static> NotificationAction<V> {
 }
 
 pub enum ActorOrIcon {
-    Actor(PublicActor),
+    Actor(PublicPlayer),
     Icon(Icon),
 }
 
@@ -171,7 +154,7 @@ impl<V> Notification<V> {
         id: impl Into<ElementId>,
         message: impl Into<SharedString>,
         date_received: NaiveDateTime,
-        actor: PublicActor,
+        actor: PublicPlayer,
         click_action: ClickHandler<V>,
     ) -> Self {
         Self::new(
@@ -210,7 +193,7 @@ impl<V> Notification<V> {
         id: impl Into<ElementId>,
         message: impl Into<SharedString>,
         date_received: NaiveDateTime,
-        actor: PublicActor,
+        actor: PublicPlayer,
         actions: [NotificationAction<V>; 2],
     ) -> Self {
         Self::new(
@@ -362,7 +345,7 @@ impl<V> Notification<V> {
 }
 
 use chrono::NaiveDateTime;
-use gpui2::{px, Styled};
+use gpui::{px, Styled};
 #[cfg(feature = "stories")]
 pub use stories::*;
 
@@ -370,7 +353,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{Panel, Story};
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct NotificationsPanelStory;
 

crates/ui2/src/components/panes.rs → crates/ui2/src/to_extract/panes.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::{hsla, red, AnyElement, ElementId, ExternalPaths, Hsla, Length, Size, View};
+use gpui::{hsla, red, AnyElement, ElementId, ExternalPaths, Hsla, Length, Size, View};
 use smallvec::SmallVec;
 
 use crate::prelude::*;
@@ -113,7 +113,7 @@ impl<V: 'static> PaneGroup<V> {
                 .gap_px()
                 .w_full()
                 .h_full()
-                .bg(cx.theme().colors().editor)
+                .bg(cx.theme().colors().editor_background)
                 .children(self.groups.into_iter().map(|group| group.render(view, cx)));
 
             if self.split_direction == SplitDirection::Horizontal {

crates/ui2/src/components/project_panel.rs → crates/ui2/src/to_extract/project_panel.rs 🔗

@@ -18,9 +18,8 @@ impl ProjectPanel {
             .id(self.id.clone())
             .flex()
             .flex_col()
-            .w_full()
-            .h_full()
-            .bg(cx.theme().colors().surface)
+            .size_full()
+            .bg(cx.theme().colors().surface_background)
             .child(
                 div()
                     .id("project-panel-contents")
@@ -30,15 +29,13 @@ impl ProjectPanel {
                     .overflow_y_scroll()
                     .child(
                         List::new(static_project_panel_single_items())
-                            .header(ListHeader::new("FILES").toggle(ToggleState::Toggled))
-                            .empty_message("No files in directory")
-                            .toggle(ToggleState::Toggled),
+                            .header(ListHeader::new("FILES"))
+                            .empty_message("No files in directory"),
                     )
                     .child(
                         List::new(static_project_panel_project_items())
-                            .header(ListHeader::new("PROJECT").toggle(ToggleState::Toggled))
-                            .empty_message("No folders in directory")
-                            .toggle(ToggleState::Toggled),
+                            .header(ListHeader::new("PROJECT"))
+                            .empty_message("No folders in directory"),
                     ),
             )
             .child(
@@ -49,7 +46,7 @@ impl ProjectPanel {
     }
 }
 
-use gpui2::ElementId;
+use gpui::ElementId;
 #[cfg(feature = "stories")]
 pub use stories::*;
 
@@ -57,7 +54,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::{Panel, Story};
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct ProjectPanelStory;
 

crates/ui2/src/components/recent_projects.rs → crates/ui2/src/to_extract/recent_projects.rs 🔗

@@ -36,7 +36,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct RecentProjectsStory;
 

crates/ui2/src/components/status_bar.rs → crates/ui2/src/to_extract/status_bar.rs 🔗

@@ -93,7 +93,7 @@ impl StatusBar {
             .items_center()
             .justify_between()
             .w_full()
-            .bg(cx.theme().colors().status_bar)
+            .bg(cx.theme().colors().status_bar_background)
             .child(self.left_tools(view, cx))
             .child(self.right_tools(view, cx))
     }

crates/ui2/src/components/tab_bar.rs → crates/ui2/src/to_extract/tab_bar.rs 🔗

@@ -31,7 +31,7 @@ impl TabBar {
             .id(self.id.clone())
             .w_full()
             .flex()
-            .bg(cx.theme().colors().tab_bar)
+            .bg(cx.theme().colors().tab_bar_background)
             // Left Side
             .child(
                 div()
@@ -92,7 +92,7 @@ impl TabBar {
     }
 }
 
-use gpui2::ElementId;
+use gpui::ElementId;
 #[cfg(feature = "stories")]
 pub use stories::*;
 
@@ -100,7 +100,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     pub struct TabBarStory;
 

crates/ui2/src/components/terminal.rs → crates/ui2/src/to_extract/terminal.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::{relative, rems, Size};
+use gpui::{relative, rems, Size};
 
 use crate::prelude::*;
 use crate::{Icon, IconButton, Pane, Tab};
@@ -24,7 +24,7 @@ impl Terminal {
                 div()
                     .w_full()
                     .flex()
-                    .bg(cx.theme().colors().surface)
+                    .bg(cx.theme().colors().surface_background)
                     .child(
                         div().px_1().flex().flex_none().gap_2().child(
                             div()
@@ -83,7 +83,7 @@ pub use stories::*;
 mod stories {
     use super::*;
     use crate::Story;
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
     pub struct TerminalStory;
 
     impl Render for TerminalStory {

crates/ui2/src/components/theme_selector.rs → crates/ui2/src/to_extract/theme_selector.rs 🔗

@@ -39,7 +39,7 @@ pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::Story;
 

crates/ui2/src/components/title_bar.rs → crates/ui2/src/to_extract/title_bar.rs 🔗

@@ -1,7 +1,7 @@
 use std::sync::atomic::AtomicBool;
 use std::sync::Arc;
 
-use gpui2::{Div, Render, View, VisualContext};
+use gpui::{Div, Render, View, VisualContext};
 
 use crate::prelude::*;
 use crate::settings::user_settings;

crates/ui2/src/components/toolbar.rs → crates/ui2/src/to_extract/toolbar.rs 🔗

@@ -1,4 +1,4 @@
-use gpui2::AnyElement;
+use gpui::AnyElement;
 use smallvec::SmallVec;
 
 use crate::prelude::*;
@@ -56,7 +56,7 @@ impl<V: 'static> Toolbar<V> {
 
     fn render(self, _view: &mut V, cx: &mut ViewContext<V>) -> impl Component<V> {
         div()
-            .bg(cx.theme().colors().toolbar)
+            .bg(cx.theme().colors().toolbar_background)
             .p_2()
             .flex()
             .justify_between()
@@ -73,7 +73,7 @@ mod stories {
     use std::path::PathBuf;
     use std::str::FromStr;
 
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::{Breadcrumb, HighlightedText, Icon, IconButton, Story, Symbol};
 

crates/ui2/src/components/traffic_lights.rs → crates/ui2/src/to_extract/traffic_lights.rs 🔗

@@ -28,7 +28,7 @@ impl TrafficLight {
             (true, TrafficLightColor::Red) => system_colors.mac_os_traffic_light_red,
             (true, TrafficLightColor::Yellow) => system_colors.mac_os_traffic_light_yellow,
             (true, TrafficLightColor::Green) => system_colors.mac_os_traffic_light_green,
-            (false, _) => cx.theme().colors().element,
+            (false, _) => cx.theme().colors().element_background,
         };
 
         div().w_3().h_3().rounded_full().bg(fill)
@@ -77,7 +77,7 @@ pub use stories::*;
 
 #[cfg(feature = "stories")]
 mod stories {
-    use gpui2::{Div, Render};
+    use gpui::{Div, Render};
 
     use crate::Story;
 

crates/ui2/src/components/workspace.rs → crates/ui2/src/to_extract/workspace.rs 🔗

@@ -1,14 +1,14 @@
 use std::sync::Arc;
 
 use chrono::DateTime;
-use gpui2::{px, relative, Div, Render, Size, View, VisualContext};
+use gpui::{px, relative, Div, Render, Size, View, VisualContext};
 use settings2::Settings;
 use theme2::ThemeSettings;
 
 use crate::prelude::*;
 use crate::{
-    static_livestream, v_stack, AssistantPanel, Button, ChatMessage, ChatPanel, CollabPanel,
-    EditorPane, Label, LanguageSelector, NotificationsPanel, Pane, PaneGroup, Panel,
+    static_livestream, v_stack, AssistantPanel, Button, ChatMessage, ChatPanel, Checkbox,
+    CollabPanel, EditorPane, Label, LanguageSelector, NotificationsPanel, Pane, PaneGroup, Panel,
     PanelAllowedSides, PanelSide, ProjectPanel, SplitDirection, StatusBar, Terminal, TitleBar,
     Toast, ToastOrigin,
 };
@@ -42,6 +42,7 @@ pub struct Workspace {
     show_terminal: bool,
     show_debug: bool,
     show_language_selector: bool,
+    test_checkbox_selection: Selection,
     debug: Gpui2UiDebug,
 }
 
@@ -58,6 +59,7 @@ impl Workspace {
             show_language_selector: false,
             show_debug: false,
             show_notifications_panel: true,
+            test_checkbox_selection: Selection::Unselected,
             debug: Gpui2UiDebug::default(),
         }
     }
@@ -217,6 +219,23 @@ impl Render for Workspace {
             .text_color(cx.theme().colors().text)
             .bg(cx.theme().colors().background)
             .child(self.title_bar.clone())
+            .child(
+                div()
+                    .absolute()
+                    .top_12()
+                    .left_12()
+                    .z_index(99)
+                    .bg(cx.theme().colors().background)
+                    .child(
+                        Checkbox::new("test_checkbox", self.test_checkbox_selection).on_click(
+                            |selection, workspace: &mut Workspace, cx| {
+                                workspace.test_checkbox_selection = selection;
+
+                                cx.notify();
+                            },
+                        ),
+                    ),
+            )
             .child(
                 div()
                     .flex_1()
@@ -354,7 +373,7 @@ pub use stories::*;
 #[cfg(feature = "stories")]
 mod stories {
     use super::*;
-    use gpui2::VisualContext;
+    use gpui::VisualContext;
 
     pub struct WorkspaceStory {
         workspace: View<Workspace>,

crates/workspace2/src/pane.rs 🔗

@@ -26,7 +26,7 @@ use std::{
     },
 };
 use ui::v_stack;
-use ui::{prelude::*, Icon, IconButton, IconColor, IconElement};
+use ui::{prelude::*, Icon, IconButton, IconColor, IconElement, TextTooltip};
 use util::truncate_and_remove_front;
 
 #[derive(PartialEq, Clone, Copy, Deserialize, Debug)]
@@ -1361,25 +1361,29 @@ impl Pane {
         let label = item.tab_content(Some(detail), cx);
         let close_icon = || {
             let id = item.id();
+
             div()
                 .id(item.id())
-                .child(IconElement::new(Icon::Close).color(IconColor::Muted))
-                .on_click(move |pane: &mut Self, _, cx| {
-                    pane.close_item_by_id(id, SaveIntent::Close, cx)
-                        .detach_and_log_err(cx);
-                })
+                .invisible()
+                .group_hover("", |style| style.visible())
+                .child(IconButton::new("close_tab", Icon::Close).on_click(
+                    move |pane: &mut Self, cx| {
+                        pane.close_item_by_id(id, SaveIntent::Close, cx)
+                            .detach_and_log_err(cx);
+                    },
+                ))
         };
 
         let (text_color, tab_bg, tab_hover_bg, tab_active_bg) = match ix == self.active_item_index {
             false => (
                 cx.theme().colors().text_muted,
-                cx.theme().colors().tab_inactive,
+                cx.theme().colors().tab_inactive_background,
                 cx.theme().colors().ghost_element_hover,
                 cx.theme().colors().ghost_element_active,
             ),
             true => (
                 cx.theme().colors().text,
-                cx.theme().colors().tab_active,
+                cx.theme().colors().tab_active_background,
                 cx.theme().colors().element_hover,
                 cx.theme().colors().element_active,
             ),
@@ -1388,7 +1392,12 @@ impl Pane {
         let close_right = ItemSettings::get_global(cx).close_position.right();
 
         div()
+            .group("")
             .id(item.id())
+            .cursor_pointer()
+            .when_some(item.tab_tooltip_text(cx), |div, text| {
+                div.tooltip(move |_, cx| cx.build_view(|cx| TextTooltip::new(text.clone())))
+            })
             // .on_drag(move |pane, cx| pane.render_tab(ix, item.boxed_clone(), detail, cx))
             // .drag_over::<DraggedTab>(|d| d.bg(cx.theme().colors().element_drop_target))
             // .on_drop(|_view, state: View<DraggedTab>, cx| {
@@ -1444,7 +1453,7 @@ impl Pane {
             .id("tab_bar")
             .w_full()
             .flex()
-            .bg(cx.theme().colors().tab_bar)
+            .bg(cx.theme().colors().tab_bar_background)
             // Left Side
             .child(
                 div()

crates/workspace2/src/status_bar.rs 🔗

@@ -45,7 +45,7 @@ impl Render for StatusBar {
             .justify_between()
             .w_full()
             .h_8()
-            .bg(cx.theme().colors().status_bar)
+            .bg(cx.theme().colors().status_bar_background)
             .child(self.render_left_tools(cx))
             .child(self.render_right_tools(cx))
     }

crates/workspace2/src/workspace2.rs 🔗

@@ -544,6 +544,7 @@ impl DelayedDebouncedEditAction {
 pub enum Event {
     PaneAdded(View<Pane>),
     ContactRequestedJoin(u64),
+    WorkspaceCreated(WeakView<Workspace>),
 }
 
 pub struct Workspace {
@@ -698,8 +699,7 @@ impl Workspace {
             Ok(())
         });
 
-        // todo!("replace with a different mechanism")
-        // cx.emit_global(WorkspaceCreated(weak_handle.clone()));
+        cx.emit(Event::WorkspaceCreated(weak_handle.clone()));
 
         let left_dock = cx.build_view(|_| Dock::new(DockPosition::Left));
         let bottom_dock = cx.build_view(|_| Dock::new(DockPosition::Bottom));
@@ -2697,7 +2697,7 @@ impl Workspace {
 
     fn render_titlebar(&self, cx: &mut ViewContext<Self>) -> impl Component<Self> {
         div()
-            .bg(cx.theme().colors().title_bar)
+            .bg(cx.theme().colors().title_bar_background)
             .when(
                 !matches!(cx.window_bounds(), WindowBounds::Fullscreen),
                 |s| s.pl_20(),
@@ -4253,7 +4253,7 @@ impl ViewId {
 //     }
 // }
 
-// pub struct WorkspaceCreated(pub WeakView<Workspace>);
+pub struct WorkspaceCreated(pub WeakView<Workspace>);
 
 pub fn activate_workspace_for_project(
     cx: &mut AppContext,

crates/zed/src/languages/elixir.rs 🔗

@@ -140,8 +140,8 @@ impl LspAdapter for ElixirLspAdapter {
     ) -> Result<LanguageServerBinary> {
         let version = version.downcast::<GitHubLspBinaryVersion>().unwrap();
         let zip_path = container_dir.join(format!("elixir-ls_{}.zip", version.name));
-        let version_dir = container_dir.join(format!("elixir-ls_{}", version.name));
-        let binary_path = version_dir.join("language_server.sh");
+        let folder_path = container_dir.join("elixir-ls");
+        let binary_path = folder_path.join("language_server.sh");
 
         if fs::metadata(&binary_path).await.is_err() {
             let mut response = delegate
@@ -160,13 +160,13 @@ impl LspAdapter for ElixirLspAdapter {
             }
             futures::io::copy(response.body_mut(), &mut file).await?;
 
-            fs::create_dir_all(&version_dir)
+            fs::create_dir_all(&folder_path)
                 .await
-                .with_context(|| format!("failed to create directory {}", version_dir.display()))?;
+                .with_context(|| format!("failed to create directory {}", folder_path.display()))?;
             let unzip_status = smol::process::Command::new("unzip")
                 .arg(&zip_path)
                 .arg("-d")
-                .arg(&version_dir)
+                .arg(&folder_path)
                 .output()
                 .await?
                 .status;
@@ -174,7 +174,7 @@ impl LspAdapter for ElixirLspAdapter {
                 Err(anyhow!("failed to unzip elixir-ls archive"))?;
             }
 
-            remove_matching(&container_dir, |entry| entry != version_dir).await;
+            remove_matching(&container_dir, |entry| entry != folder_path).await;
         }
 
         Ok(LanguageServerBinary {
@@ -285,20 +285,16 @@ impl LspAdapter for ElixirLspAdapter {
 async fn get_cached_server_binary_elixir_ls(
     container_dir: PathBuf,
 ) -> Option<LanguageServerBinary> {
-    (|| async move {
-        let mut last = None;
-        let mut entries = fs::read_dir(&container_dir).await?;
-        while let Some(entry) = entries.next().await {
-            last = Some(entry?.path());
-        }
-        last.map(|path| LanguageServerBinary {
-            path,
+    let server_path = container_dir.join("elixir-ls/language_server.sh");
+    if server_path.exists() {
+        Some(LanguageServerBinary {
+            path: server_path,
             arguments: vec![],
         })
-        .ok_or_else(|| anyhow!("no cached binary"))
-    })()
-    .await
-    .log_err()
+    } else {
+        log::error!("missing executable in directory {:?}", server_path);
+        None
+    }
 }
 
 pub struct NextLspAdapter;

crates/zed2/src/assets.rs 🔗

@@ -8,6 +8,7 @@ use rust_embed::RustEmbed;
 #[include = "fonts/**/*"]
 #[include = "icons/**/*"]
 #[include = "themes/**/*"]
+#[exclude = "themes/src/*"]
 #[include = "sounds/**/*"]
 #[include = "*.md"]
 #[exclude = "*.DS_Store"]

crates/zed2/src/languages/elixir.rs 🔗

@@ -140,8 +140,8 @@ impl LspAdapter for ElixirLspAdapter {
     ) -> Result<LanguageServerBinary> {
         let version = version.downcast::<GitHubLspBinaryVersion>().unwrap();
         let zip_path = container_dir.join(format!("elixir-ls_{}.zip", version.name));
-        let version_dir = container_dir.join(format!("elixir-ls_{}", version.name));
-        let binary_path = version_dir.join("language_server.sh");
+        let folder_path = container_dir.join("elixir-ls");
+        let binary_path = folder_path.join("language_server.sh");
 
         if fs::metadata(&binary_path).await.is_err() {
             let mut response = delegate
@@ -160,13 +160,13 @@ impl LspAdapter for ElixirLspAdapter {
             }
             futures::io::copy(response.body_mut(), &mut file).await?;
 
-            fs::create_dir_all(&version_dir)
+            fs::create_dir_all(&folder_path)
                 .await
-                .with_context(|| format!("failed to create directory {}", version_dir.display()))?;
+                .with_context(|| format!("failed to create directory {}", folder_path.display()))?;
             let unzip_status = smol::process::Command::new("unzip")
                 .arg(&zip_path)
                 .arg("-d")
-                .arg(&version_dir)
+                .arg(&folder_path)
                 .output()
                 .await?
                 .status;
@@ -174,7 +174,7 @@ impl LspAdapter for ElixirLspAdapter {
                 Err(anyhow!("failed to unzip elixir-ls archive"))?;
             }
 
-            remove_matching(&container_dir, |entry| entry != version_dir).await;
+            remove_matching(&container_dir, |entry| entry != folder_path).await;
         }
 
         Ok(LanguageServerBinary {
@@ -285,20 +285,16 @@ impl LspAdapter for ElixirLspAdapter {
 async fn get_cached_server_binary_elixir_ls(
     container_dir: PathBuf,
 ) -> Option<LanguageServerBinary> {
-    (|| async move {
-        let mut last = None;
-        let mut entries = fs::read_dir(&container_dir).await?;
-        while let Some(entry) = entries.next().await {
-            last = Some(entry?.path());
-        }
-        last.map(|path| LanguageServerBinary {
-            path,
+    let server_path = container_dir.join("elixir-ls/language_server.sh");
+    if server_path.exists() {
+        Some(LanguageServerBinary {
+            path: server_path,
             arguments: vec![],
         })
-        .ok_or_else(|| anyhow!("no cached binary"))
-    })()
-    .await
-    .log_err()
+    } else {
+        log::error!("missing executable in directory {:?}", server_path);
+        None
+    }
 }
 
 pub struct NextLspAdapter;

crates/zed2/src/languages/language_plugin.rs 🔗

@@ -2,7 +2,7 @@ use anyhow::{anyhow, Result};
 use async_trait::async_trait;
 use collections::HashMap;
 use futures::lock::Mutex;
-use gpui2::executor::Background;
+use gpui::executor::Background;
 use language2::{LanguageServerName, LspAdapter, LspAdapterDelegate};
 use lsp2::LanguageServerBinary;
 use plugin_runtime::{Plugin, PluginBinary, PluginBuilder, WasiFn};

crates/zed2/src/main.rs 🔗

@@ -209,7 +209,6 @@ fn main() {
         if stdout_is_a_pty() {
             cx.activate(true);
             let urls = collect_url_args();
-            dbg!(&urls);
             if !urls.is_empty() {
                 listener.open_urls(urls)
             }

script/bundle 🔗

@@ -10,6 +10,9 @@ local_only=false
 overwrite_local_app=false
 bundle_name=""
 
+# This must match the team in the provsiioning profile.
+APPLE_NOTORIZATION_TEAM="MQ55VZLNZQ"
+
 # Function for displaying help info
 help_info() {
   echo "
@@ -228,8 +231,7 @@ else
 
     if [[ -n $MACOS_CERTIFICATE && -n $MACOS_CERTIFICATE_PASSWORD && -n $APPLE_NOTARIZATION_USERNAME && -n $APPLE_NOTARIZATION_PASSWORD ]]; then
         echo "Notarizing DMG with Apple"
-        npm install -g notarize-cli
-        npx notarize-cli --file "${dmg_file_path}" --bundle-id dev.zed.Zed --username "$APPLE_NOTARIZATION_USERNAME" --password "$APPLE_NOTARIZATION_PASSWORD"
+        "$(xcode-select -p)/usr/bin/notarytool" submit --wait --apple-id "$APPLE_NOTARIZATION_USERNAME" --password "$APPLE_NOTARIZATION_PASSWORD" --team-id "$APPLE_NOTORIZATION_TEAM" "${dmg_file_path}"
     fi
 
     if [ "$open_result" = true ]; then

test.rs 🔗

@@ -410,7 +410,7 @@ mod components {
         themes::rose_pine,
     };
     use gpui::{platform::MouseButton, ViewContext};
-    use gpui2_macros::Element;
+    use gpui_macros::Element;
     use std::{marker::PhantomData, rc::Rc};
     struct ButtonHandlers<V, D> {
         click: Option<Rc<dyn Fn(&mut V, &D, &mut ViewContext<V>)>>,
@@ -535,7 +535,7 @@ mod element {
         platform::{MouseButton, MouseButtonEvent},
         EngineLayout, EventContext, RenderContext, ViewContext,
     };
-    use gpui2_macros::tailwind_lengths;
+    use gpui_macros::tailwind_lengths;
     use std::{
         any::{Any, TypeId},
         cell::Cell,
@@ -4572,7 +4572,7 @@ mod frame {
     };
     use anyhow::{anyhow, Result};
     use gpui::LayoutNodeId;
-    use gpui2_macros::IntoElement;
+    use gpui_macros::IntoElement;
     #[element_crate = "crate"]
     pub struct Frame<V: 'static> {
         style: OptionalStyle,

theme.txt 🔗

@@ -1,254 +0,0 @@
-    Finished dev [unoptimized + debuginfo] target(s) in 0.39s
-     Running `target/debug/storybook`
-[crates/ui2/src/components/workspace.rs:182] color = [crates/ui2/src/color.rs:162] "ThemeColor debug" = "ThemeColor debug"
-ThemeColor {
-    transparent: "rgba(0x00000000).into()",
-    mac_os_traffic_light_red: "rgba(0xec695eff).into()",
-    mac_os_traffic_light_yellow: "rgba(0xf4bf4eff).into()",
-    mac_os_traffic_light_green: "rgba(0x61c553ff).into()",
-    border: "rgba(0x464b57ff).into()",
-    border_variant: "rgba(0x464b57ff).into()",
-    border_focused: "rgba(0x293b5bff).into()",
-    border_transparent: "rgba(0x00000000).into()",
-    elevated_surface: "rgba(0x3b414dff).into()",
-    surface: "rgba(0x2f343eff).into()",
-    background: "rgba(0x3b414dff).into()",
-    filled_element: "rgba(0x3b414dff).into()",
-    filled_element_hover: "rgba(0xffffff1e).into()",
-    filled_element_active: "rgba(0xffffff28).into()",
-    filled_element_selected: "rgba(0x18243dff).into()",
-    filled_element_disabled: "rgba(0x00000000).into()",
-    ghost_element: "rgba(0x00000000).into()",
-    ghost_element_hover: "rgba(0xffffff14).into()",
-    ghost_element_active: "rgba(0xffffff1e).into()",
-    ghost_element_selected: "rgba(0x18243dff).into()",
-    ghost_element_disabled: "rgba(0x00000000).into()",
-    text: "rgba(0xc8ccd4ff).into()",
-    text_muted: "rgba(0x838994ff).into()",
-    text_placeholder: "rgba(0xd07277ff).into()",
-    text_disabled: "rgba(0x555a63ff).into()",
-    text_accent: "rgba(0x74ade8ff).into()",
-    icon_muted: "rgba(0x838994ff).into()",
-    syntax: SyntaxColor {
-        comment: "rgba(0x5d636fff).into()",
-        string: "rgba(0xa1c181ff).into()",
-        function: "rgba(0x73ade9ff).into()",
-        keyword: "rgba(0xb477cfff).into()",
-    },
-    status_bar: "rgba(0x3b414dff).into()",
-    title_bar: "rgba(0x3b414dff).into()",
-    toolbar: "rgba(0x282c33ff).into()",
-    tab_bar: "rgba(0x2f343eff).into()",
-    editor_subheader: "rgba(0x2f343eff).into()",
-    editor_active_line: "rgba(0x2f343eff).into()",
-    terminal: "rgba(0x282c33ff).into()",
-    image_fallback_background: "rgba(0x3b414dff).into()",
-    git_created: "rgba(0xa1c181ff).into()",
-    git_modified: "rgba(0x74ade8ff).into()",
-    git_deleted: "rgba(0xd07277ff).into()",
-    git_conflict: "rgba(0xdec184ff).into()",
-    git_ignored: "rgba(0x555a63ff).into()",
-    git_renamed: "rgba(0xdec184ff).into()",
-    player: [
-        PlayerThemeColors {
-            cursor: "rgba(0x74ade8ff).into()",
-            selection: "rgba(0x74ade83d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xa1c181ff).into()",
-            selection: "rgba(0xa1c1813d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xbe5046ff).into()",
-            selection: "rgba(0xbe50463d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xbf956aff).into()",
-            selection: "rgba(0xbf956a3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xb477cfff).into()",
-            selection: "rgba(0xb477cf3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0x6eb4bfff).into()",
-            selection: "rgba(0x6eb4bf3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xd07277ff).into()",
-            selection: "rgba(0xd072773d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xdec184ff).into()",
-            selection: "rgba(0xdec1843d).into()",
-        },
-    ],
-}
-[crates/ui2/src/components/workspace.rs:182] color = [crates/ui2/src/color.rs:162] "ThemeColor debug" = "ThemeColor debug"
-ThemeColor {
-    transparent: "rgba(0x00000000).into()",
-    mac_os_traffic_light_red: "rgba(0xec695eff).into()",
-    mac_os_traffic_light_yellow: "rgba(0xf4bf4eff).into()",
-    mac_os_traffic_light_green: "rgba(0x61c553ff).into()",
-    border: "rgba(0x464b57ff).into()",
-    border_variant: "rgba(0x464b57ff).into()",
-    border_focused: "rgba(0x293b5bff).into()",
-    border_transparent: "rgba(0x00000000).into()",
-    elevated_surface: "rgba(0x3b414dff).into()",
-    surface: "rgba(0x2f343eff).into()",
-    background: "rgba(0x3b414dff).into()",
-    filled_element: "rgba(0x3b414dff).into()",
-    filled_element_hover: "rgba(0xffffff1e).into()",
-    filled_element_active: "rgba(0xffffff28).into()",
-    filled_element_selected: "rgba(0x18243dff).into()",
-    filled_element_disabled: "rgba(0x00000000).into()",
-    ghost_element: "rgba(0x00000000).into()",
-    ghost_element_hover: "rgba(0xffffff14).into()",
-    ghost_element_active: "rgba(0xffffff1e).into()",
-    ghost_element_selected: "rgba(0x18243dff).into()",
-    ghost_element_disabled: "rgba(0x00000000).into()",
-    text: "rgba(0xc8ccd4ff).into()",
-    text_muted: "rgba(0x838994ff).into()",
-    text_placeholder: "rgba(0xd07277ff).into()",
-    text_disabled: "rgba(0x555a63ff).into()",
-    text_accent: "rgba(0x74ade8ff).into()",
-    icon_muted: "rgba(0x838994ff).into()",
-    syntax: SyntaxColor {
-        comment: "rgba(0x5d636fff).into()",
-        string: "rgba(0xa1c181ff).into()",
-        function: "rgba(0x73ade9ff).into()",
-        keyword: "rgba(0xb477cfff).into()",
-    },
-    status_bar: "rgba(0x3b414dff).into()",
-    title_bar: "rgba(0x3b414dff).into()",
-    toolbar: "rgba(0x282c33ff).into()",
-    tab_bar: "rgba(0x2f343eff).into()",
-    editor_subheader: "rgba(0x2f343eff).into()",
-    editor_active_line: "rgba(0x2f343eff).into()",
-    terminal: "rgba(0x282c33ff).into()",
-    image_fallback_background: "rgba(0x3b414dff).into()",
-    git_created: "rgba(0xa1c181ff).into()",
-    git_modified: "rgba(0x74ade8ff).into()",
-    git_deleted: "rgba(0xd07277ff).into()",
-    git_conflict: "rgba(0xdec184ff).into()",
-    git_ignored: "rgba(0x555a63ff).into()",
-    git_renamed: "rgba(0xdec184ff).into()",
-    player: [
-        PlayerThemeColors {
-            cursor: "rgba(0x74ade8ff).into()",
-            selection: "rgba(0x74ade83d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xa1c181ff).into()",
-            selection: "rgba(0xa1c1813d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xbe5046ff).into()",
-            selection: "rgba(0xbe50463d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xbf956aff).into()",
-            selection: "rgba(0xbf956a3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xb477cfff).into()",
-            selection: "rgba(0xb477cf3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0x6eb4bfff).into()",
-            selection: "rgba(0x6eb4bf3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xd07277ff).into()",
-            selection: "rgba(0xd072773d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xdec184ff).into()",
-            selection: "rgba(0xdec1843d).into()",
-        },
-    ],
-}
-[crates/ui2/src/components/workspace.rs:182] color = [crates/ui2/src/color.rs:162] "ThemeColor debug" = "ThemeColor debug"
-ThemeColor {
-    transparent: "rgba(0x00000000).into()",
-    mac_os_traffic_light_red: "rgba(0xec695eff).into()",
-    mac_os_traffic_light_yellow: "rgba(0xf4bf4eff).into()",
-    mac_os_traffic_light_green: "rgba(0x61c553ff).into()",
-    border: "rgba(0x464b57ff).into()",
-    border_variant: "rgba(0x464b57ff).into()",
-    border_focused: "rgba(0x293b5bff).into()",
-    border_transparent: "rgba(0x00000000).into()",
-    elevated_surface: "rgba(0x3b414dff).into()",
-    surface: "rgba(0x2f343eff).into()",
-    background: "rgba(0x3b414dff).into()",
-    filled_element: "rgba(0x3b414dff).into()",
-    filled_element_hover: "rgba(0xffffff1e).into()",
-    filled_element_active: "rgba(0xffffff28).into()",
-    filled_element_selected: "rgba(0x18243dff).into()",
-    filled_element_disabled: "rgba(0x00000000).into()",
-    ghost_element: "rgba(0x00000000).into()",
-    ghost_element_hover: "rgba(0xffffff14).into()",
-    ghost_element_active: "rgba(0xffffff1e).into()",
-    ghost_element_selected: "rgba(0x18243dff).into()",
-    ghost_element_disabled: "rgba(0x00000000).into()",
-    text: "rgba(0xc8ccd4ff).into()",
-    text_muted: "rgba(0x838994ff).into()",
-    text_placeholder: "rgba(0xd07277ff).into()",
-    text_disabled: "rgba(0x555a63ff).into()",
-    text_accent: "rgba(0x74ade8ff).into()",
-    icon_muted: "rgba(0x838994ff).into()",
-    syntax: SyntaxColor {
-        comment: "rgba(0x5d636fff).into()",
-        string: "rgba(0xa1c181ff).into()",
-        function: "rgba(0x73ade9ff).into()",
-        keyword: "rgba(0xb477cfff).into()",
-    },
-    status_bar: "rgba(0x3b414dff).into()",
-    title_bar: "rgba(0x3b414dff).into()",
-    toolbar: "rgba(0x282c33ff).into()",
-    tab_bar: "rgba(0x2f343eff).into()",
-    editor_subheader: "rgba(0x2f343eff).into()",
-    editor_active_line: "rgba(0x2f343eff).into()",
-    terminal: "rgba(0x282c33ff).into()",
-    image_fallback_background: "rgba(0x3b414dff).into()",
-    git_created: "rgba(0xa1c181ff).into()",
-    git_modified: "rgba(0x74ade8ff).into()",
-    git_deleted: "rgba(0xd07277ff).into()",
-    git_conflict: "rgba(0xdec184ff).into()",
-    git_ignored: "rgba(0x555a63ff).into()",
-    git_renamed: "rgba(0xdec184ff).into()",
-    player: [
-        PlayerThemeColors {
-            cursor: "rgba(0x74ade8ff).into()",
-            selection: "rgba(0x74ade83d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xa1c181ff).into()",
-            selection: "rgba(0xa1c1813d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xbe5046ff).into()",
-            selection: "rgba(0xbe50463d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xbf956aff).into()",
-            selection: "rgba(0xbf956a3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xb477cfff).into()",
-            selection: "rgba(0xb477cf3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0x6eb4bfff).into()",
-            selection: "rgba(0x6eb4bf3d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xd07277ff).into()",
-            selection: "rgba(0xd072773d).into()",
-        },
-        PlayerThemeColors {
-            cursor: "rgba(0xdec184ff).into()",
-            selection: "rgba(0xdec1843d).into()",
-        },
-    ],
-}