Skip to content

Commit f72b66b

Browse files
committed
🎨 Add 8 popular community themes to Studio
Expand the built-in theme library with widely-loved color schemes: - Catppuccin Mocha (dark) and Latte (light) - Dracula - Nord - Tokyo Night - Gruvbox Dark - One Dark - Solarized Light Each theme includes full palette, semantic tokens, syntax styles, and gradients following the existing SilkCircuit TOML schema. Tests updated to verify all 13 themes load correctly.
1 parent 62e285b commit f72b66b

File tree

10 files changed

+1189
-53
lines changed

10 files changed

+1189
-53
lines changed

src/studio/render/modals/settings.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,7 @@ fn render_settings_fields(frame: &mut Frame, area: Rect, state: &SettingsState)
119119
let suffix = if *field == SettingsField::Theme {
120120
state
121121
.current_theme_info()
122-
.map(|info| if info.variant == "light" { " ☀" } else { "" })
123-
.unwrap_or("")
122+
.map_or("", |info| if info.variant == "light" { " ☀" } else { "" })
124123
} else {
125124
""
126125
};
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# Catppuccin Latte — Light soothing pastel theme
2+
# https://github.com/catppuccin/catppuccin
3+
4+
[meta]
5+
name = "Catppuccin Latte"
6+
author = "Catppuccin"
7+
variant = "light"
8+
version = "1.0"
9+
description = "Soothing pastel theme for daylight lovers"
10+
11+
[palette]
12+
# Base colors
13+
base = "#eff1f5"
14+
mantle = "#e6e9ef"
15+
crust = "#dce0e8"
16+
surface0 = "#ccd0da"
17+
surface1 = "#bcc0cc"
18+
surface2 = "#acb0be"
19+
overlay0 = "#9ca0b0"
20+
overlay1 = "#8c8fa1"
21+
overlay2 = "#7c7f93"
22+
23+
# Text
24+
text = "#4c4f69"
25+
subtext1 = "#5c5f77"
26+
subtext0 = "#6c6f85"
27+
28+
# Accent colors
29+
rosewater = "#dc8a78"
30+
flamingo = "#dd7878"
31+
pink = "#ea76cb"
32+
mauve = "#8839ef"
33+
red = "#d20f39"
34+
maroon = "#e64553"
35+
peach = "#fe640b"
36+
yellow = "#df8e1d"
37+
green = "#40a02b"
38+
teal = "#179299"
39+
sky = "#04a5e5"
40+
sapphire = "#209fb5"
41+
blue = "#1e66f5"
42+
lavender = "#7287fd"
43+
44+
[tokens]
45+
"text.primary" = "text"
46+
"text.secondary" = "subtext1"
47+
"text.muted" = "subtext0"
48+
"text.dim" = "overlay1"
49+
50+
"bg.base" = "base"
51+
"bg.panel" = "mantle"
52+
"bg.code" = "crust"
53+
"bg.highlight" = "surface0"
54+
"bg.elevated" = "surface1"
55+
"bg.active" = "surface2"
56+
"bg.selection" = "surface1"
57+
58+
"accent.primary" = "mauve"
59+
"accent.secondary" = "sapphire"
60+
"accent.tertiary" = "pink"
61+
"accent.deep" = "lavender"
62+
63+
success = "green"
64+
error = "red"
65+
warning = "yellow"
66+
info = "sky"
67+
68+
"git.staged" = "green"
69+
"git.modified" = "yellow"
70+
"git.untracked" = "overlay1"
71+
"git.deleted" = "red"
72+
73+
"diff.added" = "green"
74+
"diff.removed" = "red"
75+
"diff.hunk" = "sapphire"
76+
"diff.context" = "overlay1"
77+
78+
"border.focused" = "mauve"
79+
"border.unfocused" = "surface2"
80+
81+
"code.hash" = "peach"
82+
"code.path" = "sapphire"
83+
"code.keyword" = "mauve"
84+
"code.function" = "blue"
85+
"code.string" = "green"
86+
"code.number" = "peach"
87+
"code.comment" = "overlay1"
88+
"code.type" = "yellow"
89+
"code.line_number" = "overlay0"
90+
91+
"mode.active" = "mauve"
92+
"mode.inactive" = "overlay1"
93+
"mode.hover" = "sapphire"
94+
95+
"chat.user" = "sapphire"
96+
"chat.iris" = "mauve"
97+
98+
[styles]
99+
keyword = { fg = "accent.primary", bold = true }
100+
file_path = { fg = "code.path" }
101+
file_path_bold = { fg = "code.path", bold = true }
102+
commit_hash = { fg = "code.hash" }
103+
line_number = { fg = "code.line_number" }
104+
cursor_line = { bg = "bg.highlight" }
105+
selected = { fg = "accent.secondary", bg = "bg.highlight" }
106+
active_selected = { fg = "accent.primary", bg = "bg.active", bold = true }
107+
focused_border = { fg = "border.focused" }
108+
unfocused_border = { fg = "border.unfocused" }
109+
success_style = { fg = "success" }
110+
error_style = { fg = "error" }
111+
warning_style = { fg = "warning" }
112+
info_style = { fg = "info" }
113+
dimmed = { fg = "text.dim" }
114+
muted = { fg = "text.muted" }
115+
inline_code = { fg = "success", bg = "bg.code" }
116+
mode_active = { fg = "mode.active", bold = true }
117+
mode_inactive = { fg = "mode.inactive" }
118+
mode_hover = { fg = "mode.hover" }
119+
git_staged = { fg = "git.staged" }
120+
git_modified = { fg = "git.modified" }
121+
git_untracked = { fg = "git.untracked" }
122+
git_deleted = { fg = "git.deleted" }
123+
diff_added = { fg = "diff.added" }
124+
diff_removed = { fg = "diff.removed" }
125+
diff_hunk = { fg = "diff.hunk" }
126+
diff_context = { fg = "diff.context" }
127+
author = { fg = "text.primary" }
128+
timestamp = { fg = "warning" }
129+
130+
[gradients]
131+
primary = ["mauve", "sapphire"]
132+
warm = ["peach", "yellow"]
133+
success_gradient = ["green", "teal"]
134+
error_gradient = ["red", "maroon"]
135+
aurora = ["mauve", "pink", "sapphire", "teal", "green"]
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# Catppuccin Mocha — Soothing pastel theme
2+
# https://github.com/catppuccin/catppuccin
3+
4+
[meta]
5+
name = "Catppuccin Mocha"
6+
author = "Catppuccin"
7+
variant = "dark"
8+
version = "1.0"
9+
description = "Soothing pastel theme for the high-spirited"
10+
11+
[palette]
12+
# Base colors
13+
base = "#1e1e2e"
14+
mantle = "#181825"
15+
crust = "#11111b"
16+
surface0 = "#313244"
17+
surface1 = "#45475a"
18+
surface2 = "#585b70"
19+
overlay0 = "#6c7086"
20+
overlay1 = "#7f849c"
21+
overlay2 = "#9399b2"
22+
23+
# Text
24+
text = "#cdd6f4"
25+
subtext1 = "#bac2de"
26+
subtext0 = "#a6adc8"
27+
28+
# Accent colors
29+
rosewater = "#f5e0dc"
30+
flamingo = "#f2cdcd"
31+
pink = "#f5c2e7"
32+
mauve = "#cba6f7"
33+
red = "#f38ba8"
34+
maroon = "#eba0ac"
35+
peach = "#fab387"
36+
yellow = "#f9e2af"
37+
green = "#a6e3a1"
38+
teal = "#94e2d5"
39+
sky = "#89dceb"
40+
sapphire = "#74c7ec"
41+
blue = "#89b4fa"
42+
lavender = "#b4befe"
43+
44+
[tokens]
45+
"text.primary" = "text"
46+
"text.secondary" = "subtext1"
47+
"text.muted" = "subtext0"
48+
"text.dim" = "overlay1"
49+
50+
"bg.base" = "crust"
51+
"bg.panel" = "base"
52+
"bg.code" = "mantle"
53+
"bg.highlight" = "surface0"
54+
"bg.elevated" = "surface1"
55+
"bg.active" = "surface2"
56+
"bg.selection" = "surface1"
57+
58+
"accent.primary" = "mauve"
59+
"accent.secondary" = "sapphire"
60+
"accent.tertiary" = "pink"
61+
"accent.deep" = "lavender"
62+
63+
success = "green"
64+
error = "red"
65+
warning = "yellow"
66+
info = "sky"
67+
68+
"git.staged" = "green"
69+
"git.modified" = "yellow"
70+
"git.untracked" = "overlay1"
71+
"git.deleted" = "red"
72+
73+
"diff.added" = "green"
74+
"diff.removed" = "red"
75+
"diff.hunk" = "sapphire"
76+
"diff.context" = "overlay1"
77+
78+
"border.focused" = "mauve"
79+
"border.unfocused" = "surface2"
80+
81+
"code.hash" = "peach"
82+
"code.path" = "sapphire"
83+
"code.keyword" = "mauve"
84+
"code.function" = "blue"
85+
"code.string" = "green"
86+
"code.number" = "peach"
87+
"code.comment" = "overlay1"
88+
"code.type" = "yellow"
89+
"code.line_number" = "overlay0"
90+
91+
"mode.active" = "mauve"
92+
"mode.inactive" = "overlay1"
93+
"mode.hover" = "sapphire"
94+
95+
"chat.user" = "sapphire"
96+
"chat.iris" = "mauve"
97+
98+
[styles]
99+
keyword = { fg = "accent.primary", bold = true }
100+
file_path = { fg = "code.path" }
101+
file_path_bold = { fg = "code.path", bold = true }
102+
commit_hash = { fg = "code.hash" }
103+
line_number = { fg = "code.line_number" }
104+
cursor_line = { bg = "bg.highlight" }
105+
selected = { fg = "accent.secondary", bg = "bg.highlight" }
106+
active_selected = { fg = "accent.primary", bg = "bg.active", bold = true }
107+
focused_border = { fg = "border.focused" }
108+
unfocused_border = { fg = "border.unfocused" }
109+
success_style = { fg = "success" }
110+
error_style = { fg = "error" }
111+
warning_style = { fg = "warning" }
112+
info_style = { fg = "info" }
113+
dimmed = { fg = "text.dim" }
114+
muted = { fg = "text.muted" }
115+
inline_code = { fg = "success", bg = "bg.code" }
116+
mode_active = { fg = "mode.active", bold = true }
117+
mode_inactive = { fg = "mode.inactive" }
118+
mode_hover = { fg = "mode.hover" }
119+
git_staged = { fg = "git.staged" }
120+
git_modified = { fg = "git.modified" }
121+
git_untracked = { fg = "git.untracked" }
122+
git_deleted = { fg = "git.deleted" }
123+
diff_added = { fg = "diff.added" }
124+
diff_removed = { fg = "diff.removed" }
125+
diff_hunk = { fg = "diff.hunk" }
126+
diff_context = { fg = "diff.context" }
127+
author = { fg = "text.primary" }
128+
timestamp = { fg = "warning" }
129+
130+
[gradients]
131+
primary = ["mauve", "sapphire"]
132+
warm = ["peach", "yellow"]
133+
success_gradient = ["green", "teal"]
134+
error_gradient = ["red", "maroon"]
135+
aurora = ["mauve", "pink", "sapphire", "teal", "green"]

0 commit comments

Comments
 (0)