From 5a5f6ff8943e703e6e3e6a3142148b51824cc9f6 Mon Sep 17 00:00:00 2001 From: ddjones Date: Sat, 7 Sep 2024 19:48:10 -0400 Subject: [PATCH] Initial commit. --- .luarc.json | 12 + CHANGELOG.md | 308 +++++ CONTRIBUTING.md | 188 +++ Dockerfile | 7 + LICENSE | 21 + README.md | 471 +++++++ VARIANTS.md | 17 + after/queries/css/highlights.scm | 7 + after/queries/javascript/highlights.scm | 5 + after/queries/lua/highlights.scm | 3 + after/queries/scss/highlights.scm | 3 + after/queries/tsx/highlights.scm | 5 + colors/solarized.lua | 5 + doc/solarized.nvim.txt | 518 ++++++++ docker-compose.yml | 8 + lua/barbecue/theme/solarized.lua | 78 ++ lua/lualine/themes/selenized.lua | 47 + lua/lualine/themes/solarized.lua | 47 + lua/solarized/color.lua | 86 ++ lua/solarized/command.lua | 70 + lua/solarized/config.lua | 135 ++ lua/solarized/highlights/init.lua | 1191 ++++++++++++++++++ lua/solarized/highlights/solarized-light.lua | 789 ++++++++++++ lua/solarized/init.lua | 40 + lua/solarized/palette/init.lua | 121 ++ lua/solarized/palette/solarized-light.lua | 83 ++ lua/solarized/utils.lua | 37 + lua/solarized/variants/init.lua | 300 +++++ lua/solarized/variants/solarized-light.lua | 294 +++++ plugin/solarized.lua | 13 + stylua.toml | 6 + tests/load_spec.lua | 23 + tests/setup_spec.lua | 49 + 33 files changed, 4987 insertions(+) create mode 100644 .luarc.json create mode 100644 CHANGELOG.md create mode 100644 CONTRIBUTING.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 VARIANTS.md create mode 100644 after/queries/css/highlights.scm create mode 100644 after/queries/javascript/highlights.scm create mode 100644 after/queries/lua/highlights.scm create mode 100644 after/queries/scss/highlights.scm create mode 100644 after/queries/tsx/highlights.scm create mode 100644 colors/solarized.lua create mode 100644 doc/solarized.nvim.txt create mode 100644 docker-compose.yml create mode 100644 lua/barbecue/theme/solarized.lua create mode 100644 lua/lualine/themes/selenized.lua create mode 100644 lua/lualine/themes/solarized.lua create mode 100644 lua/solarized/color.lua create mode 100644 lua/solarized/command.lua create mode 100644 lua/solarized/config.lua create mode 100644 lua/solarized/highlights/init.lua create mode 100644 lua/solarized/highlights/solarized-light.lua create mode 100644 lua/solarized/init.lua create mode 100644 lua/solarized/palette/init.lua create mode 100644 lua/solarized/palette/solarized-light.lua create mode 100644 lua/solarized/utils.lua create mode 100644 lua/solarized/variants/init.lua create mode 100644 lua/solarized/variants/solarized-light.lua create mode 100644 plugin/solarized.lua create mode 100644 stylua.toml create mode 100644 tests/load_spec.lua create mode 100644 tests/setup_spec.lua 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)