From 34f81b7595d80e8156355c3268b626464e9f63cc Mon Sep 17 00:00:00 2001 From: Snoweuph Date: Tue, 3 Feb 2026 23:56:20 +0100 Subject: [PATCH] languages/odin: add debugging --- docs/manual/release-notes/rl-0.9.md | 3 ++ modules/plugins/languages/odin.nix | 46 +++++++++++++++++++++++++++-- npins/sources.json | 13 ++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 651f9f4e..54523ea3 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -174,6 +174,9 @@ - Added Makefile support via `languages.make`. +- Added Debugging support to `languages.odin` with + [nvim-dap-odin](https://github.com/NANDquark/nvim-dap-odin). + [vagahbond](https://github.com/vagahbond): [codewindow.nvim]: https://github.com/gorbit99/codewindow.nvim diff --git a/modules/plugins/languages/odin.nix b/modules/plugins/languages/odin.nix index fa2254c5..6c2f7b8e 100644 --- a/modules/plugins/languages/odin.nix +++ b/modules/plugins/languages/odin.nix @@ -7,12 +7,15 @@ inherit (builtins) attrNames; inherit (lib.options) mkEnableOption mkOption; inherit (lib.modules) mkIf mkMerge; - inherit (lib.types) enum; + inherit (lib.types) enum package; + inherit (lib.nvim.dag) entryAfter; inherit (lib.meta) getExe; inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf; inherit (lib.generators) mkLuaInline; inherit (lib.nvim.attrsets) mapListToAttrs; + cfg = config.vim.languages.odin; + defaultServers = ["ols"]; servers = { ols = { @@ -32,7 +35,19 @@ }; }; - cfg = config.vim.languages.odin; + defaultDebugger = "codelldb"; + debuggers = { + codelldb = { + package = pkgs.lldb; + dapConfig = '' + dap.adapters.codelldb = { + type = 'executable', + command = '${cfg.dap.package}/bin/lldb-dap', + name = 'codelldb' + } + ''; + }; + }; in { options.vim.languages.odin = { enable = mkEnableOption "Odin language support"; @@ -51,6 +66,22 @@ in { description = "Odin LSP server to use"; }; }; + + dap = { + enable = mkEnableOption "Enable Odin Debug Adapter" // {default = config.vim.languages.enableDAP;}; + + debugger = mkOption { + description = "Odin debugger to use"; + type = enum (attrNames debuggers); + default = defaultDebugger; + }; + + package = mkOption { + description = "Odin debugger package."; + type = package; + default = debuggers.${cfg.dap.debugger}.package; + }; + }; }; config = mkIf cfg.enable (mkMerge [ @@ -67,5 +98,16 @@ in { }) cfg.lsp.servers; }) + + (mkIf cfg.dap.enable { + vim = { + startPlugins = ["nvim-dap-odin"]; + debugger.nvim-dap.sources.odin-debugger = debuggers.${cfg.dap.debugger}.dapConfig; + pluginRC.nvim-dap-odin = entryAfter ["nvim-dap"] '' + require('nvim-dap-odin').setup() + ''; + debugger.nvim-dap.enable = true; + }; + }) ]); } diff --git a/npins/sources.json b/npins/sources.json index d9d1f9cc..823dc68c 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -1860,6 +1860,19 @@ "url": "https://github.com/leoluz/nvim-dap-go/archive/b4421153ead5d726603b02743ea40cf26a51ed5f.tar.gz", "hash": "sha256-wg9kiW2eAMmg4bvgqaAS9kt7qaVsIWl36BNqRbhZIgo=" }, + "nvim-dap-odin": { + "type": "Git", + "repository": { + "type": "GitHub", + "owner": "NANDquark", + "repo": "nvim-dap-odin" + }, + "branch": "main", + "submodules": false, + "revision": "4df40d467f4ea5195e2f3b813d970eb15172b052", + "url": "https://github.com/NANDquark/nvim-dap-odin/archive/4df40d467f4ea5195e2f3b813d970eb15172b052.tar.gz", + "hash": "sha256-/bW22gWrPamK4jDMJYDv/3od+vIUb/eYICnHWnv8MVU=" + }, "nvim-dap-ui": { "type": "Git", "repository": {