Following the guide to configure an existing theme removes icon colors
rorystephenson opened this issue · comments
Following this section of the guide to configure an existing theme caused icon colours to disappear for me.
Setting the force_clean
options resolves it for me as follows:
lush(spec, {force_clean = false})
However this seems to break some other colors.
EDIT:
I've found a solution that seems to work:
lush(function()
return spec
end)
I'm not sure why (I'm totally new to lush and lua) but this brings back the icon colors and doesn't break other colors.
Is that not the same as the guide, without attaching it to _G?
-- You may prefer to put this in its own module, shown on _G for brevity.
_G.customise_colorscheme = function()
-- now we can apply the modified spec.
lush(spec)
end
I'm also not sure what icon colors are specifically, from a plugin?
Actually on re-checking my problems are not resolved.
I'm also not sure what icon colors are specifically, from a plugin?
Yeah sorry the icons are in nvim-tree (I have webdev icons installed and they work fine when not using a lush theme).
So the issue remains that when I follow the instructions to configure an existing theme it removes the icon colors for me.
EDIT:
In case it's helpful my autocmd declaration is:
vim.api.nvim_create_autocmd({ "VimEnter", "ColorScheme" }, { callback = customise_colorscheme })
Ah, that documentation is for extending a lush theme - something that exports all the group information, are you extending a non-lush theme? What theme are you extending?
I am extending this lush theme as follows:
-- Apply the theme
vim.cmd 'colorscheme darcula-solid'
-- First we will need lush, and the colorscheme we wish to modify
local lush = require('lush')
local darcula_solid = require('lush_theme.darcula-solid')
local spec = lush.extends({darcula_solid}).with(function()
-- Pallete copied from https://github.com/briones-gabriel/darcula-solid.nvim/blob/main/lua/lush_theme/darcula-solid.lua
local fg = lush.hsl(210, 7, 82)
local yellow = lush.hsl(37, 100, 71)
return {
Type { fg = yellow },
Function { fg = fg },
}
end)
-- Place theme modification callback in module to make it private.
_G.customise_colorscheme = function()
-- Apply the modified spec.
lush(function()
return spec
end)
end
-- Apply theme modificatio
vim.api.nvim_create_autocmd({ "VimEnter", "ColorScheme" }, { callback = customise_colorscheme })
Calling lush
in this way is not working as my modifications are not applied whilst if I change it to lush(spec)
my modifications work but the icon colors disappear.
I believe this works for me, but its a bit ugly and I don't recommend it.
require("nvim-tree").setup()
_G.customise_colorscheme = function()
-- Apply the modified spec.
lush(spec)
-- trigger colorscheme changed events which nvim-tree will see and adjust its theme
vim.api.nvim_exec_autocmds("ColorScheme", {})
end
-- Removed ColorScheme so we don't recursively loop
vim.api.nvim_create_autocmd({"VimEnter" }, { callback = customise_colorscheme })
With the previous method, nvim-tree would sometimes fire its "colorscheme changed" handler before or after we adjusted the colors, so it was a bit wonky.
That example is probably too thin really, I think you're better off creating a colorscheme in the way vim expects.
-- ~/.config/nvim/colors/roryula.lua
-- See create.md and lush-template for more details
-- set some colorscheme detains, normal vim stuff
vim.opt.background = 'dark'
vim.g.colors_name = 'roryula'
-- We can just require the top theme and do our modifications,
local lush = require('lush')
local darcula_solid = require('lush_theme.darcula-solid')
local spec = lush.extends({darcula_solid}).with(function()
-- Pallete copied from https://github.com/briones-gabriel/darcula-solid.nvim/blob/main/lua/lush_theme/darcula-solid.lua
local fg = lush.hsl(210, 7, 82)
local yellow = lush.hsl(37, 100, 71)
return {
Type { fg = yellow },
Function { fg = fg },
}
end)
-- this call is the equivalent to require('lush')(require('theme...'))
-- but we can do it all in one file.
lush(spec)
then
:colorscheme roryula
or vim.cmd("colorscheme roryula")
in your config, etc.
I will update the documentation to follow this pattern, its much better.
Also not sure if it's clear from the docs, but the darcula_solid
variable is actually a table containing all the group data, so you can write
Function { fg = darcula_solid.Normal.fg },
To set Function
to whatever the upstream sets for Normal.fg
, and you can chain that with any color operations too (eg: darcula_solid.Normal.fg.darken(10)
, etc)
That's all working perfectly now and it's a much cleaner approach, thank you very much!