diff --git a/.luarc.json b/.luarc.json
new file mode 100644
index 0000000..ccbf482
--- /dev/null
+++ b/.luarc.json
@@ -0,0 +1,12 @@
+{
+ "workspace.library": [
+ "/usr/share/nvim/runtime",
+ "${3rd}/luv/library",
+ "${3rd}/busted/library",
+ "~/.local/share/nvim/lazy/solarized.nvim",
+ "${3rd}/luassert/library"
+ ],
+ "diagnostics.disable": [
+ "duplicate-doc-field"
+ ]
+}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..4393ff6
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,308 @@
+# Changelog
+
+## [3.3.0](https://github.com/maxmx03/solarized.nvim/compare/v3.2.0...v3.3.0) (2024-08-30)
+
+
+### Features
+
+* solarized theme based on seasons ([650dbd5](https://github.com/maxmx03/solarized.nvim/commit/650dbd58fe622a93ac93526476e597e91f810014))
+
+
+### Bug Fixes
+
+* **docs:** fix code example under Config Highlighs in README ([8ca7c63](https://github.com/maxmx03/solarized.nvim/commit/8ca7c63acc1edb2a7077900d295d53b4bc78eb9a))
+
+## [3.2.0](https://github.com/maxmx03/solarized.nvim/compare/v3.1.1...v3.2.0) (2024-08-29)
+
+
+### Features
+
+* hl group mason ([138bb8a](https://github.com/maxmx03/solarized.nvim/commit/138bb8aff8686428b668cec7c78cd67ab83b69e0))
+
+
+### Bug Fixes
+
+* solarized-dark diagnostics config ([e41b3cf](https://github.com/maxmx03/solarized.nvim/commit/e41b3cf6431918dcffcc2d9fac96a4e1cf4d5471))
+* solarized-light lazynormal bg ([8759a70](https://github.com/maxmx03/solarized.nvim/commit/8759a70227b3cfd00d9ece28804c56b296c8ff9d))
+
+## [3.1.1](https://github.com/maxmx03/solarized.nvim/compare/v3.1.0...v3.1.1) (2024-08-27)
+
+
+### Bug Fixes
+
+* some plugins was not enabled like ale,coc,leap ([d364127](https://github.com/maxmx03/solarized.nvim/commit/d3641274ca0849f35347a2824c46e4e6a8966c26))
+
+## [3.1.0](https://github.com/maxmx03/solarized.nvim/compare/v3.0.0...v3.1.0) (2024-08-27)
+
+
+### Features
+
+* ale,alpha,yanky,gitgutter,coc,leap ([d58a43b](https://github.com/maxmx03/solarized.nvim/commit/d58a43b9f7bc6f91273d8ae5ad9a8418dc25cc0c))
+* annotation for config ([10eb62f](https://github.com/maxmx03/solarized.nvim/commit/10eb62fe0f15a2732c86da6cc06dadf5824ff20f))
+* base4 for solarized-light ([abb2cae](https://github.com/maxmx03/solarized.nvim/commit/abb2cae5d36518a5ed4b7dc6cad5c00732343e7f))
+* docker-compose ([3a19787](https://github.com/maxmx03/solarized.nvim/commit/3a197875c76803e4a64d4b1491c6dd0d22b161cd))
+* highlight color for markup headings ([dfc4d62](https://github.com/maxmx03/solarized.nvim/commit/dfc4d6272513ed6f4debea9b5dc5352156b0f372))
+* lazynvim, ci test removed ([8ac84d6](https://github.com/maxmx03/solarized.nvim/commit/8ac84d6d2e8a8c6e390e68f95bf908338b07690c))
+* mix_base1, todocomments ([7c2a916](https://github.com/maxmx03/solarized.nvim/commit/7c2a91680281132d8ed27a2c046e476cd8e7f9b4))
+* more control over transparent ([10295bb](https://github.com/maxmx03/solarized.nvim/commit/10295bbfc93a1fe5eaf993cbac0fb4d7a606be17))
+* neogit ([8f48353](https://github.com/maxmx03/solarized.nvim/commit/8f48353da2a8fd998b5bb43a3135739ef0c342bb))
+* rendermarkdown highlights ([892e50a](https://github.com/maxmx03/solarized.nvim/commit/892e50a7df38e8af84dbb822a6f184ba348c9a23))
+* Solarized theme restructuring ([5b304a1](https://github.com/maxmx03/solarized.nvim/commit/5b304a17ae992a668b58689908b58b1d796de7de))
+* solarized-light.yml ([322be5d](https://github.com/maxmx03/solarized.nvim/commit/322be5da46dafa3e9482341108040baa8a1312cd))
+* solarized-light.yml, contributing.md ([6f127f8](https://github.com/maxmx03/solarized.nvim/commit/6f127f8257166b9f48550febb61c1b4d4a6c1d84))
+* solarized.yml ([f4e11fa](https://github.com/maxmx03/solarized.nvim/commit/f4e11fa69a1676059f78d104382c6e2ef7e1713d))
+* tests, styles config ([9a9399e](https://github.com/maxmx03/solarized.nvim/commit/9a9399e9a45057f17a261eb8433742c373893eff))
+
+
+### Bug Fixes
+
+* barbecue theme ([fb1997b](https://github.com/maxmx03/solarized.nvim/commit/fb1997be521d1a9cd0dcb2117178c5a158021662))
+* selenized and solarized extra colors ([10eb62f](https://github.com/maxmx03/solarized.nvim/commit/10eb62fe0f15a2732c86da6cc06dadf5824ff20f))
+* selenized base02 and base04 ([c84571d](https://github.com/maxmx03/solarized.nvim/commit/c84571d806ac7eb8445b502b40694f4fb689eb52))
+
+## [3.0.0](https://github.com/maxmx03/solarized.nvim/compare/v2.2.0...v3.0.0) (2024-05-13)
+
+
+### ⚠ BREAKING CHANGES
+
+* **palette:** Removal of base04
+ - Integrated Selenized color palette into the project.
+* The highlight and colors callbacks now accept only two parameters, colors and colorhelper table.
+
+### Features
+
+* .gitignore removed ([058a75e](https://github.com/maxmx03/solarized.nvim/commit/058a75eec8047a7631a1d3df61e86551def4715a))
+* Add support for nvim-notify in colorscheme ([221eb6b](https://github.com/maxmx03/solarized.nvim/commit/221eb6b54533fbeb2bf88daa4b521ecd4d2b4fe4))
+* Add support for packer.nvim in colorscheme ([55cbf08](https://github.com/maxmx03/solarized.nvim/commit/55cbf080cc611b83a101d179cd6fb0619036ec35))
+* barbecue ([5ad821f](https://github.com/maxmx03/solarized.nvim/commit/5ad821f366bb9d4e519ea9f3d1be95bed6cbd736))
+* extras highlight token ([c389ad2](https://github.com/maxmx03/solarized.nvim/commit/c389ad25069c8f2d89ff034b4cbbc7b20ef5bddd))
+* github workflows, vusted, stylua ([a630aa5](https://github.com/maxmx03/solarized.nvim/commit/a630aa5593719f9e133dd8eb7a83460c5bec2e25))
+* highlights for todo.nvim ([3d1e225](https://github.com/maxmx03/solarized.nvim/commit/3d1e225bc14a7257381d838d5ba75c5eb17844ae))
+* hl for noice-progress ([55506b1](https://github.com/maxmx03/solarized.nvim/commit/55506b1ebbb87425ab407e7aef24d123fc6cb4ae))
+* lazy ([4443451](https://github.com/maxmx03/solarized.nvim/commit/4443451e6fda256363dd3031654d565f2116a544))
+* lazy, packer hl groups ([5f155d9](https://github.com/maxmx03/solarized.nvim/commit/5f155d9991c23690e615e6c1e1484547ce2e697e))
+* neogit ([8318f74](https://github.com/maxmx03/solarized.nvim/commit/8318f74dc4e896e184d5c23b97de47eb6eca3faa))
+* neorg hl ([b4dbaaa](https://github.com/maxmx03/solarized.nvim/commit/b4dbaaa35457e6d824c9d5334c17596d4995d009))
+* **palette:** Add support for Selenized color palette ([3338aa4](https://github.com/maxmx03/solarized.nvim/commit/3338aa4d9b391d803b46a15eeadc31d4e341f313))
+* treesitter hl character.printf ([9c0cc96](https://github.com/maxmx03/solarized.nvim/commit/9c0cc96f6ec17e0ff0770e95fa991afa07105efc))
+* utils.math removed, colors hsl func removed, improv darken,lighten ([d618ab9](https://github.com/maxmx03/solarized.nvim/commit/d618ab9ea1a8ddbfa45dac1903f495311aa02b65))
+* vim-sneak ([84bfe3b](https://github.com/maxmx03/solarized.nvim/commit/84bfe3b44cfecb00d4bf45809cab7b0f48791cae))
+* zen-mode ([3465c6c](https://github.com/maxmx03/solarized.nvim/commit/3465c6c07581d3b286dbee2c38e4038a0e09324c))
+
+
+### Bug Fixes
+
+* base03 color ([9567554](https://github.com/maxmx03/solarized.nvim/commit/95675548f7ed9d615e38c9ea747ddb91d559fec3))
+* check if neovim is nightly to load advanced hl ([0963ad8](https://github.com/maxmx03/solarized.nvim/commit/0963ad836bbf038fe774b7fa21a7f7b49daee916))
+* color search,visual,telescope,winseparator ([ce004ce](https://github.com/maxmx03/solarized.nvim/commit/ce004ce2905b8b59f2068069fb3fccc7475d491d))
+* colorcolumn, incsearch, floatborder ([7b0181d](https://github.com/maxmx03/solarized.nvim/commit/7b0181d72f9f1ebc5647592c0a04e31976b2b86b))
+* Configuring highlight of type "variable" [#69](https://github.com/maxmx03/solarized.nvim/issues/69) ([a630aa5](https://github.com/maxmx03/solarized.nvim/commit/a630aa5593719f9e133dd8eb7a83460c5bec2e25))
+* indentblankline, whitespace, treesitter text hl ([76de882](https://github.com/maxmx03/solarized.nvim/commit/76de8824aa2d64b4bce5041f06ef8ebe1848d9a4))
+* inlay-hint ([fe803f1](https://github.com/maxmx03/solarized.nvim/commit/fe803f15e0b58246e557d80fc1cfa09dd3203e3e))
+* invalid color ([67ce0bb](https://github.com/maxmx03/solarized.nvim/commit/67ce0bb2c31d811ed83cb5d23b179be55dd9d263))
+* jsx tags, methods being italized, incsearch low contrast ([888695f](https://github.com/maxmx03/solarized.nvim/commit/888695fbcbb35a38e3522945cf1f217adfa3fea2))
+* LspInlayHint foreground color on light mode ([54a7b79](https://github.com/maxmx03/solarized.nvim/commit/54a7b797b1148b6ccab7538112e00d05db01c2c0))
+* neo editor winseparator ([54430f0](https://github.com/maxmx03/solarized.nvim/commit/54430f0084956e7fd0914d2f658020aa514f0aab))
+* neovim - signcolumn bg ([7357e0e](https://github.com/maxmx03/solarized.nvim/commit/7357e0e366c8360f90bb43a3ead9d7744e65de04))
+* solarized setup ([595bd9a](https://github.com/maxmx03/solarized.nvim/commit/595bd9a233cc23c387924769dfc3550f294d0ac8))
+* telescope selection ([85ac187](https://github.com/maxmx03/solarized.nvim/commit/85ac187a2339b058e76d89828803fccb416de16d))
+* tests ([058a75e](https://github.com/maxmx03/solarized.nvim/commit/058a75eec8047a7631a1d3df61e86551def4715a))
+* treesitter parameter style was not being overridden by config ([2f59f9d](https://github.com/maxmx03/solarized.nvim/commit/2f59f9d152a0d7f89c65c70105a5ae5803e28023))
+* vscode_theme ([b6cd0ff](https://github.com/maxmx03/solarized.nvim/commit/b6cd0ffc4667a10fa704ffa053066f5253d1f349))
+
+
+### Code Refactoring
+
+* Update Solarized Theme ([f076342](https://github.com/maxmx03/solarized.nvim/commit/f0763424b368ae7878d5aef33f5d1487c8fd2133))
+
+## [2.2.0](https://github.com/maxmx03/solarized.nvim/compare/v2.1.0...v2.2.0) (2024-05-13)
+
+
+### Features
+
+* .gitignore removed ([058a75e](https://github.com/maxmx03/solarized.nvim/commit/058a75eec8047a7631a1d3df61e86551def4715a))
+* github workflows, vusted, stylua ([a630aa5](https://github.com/maxmx03/solarized.nvim/commit/a630aa5593719f9e133dd8eb7a83460c5bec2e25))
+* treesitter hl character.printf ([9c0cc96](https://github.com/maxmx03/solarized.nvim/commit/9c0cc96f6ec17e0ff0770e95fa991afa07105efc))
+
+
+### Bug Fixes
+
+* Configuring highlight of type "variable" [#69](https://github.com/maxmx03/solarized.nvim/issues/69) ([a630aa5](https://github.com/maxmx03/solarized.nvim/commit/a630aa5593719f9e133dd8eb7a83460c5bec2e25))
+* tests ([058a75e](https://github.com/maxmx03/solarized.nvim/commit/058a75eec8047a7631a1d3df61e86551def4715a))
+
+## [2.3.0](https://github.com/maxmx03/solarized.nvim/compare/v2.2.0...v2.3.0) (2024-03-28)
+
+
+### Features
+
+* .gitignore removed ([54bac30](https://github.com/maxmx03/solarized.nvim/commit/54bac309d17eb29a04555ab7b0140090afa407ae))
+
+
+### Bug Fixes
+
+* tests ([54bac30](https://github.com/maxmx03/solarized.nvim/commit/54bac309d17eb29a04555ab7b0140090afa407ae))
+
+## [2.2.0](https://github.com/maxmx03/solarized.nvim/compare/v2.1.0...v2.2.0) (2024-03-28)
+
+
+### Features
+
+* github workflows, vusted, stylua ([6a34504](https://github.com/maxmx03/solarized.nvim/commit/6a34504272cef236da45ba12ca8ef2c1b7417b36))
+
+
+### Bug Fixes
+
+* Configuring highlight of type "[@variable](https://github.com/variable)" [#69](https://github.com/maxmx03/solarized.nvim/issues/69) ([6a34504](https://github.com/maxmx03/solarized.nvim/commit/6a34504272cef236da45ba12ca8ef2c1b7417b36))
+
+## [2.1.0](https://github.com/maxmx03/solarized.nvim/compare/v2.0.0...v2.1.0) (2023-12-24)
+
+
+### Features
+
+* hl for noice-progress ([55506b1](https://github.com/maxmx03/solarized.nvim/commit/55506b1ebbb87425ab407e7aef24d123fc6cb4ae))
+
+## [2.0.0](https://github.com/maxmx03/solarized.nvim/compare/v1.6.0...v2.0.0) (2023-12-23)
+
+
+### ⚠ BREAKING CHANGES
+
+* **palette:** Removal of base04
+ - Integrated Selenized color palette into the project.
+
+### Features
+
+* **palette:** Add support for Selenized color palette ([3338aa4](https://github.com/maxmx03/solarized.nvim/commit/3338aa4d9b391d803b46a15eeadc31d4e341f313))
+
+## [1.6.0](https://github.com/maxmx03/solarized.nvim/compare/v1.5.0...v1.6.0) (2023-12-21)
+
+
+### Features
+
+* extras highlight token ([c389ad2](https://github.com/maxmx03/solarized.nvim/commit/c389ad25069c8f2d89ff034b4cbbc7b20ef5bddd))
+
+## [1.5.0](https://github.com/maxmx03/solarized.nvim/compare/v1.4.0...v1.5.0) (2023-12-21)
+
+
+### Features
+
+* utils.math removed, colors hsl func removed, improv darken,lighten ([d618ab9](https://github.com/maxmx03/solarized.nvim/commit/d618ab9ea1a8ddbfa45dac1903f495311aa02b65))
+
+## [1.4.0](https://github.com/maxmx03/solarized.nvim/compare/v1.3.0...v1.4.0) (2023-12-19)
+
+
+### Features
+
+* zen-mode ([3465c6c](https://github.com/maxmx03/solarized.nvim/commit/3465c6c07581d3b286dbee2c38e4038a0e09324c))
+
+## [1.3.0](https://github.com/maxmx03/solarized.nvim/compare/v1.2.0...v1.3.0) (2023-12-18)
+
+
+### Features
+
+* highlights for todo.nvim ([3d1e225](https://github.com/maxmx03/solarized.nvim/commit/3d1e225bc14a7257381d838d5ba75c5eb17844ae))
+
+## [1.2.0](https://github.com/maxmx03/solarized.nvim/compare/v1.1.1...v1.2.0) (2023-12-15)
+
+
+### Features
+
+* barbecue ([5ad821f](https://github.com/maxmx03/solarized.nvim/commit/5ad821f366bb9d4e519ea9f3d1be95bed6cbd736))
+
+
+### Bug Fixes
+
+* inlay-hint ([fe803f1](https://github.com/maxmx03/solarized.nvim/commit/fe803f15e0b58246e557d80fc1cfa09dd3203e3e))
+
+## [1.1.1](https://github.com/maxmx03/solarized.nvim/compare/v1.1.0...v1.1.1) (2023-12-06)
+
+
+### Bug Fixes
+
+* solarized setup ([595bd9a](https://github.com/maxmx03/solarized.nvim/commit/595bd9a233cc23c387924769dfc3550f294d0ac8))
+
+## [1.1.0](https://github.com/maxmx03/solarized.nvim/compare/v1.0.7...v1.1.0) (2023-11-26)
+
+
+### Features
+
+* neogit ([8318f74](https://github.com/maxmx03/solarized.nvim/commit/8318f74dc4e896e184d5c23b97de47eb6eca3faa))
+
+## [1.0.7](https://github.com/maxmx03/solarized.nvim/compare/v1.0.6...v1.0.7) (2023-10-31)
+
+
+### Bug Fixes
+
+* jsx tags, methods being italized, incsearch low contrast ([888695f](https://github.com/maxmx03/solarized.nvim/commit/888695fbcbb35a38e3522945cf1f217adfa3fea2))
+
+## [1.0.6](https://github.com/maxmx03/solarized.nvim/compare/v1.0.5...v1.0.6) (2023-10-02)
+
+
+### Bug Fixes
+
+* telescope selection ([85ac187](https://github.com/maxmx03/solarized.nvim/commit/85ac187a2339b058e76d89828803fccb416de16d))
+
+## [1.0.5](https://github.com/maxmx03/solarized.nvim/compare/v1.0.4...v1.0.5) (2023-08-17)
+
+
+### Bug Fixes
+
+* treesitter parameter style was not being overridden by config ([2f59f9d](https://github.com/maxmx03/solarized.nvim/commit/2f59f9d152a0d7f89c65c70105a5ae5803e28023))
+
+## [1.0.4](https://github.com/maxmx03/solarized.nvim/compare/v1.0.3...v1.0.4) (2023-07-06)
+
+
+### Bug Fixes
+
+* LspInlayHint foreground color on light mode ([54a7b79](https://github.com/maxmx03/solarized.nvim/commit/54a7b797b1148b6ccab7538112e00d05db01c2c0))
+
+## [1.0.3](https://github.com/maxmx03/solarized.nvim/compare/v1.0.2...v1.0.3) (2023-07-06)
+
+
+### Bug Fixes
+
+* colorcolumn, incsearch, floatborder ([7b0181d](https://github.com/maxmx03/solarized.nvim/commit/7b0181d72f9f1ebc5647592c0a04e31976b2b86b))
+
+## [1.0.2](https://github.com/maxmx03/solarized.nvim/compare/v1.0.1...v1.0.2) (2023-07-01)
+
+
+### Bug Fixes
+
+* neo editor winseparator ([54430f0](https://github.com/maxmx03/solarized.nvim/commit/54430f0084956e7fd0914d2f658020aa514f0aab))
+
+## [1.0.1](https://github.com/maxmx03/solarized.nvim/compare/v1.0.0...v1.0.1) (2023-06-29)
+
+
+### Bug Fixes
+
+* indentblankline, whitespace, treesitter text hl ([76de882](https://github.com/maxmx03/solarized.nvim/commit/76de8824aa2d64b4bce5041f06ef8ebe1848d9a4))
+
+## 1.0.0 (2023-06-29)
+
+
+### ⚠ BREAKING CHANGES
+
+* The highlight and colors callbacks now accept only two parameters, colors and colorhelper table.
+
+### Features
+
+* Add support for nvim-notify in colorscheme ([221eb6b](https://github.com/maxmx03/solarized.nvim/commit/221eb6b54533fbeb2bf88daa4b521ecd4d2b4fe4))
+* Add support for packer.nvim in colorscheme ([55cbf08](https://github.com/maxmx03/solarized.nvim/commit/55cbf080cc611b83a101d179cd6fb0619036ec35))
+* lazy ([4443451](https://github.com/maxmx03/solarized.nvim/commit/4443451e6fda256363dd3031654d565f2116a544))
+* lazy, packer hl groups ([5f155d9](https://github.com/maxmx03/solarized.nvim/commit/5f155d9991c23690e615e6c1e1484547ce2e697e))
+* neorg hl ([b4dbaaa](https://github.com/maxmx03/solarized.nvim/commit/b4dbaaa35457e6d824c9d5334c17596d4995d009))
+* vim-sneak ([84bfe3b](https://github.com/maxmx03/solarized.nvim/commit/84bfe3b44cfecb00d4bf45809cab7b0f48791cae))
+
+
+### Bug Fixes
+
+* base03 color ([9567554](https://github.com/maxmx03/solarized.nvim/commit/95675548f7ed9d615e38c9ea747ddb91d559fec3))
+* check if neovim is nightly to load advanced hl ([0963ad8](https://github.com/maxmx03/solarized.nvim/commit/0963ad836bbf038fe774b7fa21a7f7b49daee916))
+* color search,visual,telescope,winseparator ([ce004ce](https://github.com/maxmx03/solarized.nvim/commit/ce004ce2905b8b59f2068069fb3fccc7475d491d))
+* invalid color ([67ce0bb](https://github.com/maxmx03/solarized.nvim/commit/67ce0bb2c31d811ed83cb5d23b179be55dd9d263))
+* neovim - signcolumn bg ([7357e0e](https://github.com/maxmx03/solarized.nvim/commit/7357e0e366c8360f90bb43a3ead9d7744e65de04))
+* vscode_theme ([b6cd0ff](https://github.com/maxmx03/solarized.nvim/commit/b6cd0ffc4667a10fa704ffa053066f5253d1f349))
+
+
+### Code Refactoring
+
+* Update Solarized Theme ([f076342](https://github.com/maxmx03/solarized.nvim/commit/f0763424b368ae7878d5aef33f5d1487c8fd2133))
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..66e0583
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,188 @@
+# Contributing to `solarized.nvim`
+
+Thank you for your interest in contributing to Solarized!
+Whether you're here to improve existing features, add new themes, fix bugs, or
+enhance documentation, your contributions are highly valued.
+
+## Usage & Development
+
+Solarized flips between light and dark modes. In each mode, four monotones
+form the core values (with an optional fifth for emphasized content).
+
+### Manipulating colors
+
+When it comes to manipulating colors, I recommend using the following online
+tools. These resources are excellent for creating tints, shades, and blends,
+
+- [maketintshade](https://maketintsandshades.com/)
+- [pinetools](https://pinetools.com/blend-colors)
+- [colordesigner](https://colordesigner.io/)
+- [colorblender](https://github.com/maxmx03/colorblender)
+
+Additionally, I provide custom functions for color manipulation within the
+plugin. These functions are designed to give users more control over their
+colorscheme.
+
+### Solarized Dark
+
+> [!NOTE]
+> The normal relationship for
+> background and body text is `base03:base0`, text can be highlighted using a
+> combiation of `base02:base1`
+
+| Name | Hex | Description |
+| ------- | ------- | ------------------------------------------ |
+| base03 | #002b36 | background |
+| base02 | #073642 | background highlight |
+| base01 | #586e75 | comments / secondary comment |
+| base00 | #657b83 | none |
+| base0 | #839496 | body text / default code / primary content |
+| base1 | #93a1a1 | optional emphasized content |
+| base2 | #eee8d5 | none |
+| base3 | #fdf6e3 | none |
+| yellow | #b58900 | optional |
+| orange | #cb4b16 | optional |
+| red | #dc322f | optional |
+| magenta | #d33682 | optional |
+| violet | #6c71c4 | optional |
+| blue | #268bd2 | optional |
+| cyan | #2aa198 | optional |
+| green | #859900 | optional |
+
+#### Solarized Dark Extra colors
+
+- [pinetool](https://pinetools.com/blend-colors)
+- [colorblender](https://github.com/maxmx03/colorblender)
+
+| Name | Hex (balance 70 / 0.3) | Description |
+| ----------- | ---------------------- | --------------------------------- |
+| base04 | #002731 | sidebar background / float window |
+| mix_yellow | #364725 | yellow + base03 / optional |
+| mix_orange | #3c342c | orange + base03 / optional |
+| mix_red | #422d33 | red + base03 / optional |
+| mix_magenta | #3f2e4c | magenta + base03 / optional |
+| mix_violet | #204060 | violet + base03 / optional |
+| mix_blue | #0b4764 | blue + base03 / optional |
+| mix_cyan | #0c4e53 | cyan + base03 / optional |
+| mix_green | #274c25 | green + base03 / optional |
+| mix_base1 | #2C4E56 | base1 + base03 / visual |
+
+### Selenized Dark
+
+| Name | Hex | Description |
+| ------- | ------- | ------------------------------------------ |
+| base03 | #103c48 | background |
+| base02 | #184956 | background highlight |
+| base01 | #72898f | comments / secondary comment |
+| base00 | #53676d | none |
+| base0 | #adbcbc | body text / default code / primary content |
+| base1 | #cad8d9 | optional emphasized content |
+| base2 | #ece3cc | none |
+| base3 | #fbf3db | none |
+| yellow | #dbb32d | optional |
+| orange | #ed8649 | optional |
+| red | #fa5750 | optional |
+| magenta | #f275be | optional |
+| violet | #af88eb | optional |
+| blue | #4695f7 | optional |
+| cyan | #41c7b9 | optional |
+| green | #75b938 | optional |
+
+#### Selenized Dark Extra colors
+
+| Name | Hex (balance 70 / 0.3) | Description |
+| ----------- | ---------------------- | --------------------------------- |
+| base04 | #0e3641 | sidebar background / float window |
+| mix_yellow | #4c5f3f | yellow + base03 / optional |
+| mix_orange | #525248 | orange + base03 / optional |
+| mix_red | #56444a | red + base03 / optional |
+| mix_magenta | #534d6b | magenta + base03 / optional |
+| mix_violet | #3f5278 | violet + base03 / optional |
+| mix_blue | #20567c | blue + base03 / optional |
+| mix_cyan | #1e6569 | cyan + base03 / optional |
+| mix_green | #2e6143 | green + base03 / optional |
+| mix_base1 | #486B74 | green + base03 / optional |
+
+### Solarized Light
+
+> [!NOTE]
+> The normal relationship for
+> background and body text is `base3:base00`, text can be highlighted using a
+> combiation of `base2:base01`
+
+| Name | Hex | Description |
+| ------- | ------- | ------------------------------------------ |
+| base03 | #002b36 | none |
+| base02 | #073642 | none |
+| base01 | #586e75 | optional emphasized content |
+| base00 | #657b83 | body text / default code / primary content |
+| base0 | #839496 | none |
+| base1 | #93a1a1 | comments / secondary content |
+| base2 | #eee8d5 | background highlights |
+| base3 | #fdf6e3 | background |
+| yellow | #b58900 | optional |
+| orange | #cb4b16 | optional |
+| red | #dc322f | optional |
+| magenta | #d33682 | optional |
+| violet | #6c71c4 | optional |
+| blue | #268bd2 | optional |
+| cyan | #2aa198 | optional |
+| green | #859900 | optional |
+
+#### Solarized Light Extra colors
+
+- [pinetool](https://pinetools.com/blend-colors)
+- [colorblender](https://github.com/maxmx03/colorblender)
+
+| Name | Hex (balance 90, 0.1) | Description |
+| ----------- | ------------------------- | --------------------------------- |
+| mix_yellow | #f5ebcc | yellow + base3 / optional |
+| mix_orange | #f8e4ce | orange + base3 /optional |
+| mix_red | #f9e2d1 | red + base3 / optional |
+| mix_magenta | #f8e2d9 | magenta + base3 / optional |
+| mix_violet | #eee8df | violet + base3 / optional |
+| mix_blue | #e7ebe1 | blue + base3 / optional |
+| mix_cyan | #e7eddb | cyan + base3 / optional |
+| mix_green | #f1eccc | green + base3 /optional |
+| base4 | #fbf3db (selenized base3) | sidebar background / float window |
+| mix_base01 | #CCCDC2 | indent blankline |
+
+### Selenized Light
+
+| Name | Hex | Description |
+| ------- | ------- | ------------------------------------------ |
+| base03 | #103c48 | none |
+| base02 | #184956 | none |
+| base01 | #3a4d53 | optional emphasized content |
+| base00 | #53676d | body text / default code / primary content |
+| base0 | #adbcbc | none |
+| base1 | #909995 | comments / secondary content |
+| base2 | #ece3cc | background highlights |
+| base3 | #fbf3db | background |
+| yellow | #ad8900 | optional |
+| orange | #c25d1e | optional |
+| red | #d2212d | optional |
+| magenta | #ca4898 | optional |
+| violet | #8762c6 | optional |
+| blue | #0072d4 | optional |
+| cyan | #009c8f | optional |
+| green | #489100 | optional |
+
+#### Selenized Light Extra colors
+
+| Name | Hex (balance 90) | Description |
+| ----------- | ---------------- | -------------------------- |
+| mix_yellow | #f3e8c5 | yellow + base3 / optional |
+| mix_orange | #f5e4c8 | orange + base3 / optional |
+| mix_red | #f6dec9 | red + base3 / optional |
+| mix_magenta | #f6e1d4 | magenta + base3 / optional |
+| mix_violet | #efe4d8 | violet + base3 / optional |
+| mix_blue | #e1e6da | blue + base3 / optional |
+| mix_cyan | #e1ead3 | cyan + base3 / optional |
+| mix_green | #e9e9c5 | green + base3 / optional |
+| mix_base01 | #CACBBC | indent blankline |
+
+## Solarized & Selenized Website
+
+- [ethanschoonover](https://ethanschoonover.com/solarized/)
+- [jan-warchol](https://github.com/jan-warchol/selenized/blob/master/README.md)
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..0d713e8
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,7 @@
+FROM archlinux
+WORKDIR /solarized
+COPY . .
+RUN pacman -Syu --noconfirm
+RUN pacman -S luarocks neovim gcc lua51 --noconfirm
+RUN luarocks install luacheck && luarocks --lua-version=5.1 install vusted
+CMD [ "vusted", "./tests" ]
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..8ec32ab
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2022 Max Miliano
+
+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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..bdfd6fc
--- /dev/null
+++ b/README.md
@@ -0,0 +1,471 @@
+
+
+
Solarized
+
+![Neovim](https://img.shields.io/badge/Neovim-v0.9.1+-blue?NeoVim-%2357A143.svg?&style=for-the-badge&logo=neovim&logoColor=white)
+![LICENSE](https://shields.io/badge/LICENSE-MIT-orange?style=for-the-badge)
+
+
+
+Solarized is a sixteen color palette (eight monotones, eight accent colors)
+designed for use with terminal and gui applications.
+[click here to learn more](https://ethanschoonover.com/solarized/)
+
+![Component 1](https://github.com/user-attachments/assets/11d8bd97-0f99-4413-937a-a5eaf4b2a4db)
+
+
+
+- [Features](#features)
+- [Requirements](#requirements)
+- [Install from package manager](#install-from-package-manager)
+- [Solarized's Annotations](#solarizeds-annotations)
+ - [Using `lspconfig`](#using-lspconfig)
+ - [Using `.luarc.json`](#using-luarcjson)
+- [Manual Installation](#manual-installation)
+- [Docs](#docs)
+- [Commands](#commands)
+- [Default Config](#default-config)
+- [Config Variant](#config-variant)
+- [Config Transparency](#config-transparency)
+- [Config Styles](#config-styles)
+- [Config Highlights](#config-highlights)
+- [Config Colors](#config-colors)
+- [Config Plugins](#config-plugins)
+- [Config Error Lens](#config-error-lens)
+- [Lualine](#lualine)
+- [Barbecue](#barbecue)
+- [Api](#api)
+- [Contributing](#contributing)
+- [Designed by](#designed-by)
+- [Credits and Reference](#credits-and-reference)
+
+
+## Features
+
+- Support for Treesitter
+- Support for Semantic highlight
+- Customizability: styles, colors and highlights can all be modified
+- Plugin compatibility
+- Provides users with the option to enable or disable highlight groups
+- Selenized color palette
+
+## Requirements
+
+Before using the Solarized Colorscheme, please make sure you have the following
+requirements installed:
+
+- `Neovim v0.9.1+`
+- [nvim-treesitter](https://github.com/nvim-treesitter/nvim-treesitter)
+
+## Install from package manager
+
+Download using your preferred package manager.
+
+[lazy](https://github.com/folke/lazy.nvim)
+
+```lua
+return {
+ 'maxmx03/solarized.nvim',
+ lazy = false,
+ priority = 1000,
+ ---@type solarized.config
+ opts = {},
+ config = function(_, opts)
+ vim.o.termguicolors = true
+ vim.o.background = 'light'
+ require('solarized').setup(opts)
+ vim.cmd.colorscheme 'solarized'
+ end,
+}
+```
+
+[packer](https://github.com/wbthomason/packer.nvim)
+
+```lua
+use {
+ 'maxmx03/solarized.nvim',
+ config = function()
+ vim.o.background = 'dark'
+ ---@type solarized
+ local solarized = require('solarized')
+ vim.o.termguicolors = true
+ vim.o.background = 'dark'
+ solarized.setup({})
+ vim.cmd.colorscheme 'solarized'
+ end
+}
+```
+
+## Solarized's Annotations
+
+### Using `lspconfig`
+
+```lua
+ local lsp_config = require 'lspconfig'
+ lsp_config.lua_ls.setup {
+ settings = {
+ Lua = {
+ hint = {
+ enable = true,
+ },
+ runtime = {
+ version = 'LuaJIT',
+ },
+ workspace = {
+ checkThirdParty = true,
+ library = {
+ vim.env.VIMRUNTIME,
+ '~/.local/share/nvim/lazy/solarized.nvim',
+ },
+ },
+ },
+ },
+ }
+```
+
+### Using `.luarc.json`
+
+```json
+{
+ "workspace.library": ["/path/to/nvim/runtime", "/path/to/solarized.nvim"]
+}
+```
+
+## Manual Installation
+
+To manually install Solarized, follow these steps:
+
+1. Download the stable release of Solarized.
+2. Extract the contents of the release.
+3. Locate the following folders in the extracted files: `after`, `colors`,
+ `lua`, `plugin`.
+4. Copy these folders to the `~/.config/nvim` directory.
+
+## Docs
+
+Use `:h solarized.nvim.txt` to see docs
+
+## Commands
+
+- `:Solarized colors` - Display the Solarized palette in a new buffer
+
+## Default Config
+
+```lua
+vim.o.background = 'dark'
+
+-- default config
+require('solarized').setup({
+ transparent = {
+ enabled = false,
+ pmenu = true,
+ normal = true,
+ normalfloat = true,
+ neotree = true,
+ nvimtree = true,
+ whichkey = true,
+ telescope = true,
+ lazy = true,
+ },
+ on_highlights = nil,
+ on_colors = nil,
+ palette = 'solarized', -- solarized (default) | selenized
+ variant = 'winter', -- "spring" | "summer" | "autumn" | "winter" (default)
+ error_lens = {
+ text = false,
+ symbol = false,
+ },
+ styles = {
+ types = {},
+ functions = {},
+ parameters = {},
+ comments = {},
+ strings = {},
+ keywords = {},
+ variables = {},
+ constants = {},
+ },
+ plugins = {
+ treesitter = true,
+ lspconfig = true,
+ navic = true,
+ cmp = true,
+ indentblankline = true,
+ neotree = true,
+ nvimtree = true,
+ whichkey = true,
+ dashboard = true,
+ gitsigns = true,
+ telescope = true,
+ noice = true,
+ hop = true,
+ ministatusline = true,
+ minitabline = true,
+ ministarter = true,
+ minicursorword = true,
+ notify = true,
+ rainbowdelimiters = true,
+ bufferline = true,
+ lazy = true,
+ rendermarkdown = true,
+ ale = true,
+ coc = true,
+ leap = true,
+ alpha = true,
+ yanky = true,
+ gitgutter = true,
+ },
+})
+
+vim.cmd.colorscheme = 'solarized'
+```
+
+## Config Variant
+
+Solarized includes four variants: spring, summer, autumn, and winter.
+
+[preview](https://github.com/maxmx03/solarized.nvim/blob/main/VARIANTS.md)
+
+```lua
+require('solarized').setup {
+ variant = 'winter', -- "spring" | "summer" | "autumn" | "winter" (default)
+}
+```
+
+## Config Transparency
+
+By default, transparency is turned off, but you can easily enable it and
+customize which specific UI components should be transparent.
+
+```lua
+require('solarized').setup {
+ transparent = {
+ enabled = true, -- Master switch to enable transparency
+ pmenu = true, -- Popup menu (e.g., autocomplete suggestions)
+ normal = true, -- Main editor window background
+ normalfloat = true, -- Floating windows
+ neotree = true, -- Neo-tree file explorer
+ nvimtree = true, -- Nvim-tree file explorer
+ whichkey = true, -- Which-key popup
+ telescope = true, -- Telescope fuzzy finder
+ lazy = true, -- Lazy plugin manager UI
+ mason = true, -- Mason manage external tooling
+ },
+}
+```
+
+## Config Styles
+
+The `styles` config allows you to customize the style of a highlight
+group.
+
+```lua
+---@type solarized.styles
+local styles = {
+ comments = { italic = true, bold = false },
+ functions = { italic = true },
+ variables = { italic = false },
+}
+require('solarized').setup({
+ styles = styles,
+})
+```
+
+## Config Highlights
+
+The `highlights` config allows you to customize the highlights groups.
+
+example:
+
+```lua
+require('solarized').setup {
+ on_highlights = function (colors, color)
+ local darken = color.darken
+ local lighten = color.lighten
+ local blend = color.blend
+ local shade = color.shade
+ local tint = color.tint
+
+ ---@type solarized.highlights
+ local groups = {
+ Visual = { bg = colors.base02, standout = true },
+ Function = { fg = colors.yellow },
+ IncSearch = { fg = colors.orange, bg = colors.mix_orange },
+ Search = { fg = colors.violet, bg = shade(colors.violet, 5) },
+ NormalFloat = { bg = darken(colors.base03, 25) }
+ }
+
+ return groups
+ end
+}
+```
+
+## Config Colors
+
+The `colors` config allows you to extend or modify the color palette used by
+solarized.
+
+> [!TIP]
+> Use `:Solarized colors` to see available colors.
+
+example:
+
+```lua
+require('solarized').setup {
+ on_colors = function(colors, color)
+ local lighten = color.tint
+ local darken = color.darken
+
+ return {
+ fg = lighten(colors.base00, 2),
+ bg = darken(colors.base03, 30)
+ }
+ end,
+ highlights = function(colors)
+ return {
+ Normal = { fg = colors.fg, bg = colors.bg }
+ }
+ end
+}
+```
+
+## Config Plugins
+
+The plugins config allows you to enable or disable solarized support for
+spefic plugins or neovim's default highlights
+
+example:
+
+```lua
+return {
+ 'maxmx03/solarized.nvim',
+ lazy = false,
+ priority = 1000,
+ ---@type solarized.config
+ opts = {
+ plugins = {
+ navic = false,
+ nvimtree = false,
+ dashboard = false,
+ noice = false,
+ ministatusline = false,
+ minitabline = false,
+ ministarter = false,
+ rainbowdelimiters = false,
+ }
+ },
+ config = function(_, opts)
+ require('solarized').setup(opts)
+ vim.cmd.colorscheme 'solarized'
+ end,
+}
+```
+
+## Config Error Lens
+
+Enables additional highlights for diagnostic virtual text and symbols.
+
+```lua
+return {
+ 'maxmx03/solarized.nvim',
+ lazy = false,
+ priority = 1000,
+ ---@type solarized.config
+ opts = {
+ error_lens = {
+ text = true,
+ symbol = true,
+ }
+ },
+ config = function(_, opts)
+ require('solarized').setup(opts)
+ vim.cmd.colorscheme 'solarized'
+ end,
+}
+```
+
+## Lualine
+
+```lua
+require('lualine').setup {
+ options = {
+ theme = 'solarized',
+ -- theme = 'selenized',
+ disabled_filetypes = {
+ 'NvimTree',
+ },
+ },
+}
+```
+
+Alternatively, to utilize Lualine's Solarized theme:
+
+```lua
+require('lualine').setup {
+ options = {
+ theme = require('lualine.themes.solarized')
+ }
+}
+```
+
+To use the Solarized theme showcased in the screenshot for Lualine [click here](https://github.com/maxmx03/solarized.nvim/discussions/50)
+
+## Barbecue
+
+```lua
+require('barbecue').setup {
+ theme = 'solarized',
+}
+```
+
+## Api
+
+```lua
+---@type solarized.palette
+local colors = require('solarized.utils').get_colors()
+---@type solarized.color
+local color = require('solarized.color')
+local darken = color.darken
+local lighten = color.lighten
+local blend = color.blend
+local shade = color.shade
+local tint = color.tint
+
+-- example 1: get shades
+for i = 1, 10, 1 do
+ print(shade(colors.yellow, i))
+end
+
+for i = 1, 100, 10 do
+ print(darken(colors.yellow, i))
+end
+
+-- example 2: get tints
+for i = 1, 10, 1 do
+ print(tint(colors.yellow, i))
+end
+
+for i = 1, 100, 10 do
+ print(lighten(colors.yellow, i))
+end
+
+-- example 3: blend color
+local new_color = blend(colors.yellow, colors.base03, 0.2)
+```
+
+## Contributing
+
+Pull requests are welcome and appreciated.
+
+## Designed by
+
+[![Ethan Schoonover](https://github.com/altercation.png?size=100)](https://github.com/altercation)
+
+Ethan Schoonover
+
+## Credits and Reference
+
+- [solarized-vim](https://github.com/altercation/vim-colors-solarized)
+- [tokyonight](https://github.com/folke/tokyonight.nvim)
+
+[![Raphael](https://github.com/glepnir.png?size=100)](https://github.com/glepnir)
diff --git a/VARIANTS.md b/VARIANTS.md
new file mode 100644
index 0000000..2952cfa
--- /dev/null
+++ b/VARIANTS.md
@@ -0,0 +1,17 @@
+# Variants
+
+autumn
+
+![autumn](https://github.com/user-attachments/assets/bcc3cd16-a613-42ac-a74a-69a4da8a866a)
+
+spring
+
+![spring](https://github.com/user-attachments/assets/eb84a3d3-faa3-48b7-b52e-6728d6d65801)
+
+winter
+
+![winter](https://github.com/user-attachments/assets/7ae41baa-8916-4612-8468-0579b93aee72)
+
+summer
+
+![summer](https://github.com/user-attachments/assets/3ea208ac-abd0-4386-85a3-032c11547cb5)
diff --git a/after/queries/css/highlights.scm b/after/queries/css/highlights.scm
new file mode 100644
index 0000000..f5b7553
--- /dev/null
+++ b/after/queries/css/highlights.scm
@@ -0,0 +1,7 @@
+; extends
+((plain_value) @constant (#set! "priority" 125))
+((selectors) @type (#set! "priority" 125))
+(tag_name) @tag
+(unit) @keyword
+(integer_value) @number
+(property_name) @field
diff --git a/after/queries/javascript/highlights.scm b/after/queries/javascript/highlights.scm
new file mode 100644
index 0000000..530b26f
--- /dev/null
+++ b/after/queries/javascript/highlights.scm
@@ -0,0 +1,5 @@
+; extends
+
+(jsx_self_closing_element (identifier) @tag (#set! "priority" 127))
+(jsx_opening_element (identifier) @tag (#set! "priority" 127))
+(jsx_closing_element (identifier) @tag (#set! "priority" 127))
diff --git a/after/queries/lua/highlights.scm b/after/queries/lua/highlights.scm
new file mode 100644
index 0000000..51d101d
--- /dev/null
+++ b/after/queries/lua/highlights.scm
@@ -0,0 +1,3 @@
+; extends
+
+(function_call (identifier) @function (#set! "priority" 130))
diff --git a/after/queries/scss/highlights.scm b/after/queries/scss/highlights.scm
new file mode 100644
index 0000000..016faf8
--- /dev/null
+++ b/after/queries/scss/highlights.scm
@@ -0,0 +1,3 @@
+; extends
+((nesting_selector) @keyword (#set! "priority" 125))
+(declaration (variable_value) @string)
diff --git a/after/queries/tsx/highlights.scm b/after/queries/tsx/highlights.scm
new file mode 100644
index 0000000..530b26f
--- /dev/null
+++ b/after/queries/tsx/highlights.scm
@@ -0,0 +1,5 @@
+; extends
+
+(jsx_self_closing_element (identifier) @tag (#set! "priority" 127))
+(jsx_opening_element (identifier) @tag (#set! "priority" 127))
+(jsx_closing_element (identifier) @tag (#set! "priority" 127))
diff --git a/colors/solarized.lua b/colors/solarized.lua
new file mode 100644
index 0000000..f46a1ec
--- /dev/null
+++ b/colors/solarized.lua
@@ -0,0 +1,5 @@
+-- Solarized colorscheme
+-- Repo: maxmx03/solarized.nvim
+-- Maintainer: Milianor github.com/maxmx03
+-- License: MIT License
+require('solarized').load()
diff --git a/doc/solarized.nvim.txt b/doc/solarized.nvim.txt
new file mode 100644
index 0000000..cd246ea
--- /dev/null
+++ b/doc/solarized.nvim.txt
@@ -0,0 +1,518 @@
+*solarized.nvim.txt* For NVIM v0.9.4 Last change: 2024 September 06
+
+==============================================================================
+Table of Contents *solarized.nvim-table-of-contents*
+
+ - Features |solarized.nvim-features|
+ - Requirements |solarized.nvim-requirements|
+ - Install from package manager |solarized.nvim-install-from-package-manager|
+ - Solarized’s Annotations |solarized.nvim-solarized’s-annotations|
+ - Manual Installation |solarized.nvim-manual-installation|
+ - Docs |solarized.nvim-docs|
+ - Commands |solarized.nvim-commands|
+ - Default Config |solarized.nvim-default-config|
+ - Config Variant |solarized.nvim-config-variant|
+ - Config Transparency |solarized.nvim-config-transparency|
+ - Config Styles |solarized.nvim-config-styles|
+ - Config Highlights |solarized.nvim-config-highlights|
+ - Config Colors |solarized.nvim-config-colors|
+ - Config Plugins |solarized.nvim-config-plugins|
+ - Config Error Lens |solarized.nvim-config-error-lens|
+ - Lualine |solarized.nvim-lualine|
+ - Barbecue |solarized.nvim-barbecue|
+ - Api |solarized.nvim-api|
+ - Contributing |solarized.nvim-contributing|
+ - Designed by |solarized.nvim-designed-by|
+ - Credits and Reference |solarized.nvim-credits-and-reference|
+1. Links |solarized.nvim-links|
+
+Solarized is a sixteen color palette (eight monotones, eight accent colors)
+designed for use with terminal and gui applications. click here to learn more
+
+
+- |solarized.nvim-features|
+- |solarized.nvim-requirements|
+- |solarized.nvim-install-from-package-manager|
+- |solarized.nvim-solarized’s-annotations|
+ - |solarized.nvim-using-`lspconfig`|
+ - |solarized.nvim-using-`.luarc.json`|
+- |solarized.nvim-manual-installation|
+- |solarized.nvim-docs|
+- |solarized.nvim-commands|
+- |solarized.nvim-default-config|
+- |solarized.nvim-config-variant|
+- |solarized.nvim-config-transparency|
+- |solarized.nvim-config-styles|
+- |solarized.nvim-config-highlights|
+- |solarized.nvim-config-colors|
+- |solarized.nvim-config-plugins|
+- |solarized.nvim-config-error-lens|
+- |solarized.nvim-lualine|
+- |solarized.nvim-barbecue|
+- |solarized.nvim-api|
+- |solarized.nvim-contributing|
+- |solarized.nvim-designed-by|
+- |solarized.nvim-credits-and-reference|
+
+
+FEATURES *solarized.nvim-features*
+
+- Support for Treesitter
+- Support for Semantic highlight
+- Customizability: styles, colors and highlights can all be modified
+- Plugin compatibility
+- Provides users with the option to enable or disable highlight groups
+- Selenized color palette
+
+
+REQUIREMENTS *solarized.nvim-requirements*
+
+Before using the Solarized Colorscheme, please make sure you have the following
+requirements installed:
+
+- `Neovim v0.9.1+`
+- nvim-treesitter
+
+
+INSTALL FROM PACKAGE MANAGER *solarized.nvim-install-from-package-manager*
+
+Download using your preferred package manager.
+
+lazy
+
+>lua
+ return {
+ 'maxmx03/solarized.nvim',
+ lazy = false,
+ priority = 1000,
+ ---@type solarized.config
+ opts = {},
+ config = function(_, opts)
+ vim.o.termguicolors = true
+ vim.o.background = 'light'
+ require('solarized').setup(opts)
+ vim.cmd.colorscheme 'solarized'
+ end,
+ }
+<
+
+packer
+
+>lua
+ use {
+ 'maxmx03/solarized.nvim',
+ config = function()
+ vim.o.background = 'dark'
+ ---@type solarized
+ local solarized = require('solarized')
+ vim.o.termguicolors = true
+ vim.o.background = 'dark'
+ solarized.setup({})
+ vim.cmd.colorscheme 'solarized'
+ end
+ }
+<
+
+
+SOLARIZED’S ANNOTATIONS *solarized.nvim-solarized’s-annotations*
+
+
+USING LSPCONFIG ~
+
+>lua
+ local lsp_config = require 'lspconfig'
+ lsp_config.lua_ls.setup {
+ settings = {
+ Lua = {
+ hint = {
+ enable = true,
+ },
+ runtime = {
+ version = 'LuaJIT',
+ },
+ workspace = {
+ checkThirdParty = true,
+ library = {
+ vim.env.VIMRUNTIME,
+ '~/.local/share/nvim/lazy/solarized.nvim',
+ },
+ },
+ },
+ },
+ }
+<
+
+
+USING .LUARC.JSON ~
+
+>json
+ {
+ "workspace.library": ["/path/to/nvim/runtime", "/path/to/solarized.nvim"]
+ }
+<
+
+
+MANUAL INSTALLATION *solarized.nvim-manual-installation*
+
+To manually install Solarized, follow these steps:
+
+1. Download the stable release of Solarized.
+2. Extract the contents of the release.
+3. Locate the following folders in the extracted files: `after`, `colors`,
+`lua`, `plugin`.
+4. Copy these folders to the `~/.config/nvim` directory.
+
+
+DOCS *solarized.nvim-docs*
+
+Use |solarized.nvim.txt| to see docs
+
+
+COMMANDS *solarized.nvim-commands*
+
+- `:Solarized colors` - Display the Solarized palette in a new buffer
+
+
+DEFAULT CONFIG *solarized.nvim-default-config*
+
+>lua
+ vim.o.background = 'dark'
+
+ -- default config
+ require('solarized').setup({
+ transparent = {
+ enabled = false,
+ pmenu = true,
+ normal = true,
+ normalfloat = true,
+ neotree = true,
+ nvimtree = true,
+ whichkey = true,
+ telescope = true,
+ lazy = true,
+ },
+ on_highlights = nil,
+ on_colors = nil,
+ palette = 'solarized', -- solarized (default) | selenized
+ variant = 'winter', -- "spring" | "summer" | "autumn" | "winter" (default)
+ error_lens = {
+ text = false,
+ symbol = false,
+ },
+ styles = {
+ types = {},
+ functions = {},
+ parameters = {},
+ comments = {},
+ strings = {},
+ keywords = {},
+ variables = {},
+ constants = {},
+ },
+ plugins = {
+ treesitter = true,
+ lspconfig = true,
+ navic = true,
+ cmp = true,
+ indentblankline = true,
+ neotree = true,
+ nvimtree = true,
+ whichkey = true,
+ dashboard = true,
+ gitsigns = true,
+ telescope = true,
+ noice = true,
+ hop = true,
+ ministatusline = true,
+ minitabline = true,
+ ministarter = true,
+ minicursorword = true,
+ notify = true,
+ rainbowdelimiters = true,
+ bufferline = true,
+ lazy = true,
+ rendermarkdown = true,
+ ale = true,
+ coc = true,
+ leap = true,
+ alpha = true,
+ yanky = true,
+ gitgutter = true,
+ },
+ })
+
+ vim.cmd.colorscheme = 'solarized'
+<
+
+
+CONFIG VARIANT *solarized.nvim-config-variant*
+
+Solarized includes four variants: spring, summer, autumn, and winter.
+
+preview
+
+>lua
+ require('solarized').setup {
+ variant = 'winter', -- "spring" | "summer" | "autumn" | "winter" (default)
+ }
+<
+
+
+CONFIG TRANSPARENCY *solarized.nvim-config-transparency*
+
+By default, transparency is turned off, but you can easily enable it and
+customize which specific UI components should be transparent.
+
+>lua
+ require('solarized').setup {
+ transparent = {
+ enabled = true, -- Master switch to enable transparency
+ pmenu = true, -- Popup menu (e.g., autocomplete suggestions)
+ normal = true, -- Main editor window background
+ normalfloat = true, -- Floating windows
+ neotree = true, -- Neo-tree file explorer
+ nvimtree = true, -- Nvim-tree file explorer
+ whichkey = true, -- Which-key popup
+ telescope = true, -- Telescope fuzzy finder
+ lazy = true, -- Lazy plugin manager UI
+ mason = true, -- Mason manage external tooling
+ },
+ }
+<
+
+
+CONFIG STYLES *solarized.nvim-config-styles*
+
+The `styles` config allows you to customize the style of a highlight group.
+
+>lua
+ ---@type solarized.styles
+ local styles = {
+ comments = { italic = true, bold = false },
+ functions = { italic = true },
+ variables = { italic = false },
+ }
+ require('solarized').setup({
+ styles = styles,
+ })
+<
+
+
+CONFIG HIGHLIGHTS *solarized.nvim-config-highlights*
+
+The `highlights` config allows you to customize the highlights groups.
+
+example:
+
+>lua
+ require('solarized').setup {
+ on_highlights = function (colors, color)
+ local darken = color.darken
+ local lighten = color.lighten
+ local blend = color.blend
+ local shade = color.shade
+ local tint = color.tint
+
+ ---@type solarized.highlights
+ local groups = {
+ Visual = { bg = colors.base02, standout = true },
+ Function = { fg = colors.yellow },
+ IncSearch = { fg = colors.orange, bg = colors.mix_orange },
+ Search = { fg = colors.violet, bg = shade(colors.violet, 5) },
+ NormalFloat = { bg = darken(colors.base03, 25) }
+ }
+
+ return groups
+ end
+ }
+<
+
+
+CONFIG COLORS *solarized.nvim-config-colors*
+
+The `colors` config allows you to extend or modify the color palette used by
+solarized.
+
+
+ [!TIP] Use `:Solarized colors` to see available colors.
+example:
+
+>lua
+ require('solarized').setup {
+ on_colors = function(colors, color)
+ local lighten = color.tint
+ local darken = color.darken
+
+ return {
+ fg = lighten(colors.base00, 2),
+ bg = darken(colors.base03, 30)
+ }
+ end,
+ highlights = function(colors)
+ return {
+ Normal = { fg = colors.fg, bg = colors.bg }
+ }
+ end
+ }
+<
+
+
+CONFIG PLUGINS *solarized.nvim-config-plugins*
+
+The plugins config allows you to enable or disable solarized support for spefic
+plugins or neovim’s default highlights
+
+example:
+
+>lua
+ return {
+ 'maxmx03/solarized.nvim',
+ lazy = false,
+ priority = 1000,
+ ---@type solarized.config
+ opts = {
+ plugins = {
+ navic = false,
+ nvimtree = false,
+ dashboard = false,
+ noice = false,
+ ministatusline = false,
+ minitabline = false,
+ ministarter = false,
+ rainbowdelimiters = false,
+ }
+ },
+ config = function(_, opts)
+ require('solarized').setup(opts)
+ vim.cmd.colorscheme 'solarized'
+ end,
+ }
+<
+
+
+CONFIG ERROR LENS *solarized.nvim-config-error-lens*
+
+Enables additional highlights for diagnostic virtual text and symbols.
+
+>lua
+ return {
+ 'maxmx03/solarized.nvim',
+ lazy = false,
+ priority = 1000,
+ ---@type solarized.config
+ opts = {
+ error_lens = {
+ text = true,
+ symbol = true,
+ }
+ },
+ config = function(_, opts)
+ require('solarized').setup(opts)
+ vim.cmd.colorscheme 'solarized'
+ end,
+ }
+<
+
+
+LUALINE *solarized.nvim-lualine*
+
+>lua
+ require('lualine').setup {
+ options = {
+ theme = 'solarized',
+ -- theme = 'selenized',
+ disabled_filetypes = {
+ 'NvimTree',
+ },
+ },
+ }
+<
+
+Alternatively, to utilize Lualine’s Solarized theme:
+
+>lua
+ require('lualine').setup {
+ options = {
+ theme = require('lualine.themes.solarized')
+ }
+ }
+<
+
+To use the Solarized theme showcased in the screenshot for Lualine click here
+
+
+
+BARBECUE *solarized.nvim-barbecue*
+
+>lua
+ require('barbecue').setup {
+ theme = 'solarized',
+ }
+<
+
+
+API *solarized.nvim-api*
+
+>lua
+ ---@type solarized.palette
+ local colors = require('solarized.utils').get_colors()
+ ---@type solarized.color
+ local color = require('solarized.color')
+ local darken = color.darken
+ local lighten = color.lighten
+ local blend = color.blend
+ local shade = color.shade
+ local tint = color.tint
+
+ -- example 1: get shades
+ for i = 1, 10, 1 do
+ print(shade(colors.yellow, i))
+ end
+
+ for i = 1, 100, 10 do
+ print(darken(colors.yellow, i))
+ end
+
+ -- example 2: get tints
+ for i = 1, 10, 1 do
+ print(tint(colors.yellow, i))
+ end
+
+ for i = 1, 100, 10 do
+ print(lighten(colors.yellow, i))
+ end
+
+ -- example 3: blend color
+ local new_color = blend(colors.yellow, colors.base03, 0.2)
+<
+
+
+CONTRIBUTING *solarized.nvim-contributing*
+
+Pull requests are welcome and appreciated.
+
+
+DESIGNED BY *solarized.nvim-designed-by*
+
+
+
+Ethan Schoonover
+
+
+CREDITS AND REFERENCE *solarized.nvim-credits-and-reference*
+
+- solarized-vim
+- tokyonight
+
+
+
+==============================================================================
+1. Links *solarized.nvim-links*
+
+1. *Component 1*: https://github.com/user-attachments/assets/11d8bd97-0f99-4413-937a-a5eaf4b2a4db
+2. *Ethan Schoonover*: https://github.com/altercation.png?size=100
+3. *Raphael*: https://github.com/glepnir.png?size=100
+
+Generated by panvimdoc
+
+vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..f605310
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,8 @@
+services:
+ solarized:
+ build: .
+ volumes:
+ - solarized:/solarized
+
+volumes:
+ solarized:
diff --git a/lua/barbecue/theme/solarized.lua b/lua/barbecue/theme/solarized.lua
new file mode 100644
index 0000000..e61e848
--- /dev/null
+++ b/lua/barbecue/theme/solarized.lua
@@ -0,0 +1,78 @@
+local config = require 'solarized.config'
+if vim.o.background == 'dark' then
+ local palette = require 'solarized.palette'
+ local c = palette[config.palette]
+ return {
+ normal = {},
+ ellipsis = { fg = c.base0 },
+ separator = { link = 'Keyword' },
+ modified = { fg = c.diag_warning },
+ dirname = { link = 'Directory' },
+ basename = { fg = c.base0, bold = true },
+ context = { fg = c.base0 },
+ context_file = { fg = c.base0 },
+ context_module = { link = 'Type' },
+ context_namespace = { link = 'Type' },
+ context_package = { link = 'Directory' },
+ context_class = { link = 'Type' },
+ context_method = { link = 'Function' },
+ context_property = { link = 'Identifier' },
+ context_field = { link = 'Identifier' },
+ context_constructor = { link = 'Type' },
+ context_enum = { link = 'Type' },
+ context_interface = { link = 'Type' },
+ context_function = { link = 'Function' },
+ context_variable = { link = 'Identifier' },
+ context_constant = { link = 'Constant' },
+ context_string = { link = 'String' },
+ context_number = { link = 'Number' },
+ context_boolean = { link = 'Boolean' },
+ context_array = { link = 'Delimiter' },
+ context_object = { link = 'Identifier' },
+ context_key = { link = 'Delimiter' },
+ context_null = { link = 'Constant' },
+ context_enum_member = { link = 'Constant' },
+ context_struct = { link = 'Structure' },
+ context_event = { fg = c.yellow },
+ context_operator = { link = 'Operator' },
+ context_type_parameter = { link = 'Type' },
+ }
+else
+ local palette = require 'solarized.palette.solarized-light'
+ local c = palette[config.palette]
+ return {
+ normal = {},
+ ellipsis = { fg = c.base00 },
+ separator = { link = 'Keyword' },
+ modified = { fg = c.diag_warning },
+ dirname = { link = 'Directory' },
+ basename = { fg = c.base00, bold = true },
+ context = { fg = c.base00 },
+ context_file = { fg = c.base00 },
+ context_module = { link = 'Type' },
+ context_namespace = { link = 'Type' },
+ context_package = { link = 'Directory' },
+ context_class = { link = 'Type' },
+ context_method = { link = 'Function' },
+ context_property = { link = 'Identifier' },
+ context_field = { link = 'Identifier' },
+ context_constructor = { link = 'Type' },
+ context_enum = { link = 'Type' },
+ context_interface = { link = 'Type' },
+ context_function = { link = 'Function' },
+ context_variable = { link = 'Identifier' },
+ context_constant = { link = 'Constant' },
+ context_string = { link = 'String' },
+ context_number = { link = 'Number' },
+ context_boolean = { link = 'Boolean' },
+ context_array = { link = 'Delimiter' },
+ context_object = { link = 'Identifier' },
+ context_key = { link = 'Delimiter' },
+ context_null = { link = 'Constant' },
+ context_enum_member = { link = 'Constant' },
+ context_struct = { link = 'Structure' },
+ context_event = { fg = c.yellow },
+ context_operator = { link = 'Operator' },
+ context_type_parameter = { link = 'Type' },
+ }
+end
diff --git a/lua/lualine/themes/selenized.lua b/lua/lualine/themes/selenized.lua
new file mode 100644
index 0000000..831c89d
--- /dev/null
+++ b/lua/lualine/themes/selenized.lua
@@ -0,0 +1,47 @@
+if vim.o.background == 'dark' then
+ local palette = require 'solarized.palette'
+ local c = palette.selenized
+ return {
+ normal = {
+ a = { fg = c.base03, bg = c.blue, gui = 'bold' },
+ b = { fg = c.base02, bg = c.base1 },
+ c = { fg = c.base1, bg = c.base02 },
+ z = { fg = c.base03, bg = c.blue },
+ },
+ insert = {
+ a = { fg = c.base03, bg = c.green },
+ },
+ visual = {
+ a = { fg = c.base03, bg = c.magenta },
+ },
+ replace = {
+ a = { fg = c.base03, bg = c.red },
+ },
+ command = {
+ a = { fg = c.base03, bg = c.orange },
+ },
+ }
+else
+ local palette = require 'solarized.palette'
+ local c = palette.selenized
+ return {
+ normal = {
+ a = { fg = c.base3, bg = c.blue, gui = 'bold' },
+ b = { fg = c.base2, bg = c.base01 },
+ c = { fg = c.base01, bg = c.base2 },
+ z = { fg = c.base3, bg = c.blue },
+ },
+ insert = {
+ a = { fg = c.base3, bg = c.green },
+ },
+ visual = {
+ a = { fg = c.base3, bg = c.magenta },
+ },
+ replace = {
+ a = { fg = c.base3, bg = c.red },
+ },
+ command = {
+ a = { fg = c.base3, bg = c.orange },
+ },
+ }
+end
diff --git a/lua/lualine/themes/solarized.lua b/lua/lualine/themes/solarized.lua
new file mode 100644
index 0000000..7996fa8
--- /dev/null
+++ b/lua/lualine/themes/solarized.lua
@@ -0,0 +1,47 @@
+if vim.o.background == 'dark' then
+ local palette = require 'solarized.palette'
+ local c = palette.solarized
+ return {
+ normal = {
+ a = { fg = c.base03, bg = c.blue, gui = 'bold' },
+ b = { fg = c.base02, bg = c.base1 },
+ c = { fg = c.base1, bg = c.base02 },
+ z = { fg = c.base03, bg = c.blue },
+ },
+ insert = {
+ a = { fg = c.base03, bg = c.green },
+ },
+ visual = {
+ a = { fg = c.base03, bg = c.magenta },
+ },
+ replace = {
+ a = { fg = c.base03, bg = c.red },
+ },
+ command = {
+ a = { fg = c.base03, bg = c.orange },
+ },
+ }
+else
+ local palette = require 'solarized.palette'
+ local c = palette.solarized
+ return {
+ normal = {
+ a = { fg = c.base3, bg = c.blue, gui = 'bold' },
+ b = { fg = c.base2, bg = c.base01 },
+ c = { fg = c.base01, bg = c.base2 },
+ z = { fg = c.base3, bg = c.blue },
+ },
+ insert = {
+ a = { fg = c.base3, bg = c.green },
+ },
+ visual = {
+ a = { fg = c.base3, bg = c.magenta },
+ },
+ replace = {
+ a = { fg = c.base3, bg = c.red },
+ },
+ command = {
+ a = { fg = c.base3, bg = c.orange },
+ },
+ }
+end
diff --git a/lua/solarized/color.lua b/lua/solarized/color.lua
new file mode 100644
index 0000000..a4d469f
--- /dev/null
+++ b/lua/solarized/color.lua
@@ -0,0 +1,86 @@
+---@class solarized.color
+---@field hex_to_rgb fun(hex: string): number, number, number
+---@field rgb_to_hex fun(red: number, green: number, blue: number): string
+---@field darken fun(hex: string, percentage: number): string
+---@field lighten fun(hex: string, percentage: number): string
+---@field shade fun(hex: string, i: number): string
+---@field tint fun(hex: string, i: number): string
+---@field blend fun(fg: string, bg: string, alpha: number): string
+local M = {}
+
+function M.hex_to_rgb(hex)
+ local red = tonumber(hex:sub(2, 3), 16)
+ local green = tonumber(hex:sub(4, 5), 16)
+ local blue = tonumber(hex:sub(6, 7), 16)
+ return red, green, blue
+end
+
+function M.rgb_to_hex(red, green, blue)
+ return string.format('#%02x%02x%02x', red, green, blue)
+end
+
+function M.darken(hex, percentage)
+ local red, green, blue = M.hex_to_rgb(hex)
+ local i = 1
+ local result = {
+ red = red * (1 - (percentage / 100) * i),
+ green = green * (1 - (percentage / 100) * i),
+ blue = blue * (1 - (percentage / 100) * i),
+ }
+ return M.rgb_to_hex(result.red, result.green, result.blue)
+end
+
+function M.lighten(color, percentage)
+ local red, green, blue = M.hex_to_rgb(color)
+ local i = 1
+ local result = {
+ red = red + (255 - red) * i * (percentage / 100),
+ green = green + (255 - green) * i * (percentage / 100),
+ blue = blue + (255 - blue) * i * (percentage / 100),
+ }
+ return M.rgb_to_hex(result.red, result.green, result.blue)
+end
+
+function M.shade(hex, i)
+ local red, green, blue = M.hex_to_rgb(hex)
+ local result = {
+ red = red * (1 - 0.1 * i),
+ green = green * (1 - 0.1 * i),
+ blue = blue * (1 - 0.1 * i),
+ }
+ return M.rgb_to_hex(result.red, result.green, result.blue)
+end
+
+function M.tint(hex, i)
+ local red, green, blue = M.hex_to_rgb(hex)
+ local result = {
+ red = red + (255 - red) * i * 0.1,
+ green = green + (255 - green) * i * 0.1,
+ blue = blue + (255 - blue) * i * 0.1,
+ }
+ return M.rgb_to_hex(result.red, result.green, result.blue)
+end
+
+---@param fg number
+---@param bg number
+---@param alpha number
+---@return number
+local function blend_channel(fg, bg, alpha)
+ local ret = alpha * fg + ((1 - alpha) * bg)
+ local min = math.min
+ local max = math.max
+ local floor = math.floor
+ return floor(min(max(0, ret), 255) + 0.5)
+end
+
+function M.blend(fg, bg, alpha)
+ local red_bg, green_bg, blue_bg = M.hex_to_rgb(bg)
+ local red_fg, green_fg, blue_fg = M.hex_to_rgb(fg)
+ return M.rgb_to_hex(
+ blend_channel(red_fg, red_bg, alpha),
+ blend_channel(green_fg, green_bg, alpha),
+ blend_channel(blue_fg, blue_bg, alpha)
+ )
+end
+
+return M
diff --git a/lua/solarized/command.lua b/lua/solarized/command.lua
new file mode 100644
index 0000000..73d076d
--- /dev/null
+++ b/lua/solarized/command.lua
@@ -0,0 +1,70 @@
+local command = {}
+
+local subcommands = {
+ colors = function(_)
+ local config = require 'solarized.config'
+ local palette = require 'solarized.palette'
+ local colors = palette[config.palette]
+
+ local buf = vim.api.nvim_create_buf(true, true)
+ local max_length = vim.tbl_count(colors)
+
+ local function color_desc(color)
+ local colors_desc = {
+ base03 = 'background (dark)',
+ base02 = 'background highlight (dark)',
+ base01 = 'comments (dark)',
+ base00 = 'foreground (light)',
+ base0 = 'foreground (dark)',
+ base1 = 'comments (light)',
+ base2 = ' background highlight (light)',
+ base3 = 'background (light)',
+ }
+ local desc = colors_desc[color]
+
+ if not desc then
+ return ''
+ end
+
+ return desc
+ end
+
+ local function set_lines(color, hex, line)
+ vim.api.nvim_buf_set_lines(buf, line, (line + 1), false, {
+ color
+ .. string.rep('.', max_length - #color)
+ .. ' = "'
+ .. tostring(hex)
+ .. '" '
+ .. color_desc(color),
+ })
+ return line + 1
+ end
+
+ local line = 0
+ for color, hex in pairs(colors) do
+ if type(hex) == 'table' then
+ for c, h in pairs(hex) do
+ line = set_lines(c, h, line)
+ end
+ else
+ line = set_lines(color, hex, line)
+ end
+ end
+
+ vim.api.nvim_set_option_value('modifiable', false, { buf = buf })
+ vim.api.nvim_set_option_value('filetype', 'Solarized', { buf = buf })
+ vim.api.nvim_buf_set_name(buf, 'Solarized Colors')
+ vim.api.nvim_win_set_buf(0, buf)
+ end,
+}
+
+function command.list()
+ return vim.tbl_keys(subcommands)
+end
+
+function command.load(cmd, arg)
+ subcommands[cmd](arg)
+end
+
+return command
diff --git a/lua/solarized/config.lua b/lua/solarized/config.lua
new file mode 100644
index 0000000..bb41ac3
--- /dev/null
+++ b/lua/solarized/config.lua
@@ -0,0 +1,135 @@
+---@class solarized.transparent
+---@field normal? boolean
+---@field normalfloat? boolean
+---@field pmenu? boolean
+---@field neotree? boolean
+---@field nvimtree? boolean
+---@field telescope? boolean
+---@field whichkey? boolean
+---@field lazy? boolean
+---@field mason? boolean
+---@field enabled? boolean
+
+---@class solarized.styles
+---@field types? vim.api.keyset.highlight
+---@field functions? vim.api.keyset.highlight
+---@field parameters? vim.api.keyset.highlight
+---@field comments? vim.api.keyset.highlight
+---@field strings? vim.api.keyset.highlight
+---@field keywords? vim.api.keyset.highlight
+---@field variables? vim.api.keyset.highlight
+---@field constants? vim.api.keyset.highlight
+---@field statements? vim.api.keyset.highlight
+
+---@class solarized.plugins
+---@field treesitter? boolean
+---@field lspconfig? boolean
+---@field navic? boolean
+---@field cmp? boolean
+---@field indentblankline? boolean
+---@field neotree? boolean
+---@field nvimtree? boolean
+---@field whichkey? boolean
+---@field dashboard? boolean
+---@field gitsigns? boolean
+---@field telescope? boolean
+---@field noice? boolean
+---@field hop? boolean
+---@field ministatusline? boolean
+---@field minitabline? boolean
+---@field ministarter? boolean
+---@field minicursorword? boolean
+---@field notify? boolean
+---@field rainbowdelimiters? boolean
+---@field bufferline? boolean
+---@field lazy? boolean
+---@field rendermarkdown? boolean
+---@field neogit? boolean
+---@field todocomments? boolean
+---@field ale? boolean
+---@field alpha? boolean
+---@field yanky? boolean
+---@field gitgutter? boolean
+---@field coc? boolean
+---@field leap? boolean
+---@field mason? boolean
+
+---@class solarized.error_lens
+---@field text? boolean
+---@field symbol? boolean
+
+---@class solarized.config
+---@field transparent? solarized.transparent
+---@field on_highlights? fun(colors: solarized.palette, color: solarized.color): solarized.highlights
+---@field on_colors? fun(colors: solarized.palette, color: solarized.color): solarized.palette
+---@field styles? solarized.styles
+---@field palette? "solarized" | "selenized"
+---@field variant? "spring" | "summer" | "autumn" | "winter"
+---@field plugins? solarized.plugins
+---@field error_lens? solarized.error_lens
+return {
+ transparent = {
+ enabled = false,
+ pmenu = true,
+ normal = true,
+ normalfloat = true,
+ neotree = true,
+ nvimtree = true,
+ whichkey = true,
+ telescope = true,
+ lazy = true,
+ mason = true,
+ },
+ on_highlights = nil,
+ on_colors = nil,
+ palette = 'solarized',
+ variant = 'winter',
+ error_lens = {
+ text = false,
+ symbol = false,
+ },
+ styles = {
+ types = {},
+ functions = {},
+ parameters = {},
+ comments = {},
+ strings = {},
+ keywords = {},
+ variables = {},
+ statements = {},
+ constants = {},
+ },
+ plugins = {
+ treesitter = true,
+ lspconfig = true,
+ navic = true,
+ cmp = true,
+ indentblankline = true,
+ neotree = true,
+ nvimtree = true,
+ whichkey = true,
+ dashboard = true,
+ gitsigns = true,
+ telescope = true,
+ noice = true,
+ hop = true,
+ ministatusline = true,
+ minitabline = true,
+ ministarter = true,
+ minicursorword = true,
+ notify = true,
+ rainbowdelimiters = true,
+ bufferline = true,
+ lazy = true,
+ rendermarkdown = true,
+ neogit = true,
+ todocomments = true,
+ ale = true,
+ coc = true,
+ leap = true,
+ alpha = true,
+ yanky = true,
+ gitgutter = true,
+ mason = true,
+ },
+}
diff --git a/lua/solarized/highlights/init.lua b/lua/solarized/highlights/init.lua
new file mode 100644
index 0000000..0546068
--- /dev/null
+++ b/lua/solarized/highlights/init.lua
@@ -0,0 +1,1191 @@
+---@class solarized.highlights
+---@field ColorColumn? vim.api.keyset.highlight
+---@field Conceal? vim.api.keyset.highlight
+---@field CurSearch? vim.api.keyset.highlight
+---@field Cursor? vim.api.keyset.highlight
+---@field lCursor? vim.api.keyset.highlight
+---@field CursorIM? vim.api.keyset.highlight
+---@field CursorColumn? vim.api.keyset.highlight
+---@field CursorLine? vim.api.keyset.highlight
+---@field Directory? vim.api.keyset.highlight
+---@field DiffAdd? vim.api.keyset.highlight
+---@field DiffChange? vim.api.keyset.highlight
+---@field DiffDelete? vim.api.keyset.highlight
+---@field DiffText? vim.api.keyset.highlight
+---@field EndOfBuffer? vim.api.keyset.highlight
+---@field TermCursor? vim.api.keyset.highlight
+---@field TermCursorNC? vim.api.keyset.highlight
+---@field ErrorMsg? vim.api.keyset.highlight
+---@field WinSeparator? vim.api.keyset.highlight
+---@field Folded? vim.api.keyset.highlight
+---@field FoldColumn? vim.api.keyset.highlight
+---@field SignColumn? vim.api.keyset.highlight
+---@field IncSearch? vim.api.keyset.highlight
+---@field Substitute? vim.api.keyset.highlight
+---@field LineNr? vim.api.keyset.highlight
+---@field LineNrAbove? vim.api.keyset.highlight
+---@field LineNrBelow? vim.api.keyset.highlight
+---@field CursorLineNr? vim.api.keyset.highlight
+---@field CursorLineFold? vim.api.keyset.highlight
+---@field CursorLineSign? vim.api.keyset.highlight
+---@field MatchParen? vim.api.keyset.highlight
+---@field ModeMsg? vim.api.keyset.highlight
+---@field MsgArea? vim.api.keyset.highlight
+---@field MsgSeparator? vim.api.keyset.highlight
+---@field MoreMsg? vim.api.keyset.highlight
+---@field NonText? vim.api.keyset.highlight
+---@field Normal? vim.api.keyset.highlight
+---@field NormalFloat? vim.api.keyset.highlight
+---@field FloatBorder? vim.api.keyset.highlight
+---@field FloatTitle? vim.api.keyset.highlight
+---@field NormalNC? vim.api.keyset.highlight
+---@field Pmenu? vim.api.keyset.highlight
+---@field PmenuSel? vim.api.keyset.highlight
+---@field PmenuKind? vim.api.keyset.highlight
+---@field PmenuKindSel? vim.api.keyset.highlight
+---@field PmenuExtra? vim.api.keyset.highlight
+---@field PmenuExtraSel? vim.api.keyset.highlight
+---@field PmenuSbar? vim.api.keyset.highlight
+---@field PmenuThumb? vim.api.keyset.highlight
+---@field Question? vim.api.keyset.highlight
+---@field QuickFixLine? vim.api.keyset.highlight
+---@field Search? vim.api.keyset.highlight
+---@field SpecialKey? vim.api.keyset.highlight
+---@field SpellBad? vim.api.keyset.highlight
+---@field SpellCap? vim.api.keyset.highlight
+---@field SpellLocal? vim.api.keyset.highlight
+---@field SpellRare? vim.api.keyset.highlight
+---@field StatusLine? vim.api.keyset.highlight
+---@field StatusLineNC? vim.api.keyset.highlight
+---@field TabLine? vim.api.keyset.highlight
+---@field TabLineFill? vim.api.keyset.highlight
+---@field TabLineSel? vim.api.keyset.highlight
+---@field Title? vim.api.keyset.highlight
+---@field Visual? vim.api.keyset.highlight
+---@field VisualNOS? vim.api.keyset.highlight
+---@field warningMsg? vim.api.keyset.highlight
+---@field Whitespace? vim.api.keyset.highlight
+---@field WildMenu? vim.api.keyset.highlight
+---@field WinBar? vim.api.keyset.highlight
+---@field WinBarNC? vim.api.keyset.highlight
+---@field Comment? vim.api.keyset.highlight
+---@field Constant? vim.api.keyset.highlight
+---@field String? vim.api.keyset.highlight
+---@field Character? vim.api.keyset.highlight
+---@field Number? vim.api.keyset.highlight
+---@field Boolean? vim.api.keyset.highlight
+---@field Float? vim.api.keyset.highlight
+---@field Identifier? vim.api.keyset.highlight
+---@field Property? vim.api.keyset.highlight
+---@field Parameter? vim.api.keyset.highlight
+---@field Function? vim.api.keyset.highlight
+---@field Statement? vim.api.keyset.highlight
+---@field Conditional? vim.api.keyset.highlight
+---@field Repeat? vim.api.keyset.highlight
+---@field Label? vim.api.keyset.highlight
+---@field Operator? vim.api.keyset.highlight
+---@field Keyword? vim.api.keyset.highlight
+---@field Exception? vim.api.keyset.highlight
+---@field PreProc? vim.api.keyset.highlight
+---@field Include? vim.api.keyset.highlight
+---@field Define? vim.api.keyset.highlight
+---@field Macro? vim.api.keyset.highlight
+---@field PreCondit? vim.api.keyset.highlight
+---@field Type? vim.api.keyset.highlight
+---@field StorageClass? vim.api.keyset.highlight
+---@field Structure? vim.api.keyset.highlight
+---@field Typedef? vim.api.keyset.highlight
+---@field Special? vim.api.keyset.highlight
+---@field SpecialChar? vim.api.keyset.highlight
+---@field Tag? vim.api.keyset.highlight
+---@field TagAttribute? vim.api.keyset.highlight
+---@field TagDelimiter? vim.api.keyset.highlight
+---@field Delimiter? vim.api.keyset.highlight
+---@field SpecialComment? vim.api.keyset.highlight
+---@field Debug? vim.api.keyset.highlight
+---@field Underlined? vim.api.keyset.highlight
+---@field Ignore? vim.api.keyset.highlight
+---@field Error? vim.api.keyset.highlight
+---@field Todo? vim.api.keyset.highlight
+---@field Added? vim.api.keyset.highlight
+---@field Changed? vim.api.keyset.highlight
+---@field Removed? vim.api.keyset.highlight
+---@field DiagnosticError? vim.api.keyset.highlight
+---@field DiagnosticWarn? vim.api.keyset.highlight
+---@field DiagnosticInfo? vim.api.keyset.highlight
+---@field DiagnosticHint? vim.api.keyset.highlight
+---@field DiagnosticOk? vim.api.keyset.highlight
+---@field DiagnosticVirtualTextError? vim.api.keyset.highlight
+---@field DiagnosticVirtualTextWarn? vim.api.keyset.highlight
+---@field DiagnosticVirtualTextInfo? vim.api.keyset.highlight
+---@field DiagnosticVirtualTextHint? vim.api.keyset.highlight
+---@field DiagnosticVirtualTextOk? vim.api.keyset.highlight
+---@field DiagnosticUnderlineError? vim.api.keyset.highlight
+---@field DiagnosticUnderlineWarn? vim.api.keyset.highlight
+---@field DiagnosticUnderlineInfo? vim.api.keyset.highlight
+---@field DiagnosticUnderlineHint? vim.api.keyset.highlight
+---@field DiagnosticUnderlineOk? vim.api.keyset.highlight
+---@field LspReferenceText? vim.api.keyset.highlight
+---@field LspReferenceRead? vim.api.keyset.highlight
+---@field LspReferenceWrite? vim.api.keyset.highlight
+---@field LspInlayHint? vim.api.keyset.highlight
+---@field NavicText? vim.api.keyset.highlight
+---@field NavicSeparator? vim.api.keyset.highlight
+---@field NavicIconsMethod? vim.api.keyset.highlight
+---@field NavicIconsFunction? vim.api.keyset.highlight
+---@field NavicIconsField? vim.api.keyset.highlight
+---@field NavicIconsVariable? vim.api.keyset.highlight
+---@field NavicIconsClass? vim.api.keyset.highlight
+---@field NavicIconsInterface? vim.api.keyset.highlight
+---@field NavicIconsModule? vim.api.keyset.highlight
+---@field NavicIconsNamespace? vim.api.keyset.highlight
+---@field NavicIconsProperty? vim.api.keyset.highlight
+---@field NavicIconsUnit? vim.api.keyset.highlight
+---@field NavicIconsEnum? vim.api.keyset.highlight
+---@field NavicIconsKeyword? vim.api.keyset.highlight
+---@field NavicIconsSnippet? vim.api.keyset.highlight
+---@field NavicIconsColor? vim.api.keyset.highlight
+---@field NavicIconsFile? vim.api.keyset.highlight
+---@field NavicIconsReference? vim.api.keyset.highlight
+---@field NavicIconsFolder? vim.api.keyset.highlight
+---@field NavicIconsEnumMember? vim.api.keyset.highlight
+---@field NavicIconsConstant? vim.api.keyset.highlight
+---@field NavicIconsStruct? vim.api.keyset.highlight
+---@field NavicIconsEvent? vim.api.keyset.highlight
+---@field NavicIconsOperator? vim.api.keyset.highlight
+---@field NavicIconsTypeParameter? vim.api.keyset.highlight
+---@field CmpItemKindText? vim.api.keyset.highlight
+---@field CmpItemKindMethod? vim.api.keyset.highlight
+---@field CmpItemKindFunction? vim.api.keyset.highlight
+---@field CmpItemKindField? vim.api.keyset.highlight
+---@field CmpItemKindVariable? vim.api.keyset.highlight
+---@field CmpItemKindClass? vim.api.keyset.highlight
+---@field CmpItemKindInterface? vim.api.keyset.highlight
+---@field CmpItemKindModule? vim.api.keyset.highlight
+---@field CmpItemKindProperty? vim.api.keyset.highlight
+---@field CmpItemKindUnit? vim.api.keyset.highlight
+---@field CmpItemKindEnum? vim.api.keyset.highlight
+---@field CmpItemKindKeyword? vim.api.keyset.highlight
+---@field CmpItemKindSnippet? vim.api.keyset.highlight
+---@field CmpItemKindColor? vim.api.keyset.highlight
+---@field CmpItemKindFile? vim.api.keyset.highlight
+---@field CmpItemKindReference? vim.api.keyset.highlight
+---@field CmpItemKindFolder? vim.api.keyset.highlight
+---@field CmpItemKindEnumMember? vim.api.keyset.highlight
+---@field CmpItemKindConstant? vim.api.keyset.highlight
+---@field CmpItemKindStruct? vim.api.keyset.highlight
+---@field CmpItemKindEvent? vim.api.keyset.highlight
+---@field CmpItemKindOperator? vim.api.keyset.highlight
+---@field CmpItemKindTypeParameter? vim.api.keyset.highlight
+---@field IblIndent? vim.api.keyset.highlight
+---@field IblScope? vim.api.keyset.highlight
+---@field NeoTreeTitleBar? vim.api.keyset.highlight
+---@field NeoTreeNormal? vim.api.keyset.highlight
+---@field NeoTreeNormalNC? vim.api.keyset.highlight
+---@field NeoTreeDotFile? vim.api.keyset.highlight
+---@field NeoTreeFileNameOpened? vim.api.keyset.highlight
+---@field NeoTreeFloatBorder? vim.api.keyset.highlight
+---@field NeoTreeFloatTitle? vim.api.keyset.highlight
+---@field NeoTreeGitAdded? vim.api.keyset.highlight
+---@field NeoTreeGitConflict? vim.api.keyset.highlight
+---@field NeoTreeGitDeleted? vim.api.keyset.highlight
+---@field NeoTreeGitIgnored? vim.api.keyset.highlight
+---@field NeoTreeGitModified? vim.api.keyset.highlight
+---@field NeoTreeGitUnstaged? vim.api.keyset.highlight
+---@field NeoTreeGitUntracked? vim.api.keyset.highlight
+---@field NeoTreeGitStaged? vim.api.keyset.highlight
+---@field NvimTreeSymlink? vim.api.keyset.highlight
+---@field NvimTreeSymlinkIcon? vim.api.keyset.highlight
+---@field NvimTreeFolderName? vim.api.keyset.highlight
+---@field NvimTreeRootFolder? vim.api.keyset.highlight
+---@field NvimTreeFolderIcon? vim.api.keyset.highlight
+---@field NvimTreeEmptyFolderName? vim.api.keyset.highlight
+---@field NvimTreeExecFile? vim.api.keyset.highlight
+---@field NvimTreeOpenedFile? vim.api.keyset.highlight
+---@field NvimTreeModifiedFile? vim.api.keyset.highlight
+---@field NvimTreeSpecialFile? vim.api.keyset.highlight
+---@field NvimTreeIndentMarker? vim.api.keyset.highlight
+---@field NvimTreeGitDirty? vim.api.keyset.highlight
+---@field NvimTreeGitStaged? vim.api.keyset.highlight
+---@field NvimTreeGitMerge? vim.api.keyset.highlight
+---@field NvimTreeGitRenamed? vim.api.keyset.highlight
+---@field NvimTreeGitNew? vim.api.keyset.highlight
+---@field NvimTreeGitDeleted? vim.api.keyset.highlight
+---@field NvimTreeNormal? vim.api.keyset.highlight
+---@field NvimTreeNormalFloat? vim.api.keyset.highlight
+---@field NvimTreeEndOfBuffer? vim.api.keyset.highlight
+---@field NvimTreeWinSeparator? vim.api.keyset.highlight
+---@field WhichKeyNormal? vim.api.keyset.highlight
+---@field WhichKey? vim.api.keyset.highlight
+---@field WhichKeyDesc? vim.api.keyset.highlight
+---@field WhichKeySeparator? vim.api.keyset.highlight
+---@field WhichKeyGroup? vim.api.keyset.highlight
+---@field DashboardHeader? vim.api.keyset.highlight
+---@field DashboardFooter? vim.api.keyset.highlight
+---@field DashboardDesc? vim.api.keyset.highlight
+---@field DashboardKey? vim.api.keyset.highlight
+---@field DashboardIcon? vim.api.keyset.highlight
+---@field DashboardShotCut? vim.api.keyset.highlight
+---@field GitSignsAdd? vim.api.keyset.highlight
+---@field GitSignsChange? vim.api.keyset.highlight
+---@field GitSignsDelete? vim.api.keyset.highlight
+---@field TelescopeSelection? vim.api.keyset.highlight
+---@field TelescopeSelectionCaret? vim.api.keyset.highlight
+---@field TelescopeMultiIcon? vim.api.keyset.highlight
+---@field TelescopeNormal? vim.api.keyset.highlight
+---@field TelescopePreviewNormal? vim.api.keyset.highlight
+---@field TelescopePromptNormal? vim.api.keyset.highlight
+---@field TelescopeResultsNormal? vim.api.keyset.highlight
+---@field TelescopeBorder? vim.api.keyset.highlight
+---@field TelescopePromptBorder? vim.api.keyset.highlight
+---@field TelescopeResultsBorder? vim.api.keyset.highlight
+---@field TelescopePreviewBorder? vim.api.keyset.highlight
+---@field TelescopeTitle? vim.api.keyset.highlight
+---@field TelescopePromptTitle? vim.api.keyset.highlight
+---@field TelescopeResultsTitle? vim.api.keyset.highlight
+---@field TelescopePreviewTitle? vim.api.keyset.highlight
+---@field TelescopeMatching? vim.api.keyset.highlight
+---@field TelescopePreviewMatch? vim.api.keyset.highlight
+---@field TelescopePromptCounter? vim.api.keyset.highlight
+---@field TelescopePromptPrefix? vim.api.keyset.highlight
+---@field NoiceFormatProgressTodo? vim.api.keyset.highlight
+---@field NoiceFormatProgressDone? vim.api.keyset.highlight
+---@field NoiceLspProgressSpinner? vim.api.keyset.highlight
+---@field NoiceLspProgressClient? vim.api.keyset.highlight
+---@field NoiceCmdlineIcon? vim.api.keyset.highlight
+---@field NoiceCmdlinePopupBorder? vim.api.keyset.highlight
+---@field NoiceCmdlinePopupTitle? vim.api.keyset.highlight
+---@field NoiceLspProgressTitle? vim.api.keyset.highlight
+---@field HopNextKey? vim.api.keyset.highlight
+---@field HopNextKey1? vim.api.keyset.highlight
+---@field HopUnmatched? vim.api.keyset.highlight
+---@field MiniStatuslineModeNormal? vim.api.keyset.highlight
+---@field MiniStatuslineModeInsert? vim.api.keyset.highlight
+---@field MiniStatuslineModeVisual? vim.api.keyset.highlight
+---@field MiniStatuslineModeReplace? vim.api.keyset.highlight
+---@field MiniStatuslineModeCommand? vim.api.keyset.highlight
+---@field MinistatusLineFileName? vim.api.keyset.highlight
+---@field MiniStatuslineDevinfo? vim.api.keyset.highlight
+---@field MiniStatuslineFileinfo? vim.api.keyset.highlight
+---@field MiniStatuslineInactive? vim.api.keyset.highlight
+---@field MiniTablineCurrent? vim.api.keyset.highlight
+---@field MiniTablineVisible? vim.api.keyset.highlight
+---@field MiniTablineHidden? vim.api.keyset.highlight
+---@field MiniTablineModifiedCurrent? vim.api.keyset.highlight
+---@field MiniTablineModifiedVisible? vim.api.keyset.highlight
+---@field MiniTablineModifiedHidden? vim.api.keyset.highlight
+---@field MiniTablineFill? vim.api.keyset.highlight
+---@field MiniTablineTabpagesection? vim.api.keyset.highlight
+---@field MiniStarterCurrent? vim.api.keyset.highlight
+---@field MiniStarterHeader? vim.api.keyset.highlight
+---@field MiniStarterFooter? vim.api.keyset.highlight
+---@field MiniStarterItem? vim.api.keyset.highlight
+---@field MiniStarterItemBullet? vim.api.keyset.highlight
+---@field MiniStarterItemPrefix? vim.api.keyset.highlight
+---@field MiniStarterSection? vim.api.keyset.highlight
+---@field MiniStarterQuery? vim.api.keyset.highlight
+---@field MiniCursorword? vim.api.keyset.highlight
+---@field NotifyBackground? vim.api.keyset.highlight
+---@field NotifyERRORBorder? vim.api.keyset.highlight
+---@field NotifyWARNBorder? vim.api.keyset.highlight
+---@field NotifyINFOBorder? vim.api.keyset.highlight
+---@field NotifyDEBUGBorder? vim.api.keyset.highlight
+---@field NotifyTRACEBorder? vim.api.keyset.highlight
+---@field NotifyERRORIcon? vim.api.keyset.highlight
+---@field NotifyWARNIcon? vim.api.keyset.highlight
+---@field NotifyINFOIcon? vim.api.keyset.highlight
+---@field NotifyDEBUGIcon? vim.api.keyset.highlight
+---@field NotifyTRACEIcon? vim.api.keyset.highlight
+---@field NotifyERRORTitle? vim.api.keyset.highlight
+---@field NotifyWARNTitle? vim.api.keyset.highlight
+---@field NotifyINFOTitle? vim.api.keyset.highlight
+---@field NotifyDEBUGTitle? vim.api.keyset.highlight
+---@field NotifyTRACETitle? vim.api.keyset.highlight
+---@field NotifyERRORBody? vim.api.keyset.highlight
+---@field NotifyWARNBody? vim.api.keyset.highlight
+---@field NotifyINFOBody? vim.api.keyset.highlight
+---@field NotifyDEBUGBody? vim.api.keyset.highlight
+---@field NotifyTRACEBody? vim.api.keyset.highlight
+---@field RainbowDelimiterRed? vim.api.keyset.highlight
+---@field RainbowDelimiteYellow? vim.api.keyset.highlight
+---@field RainbowDelimiterBlue? vim.api.keyset.highlight
+---@field RainbowDelimiterOrange? vim.api.keyset.highlight
+---@field RainbowDelimiterGreen? vim.api.keyset.highlight
+---@field RainbowDelimiterViolet? vim.api.keyset.highlight
+---@field RainbowDelimiterCyan? vim.api.keyset.highlight
+---@field BufferLineFill? vim.api.keyset.highlight
+---@field BufferLineBufferSelected? vim.api.keyset.highlight
+---@field BufferLineSeparator? vim.api.keyset.highlight
+---@field BufferLineSeparatorSelected? vim.api.keyset.highlight
+---@field BufferLineSeparatorVisible? vim.api.keyset.highlight
+---@field LazyNormal? vim.api.keyset.highlight
+---@field LazyH1? vim.api.keyset.highlight
+---@field LazyButton? vim.api.keyset.highlight
+---@field LazyButtonActive? vim.api.keyset.highlight
+---@field LazyReasonStart? vim.api.keyset.highlight
+---@field LazyReasonEvent? vim.api.keyset.highlight
+---@field RenderMarkdownH1Bg? vim.api.keyset.highlight
+---@field RenderMarkdownH2Bg? vim.api.keyset.highlight
+---@field RenderMarkdownH3Bg? vim.api.keyset.highlight
+---@field RenderMarkdownH4Bg? vim.api.keyset.highlight
+---@field RenderMarkdownH5Bg? vim.api.keyset.highlight
+---@field RenderMarkdownH6Bg? vim.api.keyset.highlight
+---@field NeogitBranch? vim.api.keyset.highlight
+---@field NeogitRemote? vim.api.keyset.highlight
+---@field NeogitHunkHeader? vim.api.keyset.highlight
+---@field NeogitHunkHeaderHighlight? vim.api.keyset.highlight
+---@field NeogitDiffContextHighlight? vim.api.keyset.highlight
+---@field NeogitDiffContext? vim.api.keyset.highlight
+---@field NeogitDiffDeleteHighlight? vim.api.keyset.highlight
+---@field NeogitDiffDelete? vim.api.keyset.highlight
+---@field NeogitDiffAddHighlight? vim.api.keyset.highlight
+---@field NeogitDiffAdd? vim.api.keyset.highlight
+---@field TodoFgTODO? vim.api.keyset.highlight
+---@field TodoFgWARN? vim.api.keyset.highlight
+---@field TodoFgTEST? vim.api.keyset.highlight
+---@field TodoFgPERF? vim.api.keyset.highlight
+---@field TodoFgNOTE? vim.api.keyset.highlight
+---@field TodoFgHACK? vim.api.keyset.highlight
+---@field TodoFgFIX? vim.api.keyset.highlight
+---@field TodoSignTODO? vim.api.keyset.highlight
+---@field TodoSignWARN? vim.api.keyset.highlight
+---@field TodoSignTEST? vim.api.keyset.highlight
+---@field TodoSignPERF? vim.api.keyset.highlight
+---@field TodoSignNOTE? vim.api.keyset.highlight
+---@field TodoSignHACK? vim.api.keyset.highlight
+---@field TodoSignFIX? vim.api.keyset.highlight
+---@field TodoBgTODO? vim.api.keyset.highlight
+---@field TodoBgWARN? vim.api.keyset.highlight
+---@field TodoBgTEST? vim.api.keyset.highlight
+---@field TodoBgPERF? vim.api.keyset.highlight
+---@field TodoBgNOTE? vim.api.keyset.highlight
+---@field TodoBgHACK? vim.api.keyset.highlight
+---@field TodoBgFIX? vim.api.keyset.highlight
+---@field ALEErrorSign? vim.api.keyset.highlight
+---@field ALEWarningSign? vim.api.keyset.highlight
+---@field AlphaShortcut? vim.api.keyset.highlight
+---@field AlphaHeader? vim.api.keyset.highlight
+---@field AlphaHeaderLabel? vim.api.keyset.highlight
+---@field AlphaFooter? vim.api.keyset.highlight
+---@field AlphaButtons? vim.api.keyset.highlight
+---@field YankyPut? vim.api.keyset.highlight
+---@field YankyYanked? vim.api.keyset.highlight
+---@field GitGutterAdd? vim.api.keyset.highlight
+---@field GitGutterChange? vim.api.keyset.highlight
+---@field GitGutterDelete? vim.api.keyset.highlight
+---@field GitGutterAddLineNr? vim.api.keyset.highlight
+---@field GitGutterChangeLineNr? vim.api.keyset.highlight
+---@field GitGutterDeleteLineNr? vim.api.keyset.highlight
+---@field CocErrorSign? vim.api.keyset.highlight
+---@field CocWarningSign? vim.api.keyset.highlight
+---@field CocInfoSign? vim.api.keyset.highlight
+---@field CocHintSign? vim.api.keyset.highlight
+---@field CocErrorVirtualText? vim.api.keyset.highlight
+---@field CocWarningVirtualText? vim.api.keyset.highlight
+---@field CocInfoVirtualText? vim.api.keyset.highlight
+---@field CocHintVirtualText? vim.api.keyset.highlight
+---@field LeapMatch? vim.api.keyset.highlight
+---@field LeapLabel? vim.api.keyset.highlight
+---@field LeapBackDrop? vim.api.keyset.highlight
+---@field MasonHeader? vim.api.keyset.highlight
+---@field MasonHighlight? vim.api.keyset.highlight
+---@field MasonHighlightBlock? vim.api.keyset.highlight
+---@field MasonHighlightBlockBold? vim.api.keyset.highlight
+
+local M = {}
+
+local function nvim_get_hl(opts)
+ local hl = vim.api.nvim_get_hl(0, opts)
+
+ if hl.link then
+ return nvim_get_hl { name = hl.link }
+ end
+
+ return hl
+end
+
+---@class solarized.nvim_set_hl.config
+---@field transparent? boolean
+---@field styles? vim.api.keyset.highlight
+---@field error_lens? boolean
+
+---@param group_name string
+---@param group_val vim.api.keyset.highlight
+---@param config? solarized.nvim_set_hl.config
+local nvim_set_hl = function(group_name, group_val, config)
+ local val = { fg = 'NONE', bg = 'NONE' }
+
+ if not group_val.link then
+ if config and config.transparent then
+ group_val.bg = 'NONE'
+ end
+
+ if config and config.styles then
+ group_val = vim.tbl_extend('force', group_val, config.styles)
+ end
+
+ if config and config.error_lens then
+ local color = require 'solarized.color'
+ local editor = require('solarized.utils').nvim_get_hl 'Normal'
+ local ok, mix_color = pcall(color.blend, group_val.fg, editor.bg, 0.3)
+ if ok then
+ group_val.bg = mix_color
+ else
+ group_val.bg = color.shade(group_val.fg, 5)
+ end
+ end
+
+ val = vim.tbl_extend('force', val, group_val)
+ vim.api.nvim_set_hl(0, group_name, val)
+ else
+ vim.api.nvim_set_hl(0, group_name, group_val)
+ end
+end
+
+---@param colors solarized.palette
+---@param config solarized.config
+M.set_highlight = function(colors, config)
+ local color = require 'solarized.color'
+ if config.on_colors then
+ colors = vim.tbl_extend('force', colors, config.on_colors(colors, color))
+ end
+
+ local solarized_dark = require 'solarized.variants'
+ solarized_dark.set_variant {
+ colors = colors,
+ nvim_set_hl = nvim_set_hl,
+ config = config,
+ color = color,
+ }
+
+ -- EDITOR :h highlight-groups
+ nvim_set_hl('ColorColumn', { bg = colors.base02 })
+ nvim_set_hl('Conceal', { fg = colors.blue })
+ nvim_set_hl('CurSearch', { link = 'IncSearch' })
+ nvim_set_hl('Cursor', { fg = colors.base03, bg = colors.base0 })
+ nvim_set_hl('lCursor', { link = 'Cursor' })
+ nvim_set_hl('CursorIM', { link = 'Cursor' })
+ nvim_set_hl('CursorColumn', { link = 'ColorColumn' })
+ nvim_set_hl('CursorLine', { bg = colors.base02 })
+ nvim_set_hl('Directory', { fg = colors.blue })
+ nvim_set_hl('DiffAdd', { fg = colors.git_add })
+ nvim_set_hl('DiffChange', { fg = colors.git_modify })
+ nvim_set_hl('DiffDelete', { fg = colors.git_delete, reverse = true })
+ nvim_set_hl('DiffText', { fg = colors.cyan, reverse = true })
+ nvim_set_hl('EndOfBuffer', { fg = colors.base03 })
+ nvim_set_hl('TermCursor', { link = 'Cursor' })
+ nvim_set_hl('TermCursorNC', { fg = colors.base03, bg = colors.base0 })
+ nvim_set_hl('ErrorMsg', { fg = colors.diag_error })
+ -- nvim_set_hl(
+ -- 'WinSeparator',
+ -- { fg = colors.base01, bg = colors.base04 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('Folded', { fg = colors.base0, bg = colors.base02 })
+ nvim_set_hl('FoldColumn', { fg = colors.base0, bg = colors.base04 })
+ -- nvim_set_hl(
+ -- 'SignColumn',
+ -- { fg = colors.base01, bg = colors.base02 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('IncSearch', { fg = colors.magenta, bg = colors.mix_magenta })
+ nvim_set_hl('Substitute', { link = 'IncSearch' })
+ -- nvim_set_hl(
+ -- 'LineNr',
+ -- { fg = colors.base01, bg = colors.base02 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('LineNrAbove', { link = 'LineNr' })
+ nvim_set_hl('LineNrBelow', { link = 'LineNr' })
+ -- nvim_set_hl(
+ -- 'CursorLineNr',
+ -- { fg = colors.base1, bg = colors.base02 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('CursorLineFold', { link = 'FoldColumn' })
+ nvim_set_hl('CursorLineSign', { link = 'SignColumn' })
+ nvim_set_hl('MatchParen', { fg = colors.magenta})
+ nvim_set_hl('ModeMsg', { fg = colors.blue })
+ nvim_set_hl('MsgArea', { link = 'Normal' })
+ nvim_set_hl('MsgSeparator', { link = 'Normal' })
+ nvim_set_hl('MoreMsg', { link = 'ModeMsg' })
+ nvim_set_hl('NonText', { fg = colors.base01 })
+ nvim_set_hl(
+ 'Normal',
+ { fg = colors.base0, bg = colors.base03 },
+ { transparent = config.transparent.normal and config.transparent.enabled }
+ )
+ nvim_set_hl('NormalFloat', { fg = colors.base0, bg = colors.base04 }, {
+ transparent = config.transparent.normal and config.transparent.enabled,
+ })
+ -- nvim_set_hl('FloatBorder', { fg = colors.base01, bg = colors.base04 }, {
+ -- transparent = config.transparent.enabled,
+ -- })
+ -- nvim_set_hl('FloatTitle', { fg = colors.mix_blue, bg = colors.blue, reverse = true })
+ nvim_set_hl('NormalNC', { link = 'Normal' })
+ nvim_set_hl('Pmenu', { fg = colors.base0, bg = colors.base04 }, {
+ transparent = config.transparent.pmenu and config.transparent.enabled,
+ })
+ nvim_set_hl('PmenuSel', { fg = colors.base2, bg = colors.base01 })
+ nvim_set_hl('PmenuKind', { link = 'Pmenu' })
+ nvim_set_hl('PmenuKindSel', { link = 'PmenuSel' })
+ nvim_set_hl('PmenuExtra', { link = 'Pmenu' })
+ nvim_set_hl('PmenuExtraSel', { link = 'PmenuSel' })
+ nvim_set_hl('PmenuSbar', { bg = colors.base04 })
+ nvim_set_hl('PmenuThumb', { bg = colors.base1 })
+ nvim_set_hl('Question', { fg = colors.diag_info })
+ nvim_set_hl('QuickFixLine', { fg = colors.base0, bg = colors.base03 })
+ nvim_set_hl('Search', { fg = colors.base1, bg = colors.mix_base1, bold = true })
+ nvim_set_hl('SpecialKey', { link = 'NonText' })
+ nvim_set_hl('SpellBad', { underline = true, strikethrough = true })
+ nvim_set_hl('SpellCap', { fg = colors.diag_hint })
+ nvim_set_hl('SpellLocal', { link = 'SpellCap' })
+ nvim_set_hl('SpellRare', { fg = colors.diag_warning })
+ nvim_set_hl('StatusLine', { fg = colors.base1, bg = colors.base04 })
+ nvim_set_hl('StatusLineNC', { fg = colors.base01, bg = colors.base04 })
+ nvim_set_hl('TabLine', { fg = colors.base01, bg = colors.base04 })
+ nvim_set_hl('TabLineFill', { fg = colors.base0, bg = colors.base04 })
+ nvim_set_hl('TabLineSel', { fg = colors.base0, bg = colors.base03 })
+ nvim_set_hl('Title', { fg = colors.blue })
+ nvim_set_hl('Visual', { fg = colors.base1, bg = colors.mix_base1 })
+ nvim_set_hl('VisualNOS', { link = 'Visual' })
+ nvim_set_hl('warningMsg', { fg = colors.diag_warning })
+ nvim_set_hl('Whitespace', { fg = colors.base01 })
+ nvim_set_hl('WildMenu', { fg = colors.base02 })
+ nvim_set_hl('WinBar', { link = 'Pmenu' })
+ nvim_set_hl('WinBarNC', { link = 'WinBar' })
+
+ -- PLUGINS
+ if config.plugins.treesitter then
+ nvim_set_hl('@variable', { link = 'Identifier' })
+ nvim_set_hl('@variable.builtin', { link = 'Constant' })
+ nvim_set_hl('@variable.parameter', { link = 'Parameter' })
+ nvim_set_hl('@variable.member', { link = 'Property' })
+ nvim_set_hl('@property', { link = 'Property' })
+ nvim_set_hl('@property.json', { link = 'Keyword' })
+ nvim_set_hl('@property.yaml', { link = 'Keyword' })
+ nvim_set_hl('@constant', { link = 'Constant' })
+ nvim_set_hl('@constant.builtin', { link = 'Constant' })
+ nvim_set_hl('@constant.macro', { link = 'Constant' })
+ nvim_set_hl('@constant.html', { link = 'Tag' })
+ nvim_set_hl('@module', { link = 'Type' })
+ nvim_set_hl('@module.builtin', { link = 'Constant' })
+ nvim_set_hl('@label', { link = 'Statement' })
+ nvim_set_hl('@string', { link = 'String' })
+ nvim_set_hl('@string.documentation', { link = 'Statement' })
+ nvim_set_hl('@string.regexp', { fg = colors.magenta })
+ nvim_set_hl('@string.escape', { link = 'Statement' })
+ nvim_set_hl('@string.special', { link = 'Special' })
+ nvim_set_hl('@string.special.symbol', { link = 'Identifier' })
+ nvim_set_hl('@string.special.url', { link = 'Underlined' })
+ nvim_set_hl('@character', { link = 'Constant' })
+ nvim_set_hl('@character.special', { link = 'Constant' })
+ nvim_set_hl('@character.printf', { link = 'Keyword' })
+ nvim_set_hl('@type', { link = 'Type' })
+ nvim_set_hl('@type.builtin', { link = 'Keyword' })
+ nvim_set_hl('@type.definition', { link = 'Type' })
+ nvim_set_hl('@type.qualifier', { link = 'Type' })
+ nvim_set_hl('@attribute', { link = 'Keyword' })
+ nvim_set_hl('@function', { link = 'Function' })
+ nvim_set_hl('@function.builtin', { link = 'Function' }, { styles = config.styles.functions })
+ nvim_set_hl('@function.call', { link = 'Function' })
+ nvim_set_hl('@function.macro', { link = 'Function' })
+ nvim_set_hl('@function.method', { link = 'Function' })
+ nvim_set_hl('@function.method.call', { link = 'Function' })
+ nvim_set_hl('@constructor', { link = 'Type' })
+ nvim_set_hl('@constructor.lua', { link = 'Delimiter' })
+ nvim_set_hl('@operator', { link = 'Statement' })
+ nvim_set_hl('@keyword', { link = 'Keyword' })
+ nvim_set_hl('@keyword.coroutine', { link = 'Statement' })
+ nvim_set_hl('@keyword.function', { link = 'Keyword' })
+ nvim_set_hl('@keyword.type', { link = 'Keyword' })
+ nvim_set_hl('@keyword.operator', { link = 'Statement' })
+ nvim_set_hl('@keyword.import', { link = 'Include' })
+ nvim_set_hl('@keyword.repeat', { link = 'Statement' })
+ nvim_set_hl('@keyword.return', { link = 'Statement' })
+ nvim_set_hl('@keyword.debug', { link = 'Keyword' })
+ nvim_set_hl('@keyword.exception', { link = 'Statement' })
+ nvim_set_hl('@keyword.conditional', { link = 'Statement' })
+ nvim_set_hl('@keyword.conditional.ternary', { link = 'Statement' })
+ nvim_set_hl('@keyword.directive', { link = 'Statement' })
+ nvim_set_hl('@keyword.directive.define', { link = 'Statement' })
+ nvim_set_hl('@punctuation.delimiter', { link = 'Delimiter' })
+ nvim_set_hl('@punctuation.bracket', { link = 'Delimiter' })
+ nvim_set_hl('@punctuation.special', { link = 'Keyword' })
+ nvim_set_hl('@comment', { link = 'Comment' })
+ nvim_set_hl('@comment.documentation', { link = 'Comment' })
+ nvim_set_hl('@comment.error', { fg = colors.diag_error })
+ nvim_set_hl('@comment.warning', { fg = colors.diag_warning })
+ nvim_set_hl('@comment.todo', { link = 'Todo' })
+ nvim_set_hl('@comment.note', { fg = colors.diag_hint })
+ nvim_set_hl('@markup.strong', { fg = colors.magenta, bold = true })
+ nvim_set_hl('@markup.italic', { link = 'Underlined' })
+ nvim_set_hl('@markup.strikethrough', { fg = colors.base01, strikethrough = true })
+ nvim_set_hl('@markup.underline', { link = 'Underlined' })
+ nvim_set_hl('@markup.heading', { fg = colors.blue, bold = true })
+ nvim_set_hl('@markup.heading.1', { fg = colors.blue })
+ nvim_set_hl('@markup.heading.2', { fg = colors.violet })
+ nvim_set_hl('@markup.heading.3', { fg = colors.yellow })
+ nvim_set_hl('@markup.heading.4', { fg = colors.orange })
+ nvim_set_hl('@markup.heading.5', { fg = colors.red })
+ nvim_set_hl('@markup.heading.6', { fg = colors.magenta })
+ nvim_set_hl('@markup.quote', { fg = colors.green })
+ nvim_set_hl('@markup.math', { fg = colors.violet })
+ nvim_set_hl('@markup.environment', { link = 'Comment' })
+ nvim_set_hl('@markup.link', { link = 'Underlined' })
+ nvim_set_hl('@markup.link.label', { link = 'Constant' })
+ nvim_set_hl('@markup.link.url', { link = 'Underlined' })
+ nvim_set_hl('@markup.raw', { fg = colors.cyan })
+ nvim_set_hl('@markup.raw.block', { fg = colors.base0 })
+ nvim_set_hl('@markup.list', { fg = colors.orange })
+ nvim_set_hl('@markup.list.checked', { fg = colors.green })
+ nvim_set_hl('@markup.list.unchecked', { fg = colors.base01 })
+ nvim_set_hl('@diff.plus', { fg = colors.git_add })
+ nvim_set_hl('@diff.minus', { fg = colors.git_delete })
+ nvim_set_hl('@diff.delta', { fg = colors.git_modify })
+ nvim_set_hl('@tag', { link = 'Tag' })
+ nvim_set_hl('@tag.attribute', { link = 'TagAttribute' })
+ nvim_set_hl('@tag.delimiter', { link = 'TagDelimiter' })
+ end
+
+ local signcolumn = require('solarized.utils').nvim_get_hl 'SignColumn'
+
+ if config.plugins.lspconfig then
+ nvim_set_hl('@lsp.type.class', { link = 'Type' })
+ nvim_set_hl('@lsp.type.decorator', { link = 'Function' })
+ nvim_set_hl('@lsp.type.enum', { link = 'Type' })
+ nvim_set_hl('@lsp.type.enumMember', { link = 'Type' })
+ nvim_set_hl('@lsp.type.interface', { link = 'Type' })
+ nvim_set_hl('@lsp.type.macro', { link = '@function.builtin' })
+ nvim_set_hl('@lsp.type.namespace', { link = 'Type' })
+ nvim_set_hl('@lsp.type.parameter', { link = 'Parameter' })
+ nvim_set_hl('@lsp.type.property', { link = 'Property' })
+ nvim_set_hl('@lsp.type.struct', { link = 'Type' })
+ nvim_set_hl('@lsp.type.type', { link = 'Type' })
+ nvim_set_hl('@lsp.type.typeParameter', { link = 'Type' })
+ nvim_set_hl('@lsp.type.variable', { link = 'Identifier' })
+ nvim_set_hl('@lsp.typemod.variable.defaultLibrary', { link = 'Constant' })
+ nvim_set_hl('@lsp.typemod.variable.readonly', { link = 'Constant' })
+ nvim_set_hl('@lsp.typemod.variable.global', { link = 'Constant' })
+ nvim_set_hl('@lsp.typemod.keyword.documentation', { link = 'Keyword' })
+ nvim_set_hl('@lsp.typemod.class.documentation', { link = 'Type' })
+ nvim_set_hl('@lsp.typemod.property.readonly', { link = 'Constant' })
+ nvim_set_hl('DiagnosticError', { fg = colors.diag_error })
+ nvim_set_hl('DiagnosticWarn', { fg = colors.diag_warning })
+ nvim_set_hl('DiagnosticInfo', { fg = colors.diag_info })
+ nvim_set_hl('DiagnosticHint', { fg = colors.diag_hint })
+ nvim_set_hl('DiagnosticOk', { fg = colors.diag_ok })
+ nvim_set_hl(
+ 'DiagnosticVirtualTextError',
+ { fg = colors.diag_error },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextWarn',
+ { fg = colors.diag_warning },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextInfo',
+ { fg = colors.diag_info },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextHint',
+ { fg = colors.diag_hint },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextOk',
+ { fg = colors.diag_ok },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineError',
+ { fg = colors.diag_error, underline = true, sp = colors.diag_error }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineWarn',
+ { fg = colors.diag_warning, underline = true, sp = colors.diag_warning }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineInfo',
+ { fg = colors.diag_info, underline = true, sp = colors.diag_info }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineHint',
+ { fg = colors.diag_hint, underline = true, sp = colors.diag_hint }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineOk',
+ { fg = colors.diag_ok, underline = true, sp = colors.diag_ok }
+ )
+ nvim_set_hl(
+ 'DiagnosticSignError',
+ { fg = colors.diag_error, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Error" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignWarn',
+ { fg = colors.diag_warning, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Warn" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignInfo',
+ { fg = colors.diag_info, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Info" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignHint',
+ { fg = colors.diag_hint, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Hint" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignOk',
+ { fg = colors.diag_ok, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl('LspReferenceText', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl('LspReferenceRead', { fg = colors.green, bg = colors.mix_green })
+ nvim_set_hl('LspReferenceWrite', { fg = colors.green, bg = colors.mix_green })
+ -- nvim_set_hl('LspInlayHint', { fg = colors.base01 })
+ nvim_set_hl('LspInlayHint', { fg = color.shade(colors.cyan, 3) })
+ end
+
+ if config.plugins.navic then
+ nvim_set_hl('NavicText', { fg = colors.base0 })
+ nvim_set_hl('NavicSeparator', { link = 'Keyword' })
+ nvim_set_hl('NavicIconsMethod', { link = 'Function' })
+ nvim_set_hl('NavicIconsFunction', { link = 'Function' })
+ nvim_set_hl('NavicIconsField', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsVariable', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsClass', { link = 'Type' })
+ nvim_set_hl('NavicIconsInterface', { link = 'Type' })
+ nvim_set_hl('NavicIconsModule', { link = 'Type' })
+ nvim_set_hl('NavicIconsNamespace', { link = 'Type' })
+ nvim_set_hl('NavicIconsProperty', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsUnit', { link = 'Number' })
+ nvim_set_hl('NavicIconsEnum', { link = 'Type' })
+ nvim_set_hl('NavicIconsKeyword', { link = 'Keyword' })
+ nvim_set_hl('NavicIconsSnippet', { link = 'Tag' })
+ nvim_set_hl('NavicIconsColor', { link = 'Special' })
+ nvim_set_hl('NavicIconsFile', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsReference', { link = 'Underlined' })
+ nvim_set_hl('NavicIconsFolder', { link = 'Directory' })
+ nvim_set_hl('NavicIconsEnumMember', { link = 'Constant' })
+ nvim_set_hl('NavicIconsConstant', { link = 'Constant' })
+ nvim_set_hl('NavicIconsStruct', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsEvent', { link = 'Function' })
+ nvim_set_hl('NavicIconsOperator', { link = 'Operator' })
+ nvim_set_hl('NavicIconsTypeParameter', { link = 'Type' })
+ end
+
+ if config.plugins.cmp then
+ nvim_set_hl('CmpItemKindText', { link = 'String' })
+ nvim_set_hl('CmpItemKindMethod', { link = 'Function' })
+ nvim_set_hl('CmpItemKindFunction', { link = 'Function' })
+ nvim_set_hl('CmpItemKindField', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindVariable', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindClass', { link = 'Type' })
+ nvim_set_hl('CmpItemKindInterface', { link = 'Type' })
+ nvim_set_hl('CmpItemKindModule', { link = 'Type' })
+ nvim_set_hl('CmpItemKindProperty', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindUnit', { link = 'Number' })
+ nvim_set_hl('CmpItemKindEnum', { link = 'Type' })
+ nvim_set_hl('CmpItemKindKeyword', { link = 'Keyword' })
+ nvim_set_hl('CmpItemKindSnippet', { link = 'Tag' })
+ nvim_set_hl('CmpItemKindColor', { link = 'Special' })
+ nvim_set_hl('CmpItemKindFile', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindReference', { link = 'Underlined' })
+ nvim_set_hl('CmpItemKindFolder', { link = 'Directory' })
+ nvim_set_hl('CmpItemKindEnumMember', { link = 'Constant' })
+ nvim_set_hl('CmpItemKindConstant', { link = 'Constant' })
+ nvim_set_hl('CmpItemKindStruct', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindEvent', { link = 'Function' })
+ nvim_set_hl('CmpItemKindOperator', { link = 'Operator' })
+ nvim_set_hl('CmpItemKindTypeParameter', { link = 'Type' })
+ end
+
+ if config.plugins.indentblankline then
+ nvim_set_hl('IblIndent', { fg = colors.mix_base1 })
+ nvim_set_hl('IblScope', { fg = colors.base01 })
+ end
+
+ if config.plugins.neotree then
+ nvim_set_hl('NeoTreeTitleBar', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl(
+ 'NeoTreeNormal',
+ { fg = colors.base1, bg = colors.base04 },
+ { transparent = config.transparent.neotree and config.transparent.enabled }
+ )
+ nvim_set_hl('NeoTreeNormalNC', { link = 'NeoTreeNormal' })
+ nvim_set_hl('NeoTreeDotFile', { fg = colors.base01 })
+ nvim_set_hl('NeoTreeGitIgnored', { link = 'NeoTreeDotFile' })
+ nvim_set_hl('NeoTreeFileStats', { link = 'NeoTreeDotFile' })
+ nvim_set_hl('NeoTreeDimText', { link = 'NeoTreeDotFile' })
+ nvim_set_hl('NeoTreeFileNameOpened', { link = 'Directory' })
+ nvim_set_hl('NeoTreeFloatBorder', { link = 'WinSeparator' })
+ nvim_set_hl('NeoTreeFloatTitle', { link = 'Title' })
+ nvim_set_hl('NeoTreeGitAdded', { fg = colors.git_add })
+ nvim_set_hl('NeoTreeGitConflict', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitDeleted', { fg = colors.git_delete })
+ nvim_set_hl('NeoTreeGitModified', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitUnstaged', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitUntracked', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitStaged', { fg = colors.git_add })
+ end
+
+ if config.plugins.nvimtree then
+ nvim_set_hl('NvimTreeSymlink', { link = 'Underlined' })
+ nvim_set_hl('NvimTreeSymlinkIcon', { link = 'Directory' })
+ nvim_set_hl('NvimTreeFolderName', { fg = colors.base0 })
+ nvim_set_hl('NvimTreeRootFolder', { link = 'Title' })
+ nvim_set_hl('NvimTreeFolderIcon', { link = 'Directory' })
+ nvim_set_hl('NvimTreeEmptyFolderName', { fg = colors.base0 })
+ nvim_set_hl('NvimTreeExecFile', { link = 'Function' })
+ nvim_set_hl('NvimTreeOpenedFile', { fg = colors.blue, bold = true })
+ nvim_set_hl('NvimTreeModifiedFile', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeSpecialFile', { link = 'Special' })
+ nvim_set_hl('NvimTreeIndentMarker', { fg = colors.shade_violet })
+ nvim_set_hl('NvimTreeGitDirty', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeGitStaged', { fg = colors.git_add })
+ nvim_set_hl('NvimTreeGitMerge', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeGitRenamed', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeGitNew', { fg = colors.git_add })
+ nvim_set_hl('NvimTreeGitDeleted', { fg = colors.git_delete })
+ nvim_set_hl(
+ 'NvimTreeNormal',
+ { fg = colors.base1, bg = colors.base04 },
+ { transparent = config.transparent.neotree and config.transparent.enabled }
+ )
+ nvim_set_hl('NvimTreeNormalFloat', { link = 'NvimTreeNormal' })
+ nvim_set_hl('NvimTreeEndOfBuffer', { fg = colors.base04 })
+ nvim_set_hl('NvimTreeWinSeparator', { link = 'WinSeparator' })
+ end
+
+ if config.plugins.whichkey then
+ nvim_set_hl(
+ 'WhichKeyNormal',
+ { fg = colors.base0, bg = colors.base04 },
+ { transparent = config.transparent.whichkey and config.transparent.enabled }
+ )
+ nvim_set_hl('WhichKey', { link = 'Property' })
+ nvim_set_hl('WhichKeyDesc', { link = 'String' })
+ nvim_set_hl('WhichKeySeparator', { link = 'Keyword' })
+ nvim_set_hl('WhichKeyGroup', { link = 'Constant' })
+ end
+
+ if config.plugins.dashboard then
+ nvim_set_hl('DashboardHeader', { fg = colors.base01 })
+ nvim_set_hl('DashboardFooter', { fg = colors.violet })
+ nvim_set_hl('DashboardDesc', { link = 'Directory' })
+ nvim_set_hl('DashboardKey', { link = 'Keyword' })
+ nvim_set_hl('DashboardIcon', { link = 'Directory' })
+ nvim_set_hl('DashboardShotCut', { fg = colors.base0 })
+ end
+
+ if config.plugins.gitsigns then
+ nvim_set_hl(
+ 'GitSignsAdd',
+ { fg = colors.git_add, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('GitSignsChange', { fg = colors.git_modify, bg = signcolumn.bg }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('GitSignsDelete', { fg = colors.git_delete, bg = signcolumn.bg }, {
+ transparent = config.transparent.enabled,
+ })
+ end
+
+ if config.plugins.telescope then
+ nvim_set_hl('TelescopeSelection', { fg = colors.base1, bg = colors.base02 })
+ nvim_set_hl('TelescopeSelectionCaret', { fg = colors.blue, bg = colors.base02 })
+ nvim_set_hl('TelescopeMultiIcon', { fg = colors.base1 })
+ nvim_set_hl(
+ 'TelescopeNormal',
+ { fg = colors.base0, bg = colors.base04 },
+ { transparent = config.transparent.telescope and config.transparent.enabled }
+ )
+ nvim_set_hl('TelescopePreviewNormal', { link = 'TelescopeNormal' })
+ nvim_set_hl('TelescopePromptNormal', { link = 'TelescopeNormal' })
+ nvim_set_hl('TelescopeResultsNormal', { link = 'TelescopeNormal' })
+ nvim_set_hl('TelescopeBorder', { link = 'FloatBorder' })
+ nvim_set_hl('TelescopePromptBorder', { link = 'TelescopeBorder' })
+ nvim_set_hl('TelescopeResultsBorder', { link = 'TelescopeBorder' })
+ nvim_set_hl('TelescopePreviewBorder', { link = 'TelescopeBorder' })
+ nvim_set_hl('TelescopeTitle', { link = 'FloatTitle' })
+ nvim_set_hl('TelescopePromptTitle', { link = 'TelescopeTitle' })
+ nvim_set_hl('TelescopeResultsTitle', { link = 'TelescopeTitle' })
+ nvim_set_hl('TelescopePreviewTitle', { link = 'TelescopeTitle' })
+ nvim_set_hl('TelescopeMatching', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl('TelescopePreviewMatch', { link = 'TelescopeMatching' })
+ nvim_set_hl('TelescopePromptCounter', { link = 'NonText' })
+ nvim_set_hl('TelescopePromptPrefix', { fg = colors.cyan })
+ end
+
+ if config.plugins.noice then
+ nvim_set_hl('NoiceFormatProgressTodo', { fg = colors.diag_ok, bg = colors.mix_green })
+ nvim_set_hl('NoiceFormatProgressDone', { fg = colors.diag_ok, reverse = true })
+ nvim_set_hl('NoiceLspProgressSpinner', { fg = colors.diag_ok })
+ nvim_set_hl('NoiceLspProgressClient', { fg = colors.diag_ok })
+ nvim_set_hl('NoiceLspProgressTitle', { link = 'Title' })
+ nvim_set_hl('NoiceCmdlineIcon', { link = 'WinSeparator' })
+ nvim_set_hl('NoiceCmdlinePopupBorder', { link = 'WinSeparator' })
+ nvim_set_hl('NoiceCmdlinePopupTitle', { link = 'Title' })
+ end
+
+ if config.plugins.hop then
+ nvim_set_hl('HopNextKey', { fg = colors.magenta })
+ nvim_set_hl('HopNextKey1', { fg = colors.blue })
+ nvim_set_hl('HopNextKey2', { fg = colors.cyan })
+ nvim_set_hl('HopUnmatched', { fg = colors.base01 })
+ end
+
+ if config.plugins.ministatusline then
+ nvim_set_hl('MiniStatuslineModeNormal', { fg = colors.base03, bg = colors.blue })
+ nvim_set_hl('MiniStatuslineModeInsert', { fg = colors.base03, bg = colors.green })
+ nvim_set_hl('MiniStatuslineModeVisual', { fg = colors.base03, bg = colors.magenta })
+ nvim_set_hl('MiniStatuslineModeReplace', { fg = colors.base03, bg = colors.red })
+ nvim_set_hl('MiniStatuslineModeCommand', { fg = colors.base03, bg = colors.orange })
+ nvim_set_hl('MinistatusLineFileName', { fg = colors.base0, bg = colors.base04 })
+ nvim_set_hl('MiniStatuslineDevinfo', { fg = colors.base0, bg = colors.base02 })
+ nvim_set_hl('MiniStatuslineFileinfo', { fg = colors.base0, bg = colors.base02 })
+ nvim_set_hl('MiniStatuslineInactive', { fg = colors.base01, bg = colors.base03 })
+ end
+
+ if config.plugins.minitabline then
+ nvim_set_hl('MiniTablineCurrent', { fg = colors.base0, bg = colors.base03 })
+ nvim_set_hl('MiniTablineVisible', { fg = colors.base0, bg = colors.base03 })
+ nvim_set_hl('MiniTablineHidden', { fg = colors.base01, bg = colors.base03 })
+ nvim_set_hl('MiniTablineModifiedCurrent', { link = 'MiniTabLineCurrent' })
+ nvim_set_hl('MiniTablineModifiedVisible', { link = 'MiniTablineVisible' })
+ nvim_set_hl('MiniTablineModifiedHidden', { link = 'MiniTablineHidden' })
+ nvim_set_hl('MiniTablineFill', { fg = colors.base0, bg = colors.base04 })
+ nvim_set_hl('MiniTablineTabpagesection', { fg = colors.base0, bg = colors.base04 })
+ end
+
+ if config.plugins.ministarter then
+ nvim_set_hl('MiniStarterCurrent', { link = 'CursorLine' })
+ nvim_set_hl('MiniStarterHeader', { fg = colors.base01 })
+ nvim_set_hl('MiniStarterFooter', { fg = colors.violet })
+ nvim_set_hl('MiniStarterItem', { fg = colors.base0 })
+ nvim_set_hl('MiniStarterItemBullet', { fg = colors.blue })
+ nvim_set_hl('MiniStarterItemPrefix', { fg = colors.blue })
+ nvim_set_hl('MiniStarterSection', { link = 'Title' })
+ nvim_set_hl('MiniStarterQuery', { fg = colors.blue, bold = true })
+ end
+
+ if config.plugins.minicursorword then
+ nvim_set_hl('MiniCursorword', { fg = colors.cyan, bg = colors.mix_cyan })
+ end
+
+ if config.plugins.notify then
+ nvim_set_hl('NotifyBackground', { bg = colors.base03 })
+ nvim_set_hl('NotifyERRORBorder', { link = 'NotifyERRORBody' })
+ nvim_set_hl('NotifyWARNBorder', { link = 'NotifyWARNBody' })
+ nvim_set_hl('NotifyINFOBorder', { link = 'NotifyINFOBody' })
+ nvim_set_hl('NotifyDEBUGBorder', { link = 'NotifyDEBUGBody' })
+ nvim_set_hl('NotifyTRACEBorder', { link = 'NotifyTRACEBody' })
+ nvim_set_hl('NotifyERRORIcon', { fg = colors.diag_error })
+ nvim_set_hl('NotifyWARNIcon', { fg = colors.diag_warning })
+ nvim_set_hl('NotifyINFOIcon', { fg = colors.diag_info })
+ nvim_set_hl('NotifyDEBUGIcon', { fg = colors.magenta })
+ nvim_set_hl('NotifyTRACEIcon', { fg = colors.blue })
+ nvim_set_hl('NotifyERRORTitle', { fg = colors.diag_error })
+ nvim_set_hl('NotifyWARNTitle', { fg = colors.diag_warning })
+ nvim_set_hl('NotifyINFOTitle', { fg = colors.diag_info })
+ nvim_set_hl('NotifyDEBUGTitle', { fg = colors.magenta })
+ nvim_set_hl('NotifyTRACETitle', { fg = colors.blue })
+ nvim_set_hl('NotifyERRORBody', { fg = colors.diag_error })
+ nvim_set_hl('NotifyWARNBody', { fg = colors.diag_warning })
+ nvim_set_hl('NotifyINFOBody', { fg = colors.diag_info })
+ nvim_set_hl('NotifyDEBUGBody', { fg = colors.magenta })
+ nvim_set_hl('NotifyTRACEBody', { fg = colors.blue })
+ end
+
+ if config.plugins.rainbowdelimiters then
+ nvim_set_hl('RainbowDelimiterRed', { fg = colors.red })
+ nvim_set_hl('RainbowDelimiteYellow', { fg = colors.yellow })
+ nvim_set_hl('RainbowDelimiterBlue', { fg = colors.blue })
+ nvim_set_hl('RainbowDelimiterOrange', { fg = colors.orange })
+ nvim_set_hl('RainbowDelimiterGreen', { fg = colors.green })
+ nvim_set_hl('RainbowDelimiterViolet', { fg = colors.violet })
+ nvim_set_hl('RainbowDelimiterCyan', { fg = colors.cyan })
+ end
+
+ if config.plugins.bufferline and config.transparent.enabled then
+ local background = color.shade(colors.base02, 2)
+ nvim_set_hl('BufferLineFill', { bg = background })
+ nvim_set_hl('BufferLineBufferSelected', { fg = colors.base0 })
+ nvim_set_hl('BufferLineSeparator', { fg = background })
+ nvim_set_hl('BufferLineSeparatorSelected', { fg = background })
+ nvim_set_hl('BufferLineSeparatorVisible', { fg = background })
+ end
+
+ if config.plugins.lazy then
+ nvim_set_hl('LazyNormal', { fg = colors.base0, bg = colors.base04 }, {
+ transparent = config.transparent.lazy and config.transparent.enabled,
+ })
+ nvim_set_hl('LazyH1', { fg = colors.blue, bold = true })
+ nvim_set_hl('LazyButton', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl('LazyButtonActive', { fg = colors.violet, bg = colors.mix_violet })
+ nvim_set_hl('LazyReasonStart', { fg = colors.yellow })
+ nvim_set_hl('LazyReasonEvent', { fg = colors.magenta })
+ end
+
+ if config.plugins.rendermarkdown then
+ nvim_set_hl('RenderMarkdownH1Bg', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('RenderMarkdownH2Bg', { fg = colors.violet, bg = colors.mix_violet })
+ nvim_set_hl('RenderMarkdownH3Bg', { fg = colors.yellow, bg = colors.mix_yellow })
+ nvim_set_hl('RenderMarkdownH4Bg', { fg = colors.orange, bg = colors.mix_orange })
+ nvim_set_hl('RenderMarkdownH5Bg', { fg = colors.red, bg = colors.mix_red })
+ nvim_set_hl('RenderMarkdownH6Bg', { fg = colors.magenta, bg = colors.mix_magenta })
+ end
+
+ if config.plugins.neogit then
+ nvim_set_hl('NeogitBranch', { fg = colors.red })
+ nvim_set_hl('NeogitRemote', { fg = colors.violet })
+ nvim_set_hl('NeogitHunkHeader', { fg = colors.blue, bg = colors.mix_blue, bold = true })
+ nvim_set_hl('NeogitHunkHeaderHighlight', { link = 'Title' })
+ nvim_set_hl('NeogitDiffContextHighlight', { fg = colors.base1, bg = colors.base02 })
+ nvim_set_hl('NeogitDiffContext', { fg = colors.base0, bg = colors.base03 })
+ nvim_set_hl('NeogitDiffDeleteHighlight', { fg = colors.red, bg = colors.mix_red })
+ nvim_set_hl('NeogitDiffDelete', { fg = colors.red })
+ nvim_set_hl('NeogitDiffAddHighlight', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('NeogitDiffAdd', { fg = colors.blue })
+ end
+
+ if config.plugins.todocomments then
+ nvim_set_hl('TodoFgTODO', { fg = colors.blue })
+ nvim_set_hl('TodoFgWARN', { fg = colors.yellow })
+ nvim_set_hl('TodoFgTEST', { fg = colors.violet })
+ nvim_set_hl('TodoFgPERF', { fg = colors.magenta })
+ nvim_set_hl('TodoFgNOTE', { fg = colors.cyan })
+ nvim_set_hl('TodoFgHACK', { fg = colors.orange })
+ nvim_set_hl('TodoFgFIX', { fg = colors.red })
+
+ nvim_set_hl('TodoSignTODO', { fg = colors.blue })
+ nvim_set_hl('TodoSignWARN', { fg = colors.yellow })
+ nvim_set_hl('TodoSignTEST', { fg = colors.violet })
+ nvim_set_hl('TodoSignPERF', { fg = colors.magenta })
+ nvim_set_hl('TodoSignNOTE', { fg = colors.cyan })
+ nvim_set_hl('TodoSignHACK', { fg = colors.orange })
+ nvim_set_hl('TodoSignFIX', { fg = colors.red })
+
+ nvim_set_hl('TodoBgTODO', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('TodoBgWARN', { fg = colors.yellow, bg = colors.mix_yellow })
+ nvim_set_hl('TodoBgTEST', { fg = colors.violet, bg = colors.mix_violet })
+ nvim_set_hl('TodoBgPERF', { fg = colors.magenta, bg = colors.mix_magenta })
+ nvim_set_hl('TodoBgNOTE', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl('TodoBgHACK', { fg = colors.orange, bg = colors.mix_orange })
+ nvim_set_hl('TodoBgFIX', { fg = colors.red, bg = colors.mix_red })
+ end
+
+ if config.plugins.ale then
+ nvim_set_hl('ALEErrorSign', { fg = colors.diag_error })
+ nvim_set_hl('ALEWarningSign', { fg = colors.diag_warning })
+ end
+
+ if config.plugins.alpha then
+ nvim_set_hl('AlphaShortcut', { fg = colors.base0 })
+ nvim_set_hl('AlphaHeader', { fg = colors.base01 })
+ nvim_set_hl('AlphaHeaderLabel', { fg = colors.orange })
+ nvim_set_hl('AlphaFooter', { fg = colors.violet })
+ nvim_set_hl('AlphaButtons', { link = 'Directory' })
+ end
+
+ if config.plugins.yanky then
+ nvim_set_hl('YankyPut', { link = 'Search' })
+ nvim_set_hl('YankyYanked', { link = 'IncSearch' })
+ end
+
+ if config.plugins.gitgutter then
+ nvim_set_hl('GitGutterAdd', { fg = colors.git_add })
+ nvim_set_hl('GitGutterChange', { fg = colors.git_modify })
+ nvim_set_hl('GitGutterDelete', { fg = colors.git_delete })
+ nvim_set_hl('GitGutterAddLineNr', { fg = colors.git_add })
+ nvim_set_hl('GitGutterChangeLineNr', { fg = colors.git_modify })
+ nvim_set_hl('GitGutterDeleteLineNr', { fg = colors.git_delete })
+ end
+
+ if config.plugins.coc then
+ nvim_set_hl(
+ 'CocErrorSign',
+ { fg = colors.diag_error, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocWarningSign',
+ { fg = colors.diag_warning, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocInfoSign',
+ { fg = colors.diag_info, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocHintSign',
+ { fg = colors.diag_hint, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocErrorVirtualText',
+ { fg = colors.diag_error },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'CocWarningVirtualText',
+ { fg = colors.diag_warning },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'CocInfoVirtualText',
+ { fg = colors.diag_info },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'CocHintVirtualText',
+ { fg = colors.diag_hint },
+ { error_lens = config.error_lens.text }
+ )
+ end
+
+ if config.plugins.leap then
+ nvim_set_hl('LeapMatch', { fg = colors.magenta, bg = colors.mix_magenta, bold = true })
+ nvim_set_hl('LeapLabel', { fg = colors.magenta, bold = true })
+ nvim_set_hl('LeapBackDrop', { fg = colors.base01 })
+ end
+
+ if config.plugins.mason then
+ nvim_set_hl('MasonHeader', { link = 'FloatTitle' })
+ nvim_set_hl(
+ 'MasonNormal',
+ { fg = colors.base0, bg = colors.base04 },
+ { transparent = config.transparent.mason and config.transparent.enabled }
+ )
+ nvim_set_hl('MasonHighlight', { fg = colors.cyan })
+ nvim_set_hl('MasonHighlightBlock', { fg = colors.mix_cyan, bg = colors.cyan })
+ nvim_set_hl('MasonHighlightBlockBold', { fg = colors.mix_cyan, bg = colors.cyan, bold = true })
+ end
+
+ if config.on_highlights then
+ local highlights = config.on_highlights(colors, color)
+
+ for group_name, group_val in pairs(highlights) do
+ local hl = nvim_get_hl { name = group_name, link = true }
+ local val = {}
+
+ if hl.link then
+ val = group_val
+ else
+ val = vim.tbl_extend('force', hl, group_val)
+ end
+
+ vim.api.nvim_set_hl(0, group_name, val)
+ end
+ end
+end
+
+return M
diff --git a/lua/solarized/highlights/solarized-light.lua b/lua/solarized/highlights/solarized-light.lua
new file mode 100644
index 0000000..0cb51e8
--- /dev/null
+++ b/lua/solarized/highlights/solarized-light.lua
@@ -0,0 +1,789 @@
+local M = {}
+
+local function nvim_get_hl(opts)
+ local hl = vim.api.nvim_get_hl(0, opts)
+
+ if hl.link then
+ return nvim_get_hl { name = hl.link }
+ end
+
+ return hl
+end
+
+---@param group_name string
+---@param group_val vim.api.keyset.highlight
+---@param config? solarized.nvim_set_hl.config
+local nvim_set_hl = function(group_name, group_val, config)
+ local val = { fg = 'NONE', bg = 'NONE' }
+
+ if not group_val.link then
+ if config and config.transparent then
+ group_val.bg = 'NONE'
+ end
+
+ if config and config.styles then
+ group_val = vim.tbl_extend('force', group_val, config.styles)
+ end
+
+ if config and config.error_lens then
+ local color = require 'solarized.color'
+ local editor = require('solarized.utils').nvim_get_hl 'Normal'
+ local ok, mix_color = pcall(color.blend, group_val.fg, editor.bg, 0.1)
+ if ok then
+ group_val.bg = mix_color
+ else
+ group_val.bg = color.tint(group_val.fg, 7)
+ end
+ end
+
+ val = vim.tbl_extend('force', val, group_val)
+ vim.api.nvim_set_hl(0, group_name, val)
+ else
+ vim.api.nvim_set_hl(0, group_name, group_val)
+ end
+end
+
+---@param colors solarized.palette
+---@param config solarized.config
+M.set_highlight = function(colors, config)
+ local color = require 'solarized.color'
+ if config.on_colors then
+ colors = vim.tbl_extend('force', colors, config.on_colors(colors, color))
+ end
+ local solarized_light = require 'solarized.variants.solarized-light'
+ solarized_light.set_variant {
+ config = config,
+ nvim_set_hl = nvim_set_hl,
+ colors = colors,
+ color = color,
+ }
+
+ -- EDITOR :h highlight-groups
+ nvim_set_hl('ColorColumn', { bg = colors.base2 })
+ nvim_set_hl('Conceal', { fg = colors.blue })
+ nvim_set_hl('CurSearch', { link = 'IncSearch' })
+ nvim_set_hl('Cursor', { fg = colors.base3, bg = colors.base00 })
+ nvim_set_hl('lCursor', { link = 'Cursor' })
+ nvim_set_hl('CursorIM', { link = 'Cursor' })
+ nvim_set_hl('CursorColumn', { link = 'ColorColumn' })
+ nvim_set_hl('CursorLine', { bg = colors.base2 })
+ nvim_set_hl('Directory', { fg = colors.blue })
+ nvim_set_hl('DiffAdd', { fg = colors.git_add })
+ nvim_set_hl('DiffChange', { fg = colors.git_modify })
+ nvim_set_hl('DiffDelete', { fg = colors.git_delete, reverse = true })
+ nvim_set_hl('DiffText', { fg = colors.cyan, reverse = true })
+ nvim_set_hl('EndOfBuffer', { fg = colors.base3 })
+ nvim_set_hl('TermCursor', { link = 'Cursor' })
+ nvim_set_hl('TermCursorNC', { fg = colors.base3, bg = colors.base00 })
+ nvim_set_hl('ErrorMsg', { fg = colors.diag_error })
+ -- nvim_set_hl(
+ -- 'WinSeparator',
+ -- { fg = colors.blue, bg = colors.base4 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('Folded', { fg = colors.base00, bg = colors.base2 })
+ nvim_set_hl('FoldColumn', { fg = colors.base00, bg = colors.base2 })
+ -- nvim_set_hl(
+ -- 'SignColumn',
+ -- { fg = colors.base00, bg = colors.base2 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl(
+ 'IncSearch',
+ { fg = colors.yellow, bg = colors.mix_yellow, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('Substitute', { link = 'IncSearch' })
+ -- nvim_set_hl(
+ -- 'LineNr',
+ -- { fg = colors.base1, bg = colors.base2 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('LineNrAbove', { link = 'LineNr' })
+ nvim_set_hl('LineNrBelow', { link = 'LineNr' })
+ -- nvim_set_hl(
+ -- 'CursorLineNr',
+ -- { fg = colors.base01, bg = colors.base2 },
+ -- { transparent = config.transparent.enabled }
+ -- )
+ nvim_set_hl('CursorLineFold', { link = 'FoldColumn' })
+ nvim_set_hl('CursorLineSign', { link = 'SignColumn' })
+ nvim_set_hl('MatchParen', { fg = colors.cyan })
+ nvim_set_hl('ModeMsg', { fg = colors.blue })
+ nvim_set_hl('MsgArea', { link = 'Normal' })
+ nvim_set_hl('MsgSeparator', { link = 'Normal' })
+ nvim_set_hl('MoreMsg', { link = 'ModeMsg' })
+ nvim_set_hl('NonText', { fg = colors.base01 })
+ nvim_set_hl(
+ 'Normal',
+ { fg = colors.base00, bg = colors.base3 },
+ { transparent = config.transparent.normal and config.transparent.enabled }
+ )
+ nvim_set_hl('NormalFloat', { fg = colors.base00, bg = colors.base4 }, {
+ transparent = config.transparent.normalfloat and config.transparent.enabled,
+ })
+ -- nvim_set_hl('FloatBorder', { link = 'WinSeparator' })
+ -- nvim_set_hl('FloatTitle', { fg = colors.blue })
+ nvim_set_hl('NormalNC', { link = 'Normal' })
+ nvim_set_hl('Pmenu', { fg = colors.base00, bg = colors.base4 }, {
+ transparent = config.transparent.pmenu and config.transparent.enabled,
+ })
+ nvim_set_hl('PmenuSel', { fg = colors.blue, reverse = true })
+ nvim_set_hl('PmenuKind', { link = 'Pmenu' })
+ nvim_set_hl('PmenuKindSel', { link = 'PmenuSel' })
+ nvim_set_hl('PmenuExtra', { link = 'Pmenu' })
+ nvim_set_hl('PmenuExtraSel', { link = 'PmenuSel' })
+ nvim_set_hl('PmenuSbar', { bg = colors.base2 })
+ nvim_set_hl('PmenuThumb', { bg = colors.blue })
+ nvim_set_hl('Question', { fg = colors.diag_info })
+ nvim_set_hl('QuickFixLine', { fg = colors.base00, bg = colors.base3 })
+ nvim_set_hl('Search', { fg = colors.green, bg = colors.mix_green })
+ nvim_set_hl('SpecialKey', { link = 'NonText' })
+ nvim_set_hl('SpellBad', { underline = true, strikethrough = true })
+ nvim_set_hl('SpellCap', { fg = colors.diag_hint })
+ nvim_set_hl('SpellLocal', { link = 'SpellCap' })
+ nvim_set_hl('SpellRare', { fg = colors.diag_warning })
+ nvim_set_hl('StatusLine', { fg = colors.base01, bg = colors.base2 })
+ nvim_set_hl('StatusLineNC', { fg = colors.base01, bg = colors.base2 })
+ nvim_set_hl('TabLine', { fg = colors.base01, bg = colors.base2 })
+ nvim_set_hl('TabLineFill', { fg = colors.base0, bg = colors.base2 })
+ nvim_set_hl('TabLineSel', { fg = colors.base0, bg = colors.base3 })
+ nvim_set_hl('Title', { fg = colors.blue })
+ nvim_set_hl('Visual', { fg = colors.magenta, bg = colors.mix_magenta, bold = true })
+ nvim_set_hl('VisualNOS', { link = 'Visual' })
+ nvim_set_hl('warningMsg', { fg = colors.diag_warning })
+ nvim_set_hl('Whitespace', { fg = colors.base01 })
+ nvim_set_hl('WildMenu', { fg = colors.base2 })
+ nvim_set_hl('WinBar', { link = 'Pmenu' })
+ nvim_set_hl('WinBarNC', { link = 'WinBar' })
+
+ -- PLUGINS
+ if config.plugins.treesitter then
+ nvim_set_hl('@variable', { link = 'Identifier' })
+ nvim_set_hl('@variable.builtin', { link = 'Constant' })
+ nvim_set_hl('@variable.parameter', { link = 'Parameter' })
+ nvim_set_hl('@variable.member', { link = 'Property' })
+ nvim_set_hl('@property', { link = 'Property' })
+ nvim_set_hl('@property.json', { link = 'Keyword' })
+ nvim_set_hl('@property.yaml', { link = 'Keyword' })
+ nvim_set_hl('@constant', { link = 'Constant' })
+ nvim_set_hl('@constant.builtin', { link = 'Constant' })
+ nvim_set_hl('@constant.macro', { link = 'Constant' })
+ nvim_set_hl('@constant.html', { link = 'Tag' })
+ nvim_set_hl('@module', { link = 'Type' })
+ nvim_set_hl('@module.builtin', { link = 'Constant' })
+ nvim_set_hl('@label', { link = 'Statement' })
+ nvim_set_hl('@string', { link = 'String' })
+ nvim_set_hl('@string.documentation', { link = 'Statement' })
+ nvim_set_hl('@string.regexp', { fg = colors.magenta })
+ nvim_set_hl('@string.escape', { link = 'Statement' })
+ nvim_set_hl('@string.special', { link = 'Special' })
+ nvim_set_hl('@string.special.symbol', { link = 'Identifier' })
+ nvim_set_hl('@string.special.url', { link = 'Underlined' })
+ nvim_set_hl('@character', { link = 'Constant' })
+ nvim_set_hl('@character.special', { link = 'Constant' })
+ nvim_set_hl('@character.printf', { link = 'Keyword' })
+ nvim_set_hl('@type', { link = 'Type' })
+ nvim_set_hl('@type.builtin', { link = 'Keyword' })
+ nvim_set_hl('@type.definition', { link = 'Type' })
+ nvim_set_hl('@type.qualifier', { link = 'Type' })
+ nvim_set_hl('@attribute', { link = 'Keyword' })
+ nvim_set_hl('@function', { link = 'Function' })
+ nvim_set_hl('@function.builtin', { link = 'Function' })
+ nvim_set_hl('@function.call', { link = 'Function' })
+ nvim_set_hl('@function.macro', { link = 'Function' })
+ nvim_set_hl('@function.method', { link = 'Function' })
+ nvim_set_hl('@function.method.call', { link = 'Function' })
+ nvim_set_hl('@constructor', { link = 'Type' })
+ nvim_set_hl('@constructor.lua', { link = 'Delimiter' })
+ nvim_set_hl('@operator', { link = 'Statement' })
+ nvim_set_hl('@keyword', { link = 'Keyword' })
+ nvim_set_hl('@keyword.coroutine', { link = 'Statement' })
+ nvim_set_hl('@keyword.function', { link = 'Keyword' })
+ nvim_set_hl('@keyword.operator', { link = 'Statement' })
+ nvim_set_hl('@keyword.import', { link = 'Include' })
+ nvim_set_hl('@keyword.repeat', { link = 'Statement' })
+ nvim_set_hl('@keyword.return', { link = 'Statement' })
+ nvim_set_hl('@keyword.debug', { link = 'Statement' })
+ nvim_set_hl('@keyword.exception', { link = 'Statement' })
+ nvim_set_hl('@keyword.conditional', { link = 'Statement' })
+ nvim_set_hl('@keyword.conditional.ternary', { link = 'Statement' })
+ nvim_set_hl('@keyword.directive', { link = 'Statement' })
+ nvim_set_hl('@keyword.directive.define', { link = 'Statement' })
+ nvim_set_hl('@punctuation.delimiter', { link = 'Delimiter' })
+ nvim_set_hl('@punctuation.bracket', { link = 'Delimiter' })
+ nvim_set_hl('@punctuation.special', { link = 'Keyword' })
+ nvim_set_hl('@comment', { link = 'Comment' })
+ nvim_set_hl('@comment.documentation', { link = 'Comment' })
+ nvim_set_hl('@comment.error', { fg = colors.diag_error })
+ nvim_set_hl('@comment.warning', { fg = colors.diag_warning })
+ nvim_set_hl('@comment.todo', { link = 'Todo' })
+ nvim_set_hl('@comment.note', { fg = colors.diag_hint })
+ nvim_set_hl('@markup.strong', { fg = colors.magenta, bold = true })
+ nvim_set_hl('@markup.italic', { link = 'Underlined' })
+ nvim_set_hl('@markup.strikethrough', { fg = colors.base1, strikethrough = true })
+ nvim_set_hl('@markup.underline', { link = 'Underlined' })
+ nvim_set_hl('@markup.heading', { fg = colors.red, bold = true })
+ nvim_set_hl('@markup.heading.1', { fg = colors.red, bold = true })
+ nvim_set_hl('@markup.heading.2', { fg = colors.magenta })
+ nvim_set_hl('@markup.heading.3', { fg = colors.yellow })
+ nvim_set_hl('@markup.heading.4', { fg = colors.orange })
+ nvim_set_hl('@markup.heading.5', { fg = colors.blue })
+ nvim_set_hl('@markup.heading.6', { fg = colors.violet })
+ nvim_set_hl('@markup.quote', { fg = colors.green })
+ nvim_set_hl('@markup.math', { fg = colors.violet })
+ nvim_set_hl('@markup.environment', { link = 'Comment' })
+ nvim_set_hl('@markup.link', { link = 'Underlined' })
+ nvim_set_hl('@markup.link.label', { link = 'Constant' })
+ nvim_set_hl('@markup.link.url', { link = 'Underlined' })
+ nvim_set_hl('@markup.raw', { fg = colors.cyan })
+ nvim_set_hl('@markup.raw.block', { fg = colors.base00 })
+ nvim_set_hl('@markup.list', { fg = colors.orange })
+ nvim_set_hl('@markup.list.checked', { fg = colors.green })
+ nvim_set_hl('@markup.list.unchecked', { fg = colors.base1 })
+ nvim_set_hl('@diff.plus', { fg = colors.git_add })
+ nvim_set_hl('@diff.minus', { fg = colors.git_delete })
+ nvim_set_hl('@diff.delta', { fg = colors.git_modify })
+ nvim_set_hl('@tag', { link = 'Tag' })
+ nvim_set_hl('@tag.attribute', { link = 'TagAttribute' })
+ nvim_set_hl('@tag.delimiter', { link = 'Delimiter' })
+ end
+
+ local signcolumn = require('solarized.utils').nvim_get_hl 'SignColumn'
+ if config.plugins.lspconfig then
+ nvim_set_hl('@lsp.type.class', { link = 'Type' })
+ nvim_set_hl('@lsp.type.decorator', { link = 'Function' })
+ nvim_set_hl('@lsp.type.enum', { link = 'Type' })
+ nvim_set_hl('@lsp.type.enumMember', { link = 'Type' })
+ nvim_set_hl('@lsp.type.interface', { link = 'Type' })
+ nvim_set_hl('@lsp.type.macro', { link = '@function.builtin' })
+ nvim_set_hl('@lsp.type.namespace', { link = 'Type' })
+ nvim_set_hl('@lsp.type.parameter', { link = 'Parameter' })
+ nvim_set_hl('@lsp.type.property', { link = 'Property' })
+ nvim_set_hl('@lsp.type.struct', { link = 'Type' })
+ nvim_set_hl('@lsp.type.type', { link = 'Type' })
+ nvim_set_hl('@lsp.type.typeParameter', { link = 'Type' })
+ nvim_set_hl('@lsp.type.variable', { link = 'Identifier' })
+ nvim_set_hl('@lsp.typemod.variable.defaultLibrary', { link = 'Constant' })
+ nvim_set_hl('@lsp.typemod.variable.readonly', { link = 'Constant' })
+ nvim_set_hl('@lsp.typemod.variable.global', { link = 'Constant' })
+ nvim_set_hl('@lsp.typemod.keyword.documentation', { link = 'Statement' })
+ nvim_set_hl('@lsp.typemod.class.documentation', { link = 'Type' })
+ nvim_set_hl('@lsp.typemod.property.readonly', { link = 'Constant' })
+ nvim_set_hl('DiagnosticError', { fg = colors.diag_error })
+ nvim_set_hl('DiagnosticWarn', { fg = colors.diag_warning })
+ nvim_set_hl('DiagnosticInfo', { fg = colors.diag_info })
+ nvim_set_hl('DiagnosticHint', { fg = colors.diag_hint })
+ nvim_set_hl('DiagnosticOk', { fg = colors.diag_ok })
+ nvim_set_hl(
+ 'DiagnosticVirtualTextError',
+ { fg = colors.diag_error },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextWarn',
+ { fg = colors.diag_warning },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextInfo',
+ { fg = colors.diag_hint },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextHint',
+ { fg = colors.diag_info },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticVirtualTextOk',
+ { fg = colors.diag_ok },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineError',
+ { fg = colors.diag_error, underline = true, sp = colors.diag_error }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineWarn',
+ { fg = colors.diag_warning, underline = true, sp = colors.diag_warning }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineInfo',
+ { fg = colors.diag_info, underline = true, sp = colors.diag_info }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineHint',
+ { fg = colors.diag_hint, underline = true, sp = colors.diag_hint }
+ )
+ nvim_set_hl(
+ 'DiagnosticUnderlineOk',
+ { fg = colors.diag_ok, underline = true, sp = colors.diag_ok }
+ )
+ nvim_set_hl(
+ 'DiagnosticSignError',
+ { fg = colors.diag_error, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Error" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignWarn',
+ { fg = colors.diag_warning, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Warn" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignInfo',
+ { fg = colors.diag_info, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Info" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignHint',
+ { fg = colors.diag_hint, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled, error_lens = config.error_lens.symbol }
+ ) -- Used for "Hint" signs in sign column.
+ nvim_set_hl(
+ 'DiagnosticSignOk',
+ { fg = colors.diag_ok, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('LspReferenceText', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl('LspReferenceRead', { link = 'Visual' })
+ nvim_set_hl('LspReferenceWrite', { link = 'Visual' })
+ nvim_set_hl('LspInlayHint', { fg = colors.base1 })
+ end
+
+ if config.plugins.navic then
+ nvim_set_hl('NavicText', { fg = colors.base00 })
+ nvim_set_hl('NavicSeparator', { link = 'Keyword' })
+ nvim_set_hl('NavicIconsMethod', { link = 'Function' })
+ nvim_set_hl('NavicIconsFunction', { link = 'Function' })
+ nvim_set_hl('NavicIconsField', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsVariable', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsClass', { link = 'Type' })
+ nvim_set_hl('NavicIconsInterface', { link = 'Type' })
+ nvim_set_hl('NavicIconsModule', { link = 'Type' })
+ nvim_set_hl('NavicIconsNamespace', { link = 'Type' })
+ nvim_set_hl('NavicIconsProperty', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsUnit', { link = 'Number' })
+ nvim_set_hl('NavicIconsEnum', { link = 'Type' })
+ nvim_set_hl('NavicIconsKeyword', { link = 'Keyword' })
+ nvim_set_hl('NavicIconsSnippet', { link = 'Tag' })
+ nvim_set_hl('NavicIconsColor', { fg = colors.orange })
+ nvim_set_hl('NavicIconsFile', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsReference', { link = 'Underlined' })
+ nvim_set_hl('NavicIconsFolder', { link = 'Directory' })
+ nvim_set_hl('NavicIconsEnumMember', { link = 'Constant' })
+ nvim_set_hl('NavicIconsConstant', { link = 'Constant' })
+ nvim_set_hl('NavicIconsStruct', { link = 'Identifier' })
+ nvim_set_hl('NavicIconsEvent', { link = 'Function' })
+ nvim_set_hl('NavicIconsOperator', { link = 'Operator' })
+ nvim_set_hl('NavicIconsTypeParameter', { link = 'Type' })
+ end
+
+ if config.plugins.cmp then
+ nvim_set_hl('CmpItemKindText', { link = 'String' })
+ nvim_set_hl('CmpItemKindMethod', { link = 'Function' })
+ nvim_set_hl('CmpItemKindFunction', { link = 'Function' })
+ nvim_set_hl('CmpItemKindField', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindVariable', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindClass', { link = 'Type' })
+ nvim_set_hl('CmpItemKindInterface', { link = 'Type' })
+ nvim_set_hl('CmpItemKindModule', { link = 'Type' })
+ nvim_set_hl('CmpItemKindProperty', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindUnit', { link = 'Number' })
+ nvim_set_hl('CmpItemKindEnum', { link = 'Type' })
+ nvim_set_hl('CmpItemKindKeyword', { link = 'Keyword' })
+ nvim_set_hl('CmpItemKindSnippet', { link = 'Tag' })
+ nvim_set_hl('CmpItemKindColor', { fg = colors.orange })
+ nvim_set_hl('CmpItemKindFile', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindReference', { link = 'Underlined' })
+ nvim_set_hl('CmpItemKindFolder', { link = 'Directory' })
+ nvim_set_hl('CmpItemKindEnumMember', { link = 'Constant' })
+ nvim_set_hl('CmpItemKindConstant', { link = 'Constant' })
+ nvim_set_hl('CmpItemKindStruct', { link = 'Identifier' })
+ nvim_set_hl('CmpItemKindEvent', { link = 'Function' })
+ nvim_set_hl('CmpItemKindOperator', { link = 'Operator' })
+ nvim_set_hl('CmpItemKindTypeParameter', { link = 'Type' })
+ end
+
+ if config.plugins.indentblankline then
+ nvim_set_hl('IblIndent', { fg = colors.mix_base01 })
+ nvim_set_hl('IblScope', { fg = colors.base1 })
+ end
+
+ if config.plugins.neotree then
+ nvim_set_hl('NeoTreeTitleBar', { fg = colors.blue, reverse = true })
+ nvim_set_hl(
+ 'NeoTreeNormal',
+ { fg = colors.base01, bg = colors.base4 },
+ { transparent = config.transparent.neotree and config.transparent.enabled }
+ )
+ nvim_set_hl('NeoTreeNormalNC', { link = 'NeoTreeNormal' })
+ nvim_set_hl('NeoTreeDotFile', { fg = colors.base1 })
+ nvim_set_hl('NeoTreeGitIgnored', { link = 'NeoTreeDotFile' })
+ nvim_set_hl('NeoTreeFileStats', { link = 'NeoTreeDotFile' })
+ nvim_set_hl('NeoTreeDimText', { link = 'NeoTreeDotFile' })
+ nvim_set_hl('NeoTreeFileNameOpened', { link = 'Directory' })
+ nvim_set_hl('NeoTreeFloatBorder', { link = 'WinSeparator' })
+ nvim_set_hl('NeoTreeFloatTitle', { link = 'Title' })
+ nvim_set_hl('NeoTreeGitAdded', { fg = colors.git_add })
+ nvim_set_hl('NeoTreeGitConflict', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitDeleted', { fg = colors.git_delete })
+ nvim_set_hl('NeoTreeGitModified', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitUnstaged', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitUntracked', { fg = colors.git_modify })
+ nvim_set_hl('NeoTreeGitStaged', { fg = colors.git_add })
+ end
+
+ if config.plugins.nvimtree then
+ nvim_set_hl('NvimTreeSymlink', { link = 'Underlined' })
+ nvim_set_hl('NvimTreeSymlinkIcon', { link = 'Directory' })
+ nvim_set_hl('NvimTreeFolderName', { fg = colors.base01 })
+ nvim_set_hl('NvimTreeRootFolder', { link = 'Title' })
+ nvim_set_hl('NvimTreeFolderIcon', { link = 'Directory' })
+ nvim_set_hl('NvimTreeEmptyFolderName', { fg = colors.base01 })
+ nvim_set_hl('NvimTreeExecFile', { link = 'Function' })
+ nvim_set_hl('NvimTreeOpenedFile', { fg = colors.blue, bold = true })
+ nvim_set_hl('NvimTreeModifiedFile', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeSpecialFile', { link = 'Special' })
+ nvim_set_hl('NvimTreeIndentMarker', { fg = colors.shade_violet })
+ nvim_set_hl('NvimTreeGitDirty', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeGitStaged', { fg = colors.git_add })
+ nvim_set_hl('NvimTreeGitMerge', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeGitRenamed', { fg = colors.git_modify })
+ nvim_set_hl('NvimTreeGitNew', { fg = colors.git_add })
+ nvim_set_hl('NvimTreeGitDeleted', { fg = colors.git_delete })
+ nvim_set_hl(
+ 'NvimTreeNormal',
+ { fg = colors.base01, bg = colors.base4 },
+ { transparent = config.transparent.nvimtree and config.transparent.enabled }
+ )
+ nvim_set_hl('NvimTreeNormalFloat', { link = 'NvimTreeNormal' })
+ nvim_set_hl('NvimTreeEndOfBuffer', { fg = colors.base4 })
+ nvim_set_hl('NvimTreeWinSeparator', { link = 'WinSeparator' })
+ end
+
+ if config.plugins.whichkey then
+ nvim_set_hl(
+ 'WhichKeyNormal',
+ { fg = colors.base01, bg = colors.base4 },
+ { transparent = config.transparent.whichkey and config.transparent.enabled }
+ )
+ nvim_set_hl('WhichKey', { link = 'Property' })
+ nvim_set_hl('WhichKeyDesc', { link = 'String' })
+ nvim_set_hl('WhichKeySeparator', { link = 'Keyword' })
+ nvim_set_hl('WhichKeyGroup', { link = 'Constant' })
+ end
+
+ if config.plugins.dashboard then
+ nvim_set_hl('DashboardHeader', { fg = colors.magenta })
+ nvim_set_hl('DashboardFooter', { fg = colors.violet })
+ nvim_set_hl('DashboardDesc', { link = 'Directory' })
+ nvim_set_hl('DashboardKey', { link = 'Keyword' })
+ nvim_set_hl('DashboardIcon', { link = 'Directory' })
+ nvim_set_hl('DashboardShotCut', { fg = colors.base00 })
+ end
+
+ if config.plugins.gitsigns then
+ nvim_set_hl(
+ 'GitSignsAdd',
+ { fg = colors.git_add, bg = signcolumn.bg },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('GitSignsChange', { fg = colors.git_modify, bg = signcolumn.bg }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('GitSignsDelete', { fg = colors.git_delete, bg = signcolumn.bg }, {
+ transparent = config.transparent.enabled,
+ })
+ end
+
+ if config.plugins.telescope then
+ nvim_set_hl('TelescopeSelection', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('TelescopeSelectionCaret', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('TelescopeMultiIcon', { fg = colors.blue })
+ nvim_set_hl(
+ 'TelescopeNormal',
+ { fg = colors.base0, bg = colors.base4 },
+ { transparent = config.transparent.telescope and config.transparent.enabled }
+ )
+ nvim_set_hl('TelescopePreviewNormal', { link = 'TelescopeNormal' })
+ nvim_set_hl('TelescopePromptNormal', { link = 'TelescopeNormal' })
+ nvim_set_hl('TelescopeResultsNormal', { link = 'TelescopeNormal' })
+ nvim_set_hl('TelescopeBorder', { link = 'FloatBorder' })
+ nvim_set_hl('TelescopePromptBorder', { link = 'TelescopeBorder' })
+ nvim_set_hl('TelescopeResultsBorder', { link = 'TelescopeBorder' })
+ nvim_set_hl('TelescopePreviewBorder', { link = 'TelescopeBorder' })
+ nvim_set_hl('TelescopeTitle', { link = 'FloatTitle' })
+ nvim_set_hl('TelescopePromptTitle', { link = 'TelescopeTitle' })
+ nvim_set_hl('TelescopeResultsTitle', { link = 'TelescopeTitle' })
+ nvim_set_hl('TelescopePreviewTitle', { link = 'TelescopeTitle' })
+ nvim_set_hl('TelescopeMatching', { link = 'IncSearch' })
+ nvim_set_hl('TelescopePreviewMatch', { link = 'TelescopeMatching' })
+ nvim_set_hl('TelescopePromptCounter', { link = 'NonText' })
+ nvim_set_hl('TelescopePromptPrefix', { fg = colors.orange })
+ end
+
+ if config.plugins.noice then
+ nvim_set_hl('NoiceFormatProgressTodo', { fg = colors.diag_ok, bg = colors.mix_green })
+ nvim_set_hl('NoiceFormatProgressDone', { fg = colors.diag_ok, reverse = true })
+ nvim_set_hl('NoiceLspProgressSpinner', { fg = colors.diag_ok })
+ nvim_set_hl('NoiceLspProgressClient', { fg = colors.diag_ok })
+ nvim_set_hl('NoiceLspProgressTitle', { link = 'Title' })
+ nvim_set_hl('NoiceCmdlineIcon', { link = 'WinSeparator' })
+ nvim_set_hl('NoiceCmdlinePopupBorder', { link = 'WinSeparator' })
+ nvim_set_hl('NoiceCmdlinePopupTitle', { link = 'Title' })
+ end
+
+ if config.plugins.hop then
+ nvim_set_hl('HopNextKey', { fg = colors.magenta })
+ nvim_set_hl('HopNextKey1', { fg = colors.blue })
+ nvim_set_hl('HopUnmatched', { fg = colors.base1 })
+ end
+
+ if config.plugins.ministatusline then
+ nvim_set_hl('MiniStatuslineModeNormal', { fg = colors.base3, bg = colors.blue })
+ nvim_set_hl('MiniStatuslineModeInsert', { fg = colors.base3, bg = colors.green })
+ nvim_set_hl('MiniStatuslineModeVisual', { fg = colors.base3, bg = colors.magenta })
+ nvim_set_hl('MiniStatuslineModeReplace', { fg = colors.base3, bg = colors.red })
+ nvim_set_hl('MiniStatuslineModeCommand', { fg = colors.base3, bg = colors.orange })
+ nvim_set_hl('MinistatusLineFileName', { fg = colors.base0, bg = colors.base2 })
+ nvim_set_hl('MiniStatuslineDevinfo', { fg = colors.base0, bg = colors.base2 })
+ nvim_set_hl('MiniStatuslineFileinfo', { fg = colors.base0, bg = colors.base2 })
+ nvim_set_hl('MiniStatuslineInactive', { fg = colors.base1, bg = colors.base3 })
+ end
+
+ if config.plugins.minitabline then
+ nvim_set_hl('MiniTablineCurrent', { fg = colors.base0, bg = colors.base3 })
+ nvim_set_hl('MiniTablineVisible', { fg = colors.base0, bg = colors.base3 })
+ nvim_set_hl('MiniTablineHidden', { fg = colors.base1, bg = colors.base3 })
+ nvim_set_hl('MiniTablineModifiedCurrent', { link = 'MiniTabLineCurrent' })
+ nvim_set_hl('MiniTablineModifiedVisible', { link = 'MiniTablineVisible' })
+ nvim_set_hl('MiniTablineModifiedHidden', { link = 'MiniTablineHidden' })
+ nvim_set_hl('MiniTablineFill', { fg = colors.base0, bg = colors.base2 })
+ nvim_set_hl('MiniTablineTabpagesection', { fg = colors.base00, bg = colors.base2 })
+ end
+
+ if config.plugins.ministarter then
+ nvim_set_hl('MiniStarterCurrent', { link = 'CursorLine' })
+ nvim_set_hl('MiniStarterHeader', { fg = colors.base1 })
+ nvim_set_hl('MiniStarterFooter', { fg = colors.violet })
+ nvim_set_hl('MiniStarterItem', { fg = colors.base00 })
+ nvim_set_hl('MiniStarterItemBullet', { fg = colors.blue })
+ nvim_set_hl('MiniStarterItemPrefix', { fg = colors.blue })
+ nvim_set_hl('MiniStarterSection', { link = 'Title' })
+ nvim_set_hl('MiniStarterQuery', { fg = colors.blue, bold = true })
+ end
+
+ if config.plugins.minicursorword then
+ nvim_set_hl('MiniCursorword', { link = 'Visual' })
+ end
+
+ if config.plugins.notify then
+ nvim_set_hl('NotifyBackground', { bg = colors.base3 })
+ nvim_set_hl('NotifyERRORBorder', { link = 'NotifyERRORBody' })
+ nvim_set_hl('NotifyWARNBorder', { link = 'NotifyWARNBody' })
+ nvim_set_hl('NotifyINFOBorder', { link = 'NotifyINFOBody' })
+ nvim_set_hl('NotifyDEBUGBorder', { link = 'NotifyDEBUGBody' })
+ nvim_set_hl('NotifyTRACEBorder', { link = 'NotifyTRACEBody' })
+ nvim_set_hl('NotifyERRORIcon', { fg = colors.diag_error })
+ nvim_set_hl('NotifyWARNIcon', { fg = colors.diag_warning })
+ nvim_set_hl('NotifyINFOIcon', { fg = colors.diag_info })
+ nvim_set_hl('NotifyDEBUGIcon', { fg = colors.magenta })
+ nvim_set_hl('NotifyTRACEIcon', { fg = colors.blue })
+ nvim_set_hl('NotifyERRORTitle', { fg = colors.diag_error })
+ nvim_set_hl('NotifyWARNTitle', { fg = colors.diag_warning })
+ nvim_set_hl('NotifyINFOTitle', { fg = colors.diag_info })
+ nvim_set_hl('NotifyDEBUGTitle', { fg = colors.magenta })
+ nvim_set_hl('NotifyTRACETitle', { fg = colors.blue })
+ nvim_set_hl('NotifyERRORBody', { fg = colors.diag_error })
+ nvim_set_hl('NotifyWARNBody', { fg = colors.diag_warning })
+ nvim_set_hl('NotifyINFOBody', { fg = colors.diag_info })
+ nvim_set_hl('NotifyDEBUGBody', { fg = colors.magenta })
+ nvim_set_hl('NotifyTRACEBody', { fg = colors.blue })
+ end
+
+ if config.plugins.rainbowdelimiters then
+ nvim_set_hl('RainbowDelimiterRed', { fg = colors.red })
+ nvim_set_hl('RainbowDelimiteYellow', { fg = colors.yellow })
+ nvim_set_hl('RainbowDelimiterBlue', { fg = colors.blue })
+ nvim_set_hl('RainbowDelimiterOrange', { fg = colors.orange })
+ nvim_set_hl('RainbowDelimiterGreen', { fg = colors.green })
+ nvim_set_hl('RainbowDelimiterViolet', { fg = colors.violet })
+ nvim_set_hl('RainbowDelimiterCyan', { fg = colors.cyan })
+ end
+
+ if config.plugins.bufferline and config.transparent.enabled then
+ local background = color.shade(colors.base2, 2)
+ nvim_set_hl('BufferLineFill', { bg = background })
+ nvim_set_hl('BufferLineBufferSelected', { fg = colors.base01, bold = true })
+ nvim_set_hl('BufferLineSeparator', { fg = background })
+ nvim_set_hl('BufferLineSeparatorSelected', { fg = background })
+ nvim_set_hl('BufferLineSeparatorVisible', { fg = background })
+ end
+
+ if config.plugins.lazy then
+ nvim_set_hl('LazyNormal', { fg = colors.base0, bg = colors.base4 }, {
+ transparent = config.transparent.lazy and config.transparent.enabled,
+ })
+ nvim_set_hl('LazyH1', { fg = colors.blue, bold = true })
+ nvim_set_hl('LazyButton', { fg = colors.green, bg = colors.mix_green })
+ nvim_set_hl('LazyButtonActive', { fg = colors.yellow, bg = colors.mix_yellow })
+ nvim_set_hl('LazyReasonStart', { fg = colors.yellow })
+ nvim_set_hl('LazyReasonEvent', { fg = colors.red })
+ end
+
+ if config.plugins.rendermarkdown then
+ nvim_set_hl('RenderMarkdownH1Bg', { fg = colors.red, bg = colors.mix_red })
+ nvim_set_hl('RenderMarkdownH2Bg', { fg = colors.magenta, bg = colors.mix_magenta })
+ nvim_set_hl('RenderMarkdownH3Bg', { fg = colors.yellow, bg = colors.mix_yellow })
+ nvim_set_hl('RenderMarkdownH4Bg', { fg = colors.orange, bg = colors.mix_orange })
+ nvim_set_hl('RenderMarkdownH5Bg', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('RenderMarkdownH5Bg', { fg = colors.blue, bg = colors.mix_blue })
+ end
+
+ if config.plugins.neogit then
+ nvim_set_hl('NeogitBranch', { fg = colors.magenta })
+ nvim_set_hl('NeogitRemote', { fg = colors.violet })
+ nvim_set_hl('NeogitHunkHeader', { fg = colors.red, bg = colors.mix_red, bold = true })
+ nvim_set_hl('NeogitHunkHeaderHighlight', { link = 'Title' })
+ nvim_set_hl('NeogitDiffContextHighlight', { fg = colors.base01, bg = colors.base2 })
+ nvim_set_hl('NeogitDiffContext', { fg = colors.base00, bg = colors.base3 })
+ nvim_set_hl('NeogitDiffDeleteHighlight', { fg = colors.red, bg = colors.mix_red })
+ nvim_set_hl('NeogitDiffDelete', { fg = colors.red })
+ nvim_set_hl('NeogitDiffAddHighlight', { fg = colors.green, bg = colors.mix_green })
+ nvim_set_hl('NeogitDiffAdd', { fg = colors.green })
+ end
+
+ if config.plugins.todocomments then
+ nvim_set_hl('TodoFgTODO', { fg = colors.blue })
+ nvim_set_hl('TodoFgWARN', { fg = colors.yellow })
+ nvim_set_hl('TodoFgTEST', { fg = colors.violet })
+ nvim_set_hl('TodoFgPERF', { fg = colors.magenta })
+ nvim_set_hl('TodoFgNOTE', { fg = colors.cyan })
+ nvim_set_hl('TodoFgHACK', { fg = colors.orange })
+ nvim_set_hl('TodoFgFIX', { fg = colors.red })
+
+ nvim_set_hl('TodoSignTODO', { fg = colors.blue })
+ nvim_set_hl('TodoSignWARN', { fg = colors.yellow })
+ nvim_set_hl('TodoSignTEST', { fg = colors.violet })
+ nvim_set_hl('TodoSignPERF', { fg = colors.magenta })
+ nvim_set_hl('TodoSignNOTE', { fg = colors.cyan })
+ nvim_set_hl('TodoSignHACK', { fg = colors.orange })
+ nvim_set_hl('TodoSignFIX', { fg = colors.red })
+
+ nvim_set_hl('TodoBgTODO', { fg = colors.blue, bg = colors.mix_blue })
+ nvim_set_hl('TodoBgWARN', { fg = colors.yellow, bg = colors.mix_yellow })
+ nvim_set_hl('TodoBgTEST', { fg = colors.violet, bg = colors.mix_violet })
+ nvim_set_hl('TodoBgPERF', { fg = colors.magenta, bg = colors.mix_magenta })
+ nvim_set_hl('TodoBgNOTE', { fg = colors.cyan, bg = colors.mix_cyan })
+ nvim_set_hl('TodoBgHACK', { fg = colors.orange, bg = colors.mix_orange })
+ nvim_set_hl('TodoBgFIX', { fg = colors.red, bg = colors.mix_red })
+ end
+
+ if config.plugins.ale then
+ nvim_set_hl('ALEErrorSign', { fg = colors.diag_error })
+ nvim_set_hl('ALEWarningSign', { fg = colors.diag_warning })
+ end
+
+ if config.plugins.alpha then
+ nvim_set_hl('AlphaShortcut', { fg = colors.base00 })
+ nvim_set_hl('AlphaHeader', { fg = colors.magenta })
+ nvim_set_hl('AlphaHeaderLabel', { fg = colors.red })
+ nvim_set_hl('AlphaFooter', { fg = colors.violet })
+ nvim_set_hl('AlphaButtons', { link = 'Directory' })
+ end
+
+ if config.plugins.yanky then
+ nvim_set_hl('YankyPut', { link = 'Search' })
+ nvim_set_hl('YankyYanked', { link = 'IncSearch' })
+ end
+
+ if config.plugins.gitgutter then
+ nvim_set_hl('GitGutterAdd', { fg = colors.git_add })
+ nvim_set_hl('GitGutterChange', { fg = colors.git_modify })
+ nvim_set_hl('GitGutterDelete', { fg = colors.git_delete })
+ nvim_set_hl('GitGutterAddLineNr', { fg = colors.git_add })
+ nvim_set_hl('GitGutterChangeLineNr', { fg = colors.git_modify })
+ nvim_set_hl('GitGutterDeleteLineNr', { fg = colors.git_delete })
+ end
+
+ if config.plugins.coc then
+ nvim_set_hl(
+ 'CocErrorSign',
+ { fg = colors.diag_error, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocWarningSign',
+ { fg = colors.diag_warning, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocInfoSign',
+ { fg = colors.diag_info, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocHintSign',
+ { fg = colors.diag_hint, bg = signcolumn.bg },
+ { error_lens = config.error_lens.symbol }
+ )
+ nvim_set_hl(
+ 'CocErrorVirtualText',
+ { fg = colors.diag_error },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'CocWarningVirtualText',
+ { fg = colors.diag_warning },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'CocInfoVirtualText',
+ { fg = colors.diag_info },
+ { error_lens = config.error_lens.text }
+ )
+ nvim_set_hl(
+ 'CocHintVirtualText',
+ { fg = colors.diag_hint },
+ { error_lens = config.error_lens.text }
+ )
+ end
+
+ if config.plugins.leap then
+ nvim_set_hl('LeapMatch', { fg = colors.magenta, bg = colors.mix_magenta, bold = true })
+ nvim_set_hl('LeapLabel', { fg = colors.magenta, bold = true })
+ nvim_set_hl('LeapBackDrop', { fg = colors.base01 })
+ end
+
+ if config.plugins.mason then
+ nvim_set_hl('MasonHeader', { link = 'FloatTitle' })
+ nvim_set_hl(
+ 'MasonNormal',
+ { fg = colors.base00, bg = colors.base4 },
+ { transparent = config.transparent.mason and config.transparent.enabled }
+ )
+ nvim_set_hl('MasonHighlight', { fg = colors.blue })
+ nvim_set_hl('MasonHighlightBlock', { fg = colors.mix_blue, bg = colors.blue })
+ nvim_set_hl('MasonHighlightBlockBold', { fg = colors.mix_blue, bg = colors.blue, bold = true })
+ end
+
+ if config.on_highlights then
+ local highlights = config.on_highlights(colors, color)
+
+ for group_name, group_val in pairs(highlights) do
+ local hl = nvim_get_hl { name = group_name, link = true }
+ local val = {}
+
+ if hl.link then
+ val = group_val
+ else
+ val = vim.tbl_extend('force', hl, group_val)
+ end
+
+ vim.api.nvim_set_hl(0, group_name, val)
+ end
+ end
+end
+
+return M
diff --git a/lua/solarized/init.lua b/lua/solarized/init.lua
new file mode 100644
index 0000000..9599302
--- /dev/null
+++ b/lua/solarized/init.lua
@@ -0,0 +1,40 @@
+---@class solarized
+---@field config? solarized.config
+---@field setup? fun(config: solarized.config)
+---@field load? fun()
+
+---@type solarized
+local M = {}
+
+M.config = require 'solarized.config'
+
+M.setup = function(config)
+ M.config = vim.tbl_deep_extend('force', M.config, config)
+end
+
+M.load = function()
+ if vim.g.colors_name then
+ vim.cmd 'hi clear'
+ end
+
+ if vim.fn.exists 'syntax_on' then
+ vim.cmd 'syntax reset'
+ end
+
+ vim.g.colors_name = 'solarized'
+ local highlights = {}
+ local colors = {}
+ if vim.o.background == 'dark' then
+ highlights = require 'solarized.highlights'
+ local palette = require 'solarized.palette'
+ colors = palette[M.config.palette]
+ else
+ highlights = require 'solarized.highlights.solarized-light'
+ local palette = require 'solarized.palette.solarized-light'
+ colors = palette[M.config.palette]
+ end
+
+ highlights.set_highlight(colors, M.config)
+end
+
+return M
diff --git a/lua/solarized/palette/init.lua b/lua/solarized/palette/init.lua
new file mode 100644
index 0000000..08f2134
--- /dev/null
+++ b/lua/solarized/palette/init.lua
@@ -0,0 +1,121 @@
+---@class solarized.palette
+---@field base0? string
+---@field base00? string
+---@field base01? string
+---@field base02? string
+---@field base03? string
+---@field base04? string
+---@field base1? string
+---@field base2? string
+---@field base3? string
+---@field base4? string
+---@field blue? string
+---@field cyan? string
+---@field diag_error? string
+---@field diag_hint? string
+---@field diag_info? string
+---@field diag_ok? string
+---@field diag_warning? string
+---@field git_add? string
+---@field git_delete? string
+---@field git_modify? string
+---@field green? string
+---@field magenta? string
+---@field mix_blue? string
+---@field mix_cyan? string
+---@field mix_green? string
+---@field mix_magenta? string
+---@field mix_orange? string
+---@field mix_red? string
+---@field mix_violet? string
+---@field mix_yellow? string
+---@field mix_base1? string
+---@field mix_base01? string
+---@field orange? string
+---@field red? string
+---@field violet? string
+---@field yellow? string
+
+local M = {}
+
+---@type solarized.palette
+M.solarized = {
+ base0 = '#839496',
+ base00 = '#657B83',
+ base01 = '#586E75',
+ base02 = '#073642',
+ base03 = '#002B36',
+ base04 = '#002731',
+ base1 = '#93A1A1',
+ base2 = '#eee8d5',
+ base3 = '#fdf6e3',
+ base4 = '#fbf3db',
+ blue = '#268BD2',
+ cyan = '#2AA198',
+ diag_error = '#DC322F',
+ diag_hint = '#268BD2',
+ diag_info = '#268BD2',
+ diag_ok = '#859900',
+ diag_warning = '#B58900',
+ git_add = '#268BD2',
+ git_delete = '#DC322F',
+ git_modify = '#B58900',
+ green = '#859900',
+ magenta = '#D33682',
+ mix_blue = '#0B4764',
+ mix_cyan = '#0C4E53',
+ mix_green = '#274C25',
+ mix_magenta = '#3F2E4C',
+ mix_orange = '#3C342C',
+ mix_red = '#422D33',
+ mix_violet = '#204060',
+ mix_yellow = '#364725',
+ mix_base1 = '#2C4E56',
+ mix_base01 = '#CCCDC2',
+ orange = '#CB4B16',
+ red = '#DC322F',
+ violet = '#6C71C4',
+ yellow = '#B58900',
+}
+
+---@type solarized.palette
+M.selenized = {
+ base04 = '#0e3641',
+ base03 = '#103c48',
+ base02 = '#184956',
+ base01 = '#72898f',
+ base00 = '#53676d',
+ base0 = '#adbcbc',
+ base1 = '#cad8d9',
+ base2 = '#ece3cc',
+ base3 = '#fbf3db',
+ base4 = '#ece3cc',
+ yellow = '#dbb32d',
+ orange = '#ed8649',
+ red = '#fa5750',
+ magenta = '#f275be',
+ violet = '#af88eb',
+ blue = '#4695f7',
+ cyan = '#41c7b9',
+ green = '#75b938',
+ mix_yellow = '#4c5f3f',
+ mix_orange = '#525248',
+ mix_red = '#56444a',
+ mix_magenta = '#534d6b',
+ mix_violet = '#3f5278',
+ mix_blue = '#20567c',
+ mix_cyan = '#1e6569',
+ mix_green = '#2e6143',
+ mix_base1 = '#486B74',
+ mix_base01 = '#CACBBC',
+ diag_error = '#fa5750',
+ diag_hint = '#75b938',
+ diag_info = '#75b938',
+ diag_ok = '#75b938',
+ diag_warning = '#dbb32d',
+ git_add = '#4695f7',
+ git_delete = '#fa5750',
+ git_modify = '#dbb32d',
+}
+
+return M
diff --git a/lua/solarized/palette/solarized-light.lua b/lua/solarized/palette/solarized-light.lua
new file mode 100644
index 0000000..eefd014
--- /dev/null
+++ b/lua/solarized/palette/solarized-light.lua
@@ -0,0 +1,83 @@
+local M = {}
+
+---@type solarized.palette
+M.solarized = {
+ base04 = '#002731',
+ base03 = '#002b36',
+ base02 = '#073642',
+ base01 = '#586E75',
+ base00 = '#657B83',
+ base0 = '#839496',
+ base1 = '#93A1A1',
+ base2 = '#EEE8D5',
+ base3 = '#FDF6E3',
+ base4 = '#fbf3db',
+ blue = '#268BD2',
+ cyan = '#2AA198',
+ orange = '#CB4B16',
+ red = '#DC322F',
+ violet = '#6C71C4',
+ yellow = '#B58900',
+ green = '#859900',
+ magenta = '#D33682',
+ diag_error = '#DC322F',
+ diag_hint = '#268BD2',
+ diag_info = '#268BD2',
+ diag_ok = '#859900',
+ diag_warning = '#B58900',
+ git_add = '#859900',
+ git_delete = '#DC322F',
+ git_modify = '#B58900',
+ mix_blue = '#e7ebe1',
+ mix_cyan = '#e7eddb',
+ mix_green = '#f1eccc',
+ mix_magenta = '#f8e2d9',
+ mix_orange = '#f8e4ce',
+ mix_base1 = '#2C4E56',
+ mix_base01 = '#CCCDC2',
+ mix_red = '#f9e2d1',
+ mix_violet = '#eee8df',
+ mix_yellow = '#f5ebcc',
+}
+
+---@type solarized.palette
+M.selenized = {
+ base04 = '#0e3641',
+ base03 = '#103c48',
+ base02 = '#184956',
+ base01 = '#3a4d53',
+ base00 = '#53676d',
+ base0 = '#53676d',
+ base1 = '#909995',
+ base2 = '#ece3cc',
+ base3 = '#fbf3db',
+ base4 = '#ece3cc',
+ yellow = '#ad8900',
+ orange = '#c25d1e',
+ red = '#d2212d',
+ magenta = '#ca4898',
+ violet = '#8762c6',
+ blue = '#0072d4',
+ cyan = '#009c8f',
+ green = '#489100',
+ diag_error = '#d2212d',
+ diag_hint = '#0072d4',
+ diag_info = '#0072d4',
+ diag_ok = '#489100',
+ diag_warning = '#ad8900',
+ git_add = '#489100',
+ git_delete = '#DC322F',
+ git_modify = '#ad8900',
+ mix_yellow = '#f3e8c5',
+ mix_orange = '#f5e4c8',
+ mix_red = '#f6dec9',
+ mix_magenta = '#f6e1d4',
+ mix_violet = '#efe4d8',
+ mix_blue = '#e1e6da',
+ mix_cyan = '#e1ead3',
+ mix_green = '#e9e9c5',
+ mix_base1 = '#486B74',
+ mix_base01 = '#CACBBC',
+}
+
+return M
diff --git a/lua/solarized/utils.lua b/lua/solarized/utils.lua
new file mode 100644
index 0000000..d59d5d8
--- /dev/null
+++ b/lua/solarized/utils.lua
@@ -0,0 +1,37 @@
+local function to_hex(decimal)
+ if type(decimal) ~= 'number' then
+ return decimal
+ end
+ local hex = string.format('#%06x', decimal)
+ return hex:upper()
+end
+
+local function nvim_get_hl(name)
+ local output = vim.api.nvim_get_hl(0, { name = name, link = false })
+
+ local t = {}
+
+ for key, value in pairs(output) do
+ t[key] = to_hex(value)
+ end
+
+ return t
+end
+
+local function get_colors()
+ local config = require('solarized').config
+ local colors = {}
+ if vim.o.background == 'dark' then
+ local palette = require 'solarized.palette'
+ colors = palette[config.palette]
+ else
+ local palette = require 'solarized.palette.solarized-light'
+ colors = palette[config.palette]
+ end
+ return colors
+end
+
+return {
+ get_colors = get_colors,
+ nvim_get_hl = nvim_get_hl,
+}
diff --git a/lua/solarized/variants/init.lua b/lua/solarized/variants/init.lua
new file mode 100644
index 0000000..046dc02
--- /dev/null
+++ b/lua/solarized/variants/init.lua
@@ -0,0 +1,300 @@
+local M = {}
+
+---@class solarized_variants.opts
+---@field colors solarized.palette
+---@field color solarized.color
+---@field config solarized.config
+---@field nvim_set_hl fun(group_name: string, group_val: vim.api.keyset.highlight, config?: solarized.nvim_set_hl.config)
+
+---@param opts solarized_variants.opts
+M.set_variant = function(opts)
+ local colors, _, config, nvim_set_hl = opts.colors, opts.color, opts.config, opts.nvim_set_hl
+
+ if config.variant == 'winter' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.base01, bg = colors.base04 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.base01, bg = colors.base04 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_blue, bg = colors.blue })
+ nvim_set_hl(
+ 'SignColumn',
+ { fg = colors.base1, bg = colors.base02 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base01, bg = colors.base02 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.cyan, bg = colors.mix_cyan, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base01 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.violet }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { link = 'Constant' })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Constant' })
+ nvim_set_hl('Identifier', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.blue }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.green }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.base1, bold = true }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { link = 'Keyword' })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.orange }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.blue })
+ nvim_set_hl('TagAttribute', { fg = colors.base1 })
+ nvim_set_hl('TagDelimiter', { fg = colors.base01 })
+ nvim_set_hl('Delimiter', { fg = colors.base0 })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ elseif config.variant == 'summer' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.cyan, bg = colors.base04 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.cyan, bg = colors.base04 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_blue, bg = colors.blue })
+ nvim_set_hl('SignColumn', { link = 'Normal' })
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base01, bg = colors.base03 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.yellow, bg = colors.mix_yellow, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base01 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.violet }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { fg = colors.magenta })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Number' })
+ nvim_set_hl('Identifier', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.yellow }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.green }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.green }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { fg = colors.orange })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.red }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.red })
+ nvim_set_hl('TagAttribute', { fg = colors.blue })
+ nvim_set_hl('TagDelimiter', { link = 'Delimiter' })
+ nvim_set_hl('Delimiter', { fg = colors.red })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ elseif config.variant == 'autumn' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.cyan, bg = colors.base04 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.cyan, bg = colors.base04 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_blue, bg = colors.blue })
+ nvim_set_hl('SignColumn', { link = 'Normal' })
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base01, bg = colors.base03 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.orange, bg = colors.mix_orange, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base01 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.violet }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { fg = colors.magenta })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Number' })
+ nvim_set_hl('Identifier', { fg = colors.base0 }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.blue }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.green }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.green }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { fg = colors.orange })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.yellow }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.green })
+ nvim_set_hl('TagAttribute', { fg = colors.blue })
+ nvim_set_hl('TagDelimiter', { link = 'Delimiter' })
+ nvim_set_hl('Delimiter', { fg = colors.orange })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ elseif config.variant == 'spring' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.cyan, bg = colors.base04 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.cyan, bg = colors.base04 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_blue, bg = colors.blue })
+ nvim_set_hl('SignColumn', { link = 'Normal' })
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base01, bg = colors.base03 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.magenta, bg = colors.mix_magenta, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base01 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.violet }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { link = 'Constant' })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Constant' })
+ nvim_set_hl('Identifier', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.blue }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.magenta }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.green }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { link = 'Keyword' })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.yellow }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.magenta })
+ nvim_set_hl('TagAttribute', { fg = colors.blue })
+ nvim_set_hl('TagDelimiter', { link = 'Delimiter' })
+ nvim_set_hl('Delimiter', { fg = colors.base01 })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ end
+end
+
+return M
diff --git a/lua/solarized/variants/solarized-light.lua b/lua/solarized/variants/solarized-light.lua
new file mode 100644
index 0000000..3e45beb
--- /dev/null
+++ b/lua/solarized/variants/solarized-light.lua
@@ -0,0 +1,294 @@
+local M = {}
+
+---@param opts solarized_variants.opts
+M.set_variant = function(opts)
+ local colors, _, config, nvim_set_hl = opts.colors, opts.color, opts.config, opts.nvim_set_hl
+
+ if config.variant == 'winter' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.cyan, bg = colors.base4 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.cyan, bg = colors.base4 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_blue, bg = colors.blue })
+ nvim_set_hl(
+ 'SignColumn',
+ { fg = colors.base01, bg = colors.base2 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base01, bg = colors.base2 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.cyan, bg = colors.mix_cyan, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base1 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.magenta }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { link = 'Constant' })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Constant' })
+ nvim_set_hl('Identifier', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.blue }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.green }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.base01, bold = true }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { fg = colors.orange })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.yellow }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.blue })
+ nvim_set_hl('TagAttribute', { fg = colors.violet })
+ nvim_set_hl('TagDelimiter', { fg = colors.base1 })
+ nvim_set_hl('Delimiter', { fg = colors.base00 })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ elseif config.variant == 'summer' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.blue, bg = colors.base4 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.blue, bg = colors.base4 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_cyan, bg = colors.cyan })
+ nvim_set_hl('SignColumn', { link = 'Normal' })
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base1, bg = colors.base3 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.yellow, bg = colors.mix_yellow, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base1 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.magenta }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { link = 'Constant' })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Constant' })
+ nvim_set_hl('Identifier', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.yellow }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.green }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.green }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { fg = colors.orange })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.red }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.red })
+ nvim_set_hl('TagAttribute', { fg = colors.blue })
+ nvim_set_hl('TagDelimiter', { link = 'Delimiter' })
+ nvim_set_hl('Delimiter', { fg = colors.red })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ elseif config.variant == 'autumn' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.blue, bg = colors.base4 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.blue, bg = colors.base4 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_cyan, bg = colors.cyan })
+ nvim_set_hl('SignColumn', { link = 'Normal' })
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base1, bg = colors.base3 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.orange, bg = colors.mix_orange, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base1 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.magenta }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { link = 'Constant' })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Constant' })
+ nvim_set_hl('Identifier', { fg = colors.base00 }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.blue }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.green }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.green }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { fg = colors.orange })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.yellow }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.green })
+ nvim_set_hl('TagAttribute', { fg = colors.blue })
+ nvim_set_hl('TagDelimiter', { link = 'Delimiter' })
+ nvim_set_hl('Delimiter', { fg = colors.orange })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ elseif config.variant == 'spring' then
+ nvim_set_hl(
+ 'WinSeparator',
+ { fg = colors.blue, bg = colors.base4 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl('FloatBorder', { fg = colors.blue, bg = colors.base4 }, {
+ transparent = config.transparent.enabled,
+ })
+ nvim_set_hl('FloatTitle', { fg = colors.mix_cyan, bg = colors.cyan })
+ nvim_set_hl('SignColumn', { link = 'Normal' })
+ nvim_set_hl(
+ 'LineNr',
+ { fg = colors.base1, bg = colors.base3 },
+ { transparent = config.transparent.enabled }
+ )
+ nvim_set_hl(
+ 'CursorLineNr',
+ { fg = colors.magenta, bg = colors.mix_magenta, bold = true },
+ { transparent = config.transparent.enabled }
+ )
+
+ -- SYNTAX :h group-name
+ -- Property, Parameter, TagAttribute, TagDelimiter <-- custom
+ nvim_set_hl('Comment', { fg = colors.base1 }, { styles = config.styles.comments })
+ nvim_set_hl('Constant', { fg = colors.violet }, { styles = config.styles.constants })
+ nvim_set_hl('String', { fg = colors.cyan }, { styles = config.styles.strings })
+ nvim_set_hl('Character', { link = 'String' })
+ nvim_set_hl('Number', { link = 'Constant' })
+ nvim_set_hl('Boolean', { link = 'Constant' })
+ nvim_set_hl('Float', { link = 'Constant' })
+ nvim_set_hl('Identifier', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl('Property', { fg = colors.blue }, { styles = config.styles.variables })
+ nvim_set_hl(
+ 'Parameter',
+ { fg = colors.blue, italic = true },
+ { styles = config.styles.variables }
+ )
+ nvim_set_hl('Function', { fg = colors.blue }, { styles = config.styles.functions })
+ nvim_set_hl('Statement', { fg = colors.magenta }, { styles = config.styles.statements })
+ nvim_set_hl('Conditional', { link = 'Statement' })
+ nvim_set_hl('Repeat', { link = 'Statement' })
+ nvim_set_hl('Label', { link = 'Statement' })
+ nvim_set_hl('Operator', { link = 'Statement' })
+ nvim_set_hl('Keyword', { fg = colors.green }, { styles = config.styles.keywords })
+ nvim_set_hl('Exception', { link = 'Statement' })
+ nvim_set_hl('Include', { link = 'Keyword' })
+ nvim_set_hl('Define', { link = 'Include' })
+ nvim_set_hl('Macro', { link = 'Include' })
+ nvim_set_hl('PreProc', { link = 'Include' })
+ nvim_set_hl('PreCondit', { link = 'Statement' })
+ nvim_set_hl('Type', { fg = colors.yellow }, { styles = config.styles.types })
+ nvim_set_hl('StorageClass', { link = 'Statement' })
+ nvim_set_hl('Structure', { link = 'Type' })
+ nvim_set_hl('Typedef', { link = 'Statement' })
+ nvim_set_hl('Special', { fg = colors.violet })
+ nvim_set_hl('SpecialChar', { fg = colors.violet })
+ nvim_set_hl('Tag', { fg = colors.magenta })
+ nvim_set_hl('TagAttribute', { fg = colors.blue })
+ nvim_set_hl('TagDelimiter', { link = 'Delimiter' })
+ nvim_set_hl('Delimiter', { fg = colors.base1 })
+ nvim_set_hl('SpecialComment', { link = 'Statement' })
+ nvim_set_hl('Debug', { fg = colors.magenta })
+ nvim_set_hl('Underlined', { fg = colors.magenta, underline = true })
+ nvim_set_hl('Ignore', {})
+ nvim_set_hl('Error', { fg = colors.diag_error, bold = true })
+ nvim_set_hl('Todo', { fg = colors.blue })
+ nvim_set_hl('Added', { fg = colors.git_add })
+ nvim_set_hl('Changed', { fg = colors.git_modify })
+ nvim_set_hl('Removed', { fg = colors.git_delete })
+ end
+end
+
+return M
diff --git a/plugin/solarized.lua b/plugin/solarized.lua
new file mode 100644
index 0000000..0a66113
--- /dev/null
+++ b/plugin/solarized.lua
@@ -0,0 +1,13 @@
+vim.api.nvim_create_user_command('Solarized', function(args)
+ require('solarized.command').load(args.fargs[1], vim.list_slice(args.fargs, 2))
+end, {
+ range = true,
+ nargs = '+',
+ complete = function(arg)
+ local list = require('solarized.command').list()
+
+ return vim.tbl_filter(function(s)
+ return string.match(s, '^' .. arg)
+ end, list)
+ end,
+})
diff --git a/stylua.toml b/stylua.toml
new file mode 100644
index 0000000..49da646
--- /dev/null
+++ b/stylua.toml
@@ -0,0 +1,6 @@
+column_width = 100
+line_endings = "Unix"
+indent_type = "Spaces"
+indent_width = 2
+quote_style = "AutoPreferSingle"
+call_parentheses = "None"
diff --git a/tests/load_spec.lua b/tests/load_spec.lua
new file mode 100644
index 0000000..f5decc6
--- /dev/null
+++ b/tests/load_spec.lua
@@ -0,0 +1,23 @@
+local nvim_get_hl = require('solarized.utils').nvim_get_hl
+
+describe('solarized.load', function()
+ setup(function()
+ vim.o.background = 'dark'
+ vim.cmd.colorscheme 'solarized'
+ end)
+
+ test('name', function()
+ local expected = 'solarized'
+ assert.equal(expected, vim.g.colors_name)
+ end)
+
+ test('default config', function()
+ local config = require 'solarized.config'
+ assert.True(type(config) == 'table')
+ end)
+
+ test('set_highlight', function()
+ local Comment = nvim_get_hl 'Comment'
+ assert.True('#586E75' == Comment.fg)
+ end)
+end)
diff --git a/tests/setup_spec.lua b/tests/setup_spec.lua
new file mode 100644
index 0000000..bb43193
--- /dev/null
+++ b/tests/setup_spec.lua
@@ -0,0 +1,49 @@
+local nvim_get_hl = require('solarized.utils').nvim_get_hl
+
+describe('solarized.setup', function()
+ setup(function()
+ vim.o.background = 'light'
+ ---@type solarized
+ local solarized = require 'solarized'
+
+ solarized.setup {
+ transparent = {
+ enabled = true,
+ },
+ styles = {
+ strings = { italic = true },
+ comments = { bold = true },
+ },
+ on_colors = function()
+ return {
+ mycolor = '#ffffff',
+ }
+ end,
+ on_highlights = function(colors)
+ return {
+ ---@diagnostic disable-next-line: undefined-field
+ CustomHighlight = { fg = colors.mycolor },
+ }
+ end,
+ }
+ vim.cmd 'colorscheme solarized'
+ end)
+
+ test('transparent', function()
+ local normal = nvim_get_hl 'Normal'
+ assert.falsy(normal.bg)
+ end)
+
+ test('on_colors and on_highlight', function()
+ local user_group = nvim_get_hl 'CustomHighlight'
+ local expected = { fg = '#FFFFFF' }
+ assert.are.same(expected, user_group)
+ end)
+
+ test('styles', function()
+ local strings = nvim_get_hl 'String'
+ local comments = nvim_get_hl 'Comment'
+ assert.True(strings.italic)
+ assert.True(comments.bold)
+ end)
+end)