From d0738bbf71b41b9394846cf9de96bbceeda7eebd Mon Sep 17 00:00:00 2001 From: Crony Akatsuki Date: Tue, 21 Oct 2025 20:26:16 +0200 Subject: [PATCH] feat: big refactor. --- .gitignore | 1 + .luarc.json | 14 +++ init.lua | 2 + lua/config/init.lua | 1 + lua/config/keybindings.lua | 20 ++-- lua/config/pack.lua | 12 +-- lua/config/settings.lua | 19 ++++ lua/plugins/init.lua | 1 - lua/plugins/lsp.lua | 29 +++++- lua/plugins/mini.lua | 194 ++++++++++++++++++++++++++++++++++++- lua/plugins/oil.lua | 1 - 11 files changed, 268 insertions(+), 26 deletions(-) create mode 100644 .gitignore create mode 100644 .luarc.json delete mode 100644 lua/plugins/oil.lua diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d992b6f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Session.vim diff --git a/.luarc.json b/.luarc.json new file mode 100644 index 0000000..96d006c --- /dev/null +++ b/.luarc.json @@ -0,0 +1,14 @@ +{ + "runtime.version": "LuaJIT", + "runtime.path": [ + "lua/?.lua", + "lua/?.init.lua" + ], + "diagnostics.globals": [ + "vim" + ], + "workspace.checkThirdParty": false, + "workspace.library": [ + "$VIMRUNTIME" + ] +} diff --git a/init.lua b/init.lua index a75bc2d..25ca2b3 100644 --- a/init.lua +++ b/init.lua @@ -1,2 +1,4 @@ +-- speed up neovim startup time +vim.loader.enable() require("config") require("plugins") diff --git a/lua/config/init.lua b/lua/config/init.lua index 33773ad..5ee3f6c 100644 --- a/lua/config/init.lua +++ b/lua/config/init.lua @@ -1,3 +1,4 @@ require('config.settings') require('config.keybindings') require('config.pack') +require('config.autocommands') diff --git a/lua/config/keybindings.lua b/lua/config/keybindings.lua index 6397476..69cf573 100644 --- a/lua/config/keybindings.lua +++ b/lua/config/keybindings.lua @@ -8,26 +8,20 @@ vim.keymap.set("n", " ", ":update :source", { desc = "Source cur -- format vim.keymap.set("n", "lf", vim.lsp.buf.format, { desc = "Format buffer with available lsp" }) --- setup mini.pick -vim.keymap.set("n", "ff", ":Pick files", { desc = "Search file in directory" }) -vim.keymap.set("n", "fh", ":Pick help", { desc = "Searcch neovim help" }) - --- move lines up or down -vim.keymap.set("n", "", ":m .+1==", { desc = "Move line down" }) -vim.keymap.set("n", "", ":m .-2==", { desc = "Move line up" }) -vim.keymap.set("v", "", ":m '>+1gv=gv", { desc = "Move selection down" }) -vim.keymap.set("v", "", ":m '<-2gv=gv", { desc = "Move selection up" }) +-- easy copy/cut/paste from system clipboard +vim.keymap.set({ "n", "v", "x" }, "y", '"+y', { desc = "Yank to system clipboard" }) +vim.keymap.set({ "n", "v", "x" }, "d", '"+d', { desc = "Cut to system clipboard" }) +vim.keymap.set({ "n", "v", "x" }, "p", '"+p', { desc = "Paste from system clipboard" }) -- better indenting in visual mode vim.keymap.set("v", "<", "", ">gv", { desc = "Indent right and reselect" }) -- file exploring -vim.keymap.set("n", "e", ":Oil", { desc = "Open oil file explorer" }) -- Copy Full File-Path vim.keymap.set("n", "yp", function() - local path = vim.fn.expand("%:p") - vim.fn.setreg("+", path) - print("file:", path) + local path = vim.fn.expand("%:p") + vim.fn.setreg("+", path) + print("file:", path) end) diff --git a/lua/config/pack.lua b/lua/config/pack.lua index e4e5443..7480a0c 100644 --- a/lua/config/pack.lua +++ b/lua/config/pack.lua @@ -1,14 +1,12 @@ vim.pack.add({ -- Colorscheme - {src = "https://github.com/ellisonleao/gruvbox.nvim"}, + { src = "https://github.com/ellisonleao/gruvbox.nvim" }, -- Treesitter parsers - {src = "https://github.com/nvim-treesitter/nvim-treesitter"}, + { src = "https://github.com/nvim-treesitter/nvim-treesitter" }, -- Preconfigured lsp's - {src = "https://github.com/neovim/nvim-lspconfig"}, - -- Nice file manager - {src = "https://github.com/stevearc/oil.nvim"}, + { src = "https://github.com/neovim/nvim-lspconfig" }, -- Amazing neovim bundle of plugins that are super nice - {src = "https://github.com/nvim-mini/mini.nvim"}, + { src = "https://github.com/nvim-mini/mini.nvim" }, -- Fix the annoying neovim+lua errors - {src = "https://github.com/folke/lazydev.nvim"}, + { src = "https://github.com/folke/lazydev.nvim" }, }) diff --git a/lua/config/settings.lua b/lua/config/settings.lua index d4225b2..87b0ff7 100644 --- a/lua/config/settings.lua +++ b/lua/config/settings.lua @@ -83,3 +83,22 @@ vim.opt.encoding = "UTF8" vim.opt.wildmenu = true vim.opt.wildmode = "longest:full,full" vim.opt.wildignore:append({ "*.o", "*.obj", "*.pyc", "*.class", "*.jar" }) + +-- disable builtin plugins that I don't use +local builtin_plugs = { + "gzip", + "matchit", + "matchparen", + "netrwPlugin", + "tarPlugin", + "tohtml", + "tutor", + "zipPlugin", + "2html_plugin", + "getscript", + "getscriptPlugin", +} + +for i = 1, #builtin_plugs do + vim.g['loaded_' .. builtin_plugs[i]] = true +end diff --git a/lua/plugins/init.lua b/lua/plugins/init.lua index 20726e2..a177c49 100644 --- a/lua/plugins/init.lua +++ b/lua/plugins/init.lua @@ -1,5 +1,4 @@ require("plugins.colorscheme") require("plugins.treesitter") require("plugins.lsp") -require("plugins.oil") require("plugins.mini") diff --git a/lua/plugins/lsp.lua b/lua/plugins/lsp.lua index cfa3ff9..7145821 100644 --- a/lua/plugins/lsp.lua +++ b/lua/plugins/lsp.lua @@ -1,7 +1,32 @@ +-- Enable some settings globally +vim.lsp.config("*", { + -- allow for multiline token support + capabilities = { + textDocument = { + semanticTokens = { + multilineTokenSupport = true, + } + } + }, + -- make .git always be a root marker + root_markers = { '.git' }, + -- setup autocompletion + -- on_attach = function(client, bufnr) + -- vim.lsp.completion.enable(true, client.id, bufnr, { + -- autotrigger = true, + -- convert = function(item) + -- return { abbr = item.label:gsub('%b()', '') } + -- end, + -- }) + -- end, +}) + +-- enable specific language servers vim.lsp.enable({ "nixd", "lua_ls", + "jsonls", }) --- fix stupid lua error with neovim -require("lazydev").setup() +-- diagnostic settings +vim.diagnostic.config({ virtual_text = true }) diff --git a/lua/plugins/mini.lua b/lua/plugins/mini.lua index 6143b17..609c836 100644 --- a/lua/plugins/mini.lua +++ b/lua/plugins/mini.lua @@ -1,5 +1,195 @@ -require("mini.pick").setup() +-- setup picker with icons require("mini.icons").setup() -require("mini.statusline").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", "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 git hunks" }) + +-- git related stuff require("mini.git").setup() 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() + +-- move lines +require("mini.move").setup() + +-- easy split args +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' }, + }, + + 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(), + }, +}) + +-- minimal session manager +require("mini.sessions").setup() + +vim.keymap.set("n", "pc", function() MiniSessions.write() end, { desc = "Create new session/project" }) +vim.keymap.set("n", "ps", 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/oil.lua b/lua/plugins/oil.lua deleted file mode 100644 index ee12680..0000000 --- a/lua/plugins/oil.lua +++ /dev/null @@ -1 +0,0 @@ -require("oil").setup()