From 19ee36a8be4d0b0e71cfce5fca3994275fb2f015 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Tue, 6 Aug 2024 16:29:02 +0200 Subject: [PATCH] nixvim(gdb): install and config dap for gdb (and which-key) dap: debugger adapter protocol --- home-manager/flake.lock | 2 +- home-manager/nixvim/config/dap.nix | 188 +++++++++++++++++++++++ home-manager/nixvim/config/default.nix | 4 + home-manager/nixvim/config/which-key.nix | 3 + 4 files changed, 196 insertions(+), 1 deletion(-) create mode 100644 home-manager/nixvim/config/dap.nix create mode 100644 home-manager/nixvim/config/which-key.nix diff --git a/home-manager/flake.lock b/home-manager/flake.lock index 84774bc..6ffb5ee 100644 --- a/home-manager/flake.lock +++ b/home-manager/flake.lock @@ -526,7 +526,7 @@ }, "locked": { "lastModified": 1, - "narHash": "sha256-j/1eDZv4tFf5CT3KAnsNsmSAkgUUnUed1NZRtmwrOzc=", + "narHash": "sha256-e9cx42Et2WPfIxGy6d3zuNb85KWzNi5GnM7mABJtsec=", "path": "./nixvim", "type": "path" }, diff --git a/home-manager/nixvim/config/dap.nix b/home-manager/nixvim/config/dap.nix new file mode 100644 index 0000000..9d1235c --- /dev/null +++ b/home-manager/nixvim/config/dap.nix @@ -0,0 +1,188 @@ +{ + plugins.dap = { + enable = true; + extensions = { + dap-ui.enable = true; + dap-virtual-text.enable = true; + }; + adapters = { + executables = { + gdb = { + command = "gdb"; + args = [ "-i" "dap" ]; + }; + }; + }; + configurations = { + c = [ + { + name = "Launch"; + type = "gdb"; + request = "launch"; + program.__raw = # lua + '' + function() + return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. '/', "file") + end + ''; + args.__raw = # lua + '' + function() + return vim.fn.input("Args: ", "", "file") + end + ''; + cwd = ''''${workspacefolder}''; + stopOnEntry = false; + } + ]; + }; + }; + + keymaps = [ + { + mode = "n"; + key = "db"; + action = ":DapToggleBreakpoint"; + options.desc = "Toggle Breakpoint"; + } + { + mode = "n"; + key = "dc"; + action = ":DapContinue"; + options.desc = "Continue"; + } + { + mode = "n"; + key = "da"; + action = "lua require('dap').continue({ before = get_args })"; + options = { + silent = true; + desc = "Run with Args"; + }; + } + { + mode = "n"; + key = "dC"; + action = "lua require('dap').run_to_cursor()"; + options = { + silent = true; + desc = "Run to cursor"; + }; + } + { + mode = "n"; + key = "dg"; + action = "lua require('dap').goto_()"; + options = { + silent = true; + desc = "Go to line (no execute)"; + }; + } + { + mode = "n"; + key = "di"; + action = ":DapStepInto"; + options = { + silent = true; + desc = "Step into"; + }; + } + { + mode = "n"; + key = "dj"; + action = " + lua require('dap').down() + "; + options = { + silent = true; + desc = "Down"; + }; + } + { + mode = "n"; + key = "dk"; + action = "lua require('dap').up()"; + options = { + silent = true; + desc = "Up"; + }; + } + { + mode = "n"; + key = "dl"; + action = "lua require('dap').run_last()"; + options = { + silent = true; + desc = "Run Last"; + }; + } + { + mode = "n"; + key = "do"; + action = ":DapStepOut"; + options = { + silent = true; + desc = "Step Out"; + }; + } + { + mode = "n"; + key = "dO"; + action = ":DapStepOver"; + options = { + silent = true; + desc = "Step Over"; + }; + } + { + mode = "n"; + key = "dp"; + action = "lua require('dap').pause()"; + options = { + silent = true; + desc = "Pause"; + }; + } + { + mode = "n"; + key = "dr"; + action = ":DapToggleRepl"; + options = { + silent = true; + desc = "Toggle REPL"; + }; + } + { + mode = "n"; + key = "ds"; + action = "lua require('dap').session()"; + options = { + silent = true; + desc = "Session"; + }; + } + { + mode = "n"; + key = "dt"; + action = ":DapTerminate"; + options = { + silent = true; + desc = "Terminate"; + }; + } + { + mode = "n"; + key = "du"; + action.__raw = # lua + '' + function() + require("dapui").toggle() + end + ''; + options = { + desc = "Toggle Debugger UI"; + silent = true; + }; + } + ]; +} diff --git a/home-manager/nixvim/config/default.nix b/home-manager/nixvim/config/default.nix index 4687b9d..1b60ba8 100644 --- a/home-manager/nixvim/config/default.nix +++ b/home-manager/nixvim/config/default.nix @@ -8,6 +8,7 @@ # appearence ./bufferline.nix ./lualine.nix + ./which-key.nix # file and search utilities ./telescope.nix @@ -18,6 +19,9 @@ ./treesitter.nix ./nix.nix + # debugging + ./dap.nix + # autocompletion ./cmp.nix ]; diff --git a/home-manager/nixvim/config/which-key.nix b/home-manager/nixvim/config/which-key.nix new file mode 100644 index 0000000..6d02309 --- /dev/null +++ b/home-manager/nixvim/config/which-key.nix @@ -0,0 +1,3 @@ +{ + plugins.which-key.enable = true; +}