-
Notifications
You must be signed in to change notification settings - Fork 460
Writing a theme
- refer to example below to see how themes are defined
- take 4 screenshots showing a different vim modes (normal, insert, visual, replace)
- add your theme with screenshots attached to THEMES.md while maintaining alphabetical order
- If the colorscheme you're trying to add already support lightline. You can use lightline2lualine theme converter to easily port the theme to lualine.
Note to colorscheme authors : If you want to support lualine. You can put your lualine theme at lua/lualine/themes/{your_colorscheme}.lua in you repo.
To create a custom theme you need to define a colorscheme for each of vim's modes. Each mode has a fg
and bg
field for every lualine section.
To specify colors you can use #rrggbb/color_name(like: red)/cterm_color(0-255).
Instead of defining colors as table containing values you can define it as a
string. This string is considered a highlight group name and lualines highlight
is linked to that group.
You can add special effects with gui
.
Though the example shows a,b,c being set you can specify theme for x, y, z too. But if unspecified then they default to c, b, a sections theme respectively . Also all modes theme defaults to normal modes theme.
Adding theme is really easy in lua. Here is and example of a gruvbox theme.
local colors = {
black = '#282828',
white = '#ebdbb2',
red = '#fb4934',
green = '#b8bb26',
blue = '#83a598',
yellow = '#fe8019',
gray = '#a89984',
darkgray = '#3c3836',
lightgray = '#504945',
inactivegray = '#7c6f64',
}
return {
normal = {
a = {bg = colors.gray, fg = colors.black, gui = 'bold'},
b = {bg = colors.lightgray, fg = colors.white},
c = {bg = colors.darkgray, fg = colors.gray}
},
insert = {
a = {bg = colors.blue, fg = colors.black, gui = 'bold'},
b = {bg = colors.lightgray, fg = colors.white},
c = {bg = colors.lightgray, fg = colors.white}
},
visual = {
a = {bg = colors.yellow, fg = colors.black, gui = 'bold'},
b = {bg = colors.lightgray, fg = colors.white},
c = {bg = colors.inactivegray, fg = colors.black}
},
replace = {
a = {bg = colors.red, fg = colors.black, gui = 'bold'},
b = {bg = colors.lightgray, fg = colors.white},
c = {bg = colors.black, fg = colors.white}
},
command = {
a = {bg = colors.green, fg = colors.black, gui = 'bold'},
b = {bg = colors.lightgray, fg = colors.white},
c = {bg = colors.inactivegray, fg = colors.black}
},
inactive = {
a = {bg = colors.darkgray, fg = colors.gray, gui = 'bold'},
b = {bg = colors.darkgray, fg = colors.gray},
c = {bg = colors.darkgray, fg = colors.gray}
}
}
require('lualine').setup {options = {theme = gruvbox}}