diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 6120a24a..39e0b423 100644 --- a/docs/manual/release-notes/rl-0.9.md +++ b/docs/manual/release-notes/rl-0.9.md @@ -208,6 +208,9 @@ - Added [`golangci-lint`](https://golangci-lint.run/) for more diagnostics. +- Added [`gopher.nvim`](https://github.com/olexsmir/gopher.nvim) for extra + actions in `languages.go`. + - updated default filetypes for [harper-ls](https://github.com/Automattic/harper) to match what they are supposed to be. @@ -277,4 +280,8 @@ https://github.com/gorbit99/codewindow.nvim - Add Elm support with [elm-language-server] +[alv-around](https://github.com/alv-around): + +- Fix `vim.assistant.codecompanion-nvim` lazy loading with [blink-cmp] + diff --git a/flake/pkgs/by-name/json2go/package.nix b/flake/pkgs/by-name/json2go/package.nix new file mode 100644 index 00000000..0c7eff1a --- /dev/null +++ b/flake/pkgs/by-name/json2go/package.nix @@ -0,0 +1,26 @@ +{ + lib, + buildGoModule, + fetchFromGitHub, +}: +buildGoModule (finalAttrs: { + pname = "json2go"; + version = "0.1.3"; + + src = fetchFromGitHub { + owner = "olexsmir"; + repo = "json2go"; + tag = "v${finalAttrs.version}"; + hash = "sha256-2QGvPLQ7CADRNURTdnHgTCK2vyRHgtdR6YFPuTL9Ymo="; + }; + + vendorHash = null; + + meta = { + description = "convert json to go type annotations"; + mainProgram = "json2go"; + homepage = "https://github.com/olexsmir/json2go"; + license = lib.licenses.unlicense; + changelog = "${finalAttrs.meta.homepage}/releases/tag/${finalAttrs.version}"; + }; +}) diff --git a/modules/plugins/assistant/codecompanion/config.nix b/modules/plugins/assistant/codecompanion/config.nix index fa863b74..6fbb60fb 100644 --- a/modules/plugins/assistant/codecompanion/config.nix +++ b/modules/plugins/assistant/codecompanion/config.nix @@ -18,6 +18,18 @@ in { package = "codecompanion-nvim"; setupModule = "codecompanion"; inherit (cfg) setupOpts; + + # Register commands with lz.n so Neovim recognizes them immediately + cmd = [ + "CodeCompanion" + "CodeCompanionChat" + "CodeCompanionActions" + "CodeCompanionCmd" + ]; + + # Ensure the plugin loads when entering Insert/Cmdline mode + # so the module is ready when blink.cmp requests it + event = ["InsertEnter" "CmdlineEnter"]; }; }; @@ -33,9 +45,20 @@ in { ]; }; - autocomplete.nvim-cmp = { - sources = {codecompanion-nvim = "[codecompanion]";}; - sourcePlugins = ["codecompanion-nvim"]; + autocomplete = { + nvim-cmp = { + sources = {codecompanion-nvim = "[codecompanion]";}; + sourcePlugins = ["codecompanion-nvim"]; + }; + blink-cmp = { + setupOpts.sources = { + default = ["codecompanion"]; + providers.codecompanion = { + name = "CodeCompanion"; + module = "codecompanion.providers.completion.blink"; + }; + }; + }; }; }; }; diff --git a/modules/plugins/languages/go.nix b/modules/plugins/languages/go.nix index da3700a7..7c83ebf2 100644 --- a/modules/plugins/languages/go.nix +++ b/modules/plugins/languages/go.nix @@ -1,16 +1,17 @@ { + inputs, config, pkgs, lib, ... }: let inherit (builtins) attrNames; - inherit (lib.options) mkEnableOption mkOption literalMD; + inherit (lib.options) mkEnableOption mkOption literalMD literalExpression; inherit (lib.modules) mkIf mkMerge; inherit (lib.meta) getExe; inherit (lib.generators) mkLuaInline; - inherit (lib.types) bool enum package; - inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; + inherit (lib.types) bool enum package str; + inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf mkPluginSetupOption; inherit (lib.nvim.dag) entryAfter; inherit (lib.nvim.attrsets) mapListToAttrs; @@ -64,9 +65,11 @@ gofmt = { command = "${pkgs.go}/bin/gofmt"; }; + gofumpt = { command = getExe pkgs.gofumpt; }; + golines = { command = "${pkgs.golines}/bin/golines"; }; @@ -168,7 +171,12 @@ in { enable = mkEnableOption "Go language support"; treesitter = { - enable = mkEnableOption "Go treesitter" // {default = config.vim.languages.enableTreesitter;}; + enable = + mkEnableOption "Go treesitter" + // { + default = config.vim.languages.enableTreesitter; + defaultText = literalExpression "config.vim.languages.enableTreesitter"; + }; goPackage = mkGrammarOption pkgs "go"; gomodPackage = mkGrammarOption pkgs "gomod"; @@ -178,7 +186,12 @@ in { }; lsp = { - enable = mkEnableOption "Go LSP support" // {default = config.vim.lsp.enable;}; + enable = + mkEnableOption "Go LSP support" + // { + default = config.vim.lsp.enable; + defaultText = literalExpression "config.vim.lsp.enable"; + }; servers = mkOption { type = deprecatedSingleOrListOf "vim.language.go.lsp.servers" (enum (attrNames servers)); @@ -198,51 +211,111 @@ in { }; type = mkOption { - description = "Go formatter to use"; type = deprecatedSingleOrListOf "vim.language.go.format.type" (enum (attrNames formats)); default = defaultFormat; + description = "Go formatter to use"; }; }; dap = { - enable = mkOption { - description = "Enable Go Debug Adapter via nvim-dap-go plugin"; - type = bool; - default = config.vim.languages.enableDAP; - }; + enable = + mkEnableOption "Go Debug Adapter (DAP) via `nvim-dap-go" + // { + default = config.vim.languages.enableDAP; + defaultText = literalExpression "config.vim.languages.enableDAP"; + }; debugger = mkOption { - description = "Go debugger to use"; type = enum (attrNames debuggers); default = defaultDebugger; + description = "Go debugger to use"; }; package = mkOption { - description = "Go debugger package."; type = package; default = debuggers.${cfg.dap.debugger}.package; + description = "Go debugger package."; }; }; + extraDiagnostics = { - enable = mkEnableOption "extra Go diagnostics" // {default = config.vim.languages.enableExtraDiagnostics;}; + enable = + mkEnableOption "extra Go diagnostics" + // { + default = config.vim.languages.enableExtraDiagnostics; + defaultText = literalExpression "config.vim.languages.enableExtraDiagnostic"; + }; + types = diagnostics { langDesc = "Go"; inherit diagnosticsProviders; inherit defaultDiagnosticsProvider; }; }; + + extensions = { + gopher-nvim = { + enable = mkEnableOption "Minimalistic plugin for Go development"; + setupOpts = mkPluginSetupOption "gopher-nvim" { + commands = { + go = mkOption { + type = str; + default = "go"; + description = "Go binary to use"; + }; + + gomodifytags = mkOption { + type = str; + default = getExe pkgs.gomodifytags; + defaultText = literalExpression "getExe pkgs.gomodifytags"; + description = "gomodifytags binary to use"; + }; + + gotests = mkOption { + type = str; + default = getExe pkgs.gotests; + defaultText = literalExpression "getExe pkgs.gotests"; + description = "gotests binary to use"; + }; + + impl = mkOption { + type = str; + default = getExe pkgs.impl; + defaultText = literalExpression "getExe pkgs.impl"; + description = "impl binary to use"; + }; + + iferr = mkOption { + type = str; + default = getExe pkgs.iferr; + defaultText = literalExpression "getExe pkgs.iferr"; + description = "iferr binary to use"; + }; + + json2go = mkOption { + type = str; + default = getExe inputs.self.packages.${pkgs.stdenv.hostPlatform.system}.json2go; + defaultText = literalExpression "getExe inputs.self.packages.$${pkgs.stdenv.hostPlatform.system}.json2go"; + description = "json2go binary to use"; + }; + }; + }; + }; + }; }; config = mkIf cfg.enable (mkMerge [ (mkIf cfg.treesitter.enable { - vim.treesitter.enable = true; - vim.treesitter.grammars = [ - cfg.treesitter.goPackage - cfg.treesitter.gomodPackage - cfg.treesitter.gosumPackage - cfg.treesitter.goworkPackage - cfg.treesitter.gotmplPackage - ]; + vim.treesitter = { + enable = true; + grammars = [ + cfg.treesitter.goPackage + cfg.treesitter.gomodPackage + cfg.treesitter.gosumPackage + cfg.treesitter.goworkPackage + cfg.treesitter.gotmplPackage + ]; + }; }) (mkIf cfg.lsp.enable { @@ -292,5 +365,14 @@ in { cfg.extraDiagnostics.types); }; }) + + (mkIf cfg.extensions.gopher-nvim.enable { + vim.lazy.plugins.gopher-nvim = { + package = "gopher-nvim"; + setupModule = "gopher"; + inherit (cfg.extensions.gopher-nvim) setupOpts; + ft = ["go"]; + }; + }) ]); } diff --git a/npins/sources.json b/npins/sources.json index 05b662ff..2fe8b904 100644 --- a/npins/sources.json +++ b/npins/sources.json @@ -656,6 +656,22 @@ "url": "https://github.com/ellisonleao/glow.nvim/archive/5d5954b2f22e109d4a6eba8b2618c5b96e4ee7a2.tar.gz", "hash": "sha256-CvBcmVWBgI+m+PS7p7PmsiPtTEfqx2kpIzz4mImONIc=" }, + "gopher-nvim": { + "type": "GitRelease", + "repository": { + "type": "GitHub", + "owner": "olexsmir", + "repo": "gopher.nvim" + }, + "pre_releases": false, + "version_upper_bound": null, + "release_prefix": null, + "submodules": false, + "version": "v0.6.0", + "revision": "95fdeb571d837af9efae27fea1c0131fa756ab43", + "url": "https://api.github.com/repos/olexsmir/gopher.nvim/tarball/refs/tags/v0.6.0", + "hash": "sha256-7aDjMFMCiqub/zCDJIWUIX9Zc6+vyPQOczuOFdc/6S0=" + }, "grug-far-nvim": { "type": "Git", "repository": {