a delightful and customizable mostly monochrome colorscheme thats soft on the eyes and supports treesitter, lsp, and heaps of neovim plugins.
a minimal but flexible and good looking pallet made from beautiful hexcodes
slugbyte/lackluster.nvim
with your favorite package managerlackluster
, lackluster-hack
, or lackluster-mint
-- example lazy.nvim install setup
return {
"slugbyte/lackluster.nvim",
lazy = false,
priority = 1000,
init = function()
vim.cmd.colorscheme("lackluster")
-- vim.cmd.colorscheme("lackluster-hack") -- my favorite
-- vim.cmd.colorscheme("lackluster-mint")
end,
}
require('lualine').setup({
options = {
theme = "lackluster",
},
})
!!
setup()
MUST be called before setting your colorscheme !!
local lackluster = require("lackluster")
-- !must called setup() before setting the colorscheme!
lackluster.setup({
-- tweak_color allows you to overwrite the default colors in the lackluster theme
tweak_color = {
-- you can set a value to a custom hexcode like' #aaaa77' (hashtag required)
-- or if the value is 'default' or nil it will use lackluster's default color
-- lack = "#aaaa77",
lack = "default",
luster = "default",
orange = "default",
yellow = "default",
green = "default",
blue = "default",
red = "default",
-- WARN: Watchout! messing with grays is probs a bad idea, its very easy to shoot yourself in the foot!
-- black = "default",
-- gray1 = "default",
-- gray2 = "default",
-- gray3 = "default",
-- gray4 = "default",
-- gray5 = "default",
-- gray6 = "default",
-- gray7 = "default",
-- gray8 = "default",
-- gray9 = "default",
},
})
-- !must set colorscheme after calling setup()!
vim.cmd.colorscheme("lackluster")
!!
setup()
MUST be called before setting your colorscheme !!
local lackluster = require("lackluster")
local color = lackluster.color -- blue, green, red, orange, black, lack, luster, gray1-9
-- !must called setup() before setting the colorscheme!
lackluster.setup({
-- You can overwrite the following syntax colors by setting them to one of...
-- 1) a hexcode like "#a1b2c3" for a custom color.
-- 2) "default" or nil will just use whatever lackluster's default is.
tweak_syntax = {
string = "default",
-- string = "#a1b2c3", -- custom hexcode
-- string = color.green, -- lackluster color
string_escape = "default",
comment = "default",
builtin = "default", -- builtin modules and functions
type = "default",
keyword = "default",
keyword_return = "default",
keyword_exception = "default",
},
-- You can overwrite the following background colors by setting them to one of...
-- 1) a hexcode like "#a1b2c3" for a custom color
-- 2) "none" for transparency
-- 3) "default" or nil will just use whatever lackluster's default is.
tweak_background = {
normal = 'default', -- main background
-- normal = 'none', -- transparent
-- normal = '#a1b2c3', -- hexcode
-- normal = color.green, -- lackluster color
telescope = 'default', -- telescope
menu = 'default', -- nvim_cmp, wildmenu ... (bad idea to transparent)
popup = 'default', -- lazy, mason, whichkey ... (bad idea to transparent)
},
})
-- !must set colorscheme after calling setup()!
vim.cmd.colorscheme("lackluster")
Example transparent background
setup()
-- When testing transparent backgrounds I found that comments where often hard to read,
-- and menus didn't look good but using setup() tweaks you can easily address that!
local lackluster = require("lackluster")
-- !must called setup() before setting the colorscheme!
lackluster.setup({
tweak_syntax = {
comment = lackluster.color.gray4, -- or gray5
},
tweak_background = {
normal = 'none',
telescope = 'none',
menu = lackluster.color.gray3,
popup = 'default',
},
})
-- !must set colorscheme after calling setup()!
vim.cmd.colorscheme("lackluster")
!!
setup()
MUST be called before setting your colorscheme !!
local lackluster = require("lackluster")
-- !must called setup() before setting the colorscheme!
lackluster.setup({
tweak_ui = {
disable_undercurl = false, -- set to true if you want underline instead of undercurl
enable_end_of_buffer = false, -- set to true to show the end_of_buffer ~ symbols in the gutter
},
})
-- !must set colorscheme after calling setup()!
vim.cmd.colorscheme("lackluster")
local lackluster = require("lackluster")
-- !must called setup() before setting the colorscheme!
lackluster.setup({
-- tweak_highlight allows you to update or overwrite the value passed into
-- vim.api.nvim_set_hl which allows you to have complete control over modifying all
-- highlights on a granular level.
tweak_highlight = {
-- modify @keyword's highlights to be bold and italic
["@keyword"] = {
overwrite = false, -- overwrite falsey will extend/update lackluster's defaults (nil also does this)
bold = true,
italic = true,
-- see `:help nvim_set_hl` for all possible keys
},
-- overwrite @function to link to @keyword
["@function"] = {
overwrite = true, -- overwrite == true will force overwrite lackluster's default highlights
link = "@keyword",
},
},
})
-- !must set colorscheme after calling setup()!
vim.cmd.colorscheme("lackluster")
!!
setup()
MUST be called before setting your colorscheme !!
local lackluster = require("lackluster")
-- if for some reason you want to disable the highlights related to a specific plugin you
-- can set any of these to true and the highlights will not be set
-- !must called setup() before setting the colorscheme!
lackluster.setup({
disable_plugin = {
bufferline = false,
cmp = false,
dashboard = false,
flash = false,
git_gutter = false,
git_signs = false,
headline = false,
indentmini = false,
lazy = false,
lightbulb = false,
lsp_config = false,
mason = false,
mini_diff = false,
navic = false,
noice = false,
notify = false,
oil = false,
rainbow_delimiter = false, -- if you want color-rainbows you should disable this
scollbar = false,
telescope = false,
todo_comments = false,
tree = false,
trouble = false,
which_key = false,
yanky = false,
},
})
-- !must set colorscheme after calling setup()!
vim.cmd.colorscheme("lackluster")
-- nvim-web-devicons does not play well with colorschemes so if lackluster style icons
-- run the following setup before you load lackluster.
local lackluster = require("lackluster")
-- !must called setup() before setting the colorscheme!
require('nvim-web-devicons').setup({
color_icons = false,
override = {
["default_icon"] = {
color = lackluster.color.gray4,
name = "Default",
}
}
})
vim.cmd.colorscheme("lackluster")
lackluster-hack (return is green, exception is blue)
lackluster-mint (types are green)
lots of other plugins should work right out of the box too!
Screenshots of many of the plugins can be found here
If you like this project star the GitHub repository :)
If you find a bug please open a issue :) and please include screenshots if relevant :)
Is lackluster
missing support for a plugin/extra you love? Open a suggestion issue, or
better yet Read the CONTRIBUTING
and DEVELOPMENT Guides,
and make a contribution!
Your feedback and contributions are mega appreciated!
I referenced the following colorscheme's source code when creating lackluster :)