diff --git a/flake.lock b/flake.lock index 5bc256e..4e39f54 100644 --- a/flake.lock +++ b/flake.lock @@ -173,6 +173,22 @@ "type": "github" } }, + "plugin-cmp-dap": { + "flake": false, + "locked": { + "lastModified": 1668340530, + "narHash": "sha256-w+gGaZxXjb2B0dMXhfduEQKtO5CmQnuUdh4otpcsFuc=", + "owner": "rcarriga", + "repo": "cmp-dap", + "rev": "d16f14a210cd28988b97ca8339d504533b7e09a4", + "type": "github" + }, + "original": { + "owner": "rcarriga", + "repo": "cmp-dap", + "type": "github" + } + }, "plugin-cmp-nvim-lsp": { "flake": false, "locked": { @@ -927,6 +943,7 @@ "plugin-bufdelete-nvim": "plugin-bufdelete-nvim", "plugin-catppuccin": "plugin-catppuccin", "plugin-cmp-buffer": "plugin-cmp-buffer", + "plugin-cmp-dap": "plugin-cmp-dap", "plugin-cmp-nvim-lsp": "plugin-cmp-nvim-lsp", "plugin-cmp-path": "plugin-cmp-path", "plugin-cmp-treesitter": "plugin-cmp-treesitter", diff --git a/flake.nix b/flake.nix index 9558eb2..b050e84 100644 --- a/flake.nix +++ b/flake.nix @@ -105,6 +105,9 @@ plugin-cmp-treesitter.url = "github:ray-x/cmp-treesitter"; plugin-cmp-treesitter.flake = false; + plugin-cmp-dap.url = "github:rcarriga/cmp-dap"; + plugin-cmp-dap.flake = false; + # snippets plugin-vim-vsnip.url = "github:hrsh7th/vim-vsnip"; plugin-vim-vsnip.flake = false; @@ -219,6 +222,7 @@ enableFormat = overrideable true; enableTreesitter = overrideable true; enableExtraDiagnostics = overrideable true; + enableDebugger = overrideable true; nix.enable = overrideable true; markdown.enable = overrideable true; diff --git a/modules/completion/default.nix b/modules/completion/default.nix index 3a4892c..4281c94 100644 --- a/modules/completion/default.nix +++ b/modules/completion/default.nix @@ -8,6 +8,8 @@ with lib; with builtins; let cfg = config.vim.autocomplete; lspkindEnabled = config.vim.lsp.enable && config.vim.lsp.lspkind.enable; + debuggerEnabled = config.vim.debugger.enable; + builtSources = concatMapStringsSep "\n" @@ -86,12 +88,14 @@ in { }; config = mkIf cfg.enable { - vim.startPlugins = [ - "nvim-cmp" - "cmp-buffer" - "cmp-vsnip" - "cmp-path" - ]; + vim.startPlugins = + [ + "nvim-cmp" + "cmp-buffer" + "cmp-vsnip" + "cmp-path" + ] + ++ optional debuggerEnabled "cmp-dap"; vim.autocomplete.sources = { "nvim-cmp" = null; @@ -175,12 +179,24 @@ in { then "lspkind.cmp_format(lspkind_opts)" else cfg.formatting.format }, - } + }, + ${optionalString debuggerEnabled '' + enabled = function() + return vim.api.nvim_buf_get_option(0, "buftype") ~= "prompt" + or require("cmp_dap").is_dap_buffer() + end, + ''} }) ${optionalString (config.vim.autopairs.enable && config.vim.autopairs.type == "nvim-autopairs") '' local cmp_autopairs = require('nvim-autopairs.completion.cmp') cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done({ map_char = { text = ""} })) ''} + + ${optionalString debuggerEnabled '' + cmp.setup.filetype({ "dap-repl", "dapui_watches", "dapui_hover" }, { + sources = { name = "dap" }; + }) + ''} ''); vim.snippets.vsnip.enable = diff --git a/modules/debugger/default.nix b/modules/debugger/default.nix new file mode 100644 index 0000000..6f695b3 --- /dev/null +++ b/modules/debugger/default.nix @@ -0,0 +1,58 @@ +{ + config, + lib, + pkgs, + ... +}: +with lib; +with builtins; let + cfg = config.vim.debugger; +in { + options.vim.debugger = { + enable = mkEnableOption "LSP, also enabled automatically through null-ls and lspconfig options"; + + port = mkOption { + description = "Port to start the debugger on"; + type = types.int; + default = 13000; + }; + + enrichConfig = mkOption { + description = "Lua script that enriches the config"; + type = types.lines; + default = ""; + example = nvim.nmd.literalAsciiDoc '' + [source,lua] + --- + if config["cargo"] ~= nil then on_config(cargo_inspector(config)) end + --- + ''; + }; + }; + + config = mkIf cfg.enable { + vim.startPlugins = ["nvim-dap"]; + + vim.autocomplete.sources = {"nvim_lsp" = "[LSP]";}; + + vim.luaConfigRC.dap-setup = '' + local dap = require('dap') + + local codelldb_bin = "${pkgs.code-lldb}/share/vscode/extensions/vadimcn.vscode-lldb/adapter/codelldb" + local codelldb_lib = "${pkgs.code-lldb}/share/vscode/extensions/vadimcn.vscode-lldb/lldb/lib/liblldb.dylib" + local port = "${port}", + + dap.adapters.codelldb = { + type = 'server', + port = "${port}", + executable = { + command = codelldb_bin, + args = {"--liblldb", codelldb_lib, "--port", "${port}"}, + enrich_config = function(config, on_config) + ${enrichConfig} + end, + } + } + ''; + }; +} diff --git a/modules/languages/default.nix b/modules/languages/default.nix index 0eea090..0165158 100644 --- a/modules/languages/default.nix +++ b/modules/languages/default.nix @@ -27,5 +27,6 @@ in { enableTreesitter = mkEnable "treesitter"; enableFormat = mkEnable "formatting"; enableExtraDiagnostics = mkEnable "extra diagnostics"; + enableDebugger = mkEnable "debuggers"; }; } diff --git a/modules/modules.nix b/modules/modules.nix index 12a3ef5..a3c74a2 100644 --- a/modules/modules.nix +++ b/modules/modules.nix @@ -21,6 +21,7 @@ ./telescope ./git ./build + ./debugger ]; pkgsModule = {config, ...}: {