diff options
Diffstat (limited to 'nvim/.config')
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins.lua | 8 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/dap.lua | 129 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua | 39 | ||||
-rw-r--r-- | nvim/.config/nvim/lua/tobyvin/utils.lua | 8 |
4 files changed, 150 insertions, 34 deletions
diff --git a/nvim/.config/nvim/lua/tobyvin/plugins.lua b/nvim/.config/nvim/lua/tobyvin/plugins.lua index f19af6d..31a685b 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins.lua @@ -199,7 +199,7 @@ M.plugins = function(use) use({ "kevinhwang91/nvim-bqf", requires = { - "nvim-treesitter", + "nvim-treesitter/nvim-treesitter", "junegunn/fzf", }, ft = "qf", @@ -218,7 +218,6 @@ M.plugins = function(use) requires = { "nvim-lua/plenary.nvim", "BurntSushi/ripgrep", - "nvim-telescope/telescope-dap.nvim", "nvim-telescope/telescope-packer.nvim", "nvim-telescope/telescope-github.nvim", { "nvim-telescope/telescope-fzf-native.nvim", run = "make" }, @@ -402,9 +401,10 @@ M.plugins = function(use) use({ "mfussenegger/nvim-dap", requires = { - "theHamsta/nvim-dap-virtual-text", "rcarriga/nvim-dap-ui", - "Pocco81/DAPInstall.nvim", + { "theHamsta/nvim-dap-virtual-text", requires = "nvim-treesitter/nvim-treesitter" }, + { "nvim-telescope/telescope-dap.nvim", requires = "nvim-telescope/telescope.nvim" }, + "leoluz/nvim-dap-go", }, config = function() require("tobyvin.plugins.dap").setup() diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua b/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua index 9b9a0c5..989d244 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/dap.lua @@ -1,4 +1,49 @@ -local M = {} +local utils = require("tobyvin.utils") +local M = { + dapui_win = nil, + dapui_tab = nil, +} + +M.set_custom_breakpoint = function() + vim.ui.input({ prompt = "Condition: " }, function(condition) + vim.ui.input({ prompt = "Hit condition: " }, function(hit_condition) + vim.ui.input({ prompt = "Log point message: " }, function(log_message) + require("dap").set_breakpoint(condition, hit_condition, log_message) + end) + end) + end) +end + +M.eval = function() + vim.ui.input({ prompt = "Expr: " }, function(input) + require("dapui").eval(input, {}) + end) +end + +M.open_in_tab = function() + if M.dapui_win and vim.api.nvim_win_is_valid(M.dapui_win) then + vim.api.nvim_set_current_win(M.dapui_win) + return + end + + vim.cmd("tabedit %") + M.dapui_win = vim.fn.win_getid() + M.dapui_tab = vim.api.nvim_win_get_tabpage(M.dapui_win) + + require("dapui").open({}) +end + +M.close_tab = function() + require("dapui").close({}) + + if M.dapui_tab and vim.api.nvim_tabpage_is_valid(M.dapui_tab) then + local tabnr = vim.api.nvim_tabpage_get_number(M.dapui_tab) + vim.cmd("tabclose " .. tabnr) + end + + M.dapui_win = nil + M.dapui_tab = nil +end M.setup = function() local status_ok, dap = pcall(require, "dap") @@ -7,6 +52,7 @@ M.setup = function() return end + -- TODO: Break these configs out into seperate module, similar to my LSP configs -- Debugpy dap.adapters.python = { type = "executable", @@ -79,35 +125,62 @@ M.setup = function() } dap.configurations.c = dap.configurations.cpp + + -- Disabled in favor of rust-tools + -- TODO: integrate rust-tools.nvim into this config -- dap.configurations.rust = dap.configurations.cpp - -- nnoremap <silent> <F5> <Cmd>lua require'dap'.continue()<CR> - -- nnoremap <silent> <F10> <Cmd>lua require'dap'.step_over()<CR> - -- nnoremap <silent> <F11> <Cmd>lua require'dap'.step_into()<CR> - -- nnoremap <silent> <F12> <Cmd>lua require'dap'.step_out()<CR> - -- nnoremap <silent> <Leader>b <Cmd>lua require'dap'.toggle_breakpoint()<CR> - -- nnoremap <silent> <Leader>B <Cmd>lua require'dap'.set_breakpoint(vim.fn.input('Breakpoint condition: '))<CR> - -- nnoremap <silent> <Leader>lp <Cmd>lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))<CR> - -- nnoremap <silent> <Leader>dr <Cmd>lua require'dap'.repl.open()<CR> - -- nnoremap <silent> <Leader>dl <Cmd>lua require'dap'.run_last()<CR> - - -- vim.api.nvim_create_user_command("Debug", dap.continue, { force = true }) - -- vim.api.nvim_create_user_command("BreakpointToggle", dap.toggle_breakpoint, { force = true }) - -- vim.api.nvim_create_user_command("BreakpointCond", function() dap.set_breakpoint(vim.fn.input("Breakpoint condition: ")) end, { force = true }) - -- vim.api.nvim_create_user_command("BreakpointLog", function() dap.set_breakpoint(nil, nil, vim.fn.input('Log point message: ')) end, { force = true }) - -- vim.api.nvim_create_user_command("REPL", dap.repl.open, { force = true }) - - -- require("which-key").register({ - -- d = { - -- name = "DAP", - -- b = { , "Format" }, - -- F = { M.toggle_auto_format, "Toggle Auto-Format" }, - -- }, - -- }, { prefix = "<leader>", buffer = 0 }) - - if not pcall(require, "telescope") then - require("telescope").load_extension("dap") - end + -- Language specific plugins + require("dap-go").setup() + + -- Virtual text + require("nvim-dap-virtual-text").setup() + + -- DAPUI + require("dapui").setup() + + dap.listeners.before.event_terminated["close_repl"] = dap.repl.close + dap.listeners.before.event_exited["close_repl"] = dap.repl.close + + -- Attach DAP UI to DAP events + dap.listeners.after.event_initialized["dapui_config"] = M.open_in_tab + dap.listeners.before.event_terminated["dapui_config"] = M.close_tab + dap.listeners.before.event_exited["dapui_config"] = M.close_tab + dap.listeners.before.disconnect["dapui_config"] = M.close_tab + + -- Telescope + require("telescope").load_extension("dap") + + -- Keymaps + vim.keymap.set("n", "<F5>", dap.continue, { desc = "Continue" }) + vim.keymap.set("n", "<F10>", dap.step_over, { desc = "Step Over" }) + vim.keymap.set("n", "<F11>", dap.step_into, { desc = "Step Into" }) + vim.keymap.set("n", "<F12>", dap.step_out, { desc = "Step Out" }) + + local nmap = utils.create_map_group("n", "<leader>d", { desc = "Debug" }) + nmap("d", dap.continue, { desc = "Continue" }) + nmap("a", dap.step_over, { desc = "Step Over" }) + nmap("i", dap.step_into, { desc = "Step Into" }) + nmap("o", dap.step_out, { desc = "Step Out" }) + nmap("q", dap.terminate, { desc = "Terminate" }) + + nmap("b", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" }) + nmap("B", M.set_custom_breakpoint, { desc = "Custom Breakpoint" }) + + nmap("c", require("telescope").extensions.dap.commands, { desc = "Commands" }) + nmap("C", require("telescope").extensions.dap.configurations, { desc = "Configurations" }) + nmap("l", require("telescope").extensions.dap.list_breakpoints, { desc = "List Breakpoints" }) + nmap("v", require("telescope").extensions.dap.variables, { desc = "Variables" }) + nmap("f", require("telescope").extensions.dap.frames, { desc = "Frames" }) + + nmap("e", M.eval, { desc = "Eval" }) + + -- Signs + vim.fn.sign_define("DapBreakpoint", utils.debug_signs.breakpoint) + vim.fn.sign_define("DapBreakpointCondition", utils.debug_signs.condition) + vim.fn.sign_define("DapBreakpointRejected", utils.debug_signs.rejected) + vim.fn.sign_define("DapStopped", utils.debug_signs.stopped) + vim.fn.sign_define("DapLogPoint", utils.debug_signs.logpoint) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua b/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua index 8f9277a..f0e2e0c 100644 --- a/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua +++ b/nvim/.config/nvim/lua/tobyvin/plugins/gruvbox-flat.lua @@ -1,12 +1,47 @@ +---@diagnostic disable: undefined-field local M = {} M.setup = function() vim.opt.background = "dark" - local colors = require("gruvbox.colors").setup() - vim.g.gruvbox_colors = { bg_statusline = colors.line_cursor } vim.g.gruvbox_flat_style = "hard" vim.g.gruvbox_transparent = true + + local colors = require("gruvbox.colors").setup({}) + local theme = require("gruvbox.theme").setup({}) + + vim.g.gruvbox_colors = { bg_statusline = colors.bg_highlight } + vim.g.gruvbox_theme = { + debugBreakpoint = { bg = theme.base.SignColumn.bg, fg = "error" }, + } + vim.cmd([[colorscheme gruvbox-flat]]) + + local ns_id = vim.api.nvim_create_namespace("gruvbox") + + -- TODO: figure out why dap/dapui highlights are not being used + -- nvim-dap + vim.api.nvim_set_hl(ns_id, "DapBreakpoint", { link = "debugBreakpoint" }) + vim.api.nvim_set_hl(ns_id, "DapStopped", { link = "debugPC" }) + + -- nvim-dap-ui + vim.api.nvim_set_hl(ns_id, "DapUIVariable", { link = "TSVariable" }) + vim.api.nvim_set_hl(ns_id, "DapUIScope", { link = "TSNamespace" }) + vim.api.nvim_set_hl(ns_id, "DapUIType", { link = "Type" }) + vim.api.nvim_set_hl(ns_id, "DapUIModifiedValue", { link = "Keyword" }) + vim.api.nvim_set_hl(ns_id, "DapUIDecoration", { link = "PreProc" }) + vim.api.nvim_set_hl(ns_id, "DapUIThread", { link = "String" }) + vim.api.nvim_set_hl(ns_id, "DapUIStoppedThread", { link = "Special" }) + vim.api.nvim_set_hl(ns_id, "DapUIFrameName", { link = "Normal" }) + vim.api.nvim_set_hl(ns_id, "DapUISource", { link = "TSKeyword" }) + vim.api.nvim_set_hl(ns_id, "DapUILineNumber", { link = "TSOperator" }) + vim.api.nvim_set_hl(ns_id, "DapUIFloatBorder", { link = "FloatBorder" }) + vim.api.nvim_set_hl(ns_id, "DapUIWatchesEmpty", { link = "LspDiagnosticsError" }) + vim.api.nvim_set_hl(ns_id, "DapUIWatchesValue", { link = "String" }) + vim.api.nvim_set_hl(ns_id, "DapUIWatchesError", { link = "LspDiagnosticsError" }) + vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsPath", { link = "Keyword" }) + vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsInfo", { link = "LspDiagnosticsInfo" }) + vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsCurrentLine", { link = "DapStopped" }) + vim.api.nvim_set_hl(ns_id, "DapUIBreakpointsLine", { link = "DapUILineNumber" }) end return M diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua index d419064..081affb 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils.lua @@ -88,6 +88,14 @@ M.diagnostic_signs = { hint = { text = "", texthl = "DiagnosticSignHint" }, } +M.debug_signs = { + breakpoint = { text = "", texthl = "debugBreakpoint" }, + condition = { text = "ﳁ", texthl = "debugBreakpoint" }, + rejected = { text = "", texthl = "debugBreakpoint" }, + logpoint = { text = "", texthl = "debugBreakpoint" }, + stopped = { text = "", texthl = "debugBreakpoint", linehl = "debugPC", numhl = "debugPC" }, +} + setmetatable(M.diagnostic_signs, { __index = function() return M.diagnostic_signs.info |