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-yinyang +

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)