Initial commit
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
images/
|
||||||
|
.DS_Store
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2025 Webhooked
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
@@ -0,0 +1,285 @@
|
|||||||
|
<div align="center">
|
||||||
|
<h1>🌊 Kansō.nvim 🌊</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<p>
|
||||||
|
Kansō is an elegant evolution of the original Kanagawa theme.
|
||||||
|
<br/>
|
||||||
|
A dark theme that invites <em>focus</em>, not attention.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
[](https://neovim.io/)
|
||||||
|
[](https://www.w3.org/TR/WCAG21/#contrast-minimum)
|
||||||
|
|
||||||
|
<img src="kanso.png" width="1000" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<img src="showcase.png" width="1000" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
|
||||||
|
- 🌈 Extensive support for `TreeSitter` syntax highlighting
|
||||||
|
- 🔌 Compatible with popular plugins out of the box
|
||||||
|
- ⚡ Compilation to lua byte code for fast startup times
|
||||||
|
- 🎨 Three beautiful theme variants to match your mood and environment
|
||||||
|
- 👁️ WCAG 2.1 AA compliant
|
||||||
|
|
||||||
|
## 📦 Installation
|
||||||
|
|
||||||
|
Download with your favorite package manager.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Using Packer
|
||||||
|
use "webhooked/kanso.nvim"
|
||||||
|
|
||||||
|
-- Using Lazy
|
||||||
|
{
|
||||||
|
"webhooked/kanso.nvim",
|
||||||
|
lazy = false,
|
||||||
|
priority = 1000,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📋 Requirements
|
||||||
|
|
||||||
|
- Terminal with truecolor support
|
||||||
|
- Terminal with undercurl support (optional)
|
||||||
|
|
||||||
|
## 🚀 Usage
|
||||||
|
|
||||||
|
As simple as writing:
|
||||||
|
|
||||||
|
```vim
|
||||||
|
colorscheme kanso
|
||||||
|
```
|
||||||
|
|
||||||
|
Or in Lua:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
vim.cmd("colorscheme kanso")
|
||||||
|
```
|
||||||
|
|
||||||
|
## ⚙️ Configuration
|
||||||
|
|
||||||
|
There is no need to call setup if you are ok with the defaults.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Default options:
|
||||||
|
require('kanso').setup({
|
||||||
|
compile = false, -- enable compiling the colorscheme
|
||||||
|
undercurl = true, -- enable undercurls
|
||||||
|
commentStyle = { italic = true },
|
||||||
|
functionStyle = {},
|
||||||
|
keywordStyle = { italic = true},
|
||||||
|
statementStyle = {},
|
||||||
|
typeStyle = {},
|
||||||
|
transparent = false, -- do not set background color
|
||||||
|
dimInactive = false, -- dim inactive window `:h hl-NormalNC`
|
||||||
|
terminalColors = true, -- define vim.g.terminal_color_{0,17}
|
||||||
|
colors = { -- add/modify theme and palette colors
|
||||||
|
palette = {},
|
||||||
|
theme = { zen = {}, pearl = {}, ink = {}, all = {} },
|
||||||
|
},
|
||||||
|
overrides = function(colors) -- add/modify highlights
|
||||||
|
return {}
|
||||||
|
end,
|
||||||
|
theme = "zen", -- Load "zen" theme
|
||||||
|
background = { -- map the value of 'background' option to a theme
|
||||||
|
dark = "zen", -- try "ink" !
|
||||||
|
light = "pearl"
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- setup must be called before loading
|
||||||
|
vim.cmd("colorscheme kanso")
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><strong>💡 Important Notes</strong></summary>
|
||||||
|
|
||||||
|
**Compilation:** If you enable compilation, make sure to run `:KansōCompile` command every time you make changes to your config.
|
||||||
|
|
||||||
|
```vim
|
||||||
|
" 1. Modify your config
|
||||||
|
" 2. Restart nvim
|
||||||
|
" 3. Run this command:
|
||||||
|
:KansōCompile
|
||||||
|
```
|
||||||
|
|
||||||
|
**Options:** Kansō adjusts to the value of some options. Make sure that the options `'laststatus'` and `'cmdheight'` are set **_before_** calling `setup`.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## 🎨 Themes
|
||||||
|
|
||||||
|
Kansō comes in three beautiful variants:
|
||||||
|
|
||||||
|
- `Zen` (Dark)
|
||||||
|
- `Ink` (Dark)
|
||||||
|
- `Pearl` (Light)
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<h3>✧ Zen ✧</h3>
|
||||||
|
<p>Deep & rich dark theme for focused coding.</p>
|
||||||
|
<img src="kanso_zen.png" width="900">
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
<h3>✧ Ink ✧</h3>
|
||||||
|
<p>Balanced theme with elegant contrast.</p>
|
||||||
|
<img src="kanso_ink.png" width="900">
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
<h3>✧ Pearl ✧</h3>
|
||||||
|
<p>Light theme for daytime productivity.</p>
|
||||||
|
<img src="kanso_pearl.png" width="900">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><strong>🔄 Switching Between Themes</strong></summary>
|
||||||
|
|
||||||
|
Themes can be changed in three ways:
|
||||||
|
|
||||||
|
1. Setting `config.theme` to the desired theme.
|
||||||
|
2. Using the `background` option:
|
||||||
|
Any change to the value of `vim.o.background` will select the theme mapped by `config.background`.
|
||||||
|
3. Loading the colorscheme directly with:
|
||||||
|
|
||||||
|
```lua
|
||||||
|
vim.cmd("colorscheme kanso-zen")
|
||||||
|
vim.cmd("colorscheme kanso-kage")
|
||||||
|
vim.cmd("colorscheme kanso-pearl")
|
||||||
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require("kanso").load("zen")
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## 🧰 Customization
|
||||||
|
|
||||||
|
In Kansō, there are _two_ kinds of colors: `PaletteColors` and `ThemeColors`;
|
||||||
|
`PaletteColors` are defined directly as RGB Hex strings, and have arbitrary names
|
||||||
|
that recall their actual color. Conversely, `ThemeColors` are named and grouped _semantically_
|
||||||
|
on the basis of their actual function.
|
||||||
|
|
||||||
|
In short, a `palette` defines all the available colors, while a `theme` maps the `PaletteColors`
|
||||||
|
to specific `ThemeColors` and the same palette color may be assigned to multiple theme colors.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><strong>📝 Color Customization Example</strong></summary>
|
||||||
|
|
||||||
|
You can change _both_ theme or palette colors using `config.colors`.
|
||||||
|
All the palette color names can be found [here](lua/kanso/colors.lua),
|
||||||
|
while their usage by each theme can be found [here](lua/kanso/themes.lua).
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require('kanso').setup({
|
||||||
|
...,
|
||||||
|
colors = {
|
||||||
|
palette = {
|
||||||
|
-- change all usages of these colors
|
||||||
|
zen0 = "#000000",
|
||||||
|
fujiWhite = "#FFFFFF",
|
||||||
|
},
|
||||||
|
theme = {
|
||||||
|
-- change specific usages for a certain theme, or for all of them
|
||||||
|
zen = {
|
||||||
|
ui = {
|
||||||
|
float = {
|
||||||
|
bg = "none",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ink = {
|
||||||
|
syn = {
|
||||||
|
parameter = "yellow",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
all = {
|
||||||
|
ui = {
|
||||||
|
bg_gutter = "none"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
...
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary><strong>🔧 Highlight Group Overrides</strong></summary>
|
||||||
|
|
||||||
|
You can also conveniently add/modify any `hlgroups` using the `config.overrides` option, allowing you to customize the looks of specific built-in elements, or any other external plugins that provides `hlgroups`. (See `:help highlight` for more information on `hlgroups`.)
|
||||||
|
Supported keywords are the same for `:h nvim_set_hl` `{val}` parameter.
|
||||||
|
|
||||||
|
```lua
|
||||||
|
require('kanso').setup({
|
||||||
|
...,
|
||||||
|
overrides = function(colors)
|
||||||
|
return {
|
||||||
|
-- Assign a static color to strings
|
||||||
|
String = { fg = colors.palette.carpYellow, italic = true },
|
||||||
|
-- theme colors will update dynamically when you change theme!
|
||||||
|
SomePluginHl = { fg = colors.theme.syn.type, bold = true },
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
...
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## 🔄 Integration
|
||||||
|
|
||||||
|
### Get palette and theme colors
|
||||||
|
|
||||||
|
```lua
|
||||||
|
-- Get the colors for the current theme
|
||||||
|
local colors = require("kanso.colors").setup()
|
||||||
|
local palette_colors = colors.palette
|
||||||
|
local theme_colors = colors.theme
|
||||||
|
|
||||||
|
-- Get the colors for a specific theme
|
||||||
|
local zen_colors = require("kanso.colors").setup({ theme = 'ink' })
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🧩 Extras
|
||||||
|
|
||||||
|
<div>
|
||||||
|
|
||||||
|
- [Alacritty](extras/alacritty/)
|
||||||
|
- [Kitty](extras/kitty/)
|
||||||
|
- [Ghostty](extras/ghostty)
|
||||||
|
- [Wezterm](extras/wezterm/)
|
||||||
|
- [Kansō for VS Code](https://marketplace.visualstudio.com/items?itemName=webhooked.kanso-vscode)
|
||||||
|
- [Kansō for Zed](https://github.com/webhooked/kanso-zed)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## 💎 Credits
|
||||||
|
|
||||||
|
The theme is inspired by the Kanagawa theme.
|
||||||
|
|
||||||
|
- [rebelot](https://github.com/rebelot/kanagawa.nvim) for the original Kanagawa Neovim theme
|
||||||
|
|
||||||
|
## 🙏 Acknowledgements
|
||||||
|
|
||||||
|
- [Kanagawa](https://github.com/rebelot/kanagawa.nvim)
|
||||||
|
- [Tokyonight](https://github.com/folke/tokyonight.nvim)
|
||||||
|
- [Gruvbox](https://github.com/morhetz/gruvbox)
|
||||||
|
- [Catppuccin](https://github.com/catppuccin/nvim)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
lua require("kanso").load "ink"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
lua require("kanso").load "pearl"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
lua require("kanso").load "zen"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
lua require('kanso').load()
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Kanso Ink Alacritty Colors
|
||||||
|
|
||||||
|
[colors.primary]
|
||||||
|
background = '#14171d'
|
||||||
|
foreground = '#C5C9C7'
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = '#14171d'
|
||||||
|
red = '#c4746e'
|
||||||
|
green = '#8a9a7b'
|
||||||
|
yellow = '#c4b28a'
|
||||||
|
blue = '#8ba4b0'
|
||||||
|
magenta = '#a292a3'
|
||||||
|
cyan = '#8ea4a2'
|
||||||
|
white = '#c8c093'
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = '#A4A7A4'
|
||||||
|
red = '#e46876'
|
||||||
|
green = '#87a987'
|
||||||
|
yellow = '#e6c384'
|
||||||
|
blue = '#7fb4ca'
|
||||||
|
magenta = '#938aa9'
|
||||||
|
cyan = '#7aa89f'
|
||||||
|
white = '#C5C9C7'
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
background = '#393B42'
|
||||||
|
foreground = '#C5C9C7'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#b6927b'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#b98d7b'
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Kanso Pearl Alacritty Colors
|
||||||
|
|
||||||
|
[colors.primary]
|
||||||
|
background = '#f2f1ef'
|
||||||
|
foreground = '#545464'
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "#14171d"
|
||||||
|
red = "#c84053"
|
||||||
|
green = "#6f894e"
|
||||||
|
yellow = "#77713f"
|
||||||
|
blue = "#4d699b"
|
||||||
|
magenta = "#b35b79"
|
||||||
|
cyan = "#597b75"
|
||||||
|
white = "#545464"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "#8a8980"
|
||||||
|
red = "#d7474b"
|
||||||
|
green = "#6e915f"
|
||||||
|
yellow = "#836f4a"
|
||||||
|
blue = "#6693bf"
|
||||||
|
magenta = "#624c83"
|
||||||
|
cyan = "#5e857a"
|
||||||
|
white = "#43436c"
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
background = '#c9cbd1'
|
||||||
|
foreground = '#14171d'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#e98a00'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#e82424'
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# Kanso Zen Alacritty Colors
|
||||||
|
|
||||||
|
[colors.primary]
|
||||||
|
background = '#090E13'
|
||||||
|
foreground = '#C5C9C7'
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = '#090E13'
|
||||||
|
red = '#c4746e'
|
||||||
|
green = '#8a9a7b'
|
||||||
|
yellow = '#c4b28a'
|
||||||
|
blue = '#8ba4b0'
|
||||||
|
magenta = '#a292a3'
|
||||||
|
cyan = '#8ea4a2'
|
||||||
|
white = '#c8c093'
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = '#A4A7A4'
|
||||||
|
red = '#e46876'
|
||||||
|
green = '#87a987'
|
||||||
|
yellow = '#e6c384'
|
||||||
|
blue = '#7fb4ca'
|
||||||
|
magenta = '#938aa9'
|
||||||
|
cyan = '#7aa89f'
|
||||||
|
white = '#C5C9C7'
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
background = '#393B42'
|
||||||
|
foreground = '#C5C9C7'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = '#b6927b'
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = '#b98d7b'
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
palette = 0=#14171d
|
||||||
|
palette = 1=#c4746e
|
||||||
|
palette = 2=#8a9a7b
|
||||||
|
palette = 3=#c4b28a
|
||||||
|
palette = 4=#8ba4b0
|
||||||
|
palette = 5=#a292a3
|
||||||
|
palette = 6=#8ea4a2
|
||||||
|
palette = 7=#c8c093
|
||||||
|
palette = 8=#a4a7a4
|
||||||
|
palette = 9=#e46876
|
||||||
|
palette = 10=#87a987
|
||||||
|
palette = 11=#e6c384
|
||||||
|
palette = 12=#7fb4ca
|
||||||
|
palette = 13=#938aa9
|
||||||
|
palette = 14=#7aa89f
|
||||||
|
palette = 15=#c5c9c7
|
||||||
|
|
||||||
|
background = #14171d
|
||||||
|
foreground = #c5c9c7
|
||||||
|
cursor-color = #c5c9c7
|
||||||
|
selection-background = #393B42
|
||||||
|
selection-foreground = #c5c9c7
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
palette = 0=#24262D
|
||||||
|
palette = 1=#c84053
|
||||||
|
palette = 2=#6f894e
|
||||||
|
palette = 3=#77713f
|
||||||
|
palette = 4=#4d699b
|
||||||
|
palette = 5=#b35b79
|
||||||
|
palette = 6=#597b75
|
||||||
|
palette = 7=#545464
|
||||||
|
palette = 8=#6d6f6e
|
||||||
|
palette = 9=#d7474b
|
||||||
|
palette = 10=#6e915f
|
||||||
|
palette = 11=#836f4a
|
||||||
|
palette = 12=#6693bf
|
||||||
|
palette = 13=#624c83
|
||||||
|
palette = 14=#5e857a
|
||||||
|
palette = 15=#43436c
|
||||||
|
|
||||||
|
background = #f2f1ef
|
||||||
|
foreground = #24262D
|
||||||
|
cursor-color = #24262D
|
||||||
|
selection-background = #e2e1df
|
||||||
|
selection-foreground = #24262D
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
palette = 0=#090E13
|
||||||
|
palette = 1=#c4746e
|
||||||
|
palette = 2=#8a9a7b
|
||||||
|
palette = 3=#c4b28a
|
||||||
|
palette = 4=#8ba4b0
|
||||||
|
palette = 5=#a292a3
|
||||||
|
palette = 6=#8ea4a2
|
||||||
|
palette = 7=#c8c093
|
||||||
|
palette = 8=#a4a7a4
|
||||||
|
palette = 9=#e46876
|
||||||
|
palette = 10=#87a987
|
||||||
|
palette = 11=#e6c384
|
||||||
|
palette = 12=#7fb4ca
|
||||||
|
palette = 13=#938aa9
|
||||||
|
palette = 14=#7aa89f
|
||||||
|
palette = 15=#c5c9c7
|
||||||
|
|
||||||
|
background = #090E13
|
||||||
|
foreground = #c5c9c7
|
||||||
|
cursor-color = #c5c9c7
|
||||||
|
selection-background = #24262D
|
||||||
|
selection-foreground = #c5c9c7
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
background #14171d
|
||||||
|
foreground #C5C9C7
|
||||||
|
selection_background #24262D
|
||||||
|
selection_foreground #C5C9C7
|
||||||
|
url_color #72A7BC
|
||||||
|
cursor #C5C9C7
|
||||||
|
cursor_text_color #14171d
|
||||||
|
|
||||||
|
# Tabs
|
||||||
|
active_tab_background #14171d
|
||||||
|
active_tab_foreground #C5C9C7
|
||||||
|
inactive_tab_background #14171d
|
||||||
|
inactive_tab_foreground #A4A7A4
|
||||||
|
|
||||||
|
# normal
|
||||||
|
color0 #14171d
|
||||||
|
color1 #c4746e
|
||||||
|
color2 #8a9a7b
|
||||||
|
color3 #c4b28a
|
||||||
|
color4 #8ba4b0
|
||||||
|
color5 #a292a3
|
||||||
|
color6 #8ea4a2
|
||||||
|
color7 #C8C093
|
||||||
|
|
||||||
|
# bright
|
||||||
|
color8 #A4A7A4
|
||||||
|
color9 #E46876
|
||||||
|
color10 #87a987
|
||||||
|
color11 #E6C384
|
||||||
|
color12 #7FB4CA
|
||||||
|
color13 #938AA9
|
||||||
|
color14 #7AA89F
|
||||||
|
color15 #C5C9C7
|
||||||
|
|
||||||
|
|
||||||
|
# extended colors
|
||||||
|
color16 #b6927b
|
||||||
|
color17 #b98d7b
|
||||||
|
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
background #f2f1ef
|
||||||
|
foreground #24262D
|
||||||
|
selection_background #e2e1df
|
||||||
|
selection_foreground #24262D
|
||||||
|
url_color #73A7BC
|
||||||
|
cursor #24262D
|
||||||
|
cursor_text_color #f2f1ef
|
||||||
|
|
||||||
|
# Tabs
|
||||||
|
active_tab_background #f2f1ef
|
||||||
|
active_tab_foreground #24262D
|
||||||
|
inactive_tab_background #f2f1ef
|
||||||
|
inactive_tab_foreground #6d6f6e
|
||||||
|
|
||||||
|
# normal
|
||||||
|
color0 #24262D
|
||||||
|
color1 #c84053
|
||||||
|
color2 #6f894e
|
||||||
|
color3 #77713f
|
||||||
|
color4 #4d699b
|
||||||
|
color5 #b35b79
|
||||||
|
color6 #597b75
|
||||||
|
color7 #545464
|
||||||
|
|
||||||
|
# bright
|
||||||
|
color8 #6d6f6e
|
||||||
|
color9 #d7474b
|
||||||
|
color10 #6e915f
|
||||||
|
color11 #836f4a
|
||||||
|
color12 #6693bf
|
||||||
|
color13 #624c83
|
||||||
|
color14 #5e857a
|
||||||
|
color15 #43436c
|
||||||
|
|
||||||
|
|
||||||
|
# extended colors
|
||||||
|
color16 #cc6d00
|
||||||
|
color17 #e82424
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
background #090E13
|
||||||
|
foreground #C5C9C7
|
||||||
|
selection_background #393B42
|
||||||
|
selection_foreground #C5C9C7
|
||||||
|
url_color #72A7BC
|
||||||
|
cursor #C5C9C7
|
||||||
|
cursor_text_color #090E13
|
||||||
|
|
||||||
|
# Tabs
|
||||||
|
active_tab_background #090E13
|
||||||
|
active_tab_foreground #C5C9C7
|
||||||
|
inactive_tab_background #090E13
|
||||||
|
inactive_tab_foreground #A4A7A4
|
||||||
|
|
||||||
|
# normal
|
||||||
|
color0 #0d0c0c
|
||||||
|
color1 #c4746e
|
||||||
|
color2 #8a9a7b
|
||||||
|
color3 #c4b28a
|
||||||
|
color4 #8ba4b0
|
||||||
|
color5 #a292a3
|
||||||
|
color6 #8ea4a2
|
||||||
|
color7 #C8C093
|
||||||
|
|
||||||
|
# bright
|
||||||
|
color8 #A4A7A4
|
||||||
|
color9 #E46876
|
||||||
|
color10 #87a987
|
||||||
|
color11 #E6C384
|
||||||
|
color12 #7FB4CA
|
||||||
|
color13 #938AA9
|
||||||
|
color14 #7AA89F
|
||||||
|
color15 #C5C9C7
|
||||||
|
|
||||||
|
|
||||||
|
# extended colors
|
||||||
|
color16 #b6927b
|
||||||
|
color17 #b98d7b
|
||||||
|
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
local config = {
|
||||||
|
force_reverse_video_cursor = true,
|
||||||
|
colors = {
|
||||||
|
foreground = "#C5C9C7",
|
||||||
|
background = "#14171d",
|
||||||
|
|
||||||
|
cursor_bg = "#14171d",
|
||||||
|
cursor_fg = "#C5C9C7",
|
||||||
|
cursor_border = "#C5C9C7",
|
||||||
|
|
||||||
|
selection_fg = "#C5C9C7",
|
||||||
|
selection_bg = "#393B42",
|
||||||
|
|
||||||
|
scrollbar_thumb = "#393B42",
|
||||||
|
split = "#393B42",
|
||||||
|
|
||||||
|
ansi = {
|
||||||
|
"#14171d",
|
||||||
|
"#C4746E",
|
||||||
|
"#8A9A7B",
|
||||||
|
"#C4B28A",
|
||||||
|
"#8BA4B0",
|
||||||
|
"#A292A3",
|
||||||
|
"#8EA4A2",
|
||||||
|
"#A4A7A4",
|
||||||
|
},
|
||||||
|
brights = {
|
||||||
|
"#A4A7A4",
|
||||||
|
"#E46876",
|
||||||
|
"#87A987",
|
||||||
|
"#E6C384",
|
||||||
|
"#7FB4CA",
|
||||||
|
"#938AA9",
|
||||||
|
"#7AA89F",
|
||||||
|
"#C5C9C7",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return config
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
local config = {
|
||||||
|
force_reverse_video_cursor = true,
|
||||||
|
colors = {
|
||||||
|
foreground = "#C5C9C7",
|
||||||
|
background = "#090E13",
|
||||||
|
|
||||||
|
cursor_bg = "#090E13",
|
||||||
|
cursor_fg = "#C5C9C7",
|
||||||
|
cursor_border = "#C5C9C7",
|
||||||
|
|
||||||
|
selection_fg = "#C5C9C7",
|
||||||
|
selection_bg = "#24262D",
|
||||||
|
|
||||||
|
scrollbar_thumb = "#24262D",
|
||||||
|
split = "#24262D",
|
||||||
|
|
||||||
|
ansi = {
|
||||||
|
"#090E13",
|
||||||
|
"#C4746E",
|
||||||
|
"#8A9A7B",
|
||||||
|
"#C4B28A",
|
||||||
|
"#8BA4B0",
|
||||||
|
"#A292A3",
|
||||||
|
"#8EA4A2",
|
||||||
|
"#A4A7A4",
|
||||||
|
},
|
||||||
|
brights = {
|
||||||
|
"#A4A7A4",
|
||||||
|
"#E46876",
|
||||||
|
"#87A987",
|
||||||
|
"#E6C384",
|
||||||
|
"#7FB4CA",
|
||||||
|
"#938AA9",
|
||||||
|
"#7AA89F",
|
||||||
|
"#C5C9C7",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return config
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 805 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 796 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 756 KiB |
@@ -0,0 +1,155 @@
|
|||||||
|
---@class PaletteColors
|
||||||
|
local palette = {
|
||||||
|
|
||||||
|
-- Bg Shades
|
||||||
|
zen0 = "#090E13",
|
||||||
|
zen1 = "#1C1E25",
|
||||||
|
zen2 = "#24262D",
|
||||||
|
zen3 = "#393B42",
|
||||||
|
|
||||||
|
-- Popup and Floats
|
||||||
|
zenBlue1 = "#223249",
|
||||||
|
zenBlue2 = "#2D4F67",
|
||||||
|
|
||||||
|
-- Diff and Git
|
||||||
|
winterGreen = "#2B3328",
|
||||||
|
winterYellow = "#49443C",
|
||||||
|
winterRed = "#43242B",
|
||||||
|
winterBlue = "#252535",
|
||||||
|
autumnGreen = "#76946A",
|
||||||
|
autumnRed = "#C34043",
|
||||||
|
autumnYellow = "#DCA561",
|
||||||
|
|
||||||
|
-- Diag
|
||||||
|
samuraiRed = "#E82424",
|
||||||
|
roninYellow = "#FF9E3B",
|
||||||
|
zenAqua1 = "#6A9589",
|
||||||
|
inkBlue = "#658594",
|
||||||
|
|
||||||
|
-- Fg and Comments
|
||||||
|
oldWhite = "#C5C9C7",
|
||||||
|
fujiWhite = "#f2f1ef",
|
||||||
|
fujiGray = "#727169",
|
||||||
|
|
||||||
|
oniViolet = "#957FB8",
|
||||||
|
oniViolet2 = "#b8b4d0",
|
||||||
|
crystalBlue = "#7E9CD8",
|
||||||
|
springViolet1 = "#938AA9",
|
||||||
|
springViolet2 = "#9CABCA",
|
||||||
|
springBlue = "#7FB4CA",
|
||||||
|
lightBlue = "#A3D4D5",
|
||||||
|
zenAqua2 = "#7AA89F",
|
||||||
|
|
||||||
|
springGreen = "#98BB6C",
|
||||||
|
boatYellow1 = "#938056",
|
||||||
|
boatYellow2 = "#C0A36E",
|
||||||
|
carpYellow = "#E6C384",
|
||||||
|
|
||||||
|
sakuraPink = "#D27E99",
|
||||||
|
zenRed = "#E46876",
|
||||||
|
peachRed = "#FF5D62",
|
||||||
|
surimiOrange = "#FFA066",
|
||||||
|
katanaGray = "#717C7C",
|
||||||
|
|
||||||
|
inkBlack0 = "#14171d",
|
||||||
|
inkBlack1 = "#1f1f26",
|
||||||
|
inkBlack2 = "#24262D",
|
||||||
|
inkBlack3 = "#393B42",
|
||||||
|
|
||||||
|
inkWhite = "#C5C9C7",
|
||||||
|
inkGreen = "#87a987",
|
||||||
|
inkGreen2 = "#8a9a7b",
|
||||||
|
inkPink = "#a292a3",
|
||||||
|
inkOrange = "#b6927b",
|
||||||
|
inkOrange2 = "#b98d7b",
|
||||||
|
inkGray = "#A4A7A4",
|
||||||
|
inkGray1 = "#9E9B93",
|
||||||
|
inkGray2 = "#75797f",
|
||||||
|
inkGray3 = "#5C6066",
|
||||||
|
inkBlue2 = "#8ba4b0",
|
||||||
|
inkViolet= "#8992a7",
|
||||||
|
inkRed = "#c4746e",
|
||||||
|
inkAqua = "#8ea4a2",
|
||||||
|
inkAsh = "#5C6068",
|
||||||
|
inkTeal = "#949fb5",
|
||||||
|
inkYellow = "#c4b28a",--"#a99c8b",
|
||||||
|
-- "#8a9aa3",
|
||||||
|
|
||||||
|
pearlInk0 = "#24262D",
|
||||||
|
pearlInk1 = "#545464",
|
||||||
|
pearlInk2 = "#43436c",
|
||||||
|
pearlGray = "#e2e1df",
|
||||||
|
pearlGray2 = "#5C6068",
|
||||||
|
pearlGray3 = "#6D6D69",
|
||||||
|
pearlGray4 = "#9F9F99",
|
||||||
|
|
||||||
|
pearlWhite0 = "#f2f1ef",
|
||||||
|
pearlWhite1 = "#e2e1df",
|
||||||
|
pearlWhite2 = "#dddddb",
|
||||||
|
pearlViolet1 = "#a09cac",
|
||||||
|
pearlViolet2 = "#766b90",
|
||||||
|
pearlViolet3 = "#c9cbd1",
|
||||||
|
pearlViolet4 = "#624c83",
|
||||||
|
pearlBlue1 = "#c7d7e0",
|
||||||
|
pearlBlue2 = "#b5cbd2",
|
||||||
|
pearlBlue3 = "#9fb5c9",
|
||||||
|
pearlBlue4 = "#4d699b",
|
||||||
|
pearlBlue5 = "#5d57a3",
|
||||||
|
pearlGreen = "#6f894e",
|
||||||
|
pearlGreen2 = "#6e915f",
|
||||||
|
pearlGreen3 = "#b7d0ae",
|
||||||
|
pearlPink = "#b35b79",
|
||||||
|
pearlOrange = "#cc6d00",
|
||||||
|
pearlOrange2 = "#e98a00",
|
||||||
|
pearlYellow ="#77713f",
|
||||||
|
pearlYellow2 = "#836f4a",
|
||||||
|
pearlYellow3 = "#de9800",
|
||||||
|
pearlYellow4 = "#f9d791",
|
||||||
|
pearlRed = "#c84053",
|
||||||
|
pearlRed2 = "#d7474b",
|
||||||
|
pearlRed3 = "#e82424",
|
||||||
|
pearlRed4 = "#d9a594",
|
||||||
|
pearlAqua = "#597b75",
|
||||||
|
pearlAqua2 = "#5e857a",
|
||||||
|
pearlTeal1 = "#4e8ca2",
|
||||||
|
pearlTeal2 = "#6693bf",
|
||||||
|
pearlTeal3 = "#5a7785",
|
||||||
|
pearlCyan = "#d7e3d8",
|
||||||
|
}
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
--- Generate colors table:
|
||||||
|
--- * opts:
|
||||||
|
--- - colors: Table of personalized colors and/or overrides of existing ones.
|
||||||
|
--- Defaults to KansoConfig.colors.
|
||||||
|
--- - theme: Use selected theme. Defaults to KansoConfig.theme
|
||||||
|
--- according to the value of 'background' option.
|
||||||
|
---@param opts? { colors?: table, theme?: string }
|
||||||
|
---@return { theme: ThemeColors, palette: PaletteColors}
|
||||||
|
function M.setup(opts)
|
||||||
|
opts = opts or {}
|
||||||
|
local override_colors = opts.colors or require("kanso").config.colors
|
||||||
|
local theme = opts.theme or require("kanso")._CURRENT_THEME -- WARN: this fails if called before kanso.load()
|
||||||
|
|
||||||
|
if not theme then
|
||||||
|
error("kanso.colors.setup(): Unable to infer `theme`. Either specify a theme or call this function after ':colorscheme kanso'")
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Add to and/or override palette_colors
|
||||||
|
local updated_palette_colors = vim.tbl_extend("force", palette, override_colors.palette or {})
|
||||||
|
|
||||||
|
-- Generate the theme according to the updated palette colors
|
||||||
|
local theme_colors = require("kanso.themes")[theme](updated_palette_colors)
|
||||||
|
|
||||||
|
-- Add to and/or override theme_colors
|
||||||
|
local theme_overrides = vim.tbl_deep_extend("force", override_colors.theme["all"] or {}, override_colors.theme[theme] or {} )
|
||||||
|
local updated_theme_colors = vim.tbl_deep_extend("force", theme_colors, theme_overrides)
|
||||||
|
-- return palette_colors AND theme_colors
|
||||||
|
|
||||||
|
return {
|
||||||
|
theme = updated_theme_colors,
|
||||||
|
palette = updated_palette_colors,
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
-- local c = require("kanso.color")
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
---@param colors KansoColors
|
||||||
|
---@param config? KansoConfig
|
||||||
|
function M.setup(colors, config)
|
||||||
|
local theme = colors.theme
|
||||||
|
config = config or require("kanso").config
|
||||||
|
|
||||||
|
return {
|
||||||
|
-- ColorColumn Used for the columns set with 'colorcolumn'.
|
||||||
|
ColorColumn = { bg = theme.ui.bg_p1 },
|
||||||
|
-- Conceal Placeholder characters substituted for concealed text (see 'conceallevel').
|
||||||
|
Conceal = { fg = theme.ui.special, bold = true },
|
||||||
|
-- CurSearch Used for highlighting a search pattern under the cursor (see 'hlsearch').
|
||||||
|
CurSearch = { fg = theme.ui.fg, bg = theme.ui.bg_search, bold = true },
|
||||||
|
-- Cursor Character under the cursor.
|
||||||
|
Cursor = { fg = theme.ui.cursor_fg, bg = theme.ui.cursor_bg },
|
||||||
|
-- lCursor Character under the cursor when |language-mapping| is used (see 'guicursor').
|
||||||
|
lCursor = { link = "Cursor" },
|
||||||
|
-- CursorIM Like Cursor, but used when in IME mode.
|
||||||
|
CursorIM = { link = "Cursor" },
|
||||||
|
-- CursorColumn Screen-column at the cursor, when 'cursorcolumn' is set.
|
||||||
|
CursorColumn = { link = "CursorLine" },
|
||||||
|
-- CursorLine Screen-line at the cursor, when 'cursorline' is set. Low-priority if foreground (ctermfg OR guifg) is not set.
|
||||||
|
CursorLine = { bg = theme.ui.bg_p2 },
|
||||||
|
-- Directory Directory names (and other special names in listings).
|
||||||
|
Directory = { fg = theme.syn.fun },
|
||||||
|
-- DiffAdd Diff mode: Added line. |diff.txt|
|
||||||
|
DiffAdd = { bg = theme.diff.add },
|
||||||
|
-- DiffChange Diff mode: Changed line. |diff.txt|
|
||||||
|
DiffChange = { bg = theme.diff.change },
|
||||||
|
-- DiffDelete Diff mode: Deleted line. |diff.txt|
|
||||||
|
DiffDelete = { fg = theme.vcs.removed, bg = theme.diff.delete },
|
||||||
|
-- DiffText Diff mode: Changed text within a changed line. |diff.txt|
|
||||||
|
DiffText = { bg = theme.diff.text },
|
||||||
|
-- EndOfBuffer Filler lines (~) after the end of the buffer. By default, this is highlighted like |hl-NonText|.
|
||||||
|
EndOfBuffer = { fg = theme.ui.bg },
|
||||||
|
-- TermCursor Cursor in a focused terminal.
|
||||||
|
-- TermCursorNC Cursor in an unfocused terminal.
|
||||||
|
-- ErrorMsg Error messages on the command line.
|
||||||
|
ErrorMsg = { fg = theme.diag.error },
|
||||||
|
-- WinSeparator Separators between window splits.
|
||||||
|
WinSeparator = { fg = theme.ui.bg_m3, bg = config.dimInactive and theme.ui.bg_dim or "NONE" },
|
||||||
|
VertSplit = { link = "WinSeparator" },
|
||||||
|
-- Folded Line used for closed folds.
|
||||||
|
Folded = { fg = theme.ui.special, bg = theme.ui.bg_p1 },
|
||||||
|
-- FoldColumn 'foldcolumn'
|
||||||
|
FoldColumn = { fg = theme.ui.nontext, bg = theme.ui.bg_gutter },
|
||||||
|
-- SignColumn Column where |signs| are displayed.
|
||||||
|
SignColumn = { fg = theme.ui.special, bg = theme.ui.bg_gutter },
|
||||||
|
-- IncSearch 'incsearch' highlighting; also used for the text replaced with ":s///c".
|
||||||
|
IncSearch = { fg = theme.ui.fg_reverse, bg = theme.diag.warning },
|
||||||
|
-- Substitute |:substitute| replacement text highlighting.
|
||||||
|
Substitute = { fg = theme.ui.fg, bg = theme.vcs.removed },
|
||||||
|
-- LineNr Line number for ":number" and ":#" commands, and when 'number' or 'relativenumber' option is set.
|
||||||
|
LineNr = { fg = theme.ui.cursor_line_nr_foreground, bg = theme.ui.none },
|
||||||
|
-- LineNrAbove Line number for when the 'relativenumber' option is set, above the cursor line.
|
||||||
|
-- LineNrBelow Line number for when the 'relativenumber' option is set, below the cursor line.
|
||||||
|
-- CursorLineNr Like LineNr when 'cursorline' is set and 'cursorlineopt' contains "number" or is "both", for the cursor line.
|
||||||
|
CursorLineNr = { fg = theme.ui.cursor_line_nr_active_foreground, bg = theme.ui.none },
|
||||||
|
-- CursorLineFold Like FoldColumn when 'cursorline' is set for the cursor line.
|
||||||
|
-- CursorLineSign Like SignColumn when 'cursorline' is set for the cursor line.
|
||||||
|
-- MatchParen Character under the cursor or just before it, if it is a paired bracket, and its match. |pi_paren.txt|
|
||||||
|
MatchParen = { fg = theme.diag.warning, bold = true },
|
||||||
|
-- ModeMsg 'showmode' message (e.g., "-- INSERT --").
|
||||||
|
ModeMsg = { fg = theme.diag.warning, bold = true },
|
||||||
|
-- MsgArea Area for messages and cmdline.
|
||||||
|
MsgArea = vim.o.cmdheight == 0 and {link = 'StatusLine'} or { fg = theme.ui.fg_dim },
|
||||||
|
-- MsgSeparator Separator for scrolled messages |msgsep|.
|
||||||
|
MsgSeparator = { bg = vim.o.cmdheight == 0 and theme.ui.bg or theme.ui.bg_m3 },
|
||||||
|
-- MoreMsg |more-prompt|
|
||||||
|
MoreMsg = { fg = theme.diag.info },
|
||||||
|
-- NonText '@' at the end of the window, characters from 'showbreak' and other characters that do not really exist in the text (e.g., ">" displayed when a double-wide character doesn't fit at the end of the line). See also |hl-EndOfBuffer|.
|
||||||
|
NonText = { fg = theme.ui.nontext },
|
||||||
|
-- Normal Normal text.
|
||||||
|
Normal = { fg = theme.ui.fg, bg = not config.transparent and theme.ui.bg or "NONE" },
|
||||||
|
-- NormalFloat Normal text in floating windows.
|
||||||
|
NormalFloat = { fg = theme.ui.float.fg, bg = theme.ui.float.bg },
|
||||||
|
-- FloatBorder Border of floating windows.
|
||||||
|
FloatBorder = { fg = theme.ui.float.fg_border, bg = theme.ui.float.bg_border },
|
||||||
|
-- FloatTitle Title of floating windows.
|
||||||
|
FloatTitle = { fg = theme.ui.special, bg = theme.ui.float.bg_border, bold = true },
|
||||||
|
-- FloatFooter Footer of floating windows.
|
||||||
|
FloatFooter = { fg = theme.ui.nontext, bg = theme.ui.float.bg_border },
|
||||||
|
-- NormalNC Normal text in non-current windows.
|
||||||
|
NormalNC = config.dimInactive and { fg = theme.ui.fg_dim, bg = theme.ui.bg_dim } or { link = "Normal" },
|
||||||
|
-- Pmenu Popup menu: Normal item.
|
||||||
|
Pmenu = { fg = theme.ui.pmenu.fg, bg = theme.ui.pmenu.bg },
|
||||||
|
-- PmenuSel Popup menu: Selected item.
|
||||||
|
PmenuSel = { fg = theme.ui.pmenu.fg_sel, bg = theme.ui.pmenu.bg_sel },
|
||||||
|
-- PmenuKind Popup menu: Normal item "kind".
|
||||||
|
PmenuKind = { fg = theme.ui.fg_dim, bg = theme.ui.pmenu.bg },
|
||||||
|
-- PmenuKindSel Popup menu: Selected item "kind".
|
||||||
|
PmenuKindSel = { fg = theme.ui.fg_dim, bg = theme.ui.pmenu.bg_sel },
|
||||||
|
-- PmenuExtra Popup menu: Normal item "extra text".
|
||||||
|
PmenuExtra = { fg = theme.ui.special, bg = theme.ui.pmenu.bg },
|
||||||
|
-- PmenuExtraSel Popup menu: Selected item "extra text".
|
||||||
|
PmenuExtraSel = { fg = theme.ui.special, bg = theme.ui.pmenu.bg_sel },
|
||||||
|
-- PmenuSbar Popup menu: Scrollbar.
|
||||||
|
PmenuSbar = { bg = theme.ui.pmenu.bg_sbar },
|
||||||
|
-- PmenuThumb Popup menu: Thumb of the scrollbar.
|
||||||
|
PmenuThumb = { bg = theme.ui.pmenu.bg_thumb },
|
||||||
|
-- Question |hit-enter| prompt and yes/no questions.
|
||||||
|
Question = { link = "MoreMsg" },
|
||||||
|
-- QuickFixLine Current |quickfix| item in the quickfix window. Combined with |hl-CursorLine| when the cursor is there.
|
||||||
|
QuickFixLine = { bg = theme.ui.bg_p1 },
|
||||||
|
-- Search Last search pattern highlighting (see 'hlsearch'). Also used for similar items that need to stand out.
|
||||||
|
Search = { fg = theme.ui.fg, bg = theme.ui.bg_search },
|
||||||
|
-- SpecialKey Unprintable characters: Text displayed differently from what it really is. But not 'listchars' whitespace. |hl-Whitespace|
|
||||||
|
SpecialKey = { fg = theme.ui.special },
|
||||||
|
-- SpellBad Word that is not recognized by the spellchecker. |spell| Combined with the highlighting used otherwise.
|
||||||
|
SpellBad = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.error },
|
||||||
|
-- SpellCap Word that should start with a capital. |spell| Combined with the highlighting used otherwise.
|
||||||
|
SpellCap = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.warning },
|
||||||
|
-- SpellLocal Word that is recognized by the spellchecker as one that is used in another region. |spell| Combined with the highlighting used otherwise.
|
||||||
|
SpellLocal = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.warning },
|
||||||
|
-- SpellRare Word that is recognized by the spellchecker as one that is hardly ever used. |spell| Combined with the highlighting used otherwise.
|
||||||
|
SpellRare = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.warning },
|
||||||
|
-- StatusLine Status line of current window.
|
||||||
|
StatusLine = { fg = theme.ui.fg_dim, bg = theme.ui.bg_m3 },
|
||||||
|
-- StatusLineNC Status lines of not-current windows. Note: If this is equal to "StatusLine", Vim will use "^^^" in the status line of the current window.
|
||||||
|
StatusLineNC = { fg = theme.ui.nontext, bg = theme.ui.bg_m3 },
|
||||||
|
-- TabLine Tab pages line, not active tab page label.
|
||||||
|
TabLine = { bg = theme.ui.bg_m3, fg = theme.ui.special },
|
||||||
|
-- TabLineFill Tab pages line, where there are no labels.
|
||||||
|
TabLineFill = { bg = theme.ui.bg },
|
||||||
|
-- TabLineSel Tab pages line, active tab page label.
|
||||||
|
TabLineSel = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1 },
|
||||||
|
-- Title Titles for output from ":set all", ":autocmd" etc.
|
||||||
|
Title = { fg = theme.syn.fun, bold = true },
|
||||||
|
-- Visual Visual mode selection.
|
||||||
|
Visual = { bg = theme.ui.bg_visual },
|
||||||
|
-- VisualNOS Visual mode selection when vim is "Not Owning the Selection".
|
||||||
|
VisualNOS = { link = "Visual" },
|
||||||
|
-- WarningMsg Warning messages.
|
||||||
|
WarningMsg = { fg = theme.diag.warning },
|
||||||
|
-- Whitespace "nbsp", "space", "tab", "multispace", "lead" and "trail" in 'listchars'.
|
||||||
|
Whitespace = { fg = theme.ui.whitespace },
|
||||||
|
-- WildMenu Current match in 'wildmenu' completion.
|
||||||
|
WildMenu = { link = "Pmenu" },
|
||||||
|
-- WinBar Window bar of current window.
|
||||||
|
WinBar = { fg = theme.ui.fg_dim, bg = "NONE" },
|
||||||
|
-- WinBarNC Window bar of not-current windows.
|
||||||
|
WinBarNC = { fg = theme.ui.fg_dim, bg = config.dimInactive and theme.ui.bg_dim or "NONE" },
|
||||||
|
|
||||||
|
-- SignColumnSB = { link = "SignColumn" },
|
||||||
|
-- NormalSB = { link = "Normal" },
|
||||||
|
|
||||||
|
debugPC = { bg = theme.diff.delete },
|
||||||
|
debugBreakpoint = { fg = theme.syn.special1, bg = theme.ui.bg_gutter },
|
||||||
|
|
||||||
|
LspReferenceText = { bg = theme.ui.bg_p2 },
|
||||||
|
LspReferenceRead = { link = "LspReferenceText" },
|
||||||
|
LspReferenceWrite = { bg = theme.ui.bg_p2, underline = true },
|
||||||
|
-- LspInlayHint = { link = "NonText"},
|
||||||
|
|
||||||
|
DiagnosticError = { fg = theme.diag.error },
|
||||||
|
DiagnosticWarn = { fg = theme.diag.warning },
|
||||||
|
DiagnosticInfo = { fg = theme.diag.info },
|
||||||
|
DiagnosticHint = { fg = theme.diag.hint },
|
||||||
|
DiagnosticOk = { fg = theme.diag.ok },
|
||||||
|
|
||||||
|
DiagnosticFloatingError = { fg = theme.diag.error },
|
||||||
|
DiagnosticFloatingWarn = { fg = theme.diag.warning },
|
||||||
|
DiagnosticFloatingInfo = { fg = theme.diag.info },
|
||||||
|
DiagnosticFloatingHint = { fg = theme.diag.hint },
|
||||||
|
DiagnosticFloatingOk = { fg = theme.diag.ok },
|
||||||
|
|
||||||
|
DiagnosticSignError = { fg = theme.diag.error, bg = theme.ui.bg_gutter },
|
||||||
|
DiagnosticSignWarn = { fg = theme.diag.warning, bg = theme.ui.bg_gutter },
|
||||||
|
DiagnosticSignInfo = { fg = theme.diag.info, bg = theme.ui.bg_gutter },
|
||||||
|
DiagnosticSignHint = { fg = theme.diag.hint, bg = theme.ui.bg_gutter },
|
||||||
|
|
||||||
|
DiagnosticVirtualTextError = { link = "DiagnosticError" },
|
||||||
|
DiagnosticVirtualTextWarn = { link = "DiagnosticWarn" },
|
||||||
|
DiagnosticVirtualTextInfo = { link = "DiagnosticInfo" },
|
||||||
|
DiagnosticVirtualTextHint = { link = "DiagnosticHint" },
|
||||||
|
|
||||||
|
DiagnosticUnderlineError = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.error },
|
||||||
|
DiagnosticUnderlineWarn = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.warning },
|
||||||
|
DiagnosticUnderlineInfo = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.info },
|
||||||
|
DiagnosticUnderlineHint = { undercurl = config.undercurl, underline = not config.undercurl, sp = theme.diag.hint },
|
||||||
|
|
||||||
|
LspSignatureActiveParameter = { fg = theme.diag.warning },
|
||||||
|
LspCodeLens = { fg = theme.syn.comment },
|
||||||
|
|
||||||
|
-- vcs
|
||||||
|
diffAdded = { fg = theme.vcs.added },
|
||||||
|
diffRemoved = { fg = theme.vcs.removed },
|
||||||
|
diffDeleted = { fg = theme.vcs.removed },
|
||||||
|
diffChanged = { fg = theme.vcs.changed },
|
||||||
|
diffOldFile = { fg = theme.vcs.removed },
|
||||||
|
diffNewFile = { fg = theme.vcs.added },
|
||||||
|
-- diffFile = { fg = c.steelGray },
|
||||||
|
-- diffLine = { fg = c.steelGray },
|
||||||
|
-- diffIndexLine = { link = 'Identifier' },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
---@param highlights table
|
||||||
|
---@param termcolors table
|
||||||
|
function M.highlight(highlights, termcolors)
|
||||||
|
for hl, spec in pairs(highlights) do
|
||||||
|
vim.api.nvim_set_hl(0, hl, spec)
|
||||||
|
end
|
||||||
|
for i, tcolor in ipairs(termcolors) do
|
||||||
|
vim.g["terminal_color_" .. i - 1] = tcolor
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param colors KansoColors
|
||||||
|
---@param config? KansoConfig
|
||||||
|
function M.setup(colors, config)
|
||||||
|
config = config or require("kanso").config
|
||||||
|
|
||||||
|
local highlights = {}
|
||||||
|
for _, highlight in ipairs({ "editor", "syntax", "treesitter", "lsp", "plugins" }) do
|
||||||
|
local mod = require("kanso.highlights." .. highlight)
|
||||||
|
for hl, spec in pairs(mod.setup(colors, config)) do
|
||||||
|
highlights[hl] = spec
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for hl, spec in pairs(config.overrides(colors)) do
|
||||||
|
if highlights[hl] and next(spec) then
|
||||||
|
highlights[hl].link = nil
|
||||||
|
end
|
||||||
|
highlights[hl] = vim.tbl_extend("force", highlights[hl] or {}, spec)
|
||||||
|
end
|
||||||
|
|
||||||
|
return highlights
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
local M = {}
|
||||||
|
---@param colors KansoColors
|
||||||
|
---@param config? KansoConfig
|
||||||
|
function M.setup(colors, config)
|
||||||
|
config = config or require("kanso").config
|
||||||
|
local theme = colors.theme
|
||||||
|
return {
|
||||||
|
-- ["@lsp.type.class"] = { link = "Structure" },
|
||||||
|
-- ["@lsp.type.decorator"] = { link = "Function" },
|
||||||
|
-- ["@lsp.type.enum"] = { link = "Structure" },
|
||||||
|
-- ["@lsp.type.enumMember"] = { link = "Constant" },
|
||||||
|
-- ["@lsp.type.function"] = { link = "Function" },
|
||||||
|
-- ["@lsp.type.interface"] = { link = "Structure" },
|
||||||
|
["@lsp.type.macro"] = { link = "Macro" },
|
||||||
|
["@lsp.type.method"] = { link = "@function.method" }, -- Function
|
||||||
|
["@lsp.type.namespace"] = { link = "@module" }, -- Structure
|
||||||
|
["@lsp.type.parameter"] = { link = "@variable.parameter" }, -- Identifier
|
||||||
|
-- ["@lsp.type.property"] = { link = "Identifier" },
|
||||||
|
-- ["@lsp.type.struct"] = { link = "Structure" },
|
||||||
|
-- ["@lsp.type.type"] = { link = "Type" },
|
||||||
|
-- ["@lsp.type.typeParameter"] = { link = "TypeDef" },
|
||||||
|
["@lsp.type.variable"] = { fg = "none" }, -- Identifier
|
||||||
|
["@lsp.type.comment"] = { link = "Comment" }, -- Comment
|
||||||
|
|
||||||
|
["@lsp.type.const"] = { link = "Constant" },
|
||||||
|
["@lsp.type.comparison"] = { link = "Operator" },
|
||||||
|
["@lsp.type.bitwise"] = { link = "Operator" },
|
||||||
|
["@lsp.type.punctuation"] = { link = "Delimiter" },
|
||||||
|
|
||||||
|
["@lsp.type.selfParameter"] = { link = "@variable.builtin" },
|
||||||
|
-- ["@lsp.type.builtinConstant"] = { link = "@constant.builtin" },
|
||||||
|
["@lsp.type.builtinConstant"] = { link = "@constant.builtin" },
|
||||||
|
["@lsp.type.magicFunction"] = { link = "@function.builtin" },
|
||||||
|
|
||||||
|
["@lsp.mod.readonly"] = { link = "Constant" },
|
||||||
|
["@lsp.mod.typeHint"] = { link = "Type" },
|
||||||
|
-- ["@lsp.mod.defaultLibrary"] = { link = "Special" },
|
||||||
|
-- ["@lsp.mod.builtin"] = { link = "Special" },
|
||||||
|
|
||||||
|
["@lsp.typemod.operator.controlFlow"] = { link = "@keyword.exception" }, -- rust ? operator
|
||||||
|
["@lsp.type.lifetime"] = { link = "Operator" },
|
||||||
|
["@lsp.typemod.keyword.documentation"] = { link = "Special" },
|
||||||
|
["@lsp.type.decorator.rust"] = { link = "PreProc" },
|
||||||
|
|
||||||
|
["@lsp.typemod.variable.global"] = { link = "Constant" },
|
||||||
|
["@lsp.typemod.variable.static"] = { link = "Constant" },
|
||||||
|
["@lsp.typemod.variable.defaultLibrary"] = { link = "Special" },
|
||||||
|
|
||||||
|
["@lsp.typemod.function.builtin"] = { link = "@function.builtin" },
|
||||||
|
["@lsp.typemod.function.defaultLibrary"] = { link = "@function.builtin" },
|
||||||
|
["@lsp.typemod.method.defaultLibrary"] = { link = "@function.builtin" },
|
||||||
|
|
||||||
|
["@lsp.typemod.variable.injected"] = { link = "@variable" },
|
||||||
|
|
||||||
|
["@lsp.typemod.function.readonly"] = { fg = theme.syn.fun, bold = true },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
|
--vim: fdm=marker
|
||||||
@@ -0,0 +1,540 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
---@param colors KansoColors
|
||||||
|
---@param config? KansoConfig
|
||||||
|
function M.setup(colors, config)
|
||||||
|
config = config or require("kanso").config
|
||||||
|
local theme = colors.theme
|
||||||
|
return {
|
||||||
|
-- Neovcs
|
||||||
|
-- NeovcsBranch = {},
|
||||||
|
-- NeovcsRemote = {},
|
||||||
|
-- NeovcsDiffDelete = { fg = theme.vcs.removed, bg = theme.diff.delete },
|
||||||
|
-- NeovcsDiffAdd = { fg = theme.vcs.added, bg = theme.diff.add },
|
||||||
|
-- NeovcsHunkHeader = { fg = theme.syn.identifier },
|
||||||
|
-- NeovcsDiffContextHighlight = { bg = theme.diff.change },
|
||||||
|
|
||||||
|
-- vcsSigns
|
||||||
|
-- vcsSignsAdd = { link = "diffAdded" },
|
||||||
|
-- vcsSignsChange = { link = "diffChanged" },
|
||||||
|
-- vcsSignsDelete = { link = "diffDeleted" },
|
||||||
|
-- vcsSignsDeleteLn = { bg = theme.diff.delete },
|
||||||
|
|
||||||
|
-- Gitsigns
|
||||||
|
GitSignsAdd = { fg = theme.vcs.added, bg = theme.ui.bg_gutter },
|
||||||
|
GitSignsChange = { fg = theme.vcs.changed, bg = theme.ui.bg_gutter },
|
||||||
|
GitSignsDelete = { fg = theme.vcs.removed, bg = theme.ui.bg_gutter },
|
||||||
|
-- Neogit
|
||||||
|
NeogitDiffContextHighlight = { bg = theme.diff.change }, --[[ guibg=#333333 guifg=#b2b2b2 ]]
|
||||||
|
NeogitHunkHeader = { fg = theme.syn.fun }, --[[ guifg=#cccccc guibg=#404040 ]]
|
||||||
|
NeogitHunkHeaderHighlight = { fg = theme.syn.constant, bg = theme.diff.change }, --[[ guifg=#cccccc guibg=#4d4d4d ]]
|
||||||
|
NeogitDiffAddHighlight = { bg = theme.diff.add },
|
||||||
|
NeogitDiffDeleteHighlight = { bg = theme.diff.delete },
|
||||||
|
-- TreeSitter Extensions
|
||||||
|
TreesitterContext = { link = "Folded" },
|
||||||
|
TreesitterContextLineNumber = { fg = theme.ui.special, bg = theme.ui.bg_gutter },
|
||||||
|
-- Telescope
|
||||||
|
TelescopeBorder = { fg = theme.ui.float.fg_border, bg = theme.ui.bg },
|
||||||
|
TelescopeTitle = { fg = theme.ui.special },
|
||||||
|
TelescopeSelection = { link = "CursorLine" },
|
||||||
|
TelescopeSelectionCaret = { link = "CursorLineNr" },
|
||||||
|
TelescopeResultsClass = { link = "Structure" },
|
||||||
|
TelescopeResultsStruct = { link = "Structure" },
|
||||||
|
TelescopeResultsField = { link = "@field" },
|
||||||
|
TelescopeResultsMethod = { link = "Function" },
|
||||||
|
TelescopeResultsVariable = { link = "@variable" },
|
||||||
|
-- NvimTree
|
||||||
|
NvimTreeNormal = { link = "Normal" },
|
||||||
|
NvimTreeNormalNC = { link = "NvimTreeNormal" },
|
||||||
|
NvimTreeRootFolder = { fg = theme.syn.identifier, bold = true },
|
||||||
|
NvimTreeGitDirty = { fg = theme.vcs.changed },
|
||||||
|
NvimTreeGitNew = { fg = theme.vcs.added },
|
||||||
|
NvimTreeGitDeleted = { fg = theme.vcs.removed },
|
||||||
|
NvimTreeGitStaged = { fg = theme.vcs.added },
|
||||||
|
NvimTreeSpecialFile = { fg = theme.syn.special1 },
|
||||||
|
-- NvimTreeIndentMarker = {},
|
||||||
|
NvimTreeImageFile = { fg = theme.syn.special2 },
|
||||||
|
NvimTreeSymlink = { link = "Type" },
|
||||||
|
NvimTreeFolderName = { link = "Directory" },
|
||||||
|
NvimTreeExecFile = { fg = theme.syn.string, bold = true },
|
||||||
|
NvimTreeOpenedFile = { fg = theme.syn.special1, italic = true },
|
||||||
|
NvimTreeWinSeparator = { link = "WinSeparator" },
|
||||||
|
NvimTreeWindowPicker = { bg = theme.ui.bg_m1, fg = theme.syn.special1, bold = true },
|
||||||
|
-- NeoTree
|
||||||
|
NeoTreeTabInactive = { link = "TabLine" },
|
||||||
|
NeoTreeTabActive = { link = "TabLineSel" },
|
||||||
|
NeoTreeTabSeparatorInactive = { link = "NeoTreeTabInactive" },
|
||||||
|
NeoTreeTabSeparatorActive = { link = "NeoTreeTabActive" },
|
||||||
|
NeoTreeRootName = { fg = theme.syn.identifier, bold = true },
|
||||||
|
NeoTreeModified = { link = "String" },
|
||||||
|
NeoTreeGitModified = { fg = theme.vcs.changed },
|
||||||
|
NeoTreeGitAdded = { fg = theme.vcs.added },
|
||||||
|
NeoTreeGitDeleted = { fg = theme.vcs.removed },
|
||||||
|
NeoTreeGitStaged = { fg = theme.vcs.added },
|
||||||
|
NeoTreeGitConflict = { fg = theme.diag.error },
|
||||||
|
NeoTreeGitUntracked = { link = "NeoTreeGitModified", default = true },
|
||||||
|
NeoTreeGitUnstaged = { link = "NeoTreeGitModified", default = true },
|
||||||
|
NeoTreeIndentMarker = { link = "NonText" },
|
||||||
|
-- WindowPicker
|
||||||
|
-- NvimWindowSwitch = { bg = theme.ui.bg_m3, fg = theme.diag.warning },
|
||||||
|
-- NvimWindowSwitchNC = { link = "NvimWindowSwitch" },
|
||||||
|
-- Dashboard
|
||||||
|
DashboardShortCut = { fg = theme.syn.special1 },
|
||||||
|
DashboardHeader = { fg = theme.vcs.removed },
|
||||||
|
DashboardCenter = { fg = theme.syn.identifier },
|
||||||
|
DashboardFooter = { fg = theme.syn.comment },
|
||||||
|
DashboardDesc = { fg = theme.syn.identifier },
|
||||||
|
DashboardKey = { fg = theme.syn.special1 },
|
||||||
|
DashboardIcon = { fg = theme.ui.special },
|
||||||
|
-- Notify
|
||||||
|
NotifyBackground = { bg = theme.ui.bg },
|
||||||
|
NotifyERRORBorder = { link = "DiagnosticError" },
|
||||||
|
NotifyWARNBorder = { link = "DiagnosticWarn" },
|
||||||
|
NotifyINFOBorder = { link = "DiagnosticInfo" },
|
||||||
|
NotifyHINTBorder = { link = "DiagnosticHint" },
|
||||||
|
NotifyDEBUGBorder = { link = "Debug" },
|
||||||
|
NotifyTRACEBorder = { link = "Comment" },
|
||||||
|
NotifyERRORIcon = { link = "DiagnosticError" },
|
||||||
|
NotifyWARNIcon = { link = "DiagnosticWarn" },
|
||||||
|
NotifyINFOIcon = { link = "DiagnosticInfo" },
|
||||||
|
NotifyHINTIcon = { link = "DiagnosticHint" },
|
||||||
|
NotifyDEBUGIcon = { link = "Debug" },
|
||||||
|
NotifyTRACEIcon = { link = "Comment" },
|
||||||
|
NotifyERRORTitle = { link = "DiagnosticError" },
|
||||||
|
NotifyWARNTitle = { link = "DiagnosticWarn" },
|
||||||
|
NotifyINFOTitle = { link = "DiagnosticInfo" },
|
||||||
|
NotifyHINTTitle = { link = "DiagnosticHint" },
|
||||||
|
NotifyDEBUGTitle = { link = "Debug" },
|
||||||
|
NotifyTRACETitle = { link = "Comment" },
|
||||||
|
-- Dap-UI
|
||||||
|
-- DapUIVariable = { link = "Normal" },
|
||||||
|
DapUIScope = { link = "Special" }, -- guifg=#00F1F5"
|
||||||
|
DapUIType = { link = "Type" }, -- guifg=#D484FF"
|
||||||
|
-- DapUIValue = { link = "Normal" },
|
||||||
|
DapUIModifiedValue = { fg = theme.syn.special1, bold = true }, -- guifg=#00F1F5 gui=bold"
|
||||||
|
DapUIDecoration = { fg = theme.ui.float.fg_border }, -- guifg=#00F1F5"
|
||||||
|
DapUIThread = { fg = theme.syn.identifier }, --guifg=#A9FF68"
|
||||||
|
DapUIStoppedThread = { fg = theme.syn.special1 }, --guifg=#00f1f5"
|
||||||
|
-- DapUIFrameName = { link = "Normal"},
|
||||||
|
DapUISource = { fg = theme.syn.special2 }, -- guifg=#D484FF"
|
||||||
|
DapUILineNumber = { fg = theme.syn.special1 }, -- guifg=#00f1f5"
|
||||||
|
DapUIFloatBorder = { fg = theme.ui.float.fg_border }, -- guifg=#00F1F5"
|
||||||
|
DapUIWatchesEmpty = { fg = theme.diag.error }, -- guifg=#F70067"
|
||||||
|
DapUIWatchesValue = { fg = theme.syn.identifier }, -- guifg=#A9FF68"
|
||||||
|
DapUIWatchesError = { fg = theme.diag.error }, --guifg=#F70067"
|
||||||
|
DapUIBreakpointsPath = { link = "Directory" }, --guifg=#00F1F5"
|
||||||
|
DapUIBreakpointsInfo = { fg = theme.diag.info }, --guifg=#A9FF68"
|
||||||
|
DapUIBreakpointsCurrentLine = { fg = theme.syn.identifier, bold = true }, --guifg=#A9FF68 gui=bold"
|
||||||
|
-- DapUIBreakpointsLine = {}, -- DapUILineNumber"
|
||||||
|
DapUIBreakpointsDisabledLine = { link = "Comment" }, --guifg=#424242"
|
||||||
|
-- DapUICurrentFrameName = {}, -- DapUIBreakpointsCurrentLine"
|
||||||
|
DapUIStepOver = { fg = theme.syn.special1 }, --guifg=#00f1f5"
|
||||||
|
DapUIStepInto = { fg = theme.syn.special1 }, --guifg=#00f1f5"
|
||||||
|
DapUIStepBack = { fg = theme.syn.special1 }, --guifg=#00f1f5"
|
||||||
|
DapUIStepOut = { fg = theme.syn.special1 }, --guifg=#00f1f5"
|
||||||
|
DapUIStop = { fg = theme.diag.error }, --guifg=#F70067"
|
||||||
|
DapUIPlayPause = { fg = theme.syn.string }, --guifg=#A9FF68"
|
||||||
|
DapUIRestart = { fg = theme.syn.string }, --guifg=#A9FF68"
|
||||||
|
DapUIUnavailable = { fg = theme.syn.comment }, --guifg=#424242"
|
||||||
|
-- Floaterm
|
||||||
|
FloatermBorder = { fg = theme.ui.float.fg_border, bg = theme.ui.bg },
|
||||||
|
-- NeoVim = {},
|
||||||
|
healthError = { fg = theme.diag.error },
|
||||||
|
healthSuccess = { fg = theme.diag.ok },
|
||||||
|
healthWarning = { fg = theme.diag.warning },
|
||||||
|
-- Cmp
|
||||||
|
CmpDocumentation = { link = "NormalFloat" },
|
||||||
|
CmpDocumentationBorder = { link = "FloatBorder" },
|
||||||
|
CmpCompletion = { link = "Pmenu" },
|
||||||
|
CmpCompletionSel = { link = "PmenuSel" },
|
||||||
|
CmpCompletionBorder = { fg = theme.ui.bg_search, bg = theme.ui.pmenu.bg },
|
||||||
|
CmpCompletionThumb = { link = "PmenuThumb" },
|
||||||
|
CmpCompletionSbar = { link = "PmenuSbar" },
|
||||||
|
CmpItemAbbr = { fg = theme.ui.pmenu.fg },
|
||||||
|
CmpItemAbbrDeprecated = { fg = theme.syn.comment, strikethrough = true },
|
||||||
|
CmpItemAbbrMatch = { fg = theme.syn.fun },
|
||||||
|
CmpItemAbbrMatchFuzzy = { link = "CmpItemAbbrMatch" },
|
||||||
|
CmpItemKindDefault = { fg = theme.ui.fg_dim },
|
||||||
|
CmpItemMenu = { fg = theme.ui.fg_dim },
|
||||||
|
CmpGhostText = { fg = theme.syn.comment },
|
||||||
|
|
||||||
|
CmpItemKindText = { fg = theme.ui.fg },
|
||||||
|
CmpItemKindMethod = { link = "@function.method" },
|
||||||
|
CmpItemKindFunction = { link = "Function" },
|
||||||
|
CmpItemKindConstructor = { link = "@constructor" },
|
||||||
|
CmpItemKindField = { link = "@variable.member" },
|
||||||
|
CmpItemKindVariable = { fg = theme.ui.fg_dim },
|
||||||
|
CmpItemKindClass = { link = "Type" },
|
||||||
|
CmpItemKindInterface = { link = "Type" },
|
||||||
|
CmpItemKindModule = { link = "@module" },
|
||||||
|
CmpItemKindProperty = { link = "@property" },
|
||||||
|
CmpItemKindUnit = { link = "Number" },
|
||||||
|
CmpItemKindValue = { link = "String" },
|
||||||
|
CmpItemKindEnum = { link = "Type" },
|
||||||
|
CmpItemKindKeyword = { link = "Keyword" },
|
||||||
|
CmpItemKindSnippet = { link = "Special" },
|
||||||
|
CmpItemKindColor = { link = "Special" },
|
||||||
|
CmpItemKindFile = { link = "Directory" },
|
||||||
|
CmpItemKindReference = { link = "Special" },
|
||||||
|
CmpItemKindFolder = { link = "Directory" },
|
||||||
|
CmpItemKindEnumMember = { link = "Constant" },
|
||||||
|
CmpItemKindConstant = { link = "Constant" },
|
||||||
|
CmpItemKindStruct = { link = "Type" },
|
||||||
|
CmpItemKindEvent = { link = "Type" },
|
||||||
|
CmpItemKindOperator = { link = "Operator" },
|
||||||
|
CmpItemKindTypeParameter = { link = "Type" },
|
||||||
|
CmpItemKindCopilot = { link = "String" },
|
||||||
|
|
||||||
|
-- blink.cmp
|
||||||
|
BlinkCmpMenu = { link = "Pmenu" },
|
||||||
|
BlinkCmpMenuSelection = { link = "PmenuSel" },
|
||||||
|
BlinkCmpMenuBorder = { fg = theme.ui.bg_search, bg = theme.ui.pmenu.bg },
|
||||||
|
BlinkCmpScrollBarThumb = { link = "PmenuThumb" },
|
||||||
|
BlinkCmpScrollBarGutter = { link = "PmenuSbar" },
|
||||||
|
BlinkCmpLabel = { fg = theme.ui.pmenu.fg },
|
||||||
|
BlinkCmpLabelMatch = { fg = theme.syn.fun },
|
||||||
|
BlinkCmpLabelDetails = { fg = theme.syn.comment },
|
||||||
|
BlinkCmpLabelDeprecated = { fg = theme.syn.comment, strikethrough = true },
|
||||||
|
BlinkCmpGhostText = { fg = theme.syn.comment },
|
||||||
|
BlinkCmpDoc = { link = "NormalFloat" },
|
||||||
|
BlinkCmpDocBorder = { link = "FloatBorder" },
|
||||||
|
BlinkCmpDocCursorLine = { link = "Visual"},
|
||||||
|
BlinkCmpSignatureHelp = { link = "NormalFloat" },
|
||||||
|
BlinkCmpSignatureHelpBorder = { link = "FloatBorder" },
|
||||||
|
BlinkCmpSignatureHelpActiveParameter = { link = "LspSignatureActiveParameter"},
|
||||||
|
|
||||||
|
BlinkCmpKind = { fg = theme.ui.fg_dim },
|
||||||
|
BlinkCmpKindText = { fg = theme.ui.fg },
|
||||||
|
BlinkCmpKindMethod = { link = "@function.method" },
|
||||||
|
BlinkCmpKindFunction = { link = "Function" },
|
||||||
|
BlinkCmpKindConstructor = { link = "@constructor" },
|
||||||
|
BlinkCmpKindField = { link = "@variable.member" },
|
||||||
|
BlinkCmpKindVariable = { fg = theme.ui.fg_dim },
|
||||||
|
BlinkCmpKindClass = { link = "Type" },
|
||||||
|
BlinkCmpKindInterface = { link = "Type" },
|
||||||
|
BlinkCmpKindModule = { link = "@module" },
|
||||||
|
BlinkCmpKindProperty = { link = "@property" },
|
||||||
|
BlinkCmpKindUnit = { link = "Number" },
|
||||||
|
BlinkCmpKindValue = { link = "String" },
|
||||||
|
BlinkCmpKindEnum = { link = "Type" },
|
||||||
|
BlinkCmpKindKeyword = { link = "Keyword" },
|
||||||
|
BlinkCmpKindSnippet = { link = "Special" },
|
||||||
|
BlinkCmpKindColor = { link = "Special" },
|
||||||
|
BlinkCmpKindFile = { link = "Directory" },
|
||||||
|
BlinkCmpKindReference = { link = "Special" },
|
||||||
|
BlinkCmpKindFolder = { link = "Directory" },
|
||||||
|
BlinkCmpKindEnumMember = { link = "Constant" },
|
||||||
|
BlinkCmpKindConstant = { link = "Constant" },
|
||||||
|
BlinkCmpKindStruct = { link = "Type" },
|
||||||
|
BlinkCmpKindEvent = { link = "Type" },
|
||||||
|
BlinkCmpKindOperator = { link = "Operator" },
|
||||||
|
BlinkCmpKindTypeParameter = { link = "Type" },
|
||||||
|
BlinkCmpKindCopilot = { link = "String" },
|
||||||
|
|
||||||
|
-- IndentBlankline
|
||||||
|
IndentBlanklineChar = { fg = theme.ui.whitespace },
|
||||||
|
IndentBlanklineSpaceChar = { fg = theme.ui.whitespace },
|
||||||
|
IndentBlanklineSpaceCharBlankline = { fg = theme.ui.whitespace },
|
||||||
|
IndentBlanklineContextChar = { fg = theme.ui.special },
|
||||||
|
IndentBlanklineContextStart = { sp = theme.ui.special, underline = true },
|
||||||
|
IblIndent = { fg = theme.ui.whitespace },
|
||||||
|
IblWhitespace = { fg = theme.ui.whitespace },
|
||||||
|
IblScope = { fg = theme.ui.special },
|
||||||
|
-- Lazy
|
||||||
|
LazyProgressTodo = { fg = theme.ui.nontext },
|
||||||
|
|
||||||
|
-- Trouble
|
||||||
|
TroubleIndent = { fg = theme.ui.whitespace },
|
||||||
|
TroublePos = { fg = theme.ui.special },
|
||||||
|
|
||||||
|
-- Nvim-Navic
|
||||||
|
NavicIconsFile = { link = "Directory" },
|
||||||
|
NavicIconsModule = { link = "@module" },
|
||||||
|
NavicIconsNamespace = { link = "@module" },
|
||||||
|
NavicIconsPackage = { link = "@module" },
|
||||||
|
NavicIconsClass = { link = "Type" },
|
||||||
|
NavicIconsMethod = { link = "@function.method" },
|
||||||
|
NavicIconsProperty = { link = "@property" },
|
||||||
|
NavicIconsField = { link = "@variable.member" },
|
||||||
|
NavicIconsConstructor = { link = "@constructor" },
|
||||||
|
NavicIconsEnum = { link = "Type" },
|
||||||
|
NavicIconsInterface = { link = "Type" },
|
||||||
|
NavicIconsFunction = { link = "Function" },
|
||||||
|
NavicIconsVariable = { link = "@variable" },
|
||||||
|
NavicIconsConstant = { link = "Constant" },
|
||||||
|
NavicIconsString = { link = "String" },
|
||||||
|
NavicIconsNumber = { link = "Number" },
|
||||||
|
NavicIconsBoolean = { link = "Boolean" },
|
||||||
|
NavicIconsArray = { link = "Type" },
|
||||||
|
NavicIconsObject = { link = "Type" },
|
||||||
|
NavicIconsKey = { link = "Identifier" },
|
||||||
|
NavicIconsNull = { link = "Type" },
|
||||||
|
NavicIconsEnumMember = { link = "Constant" },
|
||||||
|
NavicIconsStruct = { link = "Structure" },
|
||||||
|
NavicIconsEvent = { link = "Structure" },
|
||||||
|
NavicIconsOperator = { link = "Operator" },
|
||||||
|
NavicIconsTypeParameter = { link = "Type" },
|
||||||
|
NavicText = { fg = theme.ui.fg },
|
||||||
|
NavicSeparator = { fg = theme.ui.fg },
|
||||||
|
|
||||||
|
-- Aerial icons
|
||||||
|
AerialFileIcon = { link = "Directory" },
|
||||||
|
AerialModuleIcon = { link = "@module" },
|
||||||
|
AerialNamespaceIcon = { link = "@module" },
|
||||||
|
AerialPackageIcon = { link = "@module" },
|
||||||
|
AerialClassIcon = { link = "Type" },
|
||||||
|
AerialMethodIcon = { link = "@function.method" },
|
||||||
|
AerialPropertyIcon = { link = "@property" },
|
||||||
|
AerialFieldIcon = { link = "@variable.member" },
|
||||||
|
AerialConstructorIcon = { link = "@constructor" },
|
||||||
|
AerialEnumIcon = { link = "Type" },
|
||||||
|
AerialInterfaceIcon = { link = "Type" },
|
||||||
|
AerialFunctionIcon = { link = "Function" },
|
||||||
|
AerialVariableIcon = { link = "@variable" },
|
||||||
|
AerialConstantIcon = { link = "Constant" },
|
||||||
|
AerialStringIcon = { link = "String" },
|
||||||
|
AerialNumberIcon = { link = "Number" },
|
||||||
|
AerialBooleanIcon = { link = "Boolean" },
|
||||||
|
AerialArrayIcon = { link = "Type" },
|
||||||
|
AerialObjectIcon = { link = "Type" },
|
||||||
|
AerialKeyIcon = { link = "Identifier" },
|
||||||
|
AerialNullIcon = { link = "Type" },
|
||||||
|
AerialEnumMemberIcon = { link = "Constant" },
|
||||||
|
AerialStructIcon = { link = "Structure" },
|
||||||
|
AerialEventIcon = { link = "Structure" },
|
||||||
|
AerialOperatorIcon = { link = "Operator" },
|
||||||
|
AerialTypeParameterIcon = { link = "Type" },
|
||||||
|
|
||||||
|
-- Mini
|
||||||
|
MiniAnimateCursor = { reverse = true, nocombine = true },
|
||||||
|
MiniAnimateNormalFloat = { link = "NormalFloat" },
|
||||||
|
|
||||||
|
MiniClueBorder = { link = "FloatBorder" },
|
||||||
|
MiniClueDescGroup = { link = "DiagnosticFloatingWarn" },
|
||||||
|
MiniClueDescSingle = { link = "NormalFloat" },
|
||||||
|
MiniClueNextKey = { link = "DiagnosticFloatingHint" },
|
||||||
|
MiniClueNextKeyWithPostkeys = { link = "DiagnosticFloatingError" },
|
||||||
|
MiniClueSeparator = { link = "DiagnosticFloatingInfo" },
|
||||||
|
MiniClueTitle = { link = "FloatTitle" },
|
||||||
|
|
||||||
|
MiniCompletionActiveParameter = { underline = true },
|
||||||
|
|
||||||
|
MiniCursorword = { underline = true },
|
||||||
|
MiniCursorwordCurrent = { underline = true },
|
||||||
|
|
||||||
|
MiniDepsChangeAdded = { link = "diffAdded" },
|
||||||
|
MiniDepsChangeRemoved = { link = "diffRemoved" },
|
||||||
|
MiniDepsHint = { fg = theme.diag.hint },
|
||||||
|
MiniDepsInfo = { fg = theme.diag.info },
|
||||||
|
MiniDepsMsgBreaking = { fg = theme.diag.warning },
|
||||||
|
MiniDepsPlaceholder = { link = "Comment" },
|
||||||
|
MiniDepsTitle = { link = "Title" },
|
||||||
|
MiniDepsTitleError = { link = "DiffDelete" },
|
||||||
|
MiniDepsTitleSame = { link = "DiffText" },
|
||||||
|
MiniDepsTitleUpdate = { link = "DiffAdd" },
|
||||||
|
|
||||||
|
MiniDiffSignAdd = { fg = theme.vcs.added, bg = theme.ui.bg_gutter },
|
||||||
|
MiniDiffSignChange = { fg = theme.vcs.changed, bg = theme.ui.bg_gutter },
|
||||||
|
MiniDiffSignDelete = { fg = theme.vcs.removed, bg = theme.ui.bg_gutter },
|
||||||
|
MiniDiffOverAdd = { link = "DiffAdd" },
|
||||||
|
MiniDiffOverChange = { link = "DiffText" },
|
||||||
|
MiniDiffOverContext = { link = "DiffChange" },
|
||||||
|
MiniDiffOverDelete = { link = "DiffDelete" },
|
||||||
|
|
||||||
|
MiniFilesBorder = { link = "FloatBorder" },
|
||||||
|
MiniFilesBorderModified = { link = "DiagnosticFloatingWarn" },
|
||||||
|
MiniFilesCursorLine = { link = "CursorLine" },
|
||||||
|
MiniFilesDirectory = { link = "Directory" },
|
||||||
|
MiniFilesFile = { fg = theme.ui.fg },
|
||||||
|
MiniFilesNormal = { link = "NormalFloat" },
|
||||||
|
MiniFilesTitle = { fg = theme.ui.special, bg = theme.ui.float.bg_border, bold = true },
|
||||||
|
MiniFilesTitleFocused = { fg = theme.ui.fg, bg = theme.ui.float.bg_border, bold = true },
|
||||||
|
|
||||||
|
MiniHipatternsFixme = { fg = theme.ui.bg, bg = theme.diag.error, bold = true },
|
||||||
|
MiniHipatternsHack = { fg = theme.ui.bg, bg = theme.diag.warning, bold = true },
|
||||||
|
MiniHipatternsNote = { fg = theme.ui.bg, bg = theme.diag.info, bold = true },
|
||||||
|
MiniHipatternsTodo = { fg = theme.ui.bg, bg = theme.diag.hint, bold = true },
|
||||||
|
|
||||||
|
MiniIconsAzure = { fg = theme.syn.special1 },
|
||||||
|
MiniIconsBlue = { fg = theme.syn.fun },
|
||||||
|
MiniIconsCyan = { fg = theme.syn.type },
|
||||||
|
MiniIconsGreen = { fg = theme.syn.string },
|
||||||
|
MiniIconsGrey = { fg = theme.ui.fg },
|
||||||
|
MiniIconsOrange = { fg = theme.syn.constant },
|
||||||
|
MiniIconsPurple = { fg = theme.syn.keyword },
|
||||||
|
MiniIconsRed = { fg = theme.syn.special3 },
|
||||||
|
MiniIconsYellow = { fg = theme.syn.identifier },
|
||||||
|
|
||||||
|
MiniIndentscopeSymbol = { fg = theme.syn.special1 },
|
||||||
|
MiniIndentscopePrefix = { nocombine = true }, -- Make it invisible
|
||||||
|
|
||||||
|
MiniJump = { link = "SpellRare" },
|
||||||
|
|
||||||
|
MiniJump2dDim = { link = "Comment" },
|
||||||
|
MiniJump2dSpot = { fg = theme.syn.constant, bold = true, nocombine = true },
|
||||||
|
MiniJump2dSpotAhead = { fg = theme.diag.hint, bg = theme.ui.bg_dim, nocombine = true },
|
||||||
|
MiniJump2dSpotUnique = { fg = theme.syn.special1, bold = true, nocombine = true },
|
||||||
|
|
||||||
|
MiniMapNormal = { link = "NormalFloat" },
|
||||||
|
MiniMapSymbolCount = { link = "Special" },
|
||||||
|
MiniMapSymbolLine = { link = "Title" },
|
||||||
|
MiniMapSymbolView = { link = "Delimiter" },
|
||||||
|
|
||||||
|
MiniNotifyBorder = { link = "FloatBorder" },
|
||||||
|
MiniNotifyNormal = { link = "NormalFloat" },
|
||||||
|
MiniNotifyTitle = { link = "FloatTitle" },
|
||||||
|
|
||||||
|
MiniOperatorsExchangeFrom = { link = "IncSearch" },
|
||||||
|
|
||||||
|
MiniPickBorder = { link = "FloatBorder" },
|
||||||
|
MiniPickBorderBusy = { link = "DiagnosticFloatingWarn" },
|
||||||
|
MiniPickBorderText = { link = "FloatTitle" },
|
||||||
|
MiniPickIconDirectory = { link = "Directory" },
|
||||||
|
MiniPickIconFile = { link = "MiniPickNormal" },
|
||||||
|
MiniPickHeader = { link = "DiagnosticFloatingHint" },
|
||||||
|
MiniPickMatchCurrent = { link = "CursorLine" },
|
||||||
|
MiniPickMatchMarked = { link = "Visual" },
|
||||||
|
MiniPickMatchRanges = { link = "DiagnosticFloatingHint" },
|
||||||
|
MiniPickNormal = { link = "NormalFloat" },
|
||||||
|
MiniPickPreviewLine = { link = "CursorLine" },
|
||||||
|
MiniPickPreviewRegion = { link = "IncSearch" },
|
||||||
|
MiniPickPrompt = { fg = theme.syn.fun, bg = theme.ui.float.bg_border },
|
||||||
|
|
||||||
|
MiniStarterCurrent = { nocombine = true },
|
||||||
|
MiniStarterFooter = { fg = theme.syn.deprecated },
|
||||||
|
MiniStarterHeader = { link = "Title" },
|
||||||
|
MiniStarterInactive = { link = "Comment" },
|
||||||
|
MiniStarterItem = { link = "Normal" },
|
||||||
|
MiniStarterItemBullet = { link = "Delimiter" },
|
||||||
|
MiniStarterItemPrefix = { fg = theme.diag.warning },
|
||||||
|
MiniStarterSection = { fg = theme.diag.ok },
|
||||||
|
MiniStarterQuery = { fg = theme.diag.info },
|
||||||
|
|
||||||
|
MiniStatuslineDevinfo = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1 },
|
||||||
|
MiniStatuslineFileinfo = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1 },
|
||||||
|
MiniStatuslineFilename = { fg = theme.ui.fg_dim, bg = theme.ui.bg_dim },
|
||||||
|
MiniStatuslineInactive = { link = "StatusLineNC" },
|
||||||
|
MiniStatuslineModeCommand = { fg = theme.ui.bg, bg = theme.syn.operator, bold = true },
|
||||||
|
MiniStatuslineModeInsert = { fg = theme.ui.bg, bg = theme.diag.ok, bold = true },
|
||||||
|
MiniStatuslineModeNormal = { fg = theme.ui.bg_m3, bg = theme.syn.fun, bold = true },
|
||||||
|
MiniStatuslineModeOther = { fg = theme.ui.bg, bg = theme.syn.type, bold = true },
|
||||||
|
MiniStatuslineModeReplace = { fg = theme.ui.bg, bg = theme.syn.constant, bold = true },
|
||||||
|
MiniStatuslineModeVisual = { fg = theme.ui.bg, bg = theme.syn.keyword, bold = true },
|
||||||
|
|
||||||
|
MiniSurround = { link = "IncSearch" },
|
||||||
|
|
||||||
|
MiniTablineCurrent = { fg = theme.ui.fg_dim, bg = theme.ui.bg_p1, bold = true },
|
||||||
|
MiniTablineFill = { link = "TabLineFill" },
|
||||||
|
MiniTablineHidden = { fg = theme.ui.special, bg = theme.ui.bg_m3 },
|
||||||
|
MiniTablineModifiedCurrent = { fg = theme.ui.bg_p1, bg = theme.ui.fg_dim, bold = true },
|
||||||
|
MiniTablineModifiedHidden = { fg = theme.ui.bg_m3, bg = theme.ui.special },
|
||||||
|
MiniTablineModifiedVisible = { fg = theme.ui.bg_m3, bg = theme.ui.special, bold = true },
|
||||||
|
MiniTablineTabpagesection = { fg = theme.ui.fg, bg = theme.ui.bg_search, bold = true },
|
||||||
|
MiniTablineVisible = { fg = theme.ui.special, bg = theme.ui.bg_m3, bold = true },
|
||||||
|
|
||||||
|
MiniTestEmphasis = { bold = true },
|
||||||
|
MiniTestFail = { fg = theme.diag.error, bold = true },
|
||||||
|
MiniTestPass = { fg = theme.diag.ok, bold = true },
|
||||||
|
|
||||||
|
MiniTrailspace = { bg = theme.vcs.removed },
|
||||||
|
|
||||||
|
NeotestAdapterName = { fg = theme.syn.special3, },
|
||||||
|
NeotestDir = { fg = theme.syn.fun, },
|
||||||
|
NeotestExpandMarker = { fg = theme.syn.punct, bold = true, },
|
||||||
|
NeotestFailed = { fg = theme.diag.error },
|
||||||
|
NeotestFile = { fg = theme.syn.fun, },
|
||||||
|
NeotestFocused = { bold = true, underline = true, },
|
||||||
|
NeotestIndent = { fg = theme.ui.special, bold = true, },
|
||||||
|
NeotestMarked = { fg = theme.diag.warning, italic = true, },
|
||||||
|
NeotestNamespace = { fg = theme.syn.fun, },
|
||||||
|
NeotestPassed = { fg = theme.diag.ok },
|
||||||
|
NeotestRunning = { fg = theme.vcs.changed, },
|
||||||
|
NeotestWinSelect = { fg = theme.diag.hint },
|
||||||
|
NeotestSkipped = { fg = theme.syn.special1 },
|
||||||
|
NeotestTarget = { fg = theme.syn.special3 },
|
||||||
|
NeotestTest = { fg = theme.ui.float.fg },
|
||||||
|
NeotestUnknown = { fg = theme.syn.deprecated },
|
||||||
|
NeotestWatching = { fg = theme.vcs.changed, },
|
||||||
|
|
||||||
|
SnacksPicker = { bg = theme.ui.bg },
|
||||||
|
SnacksPickerTitle = { fg = theme.ui.fg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerBorder = { fg = theme.ui.bg },
|
||||||
|
SnacksPickerNormal = { fg = theme.ui.fg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerMatch = { fg = theme.ui.fg },
|
||||||
|
SnacksPickerCursor = { fg = theme.ui.bg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerPrompt = { fg = theme.ui.fg },
|
||||||
|
SnacksPickerDim = { fg = theme.ui.fg_dim },
|
||||||
|
SnacksInputIcon = { fg = theme.ui.fg, bg = theme.ui.bg },
|
||||||
|
SnacksIndent = { fg = theme.ui.bg_gutter, bg = theme.ui.bg },
|
||||||
|
SnacksIndentScope = { fg = theme.ui.bg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerInputBorder = { fg = theme.ui.bg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerInputTitle = { fg = theme.ui.bg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerBoxTitle = { fg = theme.ui.bg, bg = theme.ui.bg },
|
||||||
|
SnacksPickerSelected = { fg = theme.ui.bg },
|
||||||
|
SnacksPickerPickWinCurrent = { fg = theme.ui.fg, bg = theme.ui.bg, bold = true },
|
||||||
|
SnacksPickerPickWin = { fg = theme.ui.fg, bg = theme.ui.bg_search, bold = true },
|
||||||
|
|
||||||
|
BufferLineBackground = { fg = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineBuffer = { fg = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineBufferSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineBufferVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineCloseButton = { bg = theme.ui.none },
|
||||||
|
BufferLineCloseButtonSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineCloseButtonVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineDuplicate = { bg = theme.ui.none },
|
||||||
|
BufferLineDuplicateSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineDuplicateVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineError = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineErrorDiagnostic = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineErrorDiagnosticSelected = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineErrorDiagnosticVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineErrorSelected = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineErrorVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineFill = { bg = theme.ui.none },
|
||||||
|
BufferLineHint = { sp = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineHintDiagnostic = { sp = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineHintDiagnosticSelected = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineHintDiagnosticVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineHintSelected = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineHintVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineInfo = { sp = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineInfoDiagnostic = { sp = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineInfoDiagnosticSelected = { sp = theme.ui.none, bg = theme.ui.none },
|
||||||
|
BufferLineInfoDiagnosticVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineInfoSelected = { bg = theme.ui.none, sp = theme.ui.none },
|
||||||
|
BufferLineInfoVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineIndicatorSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineModified = { bg = theme.ui.none },
|
||||||
|
BufferLineModifiedSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineModifiedVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineNumbers = { bg = theme.ui.none },
|
||||||
|
BufferLineNumbersSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineNumbersVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineOffsetSeparator = { bg = theme.ui.none },
|
||||||
|
BufferLineSeparator = { bg = theme.ui.none },
|
||||||
|
BufferLineSeparatorSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineSeparatorVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineTab = { bg = theme.ui.none },
|
||||||
|
BufferLinePick = { bg = theme.ui.none },
|
||||||
|
BufferLinePickSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineDevIconLua = { bg = theme.ui.none },
|
||||||
|
BufferLineDevIconLuaSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineDevIconLuaVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineDevIconLuaInactive = { bg = theme.ui.none },
|
||||||
|
BufferLinePickVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineIndicatorVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineTabClose = { bg = theme.ui.none },
|
||||||
|
BufferLineTabSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineTabSeparator = { bg = theme.ui.none },
|
||||||
|
BufferLineTabSeparatorSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineTruncMarker = { bg = theme.ui.none },
|
||||||
|
BufferLineWarning = { bg = theme.ui.none },
|
||||||
|
BufferLineWarningDiagnostic = { bg = theme.ui.none },
|
||||||
|
BufferLineWarningDiagnosticSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineWarningDiagnosticVisible = { bg = theme.ui.none },
|
||||||
|
BufferLineWarningSelected = { bg = theme.ui.none },
|
||||||
|
BufferLineWarningVisible = { bg = theme.ui.none },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
-- local c = require("kanso.color")
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
---@param colors KansoColors
|
||||||
|
---@param config? KansoConfig
|
||||||
|
function M.setup(colors, config)
|
||||||
|
local theme = colors.theme
|
||||||
|
config = config or require("kanso").config
|
||||||
|
|
||||||
|
return {
|
||||||
|
-- *Comment any comment
|
||||||
|
Comment = vim.tbl_extend("force", { fg = theme.syn.comment }, config.commentStyle),
|
||||||
|
|
||||||
|
-- *Constant any constant
|
||||||
|
Constant = { fg = theme.syn.constant },
|
||||||
|
-- String a string constant: "this is a string"
|
||||||
|
String = { fg = theme.syn.string },
|
||||||
|
-- Character a character constant: 'c', '\n'
|
||||||
|
Character = { link = "String" },
|
||||||
|
-- Number a number constant: 234, 0xff
|
||||||
|
Number = { fg = theme.syn.number },
|
||||||
|
-- Boolean a boolean constant: TRUE, false
|
||||||
|
Boolean = { fg = theme.syn.constant },
|
||||||
|
-- Float a floating point constant: 2.3e10
|
||||||
|
Float = { link = "Number" },
|
||||||
|
|
||||||
|
-- *Identifier any variable name
|
||||||
|
Identifier = { fg = theme.syn.identifier },
|
||||||
|
-- Function function name (also: methods for classes)
|
||||||
|
Function = vim.tbl_extend("force", { fg = theme.syn.fun }, config.functionStyle),
|
||||||
|
|
||||||
|
-- *Statement any statement
|
||||||
|
Statement = vim.tbl_extend("force", { fg = theme.syn.statement }, config.statementStyle),
|
||||||
|
-- Conditional if, then, else, endif, switch, etc.
|
||||||
|
-- Repeat for, do, while, etc.
|
||||||
|
-- Label case, default, etc.
|
||||||
|
-- Operator "sizeof", "+", "*", etc.
|
||||||
|
Operator = { fg = theme.syn.operator },
|
||||||
|
-- Keyword any other keyword
|
||||||
|
Keyword = vim.tbl_extend("force", { fg = theme.syn.keyword }, config.keywordStyle),
|
||||||
|
-- Exception try, catch, throw
|
||||||
|
Exception = { fg = theme.syn.special2 },
|
||||||
|
|
||||||
|
-- *PreProc generic Preprocessor
|
||||||
|
PreProc = { fg = theme.syn.preproc },
|
||||||
|
-- Include preprocessor #include
|
||||||
|
-- Define preprocessor #define
|
||||||
|
-- Macro same as Define
|
||||||
|
-- PreCondit preprocessor #if, #else, #endif, etc.
|
||||||
|
|
||||||
|
-- *Type int, long, char, etc.
|
||||||
|
Type = vim.tbl_extend("force", { fg = theme.syn.type }, config.typeStyle),
|
||||||
|
-- StorageClass static, register, volatile, etc.
|
||||||
|
-- Structure struct, union, enum, etc.
|
||||||
|
-- Typedef A typedef
|
||||||
|
|
||||||
|
-- *Special any special symbol
|
||||||
|
Special = { fg = theme.syn.special1 },
|
||||||
|
-- SpecialChar special character in a constant
|
||||||
|
-- Tag you can use CTRL-] on this
|
||||||
|
-- Delimiter character that needs attention
|
||||||
|
Delimiter = { fg = theme.syn.punct },
|
||||||
|
-- SpecialComment special things inside a comment
|
||||||
|
-- Debug debugging statements
|
||||||
|
|
||||||
|
-- *Underlined text that stands out, HTML links
|
||||||
|
Underlined = { fg = theme.syn.special1, underline = true },
|
||||||
|
Bold = { bold = true },
|
||||||
|
Italic = { italic = true },
|
||||||
|
|
||||||
|
-- *Ignore left blank, hidden |hl-Ignore|
|
||||||
|
Ignore = { link = "NonText" },
|
||||||
|
|
||||||
|
-- *Error any erroneous construct
|
||||||
|
Error = { fg = theme.diag.error },
|
||||||
|
|
||||||
|
-- *Todo anything that needs extra attention; mostly the keywords TODO FIXME WARNING and XXX
|
||||||
|
Todo = { fg = theme.ui.fg_reverse, bg = theme.diag.info, bold = true },
|
||||||
|
|
||||||
|
qfLineNr = { link = "lineNr" },
|
||||||
|
qfFileName = { link = "Directory" },
|
||||||
|
|
||||||
|
-- htmlH1 = {},
|
||||||
|
-- htmlH2 = {},
|
||||||
|
|
||||||
|
-- mkdHeading = {},
|
||||||
|
-- mkdCode = {},
|
||||||
|
-- mkdCodeDelimiter = {},
|
||||||
|
-- mkdCodeStart = {},
|
||||||
|
-- mkdCodeEnd = {},
|
||||||
|
-- mkdLink = {},
|
||||||
|
|
||||||
|
-- markdownHeadingDelimiter = {},
|
||||||
|
markdownCode = { fg = theme.syn.string },
|
||||||
|
markdownCodeBlock = { fg = theme.syn.string },
|
||||||
|
markdownEscape = { fg = "NONE" },
|
||||||
|
-- markdownH1 = {},
|
||||||
|
-- markdownH2 = {},
|
||||||
|
-- markdownLinkText = {},
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
---@param colors KansoColors
|
||||||
|
---@param config? KansoConfig
|
||||||
|
function M.setup(colors, config)
|
||||||
|
config = config or require("kanso").config
|
||||||
|
local theme = colors.theme
|
||||||
|
return {
|
||||||
|
-- @variable various variable names
|
||||||
|
["@variable"] = { fg = theme.ui.fg },
|
||||||
|
-- @variable.builtin (Special) built-in variable names (e.g. `this`, `self`)
|
||||||
|
["@variable.builtin"] = { fg = theme.syn.special2, italic = true },
|
||||||
|
-- @variable.parameter parameters of a function
|
||||||
|
["@variable.parameter"] = { fg = theme.syn.parameter },
|
||||||
|
-- @variable.parameter.builtin special parameters (e.g. `_`, `it`)
|
||||||
|
-- @variable.member object and struct fields
|
||||||
|
["@variable.member"] = { fg = theme.syn.identifier },
|
||||||
|
--
|
||||||
|
-- @constant (Constant) constant identifiers
|
||||||
|
-- @constant.builtin built-in constant values
|
||||||
|
-- @constant.macro constants defined by the preprocessor
|
||||||
|
--
|
||||||
|
-- @module (Structure) modules or namespaces
|
||||||
|
-- @module.builtin built-in modules or namespaces
|
||||||
|
-- @label `GOTO` and other labels (e.g. `label:` in C), including heredoc labels
|
||||||
|
--
|
||||||
|
-- @string string literals
|
||||||
|
-- @string.documentation string documenting code (e.g. Python docstrings)
|
||||||
|
-- @string.regexp regular expressions
|
||||||
|
["@string.regexp"] = { fg = theme.syn.regex },
|
||||||
|
-- @string.escape escape sequences
|
||||||
|
["@string.escape"] = { fg = theme.syn.regex },
|
||||||
|
-- @string.special other special strings (e.g. dates)
|
||||||
|
-- @string.special.symbol symbols or atoms
|
||||||
|
["@string.special.symbol"] = { fg = theme.syn.identifier },
|
||||||
|
-- @string.special.path filenames
|
||||||
|
-- @string.special.url (Underlined) URIs (e.g. hyperlinks)
|
||||||
|
["@string.special.url"] = { fg = theme.syn.special1, undercurl = true },
|
||||||
|
-- @character character literals
|
||||||
|
-- @character.special special characters (e.g. wildcards)
|
||||||
|
--
|
||||||
|
-- @boolean boolean literals
|
||||||
|
-- @number numeric literals
|
||||||
|
-- @number.float floating-point number literals
|
||||||
|
--
|
||||||
|
-- @type type or class definitions and annotations
|
||||||
|
-- @type.builtin built-in types
|
||||||
|
-- @type.definition identifiers in type definitions (e.g. `typedef <type> <identifier>` in C)
|
||||||
|
--
|
||||||
|
-- @attribute attribute annotations (e.g. Python decorators, Rust lifetimes)
|
||||||
|
["@attribute"] = { link = "Constant" },
|
||||||
|
-- @attribute.builtin builtin annotations (e.g. `@property` in Python)
|
||||||
|
-- @property the key in key/value pairs
|
||||||
|
--
|
||||||
|
-- @function function definitions
|
||||||
|
-- @function.builtin built-in functions
|
||||||
|
-- @function.call function calls
|
||||||
|
-- @function.macro preprocessor macros
|
||||||
|
--
|
||||||
|
-- @function.method method definitions
|
||||||
|
-- @function.method.call method calls
|
||||||
|
--
|
||||||
|
-- @constructor constructor calls and definitions
|
||||||
|
["@constructor"] = { fg = theme.syn.special1 },
|
||||||
|
["@constructor.lua"] = { fg = theme.syn.keyword },
|
||||||
|
-- @operator symbolic operators (e.g. `+`, `*`)
|
||||||
|
["@operator"] = { link = "Operator" },
|
||||||
|
--
|
||||||
|
-- @keyword keywords not fitting into specific categories
|
||||||
|
-- @keyword.coroutine keywords related to coroutines (e.g. `go` in Go, `async/await` in Python)
|
||||||
|
-- @keyword.function keywords that define a function (e.g. `func` in Go, `def` in Python)
|
||||||
|
-- @keyword.operator operators that are English words (e.g. `and`, `or`)
|
||||||
|
["@keyword.operator"] = { fg = theme.syn.operator },
|
||||||
|
-- @keyword.import keywords for including modules (e.g. `import`, `from` in Python)
|
||||||
|
["@keyword.import"] = { link = "PreProc" },
|
||||||
|
-- @keyword.type keywords defining composite types (e.g. `struct`, `enum`)
|
||||||
|
-- @keyword.modifier keywords defining type modifiers (e.g. `const`, `static`, `public`)
|
||||||
|
-- @keyword.repeat keywords related to loops (e.g. `for`, `while`)
|
||||||
|
-- @keyword.return keywords like `return` and `yield`
|
||||||
|
["@keyword.return"] = vim.tbl_extend("force", { fg = theme.syn.special3 }, config.keywordStyle),
|
||||||
|
-- @keyword.debug keywords related to debugging
|
||||||
|
-- @keyword.exception keywords related to exceptions (e.g. `throw`, `catch`)
|
||||||
|
["@keyword.exception"] = vim.tbl_extend("force", { fg = theme.syn.special3 }, config.statementStyle),
|
||||||
|
|
||||||
|
["@keyword.luap"] = { link = "@string.regex" },
|
||||||
|
--
|
||||||
|
-- @keyword.conditional keywords related to conditionals (e.g. `if`, `else`)
|
||||||
|
-- @keyword.conditional.ternary ternary operator (e.g. `?`, `:`)
|
||||||
|
--
|
||||||
|
-- @keyword.directive various preprocessor directives and shebangs
|
||||||
|
-- @keyword.directive.define preprocessor definition directives
|
||||||
|
--
|
||||||
|
-- @punctuation.delimiter delimiters (e.g. `;`, `.`, `,`)
|
||||||
|
["@punctuation.delimiter"] = { fg = theme.syn.punct },
|
||||||
|
-- @punctuation.bracket brackets (e.g. `()`, `{}`, `[]`)
|
||||||
|
["@punctuation.bracket"] = { fg = theme.syn.punct },
|
||||||
|
-- @punctuation.special special symbols (e.g. `{}` in string interpolation)
|
||||||
|
["@punctuation.special"] = { fg = theme.syn.special1 },
|
||||||
|
--
|
||||||
|
-- @comment line and block comments
|
||||||
|
-- @comment.documentation comments documenting code
|
||||||
|
--
|
||||||
|
-- @comment.error error-type comments (e.g. `ERROR`, `FIXME`, `DEPRECATED`)
|
||||||
|
["@comment.error"] = { fg = theme.ui.fg, bg = theme.diag.error, bold = true },
|
||||||
|
-- @comment.warning warning-type comments (e.g. `WARNING`, `FIX`, `HACK`)
|
||||||
|
["@comment.warning"] = { fg = theme.ui.fg_reverse, bg = theme.diag.warning, bold = true },
|
||||||
|
-- @comment.todo todo-type comments (e.g. `TODO`, `WIP`)
|
||||||
|
-- @comment.note note-type comments (e.g. `NOTE`, `INFO`, `XXX`)
|
||||||
|
["@comment.note"] = { fg = theme.ui.fg_reverse, bg = theme.diag.hint, bold = true },
|
||||||
|
--
|
||||||
|
-- @markup.strong bold text
|
||||||
|
["@markup.strong"] = { bold = true },
|
||||||
|
-- @markup.italic italic text
|
||||||
|
["@markup.italic"] = { italic = true },
|
||||||
|
-- @markup.strikethrough struck-through text
|
||||||
|
["@markup.strikethrough"] = { strikethrough = true },
|
||||||
|
-- @markup.underline underlined text (only for literal underline markup!)
|
||||||
|
["@markup.underline"] = { underline = true },
|
||||||
|
--
|
||||||
|
-- @markup.heading headings, titles (including markers)
|
||||||
|
["@markup.heading"] = { link = "Function" },
|
||||||
|
-- @markup.heading.1 top-level heading
|
||||||
|
-- @markup.heading.2 section heading
|
||||||
|
-- @markup.heading.3 subsection heading
|
||||||
|
-- @markup.heading.4 and so on
|
||||||
|
-- @markup.heading.5 and so forth
|
||||||
|
-- @markup.heading.6 six levels ought to be enough for anybody
|
||||||
|
--
|
||||||
|
-- @markup.quote block quotes
|
||||||
|
["@markup.quote"] = { link = "@variable.parameter" },
|
||||||
|
-- @markup.math math environments (e.g. `$ ... $` in LaTeX)
|
||||||
|
["@markup.math"] = { link = "Constant" },
|
||||||
|
-- @markup.environment environments (e.g. in LaTeX)
|
||||||
|
["@markup.environment"] = { link = "Keyword" },
|
||||||
|
--
|
||||||
|
-- @markup.link text references, footnotes, citations, etc.
|
||||||
|
-- @markup.link.label link, reference descriptions
|
||||||
|
-- @markup.link.url URL-style links
|
||||||
|
["@markup.link.url"] = { link = "@string.special.url" },
|
||||||
|
-- @markup.raw literal or verbatim text (e.g. inline code)
|
||||||
|
["@markup.raw"] = { link = "String" },
|
||||||
|
-- @markup.raw.block literal or verbatim text as a stand-alone block
|
||||||
|
--
|
||||||
|
-- @markup.list list markers
|
||||||
|
-- @markup.list.checked checked todo-style list markers
|
||||||
|
-- @markup.list.unchecked unchecked todo-style list markers
|
||||||
|
--
|
||||||
|
-- @diff.plus added text (for diff files)
|
||||||
|
["@diff.plus"] = { fg = theme.vcs.added },
|
||||||
|
-- @diff.minus deleted text (for diff files)
|
||||||
|
["@diff.minus"] = { fg = theme.vcs.removed },
|
||||||
|
-- @diff.delta changed text (for diff files)
|
||||||
|
["@diff.delta"] = { fg = theme.vcs.changed },
|
||||||
|
--
|
||||||
|
-- @tag XML-style tag names (e.g. in XML, HTML, etc.)
|
||||||
|
-- @tag.builtin XML-style tag names (e.g. HTML5 tags)
|
||||||
|
-- @tag.attribute XML-style tag attributes
|
||||||
|
["@tag.attribute"] = { fg = theme.syn.identifier },
|
||||||
|
-- @tag.delimiter XML-style tag delimiters
|
||||||
|
["@tag.delimiter"] = { fg = theme.syn.punct },
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
|
--vim: fdm=marker
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
local M = {}
|
||||||
|
|
||||||
|
---@alias ColorSpec string RGB Hex string
|
||||||
|
---@alias ColorTable table<string, ColorSpec>
|
||||||
|
---@alias KansoColorsSpec { palette: ColorTable, theme: ColorTable }
|
||||||
|
---@alias KansoColors { palette: PaletteColors, theme: ThemeColors }
|
||||||
|
|
||||||
|
--- default config
|
||||||
|
---@class KansoConfig
|
||||||
|
M.config = {
|
||||||
|
undercurl = true,
|
||||||
|
commentStyle = { italic = true },
|
||||||
|
functionStyle = {},
|
||||||
|
keywordStyle = { italic = true },
|
||||||
|
statementStyle = {},
|
||||||
|
typeStyle = {},
|
||||||
|
transparent = false,
|
||||||
|
dimInactive = false,
|
||||||
|
terminalColors = true,
|
||||||
|
colors = { theme = { zen = {}, pearl = {}, ink = {}, all = {} }, palette = {} },
|
||||||
|
---@type fun(colors: KansoColorsSpec): table<string, table>
|
||||||
|
overrides = function()
|
||||||
|
return {}
|
||||||
|
end,
|
||||||
|
---@type { dark: string, light: string }
|
||||||
|
background = { dark = "ink", light = "pearl" },
|
||||||
|
theme = "ink",
|
||||||
|
compile = false,
|
||||||
|
}
|
||||||
|
|
||||||
|
local function check_config(config)
|
||||||
|
local err
|
||||||
|
return not err
|
||||||
|
end
|
||||||
|
|
||||||
|
--- update global configuration with user settings
|
||||||
|
---@param config? KansoConfig user configuration
|
||||||
|
function M.setup(config)
|
||||||
|
if check_config(config) then
|
||||||
|
M.config = vim.tbl_deep_extend("force", M.config, config or {})
|
||||||
|
else
|
||||||
|
vim.notify("Kanso: Errors found while loading user config. Using default config.", vim.log.levels.ERROR)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
--- load the colorscheme
|
||||||
|
---@param theme? string
|
||||||
|
function M.load(theme)
|
||||||
|
local utils = require("kanso.utils")
|
||||||
|
|
||||||
|
theme = theme or M.config.background[vim.o.background] or M.config.theme
|
||||||
|
M._CURRENT_THEME = theme
|
||||||
|
|
||||||
|
if vim.g.colors_name then
|
||||||
|
vim.cmd("hi clear")
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.g.colors_name = "kanso"
|
||||||
|
vim.o.termguicolors = true
|
||||||
|
|
||||||
|
if M.config.compile then
|
||||||
|
if utils.load_compiled(theme) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
M.compile()
|
||||||
|
utils.load_compiled(theme)
|
||||||
|
else
|
||||||
|
local colors = require("kanso.colors").setup({ theme = theme, colors = M.config.colors })
|
||||||
|
local highlights = require("kanso.highlights").setup(colors, M.config)
|
||||||
|
require("kanso.highlights").highlight(highlights, M.config.terminalColors and colors.theme.term or {})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function M.compile()
|
||||||
|
for theme, _ in pairs(require("kanso.themes")) do
|
||||||
|
local colors = require("kanso.colors").setup({ theme = theme, colors = M.config.colors })
|
||||||
|
local highlights = require("kanso.highlights").setup(colors, M.config)
|
||||||
|
require("kanso.utils").compile(theme, highlights, M.config.terminalColors and colors.theme.term or {})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.api.nvim_create_user_command("KansoCompile", function()
|
||||||
|
for mod, _ in pairs(package.loaded) do
|
||||||
|
if mod:match("^kanso%.") then
|
||||||
|
package.loaded[mod] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
M.compile()
|
||||||
|
vim.notify("Kanso: compiled successfully!", vim.log.levels.INFO)
|
||||||
|
M.load(M._CURRENT_THEME)
|
||||||
|
vim.api.nvim_exec_autocmds("ColorScheme", { modeline = false })
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
local hsluv = require("kanso.lib.hsluv")
|
||||||
|
|
||||||
|
---@class HSLuvColor
|
||||||
|
local Color = {}
|
||||||
|
local Color_mt = {
|
||||||
|
__index = Color,
|
||||||
|
__tostring = function(self)
|
||||||
|
return self:to_hex()
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
local function none_to_hex()
|
||||||
|
return "NONE"
|
||||||
|
end
|
||||||
|
|
||||||
|
---Create a new HSLuv color object from a RGB hex string
|
||||||
|
---@param hex string Hex color
|
||||||
|
---@return HSLuvColor
|
||||||
|
function Color.new(hex)
|
||||||
|
if hex:lower() == "none" then
|
||||||
|
return setmetatable({ H = 0, S = 0, L = 0, to_hex = none_to_hex }, Color_mt)
|
||||||
|
end
|
||||||
|
local H, S, L = unpack(hsluv.hex_to_hsluv(hex))
|
||||||
|
return setmetatable({ H = H, S = S, L = L }, Color_mt)
|
||||||
|
end
|
||||||
|
|
||||||
|
function Color:to_rgb()
|
||||||
|
return hsluv.hsluv_to_rgb({ self.H, self.S, self.L })
|
||||||
|
end
|
||||||
|
|
||||||
|
function Color:to_hex()
|
||||||
|
return hsluv.hsluv_to_hex({ self.H, self.S, self.L })
|
||||||
|
end
|
||||||
|
|
||||||
|
local function blendRGB(a, b, r)
|
||||||
|
local c = {}
|
||||||
|
for i = 1, 3 do
|
||||||
|
c[i] = math.sqrt((1 - r) * math.pow(a[i], 2) + r * math.pow(b[i], 2))
|
||||||
|
end
|
||||||
|
return c
|
||||||
|
end
|
||||||
|
|
||||||
|
--- Blend Color with another color (hex)
|
||||||
|
---@param b string Hex color
|
||||||
|
---@param r number Blend ratio [0, 1]
|
||||||
|
---@return HSLuvColor
|
||||||
|
function Color:blend(b, r)
|
||||||
|
if b:lower() == "none" then
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
local c = blendRGB(self:to_rgb(), hsluv.hex_to_rgb(b), r)
|
||||||
|
self.H, self.S, self.L = unpack(hsluv.rgb_to_hsluv(c))
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param r number Brighten ratio [-1, 1]
|
||||||
|
---@param bg? string background color, if light, r = -r
|
||||||
|
---@return HSLuvColor
|
||||||
|
function Color:brighten(r, bg)
|
||||||
|
if bg and bg:lower() == "none" then
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
local bg_lightness = bg and hsluv.hex_to_hsluv(bg)[3] or 0
|
||||||
|
r = bg_lightness > 50 and -r or r
|
||||||
|
|
||||||
|
local lspace = r > 0 and 100 - self.L or self.L
|
||||||
|
self.L = self.L + lspace * r
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param r number Saturate ratio [-1, 1]
|
||||||
|
---@return HSLuvColor
|
||||||
|
function Color:saturate(r)
|
||||||
|
local lspace = r > 0 and 100 - self.S or self.S
|
||||||
|
self.S = self.S + lspace * r
|
||||||
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
local M = {}
|
||||||
|
return setmetatable(M, {
|
||||||
|
__call = function(_, ...)
|
||||||
|
return Color.new(...)
|
||||||
|
end,
|
||||||
|
})
|
||||||
@@ -0,0 +1,347 @@
|
|||||||
|
--[[
|
||||||
|
Lua implementation of HSLuv and HPLuv color spaces
|
||||||
|
Homepage: http://www.hsluv.org/
|
||||||
|
|
||||||
|
Copyright (C) 2019 Alexei Boronine
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||||
|
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
||||||
|
following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||||
|
portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
||||||
|
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
]]
|
||||||
|
|
||||||
|
local hsluv = {}
|
||||||
|
|
||||||
|
local hexChars = "0123456789abcdef"
|
||||||
|
|
||||||
|
|
||||||
|
local distance_line_from_origin = function(line)
|
||||||
|
return math.abs(line.intercept) / math.sqrt((line.slope ^ 2) + 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
local length_of_ray_until_intersect = function(theta, line)
|
||||||
|
return line.intercept / (math.sin(theta) - line.slope * math.cos(theta))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.get_bounds = function(l)
|
||||||
|
local result = {};
|
||||||
|
local sub2;
|
||||||
|
local sub1 = ((l + 16) ^ 3) / 1560896;
|
||||||
|
if sub1 > hsluv.epsilon then
|
||||||
|
sub2 = sub1;
|
||||||
|
else
|
||||||
|
sub2 = l / hsluv.kappa;
|
||||||
|
end
|
||||||
|
|
||||||
|
for i = 1, 3 do
|
||||||
|
local m1 = hsluv.m[i][1];
|
||||||
|
local m2 = hsluv.m[i][2];
|
||||||
|
local m3 = hsluv.m[i][3];
|
||||||
|
|
||||||
|
for t = 0, 1 do
|
||||||
|
local top1 = (284517 * m1 - 94839 * m3) * sub2;
|
||||||
|
local top2 = (838422 * m3 + 769860 * m2 + 731718 * m1) * l * sub2 - 769860 * t * l;
|
||||||
|
local bottom = (632260 * m3 - 126452 * m2) * sub2 + 126452 * t;
|
||||||
|
table.insert(result, {
|
||||||
|
slope = top1 / bottom,
|
||||||
|
intercept = top2 / bottom
|
||||||
|
})
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.max_safe_chroma_for_l = function(l)
|
||||||
|
local bounds = hsluv.get_bounds(l);
|
||||||
|
local min = 1.7976931348623157e+308;
|
||||||
|
|
||||||
|
for i = 1, 6 do
|
||||||
|
local length = distance_line_from_origin(bounds[i]);
|
||||||
|
if length >= 0 then
|
||||||
|
min = math.min(min, length);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
return min;
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.max_safe_chroma_for_lh = function(l, h)
|
||||||
|
local hrad = h / 360 * math.pi * 2;
|
||||||
|
local bounds = hsluv.get_bounds(l);
|
||||||
|
local min = 1.7976931348623157e+308;
|
||||||
|
|
||||||
|
for i = 1, 6 do
|
||||||
|
local bound = bounds[i];
|
||||||
|
local length = length_of_ray_until_intersect(hrad, bound);
|
||||||
|
if length >= 0 then
|
||||||
|
min = math.min(min, length);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
return min
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.dot_product = function(a, b)
|
||||||
|
local sum = 0;
|
||||||
|
for i = 1, 3 do
|
||||||
|
sum = sum + a[i] * b[i];
|
||||||
|
end;
|
||||||
|
return sum
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.from_linear = function(c)
|
||||||
|
if c <= 0.0031308 then
|
||||||
|
return 12.92 * c
|
||||||
|
else
|
||||||
|
return 1.055 * (c ^ 0.416666666666666685) - 0.055
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.to_linear = function(c)
|
||||||
|
if c > 0.04045 then
|
||||||
|
return ((c + 0.055) / 1.055) ^ 2.4
|
||||||
|
else
|
||||||
|
return c / 12.92
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.xyz_to_rgb = function(tuple)
|
||||||
|
return {
|
||||||
|
hsluv.from_linear(hsluv.dot_product(hsluv.m[1], tuple)),
|
||||||
|
hsluv.from_linear(hsluv.dot_product(hsluv.m[2], tuple)),
|
||||||
|
hsluv.from_linear(hsluv.dot_product(hsluv.m[3], tuple))
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.rgb_to_xyz = function(tuple)
|
||||||
|
local rgbl = {
|
||||||
|
hsluv.to_linear(tuple[1]),
|
||||||
|
hsluv.to_linear(tuple[2]),
|
||||||
|
hsluv.to_linear(tuple[3])
|
||||||
|
};
|
||||||
|
return {
|
||||||
|
hsluv.dot_product(hsluv.minv[1], rgbl),
|
||||||
|
hsluv.dot_product(hsluv.minv[2], rgbl),
|
||||||
|
hsluv.dot_product(hsluv.minv[3], rgbl)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.y_to_l = function(Y)
|
||||||
|
if Y <= hsluv.epsilon then
|
||||||
|
return Y / hsluv.refY * hsluv.kappa
|
||||||
|
else
|
||||||
|
return 116 * ((Y / hsluv.refY) ^ 0.333333333333333315) - 16
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.l_to_y = function(L)
|
||||||
|
if L <= 8 then
|
||||||
|
return hsluv.refY * L / hsluv.kappa
|
||||||
|
else
|
||||||
|
return hsluv.refY * (((L + 16) / 116) ^ 3)
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.xyz_to_luv = function(tuple)
|
||||||
|
local X = tuple[1];
|
||||||
|
local Y = tuple[2];
|
||||||
|
local divider = X + 15 * Y + 3 * tuple[3];
|
||||||
|
local varU = 4 * X;
|
||||||
|
local varV = 9 * Y;
|
||||||
|
if divider ~= 0 then
|
||||||
|
varU = varU / divider;
|
||||||
|
varV = varV / divider;
|
||||||
|
else
|
||||||
|
varU = 0;
|
||||||
|
varV = 0;
|
||||||
|
end
|
||||||
|
local L = hsluv.y_to_l(Y);
|
||||||
|
if L == 0 then
|
||||||
|
return { 0, 0, 0 }
|
||||||
|
end;
|
||||||
|
return { L, 13 * L * (varU - hsluv.refU), 13 * L * (varV - hsluv.refV) }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.luv_to_xyz = function(tuple)
|
||||||
|
local L = tuple[1];
|
||||||
|
local U = tuple[2];
|
||||||
|
local V = tuple[3];
|
||||||
|
if L == 0 then
|
||||||
|
return { 0, 0, 0 }
|
||||||
|
end;
|
||||||
|
local varU = U / (13 * L) + hsluv.refU;
|
||||||
|
local varV = V / (13 * L) + hsluv.refV;
|
||||||
|
local Y = hsluv.l_to_y(L);
|
||||||
|
local X = 0 - (9 * Y * varU) / ((((varU - 4) * varV) - varU * varV));
|
||||||
|
return { X, Y, (9 * Y - 15 * varV * Y - varV * X) / (3 * varV) }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.luv_to_lch = function(tuple)
|
||||||
|
local L = tuple[1];
|
||||||
|
local U = tuple[2];
|
||||||
|
local V = tuple[3];
|
||||||
|
local C = math.sqrt(U * U + V * V);
|
||||||
|
local H
|
||||||
|
if C < 0.00000001 then
|
||||||
|
H = 0;
|
||||||
|
else
|
||||||
|
H = math.atan2(V, U) * 180.0 / 3.1415926535897932;
|
||||||
|
if H < 0 then
|
||||||
|
H = 360 + H;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
return { L, C, H }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.lch_to_luv = function(tuple)
|
||||||
|
local L = tuple[1];
|
||||||
|
local C = tuple[2];
|
||||||
|
local Hrad = tuple[3] / 360.0 * 2 * math.pi;
|
||||||
|
return { L, math.cos(Hrad) * C, math.sin(Hrad) * C };
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hsluv_to_lch = function(tuple)
|
||||||
|
local H = tuple[1];
|
||||||
|
local S = tuple[2];
|
||||||
|
local L = tuple[3];
|
||||||
|
if L > 99.9999999 then
|
||||||
|
return { 100, 0, H }
|
||||||
|
end;
|
||||||
|
if L < 0.00000001 then
|
||||||
|
return { 0, 0, H }
|
||||||
|
end;
|
||||||
|
return { L, hsluv.max_safe_chroma_for_lh(L, H) / 100 * S, H }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.lch_to_hsluv = function(tuple)
|
||||||
|
local L = tuple[1];
|
||||||
|
local C = tuple[2];
|
||||||
|
local H = tuple[3];
|
||||||
|
local max_chroma = hsluv.max_safe_chroma_for_lh(L, H)
|
||||||
|
if L > 99.9999999 then
|
||||||
|
return { H, 0, 100 }
|
||||||
|
end;
|
||||||
|
if L < 0.00000001 then
|
||||||
|
return { H, 0, 0 }
|
||||||
|
end;
|
||||||
|
|
||||||
|
return { H, C / max_chroma * 100, L }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hpluv_to_lch = function(tuple)
|
||||||
|
local H = tuple[1];
|
||||||
|
local S = tuple[2];
|
||||||
|
local L = tuple[3];
|
||||||
|
if L > 99.9999999 then
|
||||||
|
return { 100, 0, H }
|
||||||
|
end;
|
||||||
|
if L < 0.00000001 then
|
||||||
|
return { 0, 0, H }
|
||||||
|
end;
|
||||||
|
return { L, hsluv.max_safe_chroma_for_l(L) / 100 * S, H }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.lch_to_hpluv = function(tuple)
|
||||||
|
local L = tuple[1];
|
||||||
|
local C = tuple[2];
|
||||||
|
local H = tuple[3];
|
||||||
|
if L > 99.9999999 then
|
||||||
|
return { H, 0, 100 }
|
||||||
|
end;
|
||||||
|
if L < 0.00000001 then
|
||||||
|
return { H, 0, 0 }
|
||||||
|
end;
|
||||||
|
return { H, C / hsluv.max_safe_chroma_for_l(L) * 100, L }
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.rgb_to_hex = function(tuple)
|
||||||
|
local h = "#";
|
||||||
|
for i = 1, 3 do
|
||||||
|
local c = math.floor(tuple[i] * 255 + 0.5);
|
||||||
|
local digit2 = math.fmod(c, 16);
|
||||||
|
local x = (c - digit2) / 16;
|
||||||
|
local digit1 = math.floor(x);
|
||||||
|
h = h .. string.sub(hexChars, digit1 + 1, digit1 + 1)
|
||||||
|
h = h .. string.sub(hexChars, digit2 + 1, digit2 + 1)
|
||||||
|
end;
|
||||||
|
return h
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hex_to_rgb = function(hex)
|
||||||
|
hex = string.lower(hex)
|
||||||
|
local ret = {}
|
||||||
|
for i = 0, 2 do
|
||||||
|
local char1 = string.sub(hex, i * 2 + 2, i * 2 + 2);
|
||||||
|
local char2 = string.sub(hex, i * 2 + 3, i * 2 + 3);
|
||||||
|
local digit1 = string.find(hexChars, char1) - 1
|
||||||
|
local digit2 = string.find(hexChars, char2) - 1
|
||||||
|
ret[i + 1] = (digit1 * 16 + digit2) / 255.0;
|
||||||
|
end;
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.lch_to_rgb = function(tuple)
|
||||||
|
return hsluv.xyz_to_rgb(hsluv.luv_to_xyz(hsluv.lch_to_luv(tuple)))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.rgb_to_lch = function(tuple)
|
||||||
|
return hsluv.luv_to_lch(hsluv.xyz_to_luv(hsluv.rgb_to_xyz(tuple)))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hsluv_to_rgb = function(tuple)
|
||||||
|
return hsluv.lch_to_rgb(hsluv.hsluv_to_lch(tuple))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.rgb_to_hsluv = function(tuple)
|
||||||
|
return hsluv.lch_to_hsluv(hsluv.rgb_to_lch(tuple))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hpluv_to_rgb = function(tuple)
|
||||||
|
return hsluv.lch_to_rgb(hsluv.hpluv_to_lch(tuple))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.rgb_to_hpluv = function(tuple)
|
||||||
|
return hsluv.lch_to_hpluv(hsluv.rgb_to_lch(tuple))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hsluv_to_hex = function(tuple)
|
||||||
|
return hsluv.rgb_to_hex(hsluv.hsluv_to_rgb(tuple))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hpluv_to_hex = function(tuple)
|
||||||
|
return hsluv.rgb_to_hex(hsluv.hpluv_to_rgb(tuple))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hex_to_hsluv = function(s)
|
||||||
|
return hsluv.rgb_to_hsluv(hsluv.hex_to_rgb(s))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.hex_to_hpluv = function(s)
|
||||||
|
return hsluv.rgb_to_hpluv(hsluv.hex_to_rgb(s))
|
||||||
|
end
|
||||||
|
|
||||||
|
hsluv.m = {
|
||||||
|
{ 3.240969941904521, -1.537383177570093, -0.498610760293 },
|
||||||
|
{ -0.96924363628087, 1.87596750150772, 0.041555057407175 },
|
||||||
|
{ 0.055630079696993, -0.20397695888897, 1.056971514242878 }
|
||||||
|
}
|
||||||
|
hsluv.minv = {
|
||||||
|
{ 0.41239079926595, 0.35758433938387, 0.18048078840183 },
|
||||||
|
{ 0.21263900587151, 0.71516867876775, 0.072192315360733 },
|
||||||
|
{ 0.019330818715591, 0.11919477979462, 0.95053215224966 }
|
||||||
|
}
|
||||||
|
hsluv.refY = 1.0
|
||||||
|
hsluv.refU = 0.19783000664283
|
||||||
|
hsluv.refV = 0.46831999493879
|
||||||
|
hsluv.kappa = 903.2962962
|
||||||
|
hsluv.epsilon = 0.0088564516
|
||||||
|
|
||||||
|
return hsluv
|
||||||
@@ -0,0 +1,416 @@
|
|||||||
|
local c = require("kanso.lib.color")
|
||||||
|
|
||||||
|
--TODO:
|
||||||
|
--PreProc needs its own color
|
||||||
|
--parameter and field should be different
|
||||||
|
---@class SyntaxElements
|
||||||
|
---@field string ColorSpec
|
||||||
|
---@field variable ColorSpec
|
||||||
|
---@field number ColorSpec
|
||||||
|
---@field constant ColorSpec
|
||||||
|
---@field identifier ColorSpec
|
||||||
|
---@field parameter ColorSpec
|
||||||
|
---@field fun ColorSpec
|
||||||
|
---@field statement ColorSpec
|
||||||
|
---@field keyword ColorSpec
|
||||||
|
---@field operator ColorSpec
|
||||||
|
---@field preproc ColorSpec
|
||||||
|
---@field type ColorSpec
|
||||||
|
---@field regex ColorSpec
|
||||||
|
---@field deprecated ColorSpec
|
||||||
|
---@field comment ColorSpec
|
||||||
|
---@field punct ColorSpec
|
||||||
|
---@field special1 ColorSpec
|
||||||
|
---@field special2 ColorSpec
|
||||||
|
---@field special3 ColorSpec
|
||||||
|
|
||||||
|
---@class DiagnosticsElements
|
||||||
|
---@field error ColorSpec
|
||||||
|
---@field ok ColorSpec
|
||||||
|
---@field warning ColorSpec
|
||||||
|
---@field info ColorSpec
|
||||||
|
---@field hint ColorSpec
|
||||||
|
--
|
||||||
|
---@class DiffElements
|
||||||
|
---@field add ColorSpec
|
||||||
|
---@field delete ColorSpec
|
||||||
|
---@field change ColorSpec
|
||||||
|
---@field text ColorSpec
|
||||||
|
|
||||||
|
---@class VCSElements
|
||||||
|
---@field added ColorSpec
|
||||||
|
---@field removed ColorSpec
|
||||||
|
---@field changed ColorSpec
|
||||||
|
|
||||||
|
---@class UiElements
|
||||||
|
---@field none ColorSpec
|
||||||
|
---@field fg ColorSpec Default foreground
|
||||||
|
---@field fg_dim ColorSpec Dimmed foreground
|
||||||
|
---@field fg_reverse ColorSpec
|
||||||
|
---@field bg_dim ColorSpec Dimmed background
|
||||||
|
---@field bg_m3 ColorSpec
|
||||||
|
---@field bg_m2 ColorSpec
|
||||||
|
---@field bg_m1 ColorSpec
|
||||||
|
---@field bg ColorSpec Default background
|
||||||
|
---@field bg_p1 ColorSpec Lighter background ColorColumn, Folded, Gutter
|
||||||
|
---@field bg_p2 ColorSpec Lighter background Cursor{Line,Column}, TabLineSel (Selected Items)
|
||||||
|
---@field bg_gutter ColorSpec {Sign,Fold}Column, LineNr
|
||||||
|
---@field special ColorSpec SpecialKey
|
||||||
|
---@field nontext ColorSpec LineNr, NonText
|
||||||
|
---@field whitespace ColorSpec Whitespace
|
||||||
|
---@field bg_search ColorSpec
|
||||||
|
---@field bg_visual ColorSpec
|
||||||
|
---@field cursor_line_nr_foreground ColorSpec
|
||||||
|
---@field cursor_line_nr_active_foreground ColorSpec
|
||||||
|
---@field cursor_bg ColorSpec
|
||||||
|
---@field cursor_fg ColorSpec
|
||||||
|
---@field pmenu MenuElements
|
||||||
|
---@field float FloatElements
|
||||||
|
|
||||||
|
---@class FloatElements
|
||||||
|
---@field fg ColorSpec
|
||||||
|
---@field bg ColorSpec
|
||||||
|
---@field fg_border ColorSpec
|
||||||
|
---@field bg_border ColorSpec
|
||||||
|
|
||||||
|
---@class MenuElements
|
||||||
|
---@field bg ColorSpec
|
||||||
|
---@field fg ColorSpec
|
||||||
|
---@field fg_sel ColorSpec
|
||||||
|
---@field bg_sel ColorSpec
|
||||||
|
---@field bg_sbar ColorSpec
|
||||||
|
---@field bg_thumb ColorSpec
|
||||||
|
|
||||||
|
---@class ThemeColors
|
||||||
|
---@field syn SyntaxElements
|
||||||
|
---@field diag DiagnosticsElements
|
||||||
|
---@field vcs VCSElements
|
||||||
|
---@field diff DiffElements
|
||||||
|
---@field ui UiElements
|
||||||
|
---@field term ColorSpec[]
|
||||||
|
|
||||||
|
return {
|
||||||
|
---@param palette PaletteColors
|
||||||
|
---@return ThemeColors
|
||||||
|
zen = function(palette)
|
||||||
|
return {
|
||||||
|
ui = {
|
||||||
|
fg = palette.inkWhite,
|
||||||
|
fg_dim = palette.oldWhite,
|
||||||
|
fg_reverse = palette.zenBlue1,
|
||||||
|
|
||||||
|
bg_dim = palette.zen0,
|
||||||
|
bg_gutter = palette.zen0,
|
||||||
|
|
||||||
|
bg_m3 = palette.zen0,
|
||||||
|
bg_m2 = palette.zen0,
|
||||||
|
bg_m1 = palette.zen0,
|
||||||
|
bg = palette.zen0,
|
||||||
|
bg_p1 = palette.zen1,
|
||||||
|
bg_p2 = palette.zen2,
|
||||||
|
|
||||||
|
special = palette.inkGray3,
|
||||||
|
whitespace = palette.inkAsh,
|
||||||
|
nontext = palette.inkAsh,
|
||||||
|
|
||||||
|
bg_visual = palette.inkBlack2,
|
||||||
|
bg_search = palette.zenBlue2,
|
||||||
|
|
||||||
|
cursor_line_nr_foreground = palette.inkGray3,
|
||||||
|
cursor_line_nr_active_foreground = palette.fujiWhite,
|
||||||
|
cursor_bg = palette.fujiWhite,
|
||||||
|
cursor_fg = palette.zen0,
|
||||||
|
|
||||||
|
pmenu = {
|
||||||
|
fg = palette.fujiWhite,
|
||||||
|
fg_sel = "NONE",
|
||||||
|
bg = palette.zenBlue1,
|
||||||
|
bg_sel = palette.zenBlue2,
|
||||||
|
bg_thumb = palette.zenBlue2,
|
||||||
|
bg_sbar = palette.zenBlue1,
|
||||||
|
},
|
||||||
|
|
||||||
|
float = {
|
||||||
|
fg = palette.oldWhite,
|
||||||
|
bg = palette.zen0,
|
||||||
|
fg_border = palette.zen3,
|
||||||
|
bg_border = palette.zen0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
syn = {
|
||||||
|
string = palette.inkGreen2,
|
||||||
|
variable = "NONE",
|
||||||
|
number = palette.inkPink,
|
||||||
|
constant = palette.inkOrange,
|
||||||
|
identifier = palette.inkViolet,
|
||||||
|
parameter = palette.inkGray1,
|
||||||
|
fun = palette.inkBlue2,
|
||||||
|
statement = palette.inkViolet,
|
||||||
|
keyword = palette.inkViolet,
|
||||||
|
operator = palette.inkGray1,
|
||||||
|
preproc = palette.inkGray1,
|
||||||
|
type = palette.inkAqua,
|
||||||
|
regex = palette.inkRed,
|
||||||
|
deprecated = palette.katanaGray,
|
||||||
|
punct = palette.inkGray1,
|
||||||
|
comment = palette.inkGray2,
|
||||||
|
special1 = palette.inkYellow,
|
||||||
|
special2 = palette.inkViolet,
|
||||||
|
special3 = palette.inkViolet,
|
||||||
|
},
|
||||||
|
diag = {
|
||||||
|
error = palette.samuraiRed,
|
||||||
|
ok = palette.springGreen,
|
||||||
|
warning = palette.roninYellow,
|
||||||
|
info = palette.inkBlue,
|
||||||
|
hint = palette.zenAqua1,
|
||||||
|
},
|
||||||
|
diff = {
|
||||||
|
add = palette.winterGreen,
|
||||||
|
delete = palette.winterRed,
|
||||||
|
change = palette.winterBlue,
|
||||||
|
text = palette.winterYellow,
|
||||||
|
},
|
||||||
|
vcs = {
|
||||||
|
added = palette.autumnGreen,
|
||||||
|
removed = palette.autumnRed,
|
||||||
|
changed = palette.autumnYellow,
|
||||||
|
},
|
||||||
|
term = {
|
||||||
|
palette.zen0, -- black
|
||||||
|
palette.inkRed, -- red
|
||||||
|
palette.inkGreen2, -- green
|
||||||
|
palette.inkYellow, -- yellow
|
||||||
|
palette.inkBlue2, -- blue
|
||||||
|
palette.inkPink, -- magenta
|
||||||
|
palette.inkWhite, -- cyan
|
||||||
|
palette.oldWhite, -- white
|
||||||
|
palette.inkGray1, -- bright black
|
||||||
|
palette.zenRed, -- bright red
|
||||||
|
palette.inkGreen, -- bright green
|
||||||
|
palette.carpYellow, -- bright yellow
|
||||||
|
palette.springBlue, -- bright blue
|
||||||
|
palette.springViolet1, -- bright magenta
|
||||||
|
palette.zenAqua2, -- bright cyan
|
||||||
|
palette.inkWhite, -- bright white
|
||||||
|
palette.inkOrange, -- extended color 1
|
||||||
|
palette.inkOrange2, -- extended color 2
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
---@param palette PaletteColors
|
||||||
|
---@return ThemeColors
|
||||||
|
ink = function(palette)
|
||||||
|
return {
|
||||||
|
ui = {
|
||||||
|
fg = palette.inkWhite,
|
||||||
|
fg_dim = palette.oldWhite,
|
||||||
|
fg_reverse = palette.zenBlue1,
|
||||||
|
|
||||||
|
bg_dim = palette.inkBlack0,
|
||||||
|
bg_gutter = palette.inkBlack0,
|
||||||
|
|
||||||
|
bg_m3 = palette.inkBlack0,
|
||||||
|
bg_m2 = palette.inkBlack0,
|
||||||
|
bg_m1 = palette.inkBlack0,
|
||||||
|
bg = palette.inkBlack0,
|
||||||
|
bg_p1 = palette.inkBlack1,
|
||||||
|
bg_p2 = palette.inkBlack2,
|
||||||
|
|
||||||
|
special = palette.inkGray3,
|
||||||
|
whitespace = palette.inkAsh,
|
||||||
|
nontext = palette.inkAsh,
|
||||||
|
|
||||||
|
bg_visual = palette.inkBlack3,
|
||||||
|
bg_search = palette.zenBlue2,
|
||||||
|
|
||||||
|
cursor_line_nr_foreground = palette.inkGray3,
|
||||||
|
cursor_line_nr_active_foreground = palette.fujiWhite,
|
||||||
|
cursor_bg = palette.fujiWhite,
|
||||||
|
cursor_fg = palette.inkBlack0,
|
||||||
|
|
||||||
|
pmenu = {
|
||||||
|
fg = palette.fujiWhite,
|
||||||
|
fg_sel = "NONE",
|
||||||
|
bg = palette.zenBlue1,
|
||||||
|
bg_sel = palette.zenBlue2,
|
||||||
|
bg_thumb = palette.zenBlue2,
|
||||||
|
bg_sbar = palette.zenBlue1,
|
||||||
|
},
|
||||||
|
|
||||||
|
float = {
|
||||||
|
fg = palette.oldWhite,
|
||||||
|
bg = palette.inkBlack0,
|
||||||
|
fg_border = palette.inkBlack3,
|
||||||
|
bg_border = palette.inkBlack0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
syn = {
|
||||||
|
string = palette.inkGreen2,
|
||||||
|
variable = "NONE",
|
||||||
|
number = palette.inkPink,
|
||||||
|
constant = palette.inkOrange,
|
||||||
|
identifier = palette.inkViolet,
|
||||||
|
parameter = palette.inkGray1,
|
||||||
|
fun = palette.inkBlue2,
|
||||||
|
statement = palette.inkViolet,
|
||||||
|
keyword = palette.inkViolet,
|
||||||
|
operator = palette.inkGray1,
|
||||||
|
preproc = palette.inkGray1,
|
||||||
|
type = palette.inkAqua,
|
||||||
|
regex = palette.inkRed,
|
||||||
|
deprecated = palette.katanaGray,
|
||||||
|
punct = palette.inkGray1,
|
||||||
|
comment = palette.inkGray2,
|
||||||
|
special1 = palette.inkYellow,
|
||||||
|
special2 = palette.inkViolet,
|
||||||
|
special3 = palette.inkViolet,
|
||||||
|
},
|
||||||
|
diag = {
|
||||||
|
error = palette.samuraiRed,
|
||||||
|
ok = palette.springGreen,
|
||||||
|
warning = palette.roninYellow,
|
||||||
|
info = palette.inkBlue,
|
||||||
|
hint = palette.zenAqua1,
|
||||||
|
},
|
||||||
|
diff = {
|
||||||
|
add = palette.winterGreen,
|
||||||
|
delete = palette.winterRed,
|
||||||
|
change = palette.winterBlue,
|
||||||
|
text = palette.winterYellow,
|
||||||
|
},
|
||||||
|
vcs = {
|
||||||
|
added = palette.autumnGreen,
|
||||||
|
removed = palette.autumnRed,
|
||||||
|
changed = palette.autumnYellow,
|
||||||
|
},
|
||||||
|
term = {
|
||||||
|
palette.inkBlack0, -- black
|
||||||
|
palette.inkRed, -- red
|
||||||
|
palette.inkGreen2, -- green
|
||||||
|
palette.inkYellow, -- yellow
|
||||||
|
palette.inkBlue2, -- blue
|
||||||
|
palette.inkPink, -- magenta
|
||||||
|
palette.inkWhite, -- cyan
|
||||||
|
palette.oldWhite, -- white
|
||||||
|
palette.inkGray1, -- bright black
|
||||||
|
palette.zenRed, -- bright red
|
||||||
|
palette.inkGreen, -- bright green
|
||||||
|
palette.carpYellow, -- bright yellow
|
||||||
|
palette.springBlue, -- bright blue
|
||||||
|
palette.springViolet1, -- bright magenta
|
||||||
|
palette.zenAqua2, -- bright cyan
|
||||||
|
palette.inkWhite, -- bright white
|
||||||
|
palette.inkOrange, -- extended color 1
|
||||||
|
palette.inkOrange2, -- extended color 2
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
---@param palette PaletteColors
|
||||||
|
---@return ThemeColors
|
||||||
|
pearl = function(palette)
|
||||||
|
return {
|
||||||
|
ui = {
|
||||||
|
fg = palette.pearlInk0,
|
||||||
|
fg_dim = palette.pearlInk0,
|
||||||
|
fg_reverse = palette.pearlGray,
|
||||||
|
|
||||||
|
bg_dim = palette.pearlWhite0,
|
||||||
|
bg_gutter = palette.pearlWhite0,
|
||||||
|
|
||||||
|
bg_m3 = palette.pearlWhite0,
|
||||||
|
bg_m2 = palette.pearlWhite0,
|
||||||
|
bg_m1 = palette.pearlWhite0,
|
||||||
|
bg = palette.pearlWhite0,
|
||||||
|
bg_p1 = palette.pearlWhite1,
|
||||||
|
bg_p2 = palette.pearlWhite1,
|
||||||
|
|
||||||
|
nontext = palette.pearlViolet1,
|
||||||
|
whitespace = palette.pearlViolet1,
|
||||||
|
special = palette.pearlViolet2,
|
||||||
|
|
||||||
|
bg_visual = palette.pearlWhite2,
|
||||||
|
bg_search = palette.pearlBlue2,
|
||||||
|
|
||||||
|
cursor_line_nr_foreground = palette.pearlGray4,
|
||||||
|
cursor_line_nr_active_foreground = palette.inkBlack2,
|
||||||
|
cursor_bg = palette.fujiWhite,
|
||||||
|
cursor_fg = palette.inkBlack2,
|
||||||
|
|
||||||
|
pmenu = {
|
||||||
|
fg = palette.pearlInk2,
|
||||||
|
fg_sel = "NONE", -- This is important to make highlights pass-through
|
||||||
|
bg = palette.pearlBlue1,
|
||||||
|
bg_sel = palette.pearlBlue3,
|
||||||
|
bg_sbar = palette.pearlBlue1,
|
||||||
|
bg_thumb = palette.pearlBlue2,
|
||||||
|
},
|
||||||
|
float = {
|
||||||
|
fg = palette.pearlInk2,
|
||||||
|
bg = palette.pearlWhite0,
|
||||||
|
fg_border = palette.pearlGray2,
|
||||||
|
bg_border = palette.pearlWhite0,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
syn = {
|
||||||
|
string = palette.pearlGreen,
|
||||||
|
variable = "NONE",
|
||||||
|
number = palette.pearlPink,
|
||||||
|
constant = palette.pearlOrange,
|
||||||
|
identifier = palette.pearlViolet4,
|
||||||
|
parameter = palette.pearlBlue5,
|
||||||
|
fun = palette.pearlBlue4,
|
||||||
|
statement = palette.pearlViolet4,
|
||||||
|
keyword = palette.pearlViolet4,
|
||||||
|
operator = palette.pearlGray3,
|
||||||
|
preproc = palette.pearlGray2,
|
||||||
|
type = palette.pearlAqua,
|
||||||
|
regex = palette.pearlYellow2,
|
||||||
|
deprecated = palette.pearlGray3,
|
||||||
|
comment = palette.pearlGray3,
|
||||||
|
punct = palette.pearlGray3,
|
||||||
|
special1 = palette.pearlYellow2,
|
||||||
|
special2 = palette.pearlViolet4,
|
||||||
|
special3 = palette.pearlViolet4,
|
||||||
|
},
|
||||||
|
vcs = {
|
||||||
|
added = palette.pearlGreen2,
|
||||||
|
removed = palette.pearlRed2,
|
||||||
|
changed = palette.pearlYellow3,
|
||||||
|
},
|
||||||
|
diff = {
|
||||||
|
add = palette.pearlGreen3,
|
||||||
|
delete = palette.pearlRed4,
|
||||||
|
change = palette.pearlCyan,
|
||||||
|
text = palette.pearlYellow4,
|
||||||
|
},
|
||||||
|
diag = {
|
||||||
|
error = palette.pearlRed3,
|
||||||
|
ok = palette.pearlGreen,
|
||||||
|
warning = palette.pearlOrange2,
|
||||||
|
info = palette.pearlTeal3,
|
||||||
|
hint = palette.pearlAqua2,
|
||||||
|
},
|
||||||
|
term = {
|
||||||
|
palette.inkBlack2, -- black
|
||||||
|
palette.pearlRed, -- red
|
||||||
|
palette.pearlGreen, -- green
|
||||||
|
palette.pearlYellow, -- yellow
|
||||||
|
palette.pearlBlue4, -- blue
|
||||||
|
palette.pearlPink, -- magenta
|
||||||
|
palette.pearlAqua, -- cyan
|
||||||
|
palette.pearlInk0, -- white
|
||||||
|
palette.pearlGray3 , -- bright black
|
||||||
|
palette.pearlRed2, -- bright red
|
||||||
|
palette.pearlGreen2, -- bright green
|
||||||
|
palette.pearlYellow2, -- bright yellow
|
||||||
|
palette.pearlTeal2, -- bright blue
|
||||||
|
palette.pearlViolet4, -- bright magenta
|
||||||
|
palette.pearlAqua2, -- bright cyan
|
||||||
|
palette.pearlInk2, -- bright white
|
||||||
|
palette.pearlOrange2, -- extended color 1
|
||||||
|
palette.pearlRed3, -- extended color 2
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
local M = {}
|
||||||
|
local PATH_SEP = vim.loop.os_uname().version:match("Windows") and "\\" or "/"
|
||||||
|
|
||||||
|
local get_compiled_path = function(theme)
|
||||||
|
return table.concat({vim.fn.stdpath("state"), "kanso", theme .. "_compiled.lua"}, PATH_SEP)
|
||||||
|
end
|
||||||
|
|
||||||
|
---@return string theme
|
||||||
|
function M.get_theme_from_bg_opt()
|
||||||
|
local config = require("kanso").config
|
||||||
|
return config.theme[vim.o.background] or config.theme.default
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param theme string
|
||||||
|
---@param highlights table
|
||||||
|
---@param termcolors table
|
||||||
|
function M.compile(theme, highlights, termcolors)
|
||||||
|
vim.loop.fs_mkdir(vim.fn.stdpath("state") .. PATH_SEP .. "kanso", 448)
|
||||||
|
|
||||||
|
local fname = get_compiled_path(theme)
|
||||||
|
local file, err = io.open(fname, "wb")
|
||||||
|
if not file or err then
|
||||||
|
vim.notify("Kanso: Error writing " .. fname .. ":\n" .. err, vim.log.levels.ERROR)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local lines = {
|
||||||
|
"require'kanso'.compiled = string.dump(function()",
|
||||||
|
"local g = vim.g",
|
||||||
|
"local nvim_set_hl = vim.api.nvim_set_hl",
|
||||||
|
}
|
||||||
|
local inspect = vim.inspect
|
||||||
|
for hl, spec in pairs(highlights) do
|
||||||
|
if next(spec) then
|
||||||
|
table.insert(lines, ('nvim_set_hl(0, "%s", %s)'):format(hl, inspect(spec):gsub("%s", "")))
|
||||||
|
end
|
||||||
|
for i, tcolor in ipairs(termcolors) do
|
||||||
|
table.insert(lines, ('g["terminal_color_%d"] = "%s"'):format(i - 1, tcolor))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
table.insert(lines, "end)")
|
||||||
|
|
||||||
|
local blob = table.concat(lines, "\n")
|
||||||
|
assert(loadstring(blob, "=(compile)"))()
|
||||||
|
file:write(require("kanso").compiled)
|
||||||
|
file:close()
|
||||||
|
end
|
||||||
|
|
||||||
|
---@param theme string
|
||||||
|
---@return boolean status
|
||||||
|
function M.load_compiled(theme)
|
||||||
|
local f = loadfile(get_compiled_path(theme))
|
||||||
|
if f then
|
||||||
|
f()
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
|
return M
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
local theme = require("kanso.colors").setup().theme
|
||||||
|
|
||||||
|
local kanso = {}
|
||||||
|
|
||||||
|
kanso.normal = {
|
||||||
|
a = { bg = theme.syn.fun, fg = theme.ui.bg },
|
||||||
|
b = { bg = theme.diff.change, fg = theme.syn.fun },
|
||||||
|
c = { bg = theme.ui.bg, fg = theme.ui.fg },
|
||||||
|
}
|
||||||
|
|
||||||
|
kanso.insert = {
|
||||||
|
a = { bg = theme.diag.ok, fg = theme.ui.bg },
|
||||||
|
b = { bg = theme.ui.bg, fg = theme.diag.ok },
|
||||||
|
}
|
||||||
|
|
||||||
|
kanso.command = {
|
||||||
|
a = { bg = theme.syn.operator, fg = theme.ui.bg },
|
||||||
|
b = { bg = theme.ui.bg, fg = theme.syn.operator },
|
||||||
|
}
|
||||||
|
|
||||||
|
kanso.visual = {
|
||||||
|
a = { bg = theme.syn.keyword, fg = theme.ui.bg },
|
||||||
|
b = { bg = theme.ui.bg, fg = theme.syn.keyword },
|
||||||
|
}
|
||||||
|
|
||||||
|
kanso.replace = {
|
||||||
|
a = { bg = theme.syn.constant, fg = theme.ui.bg },
|
||||||
|
b = { bg = theme.ui.bg, fg = theme.syn.constant },
|
||||||
|
}
|
||||||
|
|
||||||
|
kanso.inactive = {
|
||||||
|
a = { bg = theme.ui.bg, fg = theme.ui.fg_dim },
|
||||||
|
b = { bg = theme.ui.bg, fg = theme.ui.fg_dim },
|
||||||
|
c = { bg = theme.ui.bg, fg = theme.ui.fg_dim },
|
||||||
|
}
|
||||||
|
|
||||||
|
if vim.g.kanso_lualine_bold then
|
||||||
|
for _, mode in pairs(kanso) do
|
||||||
|
mode.a.gui = "bold"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return kanso
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 2.0 MiB |
Reference in New Issue
Block a user