Files
zenbones-theme/doc/zenbones.md
Michael Chris Lopez 21fafdff7d add rosebones
a rose pine flavor
2021-10-04 15:48:52 +08:00

4.4 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

If you want to make use of the lua version:

" Requires `neovim` and `rktjmp/lush.nvim` installed
colorscheme zenbones-lush
colorscheme zenflesh-lush

" https://neovim.io flavor
colorscheme neovim
" Rosé Pine flavor - https://rosepinetheme.com
colorscheme rosebones

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 zenbones-lush and zenflesh-lush.

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

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)

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 modifying the base palette and extending the 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"

-- let's base bg=dark, bg=light on zenflesh, zenbones specs respectively
local base_name = vim.opt.background:get() == "dark" and "zenflesh" or "zenbones"

-- reset base palette and specs
package.loaded[base_name .. ".palette"] = nil
package.loaded[base_name] = nil

local lush = require "lush"
local hsl = lush.hsl

-- modify base palette (before requiring specs)
-- and we can also define our own
-- note: non-exhaustive copy of gruvbox palette. Ref: https://github.com/gruvbox-community/gruvbox#palette
local base = require(base_name .. ".palette")
local gruv
if base_name == "zenbones" then
	base.bg = hsl "#fbf1c7"
	base.fg = hsl "#3c3836"
	gruv = {
		gray = hsl "#7c6f64",
		fg0 = hsl "#282828",
		fg1 = hsl "#3c3836",
		fg2 = hsl "#504945",
		fg3 = hsl "#665c54",
		fg4 = hsl "#7c6f64",
	}
else
	base.bg = hsl "#282828"
	base.fg = hsl "#ebdbb2"
	gruv = {
		gray = hsl "#a89984",
		fg0 = hsl "#fbf1c7",
		fg1 = hsl "#ebdbb2",
		fg2 = hsl "#d5c4a1",
		fg3 = hsl "#d5c4a1",
		fg4 = hsl "#a89984",
	}
end

base.rose = hsl "#cc241d"
base.leaf = hsl "#98971a"
base.wood = hsl "#d79921"
base.water = hsl "#458588"
base.blossom = hsl "#b16286"
base.sky = hsl "#689d6a"

-- extend specs using Lush
local theme = require(base_name)
local specs = lush.extends({ theme }).with(function()
	return {
		Constant { fg = gruv.fg4, gui = "italic" },
		Identifier { fg = gruv.fg2, gui = "italic" },
		Special { fg = gruv.fg3, gui = "bold" },
		Delimiter { fg = gruv.gray },
		Comment { fg = gruv.gray, gui = "italic" },
		LineNr { fg = Comment.fg },
	}
end)

-- apply terminal colors
require(base_name .. ".terminal").setup()

-- include our theme file and pass it to lush to apply
lush(specs)

And there you have it. Just call colorscheme gruvbones to use your new colorscheme. It respects &background and other configurations too.

Also checkout the neovim colorscheme for a similar and complete example.