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-dark.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-dark.toml
#
# This is a dark-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 (Original Alabaster Dark)
fg = "#CECECE"           # Main text - light grey
bg = "#0E1415"           # Background - very dark blue-black

# The 4 semantic colors (Original Alabaster Dark)
string = "#95CB82"       # Green - strings & numbers
constant = "#CC8BC9"     # Magenta - constants, booleans
comment = "#DFDF8E"      # Yellow - comments (important!)
definition = "#71ADE7"   # Blue - function/class definitions

# Supporting colors
punctuation = "#8C8C8C"  # Grey - dimmed operators/brackets
selection = "#1E3A5F"    # Very dark blue - secondary selections (subtle)
selection-primary = "#4A7BA7"  # Bright blue - primary selection (clearly distinct)
active = "#CD974B"       # Golden brown - cursor, active elements (original Alabaster Dark)
cursor-secondary = "#7A5B30"  # Dimmed gold - secondary cursors (multi-cursor)
highlight = "#FF9800"    # Orange - search, warnings
error-red = "#DFDF8E"    # Yellow - errors (use comment color for visibility)
panel = "#252526"        # Slightly lighter grey - UI panels, menus, popups
cursorline = "#141819"   # Subtle highlight - secondary cursorline
cursorline-primary = "#1A2022"  # Primary cursorline (tonsky's original)
jump-label = "#FF6B35"   # Bright orange - jump destinations
inlay-hint = "#4A7090"   # Dimmed blue - virtual text (type hints)

# Diff colors
diff-green = "#95CB82"   # Green - additions (same as string)
diff-red = "#DFDF8E"     # Yellow - deletions (same as error-red)
diff-orange = "#FF9800"  # Orange - changes (same as highlight)