nixos_dots/nvim/README.md

134 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[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