diff --git a/config/lsp/conform.nix b/config/lsp/conform.nix new file mode 100644 index 0000000..4a459b6 --- /dev/null +++ b/config/lsp/conform.nix @@ -0,0 +1,37 @@ +{ helpers, pkgs, ... }: { + plugins.conform-nvim = { + enable = true; + formatAfterSave = '' + { + format_after_save = { + lsp_format = "fallback", + }, + } + ''; + formattersByFt = { + python = [ "black" ]; + c = [ "clang-format" ]; + cpp = [ "clang-format" ]; + cmake = [ "cmake_format" ]; + nix = [ "nixfmt" ]; + # Standalone scalafmt is too slow, so we use it as a fallback + scala = helpers.mkRaw '' + { scalafmt, lsp_format = "prefer" } + ''; + toml = [ "taplo" ]; + yaml = [ "yq" ]; + json = [ "jq" ]; + }; + }; + + extraPackages = with pkgs; [ + black + clang-tools + cmake-format + jq + nixfmt-rfc-style + scalafmt + taplo + yq + ]; +} diff --git a/config/lsp/default.nix b/config/lsp/default.nix index 5ea86d0..4bda908 100644 --- a/config/lsp/default.nix +++ b/config/lsp/default.nix @@ -1,5 +1,6 @@ { imports = [ + ./conform.nix ./lsp.nix ./lsp-format.nix ./lspkind.nix diff --git a/config/lsp/lsp.nix b/config/lsp/lsp.nix index 1b2061d..e3058cf 100644 --- a/config/lsp/lsp.nix +++ b/config/lsp/lsp.nix @@ -1,4 +1,4 @@ -{ helpers, ... }: +{ pkgs, helpers, ... }: { plugins.lsp = { @@ -69,6 +69,14 @@ }; }; }; + onAttach = '' + require("lsp_signature").on_attach({ + bind = true, + handler_opts = { + border = "rounded" + }; + }, bufnr) + ''; }; keymaps = [ @@ -85,4 +93,20 @@ }; } ]; + + extraConfigLua = '' + require("lspconfig").asm_lsp.setup { + filetypes = { "asm", "s", "S" } + } + require("lspconfig").verible.setup { } + ''; + + extraPlugins = with pkgs.vimPlugins; [ + lsp_signature-nvim + ]; + + extraPackages = with pkgs; [ + asm-lsp + verible + ]; } diff --git a/config/lsp/nvim-metals.nix b/config/lsp/nvim-metals.nix index ddb8077..fa8e983 100644 --- a/config/lsp/nvim-metals.nix +++ b/config/lsp/nvim-metals.nix @@ -8,12 +8,28 @@ extraPackages = [ pkgs.metals + pkgs.scalafmt ]; autoGroups.nvim_metals_group = { clear = true; }; + extraConfigLua = '' + metals_config = require("metals").bare_config() + metals_config.init_options.statusBarProvider = "off" + metals_config.settings = { + showInferredType = true, + showImplicitArguments = false, + showImplicitConversionsAndClasses = false, + metalsBinaryPath = "${pkgs.lib.getExe pkgs.metals}", + excludedPackages = { "akka.actor.typed.javadsl", "com.github.swagger.akka.javadsl" }, + useGlobalExecutable = true, + verboseCompilation = true + } + metals_config.capabilities = require("cmp_nvim_lsp").default_capabilities() + ''; + autoCmd = [ { event = "FileType"; @@ -21,18 +37,10 @@ desc = "Initialize nvim-metals"; callback = helpers.mkRaw '' function() - metals_config = require("metals").bare_config() - metals_config.init_options.statusBarProvider = "off" - metals_config.settings = { - showInferredType = true, - showImplicitArguments = false, - showImplicitConversionsAndClasses = false, - metalsBinaryPath = "${pkgs.lib.getExe pkgs.metals}", - useGlobalExecutable = true - } require("metals").initialize_or_attach(metals_config) end ''; + pattern = [ "scala" "sbt" ]; } ];