diff options
| author | 2026-03-27 14:13:00 +0300 | |
|---|---|---|
| committer | 2026-03-27 14:13:00 +0300 | |
| commit | 3009f160980a3856a54ca387d8c714c35fd94d49 (patch) | |
| tree | d0be23b6bd4e270b0ac33e6047ce808a6ad6da77 /config/nvim/lua/plugins | |
| parent | Added minimap nvim, dap configs, conf syntax(WIP) (diff) | |
| download | dotfiles-3009f160980a3856a54ca387d8c714c35fd94d49.tar.gz dotfiles-3009f160980a3856a54ca387d8c714c35fd94d49.tar.bz2 dotfiles-3009f160980a3856a54ca387d8c714c35fd94d49.tar.xz dotfiles-3009f160980a3856a54ca387d8c714c35fd94d49.zip | |
new version
Diffstat (limited to '')
| -rw-r--r-- | config/nvim/lua/plugins.lua | 3 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/catppuccin.lua | 24 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/claudecode.lua | 26 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/conform.lua | 2 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/dap.lua | 254 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/lspconfig.lua | 17 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/lspsaga.lua | 1 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/lualine.lua | 1 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/multicursor.lua | 1 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/resize.lua | 1 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/rest.lua | 65 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/telescope.lua | 20 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/tree.lua | 61 | ||||
| -rw-r--r-- | config/nvim/lua/plugins/treesitter.lua | 17 |
14 files changed, 313 insertions, 180 deletions
diff --git a/config/nvim/lua/plugins.lua b/config/nvim/lua/plugins.lua index 2118756..5460a8b 100644 --- a/config/nvim/lua/plugins.lua +++ b/config/nvim/lua/plugins.lua @@ -21,11 +21,12 @@ require("lazy").setup({ require("plugins.telescope"), require("plugins.columns"), require("plugins.gitsigns"), - require("plugins.claudecode"), require("plugins.zk"), require("plugins.wrapping"), require("plugins.folding"), require("plugins.minimap"), + require("plugins.rest"), + require("plugins.catppuccin"), }, { performance = { rtp = { diff --git a/config/nvim/lua/plugins/catppuccin.lua b/config/nvim/lua/plugins/catppuccin.lua new file mode 100644 index 0000000..4387c11 --- /dev/null +++ b/config/nvim/lua/plugins/catppuccin.lua @@ -0,0 +1,24 @@ +return { + { + "catppuccin/nvim", + name = "catppuccin", + lazy = false, + priority = 1000, + config = function() + require("catppuccin").setup({ + flavour = "mocha", + integrations = { + telescope = true, + treesitter = true, + lsp_saga = true, + lualine = true, + nvimtree = true, + dap = true, + dap_ui = true, + }, + }) + vim.cmd("colorscheme catppuccin") + end, + }, +} + diff --git a/config/nvim/lua/plugins/claudecode.lua b/config/nvim/lua/plugins/claudecode.lua deleted file mode 100644 index 8533480..0000000 --- a/config/nvim/lua/plugins/claudecode.lua +++ /dev/null @@ -1,26 +0,0 @@ -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/conform.lua b/config/nvim/lua/plugins/conform.lua index e08f54a..16bb4f7 100644 --- a/config/nvim/lua/plugins/conform.lua +++ b/config/nvim/lua/plugins/conform.lua @@ -22,4 +22,4 @@ return { timeout_ms = 500, }, }, -}
\ No newline at end of file +} diff --git a/config/nvim/lua/plugins/dap.lua b/config/nvim/lua/plugins/dap.lua index 6a17265..95cb891 100644 --- a/config/nvim/lua/plugins/dap.lua +++ b/config/nvim/lua/plugins/dap.lua @@ -1,125 +1,174 @@ return { { "mfussenegger/nvim-dap", + event = "VeryLazy", + dependencies = { + "leoluz/nvim-dap-go", + }, config = function() local dap = require("dap") - dap.adapters.go = { - type = "server", - port = "${port}", - executable = { - command = "dlv", - args = { "dap", "-l", "127.0.0.1:${port}" }, - }, - } - -- Хранение истории аргументов для каждой точки входа - local _args_history = {} - - -- Функция для запроса аргументов у пользователя с историей (возвращает строку для парсинга) - local function get_args(entry_point) - local cache_key = entry_point - local default = _args_history[cache_key] or "" - local prompt = "Arguments for " .. entry_point .. ": " - local input = vim.fn.input(prompt, default) - if input and #input > 0 then - _args_history[cache_key] = input + -- Find project root (where go.mod is) + local function find_project_root() + local current = vim.fn.getcwd() + local function find_go_mod(dir) + if vim.fn.filereadable(dir .. "/go.mod") == 1 then + return dir + end + local parent = vim.fn.fnamemodify(dir, ":h") + if parent == dir or parent == "" then + return nil + end + return find_go_mod(parent) end - return _args_history[cache_key] + return find_go_mod(current) end - -- Генерация конфигураций для Go на основе точек входа - local function generate_go_configs() - local workspace_folder = vim.fn.getcwd() + -- Find all main.go files in project + local function find_main_files(root) + -- Use vim glob to find main.go files (excludes vendor) + local pattern = root .. "/**/main.go" + local files = vim.fn.glob(pattern, true, true) - -- Проверка существования .env файла в корне проекта - local env_file = nil - if vim.fn.filereadable(workspace_folder .. "/.env") == 1 then - env_file = "${workspaceFolder}/.env" + -- Filter out vendor + local main_files = {} + for _, f in ipairs(files) do + if not string.match(f, "/vendor/") then + table.insert(main_files, f) + end end + return main_files + end - local configs = {} - local entry_points = {} + -- Store last args per main file + local last_args = {} - -- Поиск точки входа: main.go в корне или cmd/*/main.go - if vim.fn.filereadable(workspace_folder .. "/main.go") == 1 then - table.insert(entry_points, { - name = "main", - path = "${workspaceFolder}", - }) + -- Custom debug function with Telescope picker + local function debug_go_custom() + local root = find_project_root() + if not root then + vim.notify("Could not find project root (go.mod)", vim.log.levels.ERROR) + return end - -- Поиск cmd/*/main.go - local cmd_dirs = vim.fn.glob(workspace_folder .. "/cmd/*", 0, 1) - for _, cmd_dir in ipairs(cmd_dirs) do - local main_path = cmd_dir .. "/main.go" - if vim.fn.filereadable(main_path) == 1 then - local entry_name = vim.fn.fnamemodify(cmd_dir, ":t") - table.insert(entry_points, { - name = entry_name, - path = cmd_dir, - }) - end + local main_files = find_main_files(root) + if #main_files == 0 then + vim.notify("No main.go files found", vim.log.levels.WARN) + return end - -- Генерация конфигураций для каждой точки входа - for _, entry in ipairs(entry_points) do - -- Базовая конфигурация без аргументов - table.insert(configs, { - type = "go", - name = "Debug " .. entry.name, - request = "launch", - program = entry.path, - cwd = "${workspaceFolder}", - envFile = env_file, - buildFlags = "", - outputMode = "remote", - }) + -- Use Telescope to pick + local telescope = require("telescope") + local actions = require("telescope.actions") + local pickers = require("telescope.pickers") + local finders = require("telescope.finders") + local conf = require("telescope.config").values - -- Конфигурация с аргументами (функция для запроса при запуске) - table.insert(configs, { - type = "go", - name = "Debug " .. entry.name .. " (args)", - request = "launch", - program = entry.path, - cwd = "${workspaceFolder}", - envFile = env_file, - buildFlags = "", - outputMode = "remote", - args = function() - local args_str = get_args(entry.name) - -- Разбиваем строку аргументов на массив - local args = {} - for arg in args_str:gmatch("%S+") do - table.insert(args, arg) - end - return args - end, - }) + -- Format: relative path + last args + local entries = {} + for _, f in ipairs(main_files) do + local rel = vim.fn.fnamemodify(f, ":.") + local args = last_args[f] or "" + table.insert(entries, { path = f, display = rel .. (args ~= "" and (" [" .. args .. "]") or "") }) end - -- Remote attach конфигурация для подключения к уже запущенному delve - table.insert(configs, { - type = "go", - name = "Remote attach (127.0.0.1:43000)", - request = "attach", - mode = "remote", - port = "43000", - host = "127.0.0.1", - }) + pickers.new({}, { + prompt_title = "Select main.go", + finder = finders.new_table({ + results = entries, + entry_maker = function(entry) + return { + value = entry.path, + display = entry.display, + ordinal = entry.display, + } + end, + }), + sorter = conf.generic_sorter({}), + attach_mappings = function(prompt_bufnr) + actions.select_default:replace(function() + local selection = require("telescope.actions.state").get_selected_entry(prompt_bufnr) + local main_path = selection.value + + -- Get last args or empty + local default_args = last_args[main_path] or "" + + vim.api.nvim_buf_delete(prompt_bufnr, { force = true }) + + -- Ask for args + vim.ui.input({ + prompt = "Args: ", + default = default_args, + }, function(input) + if input ~= nil then + -- Save args + last_args[main_path] = input - return configs + -- Parse args into table + local args_tbl = {} + if input ~= "" then + for w in string.gmatch(input, "[^%s]+") do + table.insert(args_tbl, w) + end + end + + -- Build config + local config = { + type = "go", + name = "Debug: " .. vim.fn.fnamemodify(main_path, ":t"), + request = "launch", + program = main_path, + cwd = root, + outputMode = "remote", + args = args_tbl, + } + + -- Check if already running + require("dap-go").setup() -- Ensure Go adapter is registered + if dap.session() then + dap.terminate(nil, nil, function() + dap.run(config) + end) + else + dap.run(config) + end + end + end) + end) + return true + end, + }):find() end - -- Установка конфигураций Go - dap.configurations.go = generate_go_configs() + -- Go adapter configuration + dap.configurations.go = { + { + type = "go", + name = "Debug", + request = "launch", + program = "${file}", + outputMode = "remote", + }, + { + type = "go", + name = "Debug test", + request = "launch", + mode = "test", + program = "${file}", + outputMode = "remote", + }, + { + type = "go", + name = "Debug test (package)", + request = "launch", + mode = "test", + program = "${workspaceFolder}", + outputMode = "remote", + }, + } - -- Автообновление конфигураций при открытии Go файла - vim.api.nvim_create_autocmd("BufReadPost", { - pattern = "*.go", - callback = function() - dap.configurations.go = generate_go_configs() - end, - }) + -- Register custom command + vim.api.nvim_create_user_command("DapGoCustom", debug_go_custom, {}) end, keys = { { @@ -165,6 +214,13 @@ return { desc = "Debug step out", }, { + "<leader>dd", + function() + vim.cmd("DapGoCustom") + end, + desc = "Debug Go (custom)", + }, + { "<A-b>", function() require("dap").toggle_breakpoint() @@ -183,6 +239,7 @@ return { }, { "rcarriga/nvim-dap-ui", + event = "VeryLazy", dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio", @@ -264,7 +321,6 @@ return { "leoluz/nvim-dap-go", dependencies = { "mfussenegger/nvim-dap" }, ft = "go", - -- Не используем автоconfig - конфигурации управляются в nvim-dap keys = { { "<leader>dt", diff --git a/config/nvim/lua/plugins/lspconfig.lua b/config/nvim/lua/plugins/lspconfig.lua index 59085f9..54b0ee9 100644 --- a/config/nvim/lua/plugins/lspconfig.lua +++ b/config/nvim/lua/plugins/lspconfig.lua @@ -1,30 +1,29 @@ return { "neovim/nvim-lspconfig", - dependencies = { "saghen/blink.cmp" }, keys = { { "d[", - vim.diagnostic.goto_prev, + function() vim.diagnostic.goto_prev() end, desc = "Previous diagnostic", }, { "d]", - vim.diagnostic.goto_next, + function() vim.diagnostic.goto_next() end, desc = "Next diagnostic", }, { "gD", - vim.lsp.buf.declaration, + function() vim.lsp.buf.declaration() end, desc = "Go to declaration", }, { "gd", - vim.lsp.buf.definition, + function() vim.lsp.buf.definition() end, desc = "Go to definition", }, { "K", - vim.lsp.buf.hover, + function() vim.lsp.buf.hover() end, desc = "Show documentation", }, { @@ -34,17 +33,17 @@ return { }, { "<F2>", - vim.lsp.buf.rename, + function() vim.lsp.buf.rename() end, desc = "Rename symbol", }, { "<leader>wa", - vim.lsp.buf.add_workspace_folder, + function() vim.lsp.buf.add_workspace_folder() end, desc = "Add workspace folder", }, { "<leader>wr", - vim.lsp.buf.remove_workspace_folder, + function() vim.lsp.buf.remove_workspace_folder() end, desc = "Remove workspace folder", }, { diff --git a/config/nvim/lua/plugins/lspsaga.lua b/config/nvim/lua/plugins/lspsaga.lua index 546c073..c27d61c 100644 --- a/config/nvim/lua/plugins/lspsaga.lua +++ b/config/nvim/lua/plugins/lspsaga.lua @@ -1,5 +1,6 @@ return { "nvimdev/lspsaga.nvim", + event = "VeryLazy", dependencies = { "nvim-treesitter/nvim-treesitter", -- optional "nvim-tree/nvim-web-devicons", -- optional diff --git a/config/nvim/lua/plugins/lualine.lua b/config/nvim/lua/plugins/lualine.lua index bb1842a..ba9f15c 100644 --- a/config/nvim/lua/plugins/lualine.lua +++ b/config/nvim/lua/plugins/lualine.lua @@ -1,4 +1,3 @@ -local colors = require("theme.colors") return { "nvim-lualine/lualine.nvim", opts = { diff --git a/config/nvim/lua/plugins/multicursor.lua b/config/nvim/lua/plugins/multicursor.lua index 0a762a8..a5a847b 100644 --- a/config/nvim/lua/plugins/multicursor.lua +++ b/config/nvim/lua/plugins/multicursor.lua @@ -1,6 +1,7 @@ return { "jake-stewart/multicursor.nvim", branch = "1.0", + event = "VeryLazy", config = function() local mc = require("multicursor-nvim") mc.setup() diff --git a/config/nvim/lua/plugins/resize.lua b/config/nvim/lua/plugins/resize.lua index ea3ce0c..4c08aa7 100644 --- a/config/nvim/lua/plugins/resize.lua +++ b/config/nvim/lua/plugins/resize.lua @@ -1,6 +1,7 @@ return { name = "resize", dir = "~/.config/nvim/lua/myplugins", + event = "VeryLazy", keys = { { "<C-A-Left>", diff --git a/config/nvim/lua/plugins/rest.lua b/config/nvim/lua/plugins/rest.lua new file mode 100644 index 0000000..f57b218 --- /dev/null +++ b/config/nvim/lua/plugins/rest.lua @@ -0,0 +1,65 @@ +return { + { + "rest-nvim/rest.nvim", + event = "VeryLazy", + dependencies = { + "nvim-lua/plenary.nvim", + "nvim-neotest/nvim-nio", + }, + build = ":UpdateRemotePlugins", + config = function() + require("rest-nvim").setup({ + -- Open request results in a horizontal split + split = { + horizontal = false, -- split horizontally + width = 0.4, -- split width, number represents percentage of screen + }, + -- Skip SSL verification + skip_ssl_verification = false, + -- Encode URL characters + encode_url = true, + -- Highlight response + highlight = { + enabled = true, + timeout = 200, + }, + -- Dynamic URL variable interpolation + dynamic_variables = {}, + -- Default headers + default_headers = { + ["Content-Type"] = "application/json", + }, + -- Custom curl arguments + curl_args = { + ["--max-time"] = 30, + }, + -- Format response body using gq command + response = { + hooks = { + format = true, + }, + }, + }) + + -- Set formatprg for JSON formatting + vim.api.nvim_create_autocmd({ "FileType" }, { + pattern = "json", + callback = function(args) + vim.bo[args.buf].formatprg = "jq --indent 4" + end, + }) + end, + keys = { + { + "<leader>rr", + ":Rest run<CR>", + desc = "Run HTTP request", + }, + { + "<leader>rl", + ":Rest last<CR>", + desc = "Run HTTP request (last)", + }, + }, + }, +}
\ No newline at end of file diff --git a/config/nvim/lua/plugins/telescope.lua b/config/nvim/lua/plugins/telescope.lua index e26a618..b1070c8 100644 --- a/config/nvim/lua/plugins/telescope.lua +++ b/config/nvim/lua/plugins/telescope.lua @@ -10,24 +10,24 @@ return { }, keys = { { - "<leader>ff", - "<cmd>Telescope find_files<CR>", - desc = "Find files", + "<leader>fb", + "<cmd>Telescope buffers<CR>", + desc = "Find buffers", }, { - "<leader>fg", + "<F1>", "<cmd>Telescope live_grep<CR>", desc = "Live grep", }, { - "<leader>fb", - "<cmd>Telescope current_buffer_fuzzy_find<CR>", - desc = "Find in current buffer", + "<F3>", + "<cmd>Telescope find_files<CR>", + desc = "Find files", }, { - "<F4>", - "<cmd>Telescope buffers<CR>", - desc = "Find buffers", + "<leader>ff", + "<cmd>Telescope current_buffer_fuzzy_find<CR>", + desc = "Find in current buffer", }, { "<leader>gc", diff --git a/config/nvim/lua/plugins/tree.lua b/config/nvim/lua/plugins/tree.lua index 18f217b..08fed69 100644 --- a/config/nvim/lua/plugins/tree.lua +++ b/config/nvim/lua/plugins/tree.lua @@ -1,5 +1,5 @@ local HEIGHT_RATIO = 0.8 -local WIDTH_RATIO = 0.5 +local WIDTH_RATIO = 0.25 return { "nvim-tree/nvim-tree.lua", dependencies = { @@ -33,37 +33,36 @@ return { on_attach = function(bufnr) local api = require("nvim-tree.api") api.config.mappings.default_on_attach(bufnr) - vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = vim.o.background == "dark" and "#1c1c1f" or "#e7e7e7" }) end, view = { - float = { - enable = true, - open_win_config = function() - local screen_w = vim.opt.columns:get() - local screen_h = vim.opt.lines:get() - vim.opt.cmdheight:get() - local window_w = screen_w * WIDTH_RATIO - local window_h = screen_h * HEIGHT_RATIO - local window_w_int = math.floor(window_w) - local window_h_int = math.floor(window_h) - local center_x = (screen_w - window_w) / 2 - local center_y = ((vim.opt.lines:get() - window_h) / 2) - vim.opt.cmdheight:get() - local border_bg = vim.o.background == "dark" and "#1c1c1f" or "#e7e7e7" - local border_fg = vim.o.background == "dark" and "#333333" or "#999999" - -- Force highlight for border and nvim-tree background - vim.api.nvim_set_hl(0, "FloatBorder", { fg = border_fg, bg = border_bg }) - vim.api.nvim_set_hl(0, "NvimTreeFloatBorder", { fg = border_fg, bg = border_bg }) - vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = border_bg }) - vim.api.nvim_set_hl(0, "NormalFloat", { bg = border_bg }) - return { - border = "rounded", - relative = "editor", - row = center_y, - col = center_x, - width = window_w_int, - height = window_h_int, - } - end, - }, + -- float = { + -- enable = true, + -- open_win_config = function() + -- local screen_w = vim.opt.columns:get() + -- local screen_h = vim.opt.lines:get() - vim.opt.cmdheight:get() + -- local window_w = screen_w * WIDTH_RATIO + -- local window_h = screen_h * HEIGHT_RATIO + -- local window_w_int = math.floor(window_w) + -- local window_h_int = math.floor(window_h) + -- local center_x = (screen_w - window_w) / 2 + -- local center_y = ((vim.opt.lines:get() - window_h) / 2) - vim.opt.cmdheight:get() + -- local border_bg = vim.o.background == "dark" and "#1c1c1f" or "#e7e7e7" + -- local border_fg = vim.o.background == "dark" and "#333333" or "#999999" + -- -- Force highlight for border and nvim-tree background + -- vim.api.nvim_set_hl(0, "FloatBorder", { fg = border_fg, bg = border_bg }) + -- vim.api.nvim_set_hl(0, "NvimTreeFloatBorder", { fg = border_fg, bg = border_bg }) + -- vim.api.nvim_set_hl(0, "NvimTreeNormal", { bg = border_bg }) + -- vim.api.nvim_set_hl(0, "NormalFloat", { bg = border_bg }) + -- return { + -- border = "rounded", + -- relative = "editor", + -- row = center_y, + -- col = center_x, + -- width = window_w_int, + -- height = window_h_int, + -- } + -- end, + -- }, width = function() return math.floor(vim.opt.columns:get() * WIDTH_RATIO) end, @@ -80,7 +79,7 @@ return { desc = "Change tree root to CWD", }, { - "<F3>", + "<F4>", "<cmd>NvimTreeToggle<CR>", desc = "Toggle file tree", }, diff --git a/config/nvim/lua/plugins/treesitter.lua b/config/nvim/lua/plugins/treesitter.lua index a5ec534..2884f39 100644 --- a/config/nvim/lua/plugins/treesitter.lua +++ b/config/nvim/lua/plugins/treesitter.lua @@ -6,7 +6,21 @@ return { enable = true, additional_vim_regex_highlighting = false, }, - ensure_installed = "all", + ensure_installed = { + "go", + "lua", + "javascript", + "typescript", + "json", + "yaml", + "python", + "bash", + "markdown", + "html", + "css", + "rust", + "templ", + }, ignore_install = { "gdhsader", "phpdoc", "org" }, indent = { enable = true }, auto_install = true, @@ -35,7 +49,6 @@ return { }, }, }, - build = ":TSUpdate", dependencies = { { "nvim-treesitter/nvim-treesitter-textobjects" }, { |
