From f2ecf0360caa52f6c0338252f6237d2b3f1a8b7b Mon Sep 17 00:00:00 2001 From: Trevor Vallender Date: Fri, 17 Nov 2023 10:08:13 +0000 Subject: [PATCH] Modularise Neovim setup Much cleaner! --- .config/nvim/init.lua | 239 +-------------------------- .config/nvim/lua/appearance.lua | 20 +++ .config/nvim/lua/completion.lua | 25 +++ .config/nvim/lua/lsp.lua | 76 +++++++++ .config/nvim/lua/options.lua | 22 +++ .config/nvim/lua/plugins.lua | 58 +++++++ .config/nvim/lua/{tsv => }/remap.lua | 2 +- .config/nvim/lua/tree.lua | 7 + .config/nvim/lua/treesitter.lua | 9 + 9 files changed, 226 insertions(+), 232 deletions(-) create mode 100644 .config/nvim/lua/appearance.lua create mode 100644 .config/nvim/lua/completion.lua create mode 100644 .config/nvim/lua/lsp.lua create mode 100644 .config/nvim/lua/options.lua create mode 100644 .config/nvim/lua/plugins.lua rename .config/nvim/lua/{tsv => }/remap.lua (98%) create mode 100644 .config/nvim/lua/tree.lua create mode 100644 .config/nvim/lua/treesitter.lua diff --git a/.config/nvim/init.lua b/.config/nvim/init.lua index 9fe4233..804c003 100644 --- a/.config/nvim/init.lua +++ b/.config/nvim/init.lua @@ -1,231 +1,8 @@ ---- Basic stuff -local set = vim.opt -set.autoindent = true -set.tabstop = 2 -set.shiftwidth = 2 -set.softtabstop = 2 -set.expandtab = true -set.number = true -set.relativenumber = true - ---- Plugins -local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" -if not vim.loop.fs_stat(lazypath) then - vim.fn.system({ - "git", - "clone", - "--filter=blob:none", - "https://github.com/folke/lazy.nvim.git", - "--branch=stable", -- latest stable release - lazypath, - }) -end -vim.opt.rtp:prepend(lazypath) -vim.g.mapleader = " " -- Make sure to set `mapleader` before lazy so your mappings are correct - -require("lazy").setup({ - { "ellisonleao/gruvbox.nvim", priority = 1000 , config = true }, - { - 'nvim-telescope/telescope.nvim', tag = '0.1.4', - dependencies = { 'nvim-lua/plenary.nvim' } - }, - "nvim-tree/nvim-tree.lua", - "nvim-treesitter/nvim-treesitter", - { - "Exafunction/codeium.vim", - config = function () - -- Change '' here to any keycode you like. - vim.keymap.set('i', '', function () return vim.fn['codeium#Accept']() end, { expr = true }) - vim.keymap.set('i', '', function() return vim.fn['codeium#CycleCompletions'](1) end, { expr = true }) - vim.keymap.set('i', '', function() return vim.fn['codeium#CycleCompletions'](-1) end, { expr = true }) - vim.keymap.set('i', '', function() return vim.fn['codeium#Clear']() end, { expr = true }) - end - }, - "hrsh7th/nvim-cmp", - "neovim/nvim-lspconfig", - "williamboman/mason.nvim", - "williamboman/mason-lspconfig.nvim", - "nvim-tree/nvim-web-devicons", - "sar/cmp-lsp.nvim", - "ray-x/cmp-treesitter", - "rhysd/git-messenger.vim", - "mfussenegger/nvim-dap", - "rcarriga/nvim-dap-ui", - "chaoren/vim-wordmotion", - "tpope/vim-fugitive", - "tpope/vim-surround", - "tpope/vim-rails", - "rrethy/nvim-treesitter-endwise", - "Eandrju/cellular-automaton.nvim", - "romainl/vim-cool", - { - "folke/zen-mode.nvim", - opts = { - plugins = { - tmux = { enabled = true }, - } - } - } -}) - -require("tsv.remap") - ---- Appearance -set.cursorline = true -vim.o.background = "dark" -require("gruvbox").setup({ - transparent_mode = true, -}) -vim.cmd([[colorscheme gruvbox]]) - -local _border = "single" -vim.lsp.handlers["textDocument/hover"] = vim.lsp.with( - vim.lsp.handlers.hover, { - border = _border - } -) -vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with( - vim.lsp.handlers.signature_help, { - border = _border - } -) -vim.diagnostic.config{ - float={border=_border} -} - --- Improve terminal setup -vim.api.nvim_command("autocmd TermOpen * startinsert") -vim.api.nvim_command("autocmd TermOpen * setlocal nonumber norelativenumber") -vim.api.nvim_command("autocmd TermEnter * setlocal signcolumn=no") -vim.keymap.set('t', '', "") - --- Git -vim.g.fugitive_gitlab_domains = {'https://git.foxsoft.co.uk'} - --- Strip trailing spaces -vim.api.nvim_create_autocmd({"BufWritePre"}, { - pattern = { "*" }, - command = [[%s/\s\+$//e]], -}) - --- Nvim-tree -require("nvim-tree").setup({ - sort_by = "case_sensitive", - filters = { - dotfiles = true, - }, -}) - --- Treesitter -require'nvim-treesitter.configs'.setup { - sync_install = false, - auto_install = false, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, -} - --- Completion and LSP -local cmp = require'cmp' -cmp.setup { - snippet = { - expand = function(args) - vim.fn["vsnip#anonymous"](args.body) - end, - }, - window = { - completion = cmp.config.window.bordered(), - documentation = cmp.config.window.bordered(), - }, - mapping = cmp.mapping.preset.insert({ - [''] = cmp.mapping.scroll_docs(-4), - [''] = cmp.mapping.scroll_docs(4), - [''] = cmp.mapping.complete(), - [''] = cmp.mapping.abort(), - [''] = cmp.mapping.confirm({ select = true }), - }), - sources = cmp.config.sources({ - { name = 'nvim_lsp' }, - { name = 'vsnip' }, - { name = 'path' }, - { name = 'treesitter' }, - }) -} -local capabilities = require('cmp_nvim_lsp').default_capabilities() --- ---Enable (broadcasting) snippet capability for completion -local capabilities = vim.lsp.protocol.make_client_capabilities() -capabilities.textDocument.completion.completionItem.snippetSupport = true - --- LSP servers --- Stimulus -require'lspconfig'.stimulus_ls.setup{} --- Ruby -require'lspconfig'.ruby_ls.setup{} --- CSS -require'lspconfig'.cssls.setup { - capabilities = capabilities, -} --- SQL -require'lspconfig'.sqlls.setup{} --- JavaScript -require'lspconfig'.eslint.setup{} --- HTML -require'lspconfig'.html.setup { - capabilities = capabilities, -} --- JSON -require'lspconfig'.jsonls.setup { - capabilities = capabilities, -} --- BASH -require'lspconfig'.bashls.setup{} --- Cucumber -require'lspconfig'.cucumber_language_server.setup{} --- Docker -require'lspconfig'.dockerls.setup{} -require'lspconfig'local dap, dapui = require("dap"), require("dapui") -dap.listeners.after.event_initialized["dapui_config"] = function() - dapui.open() -end -dap.listeners.before.event_terminated["dapui_config"] = function() - dapui.close() -end -dap.listeners.before.event_exited["dapui_config"] = function() - dapui.close() -end - -require("dapui").setup() -dap.adapters.ruby = function(callback, config) - callback { - type = "server", - host = "127.0.0.1", - port = "${port}", - executable = { - command = "bundle", - args = { "exec", "rdbg", "-n", "--open", "--port", "${port}", - "-c", "--", "bundle", "exec", config.command, config.script, - }, - }, - } -end - -dap.configurations.ruby = { - { - type = "ruby", - name = "debug current file", - request = "attach", - localfs = true, - command = "ruby", - script = "${file}", - }, - { - type = "ruby", - name = "run current spec file", - request = "attach", - localfs = true, - command = "rspec", - script = "${file}", - }, -} +require('plugins') -- Install plugins with Lazy +require('options') -- Basic vim options +require('appearance') -- Appearance +require('completion') -- Completion +require('lsp') -- LSP +require('remap') -- Keymaps +require('tree') -- Nvim-tree +require('treesitter') -- Treesitter diff --git a/.config/nvim/lua/appearance.lua b/.config/nvim/lua/appearance.lua new file mode 100644 index 0000000..02310ac --- /dev/null +++ b/.config/nvim/lua/appearance.lua @@ -0,0 +1,20 @@ +vim.o.background = "dark" +require("gruvbox").setup({ + transparent_mode = true, +}) +vim.cmd([[colorscheme gruvbox]]) + +local _border = "single" +vim.lsp.handlers["textDocument/hover"] = vim.lsp.with( + vim.lsp.handlers.hover, { + border = _border + } +) +vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with( + vim.lsp.handlers.signature_help, { + border = _border + } +) +vim.diagnostic.config{ + float={border=_border} +} diff --git a/.config/nvim/lua/completion.lua b/.config/nvim/lua/completion.lua new file mode 100644 index 0000000..9382b14 --- /dev/null +++ b/.config/nvim/lua/completion.lua @@ -0,0 +1,25 @@ +local cmp = require("cmp") +cmp.setup({ + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + end, + }, + window = { + completion = cmp.config.window.bordered(), + documentation = cmp.config.window.bordered(), + }, + mapping = cmp.mapping.preset.insert({ + [''] = cmp.mapping.scroll_docs(-4), + [''] = cmp.mapping.scroll_docs(4), + [''] = cmp.mapping.complete(), + [''] = cmp.mapping.abort(), + [''] = cmp.mapping.confirm({ select = true }), + }), + sources = cmp.config.sources({ + { name = 'nvim_lsp' }, + { name = 'vsnip' }, + { name = 'path' }, + { name = 'treesitter' }, + }) +}) diff --git a/.config/nvim/lua/lsp.lua b/.config/nvim/lua/lsp.lua new file mode 100644 index 0000000..da0db18 --- /dev/null +++ b/.config/nvim/lua/lsp.lua @@ -0,0 +1,76 @@ +--Enable (broadcasting) snippet capability for completion +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true + +-- LSP servers +-- Stimulus +require'lspconfig'.stimulus_ls.setup{} +-- Ruby +require'lspconfig'.ruby_ls.setup{} +-- CSS +require'lspconfig'.cssls.setup { + capabilities = capabilities, +} +-- SQL +require'lspconfig'.sqlls.setup{} +-- JavaScript +require'lspconfig'.eslint.setup{} +-- HTML +require'lspconfig'.html.setup { + capabilities = capabilities, +} +-- JSON +require'lspconfig'.jsonls.setup { + capabilities = capabilities, +} +-- BASH +require'lspconfig'.bashls.setup{} +-- Cucumber +require'lspconfig'.cucumber_language_server.setup{} +-- Docker +require'lspconfig'.dockerls.setup{} +require'lspconfig'local dap, dapui = require("dap"), require("dapui") +dap.listeners.after.event_initialized["dapui_config"] = function() + dapui.open() +end +dap.listeners.before.event_terminated["dapui_config"] = function() + dapui.close() +end +dap.listeners.before.event_exited["dapui_config"] = function() + dapui.close() +end + +require("dapui").setup() +dap.adapters.ruby = function(callback, config) + callback { + type = "server", + host = "127.0.0.1", + port = "${port}", + executable = { + command = "bundle", + args = { "exec", "rdbg", "-n", "--open", "--port", "${port}", + "-c", "--", "bundle", "exec", config.command, config.script, + }, + }, + } +end + +dap.configurations.ruby = { + { + type = "ruby", + name = "debug current file", + request = "attach", + localfs = true, + command = "ruby", + script = "${file}", + }, + { + type = "ruby", + name = "run current spec file", + request = "attach", + localfs = true, + command = "rspec", + script = "${file}", + }, +} + diff --git a/.config/nvim/lua/options.lua b/.config/nvim/lua/options.lua new file mode 100644 index 0000000..5ac74c0 --- /dev/null +++ b/.config/nvim/lua/options.lua @@ -0,0 +1,22 @@ +local set = vim.opt +set.autoindent = true +set.tabstop = 2 +set.shiftwidth = 2 +set.softtabstop = 2 +set.expandtab = true +set.number = true +set.relativenumber = true +set.cursorline = true + +-- Improve terminal setup +vim.api.nvim_command("autocmd TermOpen * startinsert") +vim.api.nvim_command("autocmd TermOpen * setlocal nonumber norelativenumber") +vim.api.nvim_command("autocmd TermEnter * setlocal signcolumn=no") +vim.keymap.set('t', '', "") + +-- Strip trailing spaces on save +vim.api.nvim_create_autocmd({"BufWritePre"}, { + pattern = { "*" }, + command = [[%s/\s\+$//e]], +}) + diff --git a/.config/nvim/lua/plugins.lua b/.config/nvim/lua/plugins.lua new file mode 100644 index 0000000..e87f455 --- /dev/null +++ b/.config/nvim/lua/plugins.lua @@ -0,0 +1,58 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", -- latest stable release + lazypath, + }) +end +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + { "ellisonleao/gruvbox.nvim", priority = 1000 , config = true }, + { + 'nvim-telescope/telescope.nvim', tag = '0.1.4', + dependencies = { 'nvim-lua/plenary.nvim' } + }, + "nvim-tree/nvim-tree.lua", + "nvim-treesitter/nvim-treesitter", + { + "Exafunction/codeium.vim", + config = function () + -- Change '' here to any keycode you like. + vim.keymap.set('i', '', function () return vim.fn['codeium#Accept']() end, { expr = true }) + vim.keymap.set('i', '', function() return vim.fn['codeium#CycleCompletions'](1) end, { expr = true }) + vim.keymap.set('i', '', function() return vim.fn['codeium#CycleCompletions'](-1) end, { expr = true }) + vim.keymap.set('i', '', function() return vim.fn['codeium#Clear']() end, { expr = true }) + end + }, + "hrsh7th/nvim-cmp", + "neovim/nvim-lspconfig", + "williamboman/mason.nvim", + "williamboman/mason-lspconfig.nvim", + "nvim-tree/nvim-web-devicons", + "sar/cmp-lsp.nvim", + "ray-x/cmp-treesitter", + "rhysd/git-messenger.vim", + "mfussenegger/nvim-dap", + "rcarriga/nvim-dap-ui", + "chaoren/vim-wordmotion", + "tpope/vim-fugitive", + "tpope/vim-surround", + "tpope/vim-rails", + "rrethy/nvim-treesitter-endwise", + "Eandrju/cellular-automaton.nvim", + "romainl/vim-cool", + { + "folke/zen-mode.nvim", + opts = { + plugins = { + tmux = { enabled = true }, + } + } + } +}) + diff --git a/.config/nvim/lua/tsv/remap.lua b/.config/nvim/lua/remap.lua similarity index 98% rename from .config/nvim/lua/tsv/remap.lua rename to .config/nvim/lua/remap.lua index 3a3ebf9..d38a5fa 100644 --- a/.config/nvim/lua/tsv/remap.lua +++ b/.config/nvim/lua/remap.lua @@ -34,7 +34,7 @@ vim.keymap.set('n', 'tlw', builtin.lsp_workspace_symbols, {}) vim.keymap.set('n', 'tlD', builtin.diagnostics, {}) vim.keymap.set('n', 'tlK', vim.lsp.buf.signature_help, {}) vim.keymap.set('n', 'tlq', vim.diagnostic.setloclist, {}) -vim.keymap.set('n', 'P', vim.diagnostic.open_float, {}) +vim.keymap.set('n', 'E', vim.diagnostic.open_float, {}) vim.keymap.set('n', 'H', function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "tlf", vim.lsp.buf.format) -- Format code -- DAP diff --git a/.config/nvim/lua/tree.lua b/.config/nvim/lua/tree.lua new file mode 100644 index 0000000..5ff69ea --- /dev/null +++ b/.config/nvim/lua/tree.lua @@ -0,0 +1,7 @@ +require("nvim-tree").setup({ + sort_by = "case_sensitive", + filters = { + dotfiles = true, + }, +}) + diff --git a/.config/nvim/lua/treesitter.lua b/.config/nvim/lua/treesitter.lua new file mode 100644 index 0000000..e1f6d9d --- /dev/null +++ b/.config/nvim/lua/treesitter.lua @@ -0,0 +1,9 @@ +-- Treesitter +require'nvim-treesitter.configs'.setup { + sync_install = false, + auto_install = false, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, +}