diff options
| author | 2026-02-12 18:21:04 +0300 | |
|---|---|---|
| committer | 2026-02-12 18:21:04 +0300 | |
| commit | 529898343aed91872813833b1fa6bdf688cc4b2e (patch) | |
| tree | ddde638184214df1873329539a2f8cc794e2ae12 | |
| parent | nvim lazy upd (diff) | |
| download | dotfiles-529898343aed91872813833b1fa6bdf688cc4b2e.tar.gz dotfiles-529898343aed91872813833b1fa6bdf688cc4b2e.tar.bz2 dotfiles-529898343aed91872813833b1fa6bdf688cc4b2e.tar.xz dotfiles-529898343aed91872813833b1fa6bdf688cc4b2e.zip | |
12.02.2026
27 files changed, 614 insertions, 584 deletions
diff --git a/config/nvim/init.lua b/config/nvim/init.lua index 6ca25c9..73b1fcc 100644 --- a/config/nvim/init.lua +++ b/config/nvim/init.lua @@ -33,6 +33,4 @@ require("keymaps") require("commands") require("autocommands") require("lsp") -require("syntax") --- require("dap") - +require("theme") diff --git a/config/nvim/lazy-lock.json b/config/nvim/lazy-lock.json index 927e8b2..4a81880 100644 --- a/config/nvim/lazy-lock.json +++ b/config/nvim/lazy-lock.json @@ -1,34 +1,40 @@ { "LuaSnip": { "branch": "master", "commit": "5a1e39223db9a0498024a77b8441169d260c8c25" }, "apidocs.nvim": { "branch": "main", "commit": "40356c6948a651181f7c9ce91f6fb4048dc388ef" }, - "auto-save.nvim": { "branch": "main", "commit": "37c82fd548e3f5ffc2d9d020a65dac1044584f44" }, - "blink.cmp": { "branch": "main", "commit": "b19413d214068f316c78978b08264ed1c41830ec" }, + "auto-save.nvim": { "branch": "main", "commit": "61892d67acd5b7c845f5da4d780b26fcd7f63e34" }, + "blink.cmp": { "branch": "main", "commit": "4b18c32adef2898f95cdef6192cbd5796c1a332d" }, + "claudecode.nvim": { "branch": "main", "commit": "aa9a5cebebdbfa449c1c5ff229ba5d98e66bafed" }, "conform.nvim": { "branch": "master", "commit": "c2526f1cde528a66e086ab1668e996d162c75f4f" }, "diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" }, "friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" }, - "go.nvim": { "branch": "master", "commit": "41a18f0c05534c375bafec7ed05cdb409c4abcc6" }, + "gitsigns.nvim": { "branch": "main", "commit": "31217271a7314c343606acb4072a94a039a19fb5" }, + "go.nvim": { "branch": "master", "commit": "421694ad11759ad22d5200cff6a8c69d223ade29" }, "goerr-nvim": { "branch": "main", "commit": "d30ba1cab652e78dbf6a644eb4823be57e9af203" }, "goimpl.nvim": { "branch": "main", "commit": "a0c2d8cd1e37f0ae8c19dc954ced3c6ccdceed53" }, "guihua.lua": { "branch": "master", "commit": "ef44ba40f12e56c1c9fa45967f2b4d142e4b97a0" }, "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" }, - "lsp_signature.nvim": { "branch": "master", "commit": "7d3bb0a641f516f1c7fd2e47852580dadbd7a430" }, + "lazydev.nvim": { "branch": "main", "commit": "5231c62aa83c2f8dc8e7ba957aa77098cda1257d" }, + "lsp_signature.nvim": { "branch": "master", "commit": "0efb088dce050d38a3608ee69f80f2a62cf9849c" }, "lspsaga.nvim": { "branch": "main", "commit": "8efe00d6aed9db6449969f889170f1a7e43101a1" }, "lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" }, - "multicursor.nvim": { "branch": "1.0", "commit": "7fa95668af59d2a01c87390fb2eed8e48600952c" }, - "neogit": { "branch": "master", "commit": "73870229977fdd8747025820e15e98cfde787b9c" }, - "nvim-dap": { "branch": "master", "commit": "085386b9359ddf8d76ad89b98973b8e332dc5ba3" }, - "nvim-dap-go": { "branch": "main", "commit": "97924027bbd30b5276d383fb22dcb6bf44da0056" }, + "multicursor.nvim": { "branch": "1.0", "commit": "630dd29dd696bc977cb81d7dd2fa6bb280f60fc4" }, + "neogit": { "branch": "master", "commit": "75ca811db3ca3e43137596d25d26e57331540ee0" }, + "nvim-cmp": { "branch": "main", "commit": "da88697d7f45d16852c6b2769dc52387d1ddc45f" }, + "nvim-dap": { "branch": "master", "commit": "db321947bb289a2d4d76a32e76e4d2bd6103d7df" }, + "nvim-dap-go": { "branch": "main", "commit": "b4421153ead5d726603b02743ea40cf26a51ed5f" }, "nvim-dap-ui": { "branch": "master", "commit": "cf91d5e2d07c72903d052f5207511bf7ecdb7122" }, - "nvim-lspconfig": { "branch": "master", "commit": "ff9c0af8f9b2097fdd2695058db7e04c193908aa" }, + "nvim-lspconfig": { "branch": "master", "commit": "f4e9d367d4e067d7a5fabc9fd3f1349b291eb718" }, "nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" }, - "nvim-tree.lua": { "branch": "master", "commit": "c07ce43527e5f0242121f4eb1feb7ac0ecea8275" }, + "nvim-tree.lua": { "branch": "master", "commit": "c0b18e4879f7b29a17a240ad49f733af7a7fb348" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" }, "nvim-treesitter-context": { "branch": "master", "commit": "64dd4cf3f6fd0ab17622c5ce15c91fc539c3f24a" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" }, - "nvim-ts-autotag": { "branch": "main", "commit": "db15f2e0df2f5db916e511e3fffb682ef2f6354f" }, - "nvim-web-devicons": { "branch": "master", "commit": "803353450c374192393f5387b6a0176d0972b848" }, + "nvim-ts-autotag": { "branch": "main", "commit": "8e1c0a389f20bf7f5b0dd0e00306c1247bda2595" }, + "nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" }, "popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" }, "smartcolumn.nvim": { "branch": "main", "commit": "b9cdbdf42f7ac5a659204cd5926017c7ff724a19" }, + "snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" }, + "telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" }, "telescope.nvim": { "branch": "master", "commit": "ad7d9580338354ccc136e5b8f0aa4f880434dcdc" } } diff --git a/config/nvim/lua/autocommands.lua b/config/nvim/lua/autocommands.lua index f773190..4faf74b 100644 --- a/config/nvim/lua/autocommands.lua +++ b/config/nvim/lua/autocommands.lua @@ -76,6 +76,7 @@ vim.api.nvim_create_autocmd("BufEnter", { end vim.schedule(function() vim.cmd("nohlsearch") + require("gitsigns").attach() local treeapi = require("nvim-tree.api") treeapi.tree.find_file({ update_root = false, diff --git a/config/nvim/lua/keymaps.lua b/config/nvim/lua/keymaps.lua index 0597937..d4ca130 100644 --- a/config/nvim/lua/keymaps.lua +++ b/config/nvim/lua/keymaps.lua @@ -1,424 +1,39 @@ -local kmap = vim.keymap.set - -local keys = { - -- ========== БАЗОВАЯ НАВИГАЦИЯ ========== - { - "<Space>", - "<Nop>", - { desc = "Disable Space in normal mode" }, - }, - { - "<Home>", - "^", - { desc = "Go to first non-blank character" }, - }, - { - "<End>", - "$", - { desc = "Go to end of line" }, - }, - { - "<Home>", - "^", - { mode = "v", desc = "Go to first non-blank character (visual)" }, - }, - { - "<End>", - "$", - { mode = "v", desc = "Go to end of line (visual)" }, - }, - { - "<Home>", - "<C-o>^", - { mode = "i", desc = "Go to first non-blank character (insert)" }, - }, - { - "<End>", - "<C-o>$", - { mode = "i", desc = "Go to end of line (insert)" }, - }, - - -- ========== ВИЗУАЛЬНЫЙ РЕЖИМ ========== - { - "i", - "<S-i>", - { mode = "v", desc = "Select inner object" }, - }, - { - "a", - "<S-a>", - { mode = "v", desc = "Select around object" }, - }, - { - "J", - ":m '>+1<CR>gv=gv", - { mode = "v", desc = "Move selection down" }, - }, - { - "K", - ":m '<-2<CR>gv=gv", - { mode = "v", desc = "Move selection up" }, - }, - { - "<", - "<gv", - { mode = "v", desc = "Indent left and keep selection" }, - }, - { - ">", - ">gv", - { mode = "v", desc = "Indent right and keep selection" }, - }, - - -- ========== УПРАВЛЕНИЕ БУФЕРАМИ ========== - { - "<leader>bn", - "<cmd>bnext<CR>", - { desc = "Next buffer" }, - }, - { - "<leader>bp", - "<cmd>bprevious<CR>", - { desc = "Previous buffer" }, - }, - { - "<leader>bd", - "<cmd>bdelete<CR>", - { desc = "Delete buffer" }, - }, - { - "<C-s>", - "<cmd>wa<CR>", - { desc = "Save all files" }, - }, - { - "<leader>q", - "<cmd>q<CR>", - { desc = "Exit" }, - }, - { - "<leader>vs", - "<cmd>vsplit<CR>", - { desc = "Vertical split" }, - }, - - -- ========== УПРАВЛЕНИЕ ВКЛАДКАМИ ========== - { - "<A-Right>", - "<cmd>tabnext<CR>", - { desc = "Next tab" }, - }, - { - "<A-Left>", - "<cmd>tabprevious<CR>", - { desc = "Previous tab" }, - }, - { - "<A-t>", - "<cmd>tabnew<CR>", - { desc = "New tab" }, - }, - { - "<A-w>", - "<cmd>tabclose<CR>", - { desc = "Close tab" }, - }, - - -- ========== NVIM-TREE (ФАЙЛОВЫЙ ЭКСПЛОРЕР) ========== - { - "<C-c>", - function() - local api = require("nvim-tree.api") - local global_cwd = vim.fn.getcwd(-1, -1) - api.tree.change_root(global_cwd) - end, - { desc = "Change tree root to CWD" }, - }, - { - "<F3>", - "<cmd>NvimTreeToggle<CR>", - { desc = "Toggle file tree" }, - }, - - -- ========== TELESCOPE (ПОИСК) ========== - { - "<leader>ff", - "<cmd>Telescope find_files<CR>", - { desc = "Find files" }, - }, - { - "<leader>fg", - "<cmd>Telescope live_grep<CR>", - { desc = "Live grep" }, - }, - { - "<leader>fb", - "<cmd>Telescope current_buffer_fuzzy_find<CR>", - { desc = "Find in current buffer" }, - }, - { - "<F4>", - "<cmd>Telescope buffers<CR>", - { desc = "Find buffers" }, - }, - { - "<leader>gc", - "<cmd>Telescope git_commits<CR>", - { desc = "Git commits" }, - }, - { - "<leader>gs", - "<cmd>Telescope git_status<CR>", - { desc = "Git status" }, - }, - { - "<leader>ch", - "<cmd>Telescope commands_history<CR>", - { desc = "Commands history" }, - }, - { - "<leader>e", - "<cmd>Telescope diagnostics<CR>", - { desc = "Diagnostics" }, - }, - { - "gi", - "<cmd>Telescope lsp_implementations<CR>", - { desc = "LSP implementations" }, - }, - { - "gr", - "<cmd>Telescope lsp_references<CR>", - { desc = "LSP references" }, - }, - - -- ========== LSP (ЯЗЫКОВОЙ СЕРВЕР) ========== - { - "d[", - vim.diagnostic.goto_prev, - { desc = "Previous diagnostic" }, - }, - { - "d]", - vim.diagnostic.goto_next, - { desc = "Next diagnostic" }, - }, - { - "gD", - vim.lsp.buf.declaration, - { desc = "Go to declaration" }, - }, - { - "gd", - vim.lsp.buf.definition, - { desc = "Go to definition" }, - }, - { - "K", - vim.lsp.buf.hover, - { desc = "Show documentation" }, - }, - { - "<C-k>", - vim.lsp.buf.signature_help, - { desc = "Signature help" }, - }, - { - "<leader>sad", - "<cmd>ApidocsOpen<cr>", - { desc = "Search Api Doc" }, - }, - { - "<leader>wa", - vim.lsp.buf.add_workspace_folder, - { desc = "Add workspace folder" }, - }, - { - "<leader>wr", - vim.lsp.buf.remove_workspace_folder, - { desc = "Remove workspace folder" }, - }, - { - "<leader>im", - function() - require("telescope").extensions.goimpl.goimpl({}) - end, - { desc = "Generate stub for interface on a type for golang" }, - }, - { - "<leader>wl", - function() - print(vim.inspect(vim.lsp.buf.list_workspace_folders())) - end, - { desc = "List workspace folders" }, - }, - { - "<A-CR>", - "<cmd>Lspsaga code_action<cr>", - { desc = "Code actions" }, - }, - { - "<F2>", - vim.lsp.buf.rename, - { desc = "Rename symbol" }, - }, - { - "<A-q>", - "gqip", - { desc = "Reflow line" }, - }, - - -- ========== ИЗМЕНЕНИЕ РАЗМЕРА ОКОН ========== - { - "<C-A-Left>", - function() - require("myplugins.resize").ResizeLeft() - end, - { desc = "Resize window left" }, - }, - { - "<C-A-Right>", - function() - require("myplugins.resize").ResizeRight() - end, - { desc = "Resize window right" }, - }, - { - "<C-A-Up>", - function() - require("myplugins.resize").ResizeUp() - end, - { desc = "Resize window up" }, - }, - { - "<C-A-Down>", - function() - require("myplugins.resize").ResizeDown() - end, - { desc = "Resize window down" }, - }, - - -- ========== DAP (ОТЛАДКА) ========== - { - "<F6>", - function() - require("dapui").toggle() - end, - { desc = "Toggle debug UI" }, - }, - { - "<Leader>dh", - function() - require("dap.ui.widgets").hover() - end, - { desc = "Debug hover" }, - }, - { - "<Leader>dp", - function() - require("dap.ui.widgets").preview() - end, - { desc = "Debug preview" }, - }, - { - "<leader>dt", - function() - require("dap-go").debug_test() - end, - { desc = "Debug test" }, - }, - { - "<F9>", - function() - local widgets = require("dap.ui.widgets") - widgets.centered_float(widgets.scopes) - end, - { desc = "Debug scopes" }, - }, - { - "<F5>", - function() - require("dap").continue() - end, - { desc = "Debug continue" }, - }, - { - "<F17>", - function() -- S-F5 - require("dap").restart() - end, - { desc = "Debug restart" }, - }, - { - "<F29>", - function() -- C-F5 - require("dap").terminate() - end, - { desc = "Debug terminate" }, - }, - { - "<F8>", - function() - require("dap").step_over() - end, - { desc = "Debug step over" }, - }, - { - "<F7>", - function() - require("dap").step_into() - end, - { desc = "Debug step into" }, - }, - { - "<F19>", - function() -- S-F7 - require("dap").step_out() - end, - { desc = "Debug step out" }, - }, - { - "<A-b>", - function() - require("dap").toggle_breakpoint() - end, - { desc = "Toggle breakpoint" }, - }, - - -- ========== ФОРМАТИРОВАНИЕ ========== - { - "<leader>mp", - function() - require("conform").format({ lsp_fallback = true, async = false, timeout_ms = 500 }) - end, - { desc = "Format file or range (in visual mode)" }, - }, -} - --- Добавляем быстрый переход по вкладкам (1-9) +-- ========== БАЗОВАЯ НАВИГАЦИЯ ========== +vim.keymap.set("n", "<Space>", "<Nop>", { desc = "Disable Space in normal mode" }) +vim.keymap.set("n", "<Home>", "^", { desc = "Go to first non-blank character" }) +vim.keymap.set("n", "<End>", "$", { desc = "Go to end of line" }) +vim.keymap.set("v", "<Home>", "^", { desc = "Go to first non-blank character (visual)" }) +vim.keymap.set("v", "<End>", "$", { desc = "Go to end of line (visual)" }) +vim.keymap.set("i", "<Home>", "<C-o>^", { desc = "Go to first non-blank character (insert)" }) +vim.keymap.set("i", "<End>", "<C-o>$", { desc = "Go to end of line (insert)" }) + +-- ========== ВИЗУАЛЬНЫЙ РЕЖИМ ========== +vim.keymap.set("v", "i", "<S-i>", { desc = "Select inner object" }) +vim.keymap.set("v", "a", "<S-a>", { desc = "Select around object" }) +vim.keymap.set("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move selection down" }) +vim.keymap.set("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move selection up" }) +vim.keymap.set("v", "<", "<gv", { desc = "Indent left and keep selection" }) +vim.keymap.set("v", ">", ">gv", { desc = "Indent right and keep selection" }) + +-- ========== УПРАВЛЕНИЕ БУФЕРАМИ ========== +vim.keymap.set("n", "<leader>bn", "<cmd>bnext<CR>", { desc = "Next buffer" }) +vim.keymap.set("n", "<leader>bp", "<cmd>bprevious<CR>", { desc = "Previous buffer" }) +vim.keymap.set("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" }) +vim.keymap.set("n", "<C-s>", "<cmd>wa<CR>", { desc = "Save all files" }) +vim.keymap.set("n", "<C-q>", "<cmd>q<CR>", { desc = "Exit" }) +vim.keymap.set("n", "<leader>vs", "<cmd>vsplit<CR>", { desc = "Vertical split" }) + +-- ========== УПРАВЛЕНИЕ ВКЛАДКАМИ ========== +vim.keymap.set("n", "<A-Right>", "<cmd>tabnext<CR>", { desc = "Next tab" }) +vim.keymap.set("n", "<A-Left>", "<cmd>tabprevious<CR>", { desc = "Previous tab" }) +vim.keymap.set("n", "<A-t>", "<cmd>tabnew<CR>", { desc = "New tab" }) +vim.keymap.set("n", "<A-w>", "<cmd>tabclose<CR>", { desc = "Close tab" }) + +-- ========== Quick tab navigation (1-9) ========== for i = 1, 9 do - table.insert(keys, { - "<A-" .. i .. ">", - "<cmd>tabn " .. i .. "<CR>", - { desc = "Go to tab " .. i }, - }) + vim.keymap.set("n", "<A-" .. i .. ">", "<cmd>tabn " .. i .. "<CR>", { desc = "Go to tab " .. i }) end --- Применяем все кеймапинги -for _, mapping in ipairs(keys) do - local key = mapping[1] - local action = mapping[2] - local opts = mapping[3] or {} - - -- Извлекаем режим или используем "n" по умолчанию - local mode = opts.mode or "n" - -- Удаляем mode из opts, так как он передается отдельно - opts.mode = nil - - -- Устанавливаем silent = true по умолчанию - if opts.silent == nil then - opts.silent = true - end - - kmap(mode, key, action, opts) -end +-- ========== MISCELLANEOUS ========== +vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, { desc = "Signature help" }) +vim.keymap.set("n", "<A-q>", "gqip", { desc = "Reflow line" }) diff --git a/config/nvim/lua/keymaps_documentation.md b/config/nvim/lua/keymaps_documentation.md index 4a7f874..63ed9a3 100644 --- a/config/nvim/lua/keymaps_documentation.md +++ b/config/nvim/lua/keymaps_documentation.md @@ -1,9 +1,5 @@ # Описание клавиатурных сокращений Neovim -Данный документ содержит описание всех клавиатурных сокращений, настроенных в `keymaps.lua`, сгруппированных по категориям. - ---- - ## Базовая навигация - `<Space>` → Ничего не делает (отключено в нормальном режиме) diff --git a/config/nvim/lua/options.lua b/config/nvim/lua/options.lua index 0cd9c53..4a230ad 100644 --- a/config/nvim/lua/options.lua +++ b/config/nvim/lua/options.lua @@ -26,10 +26,12 @@ local options = { softtabstop = 4, cursorline = true, listchars = { - tab = '→→', - trail = '-', - nbsp = '+' + tab = "› ", + trail = "-", + nbsp = "+", + leadmultispace = "· ", }, + list = true, number = true, relativenumber = true, numberwidth = 4, @@ -65,5 +67,3 @@ vim.filetype.add({ [".*/todo.txt"] = "todotxt", }, }) - - diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua index 87a1a65..723ef8a 100644 --- a/config/nvim/lua/plugins.lua +++ b/config/nvim/lua/plugins.lua @@ -1,24 +1,10 @@ require("lazy").setup({ - { "nvim-lua/plenary.nvim" }, - { - "ray-x/guihua.lua", - build = "cd lua/fzy && make", - }, - { - "neovim/nvim-lspconfig", - dependencies = { "saghen/blink.cmp" }, - }, - { "Snyssfx/goerr-nvim" }, - { - "NeogitOrg/neogit", - dependencies = { - "nvim-lua/plenary.nvim", - "sindrets/diffview.nvim", - }, - }, - { - "mfussenegger/nvim-dap", - }, + require("plugins.plenary"), + require("plugins.guihua"), + require("plugins.nvim-lspconfig"), + require("plugins.goerr"), + require("plugins.neogit"), + require("plugins.dap"), require("plugins.multicursor"), require("plugins.apidocs"), require("plugins.resize"), @@ -29,6 +15,7 @@ require("lazy").setup({ require("plugins.treesitter"), require("plugins.tree"), require("plugins.conform"), + require("plugins.lazydev"), require("plugins.dapui"), require("plugins.dap_go"), require("plugins.go"), @@ -36,7 +23,8 @@ require("lazy").setup({ require("plugins.lualine"), require("plugins.telescope"), require("plugins.columns"), - -- require("plugins.codecompanion"), + require("plugins.gitsigns"), + require("plugins.claudecode"), }, { performance = { rtp = { diff --git a/config/nvim/lua/plugins/apidocs.lua b/config/nvim/lua/plugins/apidocs.lua index 2727c09..9e76bff 100644 --- a/config/nvim/lua/plugins/apidocs.lua +++ b/config/nvim/lua/plugins/apidocs.lua @@ -4,10 +4,17 @@ return { "nvim-telescope/telescope.nvim", -- or, 'folke/snacks.nvim' }, cmd = { "ApidocsSearch", "ApidocsInstall", "ApidocsOpen", "ApidocsSelect", "ApidocsUninstall" }, + keys = { + { + "<leader>sad", + "<cmd>ApidocsOpen<cr>", + desc = "Search Api Doc", + }, + }, config = function() require("apidocs").setup() -- Picker will be auto-detected. To select a picker of your choice explicitly you can set picker by the configuration option 'picker': -- require('apidocs').setup({picker = "snacks"}) -- Possible options are 'ui_select', 'telescope', and 'snacks' end, -} +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/claudecode.lua b/config/nvim/lua/plugins/claudecode.lua new file mode 100644 index 0000000..8533480 --- /dev/null +++ b/config/nvim/lua/plugins/claudecode.lua @@ -0,0 +1,26 @@ +return { + "coder/claudecode.nvim", + dependencies = { "folke/snacks.nvim" }, + opts = {}, + keys = { + { "<leader>a", nil, desc = "AI/Claude Code" }, -- top‑level prefix + { "<leader>ac", "<cmd>ClaudeCode<cr>", desc = "Toggle Claude" }, -- open/close Claude:contentReference[oaicite:6]{index=6} + { "<leader>af", "<cmd>ClaudeCodeFocus<cr>", desc = "Focus Claude" }, -- focus/toggle terminal:contentReference[oaicite:7]{index=7} + { "<leader>ar", "<cmd>ClaudeCode --resume<cr>", desc = "Resume Claude" }, -- resume previous session:contentReference[oaicite:8]{index=8} + { "<leader>aC", "<cmd>ClaudeCode --continue<cr>", desc = "Continue Claude" }, -- continue conversation:contentReference[oaicite:9]{index=9} + { "<leader>am", "<cmd>ClaudeCodeSelectModel<cr>", desc = "Select model" }, -- choose Claude model:contentReference[oaicite:10]{index=10} + { "<leader>ab", "<cmd>ClaudeCodeAdd %<cr>", desc = "Add current buffer" }, -- add current file:contentReference[oaicite:11]{index=11} + -- Visual-mode send: use the mapping only in visual mode (mode = "v") + { "<leader>as", "<cmd>ClaudeCodeSend<cr>", mode = "v", desc = "Send selection" }, -- :contentReference[oaicite:12]{index=12} + -- File-tree send: applies only in file manager buffers such as nvim‑tree or neo-tree:contentReference[oaicite:13]{index=13} + { + "<leader>as", + "<cmd>ClaudeCodeTreeAdd<cr>", + desc = "Add file", + ft = { "NvimTree", "neo-tree", "oil", "minifiles", "netrw" }, + }, + -- Diff management: accept or deny changes:contentReference[oaicite:14]{index=14} + { "<leader>aa", "<cmd>ClaudeCodeDiffAccept<cr>", desc = "Accept diff" }, + { "<leader>ad", "<cmd>ClaudeCodeDiffDeny<cr>", desc = "Deny diff" }, + }, +} diff --git a/config/nvim/lua/plugins/codecompanion.lua b/config/nvim/lua/plugins/codecompanion.lua deleted file mode 100644 index d8eec4a..0000000 --- a/config/nvim/lua/plugins/codecompanion.lua +++ /dev/null @@ -1,99 +0,0 @@ -return { - "olimorris/codecompanion.nvim", - dependencies = { - "nvim-lua/plenary.nvim", - "nvim-treesitter/nvim-treesitter", - { - "ravitemer/mcphub.nvim", - dependencies = { - "nvim-lua/plenary.nvim", - }, - build = "npm install -g mcp-hub@latest", - config = function() - require("mcphub").setup() - end, - }, - }, - opts = { - opts = { - log_level = "DEBUG", -- or "TRACE" - }, - extensions = { - mcphub = { - callback = "mcphub.extensions.codecompanion", - opts = { - make_tools = true, -- Make individual tools (@server__tool) and server groups (@server) from MCP servers - show_server_tools_in_chat = true, -- Show individual tools in chat completion (when make_tools=true) - add_mcp_prefix_to_tool_names = false, -- Add mcp__ prefix (e.g `@mcp__github`, `@mcp__neovim__list_issues`) - show_result_in_chat = true, -- Show tool results directly in chat buffer - format_tool = nil, -- function(tool_name:string, tool: CodeCompanion.Agent.Tool) : string Function to format tool names to show in the chat buffer - -- MCP Resources - make_vars = true, -- Convert MCP resources to #variables for prompts - -- MCP Prompts - make_slash_commands = true, -- Add MCP prompts as /slash commands - }, - }, - }, - strategies = { - chat = { - adapter = "scbt", - tools = { - opts = { - auto_submit_errors = true, -- Send any errors to the LLM automatically? - auto_submit_success = true, -- Send any successful output to the LLM automatically? - default_tools = { - "full_stack_dev", - "mcp", - "filesystem", - }, - }, - opts = { - system_promt = "Ты полезный ассистент в редакторе neovim в плагине codecompanion. Основной зык программирования - go. Отвечай всегда на русском языке.", - }, - }, - }, - inline = { - adapter = "scbt", - }, - }, - memory = { - opts = { - chat = { - enabled = true, - }, - }, - }, - adapters = { - http = { - scbt = function() - return require("codecompanion.adapters").extend("openai_compatible", { - env = { - api_key = "cmd: age -d -i ~/.ssh/id_ed25519 ~/.openai-api-key.age", - url = "http://localhost:8888/api", - }, - - schema = { - model = { - default = "qwen3-235b-it", - choices = { - "qwen3-235b-it", - "Qwen3-Coder-30B-A3B-Instruct-FP8", - "qwen2-5-coder-1-5b", - }, - num_ctx = { - default = 120000, - }, - think = { - default = true, - }, - keep_alive = { - default = "5m", - }, - }, - }, - }) - end, - }, - }, - }, -} diff --git a/config/nvim/lua/plugins/conform.lua b/config/nvim/lua/plugins/conform.lua index 59e761b..e08f54a 100644 --- a/config/nvim/lua/plugins/conform.lua +++ b/config/nvim/lua/plugins/conform.lua @@ -22,6 +22,4 @@ return { timeout_ms = 500, }, }, - keys = { - }, -} +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/dap.lua b/config/nvim/lua/plugins/dap.lua new file mode 100644 index 0000000..315fab8 --- /dev/null +++ b/config/nvim/lua/plugins/dap.lua @@ -0,0 +1,96 @@ +return { + "mfussenegger/nvim-dap", + config = function() + local dap = require("dap") + dap.adapters.go = { + type = "server", + port = "${port}", + executable = { + command = "dlv", + args = { "dap", "-l", "127.0.0.1:${port}" }, + }, + } + -- dap.configurations.go = { + -- { + -- type = "go", + -- name = "Debug", + -- request = "launch", + -- program = "${file}", + -- }, + -- { + -- type = "go", + -- name = "Debug test", + -- request = "launch", + -- mode = "test", + -- program = "${file}", + -- }, + -- { + -- type = "go", + -- name = "Debug test (go test)", + -- request = "launch", + -- mode = "test", + -- program = "${workspaceFolder}", + -- }, + -- } + end, + keys = { + { + "<F5>", + function() + require("dap").continue() + end, + desc = "Debug continue", + }, + { + "<F17>", + function() -- S-F5 + require("dap").restart() + end, + desc = "Debug restart", + }, + { + "<F29>", + function() -- C-F5 + require("dap").terminate() + end, + desc = "Debug terminate", + }, + { + "<F8>", + function() + require("dap").step_over() + end, + desc = "Debug step over", + }, + { + "<F7>", + function() + require("dap").step_into() + end, + desc = "Debug step into", + }, + { + "<F19>", + function() -- S-F7 + require("dap").step_out() + end, + desc = "Debug step out", + }, + { + "<A-b>", + function() + require("dap").toggle_breakpoint() + end, + desc = "Toggle breakpoint", + }, + { + "<F9>", + function() + local widgets = require("dap.ui.widgets") + widgets.centered_float(widgets.scopes) + end, + desc = "Debug scopes", + }, + }, +} + diff --git a/config/nvim/lua/plugins/dap_go.lua b/config/nvim/lua/plugins/dap_go.lua index 91dcac3..aee662b 100644 --- a/config/nvim/lua/plugins/dap_go.lua +++ b/config/nvim/lua/plugins/dap_go.lua @@ -1,5 +1,14 @@ return { - url = "https://gitrepo.ru/NeonXP/nvim-dap-go.git", + "leoluz/nvim-dap-go", dependencies = { "mfussenegger/nvim-dap" }, opts = true, -} + keys = { + { + "<leader>dt", + function() + require("dap-go").debug_test() + end, + desc = "Debug test", + }, + }, +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/dapui.lua b/config/nvim/lua/plugins/dapui.lua index ad2b6b6..f3fcb9c 100644 --- a/config/nvim/lua/plugins/dapui.lua +++ b/config/nvim/lua/plugins/dapui.lua @@ -7,8 +7,12 @@ return { }, opts = { icons = { - expanded = "[-]", - collapsed = "[+]", + expanded = "▼", + collapsed = "▶", + current_frame = "→", + }, + controls = { + enabled = false, }, mappings = { open = "o", @@ -22,6 +26,7 @@ return { { elements = { "repl", + "scopes", }, size = 0.3, position = "bottom", @@ -40,4 +45,27 @@ return { max_type_length = nil, }, }, + keys = { + { + "<F6>", + function() + require("dapui").toggle() + end, + desc = "Toggle debug UI", + }, + { + "<Leader>dh", + function() + require("dap.ui.widgets").hover() + end, + desc = "Debug hover", + }, + { + "<Leader>dp", + function() + require("dap.ui.widgets").preview() + end, + desc = "Debug preview", + }, + }, } diff --git a/config/nvim/lua/plugins/gitsigns.lua b/config/nvim/lua/plugins/gitsigns.lua new file mode 100644 index 0000000..5994cc8 --- /dev/null +++ b/config/nvim/lua/plugins/gitsigns.lua @@ -0,0 +1,118 @@ +return { + "lewis6991/gitsigns.nvim", + opts = { + signs = { + add = { text = "│" }, + change = { text = "│" }, + delete = { text = "_" }, + topdelete = { text = "‾" }, + changedelete = { text = "~" }, + untracked = { text = "┆" }, + }, + auto_attach = true, + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + watch_gitdir = { + interval = 1000, + follow_files = true, + }, + attach_to_untracked = true, + current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame` + current_line_blame_opts = { + virt_text = true, + virt_text_pos = "eol", -- 'eol' | 'overlay' | 'right_align' + delay = 1000, + ignore_whitespace = false, + }, + current_line_blame_formatter = "<author>, <author_time:%Y-%m-%d> - <summary>", + sign_priority = 6, + update_debounce = 100, + status_formatter = nil, -- Use default + max_file_length = 40000, -- Disable if file is longer than this (in lines) + preview_config = { + -- Options passed to nvim_open_win + border = "single", + style = "minimal", + relative = "cursor", + row = 0, + col = 1, + } + }, + keys = { + { + "]c", + function() + if vim.wo.diff then + vim.cmd.normal({ "]c", bang = true }) + else + require("gitsigns").nav_hunk("next") + end + end, + desc = "Next hunk", + }, + { + "[c", + function() + if vim.wo.diff then + vim.cmd.normal({ "[c", bang = true }) + else + require("gitsigns").nav_hunk("prev") + end + end, + desc = "Previous hunk", + }, + { + "<leader>hs", + function() + require("gitsigns").stage_hunk() + end, + desc = "Stage hunk", + }, + { + "<leader>hr", + function() + require("gitsigns").reset_hunk() + end, + desc = "Reset hunk", + }, + { + "<leader>hp", + function() + require("gitsigns").preview_hunk() + end, + desc = "Preview hunk", + }, + { + "<leader>hi", + function() + require("gitsigns").preview_hunk_inline() + end, + desc = "Preview hunk inline", + }, + { + "<leader>hb", + [[:<C-U>lua require('gitsigns').blame_line{full=true}<CR>]], + desc = "Blame line", + }, + { + "<leader>hd", + [[:<C-U>lua require('gitsigns').diffthis()<CR>]], + desc = "Diff this", + }, + { + "<leader>tb", + function() + require("gitsigns").toggle_current_line_blame() + end, + desc = "Toggle line blame", + }, + { + "ih", + [[:<C-U>lua require('gitsigns').select_hunk()<CR>]], + mode = { "o", "x" }, + desc = "Select hunk", + }, + }, +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/goerr.lua b/config/nvim/lua/plugins/goerr.lua new file mode 100644 index 0000000..9e2ca0d --- /dev/null +++ b/config/nvim/lua/plugins/goerr.lua @@ -0,0 +1,3 @@ +return { + "Snyssfx/goerr-nvim", +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/goimpl.lua b/config/nvim/lua/plugins/goimpl.lua index 9d97fb6..30cb292 100644 --- a/config/nvim/lua/plugins/goimpl.lua +++ b/config/nvim/lua/plugins/goimpl.lua @@ -6,7 +6,16 @@ return { "nvim-telescope/telescope.nvim", "nvim-treesitter/nvim-treesitter", }, + keys = { + { + "<leader>im", + function() + require("telescope").extensions.goimpl.goimpl({}) + end, + desc = "Generate stub for interface on a type for golang", + }, + }, config = function() require("telescope").load_extension("goimpl") end, -} +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/guihua.lua b/config/nvim/lua/plugins/guihua.lua new file mode 100644 index 0000000..60b0876 --- /dev/null +++ b/config/nvim/lua/plugins/guihua.lua @@ -0,0 +1,4 @@ +return { + "ray-x/guihua.lua", + build = "cd lua/fzy && make", +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/lazydev.lua b/config/nvim/lua/plugins/lazydev.lua new file mode 100644 index 0000000..0db6014 --- /dev/null +++ b/config/nvim/lua/plugins/lazydev.lua @@ -0,0 +1,42 @@ +return { + { + "folke/lazydev.nvim", + ft = "lua", -- only load on lua files + opts = { + library = { + -- See the configuration section for more details + -- Load luvit types when the `vim.uv` word is found + { path = "${3rd}/luv/library", words = { "vim%.uv" } }, + { "nvim-dap-ui" }, + }, + }, + }, + { -- optional cmp completion source for require statements and module annotations + "hrsh7th/nvim-cmp", + opts = function(_, opts) + opts.sources = opts.sources or {} + table.insert(opts.sources, { + name = "lazydev", + group_index = 0, -- set group index to 0 to skip loading LuaLS completions + }) + end, + }, + { -- optional blink completion source for require statements and module annotations + "saghen/blink.cmp", + opts = { + sources = { + -- add lazydev to your completion providers + default = { "lazydev", "lsp", "path", "snippets", "buffer" }, + providers = { + lazydev = { + name = "LazyDev", + module = "lazydev.integrations.blink", + -- make lazydev completions top priority (see `:h blink.cmp`) + score_offset = 100, + }, + }, + }, + }, + }, + -- { "folke/neodev.nvim", enabled = false }, -- make sure to uninstall or disable neodev.nvim +} diff --git a/config/nvim/lua/plugins/neogit.lua b/config/nvim/lua/plugins/neogit.lua new file mode 100644 index 0000000..3932bc1 --- /dev/null +++ b/config/nvim/lua/plugins/neogit.lua @@ -0,0 +1,11 @@ +return { + "NeogitOrg/neogit", + dependencies = { + "nvim-lua/plenary.nvim", + "sindrets/diffview.nvim", + }, + cmd = "Neogit", + keys = { + { "<leader>gg", "<cmd>Neogit<cr>", desc = "Show Neogit UI" }, + }, +} diff --git a/config/nvim/lua/plugins/nvim-lspconfig.lua b/config/nvim/lua/plugins/nvim-lspconfig.lua new file mode 100644 index 0000000..59085f9 --- /dev/null +++ b/config/nvim/lua/plugins/nvim-lspconfig.lua @@ -0,0 +1,58 @@ +return { + "neovim/nvim-lspconfig", + dependencies = { "saghen/blink.cmp" }, + keys = { + { + "d[", + vim.diagnostic.goto_prev, + desc = "Previous diagnostic", + }, + { + "d]", + vim.diagnostic.goto_next, + desc = "Next diagnostic", + }, + { + "gD", + vim.lsp.buf.declaration, + desc = "Go to declaration", + }, + { + "gd", + vim.lsp.buf.definition, + desc = "Go to definition", + }, + { + "K", + vim.lsp.buf.hover, + desc = "Show documentation", + }, + { + "<A-CR>", + "<cmd>Lspsaga code_action<cr>", + desc = "Code actions", + }, + { + "<F2>", + vim.lsp.buf.rename, + desc = "Rename symbol", + }, + { + "<leader>wa", + vim.lsp.buf.add_workspace_folder, + desc = "Add workspace folder", + }, + { + "<leader>wr", + vim.lsp.buf.remove_workspace_folder, + desc = "Remove workspace folder", + }, + { + "<leader>wl", + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, + desc = "List workspace folders", + }, + }, +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/plenary.lua b/config/nvim/lua/plugins/plenary.lua new file mode 100644 index 0000000..74b7874 --- /dev/null +++ b/config/nvim/lua/plugins/plenary.lua @@ -0,0 +1,3 @@ +return { + "nvim-lua/plenary.nvim", +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/resize.lua b/config/nvim/lua/plugins/resize.lua index bdb3ff6..ea3ce0c 100644 --- a/config/nvim/lua/plugins/resize.lua +++ b/config/nvim/lua/plugins/resize.lua @@ -1,4 +1,34 @@ return { name = "resize", dir = "~/.config/nvim/lua/myplugins", -} + keys = { + { + "<C-A-Left>", + function() + require("myplugins.resize").ResizeLeft() + end, + desc = "Resize window left", + }, + { + "<C-A-Right>", + function() + require("myplugins.resize").ResizeRight() + end, + desc = "Resize window right", + }, + { + "<C-A-Up>", + function() + require("myplugins.resize").ResizeUp() + end, + desc = "Resize window up", + }, + { + "<C-A-Down>", + function() + require("myplugins.resize").ResizeDown() + end, + desc = "Resize window down", + }, + }, +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/telescope.lua b/config/nvim/lua/plugins/telescope.lua index 018d95c..228160f 100644 --- a/config/nvim/lua/plugins/telescope.lua +++ b/config/nvim/lua/plugins/telescope.lua @@ -1,7 +1,64 @@ return { "nvim-telescope/telescope.nvim", + event = "VeryLazy", dependencies = { "nvim-lua/plenary.nvim", + { + "nvim-telescope/telescope-fzf-native.nvim", + build = "make", + }, + }, + keys = { + { + "<leader>ff", + "<cmd>Telescope find_files<CR>", + desc = "Find files", + }, + { + "<leader>fg", + "<cmd>Telescope live_grep<CR>", + desc = "Live grep", + }, + { + "<leader>fb", + "<cmd>Telescope current_buffer_fuzzy_find<CR>", + desc = "Find in current buffer", + }, + { + "<F4>", + "<cmd>Telescope buffers<CR>", + desc = "Find buffers", + }, + { + "<leader>gc", + "<cmd>Telescope git_commits<CR>", + desc = "Git commits", + }, + { + "<leader>gs", + "<cmd>Telescope git_status<CR>", + desc = "Git status", + }, + { + "<leader>ch", + "<cmd>Telescope commands_history<CR>", + desc = "Commands history", + }, + { + "<leader>e", + "<cmd>Telescope diagnostics<CR>", + desc = "Diagnostics", + }, + { + "gi", + "<cmd>Telescope lsp_implementations<CR>", + desc = "LSP implementations", + }, + { + "gr", + "<cmd>Telescope lsp_references<CR>", + desc = "LSP references", + }, }, config = function() local actions = require("telescope.actions") @@ -28,5 +85,6 @@ return { }, }, }) + require("telescope").load_extension("fzf") end, -} +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/tree.lua b/config/nvim/lua/plugins/tree.lua index 30c0599..e002f49 100644 --- a/config/nvim/lua/plugins/tree.lua +++ b/config/nvim/lua/plugins/tree.lua @@ -20,6 +20,7 @@ return { }, git = { enable = true, + ignore = false, }, renderer = { group_empty = true, @@ -37,4 +38,20 @@ return { enable = true, }, }, -} + keys = { + { + "<C-c>", + function() + local api = require("nvim-tree.api") + local global_cwd = vim.fn.getcwd(-1, -1) + api.tree.change_root(global_cwd) + end, + desc = "Change tree root to CWD", + }, + { + "<F3>", + "<cmd>NvimTreeToggle<CR>", + desc = "Toggle file tree", + }, + }, +}
\ No newline at end of file diff --git a/config/nvim/lua/theme/colors.lua b/config/nvim/lua/theme/colors.lua index dd9d491..dd6f804 100644 --- a/config/nvim/lua/theme/colors.lua +++ b/config/nvim/lua/theme/colors.lua @@ -37,7 +37,7 @@ if vim.o.background == "dark" then local diffadd = "#6abf40" local diffdelete = "#d2322d" local diffchange = "#ec8013" - local statusline = "#162022" + local statusline = "#2c3043" local comment = "#dfdf8e" local dim_comment = "#696969" local mistake = { @@ -60,7 +60,7 @@ if vim.o.background == "dark" then yellow = "#cd974b", } local comment_fg = vim.g.alabaster_dim_comments and dim_comment or comment - local pmenu_bg = "#182325" + local pmenu_bg = "#252525" local float_bg = vim.g.alabaster_floatborder and bg or pmenu_bg local floatborder = vim.g.alabaster_floatborder and { bg = bg, fg = "#333333" } or { @@ -69,13 +69,13 @@ if vim.o.background == "dark" then } theme = { Comment = { fg = comment_fg }, - ColorColumn = { bg = "#182325" }, + ColorColumn = { bg = "#252525" }, Conceal = { fg = "#b0b0b0" }, Cursor = { bg = active, fg = "#000000" }, -- lCursor { }, -- the character under the cursor when |language-mapping| is used (see 'guicursor') -- CursorIM { }, -- like Cursor, but used when in IME mode |CursorIM| - CursorColumn = { bg = "#182325" }, - CursorLine = { bg = "#182325" }, + CursorColumn = { bg = "#252525" }, + CursorLine = { bg = "#252525" }, Directory = { fg = ansi.blue }, DiffAdd = { bg = "#244032", fg = "#56d364" }, DiffDelete = { bg = "#462c32", fg = "#f85149" }, @@ -86,7 +86,7 @@ if vim.o.background == "dark" then TermCursorNC = { fg = bg, bg = fg }, ErrorMsg = { fg = error, bg = mistake.bg }, VertSplit = { fg = "#2b3d40" }, - Folded = { bg = "#182325", fg = "#7d7d7d" }, + Folded = { bg = "#252525", fg = "#7d7d7d" }, FoldColumn = { bg = bg, fg = "#4d4d4d" }, SignColumn = {}, IncSearch = { bg = ansi.yellow, fg = bg }, @@ -108,7 +108,7 @@ if vim.o.background == "dark" then PmenuSbar = { bg = "#212f31" }, PmenuThumb = { bg = "#47666b" }, Question = { fg = diffadd }, - QuickFixLine = { bg = "#182325" }, + QuickFixLine = { bg = "#252525" }, Search = { bg = "#354c50" }, SpecialKey = { fg = ansi.cyan }, SpellBad = { undercurl = 1, sp = ansi.red }, @@ -485,6 +485,7 @@ else VertSplit = { fg = "#abbdc0" }, Folded = { bg = "#dddddd", fg = "#7d7d7d" }, FoldColumn = { bg = bg, fg = "#4d4d4d" }, + SignColumn = {}, IncSearch = { bg = active, fg = fg }, -- Substitute { }, -- |:substitute| replacement text highlighting diff --git a/config/nvim/lua/theme/init.lua b/config/nvim/lua/theme/init.lua new file mode 100644 index 0000000..b635c55 --- /dev/null +++ b/config/nvim/lua/theme/init.lua @@ -0,0 +1,7 @@ +local M = {} + +M.setup = function() + vim.cmd("colorscheme alabaster") +end + +return M |
