Skip to content

Commit

Permalink
Merge pull request #60 from michaelbrusegard/custom-config-colors
Browse files Browse the repository at this point in the history
Custom config colors
  • Loading branch information
michaelbrusegard authored Jan 4, 2025
2 parents 0b03606 + d595fdb commit 1c85bf3
Show file tree
Hide file tree
Showing 11 changed files with 122 additions and 138 deletions.
24 changes: 15 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ tabline.setup({
icons_enabled = true,
theme = 'Catppuccin Mocha',
tabs_enabled = true,
color_overrides = {},
theme_overrides = {},
section_separators = {
left = wezterm.nerdfonts.pl_left_hard_divider,
right = wezterm.nerdfonts.pl_right_hard_divider,
Expand Down Expand Up @@ -134,17 +134,23 @@ tabline.setup()
options = { theme = 'GruvboxDark' }
```

All available themes are found [here](https://wezfurlong.org/wezterm/colorschemes/index.html).
All available themes are found [here](https://wezfurlong.org/wezterm/colorschemes/index.html). Tabline uses [get_builtin_schemes()](https://wezfurlong.org/wezterm/config/lua/wezterm.color/get_builtin_schemes.html) under the hood, and not all the color schemes in WezTerm supplies the colors that some of the [extensions](#extensions) for Tabline require. To get around this it is also possible to input your own colors from the WezTerm config or a completely custom colors scheme object.

```lua
options = { theme = config.colors } -- This is the WezTerm config colors object
```

```
#### Customizing themes
To modify a theme, you can use the `color_overrides` option.
To modify a theme, you can use the `theme_overrides` option.
```lua
-- Change the background of tabline_c section for normal mode
tabline.setup({
options = {
color_overrides = {
theme_overrides = {
normal_mode = {
c = { bg = '#112233' },
},
Expand All @@ -158,7 +164,7 @@ This is also where you would specify the colors for a new [Key Table](https://we
```lua
tabline.setup({
options = {
color_overrides = {
theme_overrides = {
-- Default colors from Catppuccin Mocha
normal_mode = {
a = { fg = '#181825', bg = '#89b4fa' },
Expand Down Expand Up @@ -192,15 +198,15 @@ tabline.setup({
})
```

#### Getting colors
#### Getting theme

If you want to get the colors used in the current theme, you can do so with:
If you want to get the current theme and its colors, you can do so with:

```lua
tabline.get_colors()
tabline.get_theme()
```

You will get an object like the `color_overrides` object above, but with the addition of a scheme property (the scheme property is the scheme object from WezTerm with every color found there).
You will get an object like the `theme_overrides` object above, but with the addition of a colors property (the colors property is the colors object from the WezTerm config with every color found there).

> [!TIP]
> This can be useful when creating your own components or extensions and you want to use the same colors as the current theme
Expand Down
2 changes: 1 addition & 1 deletion plugin/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ function M.apply_to_config(config)
}
config.colors = {
tab_bar = {
background = require('tabline.config').colors.normal_mode.c.bg,
background = require('tabline.config').theme.normal_mode.c.bg,
},
}
config.status_update_interval = 500
Expand Down
25 changes: 14 additions & 11 deletions plugin/tabline/component.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,25 +7,25 @@ local mode = require('tabline.components.window.mode')
local M = {}

local left_section_separator =
{ Text = config.opts.options.section_separators.left or config.opts.options.section_separators }
{ Text = config.opts.options.section_separators.left or config.opts.options.section_separators }
local right_section_separator =
{ Text = config.opts.options.section_separators.right or config.opts.options.section_separators }
{ Text = config.opts.options.section_separators.right or config.opts.options.section_separators }
local left_component_separator =
{ Text = config.opts.options.component_separators.left or config.opts.options.component_separators }
{ Text = config.opts.options.component_separators.left or config.opts.options.component_separators }
local right_component_separator =
{ Text = config.opts.options.component_separators.right or config.opts.options.component_separators }
{ Text = config.opts.options.component_separators.right or config.opts.options.component_separators }

local attributes_a, attributes_b, attributes_c, attributes_x, attributes_y, attributes_z = {}, {}, {}, {}, {}, {}
local section_seperator_attributes_a, section_seperator_attributes_b, section_seperator_attributes_c, section_seperator_attributes_x, section_seperator_attributes_y, section_seperator_attributes_z =
{}, {}, {}, {}, {}, {}
{}, {}, {}, {}, {}, {}
local tabline_a, tabline_b, tabline_c, tabline_x, tabline_y, tabline_z = {}, {}, {}, {}, {}, {}

local function create_attributes(window)
local current_mode = mode.get(window)
local colors = config.colors[current_mode]
local colors = config.theme[current_mode]
for _, ext in pairs(extension.extensions) do
if ext.colors then
colors = util.deep_extend(util.deep_copy(colors), ext.colors)
if ext.theme then
colors = util.deep_extend(util.deep_copy(colors), ext.theme)
end
end
attributes_a = {
Expand Down Expand Up @@ -104,9 +104,12 @@ local function create_sections(window)
tabline_a = insert_component_separators(util.extract_components(sections.tabline_a, attributes_a, window, true), true)
tabline_b = insert_component_separators(util.extract_components(sections.tabline_b, attributes_b, window, true), true)
tabline_c = insert_component_separators(util.extract_components(sections.tabline_c, attributes_c, window, true), true)
tabline_x = insert_component_separators(util.extract_components(sections.tabline_x, attributes_x, window, true), false)
tabline_y = insert_component_separators(util.extract_components(sections.tabline_y, attributes_y, window, true), false)
tabline_z = insert_component_separators(util.extract_components(sections.tabline_z, attributes_z, window, true), false)
tabline_x =
insert_component_separators(util.extract_components(sections.tabline_x, attributes_x, window, true), false)
tabline_y =
insert_component_separators(util.extract_components(sections.tabline_y, attributes_y, window, true), false)
tabline_z =
insert_component_separators(util.extract_components(sections.tabline_z, attributes_z, window, true), false)
end

local function right_section()
Expand Down
100 changes: 50 additions & 50 deletions plugin/tabline/components/tab/process.lua
Original file line number Diff line number Diff line change
@@ -1,70 +1,70 @@
local wezterm = require('wezterm')
local util = require('tabline.util')
local config = require('tabline.config')
local scheme = config.colors.scheme
local colors = config.theme.colors
local foreground_process_name = ''

return {
default_opts = {
process_to_icon = {
['air'] = { wezterm.nerdfonts.md_language_go, color = { fg = scheme.brights[5] } },
['apt'] = { wezterm.nerdfonts.dev_debian, color = { fg = scheme.ansi[2] } },
['bacon'] = { wezterm.nerdfonts.dev_rust, color = { fg = scheme.ansi[2] } },
['bash'] = { wezterm.nerdfonts.cod_terminal_bash, color = { fg = scheme.cursor_bg or nil } },
['bat'] = { wezterm.nerdfonts.md_bat, color = { fg = scheme.ansi[5] } },
['btm'] = { wezterm.nerdfonts.md_chart_donut_variant, color = { fg = scheme.ansi[2] } },
['btop'] = { wezterm.nerdfonts.md_chart_areaspline, color = { fg = scheme.ansi[2] } },
['btop4win++'] = { wezterm.nerdfonts.md_chart_areaspline, color = { fg = scheme.ansi[2] } },
['bun'] = { wezterm.nerdfonts.md_hamburger, color = { fg = scheme.cursor_bg or nil } },
['cargo'] = { wezterm.nerdfonts.dev_rust, color = { fg = scheme.ansi[2] } },
['chezmoi'] = { wezterm.nerdfonts.md_home_plus_outline, color = { fg = scheme.brights[5] } },
['cmd.exe'] = { wezterm.nerdfonts.md_console_line, color = { fg = scheme.cursor_bg or nil } },
['air'] = { wezterm.nerdfonts.md_language_go, color = { fg = colors.brights[5] } },
['apt'] = { wezterm.nerdfonts.dev_debian, color = { fg = colors.ansi[2] } },
['bacon'] = { wezterm.nerdfonts.dev_rust, color = { fg = colors.ansi[2] } },
['bash'] = { wezterm.nerdfonts.cod_terminal_bash, color = { fg = colors.cursor_bg or nil } },
['bat'] = { wezterm.nerdfonts.md_bat, color = { fg = colors.ansi[5] } },
['btm'] = { wezterm.nerdfonts.md_chart_donut_variant, color = { fg = colors.ansi[2] } },
['btop'] = { wezterm.nerdfonts.md_chart_areaspline, color = { fg = colors.ansi[2] } },
['btop4win++'] = { wezterm.nerdfonts.md_chart_areaspline, color = { fg = colors.ansi[2] } },
['bun'] = { wezterm.nerdfonts.md_hamburger, color = { fg = colors.cursor_bg or nil } },
['cargo'] = { wezterm.nerdfonts.dev_rust, color = { fg = colors.ansi[2] } },
['chezmoi'] = { wezterm.nerdfonts.md_home_plus_outline, color = { fg = colors.brights[5] } },
['cmd.exe'] = { wezterm.nerdfonts.md_console_line, color = { fg = colors.cursor_bg or nil } },
['curl'] = wezterm.nerdfonts.md_flattr,
['debug'] = { wezterm.nerdfonts.cod_debug, color = { fg = scheme.ansi[5] } },
['debug'] = { wezterm.nerdfonts.cod_debug, color = { fg = colors.ansi[5] } },
['default'] = wezterm.nerdfonts.md_application,
['docker'] = { wezterm.nerdfonts.md_docker, color = { fg = scheme.ansi[5] } },
['docker-compose'] = { wezterm.nerdfonts.md_docker, color = { fg = scheme.ansi[5] } },
['dpkg'] = { wezterm.nerdfonts.dev_debian, color = { fg = scheme.ansi[2] } },
['fish'] = { wezterm.nerdfonts.md_fish, color = { fg = scheme.cursor_bg or nil } },
['gh'] = { wezterm.nerdfonts.dev_github_badge, color = { fg = scheme.indexed[16] or nil } },
['git'] = { wezterm.nerdfonts.dev_git, color = { fg = scheme.indexed[16] or nil } },
['go'] = { wezterm.nerdfonts.md_language_go, color = { fg = scheme.brights[5] } },
['htop'] = { wezterm.nerdfonts.md_chart_areaspline, color = { fg = scheme.ansi[2] } },
['kubectl'] = { wezterm.nerdfonts.md_docker, color = { fg = scheme.ansi[5] } },
['kuberlr'] = { wezterm.nerdfonts.md_docker, color = { fg = scheme.ansi[5] } },
['lazydocker'] = { wezterm.nerdfonts.md_docker, color = { fg = scheme.ansi[5] } },
['lazygit'] = { wezterm.nerdfonts.cod_github, color = { fg = scheme.indexed[16] or nil } },
['lua'] = { wezterm.nerdfonts.seti_lua, color = { fg = scheme.ansi[5] } },
['docker'] = { wezterm.nerdfonts.md_docker, color = { fg = colors.ansi[5] } },
['docker-compose'] = { wezterm.nerdfonts.md_docker, color = { fg = colors.ansi[5] } },
['dpkg'] = { wezterm.nerdfonts.dev_debian, color = { fg = colors.ansi[2] } },
['fish'] = { wezterm.nerdfonts.md_fish, color = { fg = colors.cursor_bg or nil } },
['gh'] = { wezterm.nerdfonts.dev_github_badge, color = { fg = colors.brights[4] or nil } },
['git'] = { wezterm.nerdfonts.dev_git, color = { fg = colors.brights[4] or nil } },
['go'] = { wezterm.nerdfonts.md_language_go, color = { fg = colors.brights[5] } },
['htop'] = { wezterm.nerdfonts.md_chart_areaspline, color = { fg = colors.ansi[2] } },
['kubectl'] = { wezterm.nerdfonts.md_docker, color = { fg = colors.ansi[5] } },
['kuberlr'] = { wezterm.nerdfonts.md_docker, color = { fg = colors.ansi[5] } },
['lazydocker'] = { wezterm.nerdfonts.md_docker, color = { fg = colors.ansi[5] } },
['lazygit'] = { wezterm.nerdfonts.cod_github, color = { fg = colors.brights[4] or nil } },
['lua'] = { wezterm.nerdfonts.seti_lua, color = { fg = colors.ansi[5] } },
['make'] = wezterm.nerdfonts.seti_makefile,
['nix'] = { wezterm.nerdfonts.linux_nixos, color = { fg = scheme.ansi[5] } },
['node'] = { wezterm.nerdfonts.md_nodejs, color = { fg = scheme.brights[2] } },
['npm'] = { wezterm.nerdfonts.md_npm, color = { fg = scheme.brights[2] } },
['nvim'] = { wezterm.nerdfonts.custom_neovim, color = { fg = scheme.ansi[3] } },
['pacman'] = { wezterm.nerdfonts.md_pac_man, color = { fg = scheme.ansi[4] } },
['paru'] = { wezterm.nerdfonts.md_pac_man, color = { fg = scheme.ansi[4] } },
['pnpm'] = { wezterm.nerdfonts.md_npm, color = { fg = scheme.brights[4] } },
['postgresql'] = { wezterm.nerdfonts.dev_postgresql, color = { fg = scheme.ansi[5] } },
['powershell.exe'] = { wezterm.nerdfonts.md_console, color = { fg = scheme.cursor_bg or nil } },
['psql'] = { wezterm.nerdfonts.dev_postgresql, color = { fg = scheme.ansi[5] } },
['pwsh.exe'] = { wezterm.nerdfonts.md_console, color = { fg = scheme.cursor_bg or nil } },
['rpm'] = { wezterm.nerdfonts.dev_redhat, color = { fg = scheme.ansi[2] } },
['redis'] = { wezterm.nerdfonts.dev_redis, color = { fg = scheme.ansi[5] } },
['ruby'] = { wezterm.nerdfonts.cod_ruby, color = { fg = scheme.brights[2] } },
['rust'] = { wezterm.nerdfonts.dev_rust, color = { fg = scheme.ansi[2] } },
['nix'] = { wezterm.nerdfonts.linux_nixos, color = { fg = colors.ansi[5] } },
['node'] = { wezterm.nerdfonts.md_nodejs, color = { fg = colors.brights[2] } },
['npm'] = { wezterm.nerdfonts.md_npm, color = { fg = colors.brights[2] } },
['nvim'] = { wezterm.nerdfonts.custom_neovim, color = { fg = colors.ansi[3] } },
['pacman'] = { wezterm.nerdfonts.md_pac_man, color = { fg = colors.ansi[4] } },
['paru'] = { wezterm.nerdfonts.md_pac_man, color = { fg = colors.ansi[4] } },
['pnpm'] = { wezterm.nerdfonts.md_npm, color = { fg = colors.brights[4] } },
['postgresql'] = { wezterm.nerdfonts.dev_postgresql, color = { fg = colors.ansi[5] } },
['powershell.exe'] = { wezterm.nerdfonts.md_console, color = { fg = colors.cursor_bg or nil } },
['psql'] = { wezterm.nerdfonts.dev_postgresql, color = { fg = colors.ansi[5] } },
['pwsh.exe'] = { wezterm.nerdfonts.md_console, color = { fg = colors.cursor_bg or nil } },
['rpm'] = { wezterm.nerdfonts.dev_redhat, color = { fg = colors.ansi[2] } },
['redis'] = { wezterm.nerdfonts.dev_redis, color = { fg = colors.ansi[5] } },
['ruby'] = { wezterm.nerdfonts.cod_ruby, color = { fg = colors.brights[2] } },
['rust'] = { wezterm.nerdfonts.dev_rust, color = { fg = colors.ansi[2] } },
['serial'] = wezterm.nerdfonts.md_serial_port,
['ssh'] = wezterm.nerdfonts.md_ssh,
['sudo'] = wezterm.nerdfonts.fa_hashtag,
['tls'] = wezterm.nerdfonts.md_power_socket,
['topgrade'] = { wezterm.nerdfonts.md_rocket_launch, color = { fg = scheme.ansi[5] } },
['topgrade'] = { wezterm.nerdfonts.md_rocket_launch, color = { fg = colors.ansi[5] } },
['unix'] = wezterm.nerdfonts.md_bash,
['valkey'] = { wezterm.nerdfonts.dev_redis, color = { fg = scheme.brights[5] } },
['vim'] = { wezterm.nerdfonts.dev_vim, color = { fg = scheme.ansi[3] } },
['valkey'] = { wezterm.nerdfonts.dev_redis, color = { fg = colors.brights[5] } },
['vim'] = { wezterm.nerdfonts.dev_vim, color = { fg = colors.ansi[3] } },
['wget'] = wezterm.nerdfonts.md_arrow_down_box,
['yarn'] = { wezterm.nerdfonts.seti_yarn, color = { fg = scheme.ansi[5] } },
['yay'] = { wezterm.nerdfonts.md_pac_man, color = { fg = scheme.ansi[4] } },
['yazi'] = { wezterm.nerdfonts.md_duck, color = { fg = scheme.indexed[16] or nil } },
['yum'] = { wezterm.nerdfonts.dev_redhat, color = { fg = scheme.ansi[2] } },
['zsh'] = { wezterm.nerdfonts.dev_terminal, color = { fg = scheme.cursor_bg or nil } },
['yarn'] = { wezterm.nerdfonts.seti_yarn, color = { fg = colors.ansi[5] } },
['yay'] = { wezterm.nerdfonts.md_pac_man, color = { fg = colors.ansi[4] } },
['yazi'] = { wezterm.nerdfonts.md_duck, color = { fg = colors.brights[4] or nil } },
['yum'] = { wezterm.nerdfonts.dev_redhat, color = { fg = colors.ansi[2] } },
['zsh'] = { wezterm.nerdfonts.dev_terminal, color = { fg = colors.cursor_bg or nil } },
},
},
update = function(tab, opts)
Expand Down
4 changes: 2 additions & 2 deletions plugin/tabline/components/window/battery.lua
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
local wezterm = require('wezterm')
local util = require('tabline.util')
local config = require('tabline.config')
local scheme = config.colors.scheme
local colors = config.theme.colors

return {
default_opts = {
battery_to_icon = {
empty = { wezterm.nerdfonts.fa_battery_empty, color = { fg = scheme.ansi[2] } },
empty = { wezterm.nerdfonts.fa_battery_empty, color = { fg = colors.ansi[2] } },
quarter = wezterm.nerdfonts.fa_battery_quarter,
half = wezterm.nerdfonts.fa_battery_half,
three_quarters = wezterm.nerdfonts.fa_battery_three_quarters,
Expand Down
73 changes: 24 additions & 49 deletions plugin/tabline/config.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,6 @@ local util = require('tabline.util')

local M = {}

M.opts = {}
M.sections = {}
M.component_opts = {}
M.colors = {}

local default_opts = {
options = {
theme = 'Catppuccin Mocha',
Expand Down Expand Up @@ -50,60 +45,40 @@ local default_component_opts = {
padding = 1,
}

local function lighten_color(color, percent)
local r = tonumber(color:sub(2, 3), 16)
local g = tonumber(color:sub(4, 5), 16)
local b = tonumber(color:sub(6, 7), 16)

r = math.floor(r + ((255 - r) * percent))
g = math.floor(g + ((255 - g) * percent))
b = math.floor(b + ((255 - b) * percent))

return string.format('#%02x%02x%02x', r, g, b)
end

local function get_colors(theme)
local scheme = wezterm.color.get_builtin_schemes()[theme]

local mantle = scheme.background
local surface0 = lighten_color(scheme.background, 0.1)
local blue = scheme.ansi[5]
local text = scheme.foreground
local yellow = scheme.ansi[4]
local green = scheme.ansi[3]
local pink = scheme.ansi[6]

if scheme.tab_bar then
if scheme.tab_bar.inactive_tab then
mantle = scheme.tab_bar.inactive_tab.bg_color or mantle
if scheme.tab_bar.inactive_tab_edge ~= mantle then
surface0 = scheme.tab_bar.inactive_tab_edge or surface0
end
local colors = type(theme) == 'string' and wezterm.color.get_builtin_schemes()[theme] or theme
local surface = colors.cursor and colors.cursor.bg or colors.ansi[1]
local background = colors.tab_bar and colors.tab_bar.inactive_tab and colors.tab_bar.inactive_tab.bg_color
or colors.background

if type(theme) == 'string' then
if string.find(theme, 'Catppuccin') then
surface = colors.tab_bar.inactive_tab_edge
end
end

return {
normal_mode = {
a = { fg = mantle, bg = blue },
b = { fg = blue, bg = surface0 },
c = { fg = text, bg = mantle },
a = { fg = background, bg = colors.ansi[5] },
b = { fg = colors.ansi[5], bg = surface },
c = { fg = colors.foreground, bg = background },
},
copy_mode = {
a = { fg = mantle, bg = yellow },
b = { fg = yellow, bg = surface0 },
c = { fg = text, bg = mantle },
a = { fg = background, bg = colors.ansi[4] },
b = { fg = colors.ansi[4], bg = surface },
c = { fg = colors.foreground, bg = background },
},
search_mode = {
a = { fg = mantle, bg = green },
b = { fg = green, bg = surface0 },
c = { fg = text, bg = mantle },
a = { fg = background, bg = colors.ansi[3] },
b = { fg = colors.ansi[3], bg = surface },
c = { fg = colors.foreground, bg = background },
},
tab = {
active = { fg = blue, bg = surface0 },
inactive = { fg = text, bg = mantle },
inactive_hover = { fg = pink, bg = surface0 },
active = { fg = colors.ansi[5], bg = surface },
inactive = { fg = colors.foreground, bg = background },
inactive_hover = { fg = colors.ansi[6], bg = surface },
},
scheme = scheme,
colors = colors,
}
end

Expand All @@ -124,13 +99,13 @@ end
function M.set(user_opts)
user_opts = user_opts or { options = {} }
user_opts.options = user_opts.options or {}
local color_overrides = user_opts.options.color_overrides or {}
user_opts.options.color_overrides = nil
local theme_overrides = user_opts.options.theme_overrides or {}
user_opts.options.theme_overrides = nil

M.component_opts = set_component_opts(user_opts)
M.opts = util.deep_extend(default_opts, user_opts)
M.sections = util.deep_copy(M.opts.sections)
M.colors = util.deep_extend(get_colors(M.opts.options.theme), color_overrides)
M.theme = util.deep_extend(get_colors(M.opts.options.theme), theme_overrides)
end

return M
6 changes: 3 additions & 3 deletions plugin/tabline/extensions/presentation.lua
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ return {
tab_active = {},
tab_inactive = {},
},
colors = {
a = { bg = config.colors.scheme.ansi[7] },
b = { fg = config.colors.scheme.ansi[7] },
theme = {
a = { bg = config.theme.colors.ansi[7] },
b = { fg = config.theme.colors.ansi[7] },
},
},
}
Loading

0 comments on commit 1c85bf3

Please sign in to comment.