refactor nvim config into separate modules
This commit is contained in:
parent
cf2708c1b0
commit
93316f6279
24 changed files with 1520 additions and 984 deletions
140
nvim/README.md
140
nvim/README.md
|
|
@ -1,34 +1,134 @@
|
||||||
Тут будет лежать мой конфиг nvim. Я хочу, чтоб он был отдельно от nix конфигов, чтоб не надо было ничего ребилдить. На новом пк руками делаю симлинк в `~/.config/nvim`.
|
[kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim) fork
|
||||||
|
|
||||||
|
Тут будет лежать мой конфиг nvim. Я хочу, чтоб он был отдельно от nix конфигов, чтоб не надо было ничего ребилдить.
|
||||||
|
|
||||||
|
Конфиг сделан для NixOS. Я не знаю работает ли он в других дистрибутивах.
|
||||||
|
|
||||||
|
Сайт с топами плагинов и тем - https://dotfyle.com/neovim/colorscheme/top
|
||||||
|
LSP list - https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt
|
||||||
|
|
||||||
|
Логи для форматтеров `~/.local/state/nvim/conform.log`
|
||||||
|
Логи для lsp `~/.local/state/nvim/lsp.log`
|
||||||
|
|
||||||
|
> ⚠️ **Warning**: Некоторых lsp в mason не существует и их надо качать отдельно. Или они не работают в NixOS, если их качать через mason. Такие lsp я настроил отдельно и скачал как пакет. Из конфига mason я их удалил. **Не скачай случайно эти lsp через mason руками, когда они уже настроены как отдельный пакет**. Это же касается форматтеров и линтеров. Их я стараюсь качать как системный пакет, а не через mason.
|
||||||
|
|
||||||
|
> ⚠️ **Warning**: Возможно в будущем я вообще перестану что либо качать через mason, используя его только как поиск разных инструментов для нужного мне языка. Так что лучше ничего не качать через него
|
||||||
|
|
||||||
|
## Установка
|
||||||
|
На новом пк руками делаю симлинк в `~/.config/nvim`.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
ln -s ~/nixos-private-dots/nvim ~/.config/nvim
|
ln -s ~/nixos-private-dots/nvim ~/.config/nvim
|
||||||
```
|
```
|
||||||
|
### Зависимости
|
||||||
[kickstart.nvim](https://github.com/nvim-lua/kickstart.nvim) fork
|
Это мне пришлось скачать для работы конфига на NixOS с нужными мне инструментами:
|
||||||
|
|
||||||
Это мне пришлось скачать для работы конфига
|
|
||||||
- `neovim`
|
- `neovim`
|
||||||
- `git`
|
- `git`
|
||||||
- `unzip`
|
- `unzip`
|
||||||
- `ripgrep`
|
- `ripgrep`
|
||||||
- `fd`
|
- `fd`
|
||||||
- `gcc`
|
- `xclip` на X11 или `wl-clipboard` на Wayland
|
||||||
- `gnumake`
|
|
||||||
- `rocmPackages.llvm.clang`
|
|
||||||
- `xclip`
|
|
||||||
- `lua`
|
|
||||||
- `luajit`
|
|
||||||
- `luajitPackages.luarocks`
|
|
||||||
- `rustup` и потом запустить `rustup default stable` в терминале
|
|
||||||
- `nodejs_23` для npm
|
|
||||||
- `python312Full`
|
|
||||||
- `python312Packages.pip`
|
|
||||||
- `go`
|
|
||||||
- `nixd`
|
|
||||||
- `alejandra`
|
|
||||||
- `tree-sitter`
|
- `tree-sitter`
|
||||||
- Любой nerd font
|
- Любой nerd font
|
||||||
|
- C/C++:
|
||||||
|
- `gcc`
|
||||||
|
- `gnumake`
|
||||||
|
- `rocmPackages.llvm.clang`
|
||||||
|
- `ccls` (lsp, нет в mason)
|
||||||
|
- Lua:
|
||||||
|
- `lua5_1`
|
||||||
|
- `luajit`
|
||||||
|
- `luajitPackages.luarocks` (package manager)
|
||||||
|
- `lua-language-server` (lsp, из mason не работает на NixOS)
|
||||||
|
- `stylua` (formatter, из mason не работает на NixOS)
|
||||||
|
- Rust:
|
||||||
|
- `rustup` и потом запустить `rustup default stable` + `rustup component add rust-analyzer` в терминале
|
||||||
|
- `rust-analyzer` (lsp)
|
||||||
|
- JS/TS:
|
||||||
|
- `nodejs_23` для npm (package manager)
|
||||||
|
- Python:
|
||||||
|
- `python3Full`
|
||||||
|
- `python3Packages.pip` (package manager)
|
||||||
|
- `ruff` (linter/formatter, из mason не работает на NixOS)
|
||||||
|
- Golang:
|
||||||
|
- `go`
|
||||||
|
- `golangci-lint` (linter)
|
||||||
|
- `templ` (HTML UI in Go)
|
||||||
|
- Nix:
|
||||||
|
- `nixd` (lsp, нет в mason)
|
||||||
|
- Bash:
|
||||||
|
- `shellcheck` (linter)
|
||||||
|
- `shfmt` (formatter)
|
||||||
|
|
||||||
Чтоб понять есть ли проблемы с конфигом, может какие-то пакеты отсутствуют, можно запустить `:healthcheck`
|
Чтоб понять есть ли проблемы с конфигом, может какие-то пакеты отсутствуют, можно запустить `:healthcheck`.
|
||||||
|
|
||||||
|
## Бинды
|
||||||
|
|
||||||
|
Тут будет список биндов, которых нет в стандартном NeoVim
|
||||||
|
|
||||||
|
### Мои бинды
|
||||||
|
|
||||||
|
|Бинд|Действие|
|
||||||
|
|-|-|
|
||||||
|
|1|2|
|
||||||
|
|
||||||
|
### Были изначально в kickstart.nvim
|
||||||
|
|
||||||
|
|Бинд|Действие|
|
||||||
|
|-|-|
|
||||||
|
|1|2|
|
||||||
|
|
||||||
|
## Нюансы работы LSP/Linter/Formatter
|
||||||
|
|
||||||
|
Многие LSP в стоке имеют форматтирование кода. Иногда это бесит. Чтоб узнать какие LSP имеют форматирование в открытом в данный момент файле, можно использовать такую команду:
|
||||||
|
```lua
|
||||||
|
:lua for _, client in ipairs(vim.lsp.get_active_clients()) do print(client.name, client.server_capabilities.documentFormattingProvider) end
|
||||||
|
```
|
||||||
|
Чтоб выключить форматирование у LSP, можно заглянуть в `lsp.lua` и увидеть примеры кода. Например я выключил форматирование у `sqls` везде и у `html` в файлах `templ`. Если у всех выкл, но что-то форматирует, значит форматтер установлен отдельно.
|
||||||
|
|
||||||
|
Некоторые LSP/Linter/Formatter не могут просто взять и заработать на каком-то файле. Например для работы `tailwindcss lsp` обязательным условием является `конфиг файл tailwind` в каталоге проекта, иначе ничего не будет работать. Для многих lsp важно находить `root dir`, который определяется по наличию каталога `.git` в проекте, иначе никаких подсказок в коде не будет. Разные инструменты для работы с SQL зачастую требуют делать конект к базе данных, иначе ничего работать не будет. Тоесть с удобством написать тестовый SQL код вне проекта не получится.
|
||||||
|
|
||||||
|
Я постарался исправить это там, где возможно. Например мне пришлось использовать `sqls` вместо `postgres_lsp`, чтоб подсказки работали даже вне проекта. Но зачастую придётся создавать проект и настраивать его, чтоб получить полноценный опыт IDE
|
||||||
|
|
||||||
|
- `TailwindCSS` требует иметь свой config файл в директории проекта
|
||||||
|
- `TypeScript LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#ts_ls)
|
||||||
|
- `YAML LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#yamlls)
|
||||||
|
- `JSON LSP` имеет [опциональные настройки](https://github.com/neovim/nvim-lspconfig/blob/master/doc/configs.txt#jsonls)
|
||||||
|
- `rust-analyzer` имеет много опциональных настроек
|
||||||
|
- `sqlfluff` требует иметь `.sqlfluff` в директории проекта. Вот пример конфига:
|
||||||
|
```toml
|
||||||
|
[sqlfluff]
|
||||||
|
|
||||||
|
# Supported dialects https://docs.sqlfluff.com/en/stable/dialects.html
|
||||||
|
# Or run 'sqlfluff dialects'
|
||||||
|
dialect = postgres
|
||||||
|
|
||||||
|
# One of [raw|jinja|python|placeholder]
|
||||||
|
templater = raw
|
||||||
|
|
||||||
|
# See https://stackoverflow.com/questions/608196/why-should-i-capitalize-my-sql-keywords-is-there-a-good-reason
|
||||||
|
[sqlfluff:rules:capitalisation.keywords]
|
||||||
|
capitalisation_policy = upper
|
||||||
|
[sqlfluff:rules:capitalisation.identifiers]
|
||||||
|
capitalisation_policy = lower
|
||||||
|
[sqlfluff:rules:capitalisation.functions]
|
||||||
|
extended_capitalisation_policy = lower
|
||||||
|
[sqlfluff:rules:capitalisation.literals]
|
||||||
|
capitalisation_policy = lower
|
||||||
|
[sqlfluff:rules:capitalisation.types]
|
||||||
|
extended_capitalisation_policy = lower
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Остальное
|
||||||
|
|
||||||
Мб потом добавлю сюда используемые плагины и для каких языков оно настроено.
|
Мб потом добавлю сюда используемые плагины и для каких языков оно настроено.
|
||||||
|
|
||||||
|
Learn Lua https://learnxinyminutes.com/lua/
|
||||||
|
|
||||||
|
After understanding a bit more about Lua, you can use `:help lua-guide` as a reference for how Neovim integrates Lua. (or HTML version): https://neovim.io/doc/user/lua-guide.html
|
||||||
|
|
||||||
|
Use "`<space>sh`" to `[s]`earch the `[h]`elp documentation,
|
||||||
|
|
||||||
|
If you experience any errors while trying to install kickstart, run `:checkhealth` for more info
|
||||||
|
|
||||||
|
|
|
||||||
997
nvim/init.lua
997
nvim/init.lua
File diff suppressed because it is too large
Load diff
|
|
@ -1,27 +1,52 @@
|
||||||
{
|
{
|
||||||
"LuaSnip": { "branch": "master", "commit": "33b06d72d220aa56a7ce80a0dd6f06c70cd82b9d" },
|
"LuaSnip": { "branch": "master", "commit": "33b06d72d220aa56a7ce80a0dd6f06c70cd82b9d" },
|
||||||
"cmp-nvim-lsp": { "branch": "main", "commit": "39e2eda76828d88b773cc27a3f61d2ad782c922d" },
|
"catppuccin": { "branch": "main", "commit": "faf15ab0201b564b6368ffa47b56feefc92ce3f4" },
|
||||||
|
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
|
||||||
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
||||||
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||||
"conform.nvim": { "branch": "master", "commit": "e76afe8f7976071fae308e31bf426f557a8ef339" },
|
"conform.nvim": { "branch": "master", "commit": "f4e8837878fc5712d053ba3091a73d27d96a09e2" },
|
||||||
"fidget.nvim": { "branch": "main", "commit": "e2a175c2abe2d4f65357da1c98c59a5cfb2b543f" },
|
"edge": { "branch": "master", "commit": "5b5a0683be0d9d8023a874ebf7e230095f4e1bae" },
|
||||||
|
"everforest": { "branch": "master", "commit": "44c2659ffb6d26a994346974b4d12e988f43e5e5" },
|
||||||
|
"fidget.nvim": { "branch": "main", "commit": "9238947645ce17d96f30842e61ba81147185b657" },
|
||||||
"gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" },
|
"gitsigns.nvim": { "branch": "main", "commit": "5f808b5e4fef30bd8aca1b803b4e555da07fc412" },
|
||||||
"lazy.nvim": { "branch": "main", "commit": "014d1d6d78df4e58f962158e6e00261d8632612c" },
|
"go.nvim": { "branch": "master", "commit": "c6d5ca26377d01c4de1f7bff1cd62c8b43baa6bc" },
|
||||||
|
"gruvbox-material": { "branch": "master", "commit": "fca2ff9ba627bbf172548eb52fcbb03f99ba34e9" },
|
||||||
|
"guihua.lua": { "branch": "master", "commit": "d783191eaa75215beae0c80319fcce5e6b3beeda" },
|
||||||
|
"image.nvim": { "branch": "master", "commit": "b3e1af829a56bb038e5f81bf97798a2950064b62" },
|
||||||
|
"indent-blankline.nvim": { "branch": "master", "commit": "259357fa4097e232730341fa60988087d189193a" },
|
||||||
|
"kanagawa.nvim": { "branch": "master", "commit": "ad3dddecd606746374ba4807324a08331dfca23c" },
|
||||||
|
"lazy.nvim": { "branch": "main", "commit": "7e6c863bc7563efbdd757a310d17ebc95166cef3" },
|
||||||
"lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" },
|
"lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" },
|
||||||
"luvit-meta": { "branch": "main", "commit": "57d464c4acb5c2e66bd4145060f5dc9e96a7bbb7" },
|
"luvit-meta": { "branch": "main", "commit": "57d464c4acb5c2e66bd4145060f5dc9e96a7bbb7" },
|
||||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "8e46de9241d3997927af12196bd8faa0ed08c29a" },
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "8e46de9241d3997927af12196bd8faa0ed08c29a" },
|
||||||
|
"mason-nvim-dap.nvim": { "branch": "main", "commit": "8b9363d83b5d779813cdd2819b8308651cec2a09" },
|
||||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "c5e07b8ff54187716334d585db34282e46fa2932" },
|
"mason-tool-installer.nvim": { "branch": "main", "commit": "c5e07b8ff54187716334d585db34282e46fa2932" },
|
||||||
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
|
"mason.nvim": { "branch": "main", "commit": "e2f7f9044ec30067bc11800a9e266664b88cda22" },
|
||||||
"mini.nvim": { "branch": "main", "commit": "2435d0de00174a45d6b352fefeaa6008ebe9f23b" },
|
"mini.nvim": { "branch": "main", "commit": "7ebfab26d77a4b9b05aaae565907e7fa4b2ee154" },
|
||||||
"nvim-cmp": { "branch": "main", "commit": "ca4d3330d386e76967e53b85953c170658255ecb" },
|
"monokai-pro.nvim": { "branch": "master", "commit": "6c15e36834a624a32f46c6db8f9fc063995b24b6" },
|
||||||
"nvim-lspconfig": { "branch": "master", "commit": "fc16fd4f9c5d72b45db0f45ee275db3a9a30481a" },
|
"neo-tree.nvim": { "branch": "main", "commit": "a77af2e764c5ed4038d27d1c463fa49cd4794e07" },
|
||||||
|
"nightfox.nvim": { "branch": "main", "commit": "7557f26defd093c4e9bc17f28b08403f706f5a44" },
|
||||||
|
"nordic.nvim": { "branch": "main", "commit": "1ee4044077059b34eacd18d93613495a602c131f" },
|
||||||
|
"nui.nvim": { "branch": "main", "commit": "53e907ffe5eedebdca1cd503b00aa8692068ca46" },
|
||||||
|
"nvim-autopairs": { "branch": "master", "commit": "b464658e9b880f463b9f7e6ccddd93fb0013f559" },
|
||||||
|
"nvim-cmp": { "branch": "main", "commit": "3403e2e9391ed0a28c3afddd8612701b647c8e26" },
|
||||||
|
"nvim-dap": { "branch": "master", "commit": "567da83810dd9da32f9414d941bc6848715fc102" },
|
||||||
|
"nvim-dap-go": { "branch": "main", "commit": "6aa88167ea1224bcef578e8c7160fe8afbb44848" },
|
||||||
|
"nvim-dap-ui": { "branch": "master", "commit": "ffa89839f97bad360e78428d5c740fdad9a0ff02" },
|
||||||
|
"nvim-lint": { "branch": "master", "commit": "6b46370d02cd001509a765591a3ffc481b538794" },
|
||||||
|
"nvim-lspconfig": { "branch": "master", "commit": "9f2c279cf9abe584f03bfeb37c6658d68e3ff49d" },
|
||||||
|
"nvim-nio": { "branch": "master", "commit": "a428f309119086dc78dd4b19306d2d67be884eee" },
|
||||||
"nvim-treesitter": { "branch": "master", "commit": "3b8dee4293567b0b9a87360842af14669f60dd13" },
|
"nvim-treesitter": { "branch": "master", "commit": "3b8dee4293567b0b9a87360842af14669f60dd13" },
|
||||||
|
"nvim-web-devicons": { "branch": "master", "commit": "0eb18da56e2ba6ba24de7130a12bcc4e31ad11cb" },
|
||||||
"plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" },
|
"plenary.nvim": { "branch": "master", "commit": "2d9b06177a975543726ce5c73fca176cedbffe9d" },
|
||||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "cf48d4dfce44e0b9a2e19a008d6ec6ea6f01a83b" },
|
"rose-pine": { "branch": "main", "commit": "91548dca53b36dbb9d36c10f114385f759731be1" },
|
||||||
|
"rustaceanvim": { "branch": "master", "commit": "1933318b98940b3e98ccbcd2828ae88c1bce8494" },
|
||||||
|
"sonokai": { "branch": "master", "commit": "fd42b20963c34dfc1744ac31f6a6efe78f4edad2" },
|
||||||
|
"telescope-fzf-native.nvim": { "branch": "main", "commit": "dae2eac9d91464448b584c7949a31df8faefec56" },
|
||||||
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
|
||||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||||
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" },
|
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" },
|
||||||
"tokyonight.nvim": { "branch": "main", "commit": "355e2842291dbf51b2c5878e9e37281bbef09783" },
|
"tokyonight.nvim": { "branch": "main", "commit": "45d22cf0e1b93476d3b6d362d720412b3d34465c" },
|
||||||
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
|
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
|
||||||
"which-key.nvim": { "branch": "main", "commit": "9b365a6428a9633e3eeb34dbef1b791511c54f70" }
|
"which-key.nvim": { "branch": "main", "commit": "8ab96b38a2530eacba5be717f52e04601eb59326" }
|
||||||
}
|
}
|
||||||
|
|
|
||||||
18
nvim/lua/custom/plugins/golang.lua
Normal file
18
nvim/lua/custom/plugins/golang.lua
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
-- Feature-Rich Go Plugin for Neovim
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
"ray-x/go.nvim",
|
||||||
|
dependencies = { -- optional packages
|
||||||
|
"ray-x/guihua.lua",
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require("go").setup()
|
||||||
|
end,
|
||||||
|
event = {"CmdlineEnter"},
|
||||||
|
ft = {"go", 'gomod'},
|
||||||
|
-- build = ':lua require("go.install").update_all_sync()' -- if you need to install/update all binaries
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
-- You can add your own plugins here or in other files in this directory!
|
|
||||||
-- I promise not to create any merge conflicts in this directory :)
|
|
||||||
--
|
|
||||||
-- See the kickstart.nvim README for more information
|
|
||||||
return {
|
|
||||||
|
|
||||||
}
|
|
||||||
9
nvim/lua/custom/plugins/rust.lua
Normal file
9
nvim/lua/custom/plugins/rust.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
-- Supercharge your Rust experience in Neovim
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'mrcjkb/rustaceanvim',
|
||||||
|
version = '^5', -- Recommended
|
||||||
|
lazy = false, -- This plugin is already lazy
|
||||||
|
},
|
||||||
|
}
|
||||||
58
nvim/lua/custom/plugins/terminal.lua
Normal file
58
nvim/lua/custom/plugins/terminal.lua
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
vim.keymap.set("t", "<esc><esc>", "<c-\\><c-n>")
|
||||||
|
|
||||||
|
local state = {
|
||||||
|
floating = {
|
||||||
|
buf = -1,
|
||||||
|
win = -1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local function create_floating_window(opts)
|
||||||
|
opts = opts or {}
|
||||||
|
local width = opts.width or math.floor(vim.o.columns * 0.8)
|
||||||
|
local height = opts.height or math.floor(vim.o.lines * 0.8)
|
||||||
|
|
||||||
|
-- Calculate the position to center the window
|
||||||
|
local col = math.floor((vim.o.columns - width) / 2)
|
||||||
|
local row = math.floor((vim.o.lines - height) / 2)
|
||||||
|
|
||||||
|
-- Create a buffer
|
||||||
|
local buf = nil
|
||||||
|
if vim.api.nvim_buf_is_valid(opts.buf) then
|
||||||
|
buf = opts.buf
|
||||||
|
else
|
||||||
|
buf = vim.api.nvim_create_buf(false, true) -- No file, scratch buffer
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Define window configuration
|
||||||
|
local win_config = {
|
||||||
|
relative = "editor",
|
||||||
|
width = width,
|
||||||
|
height = height,
|
||||||
|
col = col,
|
||||||
|
row = row,
|
||||||
|
style = "minimal", -- No borders or extra UI elements
|
||||||
|
border = "rounded",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Create the floating window
|
||||||
|
local win = vim.api.nvim_open_win(buf, true, win_config)
|
||||||
|
|
||||||
|
return { buf = buf, win = win }
|
||||||
|
end
|
||||||
|
|
||||||
|
local toggle_terminal = function()
|
||||||
|
if not vim.api.nvim_win_is_valid(state.floating.win) then
|
||||||
|
state.floating = create_floating_window { buf = state.floating.buf }
|
||||||
|
if vim.bo[state.floating.buf].buftype ~= "terminal" then
|
||||||
|
vim.cmd.terminal()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
vim.api.nvim_win_hide(state.floating.win)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Example usage:
|
||||||
|
-- Create a floating window with default dimensions
|
||||||
|
vim.api.nvim_create_user_command("Floaterminal", toggle_terminal, {})
|
||||||
|
vim.keymap.set({ "n", "t" }, "<leader>tt", toggle_terminal, { desc = '[T]oggle [T]erminal' })
|
||||||
73
nvim/lua/kickstart/plugins/autoformat.lua
Normal file
73
nvim/lua/kickstart/plugins/autoformat.lua
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
-- Autoformat
|
||||||
|
-- Timeout для форматирования пришлось задать в 5 секунд, потому что sqlfluff очень долго форматирует
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'stevearc/conform.nvim',
|
||||||
|
event = { 'BufWritePre' },
|
||||||
|
cmd = { 'ConformInfo' },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
'<leader>f',
|
||||||
|
function()
|
||||||
|
require('conform').format {
|
||||||
|
async = true,
|
||||||
|
lsp_format = 'fallback',
|
||||||
|
timeout_ms = 5000,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
mode = '',
|
||||||
|
desc = '[F]ormat buffer',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
notify_on_error = false,
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
-- Disable "format_on_save lsp_fallback" for languages that don't
|
||||||
|
-- have a well standardized coding style. You can add additional
|
||||||
|
-- languages here or re-enable it for the disabled ones.
|
||||||
|
local disable_filetypes = { c = true, cpp = true }
|
||||||
|
local lsp_format_opt
|
||||||
|
if disable_filetypes[vim.bo[bufnr].filetype] then
|
||||||
|
lsp_format_opt = 'never'
|
||||||
|
else
|
||||||
|
lsp_format_opt = 'fallback'
|
||||||
|
end
|
||||||
|
return {
|
||||||
|
timeout_ms = 5000,
|
||||||
|
lsp_format = lsp_format_opt,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { 'stylua' },
|
||||||
|
sql = { 'sqlfluff' },
|
||||||
|
-- sql = { 'sql_formatter' },
|
||||||
|
-- ["*"] = { "injected" }, -- enables injected-lang formatting for all filetypes
|
||||||
|
|
||||||
|
-- Conform can also run multiple formatters sequentially
|
||||||
|
-- python = { "isort", "black" },
|
||||||
|
--
|
||||||
|
-- You can use 'stop_after_first' to run the first available formatter from the list
|
||||||
|
-- javascript = { "prettierd", "prettier", stop_after_first = true },
|
||||||
|
},
|
||||||
|
formatters = {
|
||||||
|
-- sql_formatter = {
|
||||||
|
-- -- prepend_args = { "-c", vim.fn.expand("~/.config/sql_formatter.json"),
|
||||||
|
-- args = function()
|
||||||
|
-- -- Создаём временный JSON-файл конфигурации
|
||||||
|
-- local config_path = vim.fn.tempname() .. ".json"
|
||||||
|
-- local config_content = vim.fn.json_encode({
|
||||||
|
-- tabWidth = 4,
|
||||||
|
-- })
|
||||||
|
-- local file = io.open(config_path, "w")
|
||||||
|
-- file:write(config_content)
|
||||||
|
-- file:close()
|
||||||
|
-- -- Возвращаем аргументы для форматтера с указанием конфигурационного файла
|
||||||
|
-- return { "-c", config_path }
|
||||||
|
-- end,
|
||||||
|
-- stdin = true,
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
119
nvim/lua/kickstart/plugins/completion.lua
Normal file
119
nvim/lua/kickstart/plugins/completion.lua
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
-- Autocompletion
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'hrsh7th/nvim-cmp',
|
||||||
|
event = 'InsertEnter',
|
||||||
|
dependencies = {
|
||||||
|
-- Snippet Engine & its associated nvim-cmp source
|
||||||
|
{
|
||||||
|
'L3MON4D3/LuaSnip',
|
||||||
|
build = (function()
|
||||||
|
-- Build Step is needed for regex support in snippets.
|
||||||
|
-- This step is not supported in many windows environments.
|
||||||
|
-- Remove the below condition to re-enable on windows.
|
||||||
|
if vim.fn.has 'win32' == 1 or vim.fn.executable 'make' == 0 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return 'make install_jsregexp'
|
||||||
|
end)(),
|
||||||
|
dependencies = {
|
||||||
|
-- `friendly-snippets` contains a variety of premade snippets.
|
||||||
|
-- See the README about individual language/framework/plugin snippets:
|
||||||
|
-- https://github.com/rafamadriz/friendly-snippets
|
||||||
|
-- {
|
||||||
|
-- 'rafamadriz/friendly-snippets',
|
||||||
|
-- config = function()
|
||||||
|
-- require('luasnip.loaders.from_vscode').lazy_load()
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'saadparwaiz1/cmp_luasnip',
|
||||||
|
|
||||||
|
-- Adds other completion capabilities.
|
||||||
|
-- nvim-cmp does not ship with all sources by default. They are split
|
||||||
|
-- into multiple repos for maintenance purposes.
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
'hrsh7th/cmp-path',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- See `:help cmp`
|
||||||
|
local cmp = require 'cmp'
|
||||||
|
local luasnip = require 'luasnip'
|
||||||
|
luasnip.config.setup {}
|
||||||
|
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
luasnip.lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
completion = { completeopt = 'menu,menuone,noinsert' },
|
||||||
|
|
||||||
|
-- For an understanding of why these mappings were
|
||||||
|
-- chosen, you will need to read `:help ins-completion`
|
||||||
|
--
|
||||||
|
-- No, but seriously. Please read `:help ins-completion`, it is really good!
|
||||||
|
mapping = cmp.mapping.preset.insert {
|
||||||
|
-- Select the [n]ext item
|
||||||
|
['<C-n>'] = cmp.mapping.select_next_item(),
|
||||||
|
-- Select the [p]revious item
|
||||||
|
['<C-p>'] = cmp.mapping.select_prev_item(),
|
||||||
|
|
||||||
|
-- Scroll the documentation window [b]ack / [f]orward
|
||||||
|
['<C-b>'] = cmp.mapping.scroll_docs(-4),
|
||||||
|
['<C-f>'] = cmp.mapping.scroll_docs(4),
|
||||||
|
|
||||||
|
-- Accept ([y]es) the completion.
|
||||||
|
-- This will auto-import if your LSP supports it.
|
||||||
|
-- This will expand snippets if the LSP sent a snippet.
|
||||||
|
['<C-y>'] = cmp.mapping.confirm { select = true },
|
||||||
|
|
||||||
|
-- If you prefer more traditional completion keymaps,
|
||||||
|
-- you can uncomment the following lines
|
||||||
|
--['<CR>'] = cmp.mapping.confirm { select = true },
|
||||||
|
--['<Tab>'] = cmp.mapping.select_next_item(),
|
||||||
|
--['<S-Tab>'] = cmp.mapping.select_prev_item(),
|
||||||
|
|
||||||
|
-- Manually trigger a completion from nvim-cmp.
|
||||||
|
-- Generally you don't need this, because nvim-cmp will display
|
||||||
|
-- completions whenever it has completion options available.
|
||||||
|
['<C-Space>'] = cmp.mapping.complete {},
|
||||||
|
|
||||||
|
-- Think of <c-l> as moving to the right of your snippet expansion.
|
||||||
|
-- So if you have a snippet that's like:
|
||||||
|
-- function $name($args)
|
||||||
|
-- $body
|
||||||
|
-- end
|
||||||
|
--
|
||||||
|
-- <c-l> will move you to the right of each of the expansion locations.
|
||||||
|
-- <c-h> is similar, except moving you backwards.
|
||||||
|
['<C-l>'] = cmp.mapping(function()
|
||||||
|
if luasnip.expand_or_locally_jumpable() then
|
||||||
|
luasnip.expand_or_jump()
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
['<C-h>'] = cmp.mapping(function()
|
||||||
|
if luasnip.locally_jumpable(-1) then
|
||||||
|
luasnip.jump(-1)
|
||||||
|
end
|
||||||
|
end, { 'i', 's' }),
|
||||||
|
|
||||||
|
-- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
|
||||||
|
-- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
{
|
||||||
|
name = 'lazydev',
|
||||||
|
-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
|
||||||
|
group_index = 0,
|
||||||
|
},
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
{ name = 'luasnip' },
|
||||||
|
{ name = 'path' },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -84,7 +84,7 @@ return {
|
||||||
require('mason-nvim-dap').setup {
|
require('mason-nvim-dap').setup {
|
||||||
-- Makes a best effort to setup the various debuggers with
|
-- Makes a best effort to setup the various debuggers with
|
||||||
-- reasonable debug configurations
|
-- reasonable debug configurations
|
||||||
automatic_installation = true,
|
-- automatic_installation = true,
|
||||||
|
|
||||||
-- You can provide additional configuration to the handlers,
|
-- You can provide additional configuration to the handlers,
|
||||||
-- see mason-nvim-dap README for more information
|
-- see mason-nvim-dap README for more information
|
||||||
|
|
@ -92,9 +92,9 @@ return {
|
||||||
|
|
||||||
-- You'll need to check that you have the required things installed
|
-- You'll need to check that you have the required things installed
|
||||||
-- online, please don't ask me how to install them :)
|
-- online, please don't ask me how to install them :)
|
||||||
ensure_installed = {
|
ensure_installed = { -- Скачать через mason (не надо)
|
||||||
-- Update this to ensure that you have the debuggers for the langs you want
|
-- Update this to ensure that you have the debuggers for the langs you want
|
||||||
'delve',
|
-- 'delve',
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,17 @@
|
||||||
-- Adds git related signs to the gutter, as well as utilities for managing changes
|
-- Adds git related signs to the gutter, as well as utilities for managing changes
|
||||||
-- NOTE: gitsigns is already included in init.lua but contains only the base
|
|
||||||
-- config. This will add also the recommended keymaps.
|
-- NOTE: Plugins can also be added by using a table,
|
||||||
|
-- with the first argument being the link and the following
|
||||||
|
-- keys can be used to configure plugin behavior/loading/etc.
|
||||||
|
--
|
||||||
|
-- Use `opts = {}` to force a plugin to be loaded.
|
||||||
|
--
|
||||||
|
|
||||||
|
-- Here is a more advanced example where we pass configuration
|
||||||
|
-- options to `gitsigns.nvim`. This is equivalent to the following Lua:
|
||||||
|
-- require('gitsigns').setup({ ... })
|
||||||
|
--
|
||||||
|
-- See `:help gitsigns` to understand what the configuration keys do
|
||||||
|
|
||||||
return {
|
return {
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
|
-- Add indentation guides even on blank lines
|
||||||
|
|
||||||
return {
|
return {
|
||||||
{ -- Add indentation guides even on blank lines
|
{
|
||||||
'lukas-reineke/indent-blankline.nvim',
|
'lukas-reineke/indent-blankline.nvim',
|
||||||
-- Enable `lukas-reineke/indent-blankline.nvim`
|
-- Enable `lukas-reineke/indent-blankline.nvim`
|
||||||
-- See `:help ibl`
|
-- See `:help ibl`
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
return {
|
return {
|
||||||
|
|
||||||
{ -- Linting
|
{ -- Linting
|
||||||
'mfussenegger/nvim-lint',
|
'mfussenegger/nvim-lint',
|
||||||
event = { 'BufReadPre', 'BufNewFile' },
|
event = { 'BufReadPre', 'BufNewFile' },
|
||||||
config = function()
|
config = function()
|
||||||
local lint = require 'lint'
|
local lint = require 'lint'
|
||||||
lint.linters_by_ft = {
|
lint.linters_by_ft = {
|
||||||
markdown = { 'markdownlint' },
|
-- markdown = { 'markdownlint' },
|
||||||
|
sql = { 'sqlfluff' },
|
||||||
|
go = { 'golangcilint' },
|
||||||
}
|
}
|
||||||
|
|
||||||
-- To allow other plugins to add linters to require('lint').linters_by_ft,
|
-- To allow other plugins to add linters to require('lint').linters_by_ft,
|
||||||
|
|
|
||||||
316
nvim/lua/kickstart/plugins/lsp.lua
Normal file
316
nvim/lua/kickstart/plugins/lsp.lua
Normal file
|
|
@ -0,0 +1,316 @@
|
||||||
|
-- LSP Plugins
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
|
||||||
|
-- used for completion, annotations and signatures of Neovim apis
|
||||||
|
'folke/lazydev.nvim',
|
||||||
|
ft = 'lua',
|
||||||
|
opts = {
|
||||||
|
library = {
|
||||||
|
-- Load luvit types when the `vim.uv` word is found
|
||||||
|
{ path = 'luvit-meta/library', words = { 'vim%.uv' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ 'Bilal2453/luvit-meta', lazy = true },
|
||||||
|
{
|
||||||
|
-- Main LSP Configuration
|
||||||
|
'neovim/nvim-lspconfig',
|
||||||
|
dependencies = {
|
||||||
|
-- Automatically install LSPs and related tools to stdpath for Neovim
|
||||||
|
{ 'williamboman/mason.nvim', config = true }, -- NOTE: Must be loaded before dependants
|
||||||
|
'williamboman/mason-lspconfig.nvim',
|
||||||
|
'WhoIsSethDaniel/mason-tool-installer.nvim',
|
||||||
|
|
||||||
|
-- Useful status updates for LSP.
|
||||||
|
-- NOTE: `opts = {}` is the same as calling `require('fidget').setup({})`
|
||||||
|
{ 'j-hui/fidget.nvim', opts = {} },
|
||||||
|
|
||||||
|
-- Allows extra capabilities provided by nvim-cmp
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- Brief aside: **What is LSP?**
|
||||||
|
--
|
||||||
|
-- LSP is an initialism you've probably heard, but might not understand what it is.
|
||||||
|
--
|
||||||
|
-- LSP stands for Language Server Protocol. It's a protocol that helps editors
|
||||||
|
-- and language tooling communicate in a standardized fashion.
|
||||||
|
--
|
||||||
|
-- In general, you have a "server" which is some tool built to understand a particular
|
||||||
|
-- language (such as `gopls`, `lua_ls`, `rust_analyzer`, etc.). These Language Servers
|
||||||
|
-- (sometimes called LSP servers, but that's kind of like ATM Machine) are standalone
|
||||||
|
-- processes that communicate with some "client" - in this case, Neovim!
|
||||||
|
--
|
||||||
|
-- LSP provides Neovim with features like:
|
||||||
|
-- - Go to definition
|
||||||
|
-- - Find references
|
||||||
|
-- - Autocompletion
|
||||||
|
-- - Symbol Search
|
||||||
|
-- - and more!
|
||||||
|
--
|
||||||
|
-- Thus, Language Servers are external tools that must be installed separately from
|
||||||
|
-- Neovim. This is where `mason` and related plugins come into play.
|
||||||
|
--
|
||||||
|
-- If you're wondering about lsp vs treesitter, you can check out the wonderfully
|
||||||
|
-- and elegantly composed help section, `:help lsp-vs-treesitter`
|
||||||
|
|
||||||
|
-- This function gets run when an LSP attaches to a particular buffer.
|
||||||
|
-- That is to say, every time a new file is opened that is associated with
|
||||||
|
-- an lsp (for example, opening `main.rs` is associated with `rust_analyzer`) this
|
||||||
|
-- function will be executed to configure the current buffer
|
||||||
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
|
group = vim.api.nvim_create_augroup('kickstart-lsp-attach', { clear = true }),
|
||||||
|
callback = function(event)
|
||||||
|
-- NOTE: Remember that Lua is a real programming language, and as such it is possible
|
||||||
|
-- to define small helper and utility functions so you don't have to repeat yourself.
|
||||||
|
--
|
||||||
|
-- In this case, we create a function that lets us more easily define mappings specific
|
||||||
|
-- for LSP related items. It sets the mode, buffer and description for us each time.
|
||||||
|
local map = function(keys, func, desc, mode)
|
||||||
|
mode = mode or 'n'
|
||||||
|
vim.keymap.set(mode, keys, func, { buffer = event.buf, desc = 'LSP: ' .. desc })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Jump to the definition of the word under your cursor.
|
||||||
|
-- This is where a variable was first declared, or where a function is defined, etc.
|
||||||
|
-- To jump back, press <C-t>.
|
||||||
|
map('gd', require('telescope.builtin').lsp_definitions, '[G]oto [D]efinition')
|
||||||
|
|
||||||
|
-- Find references for the word under your cursor.
|
||||||
|
map('gr', require('telescope.builtin').lsp_references, '[G]oto [R]eferences')
|
||||||
|
|
||||||
|
-- Jump to the implementation of the word under your cursor.
|
||||||
|
-- Useful when your language has ways of declaring types without an actual implementation.
|
||||||
|
map('gI', require('telescope.builtin').lsp_implementations, '[G]oto [I]mplementation')
|
||||||
|
|
||||||
|
-- Jump to the type of the word under your cursor.
|
||||||
|
-- Useful when you're not sure what type a variable is and you want to see
|
||||||
|
-- the definition of its *type*, not where it was *defined*.
|
||||||
|
map('<leader>D', require('telescope.builtin').lsp_type_definitions, 'Type [D]efinition')
|
||||||
|
|
||||||
|
-- Fuzzy find all the symbols in your current document.
|
||||||
|
-- Symbols are things like variables, functions, types, etc.
|
||||||
|
map('<leader>ds', require('telescope.builtin').lsp_document_symbols, '[D]ocument [S]ymbols')
|
||||||
|
|
||||||
|
-- Fuzzy find all the symbols in your current workspace.
|
||||||
|
-- Similar to document symbols, except searches over your entire project.
|
||||||
|
map('<leader>ws', require('telescope.builtin').lsp_dynamic_workspace_symbols, '[W]orkspace [S]ymbols')
|
||||||
|
|
||||||
|
-- Rename the variable under your cursor.
|
||||||
|
-- Most Language Servers support renaming across files, etc.
|
||||||
|
map('<leader>rn', vim.lsp.buf.rename, '[R]e[n]ame')
|
||||||
|
|
||||||
|
-- Execute a code action, usually your cursor needs to be on top of an error
|
||||||
|
-- or a suggestion from your LSP for this to activate.
|
||||||
|
map('<leader>ca', vim.lsp.buf.code_action, '[C]ode [A]ction', { 'n', 'x' })
|
||||||
|
|
||||||
|
-- WARN: This is not Goto Definition, this is Goto Declaration.
|
||||||
|
-- For example, in C this would take you to the header.
|
||||||
|
map('gD', vim.lsp.buf.declaration, '[G]oto [D]eclaration')
|
||||||
|
|
||||||
|
-- The following two autocommands are used to highlight references of the
|
||||||
|
-- word under your cursor when your cursor rests there for a little while.
|
||||||
|
-- See `:help CursorHold` for information about when this is executed
|
||||||
|
--
|
||||||
|
-- When you move your cursor, the highlights will be cleared (the second autocommand).
|
||||||
|
local client = vim.lsp.get_client_by_id(event.data.client_id)
|
||||||
|
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_documentHighlight) then
|
||||||
|
local highlight_augroup = vim.api.nvim_create_augroup('kickstart-lsp-highlight', { clear = false })
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorHold', 'CursorHoldI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.document_highlight,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd({ 'CursorMoved', 'CursorMovedI' }, {
|
||||||
|
buffer = event.buf,
|
||||||
|
group = highlight_augroup,
|
||||||
|
callback = vim.lsp.buf.clear_references,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('LspDetach', {
|
||||||
|
group = vim.api.nvim_create_augroup('kickstart-lsp-detach', { clear = true }),
|
||||||
|
callback = function(event2)
|
||||||
|
vim.lsp.buf.clear_references()
|
||||||
|
vim.api.nvim_clear_autocmds { group = 'kickstart-lsp-highlight', buffer = event2.buf }
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- The following code creates a keymap to toggle inlay hints in your
|
||||||
|
-- code, if the language server you are using supports them
|
||||||
|
--
|
||||||
|
-- This may be unwanted, since they displace some of your code
|
||||||
|
if client and client.supports_method(vim.lsp.protocol.Methods.textDocument_inlayHint) then
|
||||||
|
map('<leader>th', function()
|
||||||
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf })
|
||||||
|
end, '[T]oggle Inlay [H]ints')
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Change diagnostic symbols in the sign column (gutter)
|
||||||
|
if vim.g.have_nerd_font then
|
||||||
|
local signs = { ERROR = '', WARN = '', INFO = '', HINT = '' }
|
||||||
|
local diagnostic_signs = {}
|
||||||
|
for type, icon in pairs(signs) do
|
||||||
|
diagnostic_signs[vim.diagnostic.severity[type]] = icon
|
||||||
|
end
|
||||||
|
vim.diagnostic.config { signs = { text = diagnostic_signs } }
|
||||||
|
end
|
||||||
|
|
||||||
|
-- LSP servers and clients are able to communicate to each other what features they support.
|
||||||
|
-- By default, Neovim doesn't support everything that is in the LSP specification.
|
||||||
|
-- When you add nvim-cmp, luasnip, etc. Neovim now has *more* capabilities.
|
||||||
|
-- So, we create new capabilities with nvim cmp, and then broadcast that to the servers.
|
||||||
|
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
capabilities = vim.tbl_deep_extend('force', capabilities, require('cmp_nvim_lsp').default_capabilities())
|
||||||
|
|
||||||
|
-- Enable the following language servers
|
||||||
|
-- Feel free to add/remove any LSPs that you want here. They will automatically be installed.
|
||||||
|
--
|
||||||
|
-- Add any additional override configuration in the following tables. Available keys are:
|
||||||
|
-- - cmd (table): Override the default command used to start the server
|
||||||
|
-- - filetypes (table): Override the default list of associated filetypes for the server
|
||||||
|
-- - capabilities (table): Override fields in capabilities. Can be used to disable certain LSP features.
|
||||||
|
-- - on_attach (func): Функция, которая вызывается, когда LSP подключается к буферу
|
||||||
|
-- - settings (table): Override the default settings passed when initializing the server.
|
||||||
|
-- For example, to see the options for `lua_ls`, you could go to: https://luals.github.io/wiki/settings/
|
||||||
|
local servers = { -- WARN: Качает через mason. Может не работать в NixOS. Оставил для других OS на будущее
|
||||||
|
-- See `:help lspconfig-all` for a list of all the pre-configured LSPs
|
||||||
|
--
|
||||||
|
-- Some languages (like typescript) have entire language plugins that can be useful:
|
||||||
|
-- https://github.com/pmizio/typescript-tools.nvim
|
||||||
|
--
|
||||||
|
-- But for many setups, the LSP (`ts_ls`) will work just fine
|
||||||
|
-- taplo
|
||||||
|
}
|
||||||
|
|
||||||
|
local lspconfig = require('lspconfig')
|
||||||
|
|
||||||
|
-- Nix
|
||||||
|
lspconfig.nixd.setup {}
|
||||||
|
|
||||||
|
-- Golang
|
||||||
|
lspconfig.gopls.setup {}
|
||||||
|
lspconfig.templ.setup {}
|
||||||
|
|
||||||
|
-- SQL
|
||||||
|
-- lspconfig.postgres_lsp.setup {}
|
||||||
|
lspconfig.sqls.setup {
|
||||||
|
on_attach = function(client, bufnr)
|
||||||
|
-- Выключить форматирование
|
||||||
|
client.server_capabilities.documentFormattingProvider = false
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Frontend
|
||||||
|
lspconfig.tailwindcss.setup {}
|
||||||
|
lspconfig.ts_ls.setup {}
|
||||||
|
lspconfig.htmx.setup {}
|
||||||
|
lspconfig.emmet_language_server.setup {
|
||||||
|
filetypes = { 'templ', 'css', 'eruby', 'html', 'javascript', 'javascriptreact', 'less', 'sass', 'scss', 'pug', 'typescriptreact' },
|
||||||
|
}
|
||||||
|
local cap_css = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
cap_css.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
lspconfig.cssls.setup {
|
||||||
|
capabilities = cap_css,
|
||||||
|
}
|
||||||
|
local cap_html = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
cap_html.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
lspconfig.html.setup {
|
||||||
|
capabilities = cap_html,
|
||||||
|
on_attach = function(client, bufnr)
|
||||||
|
-- Отключаем форматирование для файлов .templ
|
||||||
|
local ft = vim.api.nvim_buf_get_option(bufnr, 'filetype')
|
||||||
|
if ft == 'templ' then
|
||||||
|
client.server_capabilities.documentFormattingProvider = false
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
-- Lua
|
||||||
|
lspconfig.lua_ls.setup {
|
||||||
|
settings = {
|
||||||
|
Lua = {
|
||||||
|
completion = {
|
||||||
|
callSnippet = 'Replace',
|
||||||
|
},
|
||||||
|
-- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings
|
||||||
|
-- diagnostics = { disable = { 'missing-fields' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- C/C++
|
||||||
|
-- lspconfig.ccls.setup {
|
||||||
|
-- init_options = {
|
||||||
|
-- cache = {
|
||||||
|
-- directory = ".ccls-cache";
|
||||||
|
-- };
|
||||||
|
-- }
|
||||||
|
-- }
|
||||||
|
lspconfig.clangd.setup {}
|
||||||
|
lspconfig.cmake.setup {}
|
||||||
|
|
||||||
|
-- Python
|
||||||
|
lspconfig.pyright.setup {}
|
||||||
|
lspconfig.ruff.setup {
|
||||||
|
on_attach = function(client, bufnr) -- Выключить форматирование
|
||||||
|
client.server_capabilities.documentFormattingProvider = false
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Rust
|
||||||
|
-- lspconfig.rust_analyzer.setup {}
|
||||||
|
|
||||||
|
-- Bash
|
||||||
|
lspconfig.bashls.setup {}
|
||||||
|
|
||||||
|
-- JSON
|
||||||
|
local cap_json = vim.lsp.protocol.make_client_capabilities()
|
||||||
|
cap_json.textDocument.completion.completionItem.snippetSupport = true
|
||||||
|
lspconfig.jsonls.setup {
|
||||||
|
capabilities = cap_json,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Other
|
||||||
|
lspconfig.taplo.setup {}
|
||||||
|
lspconfig.vimls.setup {}
|
||||||
|
lspconfig.yamlls.setup {}
|
||||||
|
|
||||||
|
|
||||||
|
-- Ensure the servers and tools above are installed
|
||||||
|
-- To check the current status of installed tools and/or manually install
|
||||||
|
-- other tools, you can run
|
||||||
|
-- :Mason
|
||||||
|
--
|
||||||
|
-- You can press `g?` for help in this menu.
|
||||||
|
require('mason').setup()
|
||||||
|
|
||||||
|
-- You can add other tools here that you want Mason to install
|
||||||
|
-- for you, so that they are available from within Neovim.
|
||||||
|
local ensure_installed = vim.tbl_keys(servers or {})
|
||||||
|
-- vim.list_extend(ensure_installed, {
|
||||||
|
-- 'stylua', -- Used to format Lua code
|
||||||
|
-- })
|
||||||
|
require('mason-tool-installer').setup { ensure_installed = ensure_installed }
|
||||||
|
|
||||||
|
require('mason-lspconfig').setup {
|
||||||
|
handlers = {
|
||||||
|
function(server_name)
|
||||||
|
local server = servers[server_name] or {}
|
||||||
|
-- This handles overriding only values explicitly passed
|
||||||
|
-- by the server configuration above. Useful when disabling
|
||||||
|
-- certain features of an LSP (for example, turning off formatting for ts_ls)
|
||||||
|
server.capabilities = vim.tbl_deep_extend('force', {}, capabilities, server.capabilities or {})
|
||||||
|
require('lspconfig')[server_name].setup(server)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
42
nvim/lua/kickstart/plugins/mini.lua
Normal file
42
nvim/lua/kickstart/plugins/mini.lua
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
-- Collection of various small independent plugins/modules
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'echasnovski/mini.nvim',
|
||||||
|
config = function()
|
||||||
|
-- Better Around/Inside textobjects
|
||||||
|
--
|
||||||
|
-- Examples:
|
||||||
|
-- - va) - [V]isually select [A]round [)]paren
|
||||||
|
-- - yinq - [Y]ank [I]nside [N]ext [Q]uote
|
||||||
|
-- - ci' - [C]hange [I]nside [']quote
|
||||||
|
require('mini.ai').setup { n_lines = 500 }
|
||||||
|
|
||||||
|
-- Add/delete/replace surroundings (brackets, quotes, etc.)
|
||||||
|
--
|
||||||
|
-- - saiw) - [S]urround [A]dd [I]nner [W]ord [)]Paren
|
||||||
|
-- - sd' - [S]urround [D]elete [']quotes
|
||||||
|
-- - sr)' - [S]urround [R]eplace [)] [']
|
||||||
|
require('mini.surround').setup()
|
||||||
|
|
||||||
|
-- Simple and easy statusline.
|
||||||
|
-- You could remove this setup call if you don't like it,
|
||||||
|
-- and try some other statusline plugin
|
||||||
|
local statusline = require 'mini.statusline'
|
||||||
|
-- set use_icons to true if you have a Nerd Font
|
||||||
|
statusline.setup { use_icons = vim.g.have_nerd_font }
|
||||||
|
|
||||||
|
-- You can configure sections in the statusline by overriding their
|
||||||
|
-- default behavior. For example, here we set the section for
|
||||||
|
-- cursor location to LINE:COLUMN
|
||||||
|
---@diagnostic disable-next-line: duplicate-set-field
|
||||||
|
statusline.section_location = function()
|
||||||
|
return '%2l:%-2v'
|
||||||
|
end
|
||||||
|
|
||||||
|
-- ... and there is more!
|
||||||
|
-- Check out: https://github.com/echasnovski/mini.nvim
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -2,23 +2,37 @@
|
||||||
-- https://github.com/nvim-neo-tree/neo-tree.nvim
|
-- https://github.com/nvim-neo-tree/neo-tree.nvim
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'nvim-neo-tree/neo-tree.nvim',
|
{
|
||||||
version = '*',
|
'nvim-neo-tree/neo-tree.nvim',
|
||||||
dependencies = {
|
version = '*',
|
||||||
'nvim-lua/plenary.nvim',
|
dependencies = {
|
||||||
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
|
'nvim-lua/plenary.nvim',
|
||||||
'MunifTanjim/nui.nvim',
|
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended
|
||||||
'3rd/image.nvim', -- Optional image support in preview window: See `# Preview Mode` for more information
|
'MunifTanjim/nui.nvim',
|
||||||
},
|
{ -- Optional image support in preview window: See `# Preview Mode` for more information
|
||||||
cmd = 'Neotree',
|
"3rd/image.nvim",
|
||||||
keys = {
|
build = false, -- so that it doesn't build the rock
|
||||||
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
|
opts = {
|
||||||
},
|
backend = "ueberzug", -- or "kitty"
|
||||||
opts = {
|
processor = "magick_cli", -- or "magick_rock"
|
||||||
filesystem = {
|
},
|
||||||
window = {
|
},
|
||||||
mappings = {
|
},
|
||||||
['\\'] = 'close_window',
|
cmd = 'Neotree',
|
||||||
|
keys = {
|
||||||
|
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
filesystem = {
|
||||||
|
window = {
|
||||||
|
mappings = {
|
||||||
|
['\\'] = 'close_window',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
filtered_items = {
|
||||||
|
visible = true, -- Show hidden files
|
||||||
|
-- hide_dotfiles = false,
|
||||||
|
-- hide_gitignored = true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
119
nvim/lua/kickstart/plugins/telescope.lua
Normal file
119
nvim/lua/kickstart/plugins/telescope.lua
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
-- Fuzzy Finder (files, lsp, etc)
|
||||||
|
|
||||||
|
-- NOTE: Plugins can specify dependencies.
|
||||||
|
--
|
||||||
|
-- The dependencies are proper plugin specifications as well - anything
|
||||||
|
-- you do for a plugin at the top level, you can do for a dependency.
|
||||||
|
--
|
||||||
|
-- Use the `dependencies` key to specify the dependencies of a particular plugin
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
event = 'VimEnter',
|
||||||
|
branch = '0.1.x',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
{ -- If encountering errors, see telescope-fzf-native README for installation instructions
|
||||||
|
'nvim-telescope/telescope-fzf-native.nvim',
|
||||||
|
|
||||||
|
-- `build` is used to run some command when the plugin is installed/updated.
|
||||||
|
-- This is only run then, not every time Neovim starts up.
|
||||||
|
build = 'make',
|
||||||
|
|
||||||
|
-- `cond` is a condition used to determine whether this plugin should be
|
||||||
|
-- installed and loaded.
|
||||||
|
cond = function()
|
||||||
|
return vim.fn.executable 'make' == 1
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{ 'nvim-telescope/telescope-ui-select.nvim' },
|
||||||
|
|
||||||
|
-- Useful for getting pretty icons, but requires a Nerd Font.
|
||||||
|
{ 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
-- Telescope is a fuzzy finder that comes with a lot of different things that
|
||||||
|
-- it can fuzzy find! It's more than just a "file finder", it can search
|
||||||
|
-- many different aspects of Neovim, your workspace, LSP, and more!
|
||||||
|
--
|
||||||
|
-- The easiest way to use Telescope, is to start by doing something like:
|
||||||
|
-- :Telescope help_tags
|
||||||
|
--
|
||||||
|
-- After running this command, a window will open up and you're able to
|
||||||
|
-- type in the prompt window. You'll see a list of `help_tags` options and
|
||||||
|
-- a corresponding preview of the help.
|
||||||
|
--
|
||||||
|
-- Two important keymaps to use while in Telescope are:
|
||||||
|
-- - Insert mode: <c-/>
|
||||||
|
-- - Normal mode: ?
|
||||||
|
--
|
||||||
|
-- This opens a window that shows you all of the keymaps for the current
|
||||||
|
-- Telescope picker. This is really useful to discover what Telescope can
|
||||||
|
-- do as well as how to actually do it!
|
||||||
|
|
||||||
|
-- [[ Configure Telescope ]]
|
||||||
|
-- See `:help telescope` and `:help telescope.setup()`
|
||||||
|
require('telescope').setup {
|
||||||
|
-- You can put your default mappings / updates / etc. in here
|
||||||
|
-- All the info you're looking for is in `:help telescope.setup()`
|
||||||
|
--
|
||||||
|
-- defaults = {
|
||||||
|
-- mappings = {
|
||||||
|
-- i = { ['<c-enter>'] = 'to_fuzzy_refine' },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
pickers = {
|
||||||
|
colorscheme = {
|
||||||
|
enable_preview = true, -- Themes preview
|
||||||
|
},
|
||||||
|
},
|
||||||
|
extensions = {
|
||||||
|
['ui-select'] = {
|
||||||
|
require('telescope.themes').get_dropdown(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Enable Telescope extensions if they are installed
|
||||||
|
pcall(require('telescope').load_extension, 'fzf')
|
||||||
|
pcall(require('telescope').load_extension, 'ui-select')
|
||||||
|
|
||||||
|
-- See `:help telescope.builtin`
|
||||||
|
local builtin = require 'telescope.builtin'
|
||||||
|
vim.keymap.set('n', '<leader>sh', builtin.help_tags, { desc = '[S]earch [H]elp' })
|
||||||
|
vim.keymap.set('n', '<leader>sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' })
|
||||||
|
vim.keymap.set('n', '<leader>sf', builtin.find_files, { desc = '[S]earch [F]iles' })
|
||||||
|
vim.keymap.set('n', '<leader>ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' })
|
||||||
|
vim.keymap.set('n', '<leader>sw', builtin.grep_string, { desc = '[S]earch current [W]ord' })
|
||||||
|
vim.keymap.set('n', '<leader>sg', builtin.live_grep, { desc = '[S]earch by [G]rep' })
|
||||||
|
vim.keymap.set('n', '<leader>sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' })
|
||||||
|
vim.keymap.set('n', '<leader>sr', builtin.resume, { desc = '[S]earch [R]esume' })
|
||||||
|
vim.keymap.set('n', '<leader>s.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' })
|
||||||
|
vim.keymap.set('n', '<leader><leader>', builtin.buffers, { desc = '[ ] Find existing buffers' })
|
||||||
|
|
||||||
|
-- Slightly advanced example of overriding default behavior and theme
|
||||||
|
vim.keymap.set('n', '<leader>/', function()
|
||||||
|
-- You can pass additional configuration to Telescope to change the theme, layout, etc.
|
||||||
|
builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown {
|
||||||
|
winblend = 10,
|
||||||
|
previewer = false,
|
||||||
|
})
|
||||||
|
end, { desc = '[/] Fuzzily search in current buffer' })
|
||||||
|
|
||||||
|
-- It's also possible to pass additional configuration options.
|
||||||
|
-- See `:help telescope.builtin.live_grep()` for information about particular keys
|
||||||
|
vim.keymap.set('n', '<leader>s/', function()
|
||||||
|
builtin.live_grep {
|
||||||
|
grep_open_files = true,
|
||||||
|
prompt_title = 'Live Grep in Open Files',
|
||||||
|
}
|
||||||
|
end, { desc = '[S]earch [/] in Open Files' })
|
||||||
|
|
||||||
|
-- Shortcut for searching your Neovim configuration files
|
||||||
|
vim.keymap.set('n', '<leader>sn', function()
|
||||||
|
builtin.find_files { cwd = vim.fn.stdpath 'config' }
|
||||||
|
end, { desc = '[S]earch [N]eovim files' })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
150
nvim/lua/kickstart/plugins/themes.lua
Normal file
150
nvim/lua/kickstart/plugins/themes.lua
Normal file
|
|
@ -0,0 +1,150 @@
|
||||||
|
-- You can easily change to a different colorscheme.
|
||||||
|
-- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`.
|
||||||
|
|
||||||
|
-- Cмена тем тут сделана уёбищно
|
||||||
|
-- Чтоб сменить стандартную тему, надо раскомментировать vim.cmd.colorscheme пад именем темы
|
||||||
|
-- и закомментировать это же у прошлой темы
|
||||||
|
|
||||||
|
-- В lazy.nvim параметр priority определяет порядок загрузки плагинов.
|
||||||
|
-- Чем выше значение priority, тем раньше загружается плагин.
|
||||||
|
-- Это особенно важно для тем, поскольку они часто требуют загрузки до других плагинов,
|
||||||
|
-- чтобы корректно применить стили.
|
||||||
|
|
||||||
|
-- https://dotfyle.com/neovim/colorscheme/top
|
||||||
|
|
||||||
|
-- Убедитесь, что Sonokai установлен через lazy.nvim или другой менеджер
|
||||||
|
local variants = { 'default', 'atlantis', 'andromeda', 'shusia', 'maia', 'espresso' }
|
||||||
|
|
||||||
|
-- Создаем псевдонимы для каждой темы
|
||||||
|
for _, variant in ipairs(variants) do
|
||||||
|
local alias = "sonokai-" .. variant
|
||||||
|
vim.api.nvim_create_user_command("Colorscheme" .. variant, function()
|
||||||
|
vim.g.sonokai_style = variant
|
||||||
|
vim.cmd("colorscheme sonokai")
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- Регистрируем в Neovim как отдельный colorscheme
|
||||||
|
vim.api.nvim_set_hl(0, alias, {})
|
||||||
|
vim.cmd(string.format("autocmd ColorSchemePre %s let g:sonokai_style = '%s' | colorscheme sonokai", alias, variant))
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/tokyonight.nvim',
|
||||||
|
priority = 1000,
|
||||||
|
init = function()
|
||||||
|
-- 'tokyonight-storm', 'tokyonight-moon', 'tokyonight-day', 'tokyonight-night'
|
||||||
|
-- vim.cmd.colorscheme 'tokyonight-night'
|
||||||
|
vim.cmd.hi 'Comment gui=none' -- Убрать курсив у коммента в коде
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'rose-pine/neovim',
|
||||||
|
name = 'rose-pine',
|
||||||
|
priority = 1000,
|
||||||
|
init = function()
|
||||||
|
-- 'rose-pine-moon', 'rose-pine-main', 'rose-pine-dawn'
|
||||||
|
-- vim.cmd.colorscheme 'rose-pine-main'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'loctvl842/monokai-pro.nvim',
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
-- 'monokai-pro', 'monokai-pro-classic', 'monokai-pro-default', 'monokai-pro-machine',
|
||||||
|
-- 'monokai-pro-octagon', 'monokai-pro-spectrum', 'monokai-pro-ristretto'
|
||||||
|
-- vim.cmd.colorscheme 'monokai-pro'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'catppuccin/nvim',
|
||||||
|
name = 'catppuccin',
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
-- 'catppuccin', 'catppuccin-latte', 'catppuccin-frappe',
|
||||||
|
-- 'catppuccin-macchiato', 'catppuccin-mocha'
|
||||||
|
-- vim.cmd.colorscheme 'catppuccin'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'rebelot/kanagawa.nvim',
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
-- 'kanagawa-wave', 'kanagawa-dragon', 'kanagawa-lotus',
|
||||||
|
-- vim.cmd.colorscheme 'kanagawa-dragon'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"EdenEast/nightfox.nvim",
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
-- 'nightfox', 'dayfox', 'dawnfox', 'duskfox'
|
||||||
|
-- 'nordfox', 'terafox', 'carbonfox'
|
||||||
|
-- vim.cmd.colorscheme 'carbonfox'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'AlexvZyl/nordic.nvim',
|
||||||
|
priority = 1000,
|
||||||
|
config = function()
|
||||||
|
-- vim.cmd.colorscheme 'nordic'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
|
||||||
|
----------------------------------------------------------
|
||||||
|
-- Гандоны не дают выбрать тему нормально --
|
||||||
|
-- Приходится конфиг переписывать ради выбора расцветок --
|
||||||
|
----------------------------------------------------------
|
||||||
|
{
|
||||||
|
'sainnhe/gruvbox-material',
|
||||||
|
priority = 1000,
|
||||||
|
init = function()
|
||||||
|
-- 'hard', 'medium', 'soft'
|
||||||
|
vim.g.gruvbox_material_background = 'medium'
|
||||||
|
-- 'material', 'mix', 'original'
|
||||||
|
vim.g.gruvbox_material_foreground = 'mix'
|
||||||
|
-- 'grey', 'colored', 'highlighted'
|
||||||
|
vim.g.gruvbox_material_diagnostic_virtual_text = 'colored'
|
||||||
|
vim.g.gruvbox_material_better_performance = 1
|
||||||
|
vim.g.gruvbox_material_diagnostic_line_highlight = 1
|
||||||
|
vim.g.gruvbox_material_diagnostic_text_highlight = 1
|
||||||
|
-- vim.g.gruvbox_material_enable_italic = true
|
||||||
|
vim.cmd.colorscheme 'gruvbox-material'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'sainnhe/everforest',
|
||||||
|
priority = 1000,
|
||||||
|
init = function()
|
||||||
|
-- 'hard', 'medium', 'soft'
|
||||||
|
vim.g.everforest_background = 'hard'
|
||||||
|
vim.g.everforest_better_performance = 1
|
||||||
|
-- vim.g.everforest_enable_italic = true
|
||||||
|
-- vim.cmd.colorscheme 'everforest'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'sainnhe/sonokai',
|
||||||
|
priority = 1000,
|
||||||
|
init = function()
|
||||||
|
-- Очень разные темы
|
||||||
|
-- 'default', 'atlantis', 'andromeda', 'shusia', 'maia', 'espresso'
|
||||||
|
vim.g.sonokai_style = 'shusia'
|
||||||
|
vim.g.sonokai_better_performance = 1
|
||||||
|
-- vim.g.sonokai_enable_italic = true
|
||||||
|
-- vim.cmd.colorscheme 'sonokai'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'sainnhe/edge',
|
||||||
|
priority = 1000,
|
||||||
|
init = function()
|
||||||
|
-- 'default', 'aura', 'neon'
|
||||||
|
vim.g.edge_style = 'default'
|
||||||
|
vim.g.edge_better_performance = 1
|
||||||
|
-- vim.g.edge_enable_italic = true
|
||||||
|
-- vim.cmd.colorscheme 'edge'
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
11
nvim/lua/kickstart/plugins/todo-comments.lua
Normal file
11
nvim/lua/kickstart/plugins/todo-comments.lua
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
-- Highlight todo, notes, etc in comments
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/todo-comments.nvim',
|
||||||
|
event = 'VimEnter',
|
||||||
|
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||||
|
opts = { signs = false },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
57
nvim/lua/kickstart/plugins/treesitter.lua
Normal file
57
nvim/lua/kickstart/plugins/treesitter.lua
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
-- Highlight, edit, and navigate code
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
build = ':TSUpdate',
|
||||||
|
main = 'nvim-treesitter.configs', -- Sets main module to use for opts
|
||||||
|
-- [[ Configure Treesitter ]] See `:help nvim-treesitter`
|
||||||
|
opts = {
|
||||||
|
ensure_installed = {
|
||||||
|
'bash',
|
||||||
|
'c',
|
||||||
|
'cpp',
|
||||||
|
'diff',
|
||||||
|
'html',
|
||||||
|
'lua',
|
||||||
|
'luadoc',
|
||||||
|
'markdown',
|
||||||
|
'markdown_inline',
|
||||||
|
'query',
|
||||||
|
'vim',
|
||||||
|
'vimdoc',
|
||||||
|
'css',
|
||||||
|
'javascript',
|
||||||
|
'typescript',
|
||||||
|
'json',
|
||||||
|
'csv',
|
||||||
|
'go',
|
||||||
|
'nix',
|
||||||
|
'python',
|
||||||
|
'rust',
|
||||||
|
'sql',
|
||||||
|
'templ',
|
||||||
|
'toml',
|
||||||
|
'yaml',
|
||||||
|
'cmake',
|
||||||
|
},
|
||||||
|
-- Autoinstall languages that are not installed
|
||||||
|
auto_install = true,
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
-- Some languages depend on vim's regex highlighting system (such as Ruby) for indent rules.
|
||||||
|
-- If you are experiencing weird indenting issues, add the language to
|
||||||
|
-- the list of additional_vim_regex_highlighting and disabled languages for indent.
|
||||||
|
additional_vim_regex_highlighting = { 'ruby' },
|
||||||
|
},
|
||||||
|
indent = { enable = true, disable = { 'ruby' } },
|
||||||
|
},
|
||||||
|
-- There are additional nvim-treesitter modules that you can use to interact
|
||||||
|
-- with nvim-treesitter. You should go explore a few and see what interests you:
|
||||||
|
--
|
||||||
|
-- - Incremental selection: Included, see `:help nvim-treesitter-incremental-selection-mod`
|
||||||
|
-- - Show your current context: https://github.com/nvim-treesitter/nvim-treesitter-context
|
||||||
|
-- - Treesitter + textobjects: https://github.com/nvim-treesitter/nvim-treesitter-textobjects
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
4
nvim/lua/kickstart/plugins/vim-sleuth.lua
Normal file
4
nvim/lua/kickstart/plugins/vim-sleuth.lua
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
-- NOTE: Plugins can be added with a link (or for a github repo: 'owner/repo' link).
|
||||||
|
return {
|
||||||
|
'tpope/vim-sleuth', -- Detect expandtab and shiftwidth automatically
|
||||||
|
}
|
||||||
72
nvim/lua/kickstart/plugins/which-key.lua
Normal file
72
nvim/lua/kickstart/plugins/which-key.lua
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
-- Useful plugin to show you pending keybinds.
|
||||||
|
|
||||||
|
-- NOTE: Plugins can also be configured to run Lua code when they are loaded.
|
||||||
|
--
|
||||||
|
-- This is often very useful to both group configuration, as well as handle
|
||||||
|
-- lazy loading plugins that don't need to be loaded immediately at startup.
|
||||||
|
--
|
||||||
|
-- For example, in the following configuration, we use:
|
||||||
|
-- event = 'VimEnter'
|
||||||
|
--
|
||||||
|
-- which loads which-key before all the UI elements are loaded. Events can be
|
||||||
|
-- normal autocommands events (`:help autocmd-events`).
|
||||||
|
--
|
||||||
|
-- Then, because we use the `config` key, the configuration only runs
|
||||||
|
-- after the plugin has been loaded:
|
||||||
|
-- config = function() ... end
|
||||||
|
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/which-key.nvim',
|
||||||
|
event = 'VimEnter', -- Sets the loading event to 'VimEnter'
|
||||||
|
opts = {
|
||||||
|
icons = {
|
||||||
|
-- set icon mappings to true if you have a Nerd Font
|
||||||
|
mappings = vim.g.have_nerd_font,
|
||||||
|
-- If you are using a Nerd Font: set icons.keys to an empty table which will use the
|
||||||
|
-- default which-key.nvim defined Nerd Font icons, otherwise define a string table
|
||||||
|
keys = vim.g.have_nerd_font and {} or {
|
||||||
|
Up = '<Up> ',
|
||||||
|
Down = '<Down> ',
|
||||||
|
Left = '<Left> ',
|
||||||
|
Right = '<Right> ',
|
||||||
|
C = '<C-…> ',
|
||||||
|
M = '<M-…> ',
|
||||||
|
D = '<D-…> ',
|
||||||
|
S = '<S-…> ',
|
||||||
|
CR = '<CR> ',
|
||||||
|
Esc = '<Esc> ',
|
||||||
|
ScrollWheelDown = '<ScrollWheelDown> ',
|
||||||
|
ScrollWheelUp = '<ScrollWheelUp> ',
|
||||||
|
NL = '<NL> ',
|
||||||
|
BS = '<BS> ',
|
||||||
|
Space = '<Space> ',
|
||||||
|
Tab = '<Tab> ',
|
||||||
|
F1 = '<F1>',
|
||||||
|
F2 = '<F2>',
|
||||||
|
F3 = '<F3>',
|
||||||
|
F4 = '<F4>',
|
||||||
|
F5 = '<F5>',
|
||||||
|
F6 = '<F6>',
|
||||||
|
F7 = '<F7>',
|
||||||
|
F8 = '<F8>',
|
||||||
|
F9 = '<F9>',
|
||||||
|
F10 = '<F10>',
|
||||||
|
F11 = '<F11>',
|
||||||
|
F12 = '<F12>',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Document existing key chains
|
||||||
|
spec = {
|
||||||
|
{ '<leader>c', group = '[C]ode', mode = { 'n', 'x' } },
|
||||||
|
{ '<leader>d', group = '[D]ocument' },
|
||||||
|
{ '<leader>r', group = '[R]ename' },
|
||||||
|
{ '<leader>s', group = '[S]earch' },
|
||||||
|
{ '<leader>w', group = '[W]orkspace' },
|
||||||
|
{ '<leader>t', group = '[T]oggle' },
|
||||||
|
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
121
nvim/lua/kickstart/settings.lua
Normal file
121
nvim/lua/kickstart/settings.lua
Normal file
|
|
@ -0,0 +1,121 @@
|
||||||
|
-- Set <space> as the leader key
|
||||||
|
-- See `:help mapleader`
|
||||||
|
-- NOTE: Must happen before plugins are loaded (otherwise wrong leader will be used)
|
||||||
|
vim.g.mapleader = ' '
|
||||||
|
vim.g.maplocalleader = ' '
|
||||||
|
|
||||||
|
-- Set to true if you have a Nerd Font installed and selected in the terminal
|
||||||
|
vim.g.have_nerd_font = true
|
||||||
|
|
||||||
|
-- [[ Setting options ]]
|
||||||
|
-- See `:help vim.opt`
|
||||||
|
-- NOTE: You can change these options as you wish!
|
||||||
|
-- For more options, you can see `:help option-list`
|
||||||
|
|
||||||
|
-- Make line numbers default
|
||||||
|
vim.opt.number = true
|
||||||
|
-- You can also add relative line numbers, to help with jumping.
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
|
||||||
|
-- Табуляция в 4 символа
|
||||||
|
vim.opt.tabstop = 4
|
||||||
|
|
||||||
|
-- Enable mouse mode, can be useful for resizing splits for example!
|
||||||
|
vim.opt.mouse = 'a'
|
||||||
|
|
||||||
|
-- Don't show the mode, since it's already in the status line
|
||||||
|
vim.opt.showmode = false
|
||||||
|
|
||||||
|
-- Sync clipboard between OS and Neovim.
|
||||||
|
-- Schedule the setting after `UiEnter` because it can increase startup-time.
|
||||||
|
-- Remove this option if you want your OS clipboard to remain independent.
|
||||||
|
-- See `:help 'clipboard'`
|
||||||
|
vim.schedule(function()
|
||||||
|
vim.opt.clipboard = 'unnamedplus'
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- Enable break indent
|
||||||
|
vim.opt.breakindent = true
|
||||||
|
|
||||||
|
-- Save undo history
|
||||||
|
vim.opt.undofile = true
|
||||||
|
|
||||||
|
-- Case-insensitive searching UNLESS \C or one or more capital letters in the search term
|
||||||
|
vim.opt.ignorecase = true
|
||||||
|
vim.opt.smartcase = true
|
||||||
|
|
||||||
|
-- Keep signcolumn on by default
|
||||||
|
vim.opt.signcolumn = 'yes'
|
||||||
|
|
||||||
|
-- Decrease update time
|
||||||
|
vim.opt.updatetime = 250
|
||||||
|
|
||||||
|
-- Decrease mapped sequence wait time
|
||||||
|
-- Displays which-key popup sooner
|
||||||
|
vim.opt.timeoutlen = 300
|
||||||
|
|
||||||
|
-- Configure how new splits should be opened
|
||||||
|
vim.opt.splitright = true
|
||||||
|
vim.opt.splitbelow = true
|
||||||
|
|
||||||
|
-- Sets how neovim will display certain whitespace characters in the editor.
|
||||||
|
-- See `:help 'list'`
|
||||||
|
-- and `:help 'listchars'`
|
||||||
|
vim.opt.list = true
|
||||||
|
vim.opt.listchars = { tab = '» ', trail = '·', nbsp = '␣' }
|
||||||
|
|
||||||
|
-- Preview substitutions live, as you type!
|
||||||
|
vim.opt.inccommand = 'split'
|
||||||
|
|
||||||
|
-- Show which line your cursor is on
|
||||||
|
vim.opt.cursorline = true
|
||||||
|
|
||||||
|
-- Minimal number of screen lines to keep above and below the cursor.
|
||||||
|
vim.opt.scrolloff = 10
|
||||||
|
|
||||||
|
-- [[ Basic Keymaps ]]
|
||||||
|
-- See `:help vim.keymap.set()`
|
||||||
|
|
||||||
|
-- Clear highlights on search when pressing <Esc> in normal mode
|
||||||
|
-- See `:help hlsearch`
|
||||||
|
vim.keymap.set('n', '<Esc>', '<cmd>nohlsearch<CR>')
|
||||||
|
|
||||||
|
-- Diagnostic keymaps
|
||||||
|
vim.keymap.set('n', '<leader>q', vim.diagnostic.setloclist, { desc = 'Open diagnostic [Q]uickfix list' })
|
||||||
|
|
||||||
|
-- Exit terminal mode in the builtin terminal with a shortcut that is a bit easier
|
||||||
|
-- for people to discover. Otherwise, you normally need to press <C-\><C-n>, which
|
||||||
|
-- is not what someone will guess without a bit more experience.
|
||||||
|
--
|
||||||
|
-- NOTE: This won't work in all terminal emulators/tmux/etc. Try your own mapping
|
||||||
|
-- or just use <C-\><C-n> to exit terminal mode
|
||||||
|
vim.keymap.set('t', '<Esc><Esc>', '<C-\\><C-n>', { desc = 'Exit terminal mode' })
|
||||||
|
|
||||||
|
-- TIP: Disable arrow keys in normal mode
|
||||||
|
-- vim.keymap.set('n', '<left>', '<cmd>echo "Use h to move!!"<CR>')
|
||||||
|
-- vim.keymap.set('n', '<right>', '<cmd>echo "Use l to move!!"<CR>')
|
||||||
|
-- vim.keymap.set('n', '<up>', '<cmd>echo "Use k to move!!"<CR>')
|
||||||
|
-- vim.keymap.set('n', '<down>', '<cmd>echo "Use j to move!!"<CR>')
|
||||||
|
|
||||||
|
-- Keybinds to make split navigation easier.
|
||||||
|
-- Use CTRL+<hjkl> to switch between windows
|
||||||
|
--
|
||||||
|
-- See `:help wincmd` for a list of all window commands
|
||||||
|
vim.keymap.set('n', '<C-h>', '<C-w><C-h>', { desc = 'Move focus to the left window' })
|
||||||
|
vim.keymap.set('n', '<C-l>', '<C-w><C-l>', { desc = 'Move focus to the right window' })
|
||||||
|
vim.keymap.set('n', '<C-j>', '<C-w><C-j>', { desc = 'Move focus to the lower window' })
|
||||||
|
vim.keymap.set('n', '<C-k>', '<C-w><C-k>', { desc = 'Move focus to the upper window' })
|
||||||
|
|
||||||
|
-- [[ Basic Autocommands ]]
|
||||||
|
-- See `:help lua-guide-autocommands`
|
||||||
|
|
||||||
|
-- Highlight when yanking (copying) text
|
||||||
|
-- Try it with `yap` in normal mode
|
||||||
|
-- See `:help vim.highlight.on_yank()`
|
||||||
|
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||||
|
desc = 'Highlight when yanking (copying) text',
|
||||||
|
group = vim.api.nvim_create_augroup('kickstart-highlight-yank', { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
vim.highlight.on_yank()
|
||||||
|
end,
|
||||||
|
})
|
||||||
66
nvim/shit.md
Normal file
66
nvim/shit.md
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
Тут будут куски текста из разных источников. Я не хочу засирать ими свои заметки, кину сюда
|
||||||
|
|
||||||
|
```sql
|
||||||
|
select * from pidor
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## На будущее
|
||||||
|
|
||||||
|
Fix C/C++ - https://www.reddit.com/r/NixOS/comments/1d7zvgu/nvim_cant_find_standard_library_headers/
|
||||||
|
Запишу некоторые комменты из этого поста на реддите
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
Haven't seen it mentioned, so here is an alternative option.
|
||||||
|
|
||||||
|
I use nix-ld which basically makes the listed libraries available in their expected locations.
|
||||||
|
|
||||||
|
The simple config below fixed Mason for me. it also works with Doom Emacs so it's a more general solution. You can add more packages to the list and any libs will be made available for all external apps.
|
||||||
|
|
||||||
|
```nix
|
||||||
|
nix-ld = {
|
||||||
|
enable = true;
|
||||||
|
libraries = with pkgs; [
|
||||||
|
stdenv.cc.cc
|
||||||
|
];
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Since then, I have also been able to get X-Plane running natively by adding missing libraries to the list. It can be a bit tedious figuring out which libraries are missing and what packages need to be added, but it only needs to be done once. To figure out what libraries an app needs and which packages they belong to, do the following:
|
||||||
|
|
||||||
|
run nix-index (takes about 5 minutes) which you only need to do the first time to create a file database of nixpkgs.
|
||||||
|
|
||||||
|
Find the libraries an executable needs and whether they are found or missing. ldd ./your_executable_file
|
||||||
|
|
||||||
|
Use nix-locate to find packages that contain that library. For example: nix-locate -w ./libX11.so.6 --top-level It may show several packages.. pick the one that looks most appropriate. In this case it was xorg.libX11
|
||||||
|
|
||||||
|
Add that package to the nix-ld libraries list.
|
||||||
|
|
||||||
|
Once all libraries are added, rebuild your system.
|
||||||
|
|
||||||
|
You may need to reboot or log out and back in again before ldd will find the libraries.
|
||||||
|
|
||||||
|
The nice thing about nix-ld, is once you have a nice collection of common libraries setup, many apps will just work like on other distros.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Hello, sorry for the late response. I've been using that nix-ld setup for Rust, Lua, and Bash, LSPs for a while. Funnily enough it was thanks to one of your previous comments that I first tried it.
|
||||||
|
|
||||||
|
For any of the mentioned languages I didn't have to put anything into nix-ld, even the clangd LSPs in Mason installed correctly, literally the only issue is that NVim doesn't see the standard library headers. I've tried putting every package in there: clang, clang-tools, clangStdenv, libclang, and ccls.
|
||||||
|
|
||||||
|
I'm gonna be completely honest, I'm not sure I understand the instructions, especially the ldd part, I'm not sure what executable I should point to with that command.
|
||||||
|
|
||||||
|
Are there any libraries that you'd recommend I'd put in nix-ld? Like a base line?
|
||||||
|
|
||||||
|
Also as a further question. I'm not using NixOS to manage my NVim config whatsoever, meaning I just put my the nvim config into the ~/.config directory, could that be the issue, or is that ok as a practice?
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Yeah, I'm a bit of a nix-ld fanboy as it saved NixOS for me when I was feeling like giving up.
|
||||||
|
|
||||||
|
I gotta admit, I'm not a developer, so I'm not an expert on dev tools. Maybe try creating a dev shell with nix (or a flake)? You can specify exactly what libraries you need and they should be available when you instantiate the shell.
|
||||||
|
|
||||||
|
This post on github may give you some ideas: https://github.com/NixOS/nixpkgs/issues/92739#issuecomment-861248463. It's a bit old, but it may be worth trying. Try running nvim inside of the dev shell.. maybe the standard libraries will be available then?
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue