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.
 
 

344 lines
14 KiB

--------------------------------------------------------------------------------
-- Development
--------------------------------------------------------------------------------
-- Tools for supporting development, excluding language-specific which should
-- go in `lang-<language>.lua`.
--
return {
--------------------------------------------------------------------------------
-- Debugging
--------------------------------------------------------------------------------
{
name = 'vim-vdebug/vdebug',
opts = { requires = { provider = { 'python3' } } },
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 bunch of stuff, integrated with the LSP.
--
{
enable = false,
name = 'ms-jpq/coq_nvim',
opts = {
branch = 'coq',
['do'] = 'python3 -m coq deps'
},
config = {
auto_start = 'shut-up',
clients = {
tags = { enabled = false },
snippets = { enabled = false },
tree_sitter = { enabled = false },
buffers = { enabled = false },
tmux = { enabled = false },
}
}
},
----------------------------------------------------------------------------
-- Code completion provider
--
-- Provides completions for a whole bunch of stuff, managed separately through
-- the coc package.json
--
{
enable = true,
name = 'neoclide/coc.nvim',
opts = {
-- Only enable if npm is installed
requires = { binary = { 'npm' } },
branch = 'release'
},
config = {
extensions = {
['coc-blade'] = {
-- TODO: Figure out if there's some way we can set formatting
-- options globally?
},
-- ['coc-calc'] = { },
['coc-css'] = { },
['coc-cfn-lint'] = { },
['coc-dotenv'] = { },
['coc-highlight'] = { },
['coc-html'] = {
['html.autoClosingTags'] = false,
['html.autoCreateQuotes'] = false
},
['@yaegassy/coc-intelephense'] = {
-- ['codeLens.enable'] = true
},
['coc-json'] = { },
['coc-markdownlint'] = { },
['coc-markdown-preview-enhanced'] = { },
['coc-marketplace'] = { },
-- ['coc-phpls'] = {
-- ['intelephense.licenceKey'] = nil,
-- },
['coc-spell-checker'] = { },
['coc-sql'] = { },
['coc-swagger'] = { },
['coc-tsserver'] = { },
['coc-webpack'] = { },
['coc-webview'] = { },
['coc-yaml'] = { },
['@yaegassy/coc-tailwindcss3'] = { },
}
},
keys = {
{ mode = 'n', key = { '<leader>', 'c', 'a' }, map = "<Plug>(coc-codeaction-line)", label = "action" },
{ mode = 'n', key = { '<leader>', 'c', 'f' }, map = ":call CocAction('jumpReferences')<CR>", label = "find references" },
{ mode = 'n', key = { '<leader>', 'c', 'r' }, map = ":call CocAction('refactor')<CR>", label = "rename" },
{ mode = 'n', key = { '<leader>', 'c', 'd' }, map = ":call CocAction('jumpDefinition')<CR>", label = "go to definition" },
{ filetype = 'markdown', mode = 'n', key = { '<leader>', 'l', 'p' }, map = ':CocCommand markdown-preview-enhanced.openPreview<CR>', label = "preview" },
}
},
----------------------------------------------------------------------------
-- Code tag sidebar
--
-- Provides a UI for browsing code "tags" (classes, functions, etc) in the
-- currently open file.
--
{
name = 'preservim/tagbar',
opts = {
requires = { binary = { 'ctags' } },
['on'] = { 'TagbarToggle', 'TagbarOpen', 'TagbarOpenAutoClose' }
},
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', opts = { branch = 'main' } },
----------------------------------------------------------------------------
-- Todo Comments
--
-- Find todo/fixme/etc and highlight them, and allow viewing a list
-- project-wide
{
name = 'folke/todo-comments.nvim',
opts = { branch = "main" },
keys = {
{ mode = 'n', key = { '<leader>', 'w', 't' }, map = ':TodoTrouble<CR>', label = "todos list" },
{ mode = 'n', key = { '<leader>', 'w', 'T' }, map = ':TodoTelescope<CR>', label = "todos search" },
}
},
--------------------------------------------------------------------------------
-- 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',
opts = {
-- Only enable if git is installed
requires = { binary = { 'git' } },
['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',
opts = {
requires = { binary = { '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',
opts = {
requires = { binary = { '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',
opts = {
requires = { binary = { 'git' } },
-- ['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',
opts = {
requires = { binary = { 'docker' } },
['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',
opts = {
requires = { binary = { 'deno', 'docker' }, plugin = { 'vim-denops/denops.vim' } },
branch = 'main',
['on'] = { 'DockerContainers', 'DockerImages' }
},
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 },
}
},
}