mini.colors
Generated from the main branch of ‘mini.nvim’
Tweak and save any color scheme
See more details in Features and Documentation.
This was previously hosted at a personal echasnovski GitHub account. It was transferred to a dedicated organization to improve long term project stability. See more details here.
⦿ This is a part of mini.nvim library. Please use this link if you want to mention this module.
⦿ All contributions (issues, pull requests, discussions, etc.) are done inside of ‘mini.nvim’.
⦿ See whole library documentation to learn about general design principles, disable/configuration recipes, and more.
⦿ See MiniMax for a full config example that uses this module.
If you want to help this project grow but don’t know where to start, check out contributing guides of ‘mini.nvim’ or leave a Github star for ‘mini.nvim’ project and/or any its standalone Git repositories.
Demo
Features
Create colorscheme object (see
:h MiniColors-colorscheme): either manually (:h MiniColors.as_colorscheme()) or by querying present color schemes (including currently active one; see:h MiniColors.get_colorscheme()).Infer data about color scheme and/or modify based on it:
- Add transparency by removing background color (requires transparency in terminal emulator).
- Infer cterm attributes based on gui colors making it compatible with ‘notermguicolors’.
- Resolve highlight group links.
- Compress by removing redundant highlight groups.
- Extract palette of used colors and/or infer terminal colors based on it.
Modify colors to better fit your taste and/or goals:
- Apply any function to color hex string.
- Update channels (like lightness, saturation, hue, temperature, red, green, blue, etc.). Use either own function or one of the implemented methods:
- Add value to channel or multiply it by coefficient. Like “add 10 to saturation of every color” or “multiply saturation by 2” to make colors more saturated (less gray).
- Invert. Like “invert lightness” to convert between dark/light theme.
- Set to one or more values (picks closest to current one). Like “set to one or two hues” to make mono- or dichromatic color scheme.
- Repel from certain source(s) with stronger effect for closer values. Like “repel from hue 30” to remove red color from color scheme. Repel hue (how much is removed) is configurable.
- Simulate color vision deficiency.
Once color scheme is ready, either apply it to see effects right away or write it into a Lua file as a fully functioning separate color scheme.
Experiment interactively with a feedback.
Animate transition between color schemes either with
MiniColors.animate()or with:Colorschemeuser command.Convert within supported color spaces (
MiniColors.convert()):- Hex string.
- 8-bit number (terminal colors).
- RGB.
- Oklab, Oklch, Okhsl (https://bottosson.github.io/posts/oklab/).
Tweak quick start
- Execute
:lua require('mini.colors').interactive(). - Experiment by writing calls to exposed color scheme methods and applying them with
<M-a>. For more information, see:h MiniColors-colorscheme-methodsand:h MiniColors-recipes. - If you are happy with result, write color scheme with
<M-w>. If not, reset to initial color scheme with<M-r>. - If only some highlight groups can be made better, adjust them manually inside written color scheme file.
Installation
This plugin can be installed as part of ‘mini.nvim’ library (recommended) or as a standalone Git repository.
There are two branches to install from:
main(default, recommended) will have latest development version of plugin. All changes since last stable release should be perceived as being in beta testing phase (meaning they already passed alpha-testing and are moderately settled).stablewill be updated only upon releases with code tested during public beta-testing phase inmainbranch.
Here are code snippets for some common installation methods (use only one):
With mini.deps
‘mini.nvim’ library:
Branch Code snippet Main Follow recommended ‘mini.deps’ installation Stable Follow recommended ‘mini.deps’ installation Standalone plugin:
Branch Code snippet Main add(‘nvim-mini/mini.colors’)Stable add({ source = ‘nvim-mini/mini.colors’, checkout = ‘stable’ })
With folke/lazy.nvim
‘mini.nvim’ library:
Branch Code snippet Main { 'nvim-mini/mini.nvim', version = false },Stable { 'nvim-mini/mini.nvim', version = '*' },Standalone plugin:
Branch Code snippet Main { 'nvim-mini/mini.colors', version = false },Stable { 'nvim-mini/mini.colors', version = '*' },
With junegunn/vim-plug
‘mini.nvim’ library:
Branch Code snippet Main Plug 'nvim-mini/mini.nvim'Stable Plug 'nvim-mini/mini.nvim', { 'branch': 'stable' }Standalone plugin:
Branch Code snippet Main Plug 'nvim-mini/mini.colors'Stable Plug 'nvim-mini/mini.colors', { 'branch': 'stable' }
Important: no need to call require('mini.colors').setup(), but it can be done to improve usability.
Note: if you are on Windows, there might be problems with too long file paths (like error: unable to create file <some file name>: Filename too long). Try doing one of the following:
- Enable corresponding git global config value:
git config --system core.longpaths true. Then try to reinstall. - Install plugin in other place with shorter path.
Default config
-- No need to copy this inside `setup()`. Will be used automatically.
{}