ports · Editors
SP Night for Helix
The whole syntax scope tree, the three editing modes, diagnostics, diffs, the picker and the inlay hints.
the repository ↗ Helix ↗ helix.toml.tmpl ↗
Preview
All three are dark, by decision. The previews below are synthetic — drawn from the palette itself, so they can never drift from what you install.
Install
~/.config/helix/themes/sp_night_noite.toml ~/.config/helix/themes/sp_night_garoa.toml ~/.config/helix/themes/sp_night_jaragua.toml theme = "sp_night_noite" theme = "sp_night_garoa" theme = "sp_night_jaragua" Those are the paths for the flavour selected in the header — switch it and they follow.
Helix resolves theme = "<name>" against ~/.config/helix/themes/ by file
name, so the file goes there and the name in your config is the file’s stem.
Grab the flavour you want (or all three):
mkdir -p ~/.config/helix/themes
curl -Lo ~/.config/helix/themes/sp_night_noite.toml \
https://raw.githubusercontent.com/sp-night/helix/main/themes/sp_night_noite.toml Then set it in ~/.config/helix/config.toml:
theme = "sp_night_noite" Reload with :config-reload, or try one without committing to it using
:theme sp_night_noite.
Prefer a checkout? Clone and copy — the files are plain text, there is no build:
git clone https://github.com/sp-night/helix.git
cp helix/themes/*.toml ~/.config/helix/themes/ What gets themed
| Helix key | role | what it is |
|---|---|---|
ui.background / ui.text | ui.bg / ui.fg | laje under the main text |
ui.cursor.primary / ui.cursor | ui.cursor / ui.fg_dim | the sódio cursor, and every secondary one dimmed so the primary is findable |
ui.cursor.normal / .insert / .select | ui.cursor / diagnostic.ok / ui.accent_alt | the mode changes hue, not brightness — the one thing a modal editor must never leave ambiguous |
ui.statusline / .inactive | ui.panel / ui.bg_deep | the focused bar on exposed concrete, the rest receding into the vão |
ui.selection / .primary | ui.selection | vidro, glass reflecting the street |
ui.linenr / .selected | ui.fg_muted / ui.fg | the gutter recedes, the line you are on does not |
ui.virtual.indent-guide / .ruler / .whitespace | ui.border / ui.line / ui.fg_muted | fiação, overhead wiring — structure you see past, not at |
ui.virtual.inlay-hint | ui.fg_muted | the editor’s own annotations stay quieter than anything you typed |
keyword / function / type / string | syntax.* | the same accents every SP Night port gives these |
diagnostic.error / .warning / .info / .hint | diagnostic.* | undercurled in brasa, táxi, marginal, sereno |
diff.plus / .minus / .delta | git.added / git.removed / git.modified | the gutter reads like the rest of the toolchain does |
markup.heading.1…6 / markup.link.url | ui.accent / ui.link | Markdown headings in sódio, links in marginal — the expressway sign |
helix.toml.tmpl is the full record of which helix key means which
role — the table above in complete form. The files in
themes/ are what it resolves to, one per flavour.
You never need it to use the theme: the shipped files are plain text and final. It is here so the mapping survives, and so a retuned palette can be rolled through this port without anyone re-deciding what a mode colour means.
Where the colours come from
No hex in this repo was picked by hand. Every value comes from the
SP Night palette through its role layer,
both published as data:
palette.json and
roles.json. The contrast floors those
colours have to clear are written down in the spec
and enforced in CI.