diff --git a/docs/release-notes/rl-0.8.md b/docs/release-notes/rl-0.8.md index 621e976f..63be2209 100644 --- a/docs/release-notes/rl-0.8.md +++ b/docs/release-notes/rl-0.8.md @@ -170,3 +170,4 @@ [Libadoxon](https://github.com/Libadoxon) - Add [git-conflict](https://github.com/akinsho/git-conflict.nvim) plugin for resolving git conflicts +- Add formatters for go: [gofmt](https://go.dev/blog/gofmt), [golines](https://github.com/segmentio/golines) and [gofumpt](https://github.com/mvdan/gofumpt) diff --git a/modules/plugins/languages/go.nix b/modules/plugins/languages/go.nix index e0eded0d..3ac9ae77 100644 --- a/modules/plugins/languages/go.nix +++ b/modules/plugins/languages/go.nix @@ -34,6 +34,43 @@ }; }; + defaultFormat = "gofmt"; + formats = { + gofmt = { + package = pkgs.go; + nullConfig = '' + table.insert( + ls_sources, + null_ls.builtins.formatting.gofmt.with({ + command = "${cfg.format.package}/bin/gofmt", + }) + ) + ''; + }; + gofumpt = { + package = pkgs.gofumpt; + nullConfig = '' + table.insert( + ls_sources, + null_ls.builtins.formatting.gofumpt.with({ + command = "${cfg.format.package}/bin/gofumpt", + }) + ) + ''; + }; + golines = { + package = pkgs.golines; + nullConfig = '' + table.insert( + ls_sources, + null_ls.builtins.formatting.golines.with({ + command = "${cfg.format.package}/bin/golines", + }) + ) + ''; + }; + }; + defaultDebugger = "delve"; debuggers = { delve = { @@ -67,6 +104,22 @@ in { }; }; + format = { + enable = mkEnableOption "Go formatting" // {default = config.vim.languages.enableFormat;}; + + type = mkOption { + description = "Go formatter to use"; + type = enum (attrNames formats); + default = defaultFormat; + }; + + package = mkOption { + description = "Go formatter package"; + type = package; + default = formats.${cfg.format.type}.package; + }; + }; + dap = { enable = mkOption { description = "Enable Go Debug Adapter via nvim-dap-go plugin"; @@ -99,6 +152,11 @@ in { vim.lsp.lspconfig.sources.go-lsp = servers.${cfg.lsp.server}.lspConfig; }) + (mkIf cfg.format.enable { + vim.lsp.null-ls.enable = true; + vim.lsp.null-ls.sources.go-format = formats.${cfg.format.type}.nullConfig; + }) + (mkIf cfg.dap.enable { vim = { startPlugins = ["nvim-dap-go"];