134 lines
7.7 KiB
Markdown
134 lines
7.7 KiB
Markdown
[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 "`<space>sh`" to `[s]`earch the `[h]`elp documentation,
|
||
|
||
If you experience any errors while trying to install kickstart, run `:checkhealth` for more info
|
||
|