[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 ln -s ~/nixos-private-dots/nvim ~/.config/nvim ``` ### Зависимости Это мне пришлось скачать для работы конфига на NixOS с нужными мне инструментами: - `neovim` - `git` - `unzip` - `ripgrep` - `fd` - `xclip` на X11 или `wl-clipboard` на Wayland - `tree-sitter` - Любой 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`. ## Бинды Тут будет список биндов, которых нет в стандартном 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 "`sh`" to `[s]`earch the `[h]`elp documentation, If you experience any errors while trying to install kickstart, run `:checkhealth` for more info