From 494ddcf9850a9e425c6c15396a5b322001d3f83c Mon Sep 17 00:00:00 2001 From: Crony Akatsuki Date: Thu, 1 Jan 2026 13:55:19 +0100 Subject: [PATCH] feat(mini): modularize the config a bit. --- lua/plugins/init.lua | 1 + lua/plugins/mini.lua | 194 -------------------------------- lua/plugins/mini/clues.lua | 61 ++++++++++ lua/plugins/mini/completion.lua | 14 +++ lua/plugins/mini/files.lua | 37 ++++++ lua/plugins/mini/highlight.lua | 12 ++ lua/plugins/mini/init.lua | 6 + lua/plugins/mini/pick.lua | 23 ++++ lua/plugins/mini/starter.lua | 38 +++++++ 9 files changed, 192 insertions(+), 194 deletions(-) create mode 100644 lua/plugins/mini/clues.lua create mode 100644 lua/plugins/mini/completion.lua create mode 100644 lua/plugins/mini/files.lua create mode 100644 lua/plugins/mini/highlight.lua create mode 100644 lua/plugins/mini/init.lua create mode 100644 lua/plugins/mini/pick.lua create mode 100644 lua/plugins/mini/starter.lua diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index c9dd8b6..287cd2f 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -2,5 +2,6 @@ require("plugins.colorscheme") require("plugins.treesitter") require("plugins.lsp") require("plugins.mini") +require("plugins.mini.init") require("plugins.markdown") require("plugins.conform") diff --git a/lua/plugins/mini.lua b/lua/plugins/mini.lua index 6c5292f..61f3388 100644 --- a/lua/plugins/mini.lua +++ b/lua/plugins/mini.lua @@ -2,43 +2,6 @@ vim.pack.add({ { src = "https://github.com/nvim-mini/mini.nvim" }, }) --- setup picker with icons -require("mini.icons").setup() -require("mini.pick").setup({ - options = { - use_cache = true, - }, -}) - --- additional mini.pick pickers -require("mini.extra").setup() - --- amazing highlight plugin, also used with mini.pick -local hipatterns = require("mini.hipatterns") -hipatterns.setup({ - highlighters = { - fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' }, - hack = { pattern = '%f[%w]()HACK()%f[%W]', group = 'MiniHipatternsHack' }, - todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' }, - note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' }, - - hex_color = hipatterns.gen_highlighter.hex_color(), - }, -}) - --- mini.pick keybindings -local patterns = { "fixme", "hack", "todo", "note", } -vim.keymap.set("n", "ff", ":Pick files", { desc = "Search file in directory" }) -vim.keymap.set("n", "fw", ":Pick grep_live", { desc = "Search for word in directory" }) -vim.keymap.set("n", "fh", ":Pick help", { desc = "Search neovim help" }) -vim.keymap.set("n", "fd", ":Pick diagnostic", { desc = "Search diagnostics" }) -vim.keymap.set("n", "fgb", ":Pick git_branches scope='local'", { desc = "Search git branches" }) -vim.keymap.set("n", "fgc", ":Pick git_commits", { desc = "Search git commits" }) -vim.keymap.set("n", "fgh", ":Pick git_hunks", { desc = "Search git hunks" }) -vim.keymap.set("n", "fp", function() - MiniExtra.pickers.hipatterns({ highlighters = patterns }) -end, { desc = "Search patterns" }) - -- git related stuff require("mini.git").setup() require("mini.diff").setup() @@ -46,24 +9,6 @@ require("mini.diff").setup() -- setup statusline require("mini.statusline").setup() --- setup snippets -local gen_loader = require("mini.snippets").gen_loader -require("mini.snippets").setup({ - snippets = { - gen_loader.from_lang(), - }, - mappings = { - jump_next = "", - jump_prev = "", - }, -}) - --- setup completion -require("mini.completion").setup() - --- simple commandline autocomplete -require("mini.cmdline").setup() - -- move lines require("mini.move").setup() @@ -73,147 +18,8 @@ require("mini.splitjoin").setup() -- surround actions require("mini.surround").setup() --- super simple but amazing file manager -require("mini.files").setup() - --- setup simple function for toggling mini.files -local minifiles_toggle = function(...) - if not MiniFiles.close() then MiniFiles.open(...) end -end - --- Set focused directory as current working directory -local set_cwd = function() - local path = (MiniFiles.get_fs_entry() or {}).path - if path == nil then return vim.notify('Cursor is not on valid entry') end - vim.fn.chdir(vim.fs.dirname(path)) -end - --- Yank in register full path of entry under cursor -local yank_path = function() - local path = (MiniFiles.get_fs_entry() or {}).path - if path == nil then return vim.notify('Cursor is not on valid entry') end - vim.fn.setreg(vim.v.register, path) -end - --- Open path with system default handler (useful for non-text files) -local ui_open = function() vim.ui.open(MiniFiles.get_fs_entry().path) end - -vim.api.nvim_create_autocmd('User', { - pattern = 'MiniFilesBufferCreate', - callback = function(args) - local b = args.data.buf_id - vim.keymap.set('n', 'g~', set_cwd, { buffer = b, desc = 'Set cwd' }) - vim.keymap.set('n', 'gX', ui_open, { buffer = b, desc = 'OS open' }) - vim.keymap.set('n', 'gy', yank_path, { buffer = b, desc = 'Yank path' }) - end, -}) - --- setup keybinding for mini.files -vim.keymap.set("n", "e", function() minifiles_toggle() end, { desc = "Toggle mini.files explorer" }) - --- setup mini.clues, whickey but much simpler -local miniclue = require('mini.clue') -miniclue.setup({ - triggers = { - -- Leader triggers - { mode = 'n', keys = '' }, - { mode = 'x', keys = '' }, - - -- Built-in completion - { mode = 'i', keys = '' }, - - -- `g` key - { mode = 'n', keys = 'g' }, - { mode = 'x', keys = 'g' }, - - -- Marks - { mode = 'n', keys = "'" }, - { mode = 'n', keys = '`' }, - { mode = 'x', keys = "'" }, - { mode = 'x', keys = '`' }, - - -- Registers - { mode = 'n', keys = '"' }, - { mode = 'x', keys = '"' }, - { mode = 'i', keys = '' }, - { mode = 'c', keys = '' }, - - -- Window commands - { mode = 'n', keys = '' }, - - -- `z` key - { mode = 'n', keys = 'z' }, - { mode = 'x', keys = 'z' }, - - -- add in support for built in completion - { mode = 'i', keys = '' }, - }, - - clues = { - -- Enhance this by adding descriptions for mapping groups - miniclue.gen_clues.builtin_completion(), - miniclue.gen_clues.g(), - miniclue.gen_clues.marks(), - miniclue.gen_clues.registers(), - miniclue.gen_clues.windows(), - miniclue.gen_clues.z(), - -- add some clues to custom stuff - { mode = "n", keys = "f", desc = "Find" }, - { mode = "n", keys = "fg", desc = "Git" }, - { mode = "n", keys = "l", desc = "Lsp" }, - { mode = "n", keys = "s", desc = "Treesitter" }, - { mode = "n", keys = "v", desc = "Visits" }, - - -- built in completion - { mode = 'i', keys = '', desc = 'File names' }, - { mode = 'i', keys = '', desc = 'Whole lines' }, - { mode = 'i', keys = '', desc = 'Omni completion' }, - { mode = 'i', keys = '', desc = 'Spelling suggestions' }, - { mode = 'i', keys = '', desc = "With 'completefunc'" }, - }, -}) - --- minimal session manager -require("mini.sessions").setup() - -vim.keymap.set("n", "sc", function() MiniSessions.write() end, { desc = "Create new session/project" }) -vim.keymap.set("n", "ss", function() MiniSessions.select("read") end, { desc = "Select session/project" }) - --- nice file/directory visit tracker -require("mini.visits").setup() - --- setup some basic label keybindings -local map_vis = function(keys, call, desc) - local rhs = 'lua MiniVisits.' .. call .. '' - vim.keymap.set('n', '' .. keys, rhs, { desc = desc }) -end - -map_vis('vv', 'add_label()', 'Add label') -map_vis('vV', 'remove_label()', 'Remove label') -map_vis('vc', 'add_label("core")', 'Add to core') -map_vis('vC', 'remove_label("core")', 'Remove from core') -vim.keymap.set("n", "fv", ":Pick visit_paths", { desc = "Search visited files" }) -vim.keymap.set("n", "fc", ":Pick visit_paths filter='core'", - { desc = "Search visited files with tag 'core'" }) - -- amazing fast indent scope highlight plugin require("mini.indentscope").setup() -- nice simple notifications inside neovim require("mini.notify").setup() - --- simple startup startup screen -local starter = require('mini.starter') -starter.setup({ - evaluate_single = true, - items = { - starter.sections.builtin_actions(), - starter.sections.sessions(5, true), - starter.sections.recent_files(5, true), - starter.sections.recent_files(5, false), - }, - content_hooks = { - starter.gen_hook.adding_bullet(), - starter.gen_hook.aligning("center", "center") - }, -}) diff --git a/lua/plugins/mini/clues.lua b/lua/plugins/mini/clues.lua new file mode 100644 index 0000000..e7d32aa --- /dev/null +++ b/lua/plugins/mini/clues.lua @@ -0,0 +1,61 @@ +-- setup mini.clues, whickey but much simpler +local miniclue = require('mini.clue') +miniclue.setup({ + triggers = { + -- Leader triggers + { mode = 'n', keys = '' }, + { mode = 'x', keys = '' }, + + -- Built-in completion + { mode = 'i', keys = '' }, + + -- `g` key + { mode = 'n', keys = 'g' }, + { mode = 'x', keys = 'g' }, + + -- Marks + { mode = 'n', keys = "'" }, + { mode = 'n', keys = '`' }, + { mode = 'x', keys = "'" }, + { mode = 'x', keys = '`' }, + + -- Registers + { mode = 'n', keys = '"' }, + { mode = 'x', keys = '"' }, + { mode = 'i', keys = '' }, + { mode = 'c', keys = '' }, + + -- Window commands + { mode = 'n', keys = '' }, + + -- `z` key + { mode = 'n', keys = 'z' }, + { mode = 'x', keys = 'z' }, + + -- add in support for built in completion + { mode = 'i', keys = '' }, + }, + + clues = { + -- Enhance this by adding descriptions for mapping groups + miniclue.gen_clues.builtin_completion(), + miniclue.gen_clues.g(), + miniclue.gen_clues.marks(), + miniclue.gen_clues.registers(), + miniclue.gen_clues.windows(), + miniclue.gen_clues.z(), + -- add some clues to custom stuff + { mode = "n", keys = "f", desc = "Find" }, + { mode = "n", keys = "fg", desc = "Git" }, + { mode = "n", keys = "l", desc = "Lsp" }, + { mode = "n", keys = "s", desc = "Treesitter" }, + { mode = "n", keys = "v", desc = "Visits" }, + + -- built in completion + { mode = 'i', keys = '', desc = 'File names' }, + { mode = 'i', keys = '', desc = 'Whole lines' }, + { mode = 'i', keys = '', desc = 'Omni completion' }, + { mode = 'i', keys = '', desc = 'Spelling suggestions' }, + { mode = 'i', keys = '', desc = "With 'completefunc'" }, + }, +}) diff --git a/lua/plugins/mini/completion.lua b/lua/plugins/mini/completion.lua new file mode 100644 index 0000000..88c8994 --- /dev/null +++ b/lua/plugins/mini/completion.lua @@ -0,0 +1,14 @@ +-- setup snippets +local gen_loader = require("mini.snippets").gen_loader +require("mini.snippets").setup({ + snippets = { + gen_loader.from_lang(), + }, + mappings = { + jump_next = "", + jump_prev = "", + }, +}) + +-- setup completion +require("mini.completion").setup() diff --git a/lua/plugins/mini/files.lua b/lua/plugins/mini/files.lua new file mode 100644 index 0000000..4285838 --- /dev/null +++ b/lua/plugins/mini/files.lua @@ -0,0 +1,37 @@ +-- super simple but amazing file manager +require("mini.files").setup() + +-- setup simple function for toggling mini.files +local minifiles_toggle = function(...) + if not MiniFiles.close() then MiniFiles.open(...) end +end + +-- Set focused directory as current working directory +local set_cwd = function() + local path = (MiniFiles.get_fs_entry() or {}).path + if path == nil then return vim.notify('Cursor is not on valid entry') end + vim.fn.chdir(vim.fs.dirname(path)) +end + +-- Yank in register full path of entry under cursor +local yank_path = function() + local path = (MiniFiles.get_fs_entry() or {}).path + if path == nil then return vim.notify('Cursor is not on valid entry') end + vim.fn.setreg(vim.v.register, path) +end + +-- Open path with system default handler (useful for non-text files) +local ui_open = function() vim.ui.open(MiniFiles.get_fs_entry().path) end + +vim.api.nvim_create_autocmd('User', { + pattern = 'MiniFilesBufferCreate', + callback = function(args) + local b = args.data.buf_id + vim.keymap.set('n', 'g~', set_cwd, { buffer = b, desc = 'Set cwd' }) + vim.keymap.set('n', 'gX', ui_open, { buffer = b, desc = 'OS open' }) + vim.keymap.set('n', 'gy', yank_path, { buffer = b, desc = 'Yank path' }) + end, +}) + +-- setup keybinding for mini.files +vim.keymap.set("n", "e", function() minifiles_toggle() end, { desc = "Toggle mini.files explorer" }) diff --git a/lua/plugins/mini/highlight.lua b/lua/plugins/mini/highlight.lua new file mode 100644 index 0000000..0c74d33 --- /dev/null +++ b/lua/plugins/mini/highlight.lua @@ -0,0 +1,12 @@ +-- amazing highlight plugin, also used with mini.pick +local hipatterns = require("mini.hipatterns") +hipatterns.setup({ + highlighters = { + fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' }, + hack = { pattern = '%f[%w]()HACK()%f[%W]', group = 'MiniHipatternsHack' }, + todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' }, + note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' }, + + hex_color = hipatterns.gen_highlighter.hex_color(), + }, +}) diff --git a/lua/plugins/mini/init.lua b/lua/plugins/mini/init.lua new file mode 100644 index 0000000..cc1af89 --- /dev/null +++ b/lua/plugins/mini/init.lua @@ -0,0 +1,6 @@ +require("plugins.mini.files") +require("plugins.mini.highlight") +require("plugins.mini.pick") +require("plugins.mini.completion") +require("plugins.mini.clues") +require("plugins.mini.starter") diff --git a/lua/plugins/mini/pick.lua b/lua/plugins/mini/pick.lua new file mode 100644 index 0000000..e9a1a9f --- /dev/null +++ b/lua/plugins/mini/pick.lua @@ -0,0 +1,23 @@ +-- setup picker with icons +require("mini.icons").setup() +require("mini.pick").setup({ + options = { + use_cache = true, + }, +}) + +-- additional mini.pick pickers +require("mini.extra").setup() + +-- mini.pick keybindings +local patterns = { "fixme", "hack", "todo", "note", } +vim.keymap.set("n", "ff", ":Pick files", { desc = "Search file in directory" }) +vim.keymap.set("n", "fw", ":Pick grep_live", { desc = "Search for word in directory" }) +vim.keymap.set("n", "fh", ":Pick help", { desc = "Search neovim help" }) +vim.keymap.set("n", "fd", ":Pick diagnostic", { desc = "Search diagnostics" }) +vim.keymap.set("n", "fgb", ":Pick git_branches scope='local'", { desc = "Search git branches" }) +vim.keymap.set("n", "fgc", ":Pick git_commits", { desc = "Search git commits" }) +vim.keymap.set("n", "fgh", ":Pick git_hunks", { desc = "Search git hunks" }) +vim.keymap.set("n", "fp", function() + MiniExtra.pickers.hipatterns({ highlighters = patterns }) +end, { desc = "Search patterns" }) diff --git a/lua/plugins/mini/starter.lua b/lua/plugins/mini/starter.lua new file mode 100644 index 0000000..782eddf --- /dev/null +++ b/lua/plugins/mini/starter.lua @@ -0,0 +1,38 @@ +-- minimal session manager +require("mini.sessions").setup() + +vim.keymap.set("n", "sc", function() MiniSessions.write() end, { desc = "Create new session/project" }) +vim.keymap.set("n", "ss", function() MiniSessions.select("read") end, { desc = "Select session/project" }) + +-- nice file/directory visit tracker +require("mini.visits").setup() + +-- setup some basic label keybindings +local map_vis = function(keys, call, desc) + local rhs = 'lua MiniVisits.' .. call .. '' + vim.keymap.set('n', '' .. keys, rhs, { desc = desc }) +end + +map_vis('vv', 'add_label()', 'Add label') +map_vis('vV', 'remove_label()', 'Remove label') +map_vis('vc', 'add_label("core")', 'Add to core') +map_vis('vC', 'remove_label("core")', 'Remove from core') +vim.keymap.set("n", "fv", ":Pick visit_paths", { desc = "Search visited files" }) +vim.keymap.set("n", "fc", ":Pick visit_paths filter='core'", + { desc = "Search visited files with tag 'core'" }) + +-- simple startup startup screen +local starter = require('mini.starter') +starter.setup({ + evaluate_single = true, + items = { + starter.sections.builtin_actions(), + starter.sections.sessions(5, true), + starter.sections.recent_files(5, true), + starter.sections.recent_files(5, false), + }, + content_hooks = { + starter.gen_hook.adding_bullet(), + starter.gen_hook.aligning("center", "center") + }, +})