From 32af05026f215cadd001e4f21d5ed2826bea9422 Mon Sep 17 00:00:00 2001 From: seth Date: Wed, 5 Apr 2023 03:07:41 -0400 Subject: add more lsp plugins to neovim --- .luarc.json | 3 + users/seth/programs/neovim/config/general.lua | 65 -------- users/seth/programs/neovim/config/init.lua | 3 +- users/seth/programs/neovim/config/lsp.lua | 159 ------------------ .../programs/neovim/config/plugins/general.lua | 65 ++++++++ users/seth/programs/neovim/config/plugins/init.lua | 2 + users/seth/programs/neovim/config/plugins/lsp.lua | 180 +++++++++++++++++++++ users/seth/programs/neovim/default.nix | 7 + 8 files changed, 258 insertions(+), 226 deletions(-) create mode 100644 .luarc.json delete mode 100644 users/seth/programs/neovim/config/general.lua delete mode 100644 users/seth/programs/neovim/config/lsp.lua create mode 100644 users/seth/programs/neovim/config/plugins/general.lua create mode 100644 users/seth/programs/neovim/config/plugins/init.lua create mode 100644 users/seth/programs/neovim/config/plugins/lsp.lua diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..23b9ee2 --- /dev/null +++ b/.luarc.json @@ -0,0 +1,3 @@ +{ + "workspace.checkThirdParty": false +} \ No newline at end of file diff --git a/users/seth/programs/neovim/config/general.lua b/users/seth/programs/neovim/config/general.lua deleted file mode 100644 index 349c191..0000000 --- a/users/seth/programs/neovim/config/general.lua +++ /dev/null @@ -1,65 +0,0 @@ ----- autopairs -require("nvim-autopairs").setup({ - disable_filetype = { "TeleScopePrompt" }, -}) - ----- catppuccin -local compile_path = vim.fn.stdpath("cache") .. "/catppuccin-nvim" -vim.fn.mkdir(compile_path, "p") -vim.opt.runtimepath:append(compile_path) - -require("catppuccin").setup({ - compile_path = compile_path, - flavour = "mocha", -- mocha, macchiato, frappe, latte - integrations = { - barbar = true, - cmp = true, - gitsigns = true, - leap = true, - native_lsp = { - enabled = true, - }, - nvimtree = true, - treesitter_context = true, - treesitter = true, - telescope = true, - lsp_trouble = true, - }, - no_italic = true, -}) -vim.api.nvim_command("colorscheme catppuccin") - ----- bufferline -require("bufferline").setup({ - options = { - highlights = require("catppuccin.groups.integrations.bufferline").get(), - diagnostics = "nvim_lsp", - numbers = "ordinal", - }, -}) - ----- gitsigns -require("gitsigns").setup({}) - ----- leap -require("leap").add_default_mappings() - ----- lualine -require("lualine").setup({ - options = { - theme = "catppuccin", - }, - extensions = { "nvim-tree" }, -}) - ----- nvim-tree -require("nvim-tree").setup({}) - ----- treesitter -require("nvim-treesitter.configs").setup({ - auto_install = false, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, -}) diff --git a/users/seth/programs/neovim/config/init.lua b/users/seth/programs/neovim/config/init.lua index 5555078..d19b85f 100644 --- a/users/seth/programs/neovim/config/init.lua +++ b/users/seth/programs/neovim/config/init.lua @@ -14,6 +14,5 @@ cmd("filetype plugin indent on") opt.termguicolors = true require("getchoo.keybinds") -require("getchoo.general") -require("getchoo.lsp") require("getchoo.filetypes") +require("getchoo.plugins") diff --git a/users/seth/programs/neovim/config/lsp.lua b/users/seth/programs/neovim/config/lsp.lua deleted file mode 100644 index 0df0f2f..0000000 --- a/users/seth/programs/neovim/config/lsp.lua +++ /dev/null @@ -1,159 +0,0 @@ ----- cmp -local cmp = require("cmp") -local luasnip = require("luasnip") -local mapping = cmp.mapping - -local has_words_before = function() - local line, col = unpack(vim.api.nvim_win_get_cursor(0)) - return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil -end - -local feedkey = function(key, mode) - vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) -end -local cmp_on_attach = function(_, bufnr) - vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") -end - -local capabilities = require("cmp_nvim_lsp").default_capabilities() -capabilities.textDocument.completion.completionItem.snippetSupport = true - -require("cmp").setup({ - snippet = { - expand = function(args) - vim.fn["vsnip#anonymous"](args.body) - luasnip.lsp_expand(args.body) - end, - }, - - mapping = mapping.preset.insert({ - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_next_item() - elseif luasnip.expand_or_jumpable() then - luasnip.expand_or_jump() - elseif vim.fn["vsnip#available"](1) == 1 then - feedkey("(vsnip-expand-or-jump)", "") - elseif has_words_before() then - cmp.complete() - else - fallback() - end - end, { "i", "s" }), - [""] = cmp.mapping(function(fallback) - if cmp.visible() then - cmp.select_prev_item() - elseif luasnip.jumpable(-1) then - luasnip.jump(-1) - elseif vim.fn["vsnip#available"](-1) == 1 then - feedkey("(vsnip-jump-prev)", "") - else - fallback() - end - end, { "i", "s" }), - }), - - sources = cmp.config.sources({ - { name = "nvim_lsp" }, - { name = "luasnip" }, - { name = "vsnip" }, - { name = "buffer" }, - { name = "path" }, - }), - - capabilities = capabilities, - - on_attach = cmp_on_attach, -}) - ----- fidget -require("fidget").setup({}) - ----- lsp sources -local null_ls = require("null-ls") -local diagnostics = null_ls.builtins.diagnostics -local formatting = null_ls.builtins.formatting - -local sources = { - lsp_servers = { "rust_analyzer", "pyright", "bashls", "clangd" }, - null_ls = { - diagnostics.alex, - diagnostics.codespell, - diagnostics.deadnix, - diagnostics.pylint, - diagnostics.shellcheck, - diagnostics.statix, - formatting.alejandra, - formatting.codespell, - formatting.prettier, - formatting.rustfmt, - formatting.stylua, - formatting.yapf, - }, -} - ---- lsp config -local all_config = { - capabilities = capabilities, - on_attach = cmp_on_attach, -} - -local servers = {} -for _, server in ipairs(sources.lsp_servers) do - servers[server] = all_config -end - -servers["lua_ls"] = { - capabilities = capabilities, - on_attach = cmp_on_attach, - settings = { - Lua = { - runtime = { - version = "LuaJIT", - }, - diagnostics = { - globals = { "vim" }, - }, - workspace = { - library = vim.api.nvim_get_runtime_file("", true), - }, - }, - }, -} - -for server, settings in pairs(servers) do - require("lspconfig")[server].setup(settings) -end - ----- null-ls --- auto-format -local lsp_formatting = function(bufnr) - vim.lsp.buf.format({ - filter = function(client) - return client.name == "null-ls" - end, - bufnr = bufnr, - }) -end - -local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) -local formatting_on_attach = function(client, bufnr) - if client.supports_method("textDocument/formatting") then - vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) - vim.api.nvim_create_autocmd("BufWritePre", { - group = augroup, - buffer = bufnr, - callback = function() - lsp_formatting(bufnr) - end, - }) - end -end - -require("null-ls").setup({ - on_attach = formatting_on_attach, - sources = sources.null_ls, -}) - ----- trouble -require("trouble").setup({}) diff --git a/users/seth/programs/neovim/config/plugins/general.lua b/users/seth/programs/neovim/config/plugins/general.lua new file mode 100644 index 0000000..349c191 --- /dev/null +++ b/users/seth/programs/neovim/config/plugins/general.lua @@ -0,0 +1,65 @@ +---- autopairs +require("nvim-autopairs").setup({ + disable_filetype = { "TeleScopePrompt" }, +}) + +---- catppuccin +local compile_path = vim.fn.stdpath("cache") .. "/catppuccin-nvim" +vim.fn.mkdir(compile_path, "p") +vim.opt.runtimepath:append(compile_path) + +require("catppuccin").setup({ + compile_path = compile_path, + flavour = "mocha", -- mocha, macchiato, frappe, latte + integrations = { + barbar = true, + cmp = true, + gitsigns = true, + leap = true, + native_lsp = { + enabled = true, + }, + nvimtree = true, + treesitter_context = true, + treesitter = true, + telescope = true, + lsp_trouble = true, + }, + no_italic = true, +}) +vim.api.nvim_command("colorscheme catppuccin") + +---- bufferline +require("bufferline").setup({ + options = { + highlights = require("catppuccin.groups.integrations.bufferline").get(), + diagnostics = "nvim_lsp", + numbers = "ordinal", + }, +}) + +---- gitsigns +require("gitsigns").setup({}) + +---- leap +require("leap").add_default_mappings() + +---- lualine +require("lualine").setup({ + options = { + theme = "catppuccin", + }, + extensions = { "nvim-tree" }, +}) + +---- nvim-tree +require("nvim-tree").setup({}) + +---- treesitter +require("nvim-treesitter.configs").setup({ + auto_install = false, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, +}) diff --git a/users/seth/programs/neovim/config/plugins/init.lua b/users/seth/programs/neovim/config/plugins/init.lua new file mode 100644 index 0000000..b123949 --- /dev/null +++ b/users/seth/programs/neovim/config/plugins/init.lua @@ -0,0 +1,2 @@ +require("getchoo.plugins.general") +require("getchoo.plugins.lsp") diff --git a/users/seth/programs/neovim/config/plugins/lsp.lua b/users/seth/programs/neovim/config/plugins/lsp.lua new file mode 100644 index 0000000..9aee630 --- /dev/null +++ b/users/seth/programs/neovim/config/plugins/lsp.lua @@ -0,0 +1,180 @@ +---- cmp +local cmp = require("cmp") +local luasnip = require("luasnip") +local mapping = cmp.mapping + +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +local feedkey = function(key, mode) + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) +end +local cmp_on_attach = function(_, bufnr) + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") +end + +local capabilities = require("cmp_nvim_lsp").default_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +require("cmp").setup({ + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + luasnip.lsp_expand(args.body) + end, + }, + + mapping = mapping.preset.insert({ + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + elseif vim.fn["vsnip#available"](1) == 1 then + feedkey("(vsnip-expand-or-jump)", "") + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + elseif vim.fn["vsnip#available"](-1) == 1 then + feedkey("(vsnip-jump-prev)", "") + else + fallback() + end + end, { "i", "s" }), + [""] = mapping.scroll_docs(-4), + [""] = mapping.scroll_docs(4), + [""] = mapping.complete(), + [""] = mapping.abort(), + [""] = mapping.confirm({ select = true }), + }), + + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "vsnip" }, + { name = "buffer" }, + { name = "path" }, + }), + + capabilities = capabilities, + + on_attach = cmp_on_attach, +}) + +---- fidget +require("fidget").setup() + +---- lsp sources +local null_ls = require("null-ls") +local diagnostics = null_ls.builtins.diagnostics +local formatting = null_ls.builtins.formatting + +local sources = { + lsp_servers = { + "bashls", + "clangd", + "pyright", + "rust_analyzer", + "tsserver", + --"tailwindcss", + "nimls", + }, + null_ls = { + diagnostics.actionlint, + diagnostics.alex, + diagnostics.codespell, + diagnostics.deadnix, + diagnostics.eslint, + diagnostics.markdownlint, + diagnostics.pylint, + diagnostics.shellcheck, + diagnostics.statix, + formatting.alejandra, + formatting.beautysh, + formatting.codespell, + formatting.just, + formatting.markdownlint, + formatting.nimpretty, + formatting.prettier, + formatting.rustfmt, + formatting.shellharden, + formatting.stylua, + formatting.yapf, + }, +} + +--- lsp config +local all_config = { + capabilities = capabilities, + on_attach = cmp_on_attach, +} + +local servers = {} +for _, server in ipairs(sources.lsp_servers) do + servers[server] = all_config +end + +servers["lua_ls"] = { + capabilities = capabilities, + on_attach = cmp_on_attach, + settings = { + Lua = { + runtime = { + version = "LuaJIT", + }, + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = vim.api.nvim_get_runtime_file("", true), + }, + }, + }, +} + +for server, settings in pairs(servers) do + require("lspconfig")[server].setup(settings) +end + +---- null-ls +-- auto-format +local lsp_formatting = function(bufnr) + vim.lsp.buf.format({ + filter = function(client) + return client.name == "null-ls" + end, + bufnr = bufnr, + }) +end + +local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) +local formatting_on_attach = function(client, bufnr) + if client.supports_method("textDocument/formatting") then + vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) + vim.api.nvim_create_autocmd("BufWritePre", { + group = augroup, + buffer = bufnr, + callback = function() + lsp_formatting(bufnr) + end, + }) + end +end + +require("null-ls").setup({ + on_attach = formatting_on_attach, + sources = sources.null_ls, +}) + +---- trouble +require("trouble").setup() diff --git a/users/seth/programs/neovim/default.nix b/users/seth/programs/neovim/default.nix index 6d5809b..22f684d 100644 --- a/users/seth/programs/neovim/default.nix +++ b/users/seth/programs/neovim/default.nix @@ -3,19 +3,26 @@ enable = true; defaultEditor = true; extraPackages = with pkgs; [ + actionlint alejandra + beautysh codespell deadnix + just llvmPackages_15.clang llvmPackages_15.libclang nodePackages.alex nodePackages.bash-language-server + nodePackages.eslint + nodePackages.markdownlint-cli nodePackages.prettier nodePackages.pyright + nodePackages.typescript-language-server pylint rust-analyzer rustfmt shellcheck + shellharden statix stylua sumneko-lua-language-server -- cgit v1.2.3