mirror of
https://github.com/iofq/nvim.nix.git
synced 2026-01-23 08:55:16 -06:00
new lazy rice
This commit is contained in:
parent
1eb2b1bc3c
commit
ece2c1c694
33 changed files with 1132 additions and 780 deletions
92
nvim/lua/config/init.lua
Normal file
92
nvim/lua/config/init.lua
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
vim.opt.backspace = 'indent,eol,start'
|
||||
vim.opt.clipboard = 'unnamedplus'
|
||||
vim.opt.completeopt = 'menuone'
|
||||
vim.opt.expandtab = true -- insert tabs as spaces
|
||||
vim.opt.inccommand = 'split' -- incremental live completion
|
||||
vim.opt.laststatus = 1
|
||||
vim.opt.list = true
|
||||
vim.opt.nrformats:append('alpha') -- let Ctrl-a do letters as well
|
||||
vim.opt.path:append('**') -- enable fuzzy :find ing
|
||||
vim.opt.relativenumber = true
|
||||
vim.opt.shadafile = 'NONE' -- disable shada
|
||||
vim.opt.shiftwidth = 0 -- >> shifts by tabstop
|
||||
vim.opt.showmatch = true -- highlight matching brackets
|
||||
vim.opt.showmode = true
|
||||
vim.opt.signcolumn = 'no'
|
||||
vim.opt.spell = false
|
||||
vim.opt.softtabstop = -1 -- backspace removes tabstop
|
||||
vim.opt.swapfile = false
|
||||
vim.opt.tabstop = 2 -- 2 space tabs are based
|
||||
vim.opt.updatetime = 250 -- decrease update time
|
||||
vim.opt.virtualedit = 'onemore'
|
||||
vim.opt.wrap = true
|
||||
vim.g.fzf_layout = { window = { width = 0.9, height = 0.6 } }
|
||||
|
||||
-- Switch tab length on the fly
|
||||
vim.keymap.set('n', '\\t', function()
|
||||
vim.o.tabstop = vim.o.tabstop == 2 and 4 or 2
|
||||
end, { silent = true, desc = 'toggle tabstop' })
|
||||
|
||||
-- autocmd
|
||||
----------------------------------------
|
||||
local undopath = '~/.local/share/nvim/undo'
|
||||
vim.api.nvim_create_autocmd('VimEnter', {
|
||||
command = 'silent !mkdir -p ' .. undopath,
|
||||
group = vim.api.nvim_create_augroup('Init', {}),
|
||||
})
|
||||
-- open :g in buffers
|
||||
vim.api.nvim_create_autocmd('BufWinEnter', {
|
||||
pattern = '*',
|
||||
callback = function(event)
|
||||
if vim.bo[event.buf].filetype == 'help' then
|
||||
vim.cmd.only()
|
||||
vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true })
|
||||
vim.bo.buflisted = true
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- Configure Neovim diagnostic messages
|
||||
local function prefix_diagnostic(prefix, diagnostic)
|
||||
return string.format(prefix .. ' %s', diagnostic.message)
|
||||
end
|
||||
vim.diagnostic.config {
|
||||
virtual_text = {
|
||||
prefix = '',
|
||||
format = function(diagnostic)
|
||||
local severity = diagnostic.severity
|
||||
if severity == vim.diagnostic.severity.ERROR then
|
||||
return prefix_diagnostic('', diagnostic)
|
||||
end
|
||||
if severity == vim.diagnostic.severity.WARN then
|
||||
return prefix_diagnostic('⚠', diagnostic)
|
||||
end
|
||||
if severity == vim.diagnostic.severity.INFO then
|
||||
return prefix_diagnostic('ⓘ', diagnostic)
|
||||
end
|
||||
if severity == vim.diagnostic.severity.HINT then
|
||||
return prefix_diagnostic('', diagnostic)
|
||||
end
|
||||
return prefix_diagnostic('■', diagnostic)
|
||||
end,
|
||||
},
|
||||
update_in_insert = false,
|
||||
underline = true,
|
||||
severity_sort = true,
|
||||
float = {
|
||||
focusable = false,
|
||||
style = 'minimal',
|
||||
border = 'rounded',
|
||||
source = 'if_many',
|
||||
header = '',
|
||||
prefix = '',
|
||||
},
|
||||
}
|
||||
|
||||
-- random keymaps
|
||||
vim.keymap.set('n', 'gq', vim.cmd.bdelete, { silent = true })
|
||||
vim.keymap.set('n', 'gr', 'gT', { noremap = true, silent = true })
|
||||
vim.keymap.set('n', 'n', 'nzz', { noremap = true, silent = true })
|
||||
vim.keymap.set('n', 'N', 'Nzz', { noremap = true, silent = true })
|
||||
vim.keymap.set({ 'v', 'i' }, 'wq', '<esc>l', { noremap = true, silent = true })
|
||||
vim.keymap.set('n', '<leader>x', '"rd', { remap = true, silent = true })
|
||||
98
nvim/lua/plugins/completion.lua
Normal file
98
nvim/lua/plugins/completion.lua
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
return {
|
||||
{
|
||||
'hrsh7th/nvim-cmp',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-buffer',
|
||||
'hrsh7th/cmp-cmdline',
|
||||
'hrsh7th/cmp-path',
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
'ray-x/cmp-treesitter',
|
||||
'L3MON4D3/LuaSnip',
|
||||
'saadparwaiz1/cmp_luasnip',
|
||||
},
|
||||
config = function()
|
||||
local cmp = require('cmp')
|
||||
cmp.setup {
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
require('luasnip').lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
experimental = {
|
||||
native_menu = false,
|
||||
ghost_text = true,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert {
|
||||
['<C-j>'] = cmp.mapping.scroll_docs(-4),
|
||||
['<C-k>'] = cmp.mapping.scroll_docs(4),
|
||||
['<C-Space>'] = cmp.mapping.complete(),
|
||||
['<esc>'] = cmp.mapping.abort(),
|
||||
['<CR>'] = cmp.mapping.confirm { select = true }, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
||||
},
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'nvim_lsp' },
|
||||
{ name = 'luasnip' },
|
||||
}, {
|
||||
{ name = 'buffer' },
|
||||
}),
|
||||
}
|
||||
|
||||
cmp.setup.cmdline({ '/', '?' }, {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = {
|
||||
{ name = 'buffer' },
|
||||
},
|
||||
})
|
||||
|
||||
cmp.setup.cmdline(':', {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'path' },
|
||||
}, {
|
||||
{ name = 'cmdline' },
|
||||
}),
|
||||
matching = { disallow_symbol_nonprefix_matching = false },
|
||||
})
|
||||
end,
|
||||
},
|
||||
{
|
||||
'L3MON4D3/LuaSnip',
|
||||
event = 'VeryLazy',
|
||||
dependencies = { 'rafamadriz/friendly-snippets' },
|
||||
config = function()
|
||||
local ls = require('luasnip')
|
||||
ls.config.set_config {
|
||||
history = true,
|
||||
updateevents = 'TextChanged, TextChangedI',
|
||||
}
|
||||
require('luasnip.loaders.from_vscode').lazy_load()
|
||||
|
||||
vim.keymap.set({ 'i', 's' }, '<C-K>', function()
|
||||
if ls.expand_or_jumpable() then
|
||||
ls.expand_or_jump()
|
||||
end
|
||||
end, { silent = true })
|
||||
|
||||
vim.keymap.set({ 'i', 's' }, '<C-J>', function()
|
||||
if ls.jumpable(-1) then
|
||||
ls.jump(-1)
|
||||
end
|
||||
end, { silent = true })
|
||||
|
||||
vim.keymap.set({ 'i', 's' }, '<C-L>', function()
|
||||
if ls.choice_active() then
|
||||
ls.change_choice(1)
|
||||
end
|
||||
end, { silent = true })
|
||||
|
||||
--------------------
|
||||
-- Snippets --
|
||||
--------------------
|
||||
local fmta = require('luasnip.extras.fmt').fmta
|
||||
ls.add_snippets('go', {
|
||||
ls.snippet('ie', fmta('if err != nil {\n\treturn <err>\n}', { err = ls.insert_node(1, 'err') })),
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
61
nvim/lua/plugins/debug.lua
Normal file
61
nvim/lua/plugins/debug.lua
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
return {
|
||||
{
|
||||
'rcarriga/nvim-dap-ui',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'nvim-neotest/nvim-nio',
|
||||
},
|
||||
},
|
||||
{
|
||||
'mfussenegger/nvim-dap',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'leoluz/nvim-dap-go',
|
||||
'rcarriga/nvim-dap-ui',
|
||||
},
|
||||
config = function()
|
||||
local d = require('dap')
|
||||
local w = require('dap.ui.widgets')
|
||||
local ui = require('dapui')
|
||||
require('dap-go').setup()
|
||||
ui.setup()
|
||||
|
||||
local scopes = nil
|
||||
vim.keymap.set('n', '<leader>za', function()
|
||||
ui.toggle()
|
||||
end, { desc = 'toggle dapui' })
|
||||
vim.keymap.set('n', '<leader>zz', function()
|
||||
scopes = w.sidebar(w.scopes, {}, 'split')
|
||||
d.continue()
|
||||
end, { desc = 'start debugger' })
|
||||
vim.keymap.set('n', '<leader>zn', function()
|
||||
d.step_over()
|
||||
end, { desc = 'step over' })
|
||||
vim.keymap.set('n', '<leader>zi', function()
|
||||
d.step_into()
|
||||
end, { desc = 'step into' })
|
||||
vim.keymap.set('n', '<leader>zo', function()
|
||||
d.step_out()
|
||||
end, { desc = 'step out' })
|
||||
vim.keymap.set('n', '<leader>zx', function()
|
||||
d.toggle_breakpoint()
|
||||
end, { desc = 'toggle_breakpoint' })
|
||||
vim.keymap.set('n', '<leader>zr', function()
|
||||
d.run_last()
|
||||
end, { desc = 'run prev' })
|
||||
vim.keymap.set({ 'n', 'v' }, '<leader>zh', function()
|
||||
ui.eval()
|
||||
end, { desc = 'hover' })
|
||||
vim.keymap.set({ 'n', 'v' }, '<leader>zp', function()
|
||||
require('dap.ui.widgets').preview()
|
||||
end, { desc = 'preview' })
|
||||
vim.keymap.set('n', '<leader>zf', function()
|
||||
local widgets = require('dap.ui.widgets')
|
||||
widgets.centered_float(widgets.frames)
|
||||
end, { desc = 'view frames' })
|
||||
vim.keymap.set('n', '<leader>zs', function()
|
||||
scopes.toggle()
|
||||
end, { desc = 'toggle scope view' })
|
||||
end,
|
||||
},
|
||||
}
|
||||
197
nvim/lua/plugins/lsp.lua
Normal file
197
nvim/lua/plugins/lsp.lua
Normal file
|
|
@ -0,0 +1,197 @@
|
|||
return {
|
||||
{
|
||||
'folke/trouble.nvim',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'artemave/workspace-diagnostics.nvim',
|
||||
},
|
||||
config = function()
|
||||
require('trouble').setup()
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>de',
|
||||
'<cmd>Trouble diagnostics toggle focus=true<CR>',
|
||||
{ noremap = true, desc = 'Trouble diagnostics' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>dE',
|
||||
'<cmd>Trouble diagnostics toggle focus=true filter.buf=0<CR>',
|
||||
{ noremap = true, desc = 'Trouble diagnostics (currrent buffer)' }
|
||||
)
|
||||
vim.keymap.set('n', '<leader>dw', function()
|
||||
for _, client in ipairs(vim.lsp.get_clients { bufnr = 0 }) do
|
||||
require('workspace-diagnostics').populate_workspace_diagnostics(client, 0)
|
||||
end
|
||||
end, { noremap = true, desc = 'Populate Trouble workspace diagnostics' })
|
||||
end,
|
||||
},
|
||||
{
|
||||
'neovim/nvim-lspconfig',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'hrsh7th/cmp-nvim-lsp',
|
||||
},
|
||||
config = function()
|
||||
local lspconfig = require('lspconfig')
|
||||
lspconfig.util.default_config.capabilities = vim.tbl_deep_extend(
|
||||
'force',
|
||||
lspconfig.util.default_config.capabilities,
|
||||
require('cmp_nvim_lsp').default_capabilities()
|
||||
)
|
||||
|
||||
lspconfig.gopls.setup {
|
||||
settings = {
|
||||
gopls = {
|
||||
gofumpt = true,
|
||||
codelenses = {
|
||||
gc_details = true,
|
||||
test = true,
|
||||
},
|
||||
analyses = {
|
||||
unusedvariable = true,
|
||||
shadow = true,
|
||||
},
|
||||
hints = {
|
||||
assignVariableTypes = true,
|
||||
constantValues = true,
|
||||
functionTypeParameters = true,
|
||||
rangeVariableTypes = true,
|
||||
},
|
||||
usePlaceholders = true,
|
||||
staticcheck = true,
|
||||
},
|
||||
},
|
||||
on_attach = function()
|
||||
vim.api.nvim_command('au BufWritePre <buffer> lua vim.lsp.buf.format { async = false }')
|
||||
end,
|
||||
}
|
||||
lspconfig.jedi_language_server.setup {}
|
||||
lspconfig.nil_ls.setup {}
|
||||
lspconfig.phpactor.setup {}
|
||||
lspconfig.lua_ls.setup {
|
||||
on_init = function(client)
|
||||
local path = client.workspace_folders[1].name
|
||||
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then
|
||||
return
|
||||
end
|
||||
|
||||
client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
|
||||
runtime = {
|
||||
version = 'LuaJIT',
|
||||
},
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
library = {
|
||||
vim.env.VIMRUNTIME,
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
settings = {
|
||||
Lua = {},
|
||||
},
|
||||
}
|
||||
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Prev diagnostic' })
|
||||
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Next diagnostic' })
|
||||
|
||||
vim.api.nvim_create_autocmd('LspAttach', {
|
||||
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
||||
callback = function(ev)
|
||||
local bufnr = ev.buf
|
||||
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
||||
require('workspace-diagnostics').populate_workspace_diagnostics(client, bufnr)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'K',
|
||||
vim.lsp.buf.hover,
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hover' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>rn',
|
||||
vim.lsp.buf.rename,
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP Rename' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
{ 'n', 'v' },
|
||||
'<leader>da',
|
||||
vim.lsp.buf.code_action,
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP code action' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>dd',
|
||||
'<cmd>Telescope lsp_definitions<cr>',
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP definitions' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>di',
|
||||
'<cmd>Telescope lsp_implementations<cr>',
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP implementations' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>dr',
|
||||
'<cmd>Telescope lsp_references<cr>',
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP references' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>dt',
|
||||
'<cmd>Telescope lsp_type_definitions<cr>',
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP type defs' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>ds',
|
||||
'<cmd>Telescope lsp_document_symbols<cr>',
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP symbols' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>dl',
|
||||
vim.lsp.codelens.run,
|
||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP codelens' }
|
||||
)
|
||||
vim.keymap.set('n', '<leader>dh', function()
|
||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
||||
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hints toggle' })
|
||||
vim.keymap.set('n', '<space>df', function()
|
||||
vim.lsp.buf.format { async = true }
|
||||
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP format' })
|
||||
-- Auto-refresh code lenses
|
||||
if not client then
|
||||
return
|
||||
end
|
||||
local group = vim.api.nvim_create_augroup(string.format('lsp-%s-%s', bufnr, client.id), {})
|
||||
if client.server_capabilities.codeLensProvider then
|
||||
vim.api.nvim_create_autocmd({ 'InsertLeave', 'BufWritePost', 'TextChanged' }, {
|
||||
group = group,
|
||||
callback = function()
|
||||
vim.lsp.codelens.refresh { bufnr = bufnr }
|
||||
end,
|
||||
buffer = bufnr,
|
||||
})
|
||||
vim.lsp.codelens.refresh { bufnr = bufnr }
|
||||
end
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_exec_autocmds('FileType', {})
|
||||
end,
|
||||
},
|
||||
{
|
||||
'nvimtools/none-ls.nvim',
|
||||
event = 'VeryLazy',
|
||||
config = function()
|
||||
local null = require('null-ls')
|
||||
null.setup {
|
||||
sources = {
|
||||
null.builtins.diagnostics.puppet_lint,
|
||||
null.builtins.diagnostics.yamllint,
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
155
nvim/lua/plugins/mini.lua
Normal file
155
nvim/lua/plugins/mini.lua
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
return {
|
||||
{
|
||||
'echasnovski/mini.nvim',
|
||||
event = 'VeryLazy',
|
||||
config = function()
|
||||
require('mini.ai').setup()
|
||||
require('mini.comment').setup()
|
||||
require('mini.pairs').setup()
|
||||
require('mini.statusline').setup {
|
||||
content = {
|
||||
active = function()
|
||||
local mode, mode_hl = MiniStatusline.section_mode {}
|
||||
local git = function()
|
||||
local summary = vim.b.gitsigns_head
|
||||
if summary == nil then
|
||||
return ''
|
||||
end
|
||||
summary = '~' .. summary
|
||||
|
||||
return summary == '' and '' or summary
|
||||
end
|
||||
local diff = function()
|
||||
local summary = vim.b.gitsigns_status
|
||||
if summary == nil then
|
||||
return ''
|
||||
end
|
||||
|
||||
return summary
|
||||
end
|
||||
local diagnostics = MiniStatusline.section_diagnostics { trunc_width = 75 }
|
||||
local filename = MiniStatusline.section_filename { trunc_width = 140 }
|
||||
local search = MiniStatusline.section_searchcount { trunc_width = 75 }
|
||||
|
||||
return MiniStatusline.combine_groups {
|
||||
{ hl = mode_hl, strings = { mode } },
|
||||
'%<', -- Mark general truncate point
|
||||
{ hl = 'MiniStatuslineFilename', strings = { filename } },
|
||||
'%=', -- End left alignment
|
||||
{ hl = 'MiniStatusDevinfo', strings = { git(), diff(), diagnostics } },
|
||||
{ hl = mode_hl, strings = { search } },
|
||||
}
|
||||
end,
|
||||
inactive = function()
|
||||
local filename = MiniStatusline.section_filename { trunc_width = 140 }
|
||||
|
||||
return MiniStatusline.combine_groups {
|
||||
{ hl = 'MiniStatuslineFilename', strings = { filename } },
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
vim.opt.showmode = false
|
||||
|
||||
local miniclue = require('mini.clue')
|
||||
miniclue.setup {
|
||||
triggers = {
|
||||
{ mode = 'n', keys = '<Leader>' },
|
||||
{ mode = 'n', keys = 'g' },
|
||||
{ mode = 'n', keys = "'" },
|
||||
{ mode = 'n', keys = '`' },
|
||||
{ mode = 'n', keys = '"' },
|
||||
{ mode = 'n', keys = '<C-w>' },
|
||||
{ mode = 'n', keys = 'z' },
|
||||
},
|
||||
|
||||
clues = {
|
||||
miniclue.gen_clues.g(),
|
||||
miniclue.gen_clues.marks(),
|
||||
miniclue.gen_clues.registers(),
|
||||
miniclue.gen_clues.windows(),
|
||||
miniclue.gen_clues.z(),
|
||||
},
|
||||
}
|
||||
-- Add surrounding with sa
|
||||
-- Delete surrounding with sd.
|
||||
-- Replace surrounding with sr.
|
||||
-- Find surrounding with sf or sF (move cursor right or left).
|
||||
-- Highlight surrounding with sh<char>.
|
||||
-- 'f' - function call (string of alphanumeric symbols or '_' or '.' followed by balanced '()'). In "input" finds function call, in "output" prompts user to enter function name.
|
||||
-- 't' - tag. In "input" finds tag with same identifier, in "output" prompts user to enter tag name.
|
||||
-- All symbols in brackets '()', '[]', '{}', '<>".
|
||||
-- '?' - interactive. Prompts user to enter left and right parts.
|
||||
require('mini.surround').setup()
|
||||
|
||||
require('mini.trailspace').setup()
|
||||
vim.api.nvim_create_user_command('Trim', function()
|
||||
require('mini.trailspace').trim()
|
||||
end, {})
|
||||
|
||||
-- prefix \
|
||||
-- `b` - |'background'|.
|
||||
-- `c` - |'cursorline'|.
|
||||
-- `C` - |'cursorcolumn'|.
|
||||
-- `d` - diagnostic (via |vim.diagnostic.enable()| and |vim.diagnostic.disable()|).
|
||||
-- `h` - |'hlsearch'| (or |v:hlsearch| to be precise).
|
||||
-- `i` - |'ignorecase'|.
|
||||
-- `l` - |'list'|.
|
||||
-- `n` - |'number'|.
|
||||
-- `r` - |'relativenumber'|.
|
||||
-- `s` - |'spell'|.
|
||||
-- `w` - |'wrap'|.
|
||||
require('mini.basics').setup {
|
||||
mappings = {
|
||||
windows = true,
|
||||
},
|
||||
}
|
||||
|
||||
local map = require('mini.map')
|
||||
map.setup {
|
||||
symbols = {
|
||||
scroll_line = '┃',
|
||||
scroll_view = '',
|
||||
},
|
||||
integrations = {
|
||||
map.gen_integration.builtin_search(),
|
||||
map.gen_integration.diagnostic(),
|
||||
map.gen_integration.gitsigns(),
|
||||
},
|
||||
window = {
|
||||
show_integration_count = false,
|
||||
winblend = 0,
|
||||
width = 5,
|
||||
},
|
||||
}
|
||||
vim.keymap.set('n', '<leader>nm', map.toggle, { noremap = true, desc = 'minimap open' })
|
||||
|
||||
-- gS
|
||||
require('mini.splitjoin').setup {
|
||||
detect = { separator = '[,;\n]' },
|
||||
}
|
||||
|
||||
-- Replace text with register 'gr',
|
||||
-- Sort text 'gs',
|
||||
require('mini.operators').setup()
|
||||
require('mini.jump2d').setup { mappings = { start_jumping = '<leader>S' } }
|
||||
|
||||
local indent = require('mini.indentscope')
|
||||
indent.setup {
|
||||
draw = { delay = 0 },
|
||||
}
|
||||
indent.gen_animation.none()
|
||||
|
||||
require('mini.notify').setup {
|
||||
window = {
|
||||
winblend = 0,
|
||||
config = {
|
||||
anchor = 'SE',
|
||||
border = 'double',
|
||||
row = vim.o.lines,
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
220
nvim/lua/plugins/misc.lua
Normal file
220
nvim/lua/plugins/misc.lua
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
return {
|
||||
{
|
||||
'danymat/neogen',
|
||||
keys = {
|
||||
{ '<leader>nd', '<cmd>Neogen<CR>', { noremap = true, silent = true, desc = 'Neogen - gen comments' } },
|
||||
},
|
||||
},
|
||||
{
|
||||
'akinsho/toggleterm.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
open_mapping = [[<C-\>]],
|
||||
direction = 'float',
|
||||
close_on_exit = true,
|
||||
autochdir = true,
|
||||
},
|
||||
},
|
||||
{
|
||||
'jinh0/eyeliner.nvim',
|
||||
event = 'VeryLazy',
|
||||
config = function()
|
||||
vim.api.nvim_set_hl(0, 'EyelinerPrimary', { underline = true })
|
||||
vim.api.nvim_set_hl(0, 'EyelinerSecondary', { underline = true })
|
||||
end,
|
||||
},
|
||||
{ 'OXY2DEV/markview.nvim', event = 'VeryLazy' },
|
||||
{ 'tiagovla/scope.nvim', event = 'VeryLazy' },
|
||||
{
|
||||
'chrisgrieser/nvim-early-retirement',
|
||||
event = 'VeryLazy',
|
||||
opts = { minimumBufferNum = 6 },
|
||||
},
|
||||
{
|
||||
'AckslD/nvim-neoclip.lua',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'nvim-telescope/telescope.nvim',
|
||||
},
|
||||
opts = {
|
||||
default_register = '+',
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('neoclip').setup(opts)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>fp',
|
||||
'<cmd>Telescope neoclip<CR>',
|
||||
{ noremap = true, silent = true, desc = 'Pick clipboard history' }
|
||||
)
|
||||
end,
|
||||
},
|
||||
{
|
||||
'leath-dub/snipe.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
ui = {
|
||||
position = 'center',
|
||||
},
|
||||
sort = 'last',
|
||||
},
|
||||
config = function(_, opts)
|
||||
local snipe = require('snipe')
|
||||
snipe.setup(opts)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>fb',
|
||||
snipe.open_buffer_menu,
|
||||
{ noremap = true, silent = true, desc = 'Pick buffers (snipe.nvim)' }
|
||||
)
|
||||
end,
|
||||
},
|
||||
{
|
||||
'sindrets/diffview.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
enhanced_diff_hl = true,
|
||||
default_args = {
|
||||
DiffviewOpen = { '--imply-local' },
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
vim.keymap.set('n', '<leader>nb', vim.cmd.DiffviewOpen, { noremap = true, desc = 'diffview open' })
|
||||
end,
|
||||
},
|
||||
{
|
||||
'NeogitOrg/neogit',
|
||||
opts = {
|
||||
disable_builtin_notifications = true,
|
||||
integrations = {
|
||||
diffview = true,
|
||||
telescope = true,
|
||||
fzf_lua = true,
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
'<leader>ng',
|
||||
function()
|
||||
require('neogit').open()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Neogit' },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
'stevearc/oil.nvim',
|
||||
opts = {
|
||||
watch_for_changes = true,
|
||||
columns = {
|
||||
'permissions',
|
||||
'size',
|
||||
},
|
||||
view_options = {
|
||||
show_hidden = true,
|
||||
},
|
||||
keymaps = {
|
||||
['wq'] = 'actions.close',
|
||||
},
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
'<leader>nc',
|
||||
function()
|
||||
require('oil').toggle_float()
|
||||
end,
|
||||
{ noremap = true, silent = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
'mbbill/undotree',
|
||||
event = 'VeryLazy',
|
||||
keys = {
|
||||
{ '<leader>nu', '<cmd>UndotreeToggle<cr>' },
|
||||
},
|
||||
config = function()
|
||||
vim.g.undotree_ShortIndicators = 1
|
||||
vim.g.undotree_SetFocusWhenToggle = 1
|
||||
end,
|
||||
},
|
||||
{
|
||||
'EdenEast/nightfox.nvim',
|
||||
lazy = false,
|
||||
priority = 10000,
|
||||
opts = {
|
||||
options = {
|
||||
transparent = true,
|
||||
terminal_colors = false,
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require('nightfox').setup(opts)
|
||||
vim.cmd('colorscheme terafox')
|
||||
vim.api.nvim_set_hl(0, 'MiniNotifyNormal', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'MiniNotifyTitle', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'MiniNotifyBorder', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'MiniMapNormal', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'MiniClueNormal', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'StatusLine', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = 'green', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = 'red', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = 'green', bold = true })
|
||||
end,
|
||||
},
|
||||
{
|
||||
'lewis6991/gitsigns.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
signcolumn = false,
|
||||
numhl = true,
|
||||
on_attach = function()
|
||||
local gs = package.loaded.gitsigns
|
||||
vim.keymap.set('n', '<leader>gg', gs.preview_hunk, { desc = 'git preview hunk' })
|
||||
vim.keymap.set('n', '<leader>gr', gs.reset_hunk, { desc = 'git reset hunk' })
|
||||
vim.keymap.set('n', '<leader>gb', function()
|
||||
gs.blame_line { full = true }
|
||||
end, { desc = 'git blame_line' })
|
||||
vim.keymap.set('v', '<leader>gr', function()
|
||||
gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') }
|
||||
end, { desc = 'git reset hunk' })
|
||||
|
||||
-- Navigation
|
||||
vim.keymap.set('n', ']g', function()
|
||||
if vim.wo.diff then
|
||||
return ']c'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.next_hunk()
|
||||
end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
|
||||
vim.keymap.set('n', '[g', function()
|
||||
if vim.wo.diff then
|
||||
return '[c'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.prev_hunk()
|
||||
end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
'hedyhli/outline.nvim',
|
||||
cmd = { 'Outline', 'OutlineOpen' },
|
||||
keys = {
|
||||
{ '<leader>no', '<cmd>Outline<CR>', desc = 'Toggle outline' },
|
||||
},
|
||||
opts = {
|
||||
outline_window = {
|
||||
position = 'left',
|
||||
width = 30,
|
||||
auto_close = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
95
nvim/lua/plugins/telescope.lua
Normal file
95
nvim/lua/plugins/telescope.lua
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
return {
|
||||
{
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
event = 'VeryLazy',
|
||||
build = 'make',
|
||||
},
|
||||
{
|
||||
'nvim-telescope/telescope.nvim',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'nvim-lua/plenary.nvim',
|
||||
'nvim-telescope/telescope-fzf-native.nvim',
|
||||
'nvim-tree/nvim-web-devicons',
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
'tiagovla/scope.nvim',
|
||||
},
|
||||
config = function()
|
||||
local telescope = require('telescope')
|
||||
local actions = require('telescope.actions')
|
||||
telescope.setup {
|
||||
defaults = {
|
||||
layout_strategy = 'vertical',
|
||||
layout_config = { width = 0.90 },
|
||||
prompt_title = false,
|
||||
results_title = false,
|
||||
preview_title = false,
|
||||
vimgrep_arguments = {
|
||||
'rg',
|
||||
'-L',
|
||||
'--color=never',
|
||||
'--no-heading',
|
||||
'--hidden',
|
||||
'--with-filename',
|
||||
'--line-number',
|
||||
'--column',
|
||||
'--smart-case',
|
||||
},
|
||||
preview = { treesitter = true },
|
||||
path_display = { 'truncate' },
|
||||
mappings = {
|
||||
i = {
|
||||
['wq'] = actions.close,
|
||||
['<Esc>'] = actions.close,
|
||||
['<C-k>'] = actions.move_selection_previous,
|
||||
['<C-j>'] = actions.move_selection_next,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
telescope.load_extension('fzf')
|
||||
telescope.load_extension('scope')
|
||||
|
||||
local b = require('telescope.builtin')
|
||||
-- Fall back to find_files if not in a git repo
|
||||
local project_files = function()
|
||||
local opts = {} -- define here if you want to define something
|
||||
local ok = pcall(b.git_files, opts)
|
||||
if not ok then
|
||||
b.find_files(opts)
|
||||
end
|
||||
end
|
||||
|
||||
vim.keymap.set('n', '<leader>ff', project_files, { noremap = true, silent = true, desc = 'Fuzzy find git files' })
|
||||
vim.keymap.set('n', '<leader>fg', b.find_files, { noremap = true, silent = true, desc = 'Fuzzy find files' })
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>fc',
|
||||
b.command_history,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find command_history' }
|
||||
)
|
||||
vim.keymap.set('n', '<leader>fa', b.live_grep, { noremap = true, silent = true, desc = 'Fuzzy find grep' })
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>f8',
|
||||
b.grep_string,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find grep current word' }
|
||||
)
|
||||
vim.keymap.set('n', '<leader>fq', b.quickfix, { noremap = true, silent = true, desc = 'Fuzzy find quickfix' })
|
||||
vim.keymap.set('n', '<leader>f?', b.builtin, { noremap = true, silent = true, desc = 'See all pickers' })
|
||||
vim.keymap.set('n', '<leader>f<BS>', b.resume, { noremap = true, silent = true, desc = 'Fuzzy find resume' })
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader>fs',
|
||||
b.lsp_document_symbols,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find treesitter objects' }
|
||||
)
|
||||
vim.keymap.set(
|
||||
'n',
|
||||
'<leader><leader>',
|
||||
'<cmd>Telescope scope buffers<cr>',
|
||||
{ noremap = true, silent = true, desc = 'Pick buffers (scope.nvim)' }
|
||||
)
|
||||
end,
|
||||
},
|
||||
}
|
||||
77
nvim/lua/plugins/treesitter.lua
Normal file
77
nvim/lua/plugins/treesitter.lua
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
return {
|
||||
{
|
||||
'nvim-treesitter/nvim-treesitter',
|
||||
event = 'VeryLazy',
|
||||
dependencies = {
|
||||
'nvim-treesitter/nvim-treesitter-context',
|
||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||
},
|
||||
config = function()
|
||||
require('nvim-treesitter.configs').setup {
|
||||
ensure_installed = {},
|
||||
highlight = {
|
||||
enable = true,
|
||||
disable = function(_, buf)
|
||||
local max_filesize = 100 * 1024 -- 100 KiB
|
||||
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
|
||||
if ok and stats and stats.size > max_filesize then
|
||||
return true
|
||||
end
|
||||
end,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
indent = {
|
||||
enable = true,
|
||||
},
|
||||
autopairs = {
|
||||
enable = true,
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
['af'] = '@function.outer',
|
||||
['if'] = '@function.inner',
|
||||
['aa'] = '@statement.outer',
|
||||
['ia'] = '@parameter.inner',
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
goto_next_start = {
|
||||
[']a'] = '@parameter.inner',
|
||||
[']f'] = '@function.outer',
|
||||
},
|
||||
goto_previous_start = {
|
||||
['[a'] = '@parameter.inner',
|
||||
['[f'] = '@function.outer',
|
||||
},
|
||||
},
|
||||
swap = {
|
||||
enable = true,
|
||||
swap_next = {
|
||||
['s]'] = '@parameter.inner',
|
||||
},
|
||||
swap_previous = {
|
||||
['s['] = '@parameter.inner',
|
||||
},
|
||||
},
|
||||
},
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = '<CR>',
|
||||
node_incremental = '<TAB>',
|
||||
node_decremental = '<S-TAB>',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
require('treesitter-context').setup {
|
||||
max_lines = 2,
|
||||
min_window_height = 50,
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue