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
	
	 pfm
						pfm