From 15ca9992d1d8c857b957e78921b2276bd62d6f48 Mon Sep 17 00:00:00 2001 From: Buliway Date: Tue, 25 Mar 2025 15:18:51 +0300 Subject: [PATCH] Mini config for server --- .github/ISSUE_TEMPLATE/bug_report.md | 35 ----- .github/pull_request_template.md | 8 - .github/workflows/stylua.yml | 21 --- doc/kickstart.txt | 24 --- ftplugin/nix.lua | 4 - ftplugin/proto.lua | 4 - init.lua | 99 ------------ lua/custom/plugins/colorizer.lua | 63 -------- lua/custom/plugins/git.lua | 5 - lua/custom/plugins/golang.lua | 26 ---- lua/custom/plugins/rust.lua | 9 -- lua/custom/sessions.lua | 46 +----- lua/custom/terminal.lua | 18 +-- lua/kickstart/health.lua | 7 - lua/kickstart/plugins/autoformat.lua | 46 +----- lua/kickstart/plugins/autopairs.lua | 5 - lua/kickstart/plugins/completion.lua | 57 ------- lua/kickstart/plugins/debug.lua | 148 ------------------ lua/kickstart/plugins/file-tree.lua | 5 +- lua/kickstart/plugins/gitsigns.lua | 23 --- lua/kickstart/plugins/indent_line.lua | 4 - lua/kickstart/plugins/lint.lua | 45 +----- lua/kickstart/plugins/lsp.lua | 213 +------------------------- lua/kickstart/plugins/mini.lua | 39 ----- lua/kickstart/plugins/telescope.lua | 63 +------- lua/kickstart/plugins/themes.lua | 151 ------------------ lua/kickstart/plugins/treesitter.lua | 48 ++---- lua/kickstart/plugins/which-key.lua | 24 +-- lua/kickstart/settings.lua | 115 -------------- 29 files changed, 25 insertions(+), 1330 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/pull_request_template.md delete mode 100644 .github/workflows/stylua.yml delete mode 100644 doc/kickstart.txt delete mode 100644 ftplugin/nix.lua delete mode 100644 ftplugin/proto.lua delete mode 100644 lua/custom/plugins/colorizer.lua delete mode 100644 lua/custom/plugins/git.lua delete mode 100644 lua/custom/plugins/golang.lua delete mode 100644 lua/custom/plugins/rust.lua delete mode 100644 lua/kickstart/plugins/debug.lua diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 86598b8..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - - - -## Before Reporting an Issue -- I have read the kickstart.nvim README.md. -- I have read the appropriate plugin's documentation. -- I have searched that this issue has not been reported before. - -- [ ] **By checking this, I confirm that the above steps are completed. I understand leaving this unchecked will result in this report being closed immediately.** - -## Describe the bug - - -## To Reproduce - -1. ... - -## Desktop - -- OS: -- Terminal: - -## Neovim Version - - -``` -``` diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md deleted file mode 100644 index f401c9f..0000000 --- a/.github/pull_request_template.md +++ /dev/null @@ -1,8 +0,0 @@ -*************************************************************************** -**NOTE** -Please verify that the `base repository` above has the intended destination! -Github by default opens Pull Requests against the parent of a forked repository. -If this is your personal fork and you didn't intend to open a PR for contribution -to the original project then adjust the `base repository` accordingly. -************************************************************************** - diff --git a/.github/workflows/stylua.yml b/.github/workflows/stylua.yml deleted file mode 100644 index 75db6c3..0000000 --- a/.github/workflows/stylua.yml +++ /dev/null @@ -1,21 +0,0 @@ -# Check Lua Formatting -name: Check Lua Formatting -on: pull_request_target - -jobs: - stylua-check: - if: github.repository == 'nvim-lua/kickstart.nvim' - name: Stylua Check - runs-on: ubuntu-latest - steps: - - name: Checkout Code - uses: actions/checkout@v2 - with: - ref: ${{ github.event.pull_request.head.sha }} - - name: Stylua Check - uses: JohnnyMorganz/stylua-action@v3 - with: - token: ${{ secrets.GITHUB_TOKEN }} - version: latest - args: --check . - diff --git a/doc/kickstart.txt b/doc/kickstart.txt deleted file mode 100644 index cb87ac3..0000000 --- a/doc/kickstart.txt +++ /dev/null @@ -1,24 +0,0 @@ -================================================================================ -INTRODUCTION *kickstart.nvim* - -Kickstart.nvim is a project to help you get started on your neovim journey. - - *kickstart-is-not* -It is not: -- Complete framework for every plugin under the sun -- Place to add every plugin that could ever be useful - - *kickstart-is* -It is: -- Somewhere that has a good start for the most common "IDE" type features: - - autocompletion - - goto-definition - - find references - - fuzzy finding - - and hinting at what more can be done :) -- A place to _kickstart_ your journey. - - You should fork this project and use/modify it so that it matches your - style and preferences. If you don't want to do that, there are probably - other projects that would fit much better for you (and that's great!)! - - vim:tw=78:ts=8:ft=help:norl: diff --git a/ftplugin/nix.lua b/ftplugin/nix.lua deleted file mode 100644 index 55de27d..0000000 --- a/ftplugin/nix.lua +++ /dev/null @@ -1,4 +0,0 @@ -vim.bo.expandtab = true -vim.bo.tabstop = 2 -vim.bo.shiftwidth = 2 -vim.bo.softtabstop = 2 diff --git a/ftplugin/proto.lua b/ftplugin/proto.lua deleted file mode 100644 index 55de27d..0000000 --- a/ftplugin/proto.lua +++ /dev/null @@ -1,4 +0,0 @@ -vim.bo.expandtab = true -vim.bo.tabstop = 2 -vim.bo.shiftwidth = 2 -vim.bo.softtabstop = 2 diff --git a/init.lua b/init.lua index cee2f2c..07df716 100644 --- a/init.lua +++ b/init.lua @@ -1,11 +1,6 @@ --- [[ Базовые настройки. Не плагины ]] require 'kickstart.settings' -require 'custom.terminal' require 'custom.sessions' --- [[ Install `lazy.nvim` plugin manager ]] --- See `:help lazy.nvim.txt` or https://github.com/folke/lazy.nvim for more info --- git clone https://github.com/folke/lazy.nvim.git ~/.local/share/nvim/lazy/lazy.nvim local lazypath = vim.fn.stdpath 'data' .. '/lazy/lazy.nvim' if not (vim.uv or vim.loop).fs_stat(lazypath) then local lazyrepo = 'https://github.com/folke/lazy.nvim.git' @@ -16,112 +11,21 @@ if not (vim.uv or vim.loop).fs_stat(lazypath) then end ---@diagnostic disable-next-line: undefined-field vim.opt.rtp:prepend(lazypath) --- [[ Configure and install plugins ]] --- --- To check the current status of your plugins, run --- :Lazy --- --- You can press `?` in this menu for help. Use `:q` to close the window --- --- To update plugins you can run --- :Lazy update --- --- NOTE: Here is where you install your plugins. require('lazy').setup({ - - --------------------------------------------- - -- Установлены из коробки в kickstart.nvim -- - --------------------------------------------- - - -- Git integration for buffers require 'kickstart.plugins.gitsigns', - - -- Useful plugin to show you pending keybinds. require 'kickstart.plugins.which-key', - - -- Fuzzy Finder (files, lsp, etc) require 'kickstart.plugins.telescope', - - -- LSP Plugins require 'kickstart.plugins.lsp', - - -- Autoformat require 'kickstart.plugins.autoformat', - - -- Autocompletion require 'kickstart.plugins.completion', - - -- Themes require 'kickstart.plugins.themes', - - -- Highlight todo, notes, etc in comments require 'kickstart.plugins.todo-comments', - - -- Collection of various small independent plugins/modules require 'kickstart.plugins.mini', - - -- Highlight, edit, and navigate code require 'kickstart.plugins.treesitter', - - -- Debug your code via Debug Adapter Protocol - require 'kickstart.plugins.debug', - - -- Add indentation guides even on blank lines require 'kickstart.plugins.indent_line', - - -- Linting require 'kickstart.plugins.lint', - - -- Autopairs require 'kickstart.plugins.autopairs', - - -- Browse the file system require 'kickstart.plugins.file-tree', - - ------------------------------------- - -- Установил руками под свои нужды -- - ------------------------------------- - - -- Supercharge your Rust experience in Neovim - require 'custom.plugins.rust', - - -- Feature-Rich Go Plugin for Neovim - require 'custom.plugins.golang', - - -- Plugins for git - require 'custom.plugins.git', - - -- Plugins for color highlight - require 'custom.plugins.colorizer', - - -- Autoformat markdown tables - { - 'Kicamon/markdown-table-mode.nvim', - config = function() - require('markdown-table-mode').setup { - filetype = { - '*.md', - }, - options = { - insert = true, -- when typing "|" - insert_leave = true, -- when leaving insert - pad_separator_line = false, -- add space in separator line - alig_style = 'default', -- default, left, center, right - }, - } - end, - }, - - -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` - -- This is the easiest way to modularize your config. - -- - -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. - -- { import = 'custom.plugins' }, - -- - -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` - -- Or use telescope! - -- In normal mode type `sh` then write `lazy.nvim-plugin` - -- you can continue same window with `sr` which resumes last telescope search }, { ui = { -- If you are using a Nerd Font: set icons to an empty table which will use the @@ -143,6 +47,3 @@ require('lazy').setup({ }, }, }) - --- The line beneath this is called `modeline`. See `:help modeline` --- vim: ts=2 sts=2 sw=2 et diff --git a/lua/custom/plugins/colorizer.lua b/lua/custom/plugins/colorizer.lua deleted file mode 100644 index 5be4349..0000000 --- a/lua/custom/plugins/colorizer.lua +++ /dev/null @@ -1,63 +0,0 @@ --- A high-performance color highlighter - -return { - { - 'catgoose/nvim-colorizer.lua', - event = 'BufReadPre', - opts = { -- set to setup table - filetypes = { '*' }, -- Filetype options. Accepts table like `user_default_options` - buftypes = {}, -- Buftype options. Accepts table like `user_default_options` - -- Boolean | List of usercommands to enable. See User commands section. - user_commands = true, -- Enable all or some usercommands - lazy_load = false, -- Lazily schedule buffer highlighting setup function - user_default_options = { - names = true, -- "Name" codes like Blue or red. Added from `vim.api.nvim_get_color_map()` - names_opts = { -- options for mutating/filtering names. - lowercase = true, -- name:lower(), highlight `blue` and `red` - camelcase = true, -- name, highlight `Blue` and `Red` - uppercase = false, -- name:upper(), highlight `BLUE` and `RED` - strip_digits = false, -- ignore names with digits, - -- highlight `blue` and `red`, but not `blue3` and `red4` - }, - -- Expects a table of color name to #RRGGBB value pairs. # is optional - -- Example: { cool = "#107dac", ["notcool"] = "ee9240" } - -- Set to false to disable, for example when setting filetype options - names_custom = false, -- Custom names to be highlighted: table|function|false - RGB = true, -- #RGB hex codes - RGBA = true, -- #RGBA hex codes - RRGGBB = true, -- #RRGGBB hex codes - RRGGBBAA = false, -- #RRGGBBAA hex codes - AARRGGBB = false, -- 0xAARRGGBB hex codes - rgb_fn = false, -- CSS rgb() and rgba() functions - hsl_fn = false, -- CSS hsl() and hsla() functions - css = false, -- Enable all CSS *features*: - -- names, RGB, RGBA, RRGGBB, RRGGBBAA, AARRGGBB, rgb_fn, hsl_fn - css_fn = false, -- Enable all CSS *functions*: rgb_fn, hsl_fn - -- Tailwind colors. boolean|'normal'|'lsp'|'both'. True sets to 'normal' - tailwind = false, -- Enable tailwind colors - tailwind_opts = { -- Options for highlighting tailwind names - update_names = false, -- When using tailwind = 'both', update tailwind names from LSP results. See tailwind section - }, - -- parsers can contain values used in `user_default_options` - sass = { enable = false, parsers = { 'css' } }, -- Enable sass colors - -- Highlighting mode. 'background'|'foreground'|'virtualtext' - mode = 'background', -- Set the display mode - -- Virtualtext character to use - virtualtext = '■', - -- Display virtualtext inline with color. boolean|'before'|'after'. True sets to 'after' - virtualtext_inline = false, - -- Virtualtext highlight mode: 'background'|'foreground' - virtualtext_mode = 'foreground', - -- update color values even if buffer is not focused - -- example use: cmp_menu, cmp_docs - always_update = false, - -- hooks to invert control of colorizer - hooks = { - -- called before line parsing. Accepts boolean or function that returns boolean - -- see hooks section below - disable_line_highlight = false, - }, - }, - }, - }, -} diff --git a/lua/custom/plugins/git.lua b/lua/custom/plugins/git.lua deleted file mode 100644 index 238bd5e..0000000 --- a/lua/custom/plugins/git.lua +++ /dev/null @@ -1,5 +0,0 @@ -return { - { - 'sindrets/diffview.nvim', - }, -} diff --git a/lua/custom/plugins/golang.lua b/lua/custom/plugins/golang.lua deleted file mode 100644 index 686e44c..0000000 --- a/lua/custom/plugins/golang.lua +++ /dev/null @@ -1,26 +0,0 @@ --- 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() - vim.keymap.set({ 'n' }, 'gta', ':GoAddTag', { desc = '[G]o [T]ag [A]dd' }) - vim.keymap.set({ 'n' }, 'gtr', ':GoRmTag', { desc = '[G]o [T]ag [R]emove' }) - vim.keymap.set({ 'n' }, 'gs', ':GoFillStruct', { desc = '[G]o fill [S]truct' }) - vim.keymap.set({ 'n' }, 'gc', ':GoFillSwitch', { desc = '[G]o fill Switch [C]ase' }) - -- Go Fix Plurals - change func foo(b int, a int, r int) -> func foo(b, a, r int) - vim.keymap.set({ 'n' }, 'gp', ':GoFixPlurals', { desc = '[G]o fix [P]lurals' }) - vim.keymap.set({ 'n' }, 'ge', ':GoIfErr', { desc = '[G]o if [E]rr' }) - vim.keymap.set({ 'n' }, 'gi', ':GoImports', { desc = '[G]o [I]mports' }) - end, - event = { 'CmdlineEnter' }, - ft = { 'go', 'gomod' }, - -- build = ':lua require("go.install").update_all_sync()' -- if you need to install/update all binaries - }, -} diff --git a/lua/custom/plugins/rust.lua b/lua/custom/plugins/rust.lua deleted file mode 100644 index 610dfe1..0000000 --- a/lua/custom/plugins/rust.lua +++ /dev/null @@ -1,9 +0,0 @@ --- Supercharge your Rust experience in Neovim - -return { - { - 'mrcjkb/rustaceanvim', - version = '^5', -- Recommended - lazy = false, -- This plugin is already lazy - }, -} diff --git a/lua/custom/sessions.lua b/lua/custom/sessions.lua index 8ffde53..3248da3 100644 --- a/lua/custom/sessions.lua +++ b/lua/custom/sessions.lua @@ -1,61 +1,37 @@ --- Add auto-sessions to mini.sessions plugin --- Session names are generated dynamically based on the project directory and Git branch (if available) --- Auto-save session on exit will only work if there is an active session in the project, --- which can be set up, for example, via a custom key binding --- When starting `nvim` with no arguments, will try to save session on exit --- Whet starting `nvim .` (or another directory), will try to save session on exit --- When starting `nvim some_file.txt` (or multiple files), won't do anything - --- Generate session name per project and per git branch for mini.sessions local function get_git_branch() local branch = vim.fn.systemlist('git branch --show-current')[1] or '' return (vim.v.shell_error == 0 and branch ~= '') and branch or nil end - local function session_name() - local cwd = vim.fn.getcwd() -- current working directory + local cwd = vim.fn.getcwd() local branch = get_git_branch() local name = cwd - local sha = vim.fn.sha256(name) - if branch then sha = sha .. '-' .. branch end - return sha end - --- Auto save session per project and per git branch on exit local function should_save_session() - -- argc() returns the number of command line arguments local argc = vim.fn.argc() - - -- Case 1: nvim with no arguments if argc == 0 then return true end - - -- Case 2: nvim . (argument is a directory) if argc == 1 then - local first_arg = vim.fn.argv(0) -- Get the first argument + local first_arg = vim.fn.argv(0) return vim.fn.isdirectory(first_arg) == 1 end - return false end - local function session_exist() local session_dir = vim.fn.stdpath 'data' .. '/session/' local session_path = session_dir .. session_name() return vim.fn.filereadable(session_path) == 1 end - local function save_session() if not should_save_session() then - return -- Do not save if there were files in the arguments + return end - local name = session_name() require('mini.sessions').write(name) print('💾 Session Saved: ' .. name) @@ -65,51 +41,41 @@ vim.api.nvim_create_autocmd('VimLeavePre', { desc = 'Auto save session on exit if session exists', callback = function() if not session_exist() then - return -- Do not autosave session if there is no session in the project + return end save_session() end, }) - --- Session restore local function restore_session() if not should_save_session() then return end if not session_exist() then - return -- Do not restore session if there is no session in the project + return end - local name = session_name() require('mini.sessions').read(name) print('💾 Session Restored: ' .. name) end - vim.api.nvim_create_autocmd('User', { - pattern = 'VeryLazy', -- Lazy.nvim event + pattern = 'VeryLazy', desc = 'Auto restore session after plugin load', callback = function() - -- Adding a small delay for stability vim.defer_fn(function() restore_session() end, 50) end, nested = true, }) - vim.keymap.set('n', '', function() restore_session() end, { desc = 'Restore session' }) - --- Session delete vim.keymap.set('n', 'Sd', function() local name = session_name() require('mini.sessions').delete(name) print('💾 Session Deleted: ' .. name) end, { desc = '[S]ession [D]elete' }) - --- Session create vim.keymap.set('n', 'Sc', function() save_session() end, { desc = '[S]ession [C]reate' }) diff --git a/lua/custom/terminal.lua b/lua/custom/terminal.lua index 08be5dc..9621ba3 100644 --- a/lua/custom/terminal.lua +++ b/lua/custom/terminal.lua @@ -4,41 +4,30 @@ local state = { 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 + buf = vim.api.nvim_create_buf(false, true) 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 + style = 'minimal', 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 } @@ -49,8 +38,5 @@ local toggle_terminal = function() 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' }, 'tt', toggle_terminal, { desc = '[T]oggle [T]erminal' }) diff --git a/lua/kickstart/health.lua b/lua/kickstart/health.lua index 820127f..cf05049 100644 --- a/lua/kickstart/health.lua +++ b/lua/kickstart/health.lua @@ -1,10 +1,3 @@ ---[[ --- --- This file is not required for your own configuration, --- but helps people determine if their system is setup correctly. --- ---]] - local check_version = function() local verstr = tostring(vim.version()) if not vim.version.ge then diff --git a/lua/kickstart/plugins/autoformat.lua b/lua/kickstart/plugins/autoformat.lua index 8ce5e72..ce8d1b2 100644 --- a/lua/kickstart/plugins/autoformat.lua +++ b/lua/kickstart/plugins/autoformat.lua @@ -1,6 +1,3 @@ --- Autoformat --- Timeout для форматирования пришлось задать в 5 секунд, потому что sqlfluff очень долго форматирует - return { { 'stevearc/conform.nvim', @@ -23,9 +20,6 @@ return { 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 @@ -40,46 +34,8 @@ return { end, formatters_by_ft = { lua = { 'stylua' }, - go = { 'gofmt', 'injected' }, - sql = { 'sqlfluff' }, - -- ['*'] = { '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, - -- }, - sqlfluff = { - command = 'sqlfluff', - args = { - 'format', - -- 'fix', - -- '--dialect', - -- 'postgres', - -- '--disable-progress-bar', - '-', - }, - stdin = true, - }, }, + formatters = {}, }, }, } diff --git a/lua/kickstart/plugins/autopairs.lua b/lua/kickstart/plugins/autopairs.lua index 5feec88..3eaa44a 100644 --- a/lua/kickstart/plugins/autopairs.lua +++ b/lua/kickstart/plugins/autopairs.lua @@ -1,14 +1,9 @@ --- autopairs --- https://github.com/windwp/nvim-autopairs - return { 'windwp/nvim-autopairs', event = 'InsertEnter', - -- Optional dependency dependencies = { 'hrsh7th/nvim-cmp' }, config = function() require('nvim-autopairs').setup {} - -- If you want to automatically add `(` after selecting a function or method local cmp_autopairs = require 'nvim-autopairs.completion.cmp' local cmp = require 'cmp' cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done()) diff --git a/lua/kickstart/plugins/completion.lua b/lua/kickstart/plugins/completion.lua index ff71bda..85a1dcb 100644 --- a/lua/kickstart/plugins/completion.lua +++ b/lua/kickstart/plugins/completion.lua @@ -1,26 +1,17 @@ --- 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() @@ -30,20 +21,14 @@ return { }, }, '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', 'hrsh7th/cmp-nvim-lsp-signature-help', }, config = function() - -- See `:help cmp` local cmp = require 'cmp' local luasnip = require 'luasnip' luasnip.config.setup {} - cmp.setup { preselect = cmp.PreselectMode.None, snippet = { @@ -52,58 +37,20 @@ return { 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 { - -- (enabled by default in nvim-cmp) - -- Select the [n]ext item - -- [''] = cmp.mapping.select_next_item(), - -- Select the [p]revious item - -- [''] = cmp.mapping.select_prev_item(), - - -- Accept ([y]es) the completion. - -- This will auto-import if your LSP supports it. - -- This will expand snippets if the LSP sent a snippet. - -- [''] = cmp.mapping.confirm { select = true }, - - -- If you prefer more traditional completion keymaps, - -- you can uncomment the following lines - -- [''] = cmp.mapping.confirm { select = true }, [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.select_prev_item(), - - -- Allows Up arrow to fall back without interacting with cmp [''] = cmp.mapping(function(fallback) cmp.close() fallback() end, { 'i', 'c' }), - - -- Allows Up arrow to fall back without interacting with cmp [''] = cmp.mapping(function(fallback) cmp.close() fallback() end, { 'i', 'c' }), - - -- Scroll the documentation window [b]ack / [f]orward [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), - - -- 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. [''] = cmp.mapping.complete {}, - - -- Think of as moving to the right of your snippet expansion. - -- So if you have a snippet that's like: - -- function $name($args) - -- $body - -- end - -- - -- will move you to the right of each of the expansion locations. - -- is similar, except moving you backwards. [''] = cmp.mapping(function() if luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() @@ -114,14 +61,10 @@ return { 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' }, diff --git a/lua/kickstart/plugins/debug.lua b/lua/kickstart/plugins/debug.lua deleted file mode 100644 index d4c267b..0000000 --- a/lua/kickstart/plugins/debug.lua +++ /dev/null @@ -1,148 +0,0 @@ --- debug.lua --- --- Shows how to use the DAP plugin to debug your code. --- --- Primarily focused on configuring the debugger for Go, but can --- be extended to other languages as well. That's why it's called --- kickstart.nvim and not kitchen-sink.nvim ;) - -return { - -- NOTE: Yes, you can install new plugins here! - 'mfussenegger/nvim-dap', - -- NOTE: And you can specify dependencies as well - dependencies = { - -- Creates a beautiful debugger UI - 'rcarriga/nvim-dap-ui', - - -- Required dependency for nvim-dap-ui - 'nvim-neotest/nvim-nio', - - -- Installs the debug adapters for you - 'williamboman/mason.nvim', - 'jay-babu/mason-nvim-dap.nvim', - - -- Add your own debuggers here - 'leoluz/nvim-dap-go', - }, - keys = { - -- Basic debugging keymaps, feel free to change to your liking! - { - '', - function() - require('dap').continue() - end, - desc = 'Debug: Start/Continue', - }, - { - '', - function() - require('dap').step_into() - end, - desc = 'Debug: Step Into', - }, - { - '', - function() - require('dap').step_over() - end, - desc = 'Debug: Step Over', - }, - { - '', - function() - require('dap').step_out() - end, - desc = 'Debug: Step Out', - }, - { - 'b', - function() - require('dap').toggle_breakpoint() - end, - desc = 'Debug: Toggle Breakpoint', - }, - { - 'B', - function() - require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') - end, - desc = 'Debug: Set Breakpoint', - }, - -- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception. - { - '', - function() - require('dapui').toggle() - end, - desc = 'Debug: See last session result.', - }, - }, - config = function() - local dap = require 'dap' - local dapui = require 'dapui' - - require('mason-nvim-dap').setup { - -- Makes a best effort to setup the various debuggers with - -- reasonable debug configurations - -- automatic_installation = true, - - -- You can provide additional configuration to the handlers, - -- see mason-nvim-dap README for more information - handlers = {}, - - -- You'll need to check that you have the required things installed - -- online, please don't ask me how to install them :) - ensure_installed = { -- Скачать через mason (не надо) - -- Update this to ensure that you have the debuggers for the langs you want - -- 'delve', - }, - } - - -- Dap UI setup - -- For more information, see |:help nvim-dap-ui| - dapui.setup { - -- Set icons to characters that are more likely to work in every terminal. - -- Feel free to remove or use ones that you like more! :) - -- Don't feel like these are good choices. - icons = { expanded = '▾', collapsed = '▸', current_frame = '*' }, - controls = { - icons = { - pause = '⏸', - play = '▶', - step_into = '⏎', - step_over = '⏭', - step_out = '⏮', - step_back = 'b', - run_last = '▶▶', - terminate = '⏹', - disconnect = '⏏', - }, - }, - } - - -- Change breakpoint icons - -- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' }) - -- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' }) - -- local breakpoint_icons = vim.g.have_nerd_font - -- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' } - -- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' } - -- for type, icon in pairs(breakpoint_icons) do - -- local tp = 'Dap' .. type - -- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak' - -- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl }) - -- end - - dap.listeners.after.event_initialized['dapui_config'] = dapui.open - dap.listeners.before.event_terminated['dapui_config'] = dapui.close - dap.listeners.before.event_exited['dapui_config'] = dapui.close - - -- Install golang specific config - require('dap-go').setup { - delve = { - -- On Windows delve must be run attached or it crashes. - -- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring - detached = vim.fn.has 'win32' == 0, - }, - } - end, -} diff --git a/lua/kickstart/plugins/file-tree.lua b/lua/kickstart/plugins/file-tree.lua index 0d6e76f..9befc4f 100644 --- a/lua/kickstart/plugins/file-tree.lua +++ b/lua/kickstart/plugins/file-tree.lua @@ -1,13 +1,10 @@ --- Neo-tree is a Neovim plugin to browse the file system --- https://github.com/nvim-neo-tree/neo-tree.nvim - return { { 'nvim-neo-tree/neo-tree.nvim', version = '*', dependencies = { 'nvim-lua/plenary.nvim', - 'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended + 'nvim-tree/nvim-web-devicons', 'MunifTanjim/nui.nvim', -- { -- Optional image support in preview window: See `# Preview Mode` for more information -- '3rd/image.nvim', diff --git a/lua/kickstart/plugins/gitsigns.lua b/lua/kickstart/plugins/gitsigns.lua index 0d3c3b2..fa16f93 100644 --- a/lua/kickstart/plugins/gitsigns.lua +++ b/lua/kickstart/plugins/gitsigns.lua @@ -1,18 +1,3 @@ --- Adds git related signs to the gutter, as well as utilities for managing changes - --- 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 { { 'lewis6991/gitsigns.nvim', @@ -26,14 +11,11 @@ return { }, on_attach = function(bufnr) local gitsigns = require 'gitsigns' - local function map(mode, l, r, opts) opts = opts or {} opts.buffer = bufnr vim.keymap.set(mode, l, r, opts) end - - -- Navigation map('n', ']c', function() if vim.wo.diff then vim.cmd.normal { ']c', bang = true } @@ -41,7 +23,6 @@ return { gitsigns.nav_hunk 'next' end end, { desc = 'Jump to next git [c]hange' }) - map('n', '[c', function() if vim.wo.diff then vim.cmd.normal { '[c', bang = true } @@ -49,16 +30,12 @@ return { gitsigns.nav_hunk 'prev' end end, { desc = 'Jump to previous git [c]hange' }) - - -- Actions - -- visual mode map('v', 'hs', function() gitsigns.stage_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'stage git hunk' }) map('v', 'hr', function() gitsigns.reset_hunk { vim.fn.line '.', vim.fn.line 'v' } end, { desc = 'reset git hunk' }) - -- normal mode map('n', 'hs', gitsigns.stage_hunk, { desc = 'git [s]tage hunk' }) map('n', 'hr', gitsigns.reset_hunk, { desc = 'git [r]eset hunk' }) map('n', 'hS', gitsigns.stage_buffer, { desc = 'git [S]tage buffer' }) diff --git a/lua/kickstart/plugins/indent_line.lua b/lua/kickstart/plugins/indent_line.lua index dcf6f55..d89c867 100644 --- a/lua/kickstart/plugins/indent_line.lua +++ b/lua/kickstart/plugins/indent_line.lua @@ -1,10 +1,6 @@ --- Add indentation guides even on blank lines - return { { 'lukas-reineke/indent-blankline.nvim', - -- Enable `lukas-reineke/indent-blankline.nvim` - -- See `:help ibl` main = 'ibl', opts = {}, }, diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua index 96a18d8..507a1e6 100644 --- a/lua/kickstart/plugins/lint.lua +++ b/lua/kickstart/plugins/lint.lua @@ -4,54 +4,11 @@ return { event = { 'BufReadPre', 'BufNewFile' }, config = function() local lint = require 'lint' - lint.linters_by_ft = { - -- markdown = { 'markdownlint' }, - sql = { 'sqlfluff' }, - -- go = { 'golangcilint' }, - -- proto = { 'buf_lint' }, -- Крашит - } - - -- To allow other plugins to add linters to require('lint').linters_by_ft, - -- instead set linters_by_ft like this: - -- lint.linters_by_ft = lint.linters_by_ft or {} - -- lint.linters_by_ft['markdown'] = { 'markdownlint' } - -- - -- However, note that this will enable a set of default linters, - -- which will cause errors unless these tools are available: - -- { - -- clojure = { "clj-kondo" }, - -- dockerfile = { "hadolint" }, - -- inko = { "inko" }, - -- janet = { "janet" }, - -- json = { "jsonlint" }, - -- markdown = { "vale" }, - -- rst = { "vale" }, - -- ruby = { "ruby" }, - -- terraform = { "tflint" }, - -- text = { "vale" } - -- } - -- - -- You can disable the default linters by setting their filetypes to nil: - -- lint.linters_by_ft['clojure'] = nil - -- lint.linters_by_ft['dockerfile'] = nil - -- lint.linters_by_ft['inko'] = nil - -- lint.linters_by_ft['janet'] = nil - -- lint.linters_by_ft['json'] = nil - -- lint.linters_by_ft['markdown'] = nil - -- lint.linters_by_ft['rst'] = nil - -- lint.linters_by_ft['ruby'] = nil - -- lint.linters_by_ft['terraform'] = nil - -- lint.linters_by_ft['text'] = nil - - -- Create autocommand which carries out the actual linting - -- on the specified events. + lint.linters_by_ft = {} local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true }) vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, { group = lint_augroup, callback = function() - -- Only run the linter in buffers that you can modify in order to - -- avoid superfluous noise, notably within the handy LSP pop-ups that - -- describe the hovered symbol using Markdown. if vim.opt_local.modifiable:get() then lint.try_lint() end diff --git a/lua/kickstart/plugins/lsp.lua b/lua/kickstart/plugins/lsp.lua index b4529e4..497bc19 100644 --- a/lua/kickstart/plugins/lsp.lua +++ b/lua/kickstart/plugins/lsp.lua @@ -1,121 +1,40 @@ --- 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.nvim', config = true }, '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 . 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('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. - -- Было ds [D]ocument [S]ymbols map('ss', require('telescope.builtin').lsp_document_symbols, 'Document [S]ymbols') - - -- Fuzzy find all the symbols in your current workspace. - -- Similar to document symbols, except searches over your entire project. map('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('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('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 }) @@ -124,13 +43,11 @@ return { 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) @@ -139,11 +56,6 @@ return { 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('th', function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled { bufnr = event.buf }) @@ -151,8 +63,6 @@ return { 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 = {} @@ -161,153 +71,32 @@ return { 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()) - - -- Настройки для некоторых lsp серверов. Приходится делать так. - local cap_css = vim.lsp.protocol.make_client_capabilities() - cap_css.textDocument.completion.completionItem.snippetSupport = true - local cap_html = vim.lsp.protocol.make_client_capabilities() - cap_html.textDocument.completion.completionItem.snippetSupport = true - local cap_json = vim.lsp.protocol.make_client_capabilities() - cap_json.textDocument.completion.completionItem.snippetSupport = true - - -- 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 = { - -- 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 - - -- SQL - sqls = { - on_attach = function(client) - -- Выключить форматирование - client.server_capabilities.documentFormattingProvider = false - end, - }, - - -- Golang - gopls = {}, - -- templ = {}, - - -- Frontend - ts_ls = {}, - -- tailwindcss = {}, - -- htmx = {}, - emmet_language_server = { - filetypes = { - 'templ', - 'css', - 'eruby', - 'html', - 'javascript', - 'javascriptreact', - 'less', - 'sass', - 'scss', - 'pug', - 'typescriptreact', - }, - }, - cssls = { - capabilities = cap_css, - }, - html = { - 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 lua_ls = { settings = { Lua = { completion = { callSnippet = 'Replace', }, - -- You can toggle below to ignore Lua_LS's noisy `missing-fields` warnings - -- diagnostics = { disable = { 'missing-fields' } }, }, }, }, - - -- C/C++ - clangd = { - filetypes = { 'c', 'cpp', 'objc', 'objcpp', 'cuda' }, -- Удалил "proto" - }, - cmake = {}, - - -- Python - pyright = {}, - ruff = { - on_attach = function(client, bufnr) -- Выключить форматирование - client.server_capabilities.documentFormattingProvider = false - end, - }, - - -- Rust - rust_analyzer = {}, - - -- Bash bashls = {}, - - -- JSON - jsonls = { - capabilities = cap_json, - }, - - -- Other taplo = {}, - vimls = {}, yamlls = {}, - protols = {}, } - - -- 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, diff --git a/lua/kickstart/plugins/mini.lua b/lua/kickstart/plugins/mini.lua index 1cfade1..4179456 100644 --- a/lua/kickstart/plugins/mini.lua +++ b/lua/kickstart/plugins/mini.lua @@ -1,64 +1,25 @@ --- 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() - - -- Sessions require('mini.sessions').setup { - -- Whether to read default session if Neovim opened without file arguments autoread = false, - - -- Whether to write currently read session before quitting Neovim autowrite = false, - - -- Whether to force possibly harmful actions (meaning depends on function) force = { read = false, write = true, delete = true }, - - -- Hook functions for actions. Default `nil` means 'do nothing'. hooks = { - -- Before successful action pre = { read = nil, write = nil, delete = nil }, - -- After successful action post = { read = nil, write = nil, delete = nil }, }, - - -- Whether to print session path after action verbose = { read = false, write = true, delete = true }, } - - -- 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, }, } diff --git a/lua/kickstart/plugins/telescope.lua b/lua/kickstart/plugins/telescope.lua index 6acc98b..964cbfd 100644 --- a/lua/kickstart/plugins/telescope.lua +++ b/lua/kickstart/plugins/telescope.lua @@ -1,12 +1,3 @@ --- 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', @@ -14,58 +5,21 @@ return { 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: - -- - 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 = { [''] = 'to_fuzzy_refine' }, - -- }, - -- }, pickers = { colorscheme = { - enable_preview = true, -- Themes preview + enable_preview = true, }, }, extensions = { @@ -74,12 +28,8 @@ return { }, }, } - - -- 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', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) @@ -94,26 +44,17 @@ return { builtin.buffers { sort_mru = true, ignore_current_buffer = true } end, { desc = '[ ] Find etisting buffers' }) vim.keymap.set('n', 'st', ':Telescope colorscheme', { desc = '[S]earch [T]hemes' }) - - -- Slightly advanced example of overriding default behavior and theme vim.keymap.set('n', '/', 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', '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', 'sn', function() builtin.find_files { cwd = vim.fn.stdpath 'config' } end, { desc = '[S]earch [N]eovim files' }) diff --git a/lua/kickstart/plugins/themes.lua b/lua/kickstart/plugins/themes.lua index 486365a..46aa231 100644 --- a/lua/kickstart/plugins/themes.lua +++ b/lua/kickstart/plugins/themes.lua @@ -1,100 +1,4 @@ --- 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, - }, - - ---------------------------------------------------------- - -- Гандоны не дают выбрать тему нормально -- - -- Приходится конфиг переписывать ради выбора расцветок -- - ---------------------------------------------------------- { 'ellisonleao/gruvbox.nvim', priority = 1000, @@ -149,59 +53,4 @@ return { vim.cmd.colorscheme 'gruvbox' 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_diagnostic_line_highlight = 1 - vim.g.gruvbox_material_diagnostic_text_highlight = 1 - - -- vim.g.gruvbox_material_inlay_hints_background = 'dimmed' - -- vim.g.gruvbox_material_better_performance = 1 - -- vim.g.gruvbox_material_spell_foreground = 'colored' - -- vim.g.gruvbox_material_enable_bold = 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, - }, } diff --git a/lua/kickstart/plugins/treesitter.lua b/lua/kickstart/plugins/treesitter.lua index 0c80789..325df5c 100644 --- a/lua/kickstart/plugins/treesitter.lua +++ b/lua/kickstart/plugins/treesitter.lua @@ -8,39 +8,30 @@ return { 'nvim-treesitter/nvim-treesitter-context', config = function() require('treesitter-context').setup { - enable = true, -- Enable this plugin (Can be enabled/disabled later via commands) - multiwindow = false, -- Enable multiwindow support. - max_lines = 0, -- How many lines the window should span. Values <= 0 mean no limit. - min_window_height = 0, -- Minimum editor window height to enable context. Values <= 0 mean no limit. + enable = true, + multiwindow = false, + max_lines = 0, + min_window_height = 0, line_numbers = true, - multiline_threshold = 3, -- Maximum number of lines to show for a single context - trim_scope = 'outer', -- Which context lines to discard if `max_lines` is exceeded. Choices: 'inner', 'outer' - mode = 'cursor', -- Line used to calculate context. Choices: 'cursor', 'topline' - -- Separator between context and content. Should be a single character string, like '-'. - -- When separator is set, the context will only show up when there are at least 2 lines above cursorline. + multiline_threshold = 3, + trim_scope = 'outer', + mode = 'cursor', separator = nil, - zindex = 20, -- The Z-index of the context window - on_attach = nil, -- (fun(buf: integer): boolean) return false to disable attaching + zindex = 20, + on_attach = nil, } vim.keymap.set('n', 'gp', function() require('treesitter-context').go_to_context(vim.v.count1) end, { silent = true, desc = '[G]oto context ([P]arent)' }) end, }, - -- { - -- 'nvim-treesitter/nvim-treesitter-textobjects', - -- }, }, build = ':TSUpdate', - main = 'nvim-treesitter.configs', -- Sets main module to use for opts - -- [[ Configure Treesitter ]] See `:help nvim-treesitter` + main = 'nvim-treesitter.configs', opts = { ensure_installed = { 'bash', - 'c', - 'cpp', 'diff', - 'html', 'lua', 'luadoc', 'markdown', @@ -48,38 +39,19 @@ return { 'query', 'vim', 'vimdoc', - 'css', - 'javascript', - 'typescript', 'json', 'csv', - 'go', - 'nix', - 'python', - 'rust', - 'sql', - 'templ', 'toml', 'yaml', 'cmake', 'printf', }, - -- 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 }, } diff --git a/lua/kickstart/plugins/which-key.lua b/lua/kickstart/plugins/which-key.lua index 652f894..8bcb4be 100644 --- a/lua/kickstart/plugins/which-key.lua +++ b/lua/kickstart/plugins/which-key.lua @@ -1,30 +1,10 @@ --- 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' + event = '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 = ' ', Down = ' ', @@ -57,10 +37,8 @@ return { }, }, - -- Document existing key chains spec = { { 'c', group = '[C]ode', mode = { 'n', 'x' } }, - -- { 'd', group = '[D]ocument' }, { 'r', group = '[R]ename' }, { 's', group = '[S]earch' }, { 'S', group = '[S]ession' }, diff --git a/lua/kickstart/settings.lua b/lua/kickstart/settings.lua index c988d41..2eefd81 100644 --- a/lua/kickstart/settings.lua +++ b/lua/kickstart/settings.lua @@ -1,172 +1,57 @@ --- Set 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 vim.opt.shiftwidth = 4 vim.opt.softtabstop = 4 --- Юзать пробелы вместо табов vim.opt.expandtab = true - --- yaml lsp за меня решают сколько пробелов мне надо. Это фикс --- Их параметры конфига для переназначения не работают. Пришлось костыль сделать vim.cmd [[ autocmd FileType yaml setlocal shiftwidth=4 tabstop=4 softtabstop=4 expandtab ]] - --- Комментировать .proto код биндом -vim.api.nvim_create_autocmd('FileType', { - pattern = 'proto', - callback = function() - vim.bo.commentstring = '// %s' - end, -}) - --- 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 - --- greatest remap ever vim.keymap.set('x', 'p', '"_dP', { desc = '[P]aste' }) - --- 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) - --- Use system clipboard via y/d, but Neovim clipboard via just y/d vim.keymap.set('n', 'y', '"+y', { desc = '[Y]ank to system clipboard' }) vim.keymap.set('v', 'y', '"+y', { desc = '[Y]ank to system clipboard' }) --- vim.keymap.set('n', 'Y', '"+Y', { desc = '[Y]ank to system clipboard' }) vim.keymap.set('n', 'd', '"+d', { desc = '[D]elete to system clipboard' }) vim.keymap.set('v', 'd', '"+d', { desc = '[D]elete to system clipboard' }) - --- Change `K` hover documentation size vim.lsp.handlers['textDocument/hover'] = vim.lsp.with(vim.lsp.handlers.hover, { - -- border = 'rounded', max_width = 80, - -- max_height = 15, }) - --- Move lines in visual mode vim.keymap.set('v', '', ":m '>+1gv=gv") vim.keymap.set('v', '', ":m '>+1gv=gv") vim.keymap.set('v', '', ":m '<-2gv=gv") vim.keymap.set('v', '', ":m '<-2gv=gv") - --- Enable break indent vim.opt.breakindent = true - --- Save undo history vim.opt.undofile = true - --- Disable swap file vim.opt.swapfile = false - --- Settings for sessions vim.o.sessionoptions = 'blank,buffers,curdir,folds,help,tabpages,winsize,winpos,terminal,localoptions' - --- Highlight a vertical line at the specified column to encourage keeping lines within this limit vim.opt.colorcolumn = '100' - --- 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 in normal mode --- See `:help hlsearch` vim.keymap.set('n', '', 'nohlsearch') - --- Diagnostic keymaps vim.keymap.set('n', '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 , 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 to exit terminal mode vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) - --- TIP: Disable arrow keys in normal mode --- vim.keymap.set('n', '', 'echo "Use h to move!!"') --- vim.keymap.set('n', '', 'echo "Use l to move!!"') --- vim.keymap.set('n', '', 'echo "Use k to move!!"') --- vim.keymap.set('n', '', 'echo "Use j to move!!"') - --- Keybinds to make split navigation easier. --- Use CTRL+ to switch between windows --- --- See `:help wincmd` for a list of all window commands vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) --- Use CTRL+arrows to switch between windows vim.keymap.set('n', '', '', { desc = 'Move focus to the left window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the right window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { 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 }),