diff options
| author | seth <[email protected]> | 2022-12-02 02:12:40 -0500 |
|---|---|---|
| committer | seth <[email protected]> | 2022-12-02 02:12:40 -0500 |
| commit | b673b76f41a1f48c38acb9b67657e097e5b8a61f (patch) | |
| tree | fe0090a667d419d6a27544c492d1e911eb6541ff /users/seth/programs/neovim/lua | |
| parent | aca5eff381f76bc29f25191efc281ccf50cf0e3e (diff) | |
now *most* things work :p
Diffstat (limited to 'users/seth/programs/neovim/lua')
15 files changed, 483 insertions, 0 deletions
diff --git a/users/seth/programs/neovim/lua/init.lua b/users/seth/programs/neovim/lua/init.lua new file mode 100644 index 0000000..262f556 --- /dev/null +++ b/users/seth/programs/neovim/lua/init.lua @@ -0,0 +1,39 @@ +-- +-- getchoo's neovim config (but in lua :p) +-- + +local cmd = vim.cmd +local opt = vim.opt + +require("getchoo") +require("getchoo.ftdetect") +require("getchoo.lsp") + +-- text options +opt.tabstop = 2 +opt.shiftwidth = 2 +opt.expandtab = false +opt.smartindent = true +opt.wrap = false + +-- appearance +opt.syntax = "on" +cmd("filetype plugin indent on") +opt.termguicolors = true + +require("catppuccin").setup({ + flavour = "mocha", -- mocha, macchiato, frappe, latte + integrations = { + barbar = true, + gitsigns = true, + lightspeed = true, + mason = true, + cmp = true, + nvimtree = true, + treesitter_context = true, + treesitter = true, + telescope = true, + lsp_trouble = true, + }, +}) +vim.api.nvim_command("colorscheme catppuccin") diff --git a/users/seth/programs/neovim/lua/lua/getchoo/config.lua b/users/seth/programs/neovim/lua/lua/getchoo/config.lua new file mode 100644 index 0000000..a67f734 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/config.lua @@ -0,0 +1,25 @@ +-- +-- config for regular plugins +-- + +local M = {} + +M.bufferline = { + animation = true, + auto_hide = true, + icons = true, + maximum_padding = 2, + semantic_letters = true, +} + +M.lualine = { + options = { + theme = "catppuccin", + }, + extensions = { "nvim-tree" }, +} + +M.tree = {} + +require("getchoo.keymap") +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/ftdetect.lua b/users/seth/programs/neovim/lua/lua/getchoo/ftdetect.lua new file mode 100644 index 0000000..5dd569d --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/ftdetect.lua @@ -0,0 +1,10 @@ +-- load custom file types + +local filetypes = { + filename = { + PKGBUILD = "text", + [".makepkg.conf"] = "text", + }, +} + +vim.filetype.add(filetypes) diff --git a/users/seth/programs/neovim/lua/lua/getchoo/init.lua b/users/seth/programs/neovim/lua/lua/getchoo/init.lua new file mode 100644 index 0000000..f44f622 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/init.lua @@ -0,0 +1,4 @@ +local config = require("getchoo.config") +require("bufferline").setup(config.bufferline) +require("lualine").setup(config.lualine) +require("nvim-tree").setup(config.tree) diff --git a/users/seth/programs/neovim/lua/lua/getchoo/keymap.lua b/users/seth/programs/neovim/lua/lua/getchoo/keymap.lua new file mode 100644 index 0000000..9a4484c --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/keymap.lua @@ -0,0 +1,27 @@ +-- +-- keymaps for general plugins +-- + +local opts = { noremap = true, silent = true } +local set = function(mode, key, cmd) + vim.keymap.set(mode, key, cmd, opts) +end + +set("n", "<leader>t", function() + vim.cmd("NvimTreeToggle") +end) + +for i = 1, 9 do + set("n", "<leader>" .. i, function() + local cmd = "BufferGoto " .. i + vim.cmd(cmd) + end) +end + +set("n", "<leader>p", function() + vim.cmd("BufferPick") +end) + +set("n", "<leader>q", function() + vim.cmd("BufferClose") +end) diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/cmp.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/cmp.lua new file mode 100644 index 0000000..0f0f51f --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/cmp.lua @@ -0,0 +1,67 @@ +local cmp = require("cmp") +local mapping = cmp.mapping +local luasnip = require("luasnip") + +local M = {} + +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 + +M.config = { + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + luasnip.lsp_expand(args.body) + end, + }, + mapping = mapping.preset.insert({ + ["<Tab>"] = 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("<Plug>(vsnip-expand-or-jump)", "") + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + ["<S-Tab>"] = 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("<Plug>(vsnip-jump-prev)", "") + else + fallback() + end + end, { "i", "s" }), + }), + sources = cmp.config.sources({ + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "vsnip" }, + { name = "buffer" }, + { name = "path" }, + }), +} + +local capabilities = require("cmp_nvim_lsp").default_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +M.capabilities = capabilities + +M.on_attach = function(_, bufnr) + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") +end + +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/init.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/init.lua new file mode 100644 index 0000000..1c928d3 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/init.lua @@ -0,0 +1,28 @@ +-- wrapper for all configs +local cmp = require("getchoo.lsp.config.cmp") +local lsp_config = require("getchoo.lsp.config.lsp_config") +local mason = require("getchoo.lsp.config.mason") +local null_ls = require("getchoo.lsp.config.null_ls") + +local M = {} + +M.cmp = cmp.config + +M.lsp_servers = lsp_config.servers + +M.mason_tool_installer = mason.mason_tool_installer +M.mason_lspconfig = mason.mason_lspconfig + +M.null_ls = null_ls.config + +M.treesitter = { + auto_install = true, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, +} + +M.trouble = {} + +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/lsp_config.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/lsp_config.lua new file mode 100644 index 0000000..4df3fe0 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/lsp_config.lua @@ -0,0 +1,40 @@ +local cmp = require("getchoo.lsp.config.cmp") +local sources = require("getchoo.lsp.config.sources") + +local M = {} + +local on_attach = function(client, bufnr) + cmp.on_attach(client, bufnr) +end + +local all_config = { + capabilities = cmp.capabilities, + on_attach = on_attach, +} + +local servers = {} +for _, server in ipairs(sources.lsp_servers) do + servers[server] = all_config +end + +servers["sumneko_lua"] = { + capabilities = cmp.capabilities, + on_attach = on_attach, + settings = { + Lua = { + runtime = { + version = "LuaJIT", + }, + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = vim.api.nvim_get_runtime_file("", true), + }, + }, + }, +} + +M.servers = servers + +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/mason.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/mason.lua new file mode 100644 index 0000000..6814697 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/mason.lua @@ -0,0 +1,14 @@ +-- config for mason tools +local sources = require("getchoo.lsp.config.sources") + +local M = {} + +M.mason_tool_installer = { + ensure_installed = sources.mason, +} + +M.mason_lspconfig = { + automatic_installation = true, +} + +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/null_ls.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/null_ls.lua new file mode 100644 index 0000000..42cd30e --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/null_ls.lua @@ -0,0 +1,38 @@ +local sources = require("getchoo.lsp.config.sources") + +local M = {} + +-- only use null-ls for formatting + +-- for neovim >= 8 +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() + -- local params = require("vim.lsp.util").make_formatting_params({}) + -- client.request("textDocument/formatting", params, nil, bufnr) + lsp_formatting(bufnr) -- neovim >= 8 + end, + }) + end +end + +M.config = { + on_attach = formatting_on_attach, + sources = sources.null_ls, +} + +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/sources.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/sources.lua new file mode 100644 index 0000000..1898870 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/config/sources.lua @@ -0,0 +1,27 @@ +local null_ls = require("null-ls") +local diagnostics = null_ls.builtins.diagnostics +local formatting = null_ls.builtins.formatting + +local M = { + lsp_servers = { "rust_analyzer", "pyright", "bashls" }, + null_ls = { + diagnostics.alex, + diagnostics.codespell, + diagnostics.flake8, + formatting.black, + formatting.codespell, + formatting.prettier, + formatting.rustfmt, + formatting.stylua, + }, + mason = { + "alex", + "black", + "codespell", + "flake8", + "prettier", + "stylua", + }, +} + +return M diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/init.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/init.lua new file mode 100644 index 0000000..aa3dde5 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/init.lua @@ -0,0 +1,10 @@ +-- +-- setup lsp environment +-- +require("getchoo.lsp.server") +require("getchoo.lsp.keymap") +local config = require("getchoo.lsp.config") + +require("gitsigns").setup() +require("nvim-treesitter.configs").setup(config.treesitter) +require("trouble").setup(config.trouble) diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/keymap.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/keymap.lua new file mode 100644 index 0000000..9f34ffa --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/keymap.lua @@ -0,0 +1,21 @@ +-- +-- keymaps for lsp +-- + +local opts = { noremap = true, silent = true } +local set = function(mode, key, cmd) + vim.keymap.set(mode, key, cmd, opts) +end + +set("n", "<space>e", vim.diagnostic.open_float) +set("n", "[d", vim.diagnostic.goto_prev) +set("n", "]d", vim.diagnostic.goto_next) +set("n", "<space>q", vim.diagnostic.setloclist) + +set("n", "<space>f", function() + vim.cmd("Telescope") +end) + +set("n", "<space>t", function() + vim.cmd("TroubleToggle") +end) diff --git a/users/seth/programs/neovim/lua/lua/getchoo/lsp/server.lua b/users/seth/programs/neovim/lua/lua/getchoo/lsp/server.lua new file mode 100644 index 0000000..325e1c7 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/lsp/server.lua @@ -0,0 +1,22 @@ +-- +-- initialize lsp servers +-- + +local cmp = require("cmp") +local lspconfig = require("lspconfig") +local null_ls = require("null-ls") +local config = require("getchoo.lsp.config") + +if vim.g.use_mason then + require("mason").setup() + require("mason-lspconfig").setup(config.mason_lspconfig) + require("mason-tool-installer").setup(config.mason_tool_installer) + vim.opt.runtimepath:append("~/.local/share/nvim/mason/bin/") +end + +null_ls.setup(config.null_ls) +cmp.setup(config.cmp) + +for server, settings in pairs(config.lsp_servers) do + lspconfig[server].setup(settings) +end diff --git a/users/seth/programs/neovim/lua/lua/getchoo/plugins.lua b/users/seth/programs/neovim/lua/lua/getchoo/plugins.lua new file mode 100644 index 0000000..fe510d0 --- /dev/null +++ b/users/seth/programs/neovim/lua/lua/getchoo/plugins.lua @@ -0,0 +1,111 @@ +-- +-- plugins for neovim +-- + +local fn = vim.fn +local cmd = vim.cmd + +local packer_path = fn.stdpath("data") .. "/site/pack/packer/start/packer.nvim" + +if fn.empty(fn.glob(packer_path)) > 0 then + Packer_bootstrap = fn.system({ + "git", + "clone", + "--depth", + "1", + "https://github.com/wbthomason/packer.nvim", + packer_path, + }) + cmd("packadd packer.nvim") +end + +require("packer").startup(function(use) + use("wbthomason/packer.nvim") + + -- comsetic plugins + use({ "nvim-lualine/lualine.nvim", requires = { "kyazdani42/nvim-web-devicons" } }) + + use({ + "catppuccin/nvim", + as = "catppuccin", + config = function() + require("catppuccin").setup({ + flavour = "mocha", -- mocha, macchiato, frappe, latte + integrations = { + barbar = true, + gitsigns = true, + lightspeed = true, + mason = true, + cmp = true, + nvimtree = true, + treesitter_context = true, + treesitter = true, + telescope = true, + lsp_trouble = true, + }, + }) + vim.api.nvim_command("colorscheme catppuccin") + end, + }) + + ---- use("shaunsingh/nord.nvim") + ---- use({ "rose-pine/neovim", as = "rose-pine" }) + + -- general use plugins + use({ + "romgrk/barbar.nvim", + requires = { "kyazdani42/nvim-web-devicons" }, + }) + + use("ggandor/lightspeed.nvim") + use("kyazdani42/nvim-tree.lua") + + -- lsp plugins + if vim.g.use_lsp_plugins then + use("neovim/nvim-lspconfig") + + use({ + "jose-elias-alvarez/null-ls.nvim", + requires = { "nvim-lua/plenary.nvim" }, + }) + + if vim.g.use_mason then + use("williamboman/mason.nvim") + use("williamboman/mason-lspconfig") + use("whoissethdaniel/mason-tool-installer.nvim") + end + + use({ + "nvim-treesitter/nvim-treesitter", + run = function() + require("nvim-treesitter.install").update({ with_sync = true }) + end, + }) + + use("hrsh7th/nvim-cmp") + use("hrsh7th/cmp-nvim-lsp") + use("hrsh7th/cmp-buffer") + use("hrsh7th/cmp-path") + use("hrsh7th/cmp-vsnip") + use("hrsh7th/vim-vsnip") + use("L3MON4D3/LuaSnip") + use("saadparwaiz1/cmp_luasnip") + + use({ + "folke/trouble.nvim", + requires = { "kyazdani42/nvim-web-devicons" }, + }) + use({ + "nvim-telescope/telescope.nvim", + requires = { "nvim-lua/plenary.nvim" }, + }) + + use("lewis6991/gitsigns.nvim") + use("editorconfig/editorconfig-vim") + end + + if Packer_bootstrap then + require("packer").sync() + end +end) + |
