You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

269 lines
12 KiB

--------------------------------------------------------------------------------
-- Development
--------------------------------------------------------------------------------
-- Tools for supporting development, excluding language-specific which should
-- go in `lang-<language>.lua`.
--
return {
--------------------------------------------------------------------------------
-- Debugging
--------------------------------------------------------------------------------
{
name = 'vim-vdebug/vdebug',
keys = {
{ mode = 'n', key = { '<leader>', 'd', 'd' }, group = true, label = 'debugger' },
{ mode = 'v', key = { '<leader>', 'd', 'd' }, group = true, label = 'debugger' },
{ mode = 'n', key = { '<F5>' }, virtual = true, label = 'start debugger' },
{ mode = 'n', key = { '<F10>' }, virtual = true, label = 'set breakpoint' },
{ mode = 'n', key = { '<leader>', 'd', 'd', 'b' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):setBreakpoint()<CR>', label = 'toggle breakpoint' },
{ mode = 'n', key = { '<leader>', 'd', 'd', 'c' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):setConditionalBreakpoint()<CR>', label = 'conditional breakpoint' },
{ mode = 'n', key = { '<leader>', 'd', 'd', 't' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):startTrace()<CR>', label = 'trace expression' },
{ mode = 'v', key = { '<leader>', 'd', 'd', 't' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):startTrace()<CR>', label = 'trace expression' },
{ mode = 'n', key = { '<leader>', 'd', 'd', 'e' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):eval()<CR>', label = 'eval code' },
{ mode = 'v', key = { '<leader>', 'd', 'd', 'e' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):eval()<CR>', label = 'eval code' },
{ mode = 'n', key = { '<leader>', 'd', 'd', 'w' }, map = ':lua nukevim.modules:get("vim-vdebug/vdebug"):showBreakpoints()<CR>', label = 'show breakpoints' },
}
},
--------------------------------------------------------------------------------
-- Editing
--------------------------------------------------------------------------------
-- Things that make the actual typing experience better.
----------------------------------------------------------------------------
-- .editorconfig
--
-- Load and respect the .editorconfig file in projects
--
{ name = 'editorconfig/editorconfig-vim' },
--------------------------------------------------------------------------------
-- Intellisense
--------------------------------------------------------------------------------
-- Things that provide code insights and completion.
----------------------------------------------------------------------------
-- Code completion provider
--
-- Provides completions for a whole bunch of stuff, managed separately through
-- the coc package.json
--
{
name = 'neoclide/coc.nvim',
-- Only enable this plugin if npm is installed
requires = { 'npm' },
config = {
branch = 'master',
['do'] = 'npm install'
},
keys = {
{ mode = 'n', key = { '<leader>', 'c', 'r' }, map = ":call CocAction('jumpReferences')<CR>", label = "references" },
}
},
----------------------------------------------------------------------------
-- Code tag sidebar
--
-- Provides a UI for browsing code "tags" (classes, functions, etc) in the
-- currently open file.
--
{
name = 'preservim/tagbar',
requires = { 'ctags' },
config = { ['on'] = { 'TagbarToggle', 'TagbarOpen', 'TagbarOpenAutoClose' } },
-- keys = {
-- { mode = 'n', key = { '<leader>', 't' }, map = ':TagbarOpenAutoClose<CR>', label = 'Show File Structure' }
-- }
keys = {
{ mode = 'n', key = { '<A-;>' }, map = ':TagbarOpenAutoClose<CR>', label = 'show tagbar' },
{ mode = 'i', key = { '<A-;>' }, map = '<ESC>:TagbarOpenAutoClose<CR>', label = 'show tagbar' },
}
},
--------------------------------------------------------------------------------
-- Projects
--------------------------------------------------------------------------------
-- Things that make working with projects better.
----------------------------------------------------------------------------
-- Making the working directory follow your projects
--
-- Whenever you load a new file, changes the working directory to the
-- nearest parent that has a `.git` folder in it, generally just working to
-- automatically always be in your current project's folder.
--
{ name = 'airblade/vim-rooter' },
----------------------------------------------------------------------------
-- Trouble - Show a todo list and list of errors from the lsp
--
{ name = 'kyazdani42/nvim-web-devicons' },
{ name = 'folke/trouble.nvim', config = { branch = 'main' } },
----------------------------------------------------------------------------
-- Todo Comments
--
-- Find todo/fixme/etc and highlight them, and allow viewing a list
-- project-wide
{
name = 'folke/todo-comments.nvim',
config = { branch = "main" },
keys = {
{ mode = 'n', key = { '<leader>', 'w', 't' }, map = ':TodoTrouble<CR>', label = "todos" },
}
},
--------------------------------------------------------------------------------
-- UI
--------------------------------------------------------------------------------
-- Things that make the UI nicer.
----------------------------------------------------------------------------
-- Collect scope at the top of the editor to maintain context
--
-- E.g., as you scroll down, if you're within a function() whose
-- declaration has scrolled off-screen, this will pin it to the top of the
-- editor so it's always visible.
--
{ enable = false, name = 'wellle/context.vim' },
--------------------------------------------------------------------------------
-- Tool: Git
--------------------------------------------------------------------------------
-- Things that make your git experience better.
----------------------------------------------------------------------------
-- Git Wrapper
--
-- Adds a :G command that allows you to specify most git commands and have
-- them do sensible things from within vim with a vim-y interface.
--
{
name = 'tpope/vim-fugitive',
-- Only enable if git is installed
requires = { 'git' },
config = { ['on'] = { 'G', 'Gdiffsplit', 'GDelete' } },
-- Put a bunch of stuff in the <leader> menu
keys = {
{ mode = 'n', key = { '<leader>', 'g', 'b' }, map = ':G blame<CR>', label = 'blame' },
{ mode = 'n', key = { '<leader>', 'g', 'd' }, map = ':Gdiffsplit<CR>', label = 'diff' },
{ mode = 'n', key = { '<leader>', 'g', 'l' }, map = ':G log<CR>', label = 'log' },
{ mode = 'n', key = { '<leader>', 'g', 'r' }, map = ':GDelete<CR>', label = 'rm' },
{ mode = 'n', key = { '<leader>', 'g', 's' }, map = ':G<CR>', label = 'status' },
{ mode = 'n', key = { '<leader>', 'g', 'a' }, map = ':G add %<CR>', label = 'add' },
{ mode = 'n', key = { '<leader>', 'g', 'c' }, map = ':G commit<CR>', label = 'commit' },
{ mode = 'n', key = { '<leader>', 'g', 'p' }, map = ':G push<CR>', label = 'push' },
{ mode = 'n', key = { '<leader>', 'g', 'x' }, map = ':lua nukevim.modules:get("tpope/vim-fugitive"):on_change_branch()<CR>', label = 'change branch' },
{ mode = 'n', key = { '<leader>', 'g', 'z' }, map = ':lua nukevim.modules:get("tpope/vim-fugitive"):on_checkout()<CR>', label = 'checkout', without = { 'nvim-telescope/telescope.nvim' } },
}
},
----------------------------------------------------------------------------
-- Better log browsing
--
-- Show the commit history of the repo in the usual branching tree type
-- list.
--
{
name = 'junegunn/gv.vim',
requires = { 'git' },
keys = {
{ mode = 'n', key = { '<leader>', 'g', 'g' }, map = ':GV<CR>', label = 'graph' }
}
},
----------------------------------------------------------------------------
-- Show line-by-line changes in the editor
--
-- Shows +/-/~ in the gutter to signify line-level changes versus the most
-- recent commit and provides tools for working with hunks.
--
{
name = 'airblade/vim-gitgutter',
requires = { 'git' },
keys = {
{ mode = 'n', key = { '<leader>', 'g', 'r' }, map = '<Plug>(GitGutterPrevHunk)', label = 'previous hunk' },
{ mode = 'n', key = { '<leader>', 'g', 'f' }, map = '<Plug>(GitGutterNextHunk)', label = 'next hunk' },
{ mode = 'n', key = { '<leader>', 'g', 't' }, map = '<Plug>(GitGutterStageHunk)', label = 'stage hunk' },
{ mode = 'n', key = { '<leader>', 'g', 'y' }, map = '<Plug>(GitGutterPreviewHunk)', label = 'preview hunk' },
}
},
----------------------------------------------------------------------------
-- Show blame on each line
--
-- vscode style codelens blame shown on each line after a delay
--
{
name = 'apzelos/blamer.nvim',
requires = { 'git' },
-- config = {
-- ['on'] = { 'BlamerToggle' }
-- },
keys = {
{ mode = 'n', key = { '<leader>', 'g', 'w' }, map = '<Cmd>BlamerToggle<CR>', label = 'toggle inline blame' },
}
},
--------------------------------------------------------------------------------
-- Tool: Docker
--------------------------------------------------------------------------------
-- Things that make your docker experience better.
----------------------------------------------------------------------------
-- Pure vimscript docker container management
--
-- This plugin is disabled by default as I prefer the "denops-docker" listed
-- below, but if you can't/won't install deno then this is an option.
--
{
enable = false,
name = 'kkvh/vim-docker-tools',
requires = { 'docker' },
config = { ['on'] = { 'DockerToolsOpen', 'DockerToolsToggle' } },
keys = {
{ mode = 'n', key = { '<leader>', 'd', 'c' }, map = ':below new<CR>:DockerToolsOpen<CR>', label = 'docker containers' }
}
},
----------------------------------------------------------------------------
-- Docker container and image management
--
-- This plugin seems a little more polished and full-featured, so as long
-- as deno is available enable this instead.
--
{
enable = true,
name = 'skanehira/denops-docker.vim',
config = { branch = 'main', ['on'] = { 'DockerContainers', 'DockerImages' } },
requires = { 'deno', 'docker' },
keys = {
{ mode = 'n', key = { '<leader>', 'd', 'c' }, map = ':below new<CR>:DockerContainers<CR>8<C-w>_', options = { silent = true }, label = 'docker containers' },
{ mode = 'n', key = { '<leader>', 'd', 'i' }, map = ':below new<CR>:DockerImages<CR>8<C-w>_', options = { silent = true }, label = 'docker images' },
{ filetype = 'docker-containers', mode = 'n', key = { 'u' }, label = 'start', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { 'd' }, label = 'stop', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { '<C-k>' }, label = 'kill', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { 'a' }, label = 'terminal', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { 't' }, label = 'log', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { '<C-d>' }, label = 'delete', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { 'q' }, label = 'close window', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { 'r' }, label = 'restart', virtual = true },
{ filetype = 'docker-containers', mode = 'n', key = { '<CR>' }, label = 'inspect', virtual = true },
{ filetype = 'docker-images', mode = 'n', key = { '<CR>' }, label = 'inspect', virtual = true },
{ filetype = 'docker-images', mode = 'n', key = { '<C-d>' }, label = 'delete', virtual = true },
{ filetype = 'docker-images', mode = 'n', key = { 'r' }, label = 'run', virtual = true },
{ filetype = 'docker-images', mode = 'n', key = { 'q' }, label = 'close window', virtual = true },
}
},
}