From b78980492c2c5f90bcae0ec619d835a149285b7d Mon Sep 17 00:00:00 2001 From: seth Date: Sun, 2 Apr 2023 10:07:46 -0400 Subject: refactor + add figet/bufferline to neovim config --- users/seth/programs/neovim/config/general.lua | 65 ++++++++ users/seth/programs/neovim/config/init.lua | 3 +- users/seth/programs/neovim/config/keybinds.lua | 18 +- users/seth/programs/neovim/config/lsp.lua | 159 ++++++++++++++++++ users/seth/programs/neovim/config/plugins.lua | 218 ------------------------- users/seth/programs/neovim/default.nix | 4 +- 6 files changed, 237 insertions(+), 230 deletions(-) create mode 100644 users/seth/programs/neovim/config/general.lua create mode 100644 users/seth/programs/neovim/config/lsp.lua delete mode 100644 users/seth/programs/neovim/config/plugins.lua (limited to 'users/seth') diff --git a/users/seth/programs/neovim/config/general.lua b/users/seth/programs/neovim/config/general.lua new file mode 100644 index 0000000..349c191 --- /dev/null +++ b/users/seth/programs/neovim/config/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/init.lua b/users/seth/programs/neovim/config/init.lua index 34590e6..5555078 100644 --- a/users/seth/programs/neovim/config/init.lua +++ b/users/seth/programs/neovim/config/init.lua @@ -14,5 +14,6 @@ cmd("filetype plugin indent on") opt.termguicolors = true require("getchoo.keybinds") -require("getchoo.plugins") +require("getchoo.general") +require("getchoo.lsp") require("getchoo.filetypes") diff --git a/users/seth/programs/neovim/config/keybinds.lua b/users/seth/programs/neovim/config/keybinds.lua index ab4b3a3..2b0ac70 100644 --- a/users/seth/programs/neovim/config/keybinds.lua +++ b/users/seth/programs/neovim/config/keybinds.lua @@ -1,3 +1,5 @@ +vim.g.mapleader = "," + local opts = { noremap = true, silent = true } local set = function(mode, key, vimcmd) vim.keymap.set(mode, key, vimcmd, opts) @@ -9,28 +11,24 @@ end) for i = 1, 9 do set("n", "" .. i, function() - local vimcmd = "BufferGoto " .. i + local vimcmd = "BufferLineGoToBuffer " .. i vim.cmd(vimcmd) end) end -set("n", "p", function() - vim.cmd("BufferPick") -end) - set("n", "q", function() - vim.cmd("BufferClose") + vim.cmd("BufferLinePickClose") end) -set("n", "e", vim.diagnostic.open_float) +set("n", "e", vim.diagnostic.open_float) set("n", "[d", vim.diagnostic.goto_prev) set("n", "]d", vim.diagnostic.goto_next) -set("n", "q", vim.diagnostic.setloclist) +set("n", "u", vim.diagnostic.setloclist) -set("n", "f", function() +set("n", "f", function() vim.cmd("Telescope") end) -set("n", "t", function() +set("n", "p", function() vim.cmd("TroubleToggle") end) diff --git a/users/seth/programs/neovim/config/lsp.lua b/users/seth/programs/neovim/config/lsp.lua new file mode 100644 index 0000000..0df0f2f --- /dev/null +++ b/users/seth/programs/neovim/config/lsp.lua @@ -0,0 +1,159 @@ +---- 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.lua b/users/seth/programs/neovim/config/plugins.lua deleted file mode 100644 index 2ec3f7b..0000000 --- a/users/seth/programs/neovim/config/plugins.lua +++ /dev/null @@ -1,218 +0,0 @@ ----- 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({ - animation = true, - auto_hide = true, - highlights = require("catppuccin.groups.integrations.bufferline").get(), - icons = true, - maximum_padding = 2, - semantic_letters = true, -}) - ----- 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, -}) - ----- gitsigns -require("gitsigns").setup({}) - ----- leap -require("leap").add_default_mappings() - ----- 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 - ----- lualine -require("lualine").setup({ - options = { - theme = "catppuccin", - }, - extensions = { "nvim-tree" }, -}) - ----- 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, -}) - ----- nvim-tree -require("nvim-tree").setup({}) - ----- treesitter -require("nvim-treesitter.configs").setup({ - auto_install = false, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, -}) - ----- trouble -require("trouble").setup({}) diff --git a/users/seth/programs/neovim/default.nix b/users/seth/programs/neovim/default.nix index 0b154cc..6d5809b 100644 --- a/users/seth/programs/neovim/default.nix +++ b/users/seth/programs/neovim/default.nix @@ -22,7 +22,7 @@ yapf ]; plugins = with pkgs.vimPlugins; [ - barbar-nvim + bufferline-nvim catppuccin-nvim cmp-nvim-lsp cmp-buffer @@ -30,10 +30,12 @@ cmp-path cmp-vsnip editorconfig-nvim + fidget-nvim gitsigns-nvim leap-nvim lualine-nvim luasnip + nvim-autopairs nvim-cmp nvim-lspconfig null-ls-nvim -- cgit v1.2.3