Themes
+To use a theme add theme = "<name>"
to the top of your config.toml
file, or select it during runtime using :theme <name>
.
Creating a theme
+Create a file with the name of your theme as the file name (i.e mytheme.toml
) and place it in your themes
directory (i.e ~/.config/helix/themes
or %AppData%\helix\themes
on Windows). The directory might have to be created beforehand.
++💡 The names "default" and "base16_default" are reserved for built-in themes +and cannot be overridden by user-defined themes.
+
Overview
+Each line in the theme file is specified as below:
+key = { fg = "#ffffff", bg = "#000000", underline = { color = "#ff0000", style = "curl"}, modifiers = ["bold", "italic"] }
+
+Where key
represents what you want to style, fg
specifies the foreground color, bg
the background color, underline
the underline style
/color
, and modifiers
is a list of style modifiers. bg
, underline
and modifiers
can be omitted to defer to the defaults.
To specify only the foreground color:
+key = "#ffffff"
+
+If the key contains a dot '.'
, it must be quoted to prevent it being parsed as a dotted key.
"key.key" = "#ffffff"
+
+For inspiration, you can find the default theme.toml
+here and
+user-submitted themes
+here.
Using the linter
+Use the supplied linting tool to check for errors and missing scopes:
+cargo xtask themelint onedark # replace onedark with <name>
+
+The details of theme creation
+Color palettes
+It's recommended to define a palette of named colors, and refer to them in the
+configuration values in your theme. To do this, add a table called
+palette
to your theme file:
"ui.background" = "white"
+"ui.text" = "black"
+
+[palette]
+white = "#ffffff"
+black = "#000000"
+
+Keep in mind that the [palette]
table includes all keys after its header,
+so it should be defined after the normal theme options.
The default palette uses the terminal's default 16 colors, and the colors names
+are listed below. The [palette]
section in the config file takes precedence
+over it and is merged into the default palette.
Color Name |
---|
default |
black |
red |
green |
yellow |
blue |
magenta |
cyan |
gray |
light-red |
light-green |
light-yellow |
light-blue |
light-magenta |
light-cyan |
light-gray |
white |
Modifiers
+The following values may be used as modifier, provided they are supported by +your terminal emulator.
+Modifier |
---|
bold |
dim |
italic |
underlined |
slow_blink |
rapid_blink |
reversed |
hidden |
crossed_out |
++💡 The
+underlined
modifier is deprecated and only available for backwards compatibility. +Its behavior is equivalent to settingunderline.style="line"
.
Underline style
+One of the following values may be used as a value for underline.style
, providing it is
+supported by your terminal emulator.
Modifier |
---|
line |
curl |
dashed |
dotted |
double_line |
Inheritance
+Extend other themes by setting the inherits
property to an existing theme.
inherits = "boo_berry"
+
+# Override the theming for "keyword"s:
+"keyword" = { fg = "gold" }
+
+# Override colors in the palette:
+[palette]
+berry = "#2A2A4D"
+
+Rainbow
+The rainbow
key is used for rainbow highlight for matching brackets.
+The key is a list of styles.
rainbow = ["#ff0000", "#ffa500", "#fff000", { fg = "#00ff00", modifiers = ["bold"] }]
+
+Colors from the palette and modifiers may be used.
+Scopes
+The following is a list of scopes available to use for styling:
+Syntax highlighting
+These keys match tree-sitter scopes.
+When determining styling for a highlight, the longest matching theme key will be used. For example, if the highlight is function.builtin.static
, the key function.builtin
will be used instead of function
.
We use a similar set of scopes as +Sublime Text. See also +TextMate scopes.
+-
+
-
+
+attribute
- Class attributes, HTML tag attributes
+ -
+
+type
- Types-
+
builtin
- Primitive types provided by the language (int
,usize
)
+parameter
- Generic type parameters (T
)
+enum
+-
+
variant
+
+
+ -
+
+constructor
+ -
+
+constant
(TODO: constant.other.placeholder for%v
)-
+
builtin
Special constants provided by the language (true
,false
,nil
etc) +-
+
boolean
+
+character
+-
+
escape
+
+numeric
(numbers) +-
+
integer
+float
+
+
+ -
+
+string
(TODO: string.quoted.{single, double}, string.raw/.unquoted)?-
+
regexp
- Regular expressions
+special
+-
+
path
+url
+symbol
- Erlang/Elixir atoms, Ruby symbols, Clojure keywords
+
+
+ -
+
+comment
- Code comments-
+
line
- Single line comments (//
)
+block
- Block comments (e.g. (/* */
) +-
+
documentation
- Documentation comments (e.g.///
in Rust)
+
+
+ -
+
+variable
- Variables-
+
builtin
- Reserved language variables (self
,this
,super
, etc.)
+parameter
- Function parameters
+other
+-
+
member
- Fields of composite data types (e.g. structs, unions)
+
+
+ -
+
+label
+ -
+
+punctuation
-
+
delimiter
- Commas, colons
+bracket
- Parentheses, angle brackets, etc.
+special
- String interpolation brackets.
+
+ -
+
+keyword
-
+
control
+-
+
conditional
-if
,else
+repeat
-for
,while
,loop
+import
-import
,export
+return
+exception
+
+operator
-or
,in
+directive
- Preprocessor directives (#if
in C)
+function
-fn
,func
+storage
- Keywords describing how things are stored +-
+
type
- The type of something,class
,function
,var
,let
, etc.
+modifier
- Storage modifiers likestatic
,mut
,const
,ref
, etc.
+
+
+ -
+
+operator
-||
,+=
,>
+ -
+
+function
-
+
builtin
+method
+macro
+special
(preprocessor in C)
+
+ -
+
+tag
- Tags (e.g.<body>
in HTML)-
+
builtin
+
+ -
+
+namespace
+ -
+
+special
+ -
+
+markup
-
+
heading
+-
+
marker
+1
,2
,3
,4
,5
,6
- heading text for h1 through h6
+
+list
+-
+
unnumbered
+numbered
+checked
+unchecked
+
+bold
+italic
+strikethrough
+link
+-
+
url
- URLs pointed to by links
+label
- non-URL link references
+text
- URL and image descriptions in links
+
+quote
+raw
+-
+
inline
+block
+
+
+ -
+
+diff
- version control changes-
+
plus
- additions +-
+
gutter
- gutter indicator
+
+minus
- deletions +-
+
gutter
- gutter indicator
+
+delta
- modifications +-
+
moved
- renamed or moved files/changes
+gutter
- gutter indicator
+
+
+
Interface
+These scopes are used for theming the editor interface:
+-
+
markup
+-
+
normal
+-
+
completion
- for completion doc popup UI
+hover
- for hover popup UI
+
+heading
+-
+
completion
- for completion doc popup UI
+hover
- for hover popup UI
+
+raw
+-
+
inline
+-
+
completion
- for completion doc popup UI
+hover
- for hover popup UI
+
+
+
+
Key | Notes |
---|---|
ui.background | |
ui.background.separator | Picker separator below input line |
ui.cursor | |
ui.cursor.normal | |
ui.cursor.insert | |
ui.cursor.select | |
ui.cursor.match | Matching bracket etc. |
ui.cursor.primary | Cursor with primary selection |
ui.cursor.primary.normal | |
ui.cursor.primary.insert | |
ui.cursor.primary.select | |
ui.debug.breakpoint | Breakpoint indicator, found in the gutter |
ui.debug.active | Indicator for the line at which debugging execution is paused at, found in the gutter |
ui.gutter | Gutter |
ui.gutter.selected | Gutter for the line the cursor is on |
ui.highlight.frameline | Line at which debugging execution is paused at |
ui.linenr | Line numbers |
ui.linenr.selected | Line number for the line the cursor is on |
ui.statusline | Statusline |
ui.statusline.inactive | Statusline (unfocused document) |
ui.statusline.normal | Statusline mode during normal mode (only if editor.color-modes is enabled) |
ui.statusline.insert | Statusline mode during insert mode (only if editor.color-modes is enabled) |
ui.statusline.select | Statusline mode during select mode (only if editor.color-modes is enabled) |
ui.statusline.separator | Separator character in statusline |
ui.bufferline | Style for the buffer line |
ui.bufferline.active | Style for the active buffer in buffer line |
ui.bufferline.background | Style for bufferline background |
ui.popup | Documentation popups (e.g. Space + k) |
ui.popup.info | Prompt for multiple key options |
ui.window | Borderlines separating splits |
ui.help | Description box for commands |
ui.text | Default text style, command prompts, popup text, etc. |
ui.text.focus | The currently selected line in the picker |
ui.text.inactive | Same as ui.text but when the text is inactive (e.g. suggestions) |
ui.text.info | The key: command text in ui.popup.info boxes |
ui.virtual.ruler | Ruler columns (see the editor.rulers config) |
ui.virtual.whitespace | Visible whitespace characters |
ui.virtual.indent-guide | Vertical indent width guides |
ui.virtual.inlay-hint | Default style for inlay hints of all kinds |
ui.virtual.inlay-hint.parameter | Style for inlay hints of kind parameter (LSPs are not required to set a kind) |
ui.virtual.inlay-hint.type | Style for inlay hints of kind type (LSPs are not required to set a kind) |
ui.virtual.wrap | Soft-wrap indicator (see the editor.soft-wrap config) |
ui.virtual.jump-label | Style for virtual jump labels |
ui.menu | Code and command completion menus |
ui.menu.selected | Selected autocomplete item |
ui.menu.scroll | fg sets thumb color, bg sets track color of scrollbar |
ui.selection | For selections in the editing area |
ui.selection.primary | |
ui.highlight | Highlighted lines in the picker preview |
ui.cursorline.primary | The line of the primary cursor (if cursorline is enabled) |
ui.cursorline.secondary | The lines of any other cursors (if cursorline is enabled) |
ui.cursorcolumn.primary | The column of the primary cursor (if cursorcolumn is enabled) |
ui.cursorcolumn.secondary | The columns of any other cursors (if cursorcolumn is enabled) |
warning | Diagnostics warning (gutter) |
error | Diagnostics error (gutter) |
info | Diagnostics info (gutter) |
hint | Diagnostics hint (gutter) |
diagnostic | Diagnostics fallback style (editing area) |
diagnostic.hint | Diagnostics hint (editing area) |
diagnostic.info | Diagnostics info (editing area) |
diagnostic.warning | Diagnostics warning (editing area) |
diagnostic.error | Diagnostics error (editing area) |
diagnostic.unnecessary | Diagnostics with unnecessary tag (editing area) |
diagnostic.deprecated | Diagnostics with deprecated tag (editing area) |