diff --git a/docs/manual/release-notes/rl-0.9.md b/docs/manual/release-notes/rl-0.9.md index 79633e00..cb2c63e6 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. 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/languages/go.nix b/modules/plugins/languages/go.nix index da3700a7..a240bb98 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; @@ -231,6 +232,45 @@ in { 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; + description = "gomodifytags binary to use"; + }; + gotests = mkOption { + type = str; + default = getExe pkgs.gotests; + description = "gotests binary to use"; + }; + impl = mkOption { + type = str; + default = getExe pkgs.impl; + description = "impl binary to use"; + }; + iferr = mkOption { + type = str; + default = getExe pkgs.iferr; + description = "iferr binary to use"; + }; + json2go = mkOption { + type = str; + default = literalExpression "getExe inputs.self.packages.$${pkgs.stdenv.hostPlatform.system}.json2go"; + description = "json2go binary to use"; + }; + }; + }; + }; + }; }; config = mkIf cfg.enable (mkMerge [ @@ -292,5 +332,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": {