mirror of
https://github.com/iofq/nvim.nix.git
synced 2026-01-23 08:55:16 -06:00
migrate from lazy in anticipation of vim.pack
This commit is contained in:
parent
31f7ee21e8
commit
8922491578
15 changed files with 417 additions and 719 deletions
|
|
@ -52,7 +52,6 @@ let
|
||||||
externalPackages = extraPackages ++ (optionals withSqlite [ pkgs.sqlite ]);
|
externalPackages = extraPackages ++ (optionals withSqlite [ pkgs.sqlite ]);
|
||||||
|
|
||||||
# Map all plugins to an attrset { plugin = <plugin>; config = <config>; optional = <tf>; ... }
|
# Map all plugins to an attrset { plugin = <plugin>; config = <config>; optional = <tf>; ... }
|
||||||
normalizedPlugins = map (x: defaultPlugin // (if x ? plugin then x else { plugin = x; })) plugins;
|
|
||||||
|
|
||||||
# This nixpkgs util function creates an attrset
|
# This nixpkgs util function creates an attrset
|
||||||
# that pkgs.wrapNeovimUnstable uses to configure the Neovim build.
|
# that pkgs.wrapNeovimUnstable uses to configure the Neovim build.
|
||||||
|
|
@ -65,45 +64,20 @@ let
|
||||||
viAlias
|
viAlias
|
||||||
vimAlias
|
vimAlias
|
||||||
;
|
;
|
||||||
plugins = normalizedPlugins;
|
|
||||||
|
plugins = (pkgs.neovimUtils.normalizePlugins plugins);
|
||||||
};
|
};
|
||||||
|
|
||||||
packDir = pkgs.neovimUtils.packDir {
|
packDir = pkgs.neovimUtils.packDir {
|
||||||
myNeovimPackages = pkgs.neovimUtils.normalizedPluginsToVimPackage normalizedPlugins;
|
iofq = pkgs.neovimUtils.normalizedPluginsToVimPackage (pkgs.neovimUtils.normalizePlugins plugins);
|
||||||
};
|
};
|
||||||
|
|
||||||
# This uses the ignoreConfigRegexes list to filter
|
|
||||||
# the nvim directory
|
|
||||||
nvimRtpSrc =
|
|
||||||
let
|
|
||||||
src = ../nvim;
|
|
||||||
in
|
|
||||||
lib.cleanSourceWith {
|
|
||||||
inherit src;
|
|
||||||
name = "nvim-rtp-src";
|
|
||||||
filter =
|
|
||||||
path: tyoe:
|
|
||||||
let
|
|
||||||
srcPrefix = toString src + "/";
|
|
||||||
relPath = lib.removePrefix srcPrefix (toString path);
|
|
||||||
in
|
|
||||||
lib.all (regex: builtins.match regex relPath == null) ignoreConfigRegexes;
|
|
||||||
};
|
|
||||||
|
|
||||||
# Split runtimepath into 3 directories:
|
|
||||||
# - lua, to be prepended to the rtp at the beginning of init.lua
|
|
||||||
# - nvim, containing plugin, ftplugin, ... subdirectories
|
|
||||||
# - after, to be sourced last in the startup initialization
|
|
||||||
# See also: https://neovim.io/doc/user/starting.html
|
|
||||||
nvimRtp = stdenv.mkDerivation {
|
nvimRtp = stdenv.mkDerivation {
|
||||||
name = "nvim-rtp";
|
name = "nvim-rtp";
|
||||||
src = nvimRtpSrc;
|
src = ../nvim;
|
||||||
|
|
||||||
buildPhase = ''
|
|
||||||
mkdir -p $out/
|
|
||||||
'';
|
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
|
mkdir -p $out/
|
||||||
cp -r . $out/
|
cp -r . $out/
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
@ -112,30 +86,9 @@ let
|
||||||
# It wraps the user init.lua, prepends the lua lib directory to the RTP
|
# It wraps the user init.lua, prepends the lua lib directory to the RTP
|
||||||
# and prepends the nvim and after directory to the RTP
|
# and prepends the nvim and after directory to the RTP
|
||||||
initLua = ''
|
initLua = ''
|
||||||
LAZY_OPTS = {
|
|
||||||
performance = {
|
|
||||||
reset_packpath = false,
|
|
||||||
rtp = {
|
|
||||||
reset = false,
|
|
||||||
disabled_plugins = {
|
|
||||||
"netrwPlugin",
|
|
||||||
"tutor",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
dev = {
|
|
||||||
path = "${packDir}/pack/myNeovimPackages/start",
|
|
||||||
patterns = {""},
|
|
||||||
},
|
|
||||||
checker = {
|
|
||||||
enabled = false,
|
|
||||||
},
|
|
||||||
install = { missing = false, },
|
|
||||||
spec = {{ import = "plugins" }},
|
|
||||||
}
|
|
||||||
vim.opt.rtp:prepend('${nvimRtp}')
|
vim.opt.rtp:prepend('${nvimRtp}')
|
||||||
''
|
''
|
||||||
+ (builtins.readFile ../nvim/init.lua);
|
+ builtins.readFile ../nvim/init.lua;
|
||||||
|
|
||||||
# Add arguments to the Neovim wrapper script
|
# Add arguments to the Neovim wrapper script
|
||||||
extraMakeWrapperArgs = builtins.concatStringsSep " " (
|
extraMakeWrapperArgs = builtins.concatStringsSep " " (
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,13 @@ let
|
||||||
conform-nvim
|
conform-nvim
|
||||||
dart-nvim
|
dart-nvim
|
||||||
diffview-nvim
|
diffview-nvim
|
||||||
lazy-nvim
|
|
||||||
mini-nvim
|
mini-nvim
|
||||||
nvim-lint
|
nvim-lint
|
||||||
nvim-lspconfig
|
nvim-lspconfig
|
||||||
nvim-treesitter.withAllGrammars
|
nvim-treesitter.withAllGrammars
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter-textobjects
|
||||||
quicker-nvim
|
quicker-nvim
|
||||||
|
refactoring-nvim
|
||||||
render-markdown-nvim
|
render-markdown-nvim
|
||||||
snacks-nvim
|
snacks-nvim
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -1,33 +1,49 @@
|
||||||
vim.g.mapleader = ' '
|
vim.g.mapleader = ' '
|
||||||
-- If lazy_opts is set, we're running in wrapped neovim via nix
|
vim.opt.autowrite = true
|
||||||
if not LAZY_OPTS then
|
vim.opt.backspace = 'indent,eol,start'
|
||||||
-- Bootstrapping lazy.nvim
|
vim.opt.confirm = true
|
||||||
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
|
vim.opt.completeopt = 'menuone,popup,noselect,fuzzy'
|
||||||
if not vim.loop.fs_stat(lazypath) then
|
vim.opt.diffopt = 'internal,filler,closeoff,inline:char'
|
||||||
vim.fn.system {
|
vim.opt.expandtab = true -- insert tabs as spaces
|
||||||
'git',
|
vim.opt.inccommand = 'split' -- incremental live completion
|
||||||
'clone',
|
vim.opt.laststatus = 1 -- statusline only if split
|
||||||
'--filter=blob:none',
|
vim.opt.nrformats:append('alpha') -- let Ctrl-a do letters as well
|
||||||
'https://github.com/folke/lazy.nvim.git',
|
vim.opt.path:append('**') -- enable fuzzy :find ing
|
||||||
'--branch=stable', -- latest stable release
|
vim.opt.relativenumber = true
|
||||||
lazypath,
|
vim.opt.shadafile = 'NONE' -- disable shada (unless session)
|
||||||
}
|
vim.opt.shiftwidth = 0 -- >> shifts by tabstop
|
||||||
end
|
vim.opt.showmatch = true -- highlight matching brackets
|
||||||
vim.opt.rtp:prepend(lazypath)
|
vim.opt.showmode = true
|
||||||
LAZY_OPTS = {
|
vim.opt.signcolumn = 'no'
|
||||||
spec = { { import = 'plugins' } },
|
vim.opt.softtabstop = -1 -- backspace removes tabstop
|
||||||
performance = {
|
vim.opt.swapfile = false
|
||||||
reset_packpath = false,
|
vim.opt.tabstop = 2 -- 2 space tabs are based
|
||||||
rtp = {
|
vim.opt.updatetime = 250 -- decrease update time
|
||||||
reset = false,
|
vim.opt.virtualedit = 'onemore'
|
||||||
disabled_plugins = {
|
vim.opt.winborder = 'rounded'
|
||||||
'netrwPlugin',
|
|
||||||
'tutor',
|
-- Configure Neovim diagnostic messages
|
||||||
},
|
vim.diagnostic.config {
|
||||||
},
|
virtual_text = true,
|
||||||
},
|
underline = true,
|
||||||
}
|
severity_sort = true,
|
||||||
end
|
float = {
|
||||||
|
focusable = false,
|
||||||
|
style = 'minimal',
|
||||||
|
source = 'if_many',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.lsp.enable {
|
||||||
|
'nixd',
|
||||||
|
'phpactor',
|
||||||
|
'gopls',
|
||||||
|
'lua_ls',
|
||||||
|
'basedpyright',
|
||||||
|
}
|
||||||
|
|
||||||
vim.cmd('colorscheme iofq')
|
vim.cmd('colorscheme iofq')
|
||||||
require('lazy').setup(LAZY_OPTS)
|
require('keymaps')
|
||||||
require('config')
|
require('autocmd')
|
||||||
|
require('mini')
|
||||||
|
require('plugins')
|
||||||
|
|
|
||||||
|
|
@ -58,3 +58,40 @@ vim.api.nvim_create_autocmd('FileType', {
|
||||||
end, { buffer = bufnr, desc = 'swap prev arg' })
|
end, { buffer = bufnr, desc = 'swap prev arg' })
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Init LSP
|
||||||
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
|
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
||||||
|
callback = function(ev)
|
||||||
|
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
||||||
|
if not client then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
vim.keymap.set('n', 'gO', function()
|
||||||
|
Snacks.picker.lsp_symbols { focus = 'list' }
|
||||||
|
end, { buffer = ev.buf, desc = 'LSP symbols' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', 'grh', function()
|
||||||
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
||||||
|
end, { buffer = ev.buf, desc = 'LSP hints toggle' })
|
||||||
|
vim.keymap.set('n', 'grl', vim.lsp.codelens.run, { buffer = ev.buf, desc = 'vim.lsp.codelens.run()' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', 'gre', function()
|
||||||
|
vim.diagnostic.setloclist()
|
||||||
|
end, { buffer = ev.buf, desc = 'LSP buffer diagnostics' })
|
||||||
|
vim.keymap.set('n', 'grE', function()
|
||||||
|
vim.diagnostic.setqflist()
|
||||||
|
end, { buffer = ev.buf, desc = 'LSP diagnostics' })
|
||||||
|
|
||||||
|
-- Auto-refresh code lenses
|
||||||
|
if client:supports_method('textDocument/codeLens') or client.server_capabilities.codeLensProvider then
|
||||||
|
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
||||||
|
vim.api.nvim_create_autocmd({ 'InsertLeave', 'TextChanged' }, {
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
||||||
|
end,
|
||||||
|
buffer = ev.buf,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
vim.opt.autowrite = true
|
|
||||||
vim.opt.backspace = 'indent,eol,start'
|
|
||||||
vim.opt.confirm = true
|
|
||||||
vim.opt.completeopt = "menuone,popup,noselect,fuzzy"
|
|
||||||
vim.opt.diffopt = 'internal,filler,closeoff,inline:char'
|
|
||||||
vim.opt.expandtab = true -- insert tabs as spaces
|
|
||||||
vim.opt.inccommand = 'split' -- incremental live completion
|
|
||||||
vim.opt.laststatus = 1 -- statusline only if split
|
|
||||||
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 (unless session)
|
|
||||||
vim.opt.shiftwidth = 0 -- >> shifts by tabstop
|
|
||||||
vim.opt.showmatch = true -- highlight matching brackets
|
|
||||||
vim.opt.showmode = true
|
|
||||||
vim.opt.signcolumn = 'no'
|
|
||||||
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.winborder = 'rounded'
|
|
||||||
|
|
||||||
-- Configure Neovim diagnostic messages
|
|
||||||
vim.diagnostic.config {
|
|
||||||
virtual_text = true,
|
|
||||||
underline = true,
|
|
||||||
severity_sort = true,
|
|
||||||
float = {
|
|
||||||
focusable = false,
|
|
||||||
style = 'minimal',
|
|
||||||
source = 'if_many',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
require('config.autocmd')
|
|
||||||
require('config.keymaps')
|
|
||||||
73
nvim/lua/mini.lua
Normal file
73
nvim/lua/mini.lua
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
require('mini.basics').setup { mappings = { windows = true } }
|
||||||
|
require('mini.icons').setup()
|
||||||
|
|
||||||
|
vim.schedule(function()
|
||||||
|
require('mini.align').setup()
|
||||||
|
require('mini.pairs').setup()
|
||||||
|
require('mini.surround').setup()
|
||||||
|
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' } }
|
||||||
|
|
||||||
|
local ai = require('mini.ai')
|
||||||
|
ai.setup {
|
||||||
|
n_lines = 300,
|
||||||
|
custom_textobjects = {
|
||||||
|
i = require('mini.extra').gen_ai_spec.indent(),
|
||||||
|
a = ai.gen_spec.treesitter { a = '@parameter.outer', i = '@parameter.inner' },
|
||||||
|
f = ai.gen_spec.treesitter { a = '@function.outer', i = '@function.inner' },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('mini.git').setup()
|
||||||
|
vim.keymap.set('n', '<leader>go', function()
|
||||||
|
return MiniGit.show_at_cursor()
|
||||||
|
end, { noremap = true, desc = 'git show at cursor' })
|
||||||
|
vim.keymap.set('n', '<leader>gb', '<Cmd>Git blame -- %<CR>', { desc = 'git blame' })
|
||||||
|
|
||||||
|
local jump = require('mini.jump2d')
|
||||||
|
jump.setup {
|
||||||
|
view = { n_steps_ahead = 1, dim = true },
|
||||||
|
spotter = jump.gen_spotter.vimpattern(),
|
||||||
|
}
|
||||||
|
|
||||||
|
local diff = require('mini.diff')
|
||||||
|
diff.setup {
|
||||||
|
source = {
|
||||||
|
require('lib.minidiff_jj').gen_source(),
|
||||||
|
diff.gen_source.git(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
vim.keymap.set('n', '<leader>gp', function()
|
||||||
|
MiniDiff.toggle_overlay(0)
|
||||||
|
end, { noremap = true, desc = 'git diff overlay' })
|
||||||
|
|
||||||
|
local files = require('mini.files')
|
||||||
|
files.setup {
|
||||||
|
mappings = {
|
||||||
|
go_in_plus = '<CR>',
|
||||||
|
},
|
||||||
|
windows = {
|
||||||
|
preview = true,
|
||||||
|
width_preview = 50,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
vim.keymap.set('n', '<leader>nc', function()
|
||||||
|
MiniFiles.open(vim.api.nvim_buf_get_name(0), false) -- open current buffer's dir
|
||||||
|
MiniFiles.reveal_cwd()
|
||||||
|
end, { desc = 'minifiles open' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '`', function()
|
||||||
|
local _, cur_entry_path = pcall(MiniFiles.get_fs_entry().path)
|
||||||
|
local cur_directory = vim.fs.dirname(cur_entry_path)
|
||||||
|
if cur_directory ~= '' then
|
||||||
|
vim.fn.chdir(cur_directory)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
|
||||||
|
-- pass file rename events to LSP
|
||||||
|
vim.api.nvim_create_autocmd('User', {
|
||||||
|
pattern = 'MiniFilesActionRename',
|
||||||
|
callback = function(event)
|
||||||
|
Snacks.rename.on_rename_file(event.data.from, event.data.to)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
end)
|
||||||
253
nvim/lua/plugins.lua
Normal file
253
nvim/lua/plugins.lua
Normal file
|
|
@ -0,0 +1,253 @@
|
||||||
|
require('dart').setup {
|
||||||
|
tabline = {
|
||||||
|
label_marked_fg = 'cyan',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('snacks').setup {
|
||||||
|
bigfile = { enabled = true },
|
||||||
|
terminal = { enabled = true },
|
||||||
|
indent = { enabled = true },
|
||||||
|
input = { enabled = true },
|
||||||
|
notifier = { enabled = true },
|
||||||
|
styles = {
|
||||||
|
notification = {
|
||||||
|
wo = { wrap = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
picker = {
|
||||||
|
enabled = true,
|
||||||
|
matcher = {
|
||||||
|
frecency = true,
|
||||||
|
cwd_bonus = true,
|
||||||
|
},
|
||||||
|
layout = 'ivy_split',
|
||||||
|
sources = {
|
||||||
|
grep = { hidden = true },
|
||||||
|
lsp_symbols = {
|
||||||
|
filter = { default = true },
|
||||||
|
layout = 'left',
|
||||||
|
},
|
||||||
|
smart = {
|
||||||
|
multi = {
|
||||||
|
{ source = 'files', hidden = true },
|
||||||
|
{ source = 'git_files', untracked = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.keymap.set({ 'n', 't' }, '<C-\\>', function()
|
||||||
|
Snacks.terminal.toggle()
|
||||||
|
end, { desc = 'terminal open' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>ff', function()
|
||||||
|
Snacks.picker.smart()
|
||||||
|
end, { desc = 'Fuzzy find smart' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>fa', function()
|
||||||
|
Snacks.picker.grep()
|
||||||
|
end, { desc = 'Fuzzy find grep' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>f8', function()
|
||||||
|
Snacks.picker.grep_word()
|
||||||
|
end, { desc = 'Fuzzy find grep word' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>f?', function()
|
||||||
|
Snacks.picker.pickers()
|
||||||
|
end, { desc = 'See all pickers' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>fu', function()
|
||||||
|
Snacks.picker.undo()
|
||||||
|
end, { desc = 'Pick undotree' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>fj', function()
|
||||||
|
Snacks.picker.jumps()
|
||||||
|
end, { desc = 'Pick jumps' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>f.', function()
|
||||||
|
Snacks.picker.resume()
|
||||||
|
end, { desc = 'Fuzzy find resume' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>fb', function()
|
||||||
|
Snacks.picker.buffers()
|
||||||
|
end, { desc = 'Fuzzy find buffers' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>fq', function()
|
||||||
|
Snacks.picker.qflist()
|
||||||
|
end, { desc = 'pick quickfix list' })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>jf', function()
|
||||||
|
require('lib.snacks_jj').status()
|
||||||
|
end, { desc = 'pick notifications' })
|
||||||
|
vim.schedule(function()
|
||||||
|
require('nvim-treesitter').setup()
|
||||||
|
require('nvim-treesitter-textobjects').setup()
|
||||||
|
require('render-markdown').setup()
|
||||||
|
|
||||||
|
require('refactoring').setup()
|
||||||
|
vim.keymap.set('n', '<leader>rr', function()
|
||||||
|
require('refactoring').select_refactor()
|
||||||
|
end, { desc = 'Refactor' })
|
||||||
|
vim.keymap.set('n', '<leader>rv', function()
|
||||||
|
require('refactoring').refactor('Inline Variable')
|
||||||
|
end, { desc = 'Inline Variable' })
|
||||||
|
|
||||||
|
require('quicker').setup()
|
||||||
|
vim.keymap.set('n', '<leader>qf', function()
|
||||||
|
require('quicker').toggle { max_height = 20 }
|
||||||
|
end, { desc = 'Toggle qflist' })
|
||||||
|
|
||||||
|
require('diffview').setup {
|
||||||
|
use_icons = false,
|
||||||
|
enhanced_diff_hl = true,
|
||||||
|
default_args = {
|
||||||
|
DiffviewOpen = { '--imply-local' },
|
||||||
|
},
|
||||||
|
view = {
|
||||||
|
merge_tool = {
|
||||||
|
layout = 'diff4_mixed',
|
||||||
|
disable_diagnostics = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keymaps = {
|
||||||
|
view = {
|
||||||
|
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
||||||
|
},
|
||||||
|
file_panel = {
|
||||||
|
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
||||||
|
},
|
||||||
|
file_history_panel = {
|
||||||
|
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>nb', vim.cmd.DiffviewOpen, { desc = 'diffview open' })
|
||||||
|
vim.keymap.set('n', '<leader>nH', vim.cmd.DiffviewFileHistory, { desc = 'diffview history' })
|
||||||
|
vim.keymap.set('n', '<leader>nh', '<cmd>DiffviewFileHistory %<cr>', { desc = 'diffview history' })
|
||||||
|
|
||||||
|
require('conform').setup {
|
||||||
|
notify_no_formatters = false,
|
||||||
|
formatters_by_ft = {
|
||||||
|
json = { 'jq' },
|
||||||
|
lua = { 'stylua' },
|
||||||
|
python = { 'ruff' },
|
||||||
|
nix = { 'nixfmt' },
|
||||||
|
fish = { 'fish_indent' },
|
||||||
|
['*'] = { 'trim_whitespace' },
|
||||||
|
},
|
||||||
|
format_on_save = function(bufnr)
|
||||||
|
-- Disable with a global or buffer-local variable
|
||||||
|
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
return { timeout_ms = 1500, lsp_format = 'fallback' }
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
vim.keymap.set('n', '\\f', function()
|
||||||
|
vim.b.disable_autoformat = not vim.b.disable_autoformat
|
||||||
|
vim.notify(string.format('Buffer formatting disabled: %s', vim.b.disable_autoformat))
|
||||||
|
end, { desc = 'toggle buffer formatting' })
|
||||||
|
vim.keymap.set('n', '\\F', function()
|
||||||
|
vim.g.disable_autoformat = not vim.g.disable_autoformat
|
||||||
|
vim.notify(string.format('Global formatting disabled: %s', vim.g.disable_autoformat))
|
||||||
|
end, { desc = 'toggle global formatting' })
|
||||||
|
|
||||||
|
require('lint').linters_by_ft = {
|
||||||
|
docker = { 'hadolint' },
|
||||||
|
yaml = { 'yamllint' },
|
||||||
|
sh = { 'shellcheck' },
|
||||||
|
go = { 'golangcilint' },
|
||||||
|
ruby = { 'rubocop' },
|
||||||
|
fish = { 'fish' },
|
||||||
|
bash = { 'bash' },
|
||||||
|
nix = { 'nix' },
|
||||||
|
php = { 'php' },
|
||||||
|
}
|
||||||
|
vim.api.nvim_create_autocmd({ 'BufWritePost', 'InsertLeave' }, {
|
||||||
|
group = vim.api.nvim_create_augroup('lint', { clear = true }),
|
||||||
|
callback = function()
|
||||||
|
if vim.bo.modifiable then
|
||||||
|
require('lint').try_lint(nil, { ignore_errors = true })
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
vim.treesitter.language.register('markdown', 'blink-cmp-documentation')
|
||||||
|
require('blink.cmp').setup {
|
||||||
|
enabled = function()
|
||||||
|
return not vim.tbl_contains({ 'snacks_picker_input' }, vim.bo.filetype)
|
||||||
|
end,
|
||||||
|
fuzzy = {
|
||||||
|
sorts = {
|
||||||
|
'exact',
|
||||||
|
'score',
|
||||||
|
'sort_text',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
sources = {
|
||||||
|
default = {
|
||||||
|
'lsp',
|
||||||
|
'path',
|
||||||
|
'snippets',
|
||||||
|
'ripgrep',
|
||||||
|
'buffer',
|
||||||
|
},
|
||||||
|
providers = {
|
||||||
|
lsp = {
|
||||||
|
fallbacks = {}, -- include buffer even when LSP is active
|
||||||
|
score_offset = 10,
|
||||||
|
},
|
||||||
|
snippets = {
|
||||||
|
score_offset = -10,
|
||||||
|
},
|
||||||
|
path = {
|
||||||
|
opts = {
|
||||||
|
get_cwd = function(_)
|
||||||
|
return vim.fn.getcwd() -- use nvim pwd instead of current file pwd
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
ripgrep = {
|
||||||
|
module = 'blink-ripgrep',
|
||||||
|
name = 'rg',
|
||||||
|
score_offset = -10,
|
||||||
|
async = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
cmdline = {
|
||||||
|
completion = {
|
||||||
|
menu = {
|
||||||
|
auto_show = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
completion = {
|
||||||
|
documentation = {
|
||||||
|
auto_show = true,
|
||||||
|
auto_show_delay_ms = 500,
|
||||||
|
},
|
||||||
|
menu = {
|
||||||
|
draw = {
|
||||||
|
treesitter = { 'lsp' },
|
||||||
|
columns = {
|
||||||
|
{ 'label', 'label_description', gap = 1 },
|
||||||
|
{ 'source_name', 'kind', gap = 1 },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
trigger = {
|
||||||
|
show_on_keyword = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
signature = {
|
||||||
|
enabled = true,
|
||||||
|
trigger = {
|
||||||
|
show_on_insert = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end)
|
||||||
|
|
@ -1,87 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
'saghen/blink.cmp',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
dependencies = {
|
|
||||||
'mikavilpas/blink-ripgrep.nvim',
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
enabled = function()
|
|
||||||
return not vim.tbl_contains({ 'snacks_picker_input' }, vim.bo.filetype)
|
|
||||||
end,
|
|
||||||
fuzzy = {
|
|
||||||
sorts = {
|
|
||||||
'exact',
|
|
||||||
'score',
|
|
||||||
'sort_text',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
sources = {
|
|
||||||
default = {
|
|
||||||
'lsp',
|
|
||||||
'path',
|
|
||||||
'snippets',
|
|
||||||
'ripgrep',
|
|
||||||
'buffer',
|
|
||||||
},
|
|
||||||
providers = {
|
|
||||||
lsp = {
|
|
||||||
fallbacks = {}, -- include buffer even when LSP is active
|
|
||||||
score_offset = 10,
|
|
||||||
},
|
|
||||||
snippets = {
|
|
||||||
score_offset = -10,
|
|
||||||
},
|
|
||||||
path = {
|
|
||||||
opts = {
|
|
||||||
get_cwd = function(_)
|
|
||||||
return vim.fn.getcwd() -- use nvim pwd instead of current file pwd
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
ripgrep = {
|
|
||||||
module = 'blink-ripgrep',
|
|
||||||
name = 'rg',
|
|
||||||
score_offset = -10,
|
|
||||||
async = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
cmdline = {
|
|
||||||
completion = {
|
|
||||||
menu = {
|
|
||||||
auto_show = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
completion = {
|
|
||||||
documentation = {
|
|
||||||
auto_show = true,
|
|
||||||
auto_show_delay_ms = 500,
|
|
||||||
},
|
|
||||||
menu = {
|
|
||||||
draw = {
|
|
||||||
treesitter = { 'lsp' },
|
|
||||||
columns = {
|
|
||||||
{ 'label', 'label_description', gap = 1 },
|
|
||||||
{ 'source_name', 'kind', gap = 1 },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
trigger = {
|
|
||||||
show_on_keyword = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
signature = {
|
|
||||||
enabled = true,
|
|
||||||
trigger = {
|
|
||||||
show_on_insert = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
config = function(_, opts)
|
|
||||||
require('blink.cmp').setup(opts)
|
|
||||||
vim.treesitter.language.register('markdown', 'blink-cmp-documentation')
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,118 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
'neovim/nvim-lspconfig',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
config = function()
|
|
||||||
vim.lsp.enable {
|
|
||||||
'nixd',
|
|
||||||
'phpactor',
|
|
||||||
'gopls',
|
|
||||||
'lua_ls',
|
|
||||||
'basedpyright',
|
|
||||||
}
|
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd('LspAttach', {
|
|
||||||
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
|
||||||
callback = function(ev)
|
|
||||||
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
|
||||||
if not client then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.keymap.set('n', 'gO', function()
|
|
||||||
Snacks.picker.lsp_symbols { focus = 'list' }
|
|
||||||
end, { buffer = ev.buf, desc = 'LSP symbols' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', 'grh', function()
|
|
||||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
|
||||||
end, { buffer = ev.buf, desc = 'LSP hints toggle' })
|
|
||||||
vim.keymap.set('n', 'grl', vim.lsp.codelens.run, { buffer = ev.buf, desc = 'vim.lsp.codelens.run()' })
|
|
||||||
|
|
||||||
vim.keymap.set('n', 'gre', function()
|
|
||||||
vim.diagnostic.setloclist()
|
|
||||||
end, { buffer = ev.buf, desc = 'LSP buffer diagnostics' })
|
|
||||||
vim.keymap.set('n', 'grE', function()
|
|
||||||
vim.diagnostic.setqflist()
|
|
||||||
end, { buffer = ev.buf, desc = 'LSP diagnostics' })
|
|
||||||
|
|
||||||
-- Auto-refresh code lenses
|
|
||||||
if client:supports_method('textDocument/codeLens') or client.server_capabilities.codeLensProvider then
|
|
||||||
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
|
||||||
vim.api.nvim_create_autocmd({ 'InsertLeave', 'TextChanged' }, {
|
|
||||||
callback = function()
|
|
||||||
vim.lsp.codelens.refresh { bufnr = ev.buf }
|
|
||||||
end,
|
|
||||||
buffer = ev.buf,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'stevearc/conform.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
'\\f',
|
|
||||||
function()
|
|
||||||
vim.b.disable_autoformat = not vim.b.disable_autoformat
|
|
||||||
vim.notify(string.format('Buffer formatting disabled: %s', vim.b.disable_autoformat))
|
|
||||||
end,
|
|
||||||
mode = { 'n', 'x' },
|
|
||||||
desc = 'toggle buffer formatting',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'\\F',
|
|
||||||
function()
|
|
||||||
vim.g.disable_autoformat = not vim.g.disable_autoformat
|
|
||||||
vim.notify(string.format('Global formatting disabled: %s', vim.g.disable_autoformat))
|
|
||||||
end,
|
|
||||||
mode = { 'n', 'x' },
|
|
||||||
desc = 'toggle global formatting',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
opts = {
|
|
||||||
notify_no_formatters = false,
|
|
||||||
formatters_by_ft = {
|
|
||||||
json = { 'jq' },
|
|
||||||
lua = { 'stylua' },
|
|
||||||
python = { 'ruff' },
|
|
||||||
nix = { 'nixfmt' },
|
|
||||||
fish = { 'fish_indent' },
|
|
||||||
['*'] = { 'trim_whitespace' },
|
|
||||||
},
|
|
||||||
format_on_save = function(bufnr)
|
|
||||||
-- Disable with a global or buffer-local variable
|
|
||||||
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
return { timeout_ms = 1500, lsp_format = 'fallback' }
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'mfussenegger/nvim-lint',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
config = function()
|
|
||||||
require('lint').linters_by_ft = {
|
|
||||||
docker = { 'hadolint' },
|
|
||||||
yaml = { 'yamllint' },
|
|
||||||
sh = { 'shellcheck' },
|
|
||||||
go = { 'golangcilint' },
|
|
||||||
ruby = { 'rubocop' },
|
|
||||||
fish = { 'fish' },
|
|
||||||
bash = { 'bash' },
|
|
||||||
nix = { 'nix' },
|
|
||||||
php = { 'php' },
|
|
||||||
}
|
|
||||||
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
|
|
||||||
group = vim.api.nvim_create_augroup('lint', { clear = true }),
|
|
||||||
callback = function()
|
|
||||||
if vim.bo.modifiable then
|
|
||||||
require('lint').try_lint(nil, { ignore_errors = true })
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,120 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
'nvim-mini/mini.nvim',
|
|
||||||
lazy = false,
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
'<leader>gp',
|
|
||||||
function()
|
|
||||||
MiniDiff.toggle_overlay(0)
|
|
||||||
end,
|
|
||||||
noremap = true,
|
|
||||||
desc = 'git diff overlay',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>go',
|
|
||||||
function()
|
|
||||||
return MiniGit.show_at_cursor()
|
|
||||||
end,
|
|
||||||
noremap = true,
|
|
||||||
desc = 'git show at cursor',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>gb',
|
|
||||||
'<Cmd>Git blame -- %<CR>',
|
|
||||||
desc = 'git blame',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
config = function()
|
|
||||||
require('mini.basics').setup { mappings = { windows = true } }
|
|
||||||
require('mini.icons').setup()
|
|
||||||
vim.schedule(function()
|
|
||||||
local ai = require('mini.ai')
|
|
||||||
ai.setup {
|
|
||||||
n_lines = 300,
|
|
||||||
custom_textobjects = {
|
|
||||||
i = require('mini.extra').gen_ai_spec.indent(),
|
|
||||||
a = ai.gen_spec.treesitter { a = '@parameter.outer', i = '@parameter.inner' },
|
|
||||||
f = ai.gen_spec.treesitter { a = '@function.outer', i = '@function.inner' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
require('mini.align').setup()
|
|
||||||
require('mini.pairs').setup()
|
|
||||||
require('mini.git').setup()
|
|
||||||
require('mini.surround').setup()
|
|
||||||
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' } }
|
|
||||||
|
|
||||||
local jump = require('mini.jump2d')
|
|
||||||
jump.setup {
|
|
||||||
view = { n_steps_ahead = 1, dim = true },
|
|
||||||
spotter = jump.gen_spotter.vimpattern(),
|
|
||||||
}
|
|
||||||
|
|
||||||
local diff = require('mini.diff')
|
|
||||||
diff.setup {
|
|
||||||
source = {
|
|
||||||
require('plugins.lib.minidiff_jj').gen_source(),
|
|
||||||
diff.gen_source.git(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
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' },
|
|
||||||
{ mode = 'n', keys = ']' },
|
|
||||||
{ mode = 'n', keys = '[' },
|
|
||||||
{ mode = 'n', keys = '\\' },
|
|
||||||
},
|
|
||||||
window = {
|
|
||||||
config = { width = 'auto' },
|
|
||||||
},
|
|
||||||
clues = {
|
|
||||||
miniclue.gen_clues.g(),
|
|
||||||
miniclue.gen_clues.marks(),
|
|
||||||
miniclue.gen_clues.registers({show_contents = true}),
|
|
||||||
miniclue.gen_clues.windows(),
|
|
||||||
miniclue.gen_clues.z(),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
local files = require('mini.files')
|
|
||||||
files.setup {
|
|
||||||
mappings = {
|
|
||||||
go_in_plus = '<CR>',
|
|
||||||
},
|
|
||||||
windows = {
|
|
||||||
preview = true,
|
|
||||||
width_preview = 50,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.keymap.set('n', '<leader>nc', function()
|
|
||||||
files.open(vim.api.nvim_buf_get_name(0), false) -- open current buffer's dir
|
|
||||||
files.reveal_cwd()
|
|
||||||
end, { desc = 'minifiles open' })
|
|
||||||
vim.api.nvim_create_autocmd('User', {
|
|
||||||
pattern = 'MiniFilesBufferCreate',
|
|
||||||
callback = function(args)
|
|
||||||
vim.keymap.set('n', '`', function()
|
|
||||||
local _, cur_entry_path = pcall(MiniFiles.get_fs_entry().path)
|
|
||||||
local cur_directory = vim.fs.dirname(cur_entry_path)
|
|
||||||
if cur_directory ~= '' then
|
|
||||||
vim.fn.chdir(cur_directory)
|
|
||||||
end
|
|
||||||
end, { buffer = args.data.buf_id })
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
vim.api.nvim_create_autocmd('User', {
|
|
||||||
pattern = 'MiniFilesActionRename',
|
|
||||||
callback = function(event)
|
|
||||||
Snacks.rename.on_rename_file(event.data.from, event.data.to)
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
end)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
'iofq/dart.nvim',
|
|
||||||
lazy = false,
|
|
||||||
priority = 1001,
|
|
||||||
dependencies = 'nvim-mini/mini.nvim',
|
|
||||||
opts = {
|
|
||||||
label_marked_fg = 'cyan'
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'nvim-treesitter/nvim-treesitter',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
branch = 'main',
|
|
||||||
dependencies = {
|
|
||||||
{
|
|
||||||
'nvim-treesitter/nvim-treesitter-textobjects',
|
|
||||||
branch = 'main',
|
|
||||||
config = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'MeanderingProgrammer/render-markdown.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
opts = {
|
|
||||||
completions = {
|
|
||||||
blink = { enabled = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'sindrets/diffview.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
opts = {
|
|
||||||
use_icons = false,
|
|
||||||
enhanced_diff_hl = true,
|
|
||||||
default_args = {
|
|
||||||
DiffviewOpen = { '--imply-local' },
|
|
||||||
},
|
|
||||||
view = {
|
|
||||||
merge_tool = {
|
|
||||||
layout = 'diff4_mixed',
|
|
||||||
disable_diagnostics = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keymaps = {
|
|
||||||
view = {
|
|
||||||
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
|
||||||
},
|
|
||||||
file_panel = {
|
|
||||||
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
|
||||||
},
|
|
||||||
file_history_panel = {
|
|
||||||
{ { 'n' }, 'q', vim.cmd.DiffviewClose, { desc = 'Close Diffview' } },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{ '<leader>nb', vim.cmd.DiffviewOpen, desc = 'diffview open' },
|
|
||||||
{
|
|
||||||
'<leader>nh',
|
|
||||||
'<cmd>DiffviewFileHistory %<cr>',
|
|
||||||
mode = { 'n', 'v' },
|
|
||||||
desc = 'diffview history',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>nH',
|
|
||||||
'<cmd>DiffviewFileHistory<cr>',
|
|
||||||
mode = { 'n', 'v' },
|
|
||||||
desc = 'diffview history',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'stevearc/quicker.nvim',
|
|
||||||
event = 'VeryLazy',
|
|
||||||
opts = {
|
|
||||||
follow = {
|
|
||||||
enabled = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
'<leader>qf',
|
|
||||||
function()
|
|
||||||
require('quicker').toggle { max_height = 20 }
|
|
||||||
end,
|
|
||||||
desc = 'Toggle qflist',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>qr',
|
|
||||||
function()
|
|
||||||
require('quicker').refresh()
|
|
||||||
end,
|
|
||||||
desc = 'Refresh qflist',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>q>',
|
|
||||||
function()
|
|
||||||
require('quicker').expand { before = 2, after = 2, add_to_existing = true }
|
|
||||||
end,
|
|
||||||
desc = 'Expand quickfix context',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>q<',
|
|
||||||
function()
|
|
||||||
require('quicker').collapse()
|
|
||||||
end,
|
|
||||||
desc = 'Collapse quickfix context',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,159 +0,0 @@
|
||||||
return {
|
|
||||||
{
|
|
||||||
'folke/snacks.nvim',
|
|
||||||
lazy = false,
|
|
||||||
priority = 1000,
|
|
||||||
opts = {
|
|
||||||
bigfile = { enabled = true },
|
|
||||||
notifier = {
|
|
||||||
enabled = true,
|
|
||||||
timeout = 4000,
|
|
||||||
},
|
|
||||||
styles = {
|
|
||||||
notification = {
|
|
||||||
wo = { wrap = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
terminal = { enabled = true },
|
|
||||||
indent = { enabled = true },
|
|
||||||
input = { enabled = true },
|
|
||||||
picker = {
|
|
||||||
enabled = true,
|
|
||||||
jump = { reuse_win = true },
|
|
||||||
matcher = {
|
|
||||||
frecency = true,
|
|
||||||
history_bonus = true,
|
|
||||||
cwd_bonus = true,
|
|
||||||
},
|
|
||||||
layout = 'ivy_split',
|
|
||||||
sources = {
|
|
||||||
grep = { hidden = true },
|
|
||||||
explorer = { hidden = true },
|
|
||||||
lsp_symbols = {
|
|
||||||
filter = { default = true },
|
|
||||||
layout = 'left',
|
|
||||||
},
|
|
||||||
smart = {
|
|
||||||
sort = {
|
|
||||||
fields = {
|
|
||||||
'score:desc',
|
|
||||||
'idx',
|
|
||||||
'#text',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
multi = {
|
|
||||||
'marks',
|
|
||||||
{ source = 'buffers', current = false },
|
|
||||||
{ source = 'files', hidden = true },
|
|
||||||
{ source = 'git_files', untracked = true },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
win = {
|
|
||||||
input = {
|
|
||||||
keys = { ['wq'] = { 'close', mode = 'i' } },
|
|
||||||
},
|
|
||||||
list = {
|
|
||||||
keys = { ['wq'] = { 'close', mode = 'i' } },
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
keys = {
|
|
||||||
{
|
|
||||||
'<C-\\>',
|
|
||||||
function()
|
|
||||||
Snacks.terminal.toggle()
|
|
||||||
end,
|
|
||||||
mode = { 'n', 't' },
|
|
||||||
desc = 'terminal open',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader><leader>',
|
|
||||||
function()
|
|
||||||
vim.cmd.delmarks { args = { '0-9' } }
|
|
||||||
vim.cmd.delmarks { args = { '"' } }
|
|
||||||
Snacks.picker.smart()
|
|
||||||
end,
|
|
||||||
desc = 'Fuzzy find smart',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>ff',
|
|
||||||
function()
|
|
||||||
Snacks.picker.files()
|
|
||||||
end,
|
|
||||||
desc = 'Fuzzy find files',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>fa',
|
|
||||||
function()
|
|
||||||
Snacks.picker.grep()
|
|
||||||
end,
|
|
||||||
desc = 'Fuzzy find grep',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>f8',
|
|
||||||
function()
|
|
||||||
Snacks.picker.grep_word()
|
|
||||||
end,
|
|
||||||
desc = 'Fuzzy find grep word',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>f?',
|
|
||||||
function()
|
|
||||||
Snacks.picker.pickers()
|
|
||||||
end,
|
|
||||||
desc = 'See all pickers',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>fu',
|
|
||||||
function()
|
|
||||||
Snacks.picker.undo()
|
|
||||||
end,
|
|
||||||
desc = 'Pick undotree',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>fj',
|
|
||||||
function()
|
|
||||||
Snacks.picker.jumps()
|
|
||||||
end,
|
|
||||||
desc = 'Pick jumps',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>f.',
|
|
||||||
function()
|
|
||||||
Snacks.picker.resume()
|
|
||||||
end,
|
|
||||||
desc = 'Fuzzy find resume',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>fb',
|
|
||||||
function()
|
|
||||||
Snacks.picker.buffers()
|
|
||||||
end,
|
|
||||||
desc = 'Fuzzy find buffers',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'gO',
|
|
||||||
function()
|
|
||||||
Snacks.picker.treesitter()
|
|
||||||
end,
|
|
||||||
desc = 'pick treesitter nodes',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>fq',
|
|
||||||
function()
|
|
||||||
Snacks.picker.qflist()
|
|
||||||
end,
|
|
||||||
desc = 'pick quickfix list',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'<leader>jf',
|
|
||||||
function()
|
|
||||||
require('plugins.lib.snacks_jj').status()
|
|
||||||
end,
|
|
||||||
desc = 'pick notifications',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue