Rewrote Neovim configuration to use Lazy
This commit is contained in:
parent
b7c113644e
commit
244042ab31
15 changed files with 410 additions and 499 deletions
|
@ -1,12 +1,28 @@
|
|||
require('packer_init')
|
||||
-- Change leader to a comma, ensure this happens before packages are loaded.
|
||||
vim.g.mapleader = ','
|
||||
|
||||
-- Disable netrw in favor of nvim-tree
|
||||
vim.g.loaded_netrw = 1
|
||||
vim.g.loaded_netrwPlugin = 1
|
||||
|
||||
-- Configure basic Neovim settings.
|
||||
require('general')
|
||||
require('colorscheme')
|
||||
|
||||
-- Configure key mappings not defined for plugins.
|
||||
require('keymap')
|
||||
require('plugins/floaterm')
|
||||
require('plugins/cmp')
|
||||
require('plugins/lsp')
|
||||
require('plugins/scala')
|
||||
require('plugins/bufferline')
|
||||
require('plugins/lualine')
|
||||
require('plugins/telescope')
|
||||
|
||||
-- This loads (lazily) all plugins and configures things like plugin-specific
|
||||
-- key mappings.
|
||||
require('plugin_management')
|
||||
|
||||
-- Initialize the color scheme, depends on plugins being available.
|
||||
require('colorscheme')
|
||||
|
||||
-- Setup autocmd for metals - metals is a little weird and needs to load itself.
|
||||
-- The plugin that's loaded just makes metals code available in the first place.
|
||||
require('plugins/metals')
|
||||
|
||||
-- Setup treesitter, select the configs to load, etc.
|
||||
require('plugins/treesitter')
|
||||
|
||||
require('plugins/lualine')
|
||||
|
|
3
.config/nvim/lua/.luarc.json
Normal file
3
.config/nvim/lua/.luarc.json
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"workspace.checkThirdParty": false
|
||||
}
|
|
@ -2,47 +2,5 @@
|
|||
vim.opt.background = 'dark'
|
||||
--vim.opt.background = 'light'
|
||||
|
||||
-- Settings for gruvbox-material
|
||||
--
|
||||
--vim.g.gruvbox_material_palette = 'mix'
|
||||
vim.g.gruvbox_material_palette = 'material'
|
||||
--vim.g.gruvbox_material_palette = 'original'
|
||||
--
|
||||
vim.g.gruvbox_material_background = 'hard'
|
||||
--vim.g.gruvbox_material_background = 'medium'
|
||||
--vim.g.gruvbox_material_background = 'soft'
|
||||
--
|
||||
vim.g.gruvbox_material_enable_bold = 1
|
||||
|
||||
-- Settings for material
|
||||
vim.g.material_style = "palenight"
|
||||
|
||||
require('material').setup {
|
||||
|
||||
italics = {
|
||||
comments = true, -- Enable italic comments
|
||||
},
|
||||
|
||||
plugins = {
|
||||
neogit = false,
|
||||
sidebar_nvim = false,
|
||||
lsp_saga = false,
|
||||
nvim_dap = false,
|
||||
nvim_navic = false,
|
||||
hop = false,
|
||||
}
|
||||
}
|
||||
|
||||
-- Settings for nightfox
|
||||
-- Available colorscheme values: nightfox, duskfox, nordfox, terafox
|
||||
require('nightfox').setup({
|
||||
options = {
|
||||
styles = {
|
||||
comments = "italic",
|
||||
keywords = "bold",
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
-- Set the color scheme
|
||||
vim.cmd 'colorscheme gruvbox-material'
|
||||
|
|
|
@ -9,11 +9,14 @@ opt.swapfile = false -- Don't use swapfile
|
|||
opt.modelines = 0 -- Disable modelines
|
||||
opt.encoding = 'utf-8' -- Set default encoding to UTF-8
|
||||
|
||||
opt.termguicolors = true
|
||||
|
||||
-- Note that this setting is important for which-key. Also don't reduce it too
|
||||
-- low, or the behavior will start getting wonky and always show which-key.
|
||||
opt.timeoutlen = 500 -- Time in ms to wait for a sequnece to complete
|
||||
|
||||
opt.shortmess:remove("F")
|
||||
vim.opt_global.shortmess:remove("F")
|
||||
opt.shortmess:append("c")
|
||||
|
||||
opt.wildignore = {
|
||||
|
|
|
@ -1,141 +1,49 @@
|
|||
-----------------------------------------------------------
|
||||
-- Define keymaps for Neovim and plugins.
|
||||
-----------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
-- Define keymaps for Neovim
|
||||
--
|
||||
-- Note that leader is defined in init.lua to ensure that all mappings are
|
||||
-- correct in plugins.
|
||||
--
|
||||
-- Plugins define their own keymappings in plugin_management.lua
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local function map(mode, lhs, rhs, opts)
|
||||
local options = { noremap = true, silent = true }
|
||||
if opts then
|
||||
options = vim.tbl_extend('force', options, opts)
|
||||
end
|
||||
vim.api.nvim_set_keymap(mode, lhs, rhs, options)
|
||||
end
|
||||
local map = vim.keymap.set
|
||||
|
||||
-- Change leader to a comma
|
||||
vim.g.mapleader = ','
|
||||
vim.g.maplocalleader = ' '
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- General
|
||||
-----------------------------------------------------------
|
||||
|
||||
-- Clear search highlighting
|
||||
map('n', '<leader>/', ':nohlsearch<CR>')
|
||||
map('n', '<leader>/', ':nohlsearch<CR>', { desc = 'Clear Search Highlight' })
|
||||
|
||||
-- Save current buffer
|
||||
map('n', '<leader>s', ':up<CR>')
|
||||
map('n', '<leader>s', ':up<CR>', { desc = 'Save' })
|
||||
|
||||
-- Move to previous buffer
|
||||
map('n', '<leader>bp', ':bp<CR>')
|
||||
map('n', '<leader>bp', ':bp<CR>', { desc = 'Prev Buffer' })
|
||||
|
||||
-- Move to next buffer
|
||||
map('n', '<leader>bn', ':bn<CR>')
|
||||
map('n', '<leader>bn', ':bn<CR>', { desc = 'Next Buffer' })
|
||||
|
||||
-- Delete current buffer
|
||||
map('n', '<leader>bd', ':bd<CR>')
|
||||
map('n', '<leader>bd', ':bd<CR>', { desc = 'Delete Buffer' })
|
||||
|
||||
-- Close the quickfix window
|
||||
map('n', '<leader>cq', ':ccl<CR>')
|
||||
map('n', '<leader>cq', ':ccl<CR>', { desc = 'Close Quickfix' })
|
||||
|
||||
-- Create a vertical split
|
||||
map('n', '<leader>v', ':vsplit<CR>')
|
||||
map('n', '<leader>v', ':vsplit<CR>', { desc = 'Vertical Split' })
|
||||
|
||||
-- These appear broken with latest neovim, and nvim-cmp has
|
||||
-- settings that work in any case. Keep as a reminder for a
|
||||
-- few weeks just in case.
|
||||
-- Use Tab to jump to the next option in a popup menu
|
||||
--vim.keymap.set('i', '<Tab>', function()
|
||||
-- return vim.fn.pumvisible() == 1 and '<C-N>' or '<Tab>'
|
||||
--end, {expr = true})
|
||||
|
||||
-- Use Shift+Tab to jump to the previous option in a popup menu
|
||||
--vim.keymap.set('i', '<S-Tab>', function()
|
||||
-- return vim.fn.pumvisible() == 1 and '<C-P>' or '<Tab>'
|
||||
--end, {expr = true})
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Telescope
|
||||
-----------------------------------------------------------
|
||||
|
||||
-- Use ';' to search active buffers
|
||||
map('n', ';', '<cmd>Telescope buffers<CR>')
|
||||
|
||||
-- Use Ctrl+P to show a list of files
|
||||
map('n', '<C-P>', '<cmd>Telescope find_files<CR>')
|
||||
|
||||
-- Live Grep
|
||||
map('n', '<leader>fg', '<cmd>Telescope live_grep<CR>')
|
||||
|
||||
-- Metals commands
|
||||
map('n', '<leader>fm', '<cmd>Telescope metals commands<CR>')
|
||||
|
||||
-- Search project TODOs in Telescope
|
||||
map('n', '<leader>ft', '<cmd>TodoTelescope<CR>')
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Trouble
|
||||
-----------------------------------------------------------
|
||||
|
||||
-- Show/hide Trouble
|
||||
map('n', '<leader>xx', '<cmd>TroubleToggle<CR>')
|
||||
|
||||
-- Show workspace diagnostics
|
||||
map('n', '<leader>xw', '<cmd>TroubleToggle workspace_diagnostics<CR>')
|
||||
|
||||
-- Show document diagnostics
|
||||
map('n', '<leader>xd', '<cmd>TroubleToggle document_diagnostics<CR>')
|
||||
|
||||
-- Show quickfix
|
||||
map('n', '<leader>xq', '<cmd>TroubleToggle quickfix<CR>')
|
||||
|
||||
-- Show local list
|
||||
map('n', '<leader>xl', '<cmd>TroubleToggle loclist<CR>')
|
||||
|
||||
-- Show LSP references
|
||||
map('n', '<leader>xr', '<cmd>TroubleToggle lsp_references<CR>')
|
||||
|
||||
-- Show project TODOs in Trouble
|
||||
map('n', '<leader>xt', '<cmd>TodoTrouble<CR>')
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- Floaterm
|
||||
-----------------------------------------------------------
|
||||
|
||||
-- Create a new floating terminal
|
||||
vim.g.floaterm_keymap_new = '<leader>tc'
|
||||
|
||||
-- Move to the previous terminal
|
||||
vim.g.floaterm_keymap_prev = '<leader>tp'
|
||||
|
||||
-- Move to the next terminal
|
||||
vim.g.floaterm_keymap_next = '<leader>tn'
|
||||
|
||||
-- Toggle the visibility of the floating terminal
|
||||
vim.g.floaterm_keymap_toggle = '<leader>tt'
|
||||
|
||||
-----------------------------------------------------------
|
||||
-- nvim-tree
|
||||
-----------------------------------------------------------
|
||||
|
||||
-- Toggle the file tree
|
||||
map('n', '<C-A>tt', '<cmd>NvimTreeToggle<CR>')
|
||||
|
||||
-- Find the current buffer in the file tree
|
||||
map('n', '<C-A>tf', '<cmd>NvimTreeFindFile<CR>')
|
||||
|
||||
-----------------------------------------------------------
|
||||
--------------------------------------------------------------------------------
|
||||
-- LSP
|
||||
-----------------------------------------------------------
|
||||
|
||||
map('n', 'K', '<cmd>lua vim.lsp.buf.hover()<CR>')
|
||||
map('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>')
|
||||
map('n', 'gr', '<cmd>lua vim.lsp.buf.references()<CR>')
|
||||
map('n', 'gds', '<cmd>lua vim.lsp.buf.document_symbol()<CR>')
|
||||
map('n', 'gws', '<cmd>lua vim.lsp.buf.workspace_symbol()<CR>')
|
||||
map('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>')
|
||||
map('n', '<leader>cl', '<cmd>lua vim.lsp.codelens.run()<CR>')
|
||||
map('n', '<leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>')
|
||||
map('n', '<leader>rn', '<cmd>lua vim.lsp.buf.rename()<CR>')
|
||||
map('n', '<leader>ca', '<cmd>lua vim.lsp.buf.code_action()<CR>')
|
||||
map('n', '<leader>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>')
|
||||
map('n', '[c', '<cmd>lua vim.diagnostic.goto_prev { wrap = false }<CR>')
|
||||
map('n', ']c', '<cmd>lua vim.diagnostic.goto_next { wrap = false }<CR>')
|
||||
--------------------------------------------------------------------------------
|
||||
map('n', 'K', vim.lsp.buf.hover, { desc = 'Hover' })
|
||||
map('n', 'gi', vim.lsp.buf.implementation, { desc = 'Go To Implementation' })
|
||||
map('n', 'gr', vim.lsp.buf.references, { desc = 'Go To References' })
|
||||
map('n', 'gds', vim.lsp.buf.document_symbol, { desc = 'Document Symbol' })
|
||||
map('n', 'gws', vim.lsp.buf.workspace_symbol, { desc = 'Workspace Symbol' })
|
||||
map('n', 'gd', vim.lsp.buf.definition, { desc = 'Go To Definition' })
|
||||
map('n', '<leader>cl', vim.lsp.codelens.run, { desc = 'Code Lens' })
|
||||
map('n', '<leader>D', vim.lsp.buf.type_definition, { desc = 'Type Definition' })
|
||||
map('n', '<leader>rn', vim.lsp.buf.rename, { desc = 'Rename' })
|
||||
map('n', '<leader>ca', vim.lsp.buf.code_action, { desc = 'Code Action' })
|
||||
map('n', '[c', '<cmd>lua vim.diagnostic.goto_prev({ wrap = false })<CR>', { desc = 'prev diagnostic' })
|
||||
map('n', ']c', '<cmd>lua vim.diagnostic.goto_next({ wrap = false })<CR>', { desc = 'next diagnostic' })
|
||||
|
|
|
@ -1,157 +0,0 @@
|
|||
-- Automatically install packer
|
||||
local fn = vim.fn
|
||||
local install_path = fn.stdpath('data') .. '/site/pack/packer/start/packer.nvim'
|
||||
|
||||
if fn.empty(fn.glob(install_path)) > 0 then
|
||||
local _ = fn.system({
|
||||
'git',
|
||||
'clone',
|
||||
'--depth',
|
||||
'1',
|
||||
'https://github.com/wbthomason/packer.nvim',
|
||||
install_path
|
||||
})
|
||||
vim.o.runtimepath = vim.fn.stdpath('data') .. '/site/pack/*/start/*,' .. vim.o.runtimepath
|
||||
end
|
||||
|
||||
-- Use a protected call so we don't error out on first use
|
||||
local status_ok, _ = pcall(require, 'packer')
|
||||
if not status_ok then
|
||||
return
|
||||
end
|
||||
|
||||
return require('packer').startup(function(use)
|
||||
-- Plugin/package manager.
|
||||
use 'wbthomason/packer.nvim'
|
||||
|
||||
-- Required for a number of Lua plugins.
|
||||
use 'nvim-lua/plenary.nvim'
|
||||
|
||||
-- Color schemes
|
||||
use 'sainnhe/gruvbox-material'
|
||||
use 'rebelot/kanagawa.nvim'
|
||||
use 'marko-cerovac/material.nvim'
|
||||
use { 'EdenEast/nightfox.nvim', run = ':NightfoxCompile' }
|
||||
|
||||
-- Telescope: fuzzy finder
|
||||
use {
|
||||
'nvim-telescope/telescope.nvim',
|
||||
requires = {
|
||||
{ 'nvim-lua/plenary.nvim' }
|
||||
}
|
||||
}
|
||||
|
||||
-- Native Telescope implementation based on FZF for performance.
|
||||
use {
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
run = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build'
|
||||
}
|
||||
|
||||
-- A pretty list for showing diagnostics, references, telescope results,
|
||||
-- quickfix and location lists to help you solve all the trouble your code
|
||||
-- is causing.
|
||||
use {
|
||||
'folke/trouble.nvim',
|
||||
requires = 'kyazdani42/nvim-web-devicons',
|
||||
config = function()
|
||||
require('trouble').setup()
|
||||
end
|
||||
}
|
||||
|
||||
-- Treesitter: Neovim bindings for the Tree-sitter parser generator tool and
|
||||
-- incremental parsing library.
|
||||
use {
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
run = ':TSUpdate'
|
||||
}
|
||||
|
||||
-- Neovim-native LSP Implementation
|
||||
use 'neovim/nvim-lspconfig'
|
||||
|
||||
-- Snippet engine is REQUIRED for nvim-cmp.
|
||||
use 'L3MON4D3/LuaSnip'
|
||||
|
||||
-- nvim-cmp - completion plugin, used for LSP and Metals
|
||||
use {
|
||||
'hrsh7th/nvim-cmp',
|
||||
requires = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
'hrsh7th/cmp-path',
|
||||
'hrsh7th/cmp-buffer',
|
||||
'saadparwaiz1/cmp_luasnip'
|
||||
--'PaterJason/cmp-conjure'
|
||||
}
|
||||
}
|
||||
|
||||
-- Metals, for Scala development.
|
||||
use {
|
||||
'scalameta/nvim-metals',
|
||||
requires = { 'nvim-lua/plenary.nvim' },
|
||||
--ft = { 'scala', 'sbt' } -- this is busted for some reason.
|
||||
}
|
||||
|
||||
-- Lualine (configures the bottom bars)
|
||||
use {
|
||||
'nvim-lualine/lualine.nvim',
|
||||
requires = 'kyazdani42/nvim-web-devicons'
|
||||
}
|
||||
|
||||
-- bufferline - shows a bar at the top with open buffers
|
||||
use {
|
||||
'akinsho/bufferline.nvim',
|
||||
requires = 'kyazdani42/nvim-web-devicons'
|
||||
}
|
||||
|
||||
-- Floating terminal
|
||||
use 'voldikss/vim-floaterm'
|
||||
|
||||
-- Show signs for Git
|
||||
use {
|
||||
'lewis6991/gitsigns.nvim',
|
||||
config = function()
|
||||
require('gitsigns').setup()
|
||||
end
|
||||
}
|
||||
|
||||
-- Show unobtrusive indentation guides
|
||||
use {
|
||||
'lukas-reineke/indent-blankline.nvim',
|
||||
config = function()
|
||||
require('indent_blankline').setup()
|
||||
end
|
||||
}
|
||||
|
||||
-- nvim-tree for when I want to view files
|
||||
use {
|
||||
'kyazdani42/nvim-tree.lua',
|
||||
requires = {
|
||||
'kyazdani42/nvim-web-devicons'
|
||||
},
|
||||
tag = 'nightly',
|
||||
config = function()
|
||||
require('nvim-tree').setup()
|
||||
end
|
||||
}
|
||||
|
||||
-- Special highlighting and tracking for certain notable words
|
||||
use {
|
||||
'folke/todo-comments.nvim',
|
||||
requires = 'nvim-lua/plenary.nvim',
|
||||
config = function()
|
||||
require('todo-comments').setup()
|
||||
end
|
||||
}
|
||||
|
||||
-- Racket support
|
||||
use 'benknoble/vim-racket'
|
||||
|
||||
-- PlantUML syntax
|
||||
use 'aklt/plantuml-syntax'
|
||||
|
||||
-- Terraform
|
||||
use 'hashivim/vim-terraform'
|
||||
|
||||
-- i3 configuration syntax
|
||||
use 'mboughaba/i3config.vim'
|
||||
|
||||
end)
|
320
.config/nvim/lua/plugin_management.lua
Normal file
320
.config/nvim/lua/plugin_management.lua
Normal file
|
@ -0,0 +1,320 @@
|
|||
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({
|
||||
-- Color schemes. Lazy, only selected will be loaded.
|
||||
{
|
||||
'sainnhe/gruvbox-material',
|
||||
config = function(_)
|
||||
vim.g.gruvbox_material_palette = 'material'
|
||||
vim.g.gruvbox_material_background = 'hard'
|
||||
vim.g.gruvbox_material_enable_bold = 1
|
||||
end
|
||||
},
|
||||
{
|
||||
'rebelot/kanagawa.nvim',
|
||||
lazy = true,
|
||||
},
|
||||
{
|
||||
'marko-cerovac/material.nvim',
|
||||
lazy = true,
|
||||
opts = {
|
||||
italics = {
|
||||
comments = true, -- Enable italic comments
|
||||
},
|
||||
|
||||
plugins = {
|
||||
neogit = false,
|
||||
sidebar_nvim = false,
|
||||
lsp_saga = false,
|
||||
nvim_dap = false,
|
||||
nvim_navic = false,
|
||||
hop = false,
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
'EdenEast/nightfox.nvim',
|
||||
build = ':NightfoxCompile',
|
||||
lazy = true,
|
||||
opts = {
|
||||
options = {
|
||||
styles = {
|
||||
comments = "italic",
|
||||
keywords = "bold",
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
-- Common dependency for Lua plugins
|
||||
'nvim-lua/plenary.nvim',
|
||||
|
||||
-- Common dependency for many plugins (visual)
|
||||
'nvim-tree/nvim-web-devicons',
|
||||
|
||||
-- Fuzzy finder (files, buffers, live grep, etc.)
|
||||
-- Includes a native build based on FZF for performance.
|
||||
{
|
||||
'nvim-telescope/telescope.nvim',
|
||||
dependencies = { 'nvim-lua/plenary.nvim' },
|
||||
keys = {
|
||||
{ ';', '<cmd>Telescope buffers<CR>', desc = 'Find Buffer' },
|
||||
{ '<C-P>', '<cmd>Telescope find_files<CR>', desc = 'Find File' },
|
||||
{ '<leader>fg', '<cmd>Telescope live_grep<CR>', desc = 'Live Grep' },
|
||||
{ '<leader>fm', '<cmd>Telescope metals commands<CR>', desc = 'Find Metals Command' },
|
||||
{ '<leader>ft', '<cmd>TodoTelescope<CR>', desc = 'Find TODO' },
|
||||
}
|
||||
},
|
||||
{
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build',
|
||||
config = function(_)
|
||||
require('telescope').load_extension('fzf')
|
||||
end
|
||||
},
|
||||
|
||||
-- A pretty list for showing diagnostics, references, telescope results,
|
||||
-- quickfix and location lists to help you solve all the trouble your code
|
||||
-- is causing.
|
||||
{
|
||||
'folke/trouble.nvim',
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
keys = {
|
||||
{ '<leader>xx', '<cmd>TroubleToggle<CR>', desc = 'Trouble' },
|
||||
{ '<leader>xw', '<cmd>TroubleToggle workspace_diagnostics<CR>', desc = 'Workspace Diagnostics' },
|
||||
{ '<leader>xd', '<cmd>TroubleToggle document_diagnostics<CR>', desc = 'Document Diagnostics' },
|
||||
{ '<leader>xq', '<cmd>TroubleToggle quickfix<CR>', desc = 'Quickfix' },
|
||||
{ '<leader>xl', '<cmd>TroubleToggle loclist<CR>', desc = 'Local List' },
|
||||
{ '<leader>xr', '<cmd>TroubleToggle lsp_references<CR>', desc = 'LSP References' },
|
||||
{ '<leader>xr', '<cmd>TodoTrouble<CR>', desc = 'Show TODOs' },
|
||||
}
|
||||
},
|
||||
|
||||
-- Treesitter: Neovim bindings for the Tree-sitter parser generator tool and
|
||||
-- incremental parsing library.
|
||||
{
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
build = ':TSUpdate'
|
||||
},
|
||||
|
||||
-- Neovim-native LSP Implementation
|
||||
{
|
||||
'neovim/nvim-lspconfig',
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
},
|
||||
config = function(_)
|
||||
local lsp = require('lspconfig')
|
||||
|
||||
-- Establish a set of capabilities so we can advertise nvim-cmp support.
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
|
||||
-- Add nvim-cmp support to the capabilities.
|
||||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
||||
|
||||
-- lua-language-server
|
||||
lsp.lua_ls.setup {
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
-- Tell the language server which version of Lua you're using (most
|
||||
-- likely LuaJIT in the case of Neovim)
|
||||
version = 'LuaJIT',
|
||||
},
|
||||
diagnostics = {
|
||||
-- Get the language server to recognize the `vim` global
|
||||
globals = {'vim'},
|
||||
},
|
||||
workspace = {
|
||||
-- Make the server aware of Neovim runtime files
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
},
|
||||
-- Do not send telemetry data containing a randomized but unique
|
||||
-- identifier
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- bash-language-server
|
||||
lsp.bashls.setup{}
|
||||
|
||||
-- texlab = latex language server
|
||||
lsp.texlab.setup{}
|
||||
|
||||
-- terraform-ls = terraform language server (Hashicorp stable)
|
||||
lsp.terraformls.setup{}
|
||||
|
||||
-- tsserver = typescript language server, works for JS as well.
|
||||
lsp.tsserver.setup{}
|
||||
end
|
||||
},
|
||||
|
||||
-- nvim-cmp - completion plugin, used for LSP and Metals
|
||||
{
|
||||
'hrsh7th/nvim-cmp',
|
||||
dependencies = {
|
||||
'L3MON4D3/LuaSnip',
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
'hrsh7th/cmp-path',
|
||||
'hrsh7th/cmp-buffer',
|
||||
'saadparwaiz1/cmp_luasnip'
|
||||
},
|
||||
config = function(_)
|
||||
local cmp = require('cmp')
|
||||
|
||||
cmp.setup{
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
require('luasnip').lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
sources = {
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
{ name = 'path' },
|
||||
{ name = 'buffer', option = { keyword_length = 5 }, },
|
||||
},
|
||||
mapping = {
|
||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<Tab>'] = function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end,
|
||||
['<S-Tab>'] = function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
end
|
||||
},
|
||||
|
||||
-- Metals, for Scala development.
|
||||
{
|
||||
'scalameta/nvim-metals',
|
||||
--event = 'FileType *.scala,*.sbt',
|
||||
--lazy = true,
|
||||
dependencies = { 'nvim-lua/plenary.nvim' }
|
||||
},
|
||||
|
||||
-- Lualine (configures the bottom bars)
|
||||
{
|
||||
'nvim-lualine/lualine.nvim',
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
},
|
||||
|
||||
-- bufferline - shows a bar at the top with open buffers
|
||||
{
|
||||
'akinsho/bufferline.nvim',
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
opts = {
|
||||
options = {
|
||||
mode = 'buffers',
|
||||
indicator = {
|
||||
style = 'none'
|
||||
},
|
||||
diagnostics = 'nvim_lsp',
|
||||
color_icons = true,
|
||||
show_buffer_icons = true,
|
||||
show_buffer_close_icons = false,
|
||||
separator_style = 'slant',
|
||||
always_show_bufferline = true,
|
||||
hover = {
|
||||
enabled = false
|
||||
},
|
||||
},
|
||||
}
|
||||
},
|
||||
|
||||
-- Floating terminal
|
||||
{
|
||||
'voldikss/vim-floaterm',
|
||||
keys = {
|
||||
{ '<leader>tc', '<cmd>FloatermNew<CR>', desc = 'New Floating Terminal' },
|
||||
{ '<leader>tc', '<C-\\><C-n><cmd>FloatermNew<CR>', mode = 't', desc = 'New Floating Terminal' },
|
||||
{ '<leader>tt', '<cmd>FloatermToggle<CR>', desc = 'Toggle Floating Terminal' },
|
||||
{ '<leader>tt', '<C-\\><C-n><cmd>FloatermToggle<CR>', mode = 't', desc = 'Toggle Floating Terminal' },
|
||||
{ '<leader>tp', '<cmd>FloatermPrev<CR>', desc = 'Previous Terminal' },
|
||||
{ '<leader>tp', '<C-\\><C-n><cmd>FloatermPrev<CR>', mode = 't', desc = 'Previous Terminal' },
|
||||
{ '<leader>tn', '<cmd>FloatermNext<CR>', desc = 'Next Terminal' },
|
||||
{ '<leader>tn', '<C-\\><C-n><cmd>FloatermNext<CR>', mode = 't', desc = 'Next Terminal' },
|
||||
},
|
||||
config = function(_)
|
||||
vim.g.floaterm_width = 0.8
|
||||
vim.g.floaterm_height = 0.8
|
||||
vim.g.floaterm_gitcommit = 'split'
|
||||
end
|
||||
},
|
||||
|
||||
-- Show signs for Git
|
||||
{ 'lewis6991/gitsigns.nvim' },
|
||||
|
||||
-- Show unobtrusive indentation guides
|
||||
{ 'lukas-reineke/indent-blankline.nvim', },
|
||||
|
||||
-- nvim-tree for when I want to view files
|
||||
{
|
||||
'nvim-tree/nvim-tree.lua',
|
||||
dependencies = { 'nvim-tree/nvim-web-devicons' },
|
||||
tag = 'nightly',
|
||||
lazy = false,
|
||||
keys = {
|
||||
{ '<C-A>tt', '<cmd>NvimTreeToggle<CR>', desc = 'File Tree' },
|
||||
{ '<C-A>tf', '<cmd>NvimTreeFindFile<CR>', desc = 'Tree Find File' },
|
||||
},
|
||||
config = function(_)
|
||||
require('nvim-tree').setup()
|
||||
end
|
||||
},
|
||||
|
||||
-- Special highlighting and tracking for certain notable words
|
||||
{
|
||||
'folke/todo-comments.nvim',
|
||||
dependencies = 'nvim-lua/plenary.nvim',
|
||||
},
|
||||
|
||||
-- Racket support
|
||||
{
|
||||
'benknoble/vim-racket',
|
||||
event = 'BufEnter *.rkt',
|
||||
lazy = true,
|
||||
},
|
||||
|
||||
-- PlantUML syntax
|
||||
{
|
||||
'aklt/plantuml-syntax',
|
||||
event = 'BufEnter *.puml',
|
||||
lazy = true,
|
||||
},
|
||||
|
||||
-- Terraform
|
||||
{
|
||||
'hashivim/vim-terraform',
|
||||
event = 'BufEnter *.tf',
|
||||
lazy = true,
|
||||
},
|
||||
|
||||
-- i3 configuration syntax
|
||||
'mboughaba/i3config.vim',
|
||||
})
|
|
@ -1,25 +0,0 @@
|
|||
require('bufferline').setup {
|
||||
options = {
|
||||
mode = 'buffers',
|
||||
indicator = {
|
||||
style = 'none'
|
||||
},
|
||||
diagnostics = 'nvim_lsp',
|
||||
-- offsets appear to be broken
|
||||
--offsets = {
|
||||
-- filetype = 'NvimTree',
|
||||
-- text = 'File Explorer',
|
||||
-- highlight = 'Directory',
|
||||
-- text_align = 'center',
|
||||
-- separator = true
|
||||
--},
|
||||
color_icons = true,
|
||||
show_buffer_icons = true,
|
||||
show_buffer_close_icons = false,
|
||||
separator_style = 'slant',
|
||||
always_show_bufferline = true,
|
||||
hover = {
|
||||
enabled = false
|
||||
},
|
||||
},
|
||||
}
|
|
@ -1,43 +0,0 @@
|
|||
local cmp = require('cmp')
|
||||
|
||||
cmp.setup{
|
||||
snippet = {
|
||||
-- REQUIRED - you must specify a snippet engine
|
||||
expand = function(args)
|
||||
require('luasnip').lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
sources = {
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
{ name = 'path' },
|
||||
{ name = 'buffer', option = { keyword_length = 5 }, },
|
||||
},
|
||||
mapping = {
|
||||
['<CR>'] = cmp.mapping.confirm({ select = true }),
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<Tab>'] = function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end,
|
||||
['<S-Tab>'] = function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
-- Setup conjure, only for supported files
|
||||
--cmp.setup.filetype('racket', {
|
||||
-- sources = {
|
||||
-- { name = 'conjure' },
|
||||
-- { name = 'luasnip' },
|
||||
-- { name = 'path' },
|
||||
-- { name = 'buffer', option = { keyword_length = 5 }, },
|
||||
-- }
|
||||
--})
|
|
@ -1,3 +0,0 @@
|
|||
vim.g.floaterm_width = 0.8
|
||||
vim.g.floaterm_height = 0.8
|
||||
vim.g.floaterm_gitcommit = 'split'
|
|
@ -1,60 +0,0 @@
|
|||
local lsp = require('lspconfig')
|
||||
|
||||
-- Use an on_attach function to configure after LSP attaches to buffer
|
||||
local on_attach = function(_, bufnr)
|
||||
local function buf_set_option(...) vim.api.nvim_buf_set_option(bufnr, ...) end
|
||||
buf_set_option('omnifunc', 'v:lua.vim.lsp.omnifunc')
|
||||
end
|
||||
|
||||
-- Establish a set of capabilities so we can advertise nvim-cmp support.
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
|
||||
-- Add nvim-cmp support to the capabilities.
|
||||
capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities)
|
||||
|
||||
-- zls = zig language server
|
||||
lsp.zls.setup {
|
||||
on_attach = on_attach,
|
||||
flags = {
|
||||
debounce_text_changes = 150
|
||||
},
|
||||
capabilities = capabilities
|
||||
}
|
||||
|
||||
-- lua-language-server
|
||||
lsp.sumneko_lua.setup {
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = {
|
||||
-- Tell the language server which version of Lua you're using (most
|
||||
-- likely LuaJIT in the case of Neovim)
|
||||
version = 'LuaJIT',
|
||||
},
|
||||
diagnostics = {
|
||||
-- Get the language server to recognize the `vim` global
|
||||
globals = {'vim'},
|
||||
},
|
||||
workspace = {
|
||||
-- Make the server aware of Neovim runtime files
|
||||
library = vim.api.nvim_get_runtime_file("", true),
|
||||
},
|
||||
-- Do not send telemetry data containing a randomized but unique
|
||||
-- identifier
|
||||
telemetry = {
|
||||
enable = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- bash-language-server
|
||||
lsp.bashls.setup{}
|
||||
|
||||
-- texlab = latex language server
|
||||
lsp.texlab.setup{}
|
||||
|
||||
-- terraform-ls = terraform language server (Hashicorp stable)
|
||||
lsp.terraformls.setup{}
|
||||
|
||||
-- tsserver = typescript language server, works for JS as well.
|
||||
lsp.tsserver.setup{}
|
|
@ -6,10 +6,10 @@ require('lualine').setup {
|
|||
options = {
|
||||
theme = 'gruvbox-material'
|
||||
},
|
||||
sections = {
|
||||
lualine_c = {
|
||||
'filename',
|
||||
metals_status_for_lualine
|
||||
}
|
||||
sections = {
|
||||
lualine_c = {
|
||||
'filename',
|
||||
metals_status_for_lualine
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
-- Autocmd that will actually be in charging of starting the whole thing
|
||||
local nvim_metals_group = vim.api.nvim_create_augroup(
|
||||
'nvim-metals',
|
||||
{
|
||||
clear = true
|
||||
}
|
||||
{ clear = true }
|
||||
)
|
||||
|
||||
vim.api.nvim_create_autocmd('FileType', {
|
||||
|
@ -14,9 +12,6 @@ vim.api.nvim_create_autocmd('FileType', {
|
|||
callback = function()
|
||||
local metals_config = require('metals').bare_config()
|
||||
|
||||
-- Capabilities for completion.
|
||||
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||
|
||||
metals_config.settings = {
|
||||
showImplicitArguments = true,
|
||||
showInferredType = true,
|
||||
|
@ -28,7 +23,7 @@ vim.api.nvim_create_autocmd('FileType', {
|
|||
-- status bar somehow."
|
||||
metals_config.init_options.statusBarProvider = 'on'
|
||||
|
||||
metals_config.capabilities = capabilities
|
||||
metals_config.capabilities = require('cmp_nvim_lsp').default_capabilities()
|
||||
require('metals').initialize_or_attach(metals_config)
|
||||
end,
|
||||
group = nvim_metals_group,
|
|
@ -1,4 +0,0 @@
|
|||
require('telescope').setup()
|
||||
|
||||
-- This is required to use FZF with Telescope.
|
||||
require('telescope').load_extension('fzf')
|
|
@ -1,28 +1,28 @@
|
|||
require'nvim-treesitter.configs'.setup {
|
||||
-- One of "all", "maintained", or a list of languages
|
||||
ensure_installed = {
|
||||
"c", "zig", "bash", "scala", "yaml", "css", "javascript",
|
||||
"latex", "clojure", "lua", "cpp", "hcl", "json"
|
||||
},
|
||||
-- One of "all", "maintained", or a list of languages
|
||||
ensure_installed = {
|
||||
"c", "zig", "bash", "scala", "yaml", "css", "javascript",
|
||||
"latex", "clojure", "lua", "cpp", "hcl", "json"
|
||||
},
|
||||
|
||||
-- Install languages synchronously (only applied to `ensure_installed`)
|
||||
sync_install = false,
|
||||
-- Install languages synchronously (only applied to `ensure_installed`)
|
||||
sync_install = false,
|
||||
|
||||
-- List of parsers to ignore installing
|
||||
ignore_install = { },
|
||||
-- List of parsers to ignore installing
|
||||
ignore_install = { },
|
||||
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = {},
|
||||
-- Setting this to true will run `:h syntax` and tree-sitter at the same
|
||||
-- time. Set this to `true` if you depend on 'syntax' being enabled (like
|
||||
-- for indentation). Using this option may slow down your editor, and you
|
||||
-- may see some duplicate highlights. Instead of true it can also be a list
|
||||
-- of languages
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = {},
|
||||
-- Setting this to true will run `:h syntax` and tree-sitter at the same
|
||||
-- time. Set this to `true` if you depend on 'syntax' being enabled (like
|
||||
-- for indentation). Using this option may slow down your editor, and you
|
||||
-- may see some duplicate highlights. Instead of true it can also be a list
|
||||
-- of languages
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
|
||||
indent = {
|
||||
enable = true
|
||||
}
|
||||
indent = {
|
||||
enable = true
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue