# Debug Adapter Protocol client implementation for Neovim. { config, lib, ... }: { config.programs.nixvim = lib.mkIf config.development.nixvim.enable { plugins.dap = { enable = true; # Example adapter — adjust/add per language you actually debug. # This one assumes you have `netcoredbg`/`codelldb`/etc. available, # swap for whatever debuggers you use. adapters.servers = { # Example: python debugpy adapter # python = { # command = "${pkgs.python3Packages.debugpy}/bin/python"; # args = [ "-m" "debugpy.adapter" ]; # }; }; }; keymaps = [ # Core DAP controls { mode = "n"; key = "dc"; action = "lua require('dap').continue()"; options.desc = "Debug: Continue"; } { mode = "n"; key = "di"; action = "lua require('dap').step_into()"; options.desc = "Debug: Step Into"; } { mode = "n"; key = "do"; action = "lua require('dap').step_over()"; options.desc = "Debug: Step Over"; } { mode = "n"; key = "dO"; action = "lua require('dap').step_out()"; options.desc = "Debug: Step Out"; } { mode = "n"; key = "db"; action = "lua require('dap').toggle_breakpoint()"; options.desc = "Debug: Toggle Breakpoint"; } { mode = "n"; key = "dB"; action = "lua require('dap').set_breakpoint(vim.fn.input('Breakpoint condition: '))"; options.desc = "Debug: Conditional Breakpoint"; } { mode = "n"; key = "dl"; action = "lua require('dap').run_last()"; options.desc = "Debug: Run Last"; } { mode = "n"; key = "dt"; action = "lua require('dap').terminate()"; options.desc = "Debug: Terminate"; } { mode = "n"; key = "dr"; action = "lua require('dap').repl.toggle()"; options.desc = "Debug: Toggle REPL"; } { mode = "n"; key = "dd"; action = "lua vim.diagnostic.open_float()"; options.desc = "Diagnostics: Line diagnostics float"; } { mode = "n"; key = "dx"; action = "lua vim.diagnostic.close()"; options.desc = "Diagnostics: Close float"; } { mode = "n"; key = "dn"; action = "lua vim.diagnostic.goto_next()"; options.desc = "Diagnostics: Next"; } { mode = "n"; key = "dp"; action = "lua vim.diagnostic.goto_prev()"; options.desc = "Diagnostics: Previous"; } { mode = "n"; key = "dq"; action = "lua vim.diagnostic.setloclist()"; options.desc = "Diagnostics: Load location list"; } ]; # Auto open/close dap-ui with the debug session lifecycle extraConfigLua = '' local dap, dapui = require("dap"), require("dapui") dap.listeners.after.event_initialized["dapui_config"] = function() dapui.open() end dap.listeners.before.event_terminated["dapui_config"] = function() dapui.close() end dap.listeners.before.event_exited["dapui_config"] = function() dapui.close() end ''; }; }