Skip to content

Writing a theme

shadmansaleh edited this page Jan 1, 2022 · 1 revision

Adding 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.

theme example

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}}
Clone this wiki locally