feat(darwin-breeze): add VS Code and Telegram themes

Generate and install a VS Code theme and build an importable Telegram
theme from the color scheme.
This commit is contained in:
tri committed 2026-10-30 00:21:09 +07:00
1 parent 75b1383edf
commit 26a29b3182
14 files changed
+6613 -15

No files matched your search

+3
View File
@@ -1,3 +1,6 @@
# Helium caches the built theme next to the manifest.
Cached Theme.pak
__pycache__/
# Binary packages built by build.py.
*.vsix
*.tdesktop-theme
+2
View File
@@ -5,3 +5,5 @@
__pycache__
^/\.gitignore
^/t3
^/telegram
^/vscode
+49 -5
View File
@@ -1,7 +1,7 @@
# Darwin Breeze
Breeze for KDE Plasma 6 in the macOS dark system colors, with Helium, T3 Code
and Ghostty themed from the same colors.
Breeze for KDE Plasma 6 in the macOS dark system colors, with Helium, T3 Code,
Ghostty, VS Code and Telegram themed from the same colors.
Only the colors change. Breeze still draws the widgets and the title bar, and
the window buttons stay on the right.
@@ -24,7 +24,15 @@ stow darwin-breeze helium
`apply.sh` regenerates the app themes, applies the global theme, hides the
line under the title bar, turns off the wallpaper accent color and publishes
the T3 Code theme. Restart Helium afterwards; T3 Code switches on its own.
the T3 Code theme and installs the VS Code extension. Restart Helium
afterwards; T3 Code switches on its own. In VS Code, pick "Darwin Breeze Dark"
once under Preferences → Color Theme; after later color changes, run Developer:
Reload Window.
Telegram has to import its theme by hand: Settings → Chat Settings → Chat
background → Choose from file, then pick
`darwin-breeze/telegram/DarwinBreezeDark.tdesktop-theme` and Apply. Import it
again after the colors change.
## Changing colors
@@ -44,9 +52,12 @@ Edit it, then run `./darwin-breeze/apply.sh` again. Everything else follows:
| Helium | `.local/share/helium-themes/`, generated by `build.py` |
| T3 Code | `t3/darwin-breeze.json`, generated by `build.py` and published with `t3 theme set` |
| Ghostty | `.config/ghostty/themes/`, generated by `build.py` |
| VS Code | `vscode/package.json` and `vscode/themes/`, generated by `build.py`, packed into `darwin-breeze.vsix` and installed by `apply.sh` |
| Telegram | `telegram/DarwinBreezeDark.tdesktop-theme`, built by `build.py` and imported by hand |
The generated files are committed so that `stow` alone gives a working setup;
don't edit them by hand.
The generated text files are committed so that `stow` alone gives a working
setup; the binary packages (Telegram's `.tdesktop-theme`, VS Code's `.vsix`)
are built by `build.py` instead. Don't edit generated files by hand.
## T3 Code notes
@@ -56,6 +67,39 @@ don't edit them by hand.
`build.py`), so a new slot or a different mapping is a change there, not a
hand-edited color.
## VS Code notes
- The workbench colors start from VS Code's own default dark theme, Dark 2026
(vendored in `vscode/base/` with the themes it includes). It already lays
out its grays as the scheme does: the editor darkest, the chrome around it
lighter, widgets lighter still. Each of those becomes the matching scheme
gray and the grays between them are interpolated. Other colors take the
hue of the matching Apple color and keep their lightness and saturation.
Keys with an exact role, such as buttons, badges, the active tab's top
border and the git colors, are set directly (`vscode()` in `build.py`).
- Syntax colors are Pierre Dark's, the theme T3 Code highlights code with
(`vscode/base/pierre-dark.json`, taken from T3 Code). They are used as they
are, without gamma compensation, so code looks the same in both apps.
- The terminal uses the same 16 colors as Ghostty.
- VS Code is Electron, so its workbench colors get the same gamma
compensation as Helium and T3 Code.
- The `.vsix` isn't committed; `build.py` packs it from `vscode/`.
## Telegram notes
- Telegram has some 600 color keys and the scheme has roles for only a few
dozen of them (`telegram()` in `build.py`). The rest start from Telegram's
own night theme, vendored as `telegram/night.tdesktop-palette`: its
blue-tinted grays become scheme grays of the same brightness and its blues
take the macOS blue's hue. Other colors, such as the reds, greens and name
colors, are kept as night has them.
- The chat list, top bar and compose bar use the window color; the chat
behind the bubbles and the folder strip use the darker view color.
- Telegram is a Qt app, so unlike Helium and T3 Code it needs no gamma
compensation.
- The `.tdesktop-theme` is a zip, so it isn't committed; `build.py` builds it
from the night palette and the color scheme.
## Helium notes
- Helium loads the theme from `~/.local/share/helium-themes/darwinbreeze`
+6
View File
@@ -37,6 +37,12 @@ if [ -x "$t3" ]; then
"$t3" theme set "$here/t3/darwin-breeze.json" >/dev/null
fi
# VS Code only loads themes from installed extensions. --force reinstalls the
# same version, so color changes land without a version bump.
if command -v code >/dev/null; then
code --install-extension "$here/vscode/darwin-breeze.vsix" --force >/dev/null 2>&1
fi
echo "Applied Darwin Breeze"
if pgrep -x helium >/dev/null; then
echo "Restart Helium to pick up its theme"
+441 -9
View File
@@ -7,10 +7,18 @@ are defined. This script derives from it:
.local/share/helium-themes/darwinbreeze/manifest.json
.config/ghostty/themes/DarwinBreezeDark
t3/darwin-breeze.json (published to T3 Code by apply.sh)
telegram/DarwinBreezeDark.tdesktop-theme (not committed; imported into Telegram by hand)
vscode/ (packed into vscode/darwin-breeze.vsix, installed by apply.sh)
"""
import colorsys
import configparser
import io
import json
import re
import struct
import zipfile
import zlib
from pathlib import Path
PKG = Path(__file__).resolve().parent
@@ -18,6 +26,20 @@ SCHEME = PKG / ".local/share/color-schemes/DarwinBreezeDark.colors"
HELIUM = PKG / ".local/share/helium-themes/darwinbreeze"
GHOSTTY = PKG / ".config/ghostty/themes/DarwinBreezeDark"
T3 = PKG / "t3/darwin-breeze.json"
# Telegram Desktop's built-in night theme, used as the base for every key the
# scheme has no role for: the colors file from telegramdesktop/tdesktop at
# 837b256, Telegram/Resources/night.tdesktop-theme.
TELEGRAM_BASE = PKG / "telegram/night.tdesktop-palette"
TELEGRAM = PKG / "telegram/DarwinBreezeDark.tdesktop-theme"
VSCODE = PKG / "vscode"
VSCODE_THEME = "themes/DarwinBreezeDark-color-theme.json"
# VS Code's default dark theme, Dark 2026 (which includes Dark Modern, Dark+
# and Visual Studio Dark), from Code - OSS 1.138 extensions/theme-defaults.
# The workbench colors start from it.
VSCODE_UI = PKG / "vscode/base/2026-dark.json"
# Pierre Dark, the syntax theme T3 Code highlights code with (from T3 Code
# 0.1.4). The editor uses its token colors as they are.
VSCODE_SYNTAX = PKG / "vscode/base/pierre-dark.json"
WHITE = (255, 255, 255)
@@ -48,7 +70,8 @@ def mix(a, b, t):
def hexc(c):
return "#{:02x}{:02x}{:02x}".format(*c)
"""#rrggbb, or #rrggbbaa when c carries an alpha."""
return "#" + "".join(f"{v:02x}" for v in c)
def kwin_compensate(c):
@@ -101,12 +124,10 @@ def helium(color):
return {k: kwin_compensate(v) for k, v in colors.items()}
def ghostty(color):
def ansi(color):
"""The 16 terminal colors, shared by Ghostty and the VS Code terminal."""
bg = color("View", "BackgroundNormal")
fg = color("View", "ForegroundNormal")
accent = color("Selection", "BackgroundNormal")
accent_text = color("Selection", "ForegroundNormal")
normal = [
mix(bg, fg, 0.15),
color("View", "ForegroundNegative"),
@@ -122,6 +143,14 @@ def ghostty(color):
*(mix(c, WHITE, 0.25) for c in normal[1:7]),
mix(fg, WHITE, 0.6),
]
return normal + bright
def ghostty(color):
bg = color("View", "BackgroundNormal")
fg = color("View", "ForegroundNormal")
accent = color("Selection", "BackgroundNormal")
accent_text = color("Selection", "ForegroundNormal")
lines = [
f"# Generated by darwin-breeze/build.py from {SCHEME.name}",
@@ -132,7 +161,7 @@ def ghostty(color):
f"selection-background = {hexc(accent)}",
f"selection-foreground = {hexc(accent_text)}",
]
lines += [f"palette = {i}={hexc(c)}" for i, c in enumerate(normal + bright)]
lines += [f"palette = {i}={hexc(c)}" for i, c in enumerate(ansi(color))]
return "\n".join(lines) + "\n"
@@ -218,11 +247,404 @@ def t3(color):
return {k: hexc(kwin_compensate(v)) for k, v in colors.items()}
def write(path, text):
def telegram(color):
"""Telegram keys mapped onto a scheme role; the rest come from night."""
window, window_text = color("Window", "BackgroundNormal"), color("Window", "ForegroundNormal")
view, view_text = color("View", "BackgroundNormal"), color("View", "ForegroundNormal")
header, header_text = color("Header", "BackgroundNormal"), color("Header", "ForegroundNormal")
title_inactive = color("Header][Inactive", "BackgroundNormal")
title_inactive_text = color("Header][Inactive", "ForegroundNormal")
tooltip, tooltip_text = color("Tooltip", "BackgroundNormal"), color("Tooltip", "ForegroundNormal")
accent, accent_text = color("Selection", "BackgroundNormal"), color("Selection", "ForegroundNormal")
accent_hover = color("Selection", "BackgroundAlternate")
muted = color("Window", "ForegroundInactive")
negative = color("Window", "ForegroundNegative")
positive = color("Window", "ForegroundPositive")
link = color("Window", "ForegroundLink")
hover = mix(window, window_text, 0.115)
ripple = mix(window, window_text, 0.18)
control = mix(window, window_text, 0.3)
msg_in = mix(view, view_text, 0.1)
msg_out = mix(view, accent, 0.5)
return {
"windowBg": window,
"windowFg": window_text,
"windowBgOver": hover,
"windowBgRipple": ripple,
"windowFgOver": window_text,
"windowSubTextFg": muted,
"windowSubTextFgOver": mix(muted, window_text, 0.2),
"windowBoldFg": window_text,
"windowBoldFgOver": window_text,
"windowBgActive": accent,
"windowFgActive": accent_text,
"windowActiveTextFg": link,
"windowShadowFgFallback": window,
"activeButtonBg": accent,
"activeButtonBgOver": accent_hover,
"activeButtonBgRipple": mix(accent, WHITE, 0.2),
"activeButtonFg": accent_text,
"activeButtonFgOver": accent_text,
"activeButtonSecondaryFg": mix(accent, accent_text, 0.75),
"activeLineFg": accent,
"activeLineFgError": negative,
"lightButtonBg": window,
"lightButtonBgOver": mix(window, accent, 0.12),
"lightButtonBgRipple": mix(window, accent, 0.2),
"lightButtonFg": link,
"attentionButtonFg": negative,
"attentionButtonFgOver": negative,
"attentionButtonBgOver": mix(window, negative, 0.12),
"attentionButtonBgRipple": mix(window, negative, 0.2),
"outlineButtonOutlineFg": accent,
"menuBg": window,
"menuBgOver": hover,
"menuBgRipple": ripple,
"menuIconFg": muted,
"menuIconFgOver": mix(muted, window_text, 0.3),
"menuSubmenuArrowFg": muted,
"menuFgDisabled": control,
"menuSeparatorFg": hover,
"checkboxFg": muted,
"sliderBgInactive": control,
"sliderBgActive": accent,
"inputBorderFg": control,
# Breeze draws text fields in the view color with a blue focus ring.
"filterInputActiveBg": view,
"filterInputInactiveBg": view,
"filterInputBorderFg": accent,
"tooltipBg": tooltip,
"tooltipFg": tooltip_text,
"tooltipBorderFg": mix(tooltip, tooltip_text, 0.115),
"titleBg": title_inactive,
"titleBgActive": header,
"titleFg": title_inactive_text,
"titleFgActive": header_text,
"topBarBg": header,
"boxBg": window,
"boxTitleFg": window_text,
"boxTextFgGood": positive,
"boxTextFgError": negative,
# Folder strip in the view color, so the selected folder merges into
# the chat list next to it.
"sideBarBg": view,
"sideBarBgActive": window,
"sideBarBgRipple": mix(view, window_text, 0.1),
"sideBarTextFg": muted,
"sideBarTextFgActive": link,
"sideBarIconFg": muted,
"sideBarIconFgActive": link,
"sideBarBadgeBg": accent,
"sideBarBadgeBgMuted": control,
"sideBarBadgeFg": accent_text,
"dialogsBg": window,
"dialogsBgOver": hover,
"dialogsRippleBg": ripple,
"dialogsBgActive": accent,
"dialogsRippleBgActive": accent_hover,
"dialogsNameFg": window_text,
"dialogsTextFg": muted,
"dialogsTextFgOver": muted,
"dialogsTextFgService": link,
"dialogsTextFgServiceOver": link,
"dialogsDateFg": muted,
"dialogsDateFgOver": muted,
"dialogsDraftFg": negative,
"dialogsOnlineBadgeFg": positive,
"dialogsVerifiedIconBg": link,
"dialogsVerifiedIconFg": window,
"dialogsUnreadBg": accent,
"dialogsUnreadBgOver": accent,
"dialogsUnreadFg": accent_text,
"dialogsUnreadBgMuted": control,
"dialogsUnreadBgMutedOver": mix(window, window_text, 0.35),
"dialogsUnreadBgActive": accent_text,
"dialogsUnreadFgActive": accent,
"dialogsUnreadBgMutedActive": mix(accent, accent_text, 0.55),
"historyComposeAreaBg": window,
"historyComposeAreaFg": window_text,
"historyComposeButtonBgOver": hover,
"historyComposeButtonBgRipple": ripple,
"historyTextInFg": view_text,
"historyTextOutFg": view_text,
"historyLinkInFg": link,
"msgInBg": msg_in,
"msgInBgSelected": mix(msg_in, accent, 0.3),
"msgOutBg": msg_out,
"msgOutBgSelected": mix(msg_out, accent, 0.3),
"msgInDateFg": muted,
"msgOutDateFg": mix(msg_out, WHITE, 0.55),
"msgSelectOverlay": (*accent, 0x4C),
"msgStickerOverlay": (*accent, 0x7F),
}
def luma(c):
return 0.299 * c[0] + 0.587 * c[1] + 0.114 * c[2]
def interp(points, x):
for (x0, y0), (x1, y1) in zip(points, points[1:]):
if x <= x1:
return y0 + (y1 - y0) * (x - x0) / (x1 - x0)
return points[-1][1]
def parse_hex(v):
h = v[1:]
if len(h) in (3, 4):
h = "".join(ch * 2 for ch in h)
return tuple(int(h[i:i + 2], 16) for i in range(0, len(h), 2))
def telegram_theme(color):
"""The night theme, recolored onto the scheme.
Night tints everything blue. Its tinted grays become scheme grays of
matching brightness, its blues take the accent's hue and saturation, and
other hues (reds, greens, name colors) stay. telegram() then pins every
key that has a scheme role.
"""
base = TELEGRAM_BASE.read_text()
line_re = re.compile(r"^(\w+):\s*(#[0-9a-fA-F]+)\s*;")
night = {m[1]: parse_hex(m[2]) for m in map(line_re.match, base.splitlines()) if m}
window, muted = color("Window", "BackgroundNormal"), color("Window", "ForegroundInactive")
grays = sorted({
(0, 0),
(luma(night["windowBg"]), window[0]),
(luma(night["windowSubTextFg"]), muted[0]),
(255, 255),
})
accent_h, _, accent_s = colorsys.rgb_to_hls(*(v / 255 for v in color("Selection", "BackgroundNormal")))
def recolor(c):
rgb, alpha = c[:3], c[3:]
chroma = max(rgb) - min(rgb)
h, l, _ = colorsys.rgb_to_hls(*(v / 255 for v in rgb))
if chroma <= 4 or not 195 <= h * 360 <= 225:
return c
if chroma <= 55:
g = round(interp(grays, luma(rgb)))
return (g, g, g, *alpha)
return (*(round(v * 255) for v in colorsys.hls_to_rgb(accent_h, l, accent_s)), *alpha)
pinned = telegram(color)
seen = set()
out = [f"// Generated by darwin-breeze/build.py from {SCHEME.name}"]
for line in base.splitlines():
m = line_re.match(line)
if m:
key = m[1]
seen.add(key)
c = pinned[key] if key in pinned else recolor(night[key])
line = f"{key}: {hexc(c)};" + line[m.end():]
elif re.match(r"^(\w+):", line) and line.split(":")[0] in pinned:
key = line.split(":")[0]
seen.add(key)
line = f"{key}: {hexc(pinned[key])};"
out.append(line)
out += [f"{k}: {hexc(c)};" for k, c in pinned.items() if k not in seen]
return "\n".join(out) + "\n"
def vscode_base_colors():
"""Dark 2026's colors with its include chain resolved."""
chain, path = [], VSCODE_UI
while path:
theme = json.loads(path.read_text())
chain.append(theme.get("colors", {}))
path = path.parent / theme["include"] if "include" in theme else None
colors = {}
for layer in reversed(chain):
colors.update(layer)
return {k: parse_hex(v) for k, v in colors.items()}
def vscode(color):
"""Workbench colors: Dark 2026, recolored onto the scheme.
Dark 2026 lays out its grays the way the scheme does: the chrome lighter
than the editor, widgets lighter still. Each of those grays becomes the
scheme gray in the same place, and the grays in between are interpolated.
Each hue takes the hue of the matching scheme color but keeps its own
lightness and saturation, so a muted dark red background stays one. pins
then sets the keys that have an exact scheme role, which is where the full
macOS blue shows.
"""
window, window_text = color("Window", "BackgroundNormal"), color("Window", "ForegroundNormal")
view, view_text = color("View", "BackgroundNormal"), color("View", "ForegroundNormal")
accent, accent_text = color("Selection", "BackgroundNormal"), color("Selection", "ForegroundNormal")
muted = color("Window", "ForegroundInactive")
negative = color("View", "ForegroundNegative")
neutral = color("View", "ForegroundNeutral")
positive = color("View", "ForegroundPositive")
link = color("View", "ForegroundLink")
base = vscode_base_colors()
grays = sorted({
(0, 0),
(luma(base["editor.background"]), view[0]),
(luma(base["sideBar.background"]), window[0]),
(luma(base["editorWidget.background"]), color("Window", "BackgroundAlternate")[0]),
(luma(base["sideBar.border"]), mix(window, window_text, 0.115)[0]),
(luma(base["descriptionForeground"]), muted[0]),
(luma(base["foreground"]), window_text[0]),
(255, 255),
})
assert all(a[1] <= b[1] for a, b in zip(grays, grays[1:])), grays
def hls(c):
return colorsys.rgb_to_hls(*(v / 255 for v in c))
# (hue range in degrees, scheme color whose hue it takes)
families = [
((0, 15), negative),
((15, 70), neutral),
((70, 170), positive),
((170, 250), accent),
((250, 330), color("View", "ForegroundVisited")),
((330, 360), negative),
]
def recolor(c):
rgb, alpha = c[:3], c[3:]
if max(rgb) - min(rgb) <= 10:
g = round(interp(grays, luma(rgb)))
return (g, g, g, *alpha)
h, l, sat = hls(rgb)
target = next(t for (lo, hi), t in families if lo <= h * 360 < hi)
return (*(round(v * 255) for v in colorsys.hls_to_rgb(hls(target)[0], l, sat)), *alpha)
pins = {
"editor.background": view,
"editor.foreground": view_text,
"titleBar.inactiveBackground": color("Header][Inactive", "BackgroundNormal"),
"titleBar.inactiveForeground": color("Header][Inactive", "ForegroundNormal"),
"focusBorder": (*accent, 0xB3),
"quickInputList.focusBackground": accent,
"button.background": accent,
"button.border": accent,
"button.hoverBackground": color("Selection", "BackgroundAlternate"),
"button.foreground": accent_text,
"badge.background": accent,
"badge.foreground": accent_text,
"activityBarBadge.background": accent,
"activityBarBadge.foreground": accent_text,
"tab.activeBorderTop": accent,
"panelTitle.activeBorder": accent,
"textLink.foreground": link,
"textLink.activeForeground": link,
}
names = ["Black", "Red", "Green", "Yellow", "Blue", "Magenta", "Cyan", "White"]
for i, c in enumerate(ansi(color)):
pins[f"terminal.ansi{'Bright' if i >= 8 else ''}{names[i % 8]}"] = c
colors = {k: pins.get(k) or recolor(c) for k, c in base.items()}
colors.update(pins)
# Electron is Chromium, so it needs the same KWin compensation as Helium.
return {k: hexc(kwin_compensate(c[:3]) + list(c[3:])) for k, c in sorted(colors.items())}
def vscode_files(color):
"""The extension files, keyed by their path inside it."""
name = "Darwin Breeze Dark"
# Syntax colors as T3 Code shows them. T3 Code doesn't compensate them
# either, so the two render the same.
syntax = json.loads(VSCODE_SYNTAX.read_text())
theme = {
"$schema": "vscode://schemas/color-theme",
"name": name,
"type": "dark",
"semanticHighlighting": True,
"colors": vscode(color),
"tokenColors": syntax["tokenColors"],
"semanticTokenColors": syntax["semanticTokenColors"],
}
package = {
"name": "darwin-breeze",
"displayName": "Darwin Breeze",
"description": f"Generated by darwin-breeze/build.py from {SCHEME.name}",
"publisher": "trivk",
"version": "1.0.0",
"engines": {"vscode": "^1.70.0"},
"categories": ["Themes"],
"contributes": {
"themes": [{"label": name, "uiTheme": "vs-dark", "path": f"./{VSCODE_THEME}"}],
},
}
return {
"package.json": json.dumps(package, indent=2) + "\n",
VSCODE_THEME: json.dumps(theme, indent=2) + "\n",
}
def vsix(files):
"""Pack the extension the way vsce does, for code --install-extension."""
manifest = """<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata>
<Identity Language="en-US" Id="darwin-breeze" Version="1.0.0" Publisher="trivk"/>
<DisplayName>Darwin Breeze</DisplayName>
<Description xml:space="preserve">Darwin Breeze Dark color theme</Description>
<Categories>Themes</Categories>
<Properties>
<Property Id="Microsoft.VisualStudio.Code.Engine" Value="^1.70.0"/>
</Properties>
</Metadata>
<Installation>
<InstallationTarget Id="Microsoft.VisualStudio.Code"/>
</Installation>
<Dependencies/>
<Assets>
<Asset Type="Microsoft.VisualStudio.Code.Manifest" Path="extension/package.json" Addressable="true"/>
</Assets>
</PackageManifest>
"""
content_types = """<?xml version="1.0" encoding="utf-8"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension=".json" ContentType="application/json"/><Default Extension=".vsixmanifest" ContentType="text/xml"/></Types>
"""
return zip_bytes({
"[Content_Types].xml": content_types,
"extension.vsixmanifest": manifest,
**{f"extension/{path}": text for path, text in files.items()},
})
def solid_png(c):
"""A 1x1 PNG; Telegram stretches it over the chat as a plain background."""
def chunk(kind, data):
return struct.pack(">I", len(data)) + kind + data + struct.pack(">I", zlib.crc32(kind + data))
return (
b"\x89PNG\r\n\x1a\n"
+ chunk(b"IHDR", struct.pack(">IIBBBBB", 1, 1, 8, 2, 0, 0, 0))
+ chunk(b"IDAT", zlib.compress(bytes([0, *c])))
+ chunk(b"IEND", b"")
)
def zip_bytes(files):
"""A zip with fixed timestamps, so an unchanged theme rebuilds byte-identical."""
buf = io.BytesIO()
with zipfile.ZipFile(buf, "w", zipfile.ZIP_DEFLATED) as z:
for name, data in files.items():
info = zipfile.ZipInfo(name, (1980, 1, 1, 0, 0, 0))
info.compress_type = zipfile.ZIP_DEFLATED
info.external_attr = 0o644 << 16
z.writestr(info, data)
return buf.getvalue()
def write(path, data):
path.parent.mkdir(parents=True, exist_ok=True)
if path.exists() and path.read_text() == text:
if isinstance(data, str):
data = data.encode()
if path.exists() and path.read_bytes() == data:
return False
path.write_text(text)
path.write_bytes(data)
print(f"wrote {path.relative_to(PKG)}")
return True
@@ -245,6 +667,16 @@ def main():
theme = {"version": 1, "name": "Darwin Breeze", "appearance": "dark", "colors": t3(color)}
write(T3, json.dumps(theme, indent=2) + "\n")
write(TELEGRAM, zip_bytes({
"colors.tdesktop-theme": telegram_theme(color),
"background.png": solid_png(color("View", "BackgroundNormal")),
}))
files = vscode_files(color)
for path, text in files.items():
write(VSCODE / path, text)
write(VSCODE / "darwin-breeze.vsix", vsix(files))
if __name__ == "__main__":
main()
@@ -0,0 +1,467 @@
windowBg: #17212b; // white: fallback for background
windowFg: #f5f5f5; // black: fallback for text
windowBgOver: #232e3c; // light gray: fallback for background with mouse over
windowBgRipple: #24303d; // darker gray: fallback for ripple effect
windowFgOver: #e9ecf0; // black: fallback for text with mouse over
windowSubTextFg: #708499; // gray: fallback for additional text
windowSubTextFgOver: #7c90a4; // darker gray: fallback for additional text with mouse over
windowBoldFg: #e9e8e8; // dark gray: fallback for bold text
windowBoldFgOver: #e9e9e9; // dark gray: fallback for bold text with mouse over
windowBgActive: #5288c1; // bright blue: fallback for blue filled active areas
windowFgActive: #ffffff; // white: fallback for text on active areas
windowActiveTextFg: #6ab3f3; // online blue: fallback for active text like online status
windowShadowFg: #000000; // black: fallback for shadow
windowShadowFgFallback: #17212b; // gray: fallback for shadow without opacity
shadowFg: #04080e56; // most shadows (including opacity)
slideFadeOutBg: #0000003c; // slide animation (chat to profile) fade out filling
slideFadeOutShadowFg: windowShadowFg; // slide animation (chat to profile) fade out right section shadow
imageBg: #000000; // image background fallback (when photo size is less than minimum allowed)
imageBgTransparent: #ffffff; // image background when displaying an image with opacity where no opacity is needed
activeButtonBg: #2f6ea5; // default active button background
activeButtonBgOver: #3476ab; // default active button background with mouse over
activeButtonBgRipple: #3b7cb1; // default active button ripple effect
activeButtonFg: #ffffff; // default active button text
activeButtonFgOver: #ffffff; // default active button text with mouse over
activeButtonSecondaryFg: #9abfe7; // default active button additional text (selected messages counter in forward / delete buttons)
activeButtonSecondaryFgOver: activeButtonSecondaryFg; // default active button additional text with mouse over
activeLineFg: #6396cb; // default active line (like code input field bottom border when you log in and field is focused)
activeLineFgError: #ef5959; // default active line for error state (like code input field bottom border when you log in and you've entered incorrect code)
lightButtonBg: #17212b; // default light button background (like buttons in boxes)
lightButtonBgOver: #1d2a39; // default light button background with mouse over
lightButtonBgRipple: #223143; // default light button ripple effect
lightButtonFg: #6ab2f2; // default light button text
lightButtonFgOver: lightButtonFg; // default light button text with mouse over
attentionButtonFg: #ec3942; // default attention button text (like confirm button on log out)
attentionButtonFgOver: #ec3942; // default attention button text with mouse over
attentionButtonBgOver: #592a2a64; // default attention button background with mouse over
attentionButtonBgRipple: #68323264; // default attention button ripple effect
outlineButtonBg: windowBg; // default left outlined button background (like shared media links in profiles)
outlineButtonBgOver: #202b37; // default left outlined button background with mouse over
outlineButtonOutlineFg: #3983c3; // default left outlined button left outline border
outlineButtonBgRipple: #27323f; // default left outlined button ripple effect
menuBg: #17212b; // default popup menu background
menuBgOver: #ffffff; // default popup menu item background with mouse over
menuBgRipple: #1f2934; // default popup menu item ripple effect
menuIconFg: #6c7883; // default popup menu item icon (like main menu)
menuIconFgOver: #dcdcdc; // default popup menu item icon with mouse over
menuSubmenuArrowFg: #637c95; // default popup menu submenu arrow icon (like in message field context menu in case of RTL system language)
menuFgDisabled: #3d4e5c; // default popup menu item disabled text (like unavailable items in message field context menu)
menuSeparatorFg: #232f39; // default popup menu separator (like in message field context menu)
scrollBarBg: #ffffff53; // default scroll bar current rectangle, the bar itself (like in chats list)
scrollBarBgOver: #ffffff7a; // default scroll bar current rectangle with mouse over it
scrollBg: #ffffff1a; // default scroll bar background
scrollBgOver: #ffffff2c; // default scroll bar background with mouse over the scroll bar
smallCloseIconFg: #55616c; // small X icon (like in Show all sessions box to the right for sessions termination)
smallCloseIconFgOver: #a3a3a3; // small X icon with mouse over
radialFg: windowFgActive; // default radial loader line (like in Media Viewer when loading a photo)
radialBg: #00000056; // default radial loader background (like in Media Viewer when loading a photo)
placeholderFg: #6d7883; // default input field placeholder when field is not focused (like in phone input field when you log in)
placeholderFgActive: #4f5b67; // default input field placeholder when field is focused
inputBorderFg: #313c49; // default input field bottom border (like in code input field when you log in and field is not focused)
filterInputBorderFg: #242f3d; // default rounded input field border (like in chats list search field when field is focused)
filterInputInactiveBg: #242f3d; // default rounded input field background (like in chats list search field when field is inactive)
checkboxFg: #4f6276; // default unchecked checkbox rounded rectangle (and also emoji category icons)
sliderBgInactive: #364554; // default slider not active bar (like in Settings when you choose interface scale or custom notifications count)
sliderBgActive: #4a81bc; // default slider active bar (like in Settings when you choose interface scale or custom notifications count)
tooltipBg: #16222d; // tooltip background (like when you put mouse over the message timestamp and wait)
tooltipFg: #d4e0ea; // tooltip text
tooltipBorderFg: #16222d; // tooltip border
titleShadow: #00000000; // one pixel line shadow at the bottom of custom window title
titleBg: #1f2936; // custom window title background when window is inactive
titleBgActive: #242f3d; // custom window title background when window is active
titleButtonBg: titleBg; // custom window title minimize/maximize/restore button background when window is inactive (Windows only)
titleButtonFg: #576673; // custom window title minimize/maximize/restore button icon when window is inactive (Windows only)
titleButtonBgOver: #25303e; // custom window title minimize/maximize/restore button background with mouse over when window is inactive (Windows only)
titleButtonFgOver: #e0e0e0; // custom window title minimize/maximize/restore button icon with mouse over when window is inactive (Windows only)
titleButtonBgActive: #242f3d; // custom window title minimize/maximize/restore button background when window is active (Windows only)
titleButtonFgActive: titleButtonFg; // custom window title minimize/maximize/restore button icon when window is active (Windows only)
titleButtonBgActiveOver: #2c3847; // custom window title minimize/maximize/restore button background with mouse over when window is active (Windows only)
titleButtonFgActiveOver: titleButtonFgOver; // custom window title minimize/maximize/restore button icon with mouse over when window is active (Windows only)
titleButtonCloseBg: titleButtonBg; // custom window title close button background when window is inactive (Windows only)
titleButtonCloseFg: titleButtonFg; // custom window title close button icon when window is inactive (Windows only)
titleButtonCloseBgOver: #e92539; // custom window title close button background with mouse over when window is inactive (Windows only)
titleButtonCloseFgOver: windowFgActive; // custom window title close button icon with mouse over when window is inactive (Windows only)
titleButtonCloseBgActive: #242f3d; // custom window title close button background when window is active (Windows only)
titleButtonCloseFgActive: titleButtonCloseFg; // custom window title close button icon when window is active (Windows only)
titleButtonCloseBgActiveOver: #e92539; // custom window title close button background with mouse over when window is active (Windows only)
titleButtonCloseFgActiveOver: titleButtonCloseFgOver; // custom window title close button icon with mouse over when window is active (Windows only)
titleFg: #6a7680; // custom window title text when window is inactive (macOS only)
titleFgActive: #91a3b3; // custom window title text when window is active (macOS only)
trayCounterBg: #f23c34; // tray icon counter background
trayCounterBgMute: #888888; // tray icon counter background if all unread messages are muted
trayCounterFg: #ffffff; // tray icon counter text
trayCounterBgMacInvert: #ffffff; // tray icon counter background when tray icon is pressed or when dark theme of macOS is used (macOS only)
trayCounterFgMacInvert: #ffffff01; // tray icon counter text when tray icon is pressed or when dark theme of macOS is used (macOS only)
layerBg: #0000007f; // box and main menu background layer fade
cancelIconFg: #737e87; // default for settings close icon and box search cancel icon
cancelIconFgOver: #dcdcdc; // default for settings close icon and box search cancel icon with mouse over
boxBg: #17212b; // box background
boxTextFg: windowFg; // box text
boxTextFgGood: #5598db; // accepted box text (like when choosing username that is not occupied)
boxTextFgError: #dc3d3d; // rejecting box text (like when choosing username that is occupied)
boxTitleFg: #ebebeb; // box title text
boxSearchBg: #17212b; // box search field background (like in contacts box)
boxTitleAdditionalFg: #6d7f8f; // box title additional text (like in create group box when you see chosen members count)
boxTitleCloseFg: cancelIconFg; // settings close icon and box search cancel icon (like in contacts box)
boxTitleCloseFgOver: cancelIconFgOver; // settings close icon and box search cancel icon (like in contacts box) with mouse over
membersAboutLimitFg: #677a8b; // text in channel members box about the limit (max 200 last members are shown)
contactsBg: #17212b; // contacts (and some other) box row background
contactsBgOver: #1f2c39; // contacts (and some other) box row background with mouse over
contactsNameFg: boxTextFg; // contacts (and some other) box row name text
contactsStatusFg: #677a8b; // contacts (and some other) box row additional text (like last seen stamp)
contactsStatusFgOver: #677a8b; // contacts (and some other) box row additional text (like last seen stamp) with mouse over
contactsStatusFgOnline: #559be0; // contacts (and some other) box row active additional text (like online status)
photoCropFadeBg: layerBg; // avatar crop box fade background (when choosing a new photo in Settings or for a group)
photoCropPointFg: #ffffff7f; // avatar crop box corner rectangles (when choosing a new photo in Settings or for a group)
callArrowFg: #49a2f0; // received phone call arrow (in calls list box)
callArrowMissedFg: #ed5050; // missed phone call arrow (in calls list box)
introBg: windowBg; // login background
introTitleFg: #eeeeee; // login title text
introDescriptionFg: #72879b; // login description text
introErrorFg: #e94040; // login error text (like when providing a wrong log in code)
introCoverTopBg: #124a82; // intro gradient top (from)
introCoverBottomBg: #23659f; // intro gradient bottom (to)
introCoverIconsFg: #3b7cbd; // intro cloud graphics
introCoverPlaneTrace: #3870a8; // intro plane traces
introCoverPlaneInner: #ced9e2; // intro plane part
introCoverPlaneOuter: #97a9b5; // intro plane part
introCoverPlaneTop: #ffffff; // intro plane part
dialogsMenuIconFg: menuIconFg; // main menu and lock telegram icon
dialogsMenuIconFgOver: menuIconFgOver; // main menu and lock telegram icon with mouse over
dialogsBg: windowBg; // chat list background
dialogsNameFg: #f5f5f5; // chat list name text
dialogsChatIconFg: dialogsNameFg; // chat list group or channel icon
dialogsDateFg: #8696a8; // chat list date text
dialogsTextFg: #7f91a4; // chat list message text
dialogsTextFgService: #73b9f5; // chat list group sender name text (or media message type text)
dialogsDraftFg: #ff525d; // chat list draft label
dialogsVerifiedIconBg: #6ab3f3; // chat list verified icon background
dialogsVerifiedIconFg: #17212b; // chat list verified icon check
dialogsSendingIconFg: #647d96; // chat list sending message icon (clock)
dialogsSentIconFg: #72bcfd; // chat list sent message tick / double tick icon
dialogsUnreadBg: #4082bc; // chat list unread badge background for not muted chat
dialogsUnreadBgMuted: #3e546a; // chat list unread badge background for muted chat
dialogsUnreadFg: #ffffff; // chat list unread badge text
dialogsBgOver: #202b36; // chat list background with mouse over
dialogsOnlineBadgeFg: #63b6ff; // chat list online status
dialogsNameFgOver: windowBoldFgOver; // chat list name text with mouse over
dialogsChatIconFgOver: dialogsNameFgOver; // chat list group or channel icon with mouse over
dialogsDateFgOver: #8495a9; // chat list date text with mouse over
dialogsTextFgOver: #91a3b5; // chat list message text with mouse over
dialogsTextFgServiceOver: #73b9f5; // chat list group sender name text with mouse over
dialogsDraftFgOver: dialogsDraftFg; // chat list draft label with mouse over
dialogsVerifiedIconBgOver: #6ab3f3; // chat list verified icon background with mouse over
dialogsVerifiedIconFgOver: dialogsVerifiedIconFg; // chat list verified icon check with mouse over
dialogsSendingIconFgOver: dialogsSendingIconFg; // chat list sending message icon (clock) with mouse over
dialogsSentIconFgOver: #72bcfd; // chat list sent message tick / double tick icon with mouse over
dialogsUnreadBgOver: #4082bc; // chat list unread badge background for not muted chat with mouse over
dialogsUnreadBgMutedOver: #4d5762; // chat list unread badge background for muted chat with mouse over
dialogsUnreadFgOver: dialogsUnreadFg; // chat list unread badge text with mouse over
dialogsBgActive: #2b5278; // chat list background for current (active) chat
dialogsNameFgActive: windowFgActive; // chat list name text for current (active) chat
dialogsChatIconFgActive: dialogsNameFgActive; // chat list group or channel icon for current (active) chat
dialogsDateFgActive: windowFgActive; // chat list date text for current (active) chat
dialogsTextFgActive: windowFgActive; // chat list message text for current (active) chat
dialogsTextFgServiceActive: dialogsTextFgActive; // chat list group sender name text for current (active) chat
dialogsDraftFgActive: #a9caf0; // chat list draft label for current (active) chat
dialogsVerifiedIconBgActive: dialogsTextFgActive; // chat list verified icon background for current (active) chat
dialogsVerifiedIconFgActive: dialogsBgActive; // chat list verified icon check for current (active) chat
dialogsSendingIconFgActive: #ffffff99; // chat list sending message icon (clock) for current (active) chat
dialogsSentIconFgActive: dialogsTextFgActive; // chat list sent message tick / double tick icon for current (active) chat
dialogsUnreadBgActive: dialogsTextFgActive; // chat list unread badge background for not muted chat for current (active) chat
dialogsUnreadBgMutedActive: #7aa3ca; // chat list unread badge background for muted chat for current (active) chat
dialogsUnreadFgActive: #2a5378; // chat list unread badge text for current (active) chat
dialogsOnlineBadgeFgActive: #ffffff; // chat list online status for current (active) chat
dialogsRippleBg: #25313d; //
dialogsRippleBgActive: #315a80; //
dialogsForwardBg: dialogsBgActive; // forwarding panel background (when forwarding messages in the smallest window size)
dialogsForwardFg: dialogsNameFgActive; // forwarding panel text (when forwarding messages in the smallest window size)
searchedBarBg: #202b38; // search results bar background (in chats list, contacts box..)
searchedBarFg: #8c98a4; // search results bar text (in chats list, contacts box..)
topBarBg: #17212b; // top bar background (in chat view, media overview..)
emojiPanBg: windowBg; // emoji panel background
emojiPanCategories: #17212b; // emoji panel categories background
emojiPanHeaderFg: #7c8d9e; // emoji panel section header text
emojiPanHeaderBg: #fffffff2; // emoji panel section header background
stickerPanDeleteBg: #000000cc; // delete X button background for custom sent stickers in stickers panel (legacy)
stickerPanDeleteFg: windowFgActive; // delete X button icon for custom sent stickers in stickers panel (legacy)
stickerPreviewBg: #000000b0; // sticker and GIF preview background (when you press and hold on a sticker)
historyTextInFg: windowFg; // inbox message text
historyTextInFgSelected: #ffffff; // inbox message selected text or text in a selected message
historyTextOutFg: #e4ecf2; // outbox message text
historyTextOutFgSelected: #ffffff; // outbox message selected text or text in a selected message
historyLinkInFg: #70baf5; // inbox message link
historyLinkInFgSelected: #aadcff; // inbox message link in a selected text or message
historyLinkOutFg: #83caff; // outbox message link
historyLinkOutFgSelected: #aadcff; // outbox message link in a selected text or message
historyFileNameInFg: historyTextInFg; // inbox media filename text
historyFileNameInFgSelected: #ffffff; // inbox media filename text in a selected message
historyFileNameOutFg: historyTextOutFg; // outbox media filename text
historyFileNameOutFgSelected: #ffffff; // outbox media filename text in a selected message
historyOutIconFg: #6bbfff; // outbox message tick / double tick icon
historyOutIconFgSelected: #ffffff; // outbox message tick / double tick icon in a selected message
historyIconFgInverted: #ffffffe5; // media message tick / double tick icon (like in sent photo)
historySendingOutIconFg: #70a4d2; // outbox sending message icon (clock)
historySendingInIconFg: #76838b; // inbox sending message icon (clock) (like in sent messages to yourself or in sent messages to a channel)
historySendingInvertedIconFg: #ffffffc8; // media sending message icon (clock) (like in sent photo)
historyCallArrowInFg: #5093d6; // received phone call arrow
historyCallArrowInFgSelected: #ffffff; // received phone call arrow in a selected message
historyCallArrowMissedInFg: callArrowMissedFg; // missed phone call arrow
historyCallArrowMissedInFgSelected: #ffffff; // missed phone call arrow in a selected message
historyCallArrowOutFg: #ffffff; // outgoing phone call arrow
historyCallArrowOutFgSelected: #ffffff; // outgoing phone call arrow
historyUnreadBarBg: #182433; // new unread messages bar background
historyUnreadBarBorder: #03080d00; // new unread messages bar shadow
historyUnreadBarFg: #ffffff; // new unread messages bar text
historyForwardChooseBg: #0000004c; // forwarding messages in a large window size "choose recipient" background
historyForwardChooseFg: windowFgActive; // forwarding messages in a large window size "choose recipient" text
historyPeer1NameFg: #fb6169; // red group member name
historyPeer1NameFgSelected: #ffffff; // red group member name in a selected message
historyPeer1UserpicBg: #ff845e; // red userpic background
historyPeer2NameFg: #85de85; // green group member name
historyPeer2NameFgSelected: #ffffff; // green group member name in a selected message
historyPeer2UserpicBg: #9ad164; // green userpic background
historyPeer3NameFg: #f3bc5c; // yellow group member name
historyPeer3NameFgSelected: #ffffff; // yellow group member name in a selected message
historyPeer3UserpicBg: #e5ca77; // yellow userpic background (actually unused)
historyPeer4NameFg: #65bdf3; // blue group member name
historyPeer4NameFgSelected: #ffffff; // blue group member name in a selected message
historyPeer4UserpicBg: #5caffa; // blue userpic background
historyPeer5NameFg: #b48bf2; // purple group member name
historyPeer5NameFgSelected: #ffffff; // purple group member name in a selected message
historyPeer5UserpicBg: #b694f9; // purple userpic background
historyPeer6NameFg: #ff5694; // pink group member name
historyPeer6NameFgSelected: #ffffff; // pink group member name in a selected message
historyPeer6UserpicBg: #ff8aac; // pink userpic background
historyPeer7NameFg: #62d4e3; // sea group member name
historyPeer7NameFgSelected: #ffffff; // sea group member name in a selected message
historyPeer7UserpicBg: #5bcbe3; // sea userpic background
historyPeer8NameFg: #faa357; // orange group member name
historyPeer8NameFgSelected: #ffffff; // orange group member name in a selected message
historyPeer8UserpicBg: #febb5b; // orange userpic background
historyPeerUserpicFg: windowFgActive; // default userpic initials
historyPeer1UserpicBg2: #d45246; // the second red userpic background
historyPeer2UserpicBg2: #46ba43; // the second green userpic background
historyPeer3UserpicBg2: #e5ca77; // the second yellow userpic background (actually unused)
historyPeer4UserpicBg2: #408acf; // the second blue userpic background
historyPeer5UserpicBg2: #6c61df; // the second purple userpic background
historyPeer6UserpicBg2: #d95574; // the second pink userpic background
historyPeer7UserpicBg2: #359ad4; // the second sea userpic background
historyPeer8UserpicBg2: #f68136; // the second orange userpic background
historyPeerSavedMessagesBg2: historyPeer4UserpicBg2; // the second saved messages userpic background
historyScrollBarBg: #7f84897a; // scroll bar current rectangle, the bar itself in the chat view (adjusted)
historyScrollBarBgOver: #64686cbc; // scroll bar current rectangle with mouse over it in the chat view (adjusted)
historyScrollBg: #565a5e4c; // scroll bar background (adjusted)
historyScrollBgOver: #5a5d616b; // scroll bar background with mouse over the scroll bar (adjusted)
msgInBg: #182533; // inbox message background
msgInBgSelected: #2e70a5; // inbox selected message background (and background of selected text in those messages)
msgOutBg: #2b5278; // outbox message background
msgOutBgSelected: #2e70a5; // outbox selected message background (and background of selected text in those messages)
msgSelectOverlay: #3585d44c; // overlay which is filling the media parts of selected messages (like in selected photo message)
msgStickerOverlay: #3585d47f; // overlay which is filling the selected sticker message
msgInServiceFg: #71bafa; // inbox message information text (like information about a forwarded message original sender)
msgInServiceFgSelected: #ffffff; // inbox selected message information text (like information about a forwarded message original sender)
msgOutServiceFg: #90caff; // outbox message information text (like information about a forwarded message original sender)
msgOutServiceFgSelected: #ffffff; // outbox message information text (like information about a forwarded message original sender)
msgInShadow: #748ea200; // inbox message shadow (below the bubble)
msgInShadowSelected: #538ebb00; // inbox selected message shadow (below the bubble)
msgOutShadow: #00000000; // outbox message shadow (below the bubble)
msgOutShadowSelected: #366ea600; // outbox selected message shadow (below the bubble)
msgInDateFg: #6d7f8f; // inbox message time text
msgInDateFgSelected: #ffffff; // inbox selected message time text
msgOutDateFg: #7da8d3; // outbox message time text
msgOutDateFgSelected: #ffffff; // outbox selected message time text
msgServiceFg: windowFgActive; // service message text (like date dividers or service message about the group title being changed)
msgServiceBg: #213040d5; // service message background (like in a service message about group title being changed) (adjusted)
msgServiceBgSelected: #2e7ab4; // service message selected text background (like in a service message about group title being changed) (adjusted)
msgInReplyBarColor: #429bdb; // inbox message reply outline
msgInReplyBarSelColor: #ffffff; // inbox selected message reply outline
msgOutReplyBarColor: #65b9f4; // outbox message reply outline
msgOutReplyBarSelColor: #ffffff; // outbox selected message reply outline
msgImgReplyBarColor: msgServiceFg; // sticker message reply outline
msgInMonoFg: #5a8cb7; // inbox message monospace text (like a message sent with `test` text)
msgOutMonoFg: #aed1f3; // outbox message monospace text
msgInMonoFgSelected: #a3cdf7; // inbox message monospace text in a selected text or message
msgOutMonoFgSelected: #a3cdf7; // outbox message monospace text in a selected text or message
msgDateImgFg: #fffffff2; // media message time text (like time text in a sent photo)
msgDateImgBg: #00000054; // media message time bubble background (like time bubble in a sent photo) or file with thumbnail download icon circle background
msgDateImgBgOver: #00000074; // media message download icon circle background with mouse over (like file with thumbnail download icon)
msgDateImgBgSelected: #204f7887; // selected media message time bubble background
msgFileThumbLinkInFg: lightButtonFg; // inbox media file message with thumbnail download / open with button text
msgFileThumbLinkInFgSelected: #ffffff; // inbox selected media file message with thumbnail download / open with button text
msgFileThumbLinkOutFg: #6c9ecf; // outbox media file message with thumbnail download / open with button text
msgFileThumbLinkOutFgSelected: #ffffff; // outbox selected media file message with thumbnail download / open with button text
msgFileInBg: #3f96d0; // inbox audio file download circle background
msgFileInBgOver: #489ed7; // inbox audio file download circle background with mouse over
msgFileInBgSelected: #6ab4f4; // inbox selected audio file download circle background
msgFileOutBg: #4c9ce2; // outbox audio file download circle background
msgFileOutBgOver: #54a4e9; // outbox audio file download circle background with mouse over
msgFileOutBgSelected: #58abf3; // outbox selected audio file download circle background
msgFile1Bg: #3e7eba; // blue shared links / files without image square thumbnail
msgFile1BgDark: #24679e; // blue shared files without image download circle background
msgFile1BgOver: #1d5e93; // blue shared files without image download circle background with mouse over
msgFile1BgSelected: #ffffff; // blue shared files without image download circle background if file is selected
msgFile2Bg: #3ea34a; // green shared links / shared files without image square thumbnail
msgFile2BgDark: #298835; // green shared files without image download circle background
msgFile2BgOver: #1b7725; // green shared files without image download circle background with mouse over
msgFile2BgSelected: #1b7725; // green shared files without image download circle background if file is selected
msgFile3Bg: #d6454c; // red shared links / shared files without image square thumbnail
msgFile3BgDark: #bf333a; // red shared files without image download circle background
msgFile3BgOver: #b2282f; // red shared files without image download circle background with mouse over
msgFile3BgSelected: #b2282f; // red shared files without image download circle background if file is selected
msgFile4Bg: #d99546; // yellow shared links / shared files without image square thumbnail
msgFile4BgDark: #c17d39; // yellow shared files without image download circle background
msgFile4BgOver: #ac6b29; // yellow shared files without image download circle background with mouse over
msgFile4BgSelected: #ac6b29; // yellow shared files without image download circle background if file is selected
historyFileInIconFg: #ffffff; // inbox file without thumbnail (like audio file) download arrow icon
historyFileInIconFgSelected: #ffffff; // inbox selected file without thumbnail (like audio file) download arrow icon
historyFileInRadialFg: #ffffff; // inbox file without thumbnail (like audio file) radial download animation line
historyFileInRadialFgSelected: historyFileInIconFgSelected; // inbox selected file without thumbnail (like audio file) radial download animation line
historyFileOutIconFg: #ffffff; // outbox file without thumbnail (like audio file) download arrow icon
historyFileOutIconFgSelected: #ffffff; // outbox selected file without thumbnail (like audio file) download arrow icon
historyFileOutRadialFg: #ffffff; // outbox file without thumbnail (like audio file) radial download animation line
historyFileOutRadialFgSelected: #ffffff; // outbox selected file without thumbnail (like audio file) radial download animation line
historyFileThumbIconFg: #efefef; // file with thumbnail (or photo / video) download arrow icon
historyFileThumbIconFgSelected: #ffffff; // selected file with thumbnail (or photo / video) download arrow icon
historyFileThumbRadialFg: historyFileThumbIconFg; // file with thumbnail (or photo / video) radial download animation line
historyFileThumbRadialFgSelected: #ffffff; // selected file with thumbnail (or photo / video) radial download animation line
historyVideoMessageProgressFg: historyFileThumbIconFg; // radial playback progress in round video messages
msgWaveformInActive: #549cd7; // inbox voice message active waveform lines (like played part of currently playing voice message)
msgWaveformInActiveSelected: #ffffff; // inbox selected voice message active waveform lines (like played part of currently playing voice message)
msgWaveformInInactive: #3a4d61; // inbox voice message inactive waveform lines (like upcoming part of currently playing voice message)
msgWaveformInInactiveSelected: #6fa5d4; // inbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message)
msgWaveformOutActive: #62b2fd; // outbox voice message active waveform lines (like played part of currently playing voice message)
msgWaveformOutActiveSelected: #ffffff; // outbox selected voice message active waveform lines (like played part of currently playing voice message)
msgWaveformOutInactive: #4b7fb3; // outbox voice message inactive waveform lines (like upcoming part of currently playing voice message)
msgWaveformOutInactiveSelected: #6fa5d4; // outbox selected voice message inactive waveform lines (like upcoming part of currently playing voice message)
msgBotKbOverBgAdd: #80b1db0f; // this is painted over a bot inline keyboard button (which has msgServiceBg background) when mouse is over that button
msgBotKbIconFg: msgServiceFg; // bot inline keyboard button icon in the top-right corner (like in @vote bot when a poll is ready to be shared)
msgBotKbRippleBg: #92c0e50b; // bot inline keyboard button ripple effect
mediaInFg: msgInDateFg; // inbox media message status text (like in file that is being downloaded)
mediaInFgSelected: msgInDateFgSelected; // inbox selected media message status text (like in file that is being downloaded)
mediaOutFg: msgOutDateFg; // outbox media message status text (like in file that is being downloaded)
mediaOutFgSelected: msgOutDateFgSelected; // outbox selected media message status text (like in file that is being downloaded)
youtubePlayIconBg: #e83131c8; // youtube play icon background (when a link to a youtube video with a webpage preview is sent)
youtubePlayIconFg: windowFgActive; // youtube play icon arrow (when a link to a youtube video with a webpage preview is sent)
videoPlayIconBg: #0000007f; // other video play icon background (like when a link to a vimeo video with a webpage preview is sent)
videoPlayIconFg: #ffffff; // other video play icon arrow (like when a link to a vimeo video with a webpage preview is sent)
toastBg: #000000b2; // toast notification background (like when you click on your t.me link when editing your username)
toastFg: windowFgActive; // toast notification text (like when you click on your t.me link when editing your username)
reportSpamBg: #363c42; // report spam panel background (like a non contact user writes your for the first time)
reportSpamFg: windowFg; // report spam panel text (when you send a report from that panel)
historyToDownBg: #1d2b3a; // arrow button background (to scroll to the end of the viewed chat)
historyToDownBgOver: #243446; // arrow button background with mouse over
historyToDownBgRipple: #2b3c4f; // arrow button ripple effect
historyToDownFg: #adb4ba; // arrow button icon
historyToDownFgOver: menuIconFgOver; // arrow button icon with mouse over
historyToDownShadow: #00000040; // arrow button shadow
historyComposeAreaBg: #17212b; // history compose area background (message write area / reply information / forwarding information)
historyComposeAreaFg: historyTextInFg; // history compose area text
historyComposeAreaFgService: msgInDateFg; // history compose area text when replying to a media message
historyComposeIconFg: menuIconFg; // history compose area icon (like emoji, attach, bot command..)
historyComposeIconFgOver: menuIconFgOver; // history compose area icon with mouse over
historySendIconFg: windowBgActive; // send message icon
historySendIconFgOver: windowBgActive; // send message icon with mouse over
historyPinnedBg: #1b2734; // pinned message area background
historyReplyBg: historyComposeAreaBg; // reply / forward / edit message area background
historyReplyIconFg: windowBgActive; // reply / forward / edit message left icon
historyReplyCancelFg: cancelIconFg; // reply / forward / edit message cancel button
historyReplyCancelFgOver: cancelIconFgOver; // reply / forward / edit message cancel button with mouse over
historyComposeButtonBg: historyComposeAreaBg; // unblock / join channel / mute channel button background
historyComposeButtonBgOver: #1c2835; // unblock / join channel / mute channel button background with mouse over
historyComposeButtonBgRipple: #222f3e; // unblock / join channel / mute channel button ripple effect
overviewCheckBg: #00000040; // shared files / links checkbox background for not selected rows when some rows are selected
overviewCheckFg: #ffffff; // shared files / links checkbox icon for not selected rows when some rows are selected
overviewCheckFgActive: #ffffff; // shared files / links checkbox icon for selected rows
overviewPhotoSelectOverlay: #3fa2e333; // shared photos / videos / links fill for selected rows
profileStatusFgOver: #677a8b; // group members list in group profile user last seen text with mouse over
profileVerifiedCheckBg: windowBgActive; // profile verified check icon background
profileVerifiedCheckFg: #ffffff; // profile verified check icon tick
profileAdminStartFg: #62a9e6; // group members list admin star icon
notificationsBoxMonitorFg: windowFg; // custom notifications settings box monitor color
notificationsBoxScreenBg: dialogsBgActive; // #6389a8; // custom notifications settings box monitor screen background
notificationSampleUserpicFg: windowBgActive; // custom notifications settings box small sample userpic placeholder
notificationSampleCloseFg: #d7d7d7; // custom notifications settings box small sample close button placeholder
notificationSampleTextFg: #d7d7d7; // custom notifications settings box small sample text placeholder
notificationSampleNameFg: #939393; // custom notifications settings box small sample name placeholder
changePhoneSimcardFrom: notificationSampleTextFg; // change phone number box left simcard icon
changePhoneSimcardTo: notificationSampleNameFg; // change phone number box right simcard and plane icons
mainMenuBg: windowBg; // main menu background
mainMenuCoverBg: #276899; // main menu top cover background
mainMenuCoverFg: windowFgActive; // main menu top cover text
mainMenuCloudFg: activeButtonFg; //
mainMenuCloudBg: #185680; //
mediaPlayerBg: windowBg; // audio file player background
mediaPlayerActiveFg: windowBgActive; // audio file player playback progress already played part
mediaPlayerInactiveFg: sliderBgInactive; // audio file player playback progress upcoming (not played yet) part with mouse over
mediaPlayerDisabledFg: #9dd1ef; // audio file player loading progress (when you're playing an audio file and switch to the previous one which is not loaded yet)
mediaviewFileBg: windowBg; // file rectangle background (when you view a png file in Media Viewer and go to a previous, not loaded yet, file)
mediaviewFileNameFg: windowFg; // file name in file rectangle
mediaviewFileSizeFg: windowSubTextFg; // file size text in file rectangle
mediaviewFileRedCornerFg: #d55959; // red file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .pdf)
mediaviewFileYellowCornerFg: #e8a659; // yellow file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .zip)
mediaviewFileGreenCornerFg: #49a957; // green file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .exe)
mediaviewFileBlueCornerFg: #599dcf; // blue file thumbnail placeholder corner in file rectangle (for a file without thumbnail, like .dmg)
mediaviewFileExtFg: activeButtonFg; // file extension text in file thumbnail placeholder in file rectangle
mediaviewMenuBg: #383838; // context menu in Media Viewer background
mediaviewMenuBgOver: #505050; // context menu item background with mouse over
mediaviewMenuBgRipple: #676767; // context menu item ripple effect
mediaviewMenuFg: windowFgActive; // context menu item text
mediaviewBg: #222222eb; // Media Viewer background
mediaviewVideoBg: imageBg; // Media Viewer background when viewing a video in full screen
mediaviewControlBg: #0000003c; // controls background (like next photo / previous photo)
mediaviewControlFg: windowFgActive; // controls icon (like next photo / previous photo)
mediaviewCaptionBg: #11111180; // caption text background (when viewing photo with caption)
mediaviewCaptionFg: mediaviewControlFg; // caption text
mediaviewTextLinkFg: #70baf5; // caption text link
mediaviewSaveMsgBg: toastBg; // save to file toast message background in Media Viewer
mediaviewSaveMsgFg: toastFg; // save to file toast message text
mediaviewPlaybackActive: #c7c7c7; // video playback progress already played part
mediaviewPlaybackInactive: #252525; // video playback progress upcoming (not played yet) part
mediaviewPlaybackActiveOver: #ffffff; // video playback progress already played part with mouse over
mediaviewPlaybackInactiveOver: #474747; // video playback progress upcoming (not played yet) part with mouse over
mediaviewPlaybackProgressFg: #ffffffc7; // video playback progress text
mediaviewPlaybackIconFg: mediaviewPlaybackActive; // video playback controls icon
mediaviewPlaybackIconFgOver: mediaviewPlaybackActiveOver; // video playback controls icon with mouse over
mediaviewTransparentBg: #ffffff; // transparent filling part (when viewing a transparent .png file in Media Viewer)
mediaviewTransparentFg: #cccccc; // another transparent filling part
notificationBg: windowBg; // custom notification window background
callBg: #14191ff5; // phone call popup background
callNameFg: #ffffff; // phone call popup name text
callFingerprintBg: #00000066; // phone call popup emoji fingerprint background
callStatusFg: #aaabac; // phone call popup status text
callIconFg: #ffffff; // phone call popup answer, hangup and mute mic icon
callAnswerBg: #488fc9; // phone call popup answer button background
callAnswerRipple: #4286c2; // phone call popup answer button ripple effect
callAnswerBgOuter: #3f95eb26; // phone call popup answer button outer ripple effect
callHangupBg: #cc4646; // phone call popup hangup button background
callHangupRipple: #ca4141; // phone call popup hangup button ripple effect
callCancelBg: #ffffff; // phone call popup line busy cancel button background
callCancelFg: #536271; // phone call popup line busy cancel button icon
callCancelRipple: #435363; // phone call popup line busy cancel button ripple effect
callMuteRipple: #ffffff12; // phone call popup mute mic ripple effect
callBarBg: #366693; // active phone call bar background
callBarMuteRipple: #4b7dab; // active phone call bar mute and hangup button ripple effect
callBarBgMuted: #35495d; // phone call bar with muted mic background
callBarUnmuteRipple: #435b73; // phone call bar with muted mic mute and hangup button ripple effect
callBarFg: dialogsNameFgActive; // phone call bar text and icons
importantTooltipBg: toastBg; //
importantTooltipFg: toastFg; //
importantTooltipFgLink: #65b6fc; //
filterInputActiveBg: #242f3d; // default rounded input field active background (like in chats list search field when field is focused)
botKbBg: #242f3d; // bot keyboard button background
botKbDownBg: #2d3a49; // bot keyboard button ripple effect
emojiIconFg: #6c7883; // emoji category icon
emojiIconFgActive: #51a0e5; // active emoji category icon
overviewCheckBorder: #e4eaef; // shared media round checkbox border
sideBarBg: #0e1621; // filters side bar background
sideBarBgActive: #25303e; // filters side bar active background
sideBarBgRipple: #1e2733; // filters side bar ripple effect
sideBarTextFg: #768c9e; // filters side bar text
sideBarTextFgActive: #64b9fa; // filters side bar active item text
sideBarIconFg: #768c9e; // filters side bar icon
sideBarIconFgActive: #5eb5f7; // filters side bar active item icon
sideBarBadgeBg: #5eb5f7; // filters side bar badge background
sideBarBadgeBgMuted: #768c9e; // filters side bar unimportant badge background
statisticsChartInactive: #313d4cc8; // inactive area in footer of statistic charts
statisticsChartActive: #526679d8; // sides in footer of statistic charts
+710
View File
@@ -0,0 +1,710 @@
{
"$schema": "vscode://schemas/color-theme",
"name": "2026 Dark",
"include": "./dark_modern.json",
"type": "dark",
"colors": {
"foreground": "#bfbfbf",
"disabledForeground": "#555555",
"errorForeground": "#f48771",
"descriptionForeground": "#8C8C8C",
"icon.foreground": "#8C8C8C",
"focusBorder": "#3994BCB3",
"textBlockQuote.background": "#242526",
"textBlockQuote.border": "#2A2B2C",
"textCodeBlock.background": "#242526",
"textLink.foreground": "#48A0C7",
"textLink.activeForeground": "#53A5CA",
"textPreformat.background": "#262626",
"textPreformat.foreground": "#8C8C8C",
"textSeparator.foreground": "#2a2a2a",
"button.background": "#297AA0",
"button.foreground": "#FFFFFF",
"button.hoverBackground": "#2B7DA3",
"button.border": "#297AA0",
"button.secondaryHoverBackground": "#FFFFFF10",
"button.secondaryBorder": "#333536",
"checkbox.background": "#242526",
"checkbox.border": "#707070",
"checkbox.foreground": "#8C8C8C",
"dropdown.background": "#191A1B",
"dropdown.border": "#333536",
"dropdown.foreground": "#bfbfbf",
"dropdown.listBackground": "#191A1B",
"input.background": "#191A1B",
"input.border": "#333536",
"input.foreground": "#bfbfbf",
"input.placeholderForeground": "#555555",
"inputOption.activeBackground": "#313233",
"inputOption.activeForeground": "#bfbfbf",
"inputOption.activeBorder": "#2A2B2C",
"inputValidation.infoBackground": "#1E3A47",
"inputValidation.infoBorder": "#3994BC",
"inputValidation.infoForeground": "#bfbfbf",
"inputValidation.warningBackground": "#352A05",
"inputValidation.warningBorder": "#B89500",
"inputValidation.warningForeground": "#bfbfbf",
"inputValidation.errorBackground": "#3A1D1D",
"inputValidation.errorBorder": "#BE1100",
"inputValidation.errorForeground": "#bfbfbf",
"scrollbar.shadow": "#191B1D4D",
"scrollbarSlider.background": "#A8A9AA85",
"scrollbarSlider.hoverBackground": "#A8A9AA90",
"scrollbarSlider.activeBackground": "#A8A9AA9C",
"badge.background": "#307E9F",
"badge.foreground": "#FFFFFF",
"progressBar.background": "#878889",
"list.activeSelectionBackground": "#FFFFFF22",
"list.activeSelectionForeground": "#ededed",
"list.inactiveSelectionBackground": "#2C2D2E",
"list.inactiveSelectionForeground": "#ededed",
"list.hoverBackground": "#FFFFFF14",
"list.hoverForeground": "#bfbfbf",
"list.dropBackground": "#3994BC1A",
"toolbar.activeBackground": "#FFFFFF33",
"list.focusBackground": "#FFFFFF22",
"list.focusForeground": "#bfbfbf",
"list.focusOutline": "#3994BCB3",
"list.highlightForeground": "#48A0C7",
"list.invalidItemForeground": "#444444",
"list.errorForeground": "#f48771",
"list.warningForeground": "#e5ba7d",
"activityBar.background": "#191A1B",
"activityBar.foreground": "#bfbfbf",
"activityBar.inactiveForeground": "#8C8C8C",
"activityBar.activeBackground": "#313233",
"activityBar.border": "#2A2B2C",
"activityBar.activeBorder": "#bfbfbf",
"activityBar.activeFocusBorder": "#3994BCB3",
"activityBarBadge.background": "#307E9F",
"activityBarBadge.foreground": "#FFFFFF",
"activityBarTop.activeBorder": "#bfbfbf",
"sideBar.background": "#191A1B",
"sideBar.foreground": "#bfbfbf",
"sideBar.border": "#2A2B2C",
"sideBarTitle.foreground": "#bfbfbf",
"sideBarSectionHeader.background": "#191A1B",
"sideBarSectionHeader.foreground": "#bfbfbf",
"sideBarSectionHeader.border": "#2A2B2C",
"titleBar.activeBackground": "#191A1B",
"titleBar.activeForeground": "#8C8C8C",
"titleBar.inactiveBackground": "#121314",
"titleBar.inactiveForeground": "#8C8C8C",
"titleBar.border": "#2A2B2C",
"menubar.selectionBackground": "#242526",
"menubar.selectionForeground": "#bfbfbf",
"menu.background": "#202122",
"menu.foreground": "#bfbfbf",
"menu.selectionBackground": "#3994BC26",
"menu.selectionForeground": "#bfbfbf",
"menu.selectionBorder": "#3994BC",
"menu.separatorBackground": "#2A2B2C",
"menu.border": "#2A2B2C",
"commandCenter.foreground": "#bfbfbf",
"commandCenter.activeForeground": "#bfbfbf",
"commandCenter.background": "#191A1B",
"commandCenter.activeBackground": "#FFFFFF0F",
"commandCenter.border": "#2E3031",
"editor.background": "#121314",
"editor.foreground": "#BBBEBF",
"editorStickyScroll.background": "#121314",
"editorStickyScrollHover.background": "#202122",
"editorStickyScroll.border": "#2A2B2C",
"editorLineNumber.foreground": "#858889",
"editorLineNumber.activeForeground": "#BBBEBF",
"editorCursor.foreground": "#BBBEBF",
"editor.selectionBackground": "#276782dd",
"editor.inactiveSelectionBackground": "#27678260",
"editor.selectionHighlightBackground": "#27678260",
"editor.wordHighlightBackground": "#27678250",
"editor.wordHighlightStrongBackground": "#27678280",
"editor.findMatchBackground": "#27678290",
"editor.findMatchHighlightBackground": "#27678280",
"editor.findRangeHighlightBackground": "#FFFFFF13",
"editor.hoverHighlightBackground": "#FFFFFF13",
"editor.lineHighlightBackground": "#242526",
"editor.rangeHighlightBackground": "#FFFFFF13",
"editorLink.activeForeground": "#3a94bc",
"editorWhitespace.foreground": "#8C8C8C4D",
"editorIndentGuide.background1": "#8384854D",
"editorIndentGuide.activeBackground1": "#838485",
"editorRuler.foreground": "#848484",
"editorCodeLens.foreground": "#8C8C8C",
"editorBracketMatch.background": "#3994BC55",
"editorBracketMatch.border": "#2A2B2C",
"editorWidget.background": "#202122",
"editorWidget.border": "#2A2B2C",
"editorWidget.foreground": "#bfbfbf",
"editorSuggestWidget.background": "#202122",
"editorSuggestWidget.border": "#2A2B2C",
"editorSuggestWidget.foreground": "#bfbfbf",
"editorSuggestWidget.highlightForeground": "#bfbfbf",
"editorSuggestWidget.selectedBackground": "#FFFFFF26",
"editorSuggestWidget.focusOutline": "#3994BCB3",
"editorHoverWidget.background": "#202122",
"editorHoverWidget.border": "#2A2B2C",
"widget.border": "#2A2B2C",
"peekView.border": "#2A2B2C",
"peekViewEditor.background": "#191A1B",
"peekViewEditor.matchHighlightBackground": "#3994BC33",
"peekViewResult.background": "#191A1B",
"peekViewResult.fileForeground": "#bfbfbf",
"peekViewResult.lineForeground": "#8C8C8C",
"peekViewResult.matchHighlightBackground": "#3994BC33",
"peekViewResult.selectionBackground": "#3994BC26",
"peekViewResult.selectionForeground": "#bfbfbf",
"peekViewTitle.background": "#242526",
"peekViewTitleDescription.foreground": "#8C8C8C",
"peekViewTitleLabel.foreground": "#bfbfbf",
"editorGutter.background": "#121314",
"editorGutter.addedBackground": "#72C892",
"editorGutter.deletedBackground": "#F28772",
"diffEditor.insertedLineBackground": "#347d3926",
"diffEditor.insertedTextBackground": "#57ab5a4d",
"diffEditor.removedLineBackground": "#c93c3726",
"diffEditor.removedTextBackground": "#f470674d",
"editorOverviewRuler.border": "#2A2B2C",
"editorOverviewRuler.findMatchForeground": "#3a94bc99",
"editorOverviewRuler.modifiedForeground": "#6ab890",
"editorOverviewRuler.addedForeground": "#73c991",
"editorOverviewRuler.deletedForeground": "#f48771",
"editorOverviewRuler.errorForeground": "#f48771",
"editorOverviewRuler.warningForeground": "#e5ba7d",
"panel.background": "#191A1B",
"panel.border": "#2A2B2C",
"panelSection.border": "#2A2B2C",
"panelSectionHeader.border": "#2A2B2C",
"panelTitle.activeBorder": "#3994BC",
"panelTitle.activeForeground": "#bfbfbf",
"panelTitle.inactiveForeground": "#8C8C8C",
"statusBar.background": "#191A1B",
"statusBar.inactiveBackground": "#121314",
"statusBar.foreground": "#8C8C8C",
"statusBar.border": "#2A2B2C",
"statusBar.focusBorder": "#3994BCB3",
"statusBar.debuggingBackground": "#3994BC",
"statusBar.debuggingForeground": "#FFFFFF",
"statusBar.noFolderBackground": "#191A1B",
"statusBar.noFolderForeground": "#8C8C8C",
"statusBarItem.activeBackground": "#4B4C4D",
"statusBarItem.hoverBackground": "#323233",
"statusBarItem.focusBorder": "#3994BCB3",
"statusBarItem.prominentBackground": "#3994BC",
"statusBarItem.prominentForeground": "#FFFFFF",
"statusBarItem.prominentHoverBackground": "#3994BC",
"tab.activeBackground": "#121314",
"tab.activeForeground": "#bfbfbf",
"tab.inactiveBackground": "#191A1B",
"tab.inactiveForeground": "#8C8C8C",
"tab.border": "#2A2B2C",
"tab.lastPinnedBorder": "#2A2B2C",
"tab.activeBorderTop": "#3994BC",
"tab.hoverBackground": "#121314",
"tab.hoverForeground": "#bfbfbf",
"tab.unfocusedActiveBackground": "#121314",
"tab.unfocusedActiveForeground": "#8C8C8C",
"tab.unfocusedInactiveBackground": "#191A1B",
"tab.unfocusedInactiveForeground": "#444444",
"editorGroupHeader.tabsBackground": "#191A1B",
"tab.activeBorder": "#121314",
"editorGroupHeader.tabsBorder": "#2A2B2C",
"breadcrumb.foreground": "#8C8C8C",
"breadcrumb.background": "#121314",
"breadcrumb.focusForeground": "#bfbfbf",
"breadcrumb.activeSelectionForeground": "#bfbfbf",
"breadcrumbPicker.background": "#202122",
"notificationCenter.border": "#2A2B2C",
"notificationCenterHeader.foreground": "#bfbfbf",
"notificationCenterHeader.background": "#242526",
"notificationToast.border": "#2A2B2C",
"notifications.foreground": "#bfbfbf",
"notifications.background": "#202122",
"notifications.border": "#2A2B2C",
"notificationLink.foreground": "#3a94bc",
"notificationsWarningIcon.foreground": "#CCA700",
"notificationsErrorIcon.foreground": "#f48771",
"notificationsInfoIcon.foreground": "#3a94bc",
"activityWarningBadge.foreground": "#202020",
"activityWarningBadge.background": "#CCA700",
"activityErrorBadge.foreground": "#FFFFFF",
"activityErrorBadge.background": "#f48771",
"extensionButton.prominentBackground": "#297AA0",
"extensionButton.prominentForeground": "#FFFFFF",
"extensionButton.prominentHoverBackground": "#2B7DA3",
"pickerGroup.border": "#2A2B2C",
"pickerGroup.foreground": "#bfbfbf",
"quickInput.background": "#202122",
"quickInput.foreground": "#bfbfbf",
"quickInputList.focusBackground": "#297AA0",
"quickInputList.focusForeground": "#FFFFFF",
"quickInputList.focusIconForeground": "#FFFFFF",
"quickInputList.focusHighlightForeground": "#FFFFFF",
"terminal.selectionBackground": "#3994BC33",
"terminal.background": "#191A1B",
"terminal.border": "#2A2B2C",
"terminal.tab.activeBorder": "#3994BC00",
"terminalCursor.foreground": "#bfbfbf",
"terminalCursor.background": "#191A1B",
"gitDecoration.addedResourceForeground": "#73c991",
"gitDecoration.modifiedResourceForeground": "#e5ba7d",
"gitDecoration.deletedResourceForeground": "#f48771",
"gitDecoration.untrackedResourceForeground": "#73c991",
"gitDecoration.ignoredResourceForeground": "#8C8C8C",
"gitDecoration.conflictingResourceForeground": "#f48771",
"gitDecoration.stageModifiedResourceForeground": "#e5ba7d",
"gitDecoration.stageDeletedResourceForeground": "#f48771",
"quickInputTitle.background": "#202122",
"commandCenter.activeBorder": "#333536",
"chat.requestBubbleBackground": "#ffffff13",
"chat.requestBubbleHoverBackground": "#ffffff22",
"chat.inputWorkingBorderColor1": "#297AA0",
"editorCommentsWidget.rangeBackground": "#488FAE26",
"editorCommentsWidget.rangeActiveBackground": "#488FAE46",
"charts.foreground": "#CCCCCC",
"charts.lines": "#C8CACC80",
"charts.blue": "#57A3F8",
"charts.red": "#EF8773",
"charts.yellow": "#E0B97F",
"charts.orange": "#CD861A",
"charts.green": "#86CF86",
"charts.purple": "#AD80D7",
"inlineChat.border": "#00000000",
"minimapSlider.background": "#A8A9AA85",
"minimapSlider.hoverBackground": "#A8A9AA90",
"minimapSlider.activeBackground": "#A8A9AA9C",
"agents.background": "#121314",
"agentsPanel.background": "#191A1B",
"agentsPanel.foreground": "#bfbfbf",
"agentsPanel.border": "#2A2B2C",
"surface.background": "#191A1B",
"surface.foreground": "#bfbfbf",
"surface.border": "#2A2B2C",
"agentsGradient.tintColor": "#297AA0",
"agentsChatInput.background": "#202122",
"agentsChatInput.foreground": "#bfbfbf",
"agentsChatInput.border": "#333536",
"agentsChatInput.focusBorder": "#3994BCB3",
"agentsChatInput.placeholderForeground": "#555555",
"agentsNewSessionButton.background": "#00000000",
"agentsNewSessionButton.foreground": "#bfbfbf",
"agentsNewSessionButton.border": "#333536",
"agentsNewSessionButton.hoverBackground": "#FFFFFF18",
"agentsBadge.background": "#307E9F",
"agentsBadge.foreground": "#FFFFFF",
"agentsUnreadBadge.background": "#307E9F",
"agentsUnreadBadge.foreground": "#FFFFFF",
"agentsBottomPanel.border": "#00000000"
},
"tokenColors": [
{
"scope": [
"comment",
"punctuation.definition.comment",
"string.comment"
],
"settings": {
"foreground": "#8b949e"
}
},
{
"scope": [
"constant.other.placeholder",
"constant.character"
],
"settings": {
"foreground": "#ff7b72"
}
},
{
"scope": [
"constant",
"entity.name.constant",
"variable.other.constant",
"variable.other.enummember",
"variable.language",
"entity"
],
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": [
"entity.name",
"meta.export.default",
"meta.definition.variable"
],
"settings": {
"foreground": "#ffa657"
}
},
{
"scope": [
"variable.parameter.function",
"meta.jsx.children",
"meta.block",
"meta.tag.attributes",
"entity.name.constant",
"meta.object.member",
"meta.embedded.expression"
],
"settings": {
"foreground": "#c9d1d9"
}
},
{
"scope": "entity.name.function",
"settings": {
"foreground": "#d2a8ff"
}
},
{
"scope": [
"entity.name.tag",
"support.class.component"
],
"settings": {
"foreground": "#7ee787"
}
},
{
"scope": "keyword",
"settings": {
"foreground": "#ff7b72"
}
},
{
"scope": [
"storage",
"storage.type"
],
"settings": {
"foreground": "#ff7b72"
}
},
{
"scope": [
"storage.modifier.package",
"storage.modifier.import",
"storage.type.java"
],
"settings": {
"foreground": "#c9d1d9"
}
},
{
"scope": [
"string",
"string punctuation.section.embedded source"
],
"settings": {
"foreground": "#a5d6ff"
}
},
{
"scope": "support",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": "meta.property-name",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": "variable",
"settings": {
"foreground": "#ffa657"
}
},
{
"scope": "variable.other",
"settings": {
"foreground": "#c9d1d9"
}
},
{
"scope": "invalid.broken",
"settings": {
"foreground": "#ffa198",
"fontStyle": "italic"
}
},
{
"scope": "invalid.deprecated",
"settings": {
"foreground": "#ffa198",
"fontStyle": "italic"
}
},
{
"scope": "invalid.illegal",
"settings": {
"foreground": "#ffa198",
"fontStyle": "italic"
}
},
{
"scope": "invalid.unimplemented",
"settings": {
"foreground": "#ffa198",
"fontStyle": "italic"
}
},
{
"scope": "carriage-return",
"settings": {
"foreground": "#f0f6fc",
"fontStyle": "italic underline"
}
},
{
"scope": "message.error",
"settings": {
"foreground": "#ffa198"
}
},
{
"scope": "string variable",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": [
"source.regexp",
"string.regexp"
],
"settings": {
"foreground": "#a5d6ff"
}
},
{
"scope": [
"string.regexp.character-class",
"string.regexp constant.character.escape",
"string.regexp source.ruby.embedded",
"string.regexp string.regexp.arbitrary-repitition"
],
"settings": {
"foreground": "#a5d6ff"
}
},
{
"scope": "string.regexp constant.character.escape",
"settings": {
"foreground": "#7ee787",
"fontStyle": "bold"
}
},
{
"scope": "support.constant",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": "support.variable",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": "support.type.property-name.json",
"settings": {
"foreground": "#7ee787"
}
},
{
"scope": "meta.module-reference",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": "punctuation.definition.list.begin.markdown",
"settings": {
"foreground": "#ffa657"
}
},
{
"scope": [
"markup.heading",
"markup.heading entity.name"
],
"settings": {
"foreground": "#79c0ff",
"fontStyle": "bold"
}
},
{
"scope": "markup.quote",
"settings": {
"foreground": "#7ee787"
}
},
{
"scope": "markup.italic",
"settings": {
"foreground": "#c9d1d9",
"fontStyle": "italic"
}
},
{
"scope": "markup.bold",
"settings": {
"foreground": "#c9d1d9",
"fontStyle": "bold"
}
},
{
"scope": [
"markup.underline"
],
"settings": {
"fontStyle": "underline"
}
},
{
"scope": [
"markup.strikethrough"
],
"settings": {
"fontStyle": "strikethrough"
}
},
{
"scope": "markup.inline.raw",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": [
"markup.deleted",
"meta.diff.header.from-file",
"punctuation.definition.deleted"
],
"settings": {
"foreground": "#ffa198"
}
},
{
"scope": [
"punctuation.section.embedded"
],
"settings": {
"foreground": "#ff7b72"
}
},
{
"scope": [
"markup.inserted",
"meta.diff.header.to-file",
"punctuation.definition.inserted"
],
"settings": {
"foreground": "#7ee787"
}
},
{
"scope": [
"markup.changed",
"punctuation.definition.changed"
],
"settings": {
"foreground": "#ffa657"
}
},
{
"scope": [
"markup.ignored",
"markup.untracked"
],
"settings": {
"foreground": "#0d1117"
}
},
{
"scope": "meta.diff.range",
"settings": {
"foreground": "#d2a8ff",
"fontStyle": "bold"
}
},
{
"scope": "meta.diff.header",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": "meta.separator",
"settings": {
"foreground": "#79c0ff",
"fontStyle": "bold"
}
},
{
"scope": "meta.output",
"settings": {
"foreground": "#79c0ff"
}
},
{
"scope": [
"brackethighlighter.tag",
"brackethighlighter.curly",
"brackethighlighter.round",
"brackethighlighter.square",
"brackethighlighter.angle",
"brackethighlighter.quote"
],
"settings": {
"foreground": "#8b949e"
}
},
{
"scope": "brackethighlighter.unmatched",
"settings": {
"foreground": "#ffa198"
}
},
{
"scope": [
"constant.other.reference.link",
"string.other.link"
],
"settings": {
"foreground": "#a5d6ff"
}
},
{
"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"
}
}
],
"semanticHighlighting": true
}
+137
View File
@@ -0,0 +1,137 @@
{
"$schema": "vscode://schemas/color-theme",
"name": "Dark Modern",
"include": "./dark_plus.json",
"colors": {
"activityBar.activeBorder": "#0078D4",
"activityBar.background": "#181818",
"activityBar.border": "#2B2B2B",
"activityBar.foreground": "#D7D7D7",
"activityBar.inactiveForeground": "#868686",
"activityBarBadge.background": "#0078D4",
"activityBarBadge.foreground": "#FFFFFF",
"badge.background": "#616161",
"badge.foreground": "#F8F8F8",
"button.background": "#0078D4",
"button.border": "#ffffff1a",
"button.foreground": "#FFFFFF",
"button.hoverBackground": "#026EC1",
"button.secondaryBackground": "#00000000",
"button.secondaryForeground": "#CCCCCC",
"button.secondaryHoverBackground": "#2B2B2B",
"chat.slashCommandBackground": "#26477866",
"chat.slashCommandForeground": "#85B6FF",
"chat.editedFileForeground": "#E2C08D",
"checkbox.background": "#313131",
"checkbox.border": "#3C3C3C",
"debugToolBar.background": "#181818",
"descriptionForeground": "#9D9D9D",
"dropdown.background": "#313131",
"dropdown.border": "#3C3C3C",
"dropdown.foreground": "#CCCCCC",
"dropdown.listBackground": "#1F1F1F",
"editor.background": "#1F1F1F",
"editor.findMatchBackground": "#9E6A03",
"editor.foreground": "#CCCCCC",
"editorGroup.border": "#FFFFFF17",
"editorGroupHeader.tabsBackground": "#181818",
"editorGroupHeader.tabsBorder": "#2B2B2B",
"editorGutter.addedBackground": "#2EA043",
"editorGutter.deletedBackground": "#F85149",
"editorGutter.modifiedBackground": "#0078D4",
"editorLineNumber.activeForeground": "#CCCCCC",
"editorLineNumber.foreground": "#6E7681",
"editorOverviewRuler.border": "#010409",
"editorWidget.background": "#202020",
"errorForeground": "#F85149",
"focusBorder": "#0078D4",
"foreground": "#CCCCCC",
"icon.foreground": "#CCCCCC",
"input.background": "#313131",
"input.border": "#3C3C3C",
"input.foreground": "#CCCCCC",
"input.placeholderForeground": "#989898",
"inputOption.activeBackground": "#2489DB82",
"inputOption.activeBorder": "#2488DB",
"keybindingLabel.foreground": "#CCCCCC",
"menu.background": "#1F1F1F",
"menu.selectionBackground": "#0078d4",
"notificationCenterHeader.background": "#1F1F1F",
"notificationCenterHeader.foreground": "#CCCCCC",
"notifications.background": "#1F1F1F",
"notifications.border": "#2B2B2B",
"notifications.foreground": "#CCCCCC",
"panel.background": "#181818",
"panel.border": "#2B2B2B",
"panelInput.border": "#2B2B2B",
"panelTitle.activeBorder": "#0078D4",
"panelTitle.activeForeground": "#CCCCCC",
"panelTitle.inactiveForeground": "#9D9D9D",
"peekViewEditor.background": "#1F1F1F",
"peekViewEditor.matchHighlightBackground": "#BB800966",
"peekViewResult.background": "#1F1F1F",
"peekViewResult.matchHighlightBackground": "#BB800966",
"pickerGroup.border": "#3C3C3C",
"progressBar.background": "#0078D4",
"quickInput.background": "#222222",
"quickInput.foreground": "#CCCCCC",
"settings.dropdownBackground": "#313131",
"settings.dropdownBorder": "#3C3C3C",
"settings.headerForeground": "#FFFFFF",
"settings.modifiedItemIndicator": "#BB800966",
"sideBar.background": "#181818",
"sideBar.border": "#2B2B2B",
"sideBar.foreground": "#CCCCCC",
"sideBarSectionHeader.background": "#181818",
"sideBarSectionHeader.border": "#2B2B2B",
"sideBarSectionHeader.foreground": "#CCCCCC",
"sideBarTitle.foreground": "#CCCCCC",
"statusBar.background": "#181818",
"statusBar.inactiveBackground": "#1F1F1F",
"statusBar.border": "#2B2B2B",
"statusBarItem.hoverBackground": "#F1F1F133",
"statusBarItem.hoverForeground": "#FFFFFF",
"statusBar.debuggingBackground": "#0078D4",
"statusBar.debuggingForeground": "#FFFFFF",
"statusBar.focusBorder": "#0078D4",
"statusBar.foreground": "#CCCCCC",
"statusBar.noFolderBackground": "#1F1F1F",
"statusBarItem.focusBorder": "#0078D4",
"statusBarItem.prominentBackground": "#6E768166",
"statusBarItem.remoteBackground": "#0078D4",
"statusBarItem.remoteForeground": "#FFFFFF",
"tab.activeBackground": "#1F1F1F",
"tab.activeBorder": "#1F1F1F",
"tab.activeBorderTop": "#0078D4",
"tab.activeForeground": "#FFFFFF",
"tab.selectedBorderTop": "#6caddf",
"tab.border": "#2B2B2B",
"tab.hoverBackground": "#1F1F1F",
"tab.inactiveBackground": "#181818",
"tab.inactiveForeground": "#9D9D9D",
"tab.unfocusedActiveBorder": "#1F1F1F",
"tab.unfocusedActiveBorderTop": "#2B2B2B",
"tab.unfocusedHoverBackground": "#1F1F1F",
"terminal.foreground": "#CCCCCC",
"terminal.tab.activeBorder": "#0078D4",
"textBlockQuote.background": "#2B2B2B",
"textBlockQuote.border": "#616161",
"textCodeBlock.background": "#2B2B2B",
"textLink.activeForeground": "#4daafc",
"textLink.foreground": "#4daafc",
"textPreformat.foreground": "#D0D0D0",
"textPreformat.background": "#3C3C3C",
"textSeparator.foreground": "#21262D",
"titleBar.activeBackground": "#181818",
"titleBar.activeForeground": "#CCCCCC",
"titleBar.border": "#2B2B2B",
"titleBar.inactiveBackground": "#1F1F1F",
"titleBar.inactiveForeground": "#9D9D9D",
"welcomePage.tileBackground": "#2B2B2B",
"welcomePage.progress.foreground": "#0078D4",
"widget.border": "#313131",
"modernActivityBarItem.activeBackground": "#FFFFFF22",
"modernActivityBarItem.hoverBackground": "#FFFFFF11",
"modernActivityBar.border": "#252526"
}
}
+205
View File
@@ -0,0 +1,205 @@
{
"$schema": "vscode://schemas/color-theme",
"name": "Dark+",
"include": "./dark_vs.json",
"tokenColors": [
{
"name": "Function declarations",
"scope": [
"entity.name.function",
"support.function",
"support.constant.handlebars",
"source.powershell variable.other.member",
"entity.name.operator.custom-literal"
],
"settings": {
"foreground": "#DCDCAA"
}
},
{
"name": "Types declaration and references",
"scope": [
"support.class",
"support.type",
"entity.name.type",
"entity.name.namespace",
"entity.other.attribute",
"entity.name.scope-resolution",
"entity.name.class",
"storage.type.numeric.go",
"storage.type.byte.go",
"storage.type.boolean.go",
"storage.type.string.go",
"storage.type.uintptr.go",
"storage.type.error.go",
"storage.type.rune.go",
"storage.type.cs",
"storage.type.generic.cs",
"storage.type.modifier.cs",
"storage.type.variable.cs",
"storage.type.annotation.java",
"storage.type.generic.java",
"storage.type.java",
"storage.type.object.array.java",
"storage.type.primitive.array.java",
"storage.type.primitive.java",
"storage.type.token.java",
"storage.type.groovy",
"storage.type.annotation.groovy",
"storage.type.parameters.groovy",
"storage.type.generic.groovy",
"storage.type.object.array.groovy",
"storage.type.primitive.array.groovy",
"storage.type.primitive.groovy"
],
"settings": {
"foreground": "#4EC9B0"
}
},
{
"name": "Types declaration and references, TS grammar specific",
"scope": [
"meta.type.cast.expr",
"meta.type.new.expr",
"support.constant.math",
"support.constant.dom",
"support.constant.json",
"entity.other.inherited-class",
"punctuation.separator.namespace.ruby"
],
"settings": {
"foreground": "#4EC9B0"
}
},
{
"name": "Control flow / Special keywords",
"scope": [
"keyword.control",
"source.cpp keyword.operator.new",
"keyword.operator.delete",
"keyword.other.using",
"keyword.other.directive.using",
"keyword.other.operator",
"entity.name.operator"
],
"settings": {
"foreground": "#C586C0"
}
},
{
"name": "Variable and parameter name",
"scope": [
"variable",
"meta.definition.variable.name",
"support.variable",
"entity.name.variable",
"constant.other.placeholder"
],
"settings": {
"foreground": "#9CDCFE"
}
},
{
"name": "Constants and enums",
"scope": [
"variable.other.constant",
"variable.other.enummember"
],
"settings": {
"foreground": "#4FC1FF"
}
},
{
"name": "Object keys, TS grammar specific",
"scope": [
"meta.object-literal.key"
],
"settings": {
"foreground": "#9CDCFE"
}
},
{
"name": "CSS property value",
"scope": [
"support.constant.property-value",
"support.constant.font-name",
"support.constant.media-type",
"support.constant.media",
"constant.other.color.rgb-value",
"constant.other.rgb-value",
"support.constant.color"
],
"settings": {
"foreground": "#CE9178"
}
},
{
"name": "Regular expression groups",
"scope": [
"punctuation.definition.group.regexp",
"punctuation.definition.group.assertion.regexp",
"punctuation.definition.character-class.regexp",
"punctuation.character.set.begin.regexp",
"punctuation.character.set.end.regexp",
"keyword.operator.negation.regexp",
"support.other.parenthesis.regexp"
],
"settings": {
"foreground": "#CE9178"
}
},
{
"scope": [
"constant.character.character-class.regexp",
"constant.other.character-class.set.regexp",
"constant.other.character-class.regexp",
"constant.character.set.regexp"
],
"settings": {
"foreground": "#d16969"
}
},
{
"scope": [
"keyword.operator.or.regexp",
"keyword.control.anchor.regexp"
],
"settings": {
"foreground": "#DCDCAA"
}
},
{
"scope": "keyword.operator.quantifier.regexp",
"settings": {
"foreground": "#d7ba7d"
}
},
{
"scope": [
"constant.character",
"constant.other.option"
],
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "constant.character.escape",
"settings": {
"foreground": "#d7ba7d"
}
},
{
"scope": "entity.name.label",
"settings": {
"foreground": "#C8C8C8"
}
}
],
"semanticTokenColors": {
"newOperator": "#C586C0",
"stringLiteral": "#ce9178",
"customLiteral": "#DCDCAA",
"numberLiteral": "#b5cea8"
}
}
+423
View File
@@ -0,0 +1,423 @@
{
"$schema": "vscode://schemas/color-theme",
"name": "Dark (Visual Studio)",
"colors": {
"checkbox.border": "#6B6B6B",
"editor.background": "#1E1E1E",
"editor.foreground": "#D4D4D4",
"editor.inactiveSelectionBackground": "#3A3D41",
"editorIndentGuide.background1": "#404040",
"editorIndentGuide.activeBackground1": "#707070",
"editor.selectionHighlightBackground": "#ADD6FF26",
"list.dropBackground": "#383B3D",
"activityBarBadge.background": "#007ACC",
"sideBarTitle.foreground": "#BBBBBB",
"input.placeholderForeground": "#A6A6A6",
"menu.background": "#252526",
"menu.foreground": "#CCCCCC",
"menu.separatorBackground": "#454545",
"menu.border": "#454545",
"menu.selectionBackground": "#0078d4",
"statusBarItem.remoteForeground": "#FFF",
"statusBarItem.remoteBackground": "#16825D",
"statusBar.inactiveBackground": "#1476B8",
"titleBar.inactiveBackground": "#323233",
"ports.iconRunningProcessForeground": "#369432",
"sideBarSectionHeader.background": "#0000",
"sideBarSectionHeader.border": "#ccc3",
"tab.selectedBackground": "#37373D",
"tab.selectedForeground": "#FFFFFF",
"tab.lastPinnedBorder": "#ccc3",
"list.activeSelectionIconForeground": "#FFF",
"terminal.inactiveSelectionBackground": "#3A3D41",
"widget.border": "#303031",
"actionBar.toggledBackground": "#383a49",
"agentsPanel.border": "#303031",
"agentsCard.border": "#00000000",
"agentsChatInput.border": "#303031",
"agentsChatInput.focusBorder": "#007ACC",
"agentsNewSessionButton.border": "#303031",
"surface.border": "#252526",
"modernActivityBarItem.activeBackground": "#1E1E1E",
"modernActivityBarItem.hoverBackground": "#1E1E1E66",
"modernActivityBar.border": "#252526"
},
"tokenColors": [
{
"scope": [
"meta.embedded",
"source.groovy.embedded",
"string meta.image.inline.markdown",
"variable.legacy.builtin.python"
],
"settings": {
"foreground": "#D4D4D4"
}
},
{
"scope": "emphasis",
"settings": {
"fontStyle": "italic"
}
},
{
"scope": "strong",
"settings": {
"fontStyle": "bold"
}
},
{
"scope": "header",
"settings": {
"foreground": "#000080"
}
},
{
"scope": "comment",
"settings": {
"foreground": "#6A9955"
}
},
{
"scope": "constant.language",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": [
"constant.numeric",
"variable.other.enummember",
"keyword.operator.plus.exponent",
"keyword.operator.minus.exponent"
],
"settings": {
"foreground": "#b5cea8"
}
},
{
"scope": "constant.regexp",
"settings": {
"foreground": "#646695"
}
},
{
"scope": "entity.name.tag",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": [
"entity.name.tag.css",
"entity.name.tag.less"
],
"settings": {
"foreground": "#d7ba7d"
}
},
{
"scope": "entity.other.attribute-name",
"settings": {
"foreground": "#9cdcfe"
}
},
{
"scope": [
"entity.other.attribute-name.class.css",
"source.css entity.other.attribute-name.class",
"entity.other.attribute-name.id.css",
"entity.other.attribute-name.parent-selector.css",
"entity.other.attribute-name.parent.less",
"source.css entity.other.attribute-name.pseudo-class",
"entity.other.attribute-name.pseudo-element.css",
"source.css.less entity.other.attribute-name.id",
"entity.other.attribute-name.scss"
],
"settings": {
"foreground": "#d7ba7d"
}
},
{
"scope": "invalid",
"settings": {
"foreground": "#f44747"
}
},
{
"scope": "markup.underline",
"settings": {
"fontStyle": "underline"
}
},
{
"scope": "markup.bold",
"settings": {
"fontStyle": "bold",
"foreground": "#569cd6"
}
},
{
"scope": "markup.heading",
"settings": {
"fontStyle": "bold",
"foreground": "#569cd6"
}
},
{
"scope": "markup.italic",
"settings": {
"fontStyle": "italic",
"foreground": "#C586C0"
}
},
{
"scope": "markup.strikethrough",
"settings": {
"fontStyle": "strikethrough"
}
},
{
"scope": "markup.inserted",
"settings": {
"foreground": "#b5cea8"
}
},
{
"scope": "markup.deleted",
"settings": {
"foreground": "#ce9178"
}
},
{
"scope": "markup.changed",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "punctuation.definition.quote.begin.markdown",
"settings": {
"foreground": "#6A9955"
}
},
{
"scope": "punctuation.definition.list.begin.markdown",
"settings": {
"foreground": "#6796e6"
}
},
{
"scope": "markup.inline.raw",
"settings": {
"foreground": "#ce9178"
}
},
{
"name": "brackets of XML/HTML tags",
"scope": "punctuation.definition.tag",
"settings": {
"foreground": "#808080"
}
},
{
"scope": [
"meta.preprocessor",
"entity.name.function.preprocessor"
],
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "meta.preprocessor.string",
"settings": {
"foreground": "#ce9178"
}
},
{
"scope": "meta.preprocessor.numeric",
"settings": {
"foreground": "#b5cea8"
}
},
{
"scope": "meta.structure.dictionary.key.python",
"settings": {
"foreground": "#9cdcfe"
}
},
{
"scope": "meta.diff.header",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "storage",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "storage.type",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": [
"storage.modifier",
"keyword.operator.noexcept"
],
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": [
"string",
"meta.embedded.assembly"
],
"settings": {
"foreground": "#ce9178"
}
},
{
"scope": "string.tag",
"settings": {
"foreground": "#ce9178"
}
},
{
"scope": "string.value",
"settings": {
"foreground": "#ce9178"
}
},
{
"scope": "string.regexp",
"settings": {
"foreground": "#d16969"
}
},
{
"name": "String interpolation",
"scope": [
"punctuation.definition.template-expression.begin",
"punctuation.definition.template-expression.end",
"punctuation.section.embedded"
],
"settings": {
"foreground": "#569cd6"
}
},
{
"name": "Reset JavaScript string interpolation expression",
"scope": [
"meta.template.expression"
],
"settings": {
"foreground": "#d4d4d4"
}
},
{
"scope": [
"support.type.vendored.property-name",
"support.type.property-name",
"source.css variable",
"source.coffee.embedded"
],
"settings": {
"foreground": "#9cdcfe"
}
},
{
"scope": "keyword",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "keyword.control",
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "keyword.operator",
"settings": {
"foreground": "#d4d4d4"
}
},
{
"scope": [
"keyword.operator.new",
"keyword.operator.expression",
"keyword.operator.cast",
"keyword.operator.sizeof",
"keyword.operator.alignof",
"keyword.operator.typeid",
"keyword.operator.alignas",
"keyword.operator.instanceof",
"keyword.operator.logical.python",
"keyword.operator.wordlike"
],
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "keyword.other.unit",
"settings": {
"foreground": "#b5cea8"
}
},
{
"scope": [
"punctuation.section.embedded.begin.php",
"punctuation.section.embedded.end.php"
],
"settings": {
"foreground": "#569cd6"
}
},
{
"scope": "support.function.git-rebase",
"settings": {
"foreground": "#9cdcfe"
}
},
{
"scope": "constant.sha.git-rebase",
"settings": {
"foreground": "#b5cea8"
}
},
{
"name": "coloring of the Java import and package identifiers",
"scope": [
"storage.modifier.import.java",
"variable.language.wildcard.java",
"storage.modifier.package.java"
],
"settings": {
"foreground": "#d4d4d4"
}
},
{
"name": "this.self",
"scope": "variable.language",
"settings": {
"foreground": "#569cd6"
}
}
],
"semanticHighlighting": true,
"semanticTokenColors": {
"newOperator": "#d4d4d4",
"stringLiteral": "#ce9178",
"customLiteral": "#D4D4D4",
"numberLiteral": "#b5cea8"
}
}
File diff suppressed because it is too large. Load diff
+22
View File
@@ -0,0 +1,22 @@
{
"name": "darwin-breeze",
"displayName": "Darwin Breeze",
"description": "Generated by darwin-breeze/build.py from DarwinBreezeDark.colors",
"publisher": "trivk",
"version": "1.0.0",
"engines": {
"vscode": "^1.70.0"
},
"categories": [
"Themes"
],
"contributes": {
"themes": [
{
"label": "Darwin Breeze Dark",
"uiTheme": "vs-dark",
"path": "./themes/DarwinBreezeDark-color-theme.json"
}
]
}
}
File diff suppressed because it is too large. Load diff