From 6349cff878c36336ed9027423aaebf98ac883501 Mon Sep 17 00:00:00 2001 From: Arpit Chakladar <54011232+arpitchakladar@users.noreply.github.com> Date: Tue, 1 Oct 2024 13:19:07 +0530 Subject: Using noice.nvim for better looking UI for neovim. --- .../tools/editor/neovim/plugins/config/default.nix | 3 + .../editor/neovim/plugins/config/lsp-config.lua | 70 +++++++++++++--------- .../neovim/plugins/config/noice.mustache.lua | 10 ++++ modules/tools/editor/neovim/plugins/default.nix | 1 + 4 files changed, 57 insertions(+), 27 deletions(-) create mode 100644 modules/tools/editor/neovim/plugins/config/noice.mustache.lua diff --git a/modules/tools/editor/neovim/plugins/config/default.nix b/modules/tools/editor/neovim/plugins/config/default.nix index fb2ac1a..6dff0b9 100644 --- a/modules/tools/editor/neovim/plugins/config/default.nix +++ b/modules/tools/editor/neovim/plugins/config/default.nix @@ -4,6 +4,9 @@ let extra = if config.tools.editor.neovim.configuration == "full" then '' ${builtins.readFile ./lsp-config.lua} +${builtins.readFile (config.scheme { + template = builtins.readFile ./noice.mustache.lua; +})} '' else ""; in diff --git a/modules/tools/editor/neovim/plugins/config/lsp-config.lua b/modules/tools/editor/neovim/plugins/config/lsp-config.lua index 43cdb95..88f063d 100644 --- a/modules/tools/editor/neovim/plugins/config/lsp-config.lua +++ b/modules/tools/editor/neovim/plugins/config/lsp-config.lua @@ -1,28 +1,42 @@ local lspconfig = require("lspconfig"); local filetype_to_lsp = { - lua = "lua_ls", - cpp = "clangd", - c = "clangd", - python = "pyright", - javascript = "tsserver", - typescript = "tsserver", - go = "gopls", - html = "html", - css = "cssls", - json = "jsonls", - bash = "bashls", - graphql = "graphql", - dockerfile = "dockerls", - php = "phpactor", - rust = "rust_analyzer", - haskell = "hls", - deno = "denols", - vim = "vimls", - elixir = "elixirls", - clojure = "clojure_lsp", - scala = "scala_metals", - ruby = "sorbet", + lua = { server = "lua_ls", executable = "lua-language-server" }, + cpp = { server = "clangd", executable = "clangd" }, + c = { server = "clangd", executable = "clangd" }, + python = { server = "pyright", executable = "pyright-langserver" }, + javascript = { server = "tsserver", executable = "typescript-language-server" }, + typescript = { server = "tsserver", executable = "typescript-language-server" }, + go = { server = "gopls", executable = "gopls" }, + html = { server = "html", executable = "vscode-html-language-server" }, + css = { server = "cssls", executable = "vscode-css-language-server" }, + json = { server = "jsonls", executable = "vscode-json-language-server" }, + bash = { server = "bashls", executable = "bash-language-server" }, + graphql = { server = "graphql", executable = "graphql-lsp" }, + dockerfile = { server = "dockerls", executable = "docker-langserver" }, + php = { server = "phpactor", executable = "phpactor" }, + rust = { server = "rust_analyzer", executable = "rust-analyzer" }, + haskell = { server = "hls", executable = "haskell-language-server-wrapper" }, + deno = { server = "denols", executable = "deno" }, + vim = { server = "vimls", executable = "vim-language-server" }, + elixir = { server = "elixirls", executable = "elixir-ls" }, + clojure = { server = "clojure_lsp", executable = "clojure-lsp" }, + scala = { server = "scala_metals", executable = "metals" }, + ruby = { server = "sorbet", executable = "srb" }, + zig = { server = "zls", executable = "zls" }, + kotlin = { server = "kotlin_language_server", executable = "kotlin-language-server" }, + java = { server = "jdtls", executable = "jdtls" }, + dart = { server = "dartls", executable = "dart" }, + yaml = { server = "yamlls", executable = "yaml-language-server" }, + perl = { server = "perlls", executable = "perl" }, + r = { server = "r_language_server", executable = "R" }, + tex = { server = "texlab", executable = "texlab" }, + swift = { server = "sourcekit", executable = "sourcekit-lsp" }, + svelte = { server = "svelteserver", executable = "svelteserver" }, + terraform = { server = "terraformls", executable = "terraform-ls" }, + vue = { server = "vls", executable = "vls" }, + markdown = { server = "marksman", executable = "marksman" }, + yaml = { server = "yamlls", executable = "yaml-language-server" }, }; -- Keeping track of all the lsps that have been already configured @@ -30,17 +44,19 @@ local lsp_setup_done = {}; -- Function to setup LSP based on filetype local function setup_lsp(filetype) - local lsp_server = filetype_to_lsp[filetype]; - if lsp_server and not lsp_setup_done[lsp_server] then - lsp_setup_done[lsp_server] = true; - lspconfig[lsp_server].setup({}); + local lsp = filetype_to_lsp[filetype]; + if lsp and not lsp_setup_done[lsp.server] then + lsp_setup_done[lsp.server] = true; + if vim.fn.executable(lsp.executable) then + lspconfig[lsp.server].setup({}); + vim.lsp.start(); + end end end vim.keymap.set("n", "gd", vim.lsp.buf.definition, { noremap = true, silent = true }); vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { noremap = true, silent = true }); vim.keymap.set("n", "gr", vim.lsp.buf.references, { noremap = true, silent = true }); -vim.keymap.set("i", "", vim.lsp.buf.completion, { noremap = true, silent = true }); vim.keymap.set("n", "gk", vim.lsp.buf.hover, { noremap = true, silent = true }); vim.api.nvim_create_autocmd("FileType", { diff --git a/modules/tools/editor/neovim/plugins/config/noice.mustache.lua b/modules/tools/editor/neovim/plugins/config/noice.mustache.lua new file mode 100644 index 0000000..a258c8e --- /dev/null +++ b/modules/tools/editor/neovim/plugins/config/noice.mustache.lua @@ -0,0 +1,10 @@ +require("noice").setup(); + +vim.api.nvim_set_hl(0, "NoiceCommandOutput", { fg = "#{{base05-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceCmdline", { fg = "#{{base05-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceCmdlinePopup", { fg = "#{{base05-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceCmdlinePopupBorder", { fg = "#{{base03-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceError", { fg = "#{{base08-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceWarning", { fg = "#{{base0A-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceInfo", { fg = "#{{base0C-hex}}", bg = "#{{base00-hex}}" }); +vim.api.nvim_set_hl(0, "NoiceHint", { fg = "#{{base0B-hex}}", bg = "#{{base00-hex}}" }); diff --git a/modules/tools/editor/neovim/plugins/default.nix b/modules/tools/editor/neovim/plugins/default.nix index 6e4f844..d2a58b1 100644 --- a/modules/tools/editor/neovim/plugins/default.nix +++ b/modules/tools/editor/neovim/plugins/default.nix @@ -16,6 +16,7 @@ ] (if config.tools.editor.neovim.configuration == "full" then [ + noice-nvim nvim-lspconfig ] else null) -- cgit v1.2.3