diff --git a/home/dot_config/nvim/lua/custom/plugins/dap.lua b/home/dot_config/nvim/lua/custom/plugins/dap.lua new file mode 100644 index 0000000..f4205da --- /dev/null +++ b/home/dot_config/nvim/lua/custom/plugins/dap.lua @@ -0,0 +1,140 @@ +return { + 'mfussenegger/nvim-dap', + dependencies = { + -- Nice ui + 'rcarriga/nvim-dap-ui', + 'nvim-neotest/nvim-nio', + + -- Debug adapters auto + 'mason-org/mason.nvim', + 'jay-babu/mason-nvim-dap.nvim', + + -- Adapters + 'mfussenegger/nvim-dap-python', + }, + config = function() + local dap, dapui = require 'dap', require 'dapui' + + -- this config uses mason to configure debugpy and connects dap-python to the mason debugpy venv + local mason_path = vim.fn.glob(vim.fn.stdpath 'data' .. '/mason/') + 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 = { + -- Update this to ensure that you have the debuggers for the langs you want + 'debugpy', + }, + } + + -- 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 = '⏏', + }, + }, + } + + 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 + + require('dap-python').setup(mason_path .. 'packages/debugpy/venv/bin/python') + + dap.configurations.python = { + { + type = 'debugpy', + request = 'attach', + connect = { + port = 7777, + host = '127.0.0.1', + }, + justMyCode = false, + django = true, + mode = 'remote', + name = 'debug python', + pathMappings = { + { + localRoot = vim.fn.getcwd(), + remoteRoot = '.', + }, + }, + }, + } + end, + keys = { + -- Basic debugging keymaps, feel free to change to your liking! + { + 'dc', + function() + require('dap').continue() + end, + desc = 'Debug: Start/Continue', + }, + { + 'dsi', + function() + require('dap').step_into() + end, + desc = 'Debug: Step Into', + }, + { + 'dso', + function() + require('dap').step_over() + end, + desc = 'Debug: Step Over', + }, + { + 'dsO', + function() + require('dap').step_out() + end, + desc = 'Debug: Step Out', + }, + { + 'db', + function() + require('dap').toggle_breakpoint() + end, + desc = 'Debug: Toggle Breakpoint', + }, + { + 'dB', + 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. + { + 'du', + function() + require('dapui').toggle() + end, + desc = 'Debug: See last session result.', + }, + }, +} +-- vim: ts=2 sts=2 sw=2 et