[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

