5.6 KiB
Zenbones
Zenflesh, Zenbones is a vim/neovim colorscheme designed to highlight code using contrasts and font variations. Colors are tasked only for other roles such as diagnostics, diffs, search matches.
Usage
Just apply the colorscheme as usual:
colorscheme zenbones " light
colorscheme zenflesh " dark
colorscheme zenwritten " Zero hue and saturation version
colorscheme neobones " https://neovim.io flavor
colorscheme rosebones " Rosé Pine flavor - https://rosepinetheme.com
colorscheme forestbones " Everforest flavor - https://github.com/sainnhe/everforest
colorscheme nordbones " Nord flavor - https://www.nordtheme.com/docs/colors-and-palettes
colorscheme tokyobones " Tokyo Night flavor - https://github.com/enkia/tokyo-night-vscode-theme#color-palette
It works pretty much the same as the first one but pretty handy when extending or customizing the colors to your likings.
Configuration
Configuration is only available for neovim.
Note: Flavors accept their own configuration by replacing "zenbones" or
"zenflesh" prefix with the flavor name e.g. g:rosebones_italic_comments.
g:zenbones_lightness
Change background colors lightness. Options: 'bright', 'dim'.
g:zenflesh_darkness
Change background colors darkness. Options: 'stark', 'warm'.
g:zenbones_solid_vert_split
g:zenflesh_solid_vert_split
Default: v:false. Make vertical split more distinguishable background
highlight.
g:zenbones_darken_linenr
Default: v:false. Darken LineNr background.
g:zenflesh_lighten_linenr
Default: v:false. Lighten LineNr background.
g:zenbones_dim_noncurrent_window
Default: v:false. Make non-current window background dimmer than Normal.
g:zenflesh_lighten_noncurrent_window
Default: v:false. Make non-current window background warmer than Normal.
g:zenbones_italic_comments
g:zenflesh_italic_comments
Default: v:true. Make comments italicize.
g:zenbones_darken_comments
Default: 38. Percentage to darken comments. Comments base their foreground color on the bg palette. See also |lush-color-darken|.
g:zenflesh_lighten_comments
Default: 38. Percentage to lighten comments. Comments base their foreground color on the bg palette. See also |lush-color-lighten|.
g:zenbones_compat
Set to 1 to turn on compatibility mode.
lightline
let g:lightline = {
\ 'colorscheme': 'zenbones', " or 'zenflesh'
\ }
lualine
options = { theme = 'zenbones' } -- or 'zenflesh'
Advanced Usage
Zenbones is pretty extensible thanks to Lush. You can easily retrieve the colors in lua:
local theme = require "zenbones" -- or zenflesh
local palette = require "zenbones.palette"
print(theme.StatusLine.bg.hex)
print(palette.blossom.darken(20).hex)
Here's an example of how to extend/override some highlights.
lua/customize_zenbones.lua:
local function customize_zenbones()
if vim.g.colors_name ~= "zenbones" then
return
end
local lush = require "lush"
local base = require "zenbones"
-- Create some specs
local specs = lush.parse(function()
return {
TabLine { base.TabLine, gui = "italic" }, -- setting gui to "italic"
end)
-- Apply specs using lush tool-chain
lush.apply(lush.compile(specs))
end
return customize_zenbones
And then somewhere in your init.vim:
autocmd VimEnter,ColorScheme * lua require("customize_zenbones")()
See also Lush's documentation for more options.
Create your own colorscheme
You can ultimately create your own colorscheme that is based on Zenbones by
defining a palette and generating a specs. Best way to demonstrate this is
through an example. Let's make a zenbones-flavored Gruvbox colorscheme called
gruvbones.
Let's define our
colorscheme in
nvim/colors/gruvbones.lua. And it contains the following:
vim.g.colors_name = "gruvbones" -- Required when defining a colorscheme
local lush = require "lush"
local hsluv = lush.hsluv -- Human-friendly hsl
local util = require "zenbones.util"
local bg = vim.opt.background:get()
-- Define a palette. Use `palette_extend` to fill unspecified colors
-- Based on https://github.com/gruvbox-community/gruvbox#palette
local palette
if bg == "light" then
palette = util.palette_extend({
bg = hsluv "#fbf1c7",
fg = hsluv "#3c3836",
rose = hsluv "#9d0006",
leaf = hsluv "#79740e",
wood = hsluv "#b57614",
water = hsluv "#076678",
blossom = hsluv "#8f3f71",
sky = hsluv "#427b58",
}, "zenbones")
else
palette = util.palette_extend({
bg = hsluv "#282828",
fg = hsluv "#ebdbb2",
rose = hsluv "#fb4934",
leaf = hsluv "#b8bb26",
wood = hsluv "#fabd2f",
water = hsluv "#83a598",
blossom = hsluv "#d3869b",
sky = hsluv "#83c07c",
}, "zenflesh")
end
-- Generate the lush specs using the generator util
local generator = require "zenbones.specs"
local base_specs = generator.generate(palette, bg, generator.get_global_config("gruvbones", bg))
-- Optionally extend specs using Lush
local specs = lush.extends({ base_specs }).with(function()
return {
Statement { base_specs.Statement, fg = palette.rose },
Special { fg = palette.water },
Type { fg = palette.sky, gui = "italic" },
}
end)
-- Pass the specs to lush to apply
lush(specs)
-- Optionally set term colors
require("zenbones.term").apply_colors(palette)
And there you have it. Just call colorscheme gruvbones to use your new
colorscheme. It respects &background and other configurations too.
Also checkout the neobones and rosebones colorscheme for a similar and complete example.