{ config, lib, ... }: with lib; with builtins; let cfg = config.vim.debugger.nvim-dap; in { config = mkMerge [ (mkIf cfg.enable { vim.startPlugins = ["nvim-dap"]; vim.luaConfigRC = { # TODO customizable keymaps nvim-dap = nvim.dag.entryAnywhere '' local dap = require("dap") local opts = { noremap = true, silent = true } vim.keymap.set("n", "d.", "lua require'dap'.run_last()", opts) vim.keymap.set("n", "dR", "lua require'dap'.restart()", opts) vim.keymap.set("n", "dq", "lua require'dap'.terminate()", opts) vim.keymap.set("n", "db", "lua require'dap'.toggle_breakpoint()", opts) vim.keymap.set("n", "dc", "lua require'dap'.continue()", opts) vim.keymap.set("n", "dl", "lua require'dap'.set_breakpoint(nil, nil, vim.fn.input('Log point message: '))", opts) vim.keymap.set("n", "dgb", "lua require'dap'.continue()", opts) vim.keymap.set("n", "dgc", "lua require'dap'.run_to_cursor()", opts) vim.keymap.set("n", "dgi", "lua require'dap'.step_into()", opts) vim.keymap.set("n", "dgo", "lua require'dap'.step_out()", opts) vim.keymap.set("n", "dgI", "lua require'dap'.down()", opts) vim.keymap.set("n", "dgO", "lua require'dap'.up()", opts) vim.keymap.set("n", "dgj", "lua require'dap'.step_over()", opts) vim.keymap.set("n", "dgk", "lua require'dap'.step_back()", opts) vim.keymap.set("n", "dr", "lua require'dap'.repl.toggle()", opts) vim.keymap.set("n", "dh", "lua require'dap.ui.widgets'.hover()", opts) ''; } // mapAttrs (_: v: (nvim.dag.entryAfter ["nvim-dap"] v)) cfg.sources; }) (mkIf (cfg.enable && cfg.ui.enable) { vim.startPlugins = ["nvim-dap-ui"]; vim.luaConfigRC.nvim-dap-ui = nvim.dag.entryAfter ["nvim-dap"] ('' local dapui = require("dapui") require("dapui").setup() vim.keymap.set("n", "du", "lua require'dapui'.toggle()", opts) vim.keymap.set({ "n", "v" }, "dd", "lua require'dapui'.eval()", opts) '' + optionalString cfg.ui.autoStart '' 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 ''); }) ]; }