Unnamed repository; edit this file 'description' to name the repository.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
# wolf-alabaster-light.toml
#
# Author: Wolf <[email protected]>
# Project: https://github.com/wolf/alabaster-for-helix
# Download: https://raw.githubusercontent.com/wolf/alabaster-for-helix/main/helix/dot-config/helix/themes/wolf-alabaster-light.toml
#
# This is a light-background theme especically for the Helix editor.
#
# The most important part here is the syntax stuff, but the theme includes UI stuff specifically for Helix, as well.
#
# What I care about is:
#   * Readable syntax, no matter the language
#   * The error messages provided by the LSP
#   * Anything special needed to make the UI non-surprising
#   * Building a minimal definition
#
# I started from a couple important sources:
#   * The [priorities and ideas](https://tonsky.me/blog/syntax-highlighting/) behind the Alabaster Theme (which exists for many editors) by Nikita Prokopov
#   * His [actual repo implementing the theme](https://github.com/tonsky/sublime-scheme-alabaster)
#   * A [theme template](https://github.com/joegm/helix-theme-template) on GitHub provided by joegm

# I don't consider this to be done! I absolutely want feedback. I absolutely will continue to tinker.

# GENERAL - Diagnostics (LSP errors/warnings)
warning = { fg = "highlight" }
error = { fg = "error-red", modifiers = ["bold"] }
info = { fg = "definition" }
hint = { fg = "punctuation" }
diagnostic = { underline = { style = "curl" } }

# UI - Interface elements
"ui.background" = { bg = "bg" }
"ui.text" = { fg = "fg" }
"ui.text.focus" = { fg = "active", modifiers = ["bold"] }

"ui.cursor" = { bg = "cursor-secondary", fg = "bg" }
"ui.cursor.primary" = { bg = "active", fg = "bg" }
# Bracket matching: Helix only styles the *other* bracket via ui.match, not the one
# under the cursor. ui.cursor.match affects cursor appearance, not the bracket itself.
# Following tonsky's Sublime approach (blue + underline) as closely as Helix allows.
"ui.cursor.match" = { fg = "active", underline = { style = "line" } }
"ui.match" = { fg = "active", underline = { style = "line" } }
"ui.cursorline.primary" = { bg = "cursorline-primary" }
"ui.cursorline" = { bg = "cursorline" }
"ui.cursorcolumn" = { bg = "cursorline" }

"ui.gutter" = { bg = "bg" }

"ui.selection" = { bg = "selection" }
"ui.selection.primary" = { bg = "selection-primary" }

"ui.linenr" = { fg = "punctuation" }
"ui.linenr.selected" = { fg = "active", modifiers = ["bold"] }

"ui.statusline" = { fg = "fg", bg = "panel" }
"ui.statusline.inactive" = { fg = "punctuation", bg = "panel" }

# Bufferline - make active buffer clearly visible (like onelight-fixed-bufferline)
"ui.bufferline.active" = { fg = "fg", bg = "bg", modifiers = ["bold"] }
"ui.bufferline.background" = { bg = "bg" }
"ui.bufferline" = { fg = "punctuation", bg = "panel" }

"ui.menu" = { fg = "fg", bg = "panel" }
"ui.menu.selected" = { fg = "bg", bg = "active" }

"ui.popup" = { fg = "fg", bg = "panel" }
"ui.popup.info" = { fg = "fg", bg = "panel" }
"ui.window" = { fg = "punctuation" }
"ui.help" = { fg = "fg", bg = "bg" }

# Jump labels - extremely visible
"ui.virtual.jump-label" = { fg = "jump-label", modifiers = ["bold"] }

# Virtual text (inlay hints, etc.) - dimmed type color
"ui.virtual" = { fg = "inlay-hint" }
"ui.virtual.inlay-hint" = { fg = "inlay-hint" }
"ui.virtual.ruler" = { bg = "cursorline" }

# LSP diagnostic inline/expanded text
"diagnostic.error" = { underline = { color = "error-red", style = "curl" } }
"diagnostic.warning" = { underline = { color = "highlight", style = "curl" } }
"diagnostic.info" = { underline = { color = "definition", style = "curl" } }
"diagnostic.hint" = { underline = { color = "punctuation", style = "curl" } }
"diagnostic.deprecated" = { fg = "punctuation", modifiers = ["crossed_out"] }

# SYNTAX HIGHLIGHTING - Following Alabaster's minimal approach
# Only 4 categories get color: strings, constants, comments, definitions
# Everything else (keywords, variables, calls) stays default fg

"string" = { fg = "string" }
"string.regexp" = { fg = "string" }
"string.special" = { fg = "string" }

"constant" = { fg = "constant" }
"constant.numeric" = { fg = "constant" }
"constant.character" = { fg = "constant" }
"constant.builtin" = { fg = "constant" }

"comment" = { fg = "comment" }
"comment.line" = { fg = "comment" }
"comment.block" = { fg = "comment" }

"function" = { fg = "definition" }
# Helix uses function.builtin only at call sites (no builtin definitions exist),
# so we treat it as a call—unhighlighted per tonsky's philosophy.
"function.builtin" = { fg = "fg" }
"function.method" = { fg = "definition" }
"function.call" = { fg = "fg" }
"function.method.call" = { fg = "fg" }

"constructor" = { fg = "definition" }
"type" = { fg = "fg" }
"type.definition" = { fg = "definition" }
"type.builtin" = { fg = "fg" }

# These are NOT highlighted (Alabaster philosophy: keywords are obvious)
"keyword" = { fg = "fg" }
"keyword.control" = { fg = "fg" }
"keyword.operator" = { fg = "fg" }
"variable" = { fg = "fg" }
"variable.parameter" = { fg = "fg" }
"variable.builtin" = { fg = "fg" }

# Punctuation is dimmed
"punctuation" = { fg = "punctuation" }
"punctuation.bracket" = { fg = "punctuation" }
"punctuation.delimiter" = { fg = "punctuation" }

"operator" = { fg = "punctuation" }

# Special cases
"tag" = { fg = "definition" }
"tag.error" = { fg = "error-red", underline = { style = "line" } }
"attribute" = { fg = "fg" }
"namespace" = { fg = "fg" }
"label" = { fg = "constant" }

# MARKUP - For markdown/documentation
"markup.heading" = { fg = "definition", modifiers = ["bold"] }
"markup.list" = { fg = "fg" }
"markup.bold" = { modifiers = ["bold"] }
"markup.italic" = { modifiers = ["italic"] }
"markup.link.url" = { fg = "string", modifiers = ["underlined"] }
"markup.link.text" = { fg = "definition" }
"markup.quote" = { fg = "comment" }
"markup.raw" = { fg = "string" }

# DIFF - Version control
"diff.plus" = { fg = "string" }
"diff.minus" = { fg = "error-red" }
"diff.delta" = { fg = "highlight" }

[palette]
# Core colors (Alabaster-inspired)
fg = "#000000"           # Main text (Alabaster uses pure black)
bg = "#F7F7F7"           # Background (Alabaster's light grey)

# The 4 semantic colors
string = "#448C27"       # Green - strings & numbers
constant = "#7A3E9D"     # Magenta - constants, booleans
comment = "#AA3731"      # Red - comments (important!)
definition = "#325CC0"   # Blue - function/class definitions

# Supporting colors
punctuation = "#777777"  # Grey - dimmed operators/brackets
selection = "#DDE7ED"    # Light gray-blue - secondary selections (subtle but distinct)
selection-primary = "#BFDBFE"  # Light blue - primary selection (original Alabaster)
active = "#007ACC"       # Bright blue - cursor, active elements
cursor-secondary = "#5A9DC4"  # Dimmed blue - secondary cursors (multi-cursor)
highlight = "#FFBC5D"    # Orange - search, warnings
error-red = "#AA3731"    # Red - errors
panel = "#EEEEEE"        # Darker grey - UI panels, menus, popups
cursorline = "#F3F3F3"   # Subtle highlight - secondary cursorline
cursorline-primary = "#EFEFEF"  # Primary cursorline (tonsky's original)
jump-label = "#FF4500"   # Bright orange-red - jump destinations
inlay-hint = "#8090B8"   # Dimmed blue - virtual text (type hints)

# Diff colors
diff-green = "#448C27"   # Green - additions (same as string)
diff-red = "#AA3731"     # Red - deletions (same as error-red)
diff-orange = "#FFBC5D"  # Orange - changes (same as highlight)