From ce06b298802dbbd5e94e21b85fc295032a73ef60 Mon Sep 17 00:00:00 2001 From: Rudxain <76864299+Rudxain@users.noreply.github.com> Date: Tue, 18 Nov 2025 08:53:34 -0400 Subject: [PATCH] feat(theme): add "omicron" (placeholder name) --- runtime/themes/omicron_dark.toml | 112 +++++++++++++++++++++++++++++ runtime/themes/omicron_light.toml | 113 ++++++++++++++++++++++++++++++ 2 files changed, 225 insertions(+) create mode 100644 runtime/themes/omicron_dark.toml create mode 100644 runtime/themes/omicron_light.toml diff --git a/runtime/themes/omicron_dark.toml b/runtime/themes/omicron_dark.toml new file mode 100644 index 000000000000..0fdf09b5d16c --- /dev/null +++ b/runtime/themes/omicron_dark.toml @@ -0,0 +1,112 @@ +error = "err" +warning = "warn" +hint = "diag" +info = "diag" +diagnostic = { underline = { color = "ghost", style = "curl" } } +"diagnostic.error" = { underline = { color = "err", style = "curl" } } +"diagnostic.warning" = { underline = { color = "warn", style = "curl" } } +"diagnostic.deprecated" = { fg = "code_unsafe", modifiers = ["crossed_out"] } + +"ui.background" = { bg = "bg" } +"ui.window" = { bg = "bg_ui" } +"ui.gutter" = { bg = "bg_ui" } +"ui.text" = "default" +"ui.text.focus" = { bg = "sel" } +# secondary +"ui.cursor" = { fg = "#111111", bg = "#cccccc" } +# it only uses 1 cell, and it must be skimmable, +# so force max contrast +"ui.cursor.primary" = { fg = "#000000", bg = "#ffffff" } +"ui.cursor.match" = { bg = "#333333" } +"ui.debug" = "default" +# it feels questionable, but it's more consistent and clean than `reversed`; +# some web-browsers do the same +"ui.selection" = { fg = "#222222", bg = "#aaaaaa" } +"ui.cursorline" = { bg = "sel_weak" } +"ui.cursorcolumn" = { bg = "sel_weak" } +"ui.virtual" = "ghost" +"ui.virtual.ruler" = { bg = "sel_weak" } +"ui.virtual.inlay-hint" = "ghost" +# these are ephemeral and user-controllable, +# are not part of the buffer, +# should be skimmable, +# so override FG & BG to guarantee contrast +# while also signaling that they are special text +"ui.virtual.jump-label" = { fg = "#ffffff", bg = "sym" } +"ui.statusline" = { fg = "default", bg = "bg_ui" } +"ui.bufferline" = { fg = "default", bg = "bg_ui" } +"ui.bufferline.active" = { bg = "sel", modifiers = ["bold"] } +"ui.help" = { fg = "doc", bg = "bg_ui" } +"ui.highlight" = { bg = "sel" } +"ui.menu" = { fg = "code", bg = "bg_ui" } +"ui.menu.selected" = { bg = "sel" } +"ui.popup" = { fg = "code", bg = "bg_ui" } +"ui.picker.header" = { modifiers = ["bold", "underlined"] } + + +# Tree-Sitter scopes (syntax highlight) + +# NOTE: builtin HTML ones can be trivially auto-checked, +# but custom ones (contain hyphens) need highlighting. +#"attribute" = {} +#"tag" = {} +"tag.error" = { fg = "err", underline = { style = "line" } } +"constant" = "literal" +# TO-DO: escapes need highlight, but not unsafe +"constant.character.escape" = "literal_unsafe" +# floats are a plague! +# https://riskledger.com/resources/floating-point-numbers +# https://0.30000000000000004.com/ +# https://reddit.com/r/ProgrammerHumor/comments/13gt6co/standagainstfloats +"constant.numeric.float" = "literal_unsafe" +"string" = "literal" +"string.regexp" = "literal_unsafe" +"string.special" = "sym" +"comment" = "doc" +# some are mutable and can be misused without triggering warns +#"variable.builtin" = "literal_unsafe" +"punctuation" = "default_weak" +# beware of the Halting Problem! +"keyword.control.repeat" = "code_unsafe" +"markup.heading" = { modifiers = ["bold"] } +"markup.heading.marker" = "sym" +"markup.bold" = { modifiers = ["bold"] } +"markup.italic" = { modifiers = ["italic"] } +"markup.strikethrough" = { modifiers = ["crossed_out"] } +"markup.link" = { fg = "sym", underline = { style = "line" } } +"markup.quote" = "doc" + +"markup.normal" = "default" +"markup.normal.raw" = "code" +"markup.heading.raw" = "code" +"markup.raw" = "code" + +"diff.plus" = "green" # + add +"diff.minus" = "red" # - delete +"diff.delta" = "yellow" # ± edit +"diff.delta.moved" = "sym" # -> rename +"diff.delta.conflict" = "err" # ❌ + +[palette] +bg = "#000000" +bg_ui = "#111111" +default = "#cccccc" +default_weak = "#999999" +ghost = "#666666" +code = "#99cc99" +code_unsafe = "#ffcc77" +red = "#bb3333" +green = "#33aa33" +yellow = "#aaaa33" +sel = "#333333" +sel_weak = "#171717" +# I call this "eye-piercing red" because +# it's designed to be jarring like a laser +err = "#ff2200" +warn = "#eedd33" +diag = "#0077ff" +literal = "#ccee00" +literal_unsafe = "#ff7700" +sym = "#11aaff" +# inspired by ⭐ Gleam's "faf pink" +doc = "#cc77cc" diff --git a/runtime/themes/omicron_light.toml b/runtime/themes/omicron_light.toml new file mode 100644 index 000000000000..d3097fa78ff6 --- /dev/null +++ b/runtime/themes/omicron_light.toml @@ -0,0 +1,113 @@ +error = "err" +warning = "warn" +hint = "diag" +info = "diag" +diagnostic = { underline = { color = "ghost", style = "curl" } } +"diagnostic.error" = { underline = { color = "err", style = "curl" } } +"diagnostic.warning" = { underline = { color = "warn", style = "curl" } } +"diagnostic.deprecated" = { fg = "code_unsafe", bg = "code_bg_unsafe", modifiers = [ + "crossed_out", +] } + +"ui.background" = { bg = "bg" } +"ui.window" = { bg = "bg_ui" } +"ui.gutter" = { bg = "bg_ui" } +"ui.text" = "default" +"ui.text.focus" = { bg = "sel" } +# secondary +"ui.cursor" = { fg = "#eeeeee", bg = "#333333" } +# it only uses 1 cell, and it must be skimmable, +# so force max contrast +"ui.cursor.primary" = { fg = "#ffffff", bg = "#000000" } +"ui.cursor.match" = { bg = "#cccccc" } +"ui.debug" = "default" +# it feels questionable, but it's more consistent and clean than `reversed`; +# some web-browsers do the same +"ui.selection" = { fg = "#dddddd", bg = "#555555" } +"ui.cursorline" = { bg = "sel_weak" } +"ui.cursorcolumn" = { bg = "sel_weak" } +"ui.virtual" = "ghost" +"ui.virtual.ruler" = { bg = "sel_weak" } +"ui.virtual.inlay-hint" = "ghost" +# these are ephemeral and user-controllable, +# are not part of the buffer, +# should be skimmable, +# so override FG & BG to guarantee contrast +# while also signaling that they are special text +"ui.virtual.jump-label" = { fg = "#000000", bg = "sym" } +"ui.statusline" = { fg = "default", bg = "bg_ui" } +"ui.bufferline" = { fg = "default", bg = "bg_ui" } +"ui.bufferline.active" = { bg = "sel", modifiers = ["bold"] } +"ui.help" = { fg = "doc", bg = "bg_ui" } +"ui.highlight" = { bg = "sel" } +"ui.menu" = { fg = "code", bg = "bg_ui" } +"ui.menu.selected" = { bg = "sel" } +"ui.popup" = { fg = "code", bg = "bg_ui" } +"ui.picker.header" = { modifiers = ["bold", "underlined"] } + + +# Tree-Sitter scopes (syntax highlight) + +# NOTE: builtin HTML ones can be trivially auto-checked, +# but custom ones (contain hyphens) need highlighting. +#"attribute" = {} +#"tag" = {} +"tag.error" = { fg = "err", underline = { style = "line" } } +"constant" = "literal" +# TO-DO: escapes need highlight, but not unsafe +"constant.character.escape" = "literal_unsafe" +# floats are a plague! +# https://riskledger.com/resources/floating-point-numbers +# https://0.30000000000000004.com/ +# https://reddit.com/r/ProgrammerHumor/comments/13gt6co/standagainstfloats +"constant.numeric.float" = { fg = "literal_unsafe", bg = "literal_bg_unsafe" } +"string" = "literal" +"string.regexp" = { fg = "literal_unsafe", bg = "literal_bg_unsafe" } +"string.special" = "sym" +"comment" = "doc" +# some are mutable and can be misused without triggering warns +#"variable.builtin" = "literal_unsafe" +"punctuation" = "default_weak" +# beware of the Halting Problem! +"keyword.control.repeat" = { fg = "code_unsafe", bg = "code_bg_unsafe" } +"markup.heading" = { modifiers = ["bold"] } +"markup.heading.marker" = "sym" +"markup.bold" = { modifiers = ["bold"] } +"markup.italic" = { modifiers = ["italic"] } +"markup.strikethrough" = { modifiers = ["crossed_out"] } +"markup.link" = { fg = "sym", underline = { style = "line" } } +"markup.quote" = "doc" + +"markup.normal" = "default" +"markup.normal.raw" = "code" +"markup.heading.raw" = "code" +"markup.raw" = "code" + +"diff.plus" = "green" # + add +"diff.minus" = "red" # - delete +"diff.delta" = "yellow" # ± edit +"diff.delta.moved" = "sym" # -> rename +"diff.delta.conflict" = "err" # ❌ + +[palette] +bg = "#eeeeee" +bg_ui = "#dddddd" +default = "#333333" +default_weak = "#666666" +ghost = "#999999" +code = "#336633" +code_unsafe = "#330000" +code_bg_unsafe = "#eeccdd" +red = "#880000" +green = "#007700" +yellow = "#777700" +sel = "#cccccc" +sel_weak = "#e7e7e7" +err = "#ff0000" +warn = "#bbaa00" +diag = "#0066aa" +literal = "#779900" +literal_unsafe = "#441100" +literal_bg_unsafe = "#eebb99" +sym = "#00aaff" +doc = "#770077"