Skip to main content

max / alloy

11.7 KB · 295 lines History Blame Raw
1 @{! theme = night }
2 # Descended from Akari by Shu Kutsuzawa <cappyzawa@gmail.com>, MIT.
3 # https://github.com/cappyzawa/akari-theme
4 # The values below are makeover's own and no longer Akari's; the ancestry is.
5 # @{meta.name} — the warm ground of a lantern-lit alley, under a violet accent.
6 #
7 # Generated by skelgen from makeover's theme of the same name. Every tone
8 # below is derived; nothing here is a hex literal. Edit the theme, not this.
9
10 # UI elements
11 "ui.background" = { bg = "background" }
12 "ui.text" = "foreground"
13 "ui.text.focus" = { fg = "selection-fg", bg = "selection-bg" }
14 "ui.text.inactive" = { fg = "bright-black" }
15 "ui.text.info" = { fg = "info" }
16 "ui.text.directory" = { fg = "directory" }
17
18 "ui.cursor" = { fg = "cursor-text", bg = "cursor" }
19 "ui.cursor.normal" = { fg = "cursor-text", bg = "cursor" }
20 "ui.cursor.primary" = { fg = "cursor-text", bg = "cursor" }
21 "ui.cursor.primary.normal" = { fg = "cursor-text", bg = "cursor" }
22 "ui.cursor.match" = { fg = "accent", bg = "sunken", modifiers = ["bold"] }
23 "ui.cursor.insert" = { fg = "cursor-text", bg = "green" }
24 "ui.cursor.primary.insert" = { fg = "cursor-text", bg = "green" }
25 "ui.cursor.select" = { fg = "cursor-text", bg = "magenta" }
26 "ui.cursor.primary.select" = { fg = "cursor-text", bg = "magenta" }
27
28 "ui.selection" = { bg = "selection-bg" }
29 "ui.selection.primary" = { bg = "selection-bg" }
30
31 "ui.cursorline.primary" = { bg = "cursorline" }
32 "ui.cursorline.secondary" = { bg = "surface" }
33 "ui.cursorcolumn.primary" = { bg = "surface" }
34 "ui.cursorcolumn.secondary" = { bg = "surface" }
35
36 "ui.gutter" = { bg = "background" }
37 "ui.gutter.selected" = { bg = "cursorline" }
38 "ui.linenr" = { fg = "bright-black" }
39 "ui.linenr.selected" = { fg = "accent" }
40
41 "ui.statusline" = { fg = "foreground", bg = "surface" }
42 "ui.statusline.inactive" = { fg = "comment", bg = "surface" }
43 "ui.statusline.normal" = { fg = "background", bg = "green", modifiers = ["bold"] }
44 "ui.statusline.insert" = { fg = "background", bg = "accent", modifiers = ["bold"] }
45 "ui.statusline.select" = { fg = "background", bg = "magenta", modifiers = ["bold"] }
46 "ui.statusline.separator" = { fg = "bright-black", bg = "surface" }
47
48 "ui.popup" = { fg = "foreground", bg = "raised" }
49 "ui.popup.info" = { fg = "foreground", bg = "raised" }
50 "ui.window" = { fg = "border" }
51 "ui.background.separator" = { bg = "surface" }
52 "ui.help" = { fg = "foreground", bg = "raised" }
53
54 "ui.menu" = { fg = "foreground", bg = "raised" }
55 "ui.menu.selected" = { fg = "selection-fg", bg = "selection-bg" }
56 "ui.menu.scroll" = { fg = "bright-black", bg = "raised" }
57
58 "ui.virtual.ruler" = { bg = "surface" }
59 "ui.virtual.whitespace" = { fg = "bright-black" }
60 "ui.virtual.indent-guide" = { fg = "bright-black" }
61 "ui.virtual.inlay-hint" = { fg = "comment" }
62 "ui.virtual.inlay-hint.parameter" = { fg = "comment" }
63 "ui.virtual.inlay-hint.type" = { fg = "comment" }
64 "ui.virtual.wrap" = { fg = "bright-black" }
65 "ui.virtual.jump-label" = { fg = "bright-red", modifiers = ["bold"] }
66
67 "ui.debug.breakpoint" = { fg = "red" }
68 "ui.debug.active" = { fg = "accent", modifiers = ["bold"] }
69
70 "ui.highlight" = { bg = "match-bg" }
71 "ui.highlight.frameline" = { bg = "surface" }
72
73 "ui.bufferline" = { fg = "bright-black", bg = "surface" }
74 "ui.bufferline.active" = { fg = "foreground", bg = "background" }
75 "ui.bufferline.background" = { bg = "surface" }
76
77 "ui.picker.header" = { fg = "bright-blue", modifiers = ["bold"] }
78 "ui.picker.header.column" = { fg = "bright-blue", modifiers = ["bold"] }
79 "ui.picker.header.column.active" = { fg = "accent", modifiers = ["bold"] }
80
81 # Diagnostics
82 "error" = { fg = "red", modifiers = ["bold"] }
83 "warning" = { fg = "yellow" }
84 "info" = { fg = "blue" }
85 "hint" = { fg = "comment" }
86
87 "diagnostic.error" = { underline = { color = "red", style = "curl" } }
88 "diagnostic.warning" = { underline = { color = "yellow", style = "curl" } }
89 "diagnostic.info" = { underline = { color = "blue", style = "curl" } }
90 "diagnostic.hint" = { underline = { color = "comment", style = "curl" } }
91 "diagnostic.unnecessary" = { modifiers = ["dim"] }
92 "diagnostic.deprecated" = { modifiers = ["crossed_out"] }
93
94 "tabstop" = { underline = { color = "accent", style = "dashed" } }
95
96 # Diff
97 "diff.plus" = "green"
98 "diff.plus.gutter" = "green"
99 "diff.minus" = "red"
100 "diff.minus.gutter" = "red"
101 "diff.delta" = "amber"
102 "diff.delta.gutter" = "amber"
103 "diff.delta.moved" = "diff-moved"
104 "diff.delta.conflict" = { fg = "conflict", modifiers = ["bold"] }
105
106 # Markup
107 "markup.heading" = { fg = "accent", modifiers = ["bold"] }
108 "markup.heading.marker" = { fg = "comment" }
109 "markup.heading.1" = { fg = "accent", modifiers = ["bold"] }
110 "markup.heading.2" = { fg = "amber", modifiers = ["bold"] }
111 "markup.heading.3" = { fg = "ember", modifiers = ["bold"] }
112 "markup.heading.4" = { fg = "amber" }
113 "markup.heading.5" = { fg = "comment", modifiers = ["bold"] }
114 "markup.heading.6" = { fg = "blue" }
115 "markup.list" = { fg = "cyan" }
116 "markup.list.numbered" = { fg = "accent" }
117 "markup.list.unnumbered" = { fg = "cyan" }
118 "markup.list.checked" = { fg = "green" }
119 "markup.list.unchecked" = { fg = "comment" }
120 "markup.bold" = { modifiers = ["bold"] }
121 "markup.italic" = { modifiers = ["italic"] }
122 "markup.strikethrough" = { modifiers = ["crossed_out"] }
123 "markup.link.url" = { fg = "link", modifiers = ["underlined"] }
124 "markup.link.text" = { fg = "cyan" }
125 "markup.link.label" = { fg = "magenta" }
126 "markup.quote" = { fg = "comment", modifiers = ["dim"] }
127 "markup.raw" = { fg = "bright-green" }
128 "markup.raw.inline" = { fg = "bright-green" }
129 "markup.raw.block" = { fg = "bright-green" }
130 "markup.normal.completion" = "foreground"
131 "markup.normal.hover" = "foreground"
132 "markup.heading.completion" = { fg = "accent", modifiers = ["bold"] }
133 "markup.heading.hover" = { fg = "accent", modifiers = ["bold"] }
134 "markup.raw.inline.completion" = { fg = "bright-green" }
135 "markup.raw.inline.hover" = { fg = "bright-green" }
136
137 # Syntax highlighting
138 "attribute" = { fg = "amber" }
139 "type" = { fg = "amber" }
140 "type.builtin" = { fg = "yellow" }
141 "type.enum" = { fg = "amber" }
142 "type.enum.variant" = { fg = "amber" }
143 "type.parameter" = { fg = "yellow" }
144
145 "constructor" = { fg = "amber" }
146
147 "constant" = { fg = "constant" }
148 "constant.builtin" = { fg = "constant" }
149 "constant.builtin.boolean" = { fg = "constant" }
150 "constant.character" = { fg = "accent" }
151 "constant.character.escape" = { fg = "escape" }
152 "constant.numeric" = { fg = "constant" }
153 "constant.numeric.integer" = { fg = "constant" }
154 "constant.numeric.float" = { fg = "constant" }
155
156 "string" = { fg = "green" }
157 "string.regexp" = { fg = "regexp" }
158 "string.regexp.special" = { fg = "bright-magenta" }
159 "string.special" = { fg = "green" }
160 "string.special.path" = { fg = "path" }
161 "string.special.url" = { fg = "link", modifiers = ["underlined"] }
162 "string.special.symbol" = { fg = "bright-magenta" }
163
164 "comment" = { fg = "comment", modifiers = ["dim"] }
165 "comment.line" = { fg = "comment", modifiers = ["dim"] }
166 "comment.line.documentation" = { fg = "comment", modifiers = ["dim"] }
167 "comment.block" = { fg = "comment", modifiers = ["dim"] }
168 "comment.block.documentation" = { fg = "comment", modifiers = ["dim"] }
169 "comment.unused" = { fg = "comment", modifiers = ["dim"] }
170
171 "variable" = "foreground"
172 "variable.builtin" = { fg = "bright-red" }
173 "variable.parameter" = "foreground"
174 "variable.other" = "foreground"
175 "variable.other.member" = "member"
176 "variable.other.member.private" = "member"
177
178 "label" = { fg = "amber" }
179
180 "punctuation" = "foreground"
181 "punctuation.bracket" = "foreground"
182 "punctuation.delimiter" = "foreground"
183 "punctuation.special" = { fg = "amber" }
184
185 "keyword" = { fg = "accent" }
186 "keyword.control" = { fg = "accent" }
187 "keyword.control.conditional" = { fg = "accent" }
188 "keyword.control.repeat" = { fg = "accent" }
189 "keyword.control.import" = { fg = "accent" }
190 "keyword.control.return" = { fg = "accent" }
191 "keyword.control.exception" = { fg = "accent" }
192 "keyword.operator" = { fg = "accent" }
193 "keyword.directive" = { fg = "macro" }
194 "keyword.function" = { fg = "accent" }
195 "keyword.storage" = { fg = "accent" }
196 "keyword.storage.type" = { fg = "accent" }
197 "keyword.storage.modifier" = { fg = "accent" }
198
199 "operator" = "foreground"
200
201 "function" = { fg = "magenta" }
202 "function.builtin" = { fg = "bright-magenta" }
203 "function.method" = { fg = "magenta" }
204 "function.method.private" = { fg = "magenta" }
205 "function.macro" = { fg = "macro" }
206 "function.special" = { fg = "bright-magenta" }
207
208 "tag" = { fg = "accent" }
209 "tag.builtin" = { fg = "blue" }
210
211 "namespace" = { fg = "amber" }
212
213 "special" = { fg = "bright-yellow" }
214
215 "module" = { fg = "amber" }
216
217 # Palette definition (MUST be at the end of the file)
218 [palette]
219 # Surfaces and text, straight from the theme's intents.
220 background = "@{surface.page}"
221 foreground = "@{content.primary}"
222
223 cursor = "@{action.primary}"
224 cursor-text = "@{surface.page}"
225 # The selection is the page carrying a wash of the theme's warm tone, which is
226 # what makes a selected run read as lit rather than merely shaded. Warm on
227 # purpose, and not the accent: the caret is the accent, and a selection tinted
228 # the same hue as the thing sitting inside it hides the caret in its own wash.
229 selection-bg = "@{mix(surface.page, status.warning, 0.25)}"
230 selection-fg = "@{content.primary}"
231 # One step off the page: enough to find the caret's line, not enough to stripe
232 # the buffer.
233 cursorline = "@{mix(surface.page, surface.sunken, 0.4)}"
234
235 surface = "@{surface.sunken}"
236 raised = "@{mix(surface.page, surface.sunken, 0.5)}"
237 border = "@{line.border}"
238
239 # The eight normal ANSI slots, from skelgen's shared table — the same one the
240 # bare VT and the terminal emulator render from, so a color named `red` means
241 # one thing everywhere in the image.
242 black = "@{ansi.0}"
243 red = "@{ansi.1}"
244 green = "@{ansi.2}"
245 yellow = "@{ansi.3}"
246 blue = "@{ansi.4}"
247 magenta = "@{ansi.5}"
248 cyan = "@{ansi.6}"
249 white = "@{ansi.7}"
250
251 # The bright tier, and the one place this file departs from the shared table.
252 #
253 # A terminal's bright slots are lighter than their normal counterparts, which is
254 # the right move on a dark background and the wrong one on a light background:
255 # lighter means *less* contrast against the page, so "bright" syntax would come
256 # out fainter than plain syntax. What the tier actually wants is "further from
257 # the page", so each one is its normal slot pulled toward the text color.
258 #
259 # Written as a mix toward `content.primary` rather than as a lighten or a
260 # darken because that expression is correct on both polarities without being
261 # two expressions: on a light theme the text is dark and this darkens, on a
262 # dark theme the text is light and this lightens.
263 bright-black = "@{ansi.8}"
264 bright-red = "@{mix(ansi.1, content.primary, 0.35)}"
265 bright-green = "@{mix(ansi.2, content.primary, 0.35)}"
266 bright-yellow = "@{mix(ansi.3, content.primary, 0.35)}"
267 bright-blue = "@{mix(ansi.4, content.primary, 0.35)}"
268 bright-magenta = "@{mix(ansi.5, content.primary, 0.35)}"
269 bright-cyan = "@{mix(ansi.6, content.primary, 0.35)}"
270 bright-white = "@{mix(ansi.7, content.primary, 0.35)}"
271
272 # Named roles. These are what the highlight rules above actually reference; the
273 # ANSI names are here for the handful of rules that speak in them.
274 accent = "@{action.primary}"
275 ember = "@{mix(status.warning, status.danger, 0.5)}"
276 amber = "@{status.warning}"
277 constant = "@{category.six}"
278 # Comments want to recede, which is what `muted` is for. The hand-written
279 # pair reached for `secondary` and got away with it on the light theme, where
280 # secondary is a deep blue; on the dark theme the same intent is a near-white
281 # and comments came out as loud as code.
282 comment = "@{content.muted}"
283 path = "@{status.success}"
284 macro = "@{mix(category.five, content.primary, 0.35)}"
285 escape = "@{mix(category.five, content.primary, 0.35)}"
286 regexp = "@{mix(status.success, content.primary, 0.35)}"
287 link = "@{mix(status.info, content.primary, 0.35)}"
288 member = "@{status.info}"
289 directory = "@{category.six}"
290 sunken = "@{mix(surface.page, surface.sunken, 0.4)}"
291 match-bg = "@{mix(surface.raised, status.danger, 0.2)}"
292 info = "@{status.info}"
293 diff-moved = "@{status.info}"
294 conflict = "@{status.danger}"
295