From 5d59b449397a92cffd8db64505d5d09b2b9322ad Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Mon, 11 May 2026 09:52:10 -0600 Subject: [PATCH 01/15] add custom plugins --- init.lua | 45 +++++---- lua/custom/plugins/00-core.lua | 165 +++++++++++++++++++++++++++++++++ lua/custom/plugins/99.lua | 39 ++++++++ lua/custom/plugins/autotag.lua | 8 ++ lua/custom/plugins/fterm.lua | 27 ++++++ lua/custom/plugins/snacks.lua | 126 +++++++++++++++++++++++++ 6 files changed, 390 insertions(+), 20 deletions(-) create mode 100644 lua/custom/plugins/00-core.lua create mode 100644 lua/custom/plugins/99.lua create mode 100644 lua/custom/plugins/autotag.lua create mode 100644 lua/custom/plugins/fterm.lua create mode 100644 lua/custom/plugins/snacks.lua diff --git a/init.lua b/init.lua index feb5b5f6c95..969e4752577 100644 --- a/init.lua +++ b/init.lua @@ -99,7 +99,7 @@ do vim.g.maplocalleader = ' ' -- Set to true if you have a Nerd Font installed and selected in the terminal - vim.g.have_nerd_font = false + vim.g.have_nerd_font = true -- [[ Setting options ]] -- See `:help vim.o` @@ -110,7 +110,7 @@ do vim.o.number = true -- You can also add relative line numbers, to help with jumping. -- Experiment for yourself to see if you like it! - -- vim.o.relativenumber = true + vim.o.relativenumber = true -- Enable mouse mode, can be useful for resizing splits for example! vim.o.mouse = 'a' @@ -220,10 +220,10 @@ do vim.keymap.set('t', '', '', { desc = 'Exit terminal mode' }) -- TIP: Disable arrow keys in normal mode - -- vim.keymap.set('n', '', 'echo "Use h to move!!"') - -- vim.keymap.set('n', '', 'echo "Use l to move!!"') - -- vim.keymap.set('n', '', 'echo "Use k to move!!"') - -- vim.keymap.set('n', '', 'echo "Use j to move!!"') + vim.keymap.set('n', '', 'echo "Use h to move!!"') + vim.keymap.set('n', '', 'echo "Use l to move!!"') + vim.keymap.set('n', '', 'echo "Use k to move!!"') + vim.keymap.set('n', '', 'echo "Use j to move!!"') -- Keybinds to make split navigation easier. -- Use CTRL+ to switch between windows @@ -235,10 +235,10 @@ do vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) -- NOTE: Some terminals have colliding keymaps or are not able to send distinct keycodes - -- vim.keymap.set("n", "", "H", { desc = "Move window to the left" }) - -- vim.keymap.set("n", "", "L", { desc = "Move window to the right" }) - -- vim.keymap.set("n", "", "J", { desc = "Move window to the lower" }) - -- vim.keymap.set("n", "", "K", { desc = "Move window to the upper" }) + vim.keymap.set('n', '', 'H', { desc = 'Move window to the left' }) + vim.keymap.set('n', '', 'L', { desc = 'Move window to the right' }) + vim.keymap.set('n', '', 'J', { desc = 'Move window to the lower' }) + vim.keymap.set('n', '', 'K', { desc = 'Move window to the upper' }) -- [[ Basic Autocommands ]] -- See `:help lua-guide-autocommands` @@ -434,7 +434,7 @@ do -- Load the colorscheme here. -- Like many other themes, this one has different styles, and you could load -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. - vim.cmd.colorscheme 'tokyonight-night' + vim.cmd.colorscheme 'tokyonight-storm' -- Highlight todo, notes, etc in comments vim.pack.add { gh 'folke/todo-comments.nvim' } @@ -826,8 +826,11 @@ do format_on_save = function(bufnr) -- You can specify filetypes to autoformat on save here: local enabled_filetypes = { - -- lua = true, - -- python = true, + lua = true, + python = true, + go = true, + javascript = true, + typescript = true, } if enabled_filetypes[vim.bo[bufnr].filetype] then return { timeout_ms = 500 } @@ -912,6 +915,7 @@ do -- By default, you may press `` to show the documentation. -- Optionally, set `auto_show = true` to show the documentation after a delay. documentation = { auto_show = false, auto_show_delay_ms = 500 }, + menu = { border = 'none' }, }, sources = { @@ -930,7 +934,7 @@ do fuzzy = { implementation = 'lua' }, -- Shows a signature help window while you type arguments for a function - signature = { enabled = true }, + signature = { enabled = true, window = { border = 'none' } }, } end @@ -1014,11 +1018,12 @@ do -- Here are some example plugins that I've included in the Kickstart repository. -- Uncomment any of the lines below to enable them (you will need to restart nvim). -- - -- require 'kickstart.plugins.debug' - -- require 'kickstart.plugins.indent_line' - -- require 'kickstart.plugins.lint' - -- require 'kickstart.plugins.autopairs' - -- require 'kickstart.plugins.neo-tree' + require 'kickstart.plugins.debug' + require 'kickstart.plugins.indent_line' + require 'kickstart.plugins.lint' + require 'kickstart.plugins.autopairs' + require 'kickstart.plugins.neo-tree' + require 'kickstart.plugins.gitsigns' -- adds gitsigns recommended keymaps -- NOTE: You can add your own plugins, configuration, etc. in `lua/custom/plugins/*.lua`. -- @@ -1032,7 +1037,7 @@ do -- If separate modules need a specific order, require them explicitly instead: -- require 'custom.plugins.colorscheme' -- require 'custom.plugins.ui' - -- require 'custom.plugins.git' + require 'custom.plugins.git' end -- The line beneath this is called `modeline`. See `:help modeline` diff --git a/lua/custom/plugins/00-core.lua b/lua/custom/plugins/00-core.lua new file mode 100644 index 00000000000..b292a5e90f7 --- /dev/null +++ b/lua/custom/plugins/00-core.lua @@ -0,0 +1,165 @@ +-- Core settings, keymaps, autocommands, and highlights migrated from kickstartmanolo + +-- ============================================================ +-- Options +-- ============================================================ + +vim.o.list = true +vim.opt.listchars = { + tab = '│ ', + trail = '·', + nbsp = '␣', + leadmultispace = '│ ', +} + +vim.o.nu = true +vim.o.tabstop = 4 +vim.o.softtabstop = 4 +vim.o.shiftwidth = 4 +vim.o.expandtab = true +vim.o.smartindent = true +vim.o.wrap = false +vim.o.swapfile = false +vim.o.backup = false +vim.o.termguicolors = true +vim.opt.isfname:append '@-@' +vim.opt.autoread = true + +-- Add rounded borders to all floating windows (hover, signature help, diagnostics, etc.) +vim.o.winborder = 'rounded' + +-- ============================================================ +-- Keymaps +-- ============================================================ + +-- Visual mode: move selected lines +vim.keymap.set('v', 'J', ":m '>+1gv=gv", { desc = '[M]ove line down' }) +vim.keymap.set('v', 'K', ":m '<-2gv=gv", { desc = '[M]ove line up' }) + +-- Normal mode: join lines keeping cursor position +vim.keymap.set('n', 'J', 'mzJ`z', { desc = '[J]oin lines' }) + +-- Centered scrolling +vim.keymap.set('n', '', 'zz', { desc = '[D]own half page' }) +vim.keymap.set('n', '', 'zz', { desc = '[U]p half page' }) + +-- Centered search navigation +vim.keymap.set('n', 'n', 'nzzzv', { desc = '[N]ext search result' }) +vim.keymap.set('n', 'N', 'Nzzzv', { desc = '[-]rev search result' }) + +-- Format paragraph +vim.keymap.set('n', '=ap', "ma=ap'a", { desc = '[A]uto [P]aragraph' }) + +-- Clipboard & black hole registers +vim.keymap.set('x', 'p', [['_dP]], { desc = '[P]aste from black hole' }) +vim.keymap.set({ 'n', 'v' }, 'y', [["+y]], { desc = '[Y]ank to clipboard' }) +vim.keymap.set('n', 'Y', [["+Y]], { desc = '[Y]ank line to clipboard' }) +vim.keymap.set({ 'n', 'v' }, 'd', '"_d', { desc = '[D]elete to black hole' }) + +-- Location list navigation +vim.keymap.set('n', 'k', 'lnextzz', { desc = '[K]ext location' }) +vim.keymap.set('n', 'j', 'lprevzz', { desc = '[J]rev location' }) + +-- Terminal mode exit +vim.keymap.set('t', '', '', { desc = '[E]xit terminal' }) + +-- Replace all occurrences of word under cursor +vim.keymap.set('n', 'a', [[:%s/\<\>//gIc]], { desc = '[A]ll in file' }) + +-- Snippet navigation (blink.cmp) +vim.keymap.set({ 'i', 's' }, '', function() + require('blink.cmp').snippet_forward() +end, { desc = 'Snippet forward' }) + +vim.keymap.set({ 'i', 's' }, '', function() + require('blink.cmp').snippet_backward() +end, { desc = 'Snippet backward' }) + +-- Equalize splits +vim.keymap.set('n', 'w', '=', { desc = 'Make equal splits' }) + +-- Load all files with same extension into args +vim.keymap.set('n', 'ra', function() + local ext = vim.fn.expand '%:e' + local current_file = vim.fn.expand '%:p' + local view = vim.fn.winsaveview() + + local files = vim.fn.systemlist(string.format('find . -name "*.%s" -type f', ext)) + vim.cmd('args ' .. table.concat(files, ' ')) + + vim.cmd('edit ' .. vim.fn.fnameescape(current_file)) + vim.fn.winrestview(view) + + print(string.format('Loaded %d .%s files into args', #files, ext)) +end, { desc = 'Load all files with same extension into args' }) + +-- Replace word under cursor across all arg files +vim.keymap.set('n', 'rp', function() + vim.fn.setreg('/', '\\<' .. vim.fn.expand '' .. '\\>') + vim.cmd 'set hlsearch' + + vim.api.nvim_feedkeys( + vim.api.nvim_replace_termcodes( + [[:argdo %s/\<\>//gc | update]], + true, + false, + true + ), + 'n', + false + ) +end, { desc = 'Replace word under cursor in args' }) + +-- ============================================================ +-- Go Autocommands +-- ============================================================ + +local go_group = vim.api.nvim_create_augroup('GoAutoImport', { clear = true }) + +vim.api.nvim_create_autocmd('BufWritePre', { + group = go_group, + pattern = '*.go', + callback = function() + vim.lsp.buf.format { async = false } + vim.lsp.buf.code_action { + context = { only = { 'source.organizeImports' } }, + apply = true, + } + end, +}) + +vim.api.nvim_create_autocmd('InsertLeave', { + group = go_group, + pattern = '*.go', + callback = function() + vim.lsp.buf.code_action { + context = { only = { 'source.organizeImports' } }, + apply = true, + } + end, +}) + +-- ============================================================ +-- Highlights +-- ============================================================ + +vim.api.nvim_set_hl(0, 'Pmenu', { bg = 'none' }) +vim.api.nvim_set_hl(0, 'PmenuSel', { bg = 'none', blend = 10 }) + +-- ============================================================ +-- Transparency & Theme Overrides +-- ============================================================ + +-- Re-apply tokyonight with transparency settings +require('tokyonight').setup { + transparent = true, + styles = { + comments = { italic = false }, + floats = 'transparent', + sidebars = 'transparent', + }, +} +vim.cmd.colorscheme 'tokyonight' + +-- NOTE: blink.cmp border overrides (menu = 'none', signature = 'none') +-- are now set directly in init.lua to avoid double-setup issues. diff --git a/lua/custom/plugins/99.lua b/lua/custom/plugins/99.lua new file mode 100644 index 00000000000..e3538ba71e9 --- /dev/null +++ b/lua/custom/plugins/99.lua @@ -0,0 +1,39 @@ +-- ThePrimeagen/99: AI assistant integration + +local function gh(repo) + return 'https://github.com/' .. repo +end + +vim.pack.add { gh 'ThePrimeagen/99' } + +local _99 = require '99' +local cwd = vim.uv.cwd() +local basename = vim.fs.basename(cwd) + +_99.setup { + provider = _99.Providers.OpenCodeProvider, + model = 'opencode-go/qwen3.5-plus', + logger = { + level = _99.DEBUG, + path = '/tmp/' .. basename .. '.99.debug', + print_on_error = true, + }, + md_files = { + 'AGENT.md', + 'SKILL.md', + }, +} + +vim.keymap.set('n', '9s', function() + _99.search() +end, { desc = '[9]9 Search' }) + +vim.keymap.set('v', '9vd', function() + _99.set_model('opencode-go/qwen3.5-plus') + _99.visual() +end, { desc = '[9]9 Visual [d]efault (qwen3.5-plus)' }) + +vim.keymap.set('v', '9vf', function() + _99.set_model('opencode-go/mimo-v2-pro') + _99.visual() +end, { desc = '[9]9 Visual [f]ast (mimo-v2-pro)' }) diff --git a/lua/custom/plugins/autotag.lua b/lua/custom/plugins/autotag.lua new file mode 100644 index 00000000000..a50ba425560 --- /dev/null +++ b/lua/custom/plugins/autotag.lua @@ -0,0 +1,8 @@ +-- nvim-ts-autotag: auto-close HTML/XML tags + +local function gh(repo) + return 'https://github.com/' .. repo +end + +vim.pack.add { gh 'windwp/nvim-ts-autotag' } +require('nvim-ts-autotag').setup {} diff --git a/lua/custom/plugins/fterm.lua b/lua/custom/plugins/fterm.lua new file mode 100644 index 00000000000..70a23b79ed2 --- /dev/null +++ b/lua/custom/plugins/fterm.lua @@ -0,0 +1,27 @@ +-- FTerm.nvim: floating terminal + +local function gh(repo) + return 'https://github.com/' .. repo +end + +vim.pack.add { gh 'numToStr/FTerm.nvim' } + +local fterm = require 'FTerm' +local custom_term = fterm:new { + ft = 'fterm_custom', + cmd = vim.o.shell, + dimensions = { + height = 0.6, + width = 0.5, + x = 0.95, + y = 0.95, + }, + border = 'rounded', +} + +function _G.__fterm_custom_toggle() + custom_term:toggle() +end + +vim.keymap.set('n', '', 'lua __fterm_custom_toggle()', { desc = '[T]oggle [T]erminal' }) +vim.keymap.set('t', '', 'lua __fterm_custom_toggle()', { desc = '[T]oggle [T]erminal' }) diff --git a/lua/custom/plugins/snacks.lua b/lua/custom/plugins/snacks.lua new file mode 100644 index 00000000000..81526f1369c --- /dev/null +++ b/lua/custom/plugins/snacks.lua @@ -0,0 +1,126 @@ +-- snacks.nvim: UI utilities suite + +local function gh(repo) + return 'https://github.com/' .. repo +end + +vim.pack.add { gh 'folke/snacks.nvim' } + +require('snacks').setup { + bigfile = { enabled = false }, + dashboard = { enabled = false }, + explorer = { + enabled = true, + replace_netrw = true, + }, + indent = { enabled = false }, + input = { enabled = false }, + notifier = { enabled = false }, + picker = { + enabled = false, + sources = { + explorer = { + auto_close = true, + layout = { + { preview = true }, + layout = { + box = 'horizontal', + width = 0.8, + height = 0.8, + { + box = 'vertical', + border = 'rounded', + title = '{source} {live} {flags}', + title_pos = 'center', + { win = 'input', height = 1, border = 'bottom' }, + { win = 'list', border = 'none' }, + }, + { win = 'preview', border = 'rounded', width = 0.8, title = '{preview}' }, + }, + }, + }, + }, + }, + quickfile = { enabled = true }, + scope = { enabled = false }, + scroll = { enabled = true }, + statuscolumn = { enabled = false }, + words = { enabled = true }, + styles = { + notification = {}, + }, +} + +-- ============================================================ +-- Keymaps +-- ============================================================ + +-- Explorer +vim.keymap.set('n', 'e', function() + Snacks.explorer() +end, { desc = 'File Explorer' }) + +-- Git +vim.keymap.set('n', 'gg', function() + Snacks.lazygit() +end, { desc = 'Lazygit' }) + +vim.keymap.set({ 'n', 'v' }, 'gB', function() + Snacks.gitbrowse() +end, { desc = 'Git Browse' }) + +-- Undo +vim.keymap.set('n', 'su', function() + Snacks.picker.undo() +end, { desc = 'Undo History' }) + +-- File rename +vim.keymap.set('n', 'cR', function() + Snacks.rename.rename_file() +end, { desc = 'Rename File' }) + +-- Neovim News +vim.keymap.set('n', 'N', function() + Snacks.win { + file = vim.api.nvim_get_runtime_file('doc/news.txt', false)[1], + width = 0.6, + height = 0.6, + wo = { + spell = false, + wrap = false, + signcolumn = 'yes', + statuscolumn = ' ', + conceallevel = 3, + }, + } +end, { desc = 'Neovim News' }) + +-- Words navigation +vim.keymap.set({ 'n', 't' }, ']]', function() + Snacks.words.jump(vim.v.count1) +end, { desc = 'Next Reference' }) + +vim.keymap.set({ 'n', 't' }, '[[', function() + Snacks.words.jump(-vim.v.count1) +end, { desc = 'Prev Reference' }) + +-- ============================================================ +-- Toggles (set up on VeryLazy) +-- ============================================================ + +vim.api.nvim_create_autocmd('User', { + pattern = 'VeryLazy', + callback = function() + Snacks.toggle.option('spell', { name = 'Spelling' }):map('us') + Snacks.toggle.option('wrap', { name = 'Wrap' }):map('uw') + Snacks.toggle.option('relativenumber', { name = 'Relative Number' }):map('uL') + Snacks.toggle.diagnostics():map('ud') + Snacks.toggle.line_number():map('ul') + Snacks.toggle.option('conceallevel', { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map('uc') + Snacks.toggle.treesitter():map('uT') + Snacks.toggle.option('background', { off = 'light', on = 'dark', name = 'Dark Background' }):map('ub') + Snacks.toggle.inlay_hints():map('uh') + Snacks.toggle.indent():map('ug') + Snacks.toggle.dim():map('uD') + end, +}) From a4baa1a772bc933bd92e45436b87c7b943f70bc3 Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Mon, 11 May 2026 10:08:41 -0600 Subject: [PATCH 02/15] blink is modular, prevents conflicts --- init.lua | 82 ++--------------------------------- lua/custom/plugins/blink.lua | 84 ++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+), 78 deletions(-) create mode 100644 lua/custom/plugins/blink.lua diff --git a/init.lua b/init.lua index 969e4752577..8882b994191 100644 --- a/init.lua +++ b/init.lua @@ -859,84 +859,10 @@ end -- SECTION 8: AUTOCOMPLETE & SNIPPETS -- blink.cmp and luasnip setup -- ============================================================ -do - -- [[ Snippet Engine ]] - - -- NOTE: You can also specify plugin using a version range for its git tag. - -- See `:help vim.version.range()` for more info - vim.pack.add { { src = gh 'L3MON4D3/LuaSnip', version = vim.version.range '2.*' } } - require('luasnip').setup {} - - -- `friendly-snippets` contains a variety of premade snippets. - -- See the README about individual language/framework/plugin snippets: - -- https://github.com/rafamadriz/friendly-snippets - -- - -- vim.pack.add { gh 'rafamadriz/friendly-snippets' } - -- require('luasnip.loaders.from_vscode').lazy_load() - - -- [[ Autocomplete Engine ]] - vim.pack.add { { src = gh 'saghen/blink.cmp', version = vim.version.range '1.*' } } - require('blink.cmp').setup { - keymap = { - -- 'default' (recommended) for mappings similar to built-in completions - -- to accept ([y]es) the completion. - -- This will auto-import if your LSP supports it. - -- This will expand snippets if the LSP sent a snippet. - -- 'super-tab' for tab to accept - -- 'enter' for enter to accept - -- 'none' for no mappings - -- - -- For an understanding of why the 'default' preset is recommended, - -- you will need to read `:help ins-completion` - -- - -- No, but seriously. Please read `:help ins-completion`, it is really good! - -- - -- All presets have the following mappings: - -- /: move to right/left of your snippet expansion - -- : Open menu or open docs if already open - -- / or /: Select next/previous item - -- : Hide menu - -- : Toggle signature help - -- - -- See `:help blink-cmp-config-keymap` for defining your own keymap - preset = 'default', - - -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: - -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps - }, - - appearance = { - -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' - -- Adjusts spacing to ensure icons are aligned - nerd_font_variant = 'mono', - }, - - completion = { - -- By default, you may press `` to show the documentation. - -- Optionally, set `auto_show = true` to show the documentation after a delay. - documentation = { auto_show = false, auto_show_delay_ms = 500 }, - menu = { border = 'none' }, - }, - - sources = { - default = { 'lsp', 'path', 'snippets' }, - }, - - snippets = { preset = 'luasnip' }, - - -- Blink.cmp includes an optional, recommended rust fuzzy matcher, - -- which automatically downloads a prebuilt binary when enabled. - -- - -- By default, we use the Lua implementation instead, but you may enable - -- the rust implementation via `'prefer_rust_with_warning'` - -- - -- See `:help blink-cmp-config-fuzzy` for more information - fuzzy = { implementation = 'lua' }, - - -- Shows a signature help window while you type arguments for a function - signature = { enabled = true, window = { border = 'none' } }, - } -end +-- NOTE: This section has been moved to lua/custom/plugins/blink.lua +-- to keep init.lua upstream-compatible and allow custom border settings +-- without causing merge conflicts on upstream updates. +-- -- ============================================================ -- SECTION 9: TREESITTER diff --git a/lua/custom/plugins/blink.lua b/lua/custom/plugins/blink.lua new file mode 100644 index 00000000000..d251bd61db0 --- /dev/null +++ b/lua/custom/plugins/blink.lua @@ -0,0 +1,84 @@ +-- Autocomplete & Snippets +-- Moved from init.lua (SECTION 7) to keep init.lua upstream-compatible +-- and allow custom border settings without merge conflicts. + +local function gh(repo) + return 'https://github.com/' .. repo +end + +-- [[ Snippet Engine ]] + +-- NOTE: You can also specify plugin using a version range for its git tag. +-- See `:help vim.version.range()` for more info +vim.pack.add { { src = gh 'L3MON4D3/LuaSnip', version = vim.version.range '2.*' } } +require('luasnip').setup {} + +-- `friendly-snippets` contains a variety of premade snippets. +-- See the README about individual language/framework/plugin snippets: +-- https://github.com/rafamadriz/friendly-snippets +-- +-- vim.pack.add { gh 'rafamadriz/friendly-snippets' } +-- require('luasnip.loaders.from_vscode').lazy_load() + +-- [[ Autocomplete Engine ]] +vim.pack.add { { src = gh 'saghen/blink.cmp', version = vim.version.range '1.*' } } +require('blink.cmp').setup { + keymap = { + -- 'default' (recommended) for mappings similar to built-in completions + -- to accept ([y]es) the completion. + -- This will auto-import if your LSP supports it. + -- This will expand snippets if the LSP sent a snippet. + -- 'super-tab' for tab to accept + -- 'enter' for enter to accept + -- 'none' for no mappings + -- + -- For an understanding of why the 'default' preset is recommended, + -- you will need to read `:help ins-completion` + -- + -- No, but seriously. Please read `:help ins-completion`, it is really good! + -- + -- All presets have the following mappings: + -- /: move to right/left of your snippet expansion + -- : Open menu or open docs if already open + -- / or /: Select next/previous item + -- : Hide menu + -- : Toggle signature help + -- + -- See `:help blink-cmp-config-keymap` for defining your own keymap + preset = 'default', + + -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: + -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps + }, + + appearance = { + -- 'mono' (default) for 'Nerd Font Mono' or 'normal' for 'Nerd Font' + -- Adjusts spacing to ensure icons are aligned + nerd_font_variant = 'mono', + }, + + completion = { + -- By default, you may press `` to show the documentation. + -- Optionally, set `auto_show = true` to show the documentation after a delay. + documentation = { auto_show = false, auto_show_delay_ms = 500 }, + menu = { border = 'none' }, + }, + + sources = { + default = { 'lsp', 'path', 'snippets' }, + }, + + snippets = { preset = 'luasnip' }, + + -- Blink.cmp includes an optional, recommended rust fuzzy matcher, + -- which automatically downloads a prebuilt binary when enabled. + -- + -- By default, we use the Lua implementation instead, but you may enable + -- the rust implementation via `'prefer_rust_with_warning'` + -- + -- See `:help blink-cmp-config-fuzzy` for more information + fuzzy = { implementation = 'lua' }, + + -- Shows a signature help window while you type arguments for a function + signature = { enabled = true, window = { border = 'rounded' } }, +} From 58eec586462cbcea9e812e5e386661b74485ed9a Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Mon, 11 May 2026 16:43:49 -0600 Subject: [PATCH 03/15] remove nvim-pack-lock.json from gitignore --- .gitignore | 2 +- nvim-pack-lock.json | 144 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 nvim-pack-lock.json diff --git a/.gitignore b/.gitignore index a52bd495579..3890fdb8bdd 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,6 @@ spell/ # nvim-pack-lock.json in version control - see :help vim.pack-lockfile # For the official `nvim-lua/kickstart.nvim` git repository, we leave it ignored to avoid unneeded # merge conflicts. -nvim-pack-lock.json +# nvim-pack-lock.json .DS_Store diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json new file mode 100644 index 00000000000..5a428b912b6 --- /dev/null +++ b/nvim-pack-lock.json @@ -0,0 +1,144 @@ +{ + "plugins": { + "99": { + "rev": "4d229141546290746c82ac90f5afc2786865b5f3", + "src": "https://github.com/ThePrimeagen/99" + }, + "FTerm.nvim": { + "rev": "d1320892cc2ebab472935242d9d992a2c9570180", + "src": "https://github.com/numToStr/FTerm.nvim" + }, + "LuaSnip": { + "rev": "642b0c595e11608b4c18219e93b88d7637af27bc", + "src": "https://github.com/L3MON4D3/LuaSnip", + "version": "2.0.0 - 3.0.0" + }, + "blink.cmp": { + "rev": "78336bc89ee5365633bcf754d93df01678b5c08f", + "src": "https://github.com/saghen/blink.cmp", + "version": "1.0.0 - 2.0.0" + }, + "conform.nvim": { + "rev": "dca1a190aa85f9065979ef35802fb77131911106", + "src": "https://github.com/stevearc/conform.nvim" + }, + "fidget.nvim": { + "rev": "889e2e96edef4e144965571d46f7a77bcc4d0ddf", + "src": "https://github.com/j-hui/fidget.nvim" + }, + "gitsigns.nvim": { + "rev": "dd3f588bacbeb041be6facf1742e42097f62165d", + "src": "https://github.com/lewis6991/gitsigns.nvim" + }, + "guess-indent.nvim": { + "rev": "84a4987ff36798c2fc1169cbaff67960aed9776f", + "src": "https://github.com/NMAC427/guess-indent.nvim" + }, + "indent-blankline.nvim": { + "rev": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03", + "src": "https://github.com/lukas-reineke/indent-blankline.nvim" + }, + "mason-lspconfig.nvim": { + "rev": "51feb0ada33d18f3c5c71ffb46005dbf8b33bef4", + "src": "https://github.com/mason-org/mason-lspconfig.nvim" + }, + "mason-nvim-dap.nvim": { + "rev": "9a10e096703966335bd5c46c8c875d5b0690dade", + "src": "https://github.com/jay-babu/mason-nvim-dap.nvim" + }, + "mason-tool-installer.nvim": { + "rev": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc", + "src": "https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim" + }, + "mason.nvim": { + "rev": "e54f5bf5f12c560da31c17eee5b3e1bd369f3ff9", + "src": "https://github.com/mason-org/mason.nvim" + }, + "mini.nvim": { + "rev": "a5fda91040763cf9ad70bdce1c656b0f4ba1d16e", + "src": "https://github.com/nvim-mini/mini.nvim" + }, + "neo-tree.nvim": { + "rev": "84c75e7a7e443586f60508d12fc50f90d9aee14e", + "src": "https://github.com/nvim-neo-tree/neo-tree.nvim", + "version": ">=0.0.0" + }, + "nui.nvim": { + "rev": "de740991c12411b663994b2860f1a4fd0937c130", + "src": "https://github.com/MunifTanjim/nui.nvim" + }, + "nvim-autopairs": { + "rev": "7b9923abad60b903ece7c52940e1321d39eccc79", + "src": "https://github.com/windwp/nvim-autopairs" + }, + "nvim-dap": { + "rev": "45a69eba683a2c448dd9ecfc4de89511f0646b5f", + "src": "https://github.com/mfussenegger/nvim-dap" + }, + "nvim-dap-go": { + "rev": "b4421153ead5d726603b02743ea40cf26a51ed5f", + "src": "https://github.com/leoluz/nvim-dap-go" + }, + "nvim-dap-ui": { + "rev": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49", + "src": "https://github.com/rcarriga/nvim-dap-ui" + }, + "nvim-lint": { + "rev": "eab58b48eb11d7745c11c505e0f3057165902461", + "src": "https://github.com/mfussenegger/nvim-lint" + }, + "nvim-lspconfig": { + "rev": "451d4ef9abd4f0f08e379ef0d55d1c391b6125a7", + "src": "https://github.com/neovim/nvim-lspconfig" + }, + "nvim-nio": { + "rev": "21f5324bfac14e22ba26553caf69ec76ae8a7662", + "src": "https://github.com/nvim-neotest/nvim-nio" + }, + "nvim-treesitter": { + "rev": "4916d6592ede8c07973490d9322f187e07dfefac", + "src": "https://github.com/nvim-treesitter/nvim-treesitter", + "version": "'main'" + }, + "nvim-ts-autotag": { + "rev": "88c1453db4ba7dd24131086fe51fdf74e587d275", + "src": "https://github.com/windwp/nvim-ts-autotag" + }, + "nvim-web-devicons": { + "rev": "2795c26c916bb3c57dde308b82be51971fa92747", + "src": "https://github.com/nvim-tree/nvim-web-devicons" + }, + "plenary.nvim": { + "rev": "74b06c6c75e4eeb3108ec01852001636d85a932b", + "src": "https://github.com/nvim-lua/plenary.nvim" + }, + "snacks.nvim": { + "rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e", + "src": "https://github.com/folke/snacks.nvim" + }, + "telescope-fzf-native.nvim": { + "rev": "b25b749b9db64d375d782094e2b9dce53ad53a40", + "src": "https://github.com/nvim-telescope/telescope-fzf-native.nvim" + }, + "telescope-ui-select.nvim": { + "rev": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2", + "src": "https://github.com/nvim-telescope/telescope-ui-select.nvim" + }, + "telescope.nvim": { + "rev": "f04ab730b8f9c6bf3f54a206d0dcddfd70c52d59", + "src": "https://github.com/nvim-telescope/telescope.nvim" + }, + "todo-comments.nvim": { + "rev": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668", + "src": "https://github.com/folke/todo-comments.nvim" + }, + "tokyonight.nvim": { + "rev": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6", + "src": "https://github.com/folke/tokyonight.nvim" + }, + "which-key.nvim": { + "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", + "src": "https://github.com/folke/which-key.nvim" + } + } +} From 4ab2687d3833a8d3605273597bffa861dedd2cbd Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Thu, 21 May 2026 21:40:25 -0600 Subject: [PATCH 04/15] add plugins and better the config --- init.lua | 9 +- lua/custom/plugins/00-core.lua | 23 +++-- lua/custom/plugins/harpoon.lua | 35 +++++++ lua/custom/plugins/kanagawa.lua | 26 +++++ lua/custom/plugins/no-doc-highlight.lua | 4 + lua/custom/plugins/snacks.lua | 125 ++++++++++++------------ lua/custom/plugins/undotree.lua | 7 ++ nvim-pack-lock.json | 76 +++++++++++--- 8 files changed, 222 insertions(+), 83 deletions(-) create mode 100644 lua/custom/plugins/harpoon.lua create mode 100644 lua/custom/plugins/kanagawa.lua create mode 100644 lua/custom/plugins/no-doc-highlight.lua create mode 100644 lua/custom/plugins/undotree.lua diff --git a/init.lua b/init.lua index 8882b994191..0cb4e9b7319 100644 --- a/init.lua +++ b/init.lua @@ -430,11 +430,11 @@ do comments = { italic = false }, -- Disable italics in comments }, } - + -- -- Load the colorscheme here. -- Like many other themes, this one has different styles, and you could load -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. - vim.cmd.colorscheme 'tokyonight-storm' ++ vim.cmd.colorscheme 'tokyonight-storm' -- Highlight todo, notes, etc in comments vim.pack.add { gh 'folke/todo-comments.nvim' } @@ -831,6 +831,7 @@ do go = true, javascript = true, typescript = true, + typescriptreact = true, } if enabled_filetypes[vim.bo[bufnr].filetype] then return { timeout_ms = 500 } @@ -848,7 +849,9 @@ do -- python = { "isort", "black" }, -- -- You can use 'stop_after_first' to run the first available formatter from the list - -- javascript = { "prettierd", "prettier", stop_after_first = true }, + typescript = { 'prettierd' }, + typescriptreact = { 'prettierd' }, + javascript = { 'prettierd' }, }, } diff --git a/lua/custom/plugins/00-core.lua b/lua/custom/plugins/00-core.lua index b292a5e90f7..ab20c239af4 100644 --- a/lua/custom/plugins/00-core.lua +++ b/lua/custom/plugins/00-core.lua @@ -4,7 +4,7 @@ -- Options -- ============================================================ -vim.o.list = true +vim.opt.list = true vim.opt.listchars = { tab = '│ ', trail = '·', @@ -24,6 +24,8 @@ vim.o.backup = false vim.o.termguicolors = true vim.opt.isfname:append '@-@' vim.opt.autoread = true +vim.opt.signcolumn = 'yes' +vim.opt.updatetime = 50 -- Add rounded borders to all floating windows (hover, signature help, diagnostics, etc.) vim.o.winborder = 'rounded' @@ -67,13 +69,9 @@ vim.keymap.set('t', '', '', { desc = '[E]xit terminal' }) vim.keymap.set('n', 'a', [[:%s/\<\>//gIc]], { desc = '[A]ll in file' }) -- Snippet navigation (blink.cmp) -vim.keymap.set({ 'i', 's' }, '', function() - require('blink.cmp').snippet_forward() -end, { desc = 'Snippet forward' }) +vim.keymap.set({ 'i', 's' }, '', function() require('blink.cmp').snippet_forward() end, { desc = 'Snippet forward' }) -vim.keymap.set({ 'i', 's' }, '', function() - require('blink.cmp').snippet_backward() -end, { desc = 'Snippet backward' }) +vim.keymap.set({ 'i', 's' }, '', function() require('blink.cmp').snippet_backward() end, { desc = 'Snippet backward' }) -- Equalize splits vim.keymap.set('n', 'w', '=', { desc = 'Make equal splits' }) @@ -110,12 +108,19 @@ vim.keymap.set('n', 'rp', function() ) end, { desc = 'Replace word under cursor in args' }) +-- Substitute (surround took over s prefix) +vim.keymap.set({ 'n', 'v' }, 'ss', 's', { desc = 'Substitute' }) + -- ============================================================ -- Go Autocommands -- ============================================================ local go_group = vim.api.nvim_create_augroup('GoAutoImport', { clear = true }) +-- TODO: Fix "no code actions available" notification on InsertLeave and BufWritePre +-- The notification appears when gopls has no imports to organize. +-- Solution: Check for code actions first before calling vim.lsp.buf.code_action, +-- or suppress the notification with a custom callback. vim.api.nvim_create_autocmd('BufWritePre', { group = go_group, pattern = '*.go', @@ -151,6 +156,8 @@ vim.api.nvim_set_hl(0, 'PmenuSel', { bg = 'none', blend = 10 }) -- ============================================================ -- Re-apply tokyonight with transparency settings +-- To revert back to tokyonight: uncomment below, comment out kanagawa setup in kanagawa.lua, +-- and uncomment the tokyonight block in init.lua require('tokyonight').setup { transparent = true, styles = { @@ -159,7 +166,7 @@ require('tokyonight').setup { sidebars = 'transparent', }, } -vim.cmd.colorscheme 'tokyonight' +vim.cmd.colorscheme 'tokyonight-storm' -- NOTE: blink.cmp border overrides (menu = 'none', signature = 'none') -- are now set directly in init.lua to avoid double-setup issues. diff --git a/lua/custom/plugins/harpoon.lua b/lua/custom/plugins/harpoon.lua new file mode 100644 index 00000000000..27cd634da2e --- /dev/null +++ b/lua/custom/plugins/harpoon.lua @@ -0,0 +1,35 @@ +-- harpoon: quickly navigate to marked files + +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { { src = gh 'ThePrimeagen/harpoon', branch = 'harpoon2' } } + +local harpoon = require 'harpoon' +local mark = require 'harpoon.mark' +local ui = require 'harpoon.ui' + +require('which-key').add { { 'm', group = 'Harpoon' } } + +harpoon:setup() + +-- Workaround: harpoon2 bug where json_encode fails on function references +-- during BufLeave from snacks explorer/picker windows +local orig_save = harpoon.save +if orig_save then + harpoon.save = function(...) + pcall(orig_save, ...) + end +end + +vim.keymap.set('n', 'ma', function() mark.add_file() end, { desc = 'Harpoon [A]dd file' }) +vim.keymap.set('n', 'mm', function() ui.toggle_quick_menu() end, { desc = 'Harpoon [M]enu' }) +vim.keymap.set('n', 'mh', function() ui.nav_file(1) end, { desc = 'Harpoon file 1' }) +vim.keymap.set('n', 'mj', function() ui.nav_file(2) end, { desc = 'Harpoon file 2' }) +vim.keymap.set('n', 'mk', function() ui.nav_file(3) end, { desc = 'Harpoon file 3' }) +vim.keymap.set('n', 'ml', function() ui.nav_file(4) end, { desc = 'Harpoon file 4' }) + +-- Alt+hjkl to navigate harpoon files 1-4 +vim.keymap.set('n', '', function() ui.nav_file(1) end, { desc = 'Harpoon file 1' }) +vim.keymap.set('n', '', function() ui.nav_file(2) end, { desc = 'Harpoon file 2' }) +vim.keymap.set('n', '', function() ui.nav_file(3) end, { desc = 'Harpoon file 3' }) +vim.keymap.set('n', '', function() ui.nav_file(4) end, { desc = 'Harpoon file 4' }) \ No newline at end of file diff --git a/lua/custom/plugins/kanagawa.lua b/lua/custom/plugins/kanagawa.lua new file mode 100644 index 00000000000..15b8842cf2f --- /dev/null +++ b/lua/custom/plugins/kanagawa.lua @@ -0,0 +1,26 @@ +-- local function gh(repo) return 'https://github.com/' .. repo end +-- vim.pack.add { gh 'rebelot/kanagawa.nvim' } +-- require('kanagawa').setup { +-- transparent = true, +-- commentStyle = { italic = false }, +-- colors = { +-- theme = { +-- all = { +-- ui = { +-- bg_gutter = 'none', +-- }, +-- }, +-- }, +-- }, +-- overrides = function(colors) +-- return { +-- NormalFloat = { bg = 'none' }, +-- FloatBorder = { bg = 'none' }, +-- FloatTitle = { bg = 'none' }, +-- NormalDark = { bg = 'none' }, +-- NormalSide = { bg = 'none' }, +-- } +-- end, +-- } +-- vim.cmd.colorscheme 'kanagawa' + diff --git a/lua/custom/plugins/no-doc-highlight.lua b/lua/custom/plugins/no-doc-highlight.lua new file mode 100644 index 00000000000..802fa44eadb --- /dev/null +++ b/lua/custom/plugins/no-doc-highlight.lua @@ -0,0 +1,4 @@ +-- Disable LSP document highlight (highlight all instances of word under cursor) +-- Keeps updatetime=50 for fast diagnostic floats, but removes the visual highlight +vim.lsp.buf.document_highlight = function() end + diff --git a/lua/custom/plugins/snacks.lua b/lua/custom/plugins/snacks.lua index 81526f1369c..3fc4059bcd8 100644 --- a/lua/custom/plugins/snacks.lua +++ b/lua/custom/plugins/snacks.lua @@ -1,21 +1,19 @@ -- snacks.nvim: UI utilities suite -local function gh(repo) - return 'https://github.com/' .. repo -end +local function gh(repo) return 'https://github.com/' .. repo end vim.pack.add { gh 'folke/snacks.nvim' } require('snacks').setup { - bigfile = { enabled = false }, + bigfile = { enabled = true }, dashboard = { enabled = false }, explorer = { enabled = true, replace_netrw = true, }, - indent = { enabled = false }, - input = { enabled = false }, - notifier = { enabled = false }, + indent = { enabled = true }, + input = { enabled = true }, + notifier = { enabled = true }, picker = { enabled = false, sources = { @@ -42,7 +40,7 @@ require('snacks').setup { }, }, quickfile = { enabled = true }, - scope = { enabled = false }, + scope = { enabled = true }, scroll = { enabled = true }, statuscolumn = { enabled = false }, words = { enabled = true }, @@ -51,76 +49,83 @@ require('snacks').setup { }, } +-- ============================================================ +-- Which-key groups +-- ============================================================ + +require('which-key').add { + { 'u', group = 'Undo/Toggle' }, + { 'g', group = 'Git', mode = { 'n', 'v' } }, + { 'c', group = 'Code' }, +} + -- ============================================================ -- Keymaps -- ============================================================ -- Explorer -vim.keymap.set('n', 'e', function() - Snacks.explorer() -end, { desc = 'File Explorer' }) +vim.keymap.set('n', 'e', function() Snacks.explorer() end, { desc = 'File Explorer' }) -- Git -vim.keymap.set('n', 'gg', function() - Snacks.lazygit() -end, { desc = 'Lazygit' }) +vim.keymap.set('n', 'gg', function() Snacks.lazygit() end, { desc = 'Lazygit' }) -vim.keymap.set({ 'n', 'v' }, 'gB', function() - Snacks.gitbrowse() -end, { desc = 'Git Browse' }) +vim.keymap.set({ 'n', 'v' }, 'gB', function() Snacks.gitbrowse() end, { desc = 'Git Browse' }) --- Undo -vim.keymap.set('n', 'su', function() - Snacks.picker.undo() -end, { desc = 'Undo History' }) +-- Disabled: snacks.picker is disabled; undo via this keymap would error at runtime +-- vim.keymap.set('n', 'su', function() Snacks.picker.undo() end, { desc = 'Undo History' }) -- File rename -vim.keymap.set('n', 'cR', function() - Snacks.rename.rename_file() -end, { desc = 'Rename File' }) +vim.keymap.set('n', 'cR', function() Snacks.rename.rename_file() end, { desc = 'Rename File' }) -- Neovim News -vim.keymap.set('n', 'N', function() - Snacks.win { - file = vim.api.nvim_get_runtime_file('doc/news.txt', false)[1], - width = 0.6, - height = 0.6, - wo = { - spell = false, - wrap = false, - signcolumn = 'yes', - statuscolumn = ' ', - conceallevel = 3, - }, - } -end, { desc = 'Neovim News' }) +vim.keymap.set( + 'n', + 'N', + function() + Snacks.win { + file = vim.api.nvim_get_runtime_file('doc/news.txt', false)[1], + width = 0.6, + height = 0.6, + wo = { + spell = false, + wrap = false, + signcolumn = 'yes', + statuscolumn = ' ', + conceallevel = 3, + }, + } + end, + { desc = 'Neovim News' } +) -- Words navigation -vim.keymap.set({ 'n', 't' }, ']]', function() - Snacks.words.jump(vim.v.count1) -end, { desc = 'Next Reference' }) +vim.keymap.set({ 'n', 't' }, ']]', function() Snacks.words.jump(vim.v.count1) end, { desc = 'Next Reference' }) -vim.keymap.set({ 'n', 't' }, '[[', function() - Snacks.words.jump(-vim.v.count1) -end, { desc = 'Prev Reference' }) +vim.keymap.set({ 'n', 't' }, '[[', function() Snacks.words.jump(-vim.v.count1) end, { desc = 'Prev Reference' }) + +-- Scope text objects (inner/around) +vim.keymap.set({ 'x', 'o' }, 'ip', '(snacks_scope_inner)', { desc = 'Inner Scope' }) +vim.keymap.set({ 'x', 'o' }, 'ap', '(snacks_scope_outer)', { desc = 'Around Scope' }) -- ============================================================ -- Toggles (set up on VeryLazy) +-- Disabled: toggle keymaps were non-functional, individual toggles available via :Snacks commands -- ============================================================ -vim.api.nvim_create_autocmd('User', { - pattern = 'VeryLazy', - callback = function() - Snacks.toggle.option('spell', { name = 'Spelling' }):map('us') - Snacks.toggle.option('wrap', { name = 'Wrap' }):map('uw') - Snacks.toggle.option('relativenumber', { name = 'Relative Number' }):map('uL') - Snacks.toggle.diagnostics():map('ud') - Snacks.toggle.line_number():map('ul') - Snacks.toggle.option('conceallevel', { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map('uc') - Snacks.toggle.treesitter():map('uT') - Snacks.toggle.option('background', { off = 'light', on = 'dark', name = 'Dark Background' }):map('ub') - Snacks.toggle.inlay_hints():map('uh') - Snacks.toggle.indent():map('ug') - Snacks.toggle.dim():map('uD') - end, -}) +-- vim.api.nvim_create_autocmd('User', { +-- pattern = 'VeryLazy', +-- callback = function() +-- Snacks.toggle.option('spell', { name = 'Spelling' }):map 'us' +-- Snacks.toggle.option('wrap', { name = 'Wrap' }):map 'uw' +-- Snacks.toggle.option('relativenumber', { name = 'Relative Number' }):map 'uL' +-- Snacks.toggle.diagnostics():map 'ud' +-- Snacks.toggle.line_number():map 'ul' +-- Snacks.toggle.option('conceallevel', { off = 0, on = vim.o.conceallevel > 0 and vim.o.conceallevel or 2 }):map 'uc' +-- Snacks.toggle.treesitter():map 'uT' +-- Snacks.toggle.option('background', { off = 'light', on = 'dark', name = 'Dark Background' }):map 'ub' +-- -- Disabled: conflicts with th inlay hints toggle in init.lua LspAttach (line 679) +-- -- Snacks.toggle.inlay_hints():map 'uh' +-- Snacks.toggle.indent():map 'ug' +-- Snacks.toggle.dim():map 'uD' +-- end, +-- }) diff --git a/lua/custom/plugins/undotree.lua b/lua/custom/plugins/undotree.lua new file mode 100644 index 00000000000..a20af2f54b1 --- /dev/null +++ b/lua/custom/plugins/undotree.lua @@ -0,0 +1,7 @@ +-- mbbill/undotree: visual undo history browser + +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { gh 'mbbill/undotree' } + +vim.keymap.set('n', 'ut', 'UndotreeToggle', { desc = 'Undotree' }) \ No newline at end of file diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json index 5a428b912b6..fa6128ce9cd 100644 --- a/nvim-pack-lock.json +++ b/nvim-pack-lock.json @@ -18,12 +18,16 @@ "src": "https://github.com/saghen/blink.cmp", "version": "1.0.0 - 2.0.0" }, + "bufferline.nvim": { + "rev": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3", + "src": "https://github.com/akinsho/bufferline.nvim" + }, "conform.nvim": { - "rev": "dca1a190aa85f9065979ef35802fb77131911106", + "rev": "18aeab3d63d350dcf44d64c462cc489a3412af40", "src": "https://github.com/stevearc/conform.nvim" }, "fidget.nvim": { - "rev": "889e2e96edef4e144965571d46f7a77bcc4d0ddf", + "rev": "82404b196e73a00b1727a91903beef5ddc319d22", "src": "https://github.com/j-hui/fidget.nvim" }, "gitsigns.nvim": { @@ -34,12 +38,24 @@ "rev": "84a4987ff36798c2fc1169cbaff67960aed9776f", "src": "https://github.com/NMAC427/guess-indent.nvim" }, + "harpoon": { + "rev": "1bc17e3e42ea3c46b33c0bbad6a880792692a1b3", + "src": "https://github.com/ThePrimeagen/harpoon" + }, "indent-blankline.nvim": { "rev": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03", "src": "https://github.com/lukas-reineke/indent-blankline.nvim" }, + "kanagawa.nvim": { + "rev": "bb85e4bfc8d89b0e62c8fa53ccdd13d12e2f77b3", + "src": "https://github.com/rebelot/kanagawa.nvim" + }, + "marks.nvim": { + "rev": "f353e8c08c50f39e99a9ed474172df7eddd89b72", + "src": "https://github.com/chentoast/marks.nvim" + }, "mason-lspconfig.nvim": { - "rev": "51feb0ada33d18f3c5c71ffb46005dbf8b33bef4", + "rev": "7b01e2974a47d489bb92f47a41e4c0088ea8f86e", "src": "https://github.com/mason-org/mason-lspconfig.nvim" }, "mason-nvim-dap.nvim": { @@ -51,15 +67,15 @@ "src": "https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim" }, "mason.nvim": { - "rev": "e54f5bf5f12c560da31c17eee5b3e1bd369f3ff9", + "rev": "cbf8d285e1462dd24acf3507817be2bbcb035919", "src": "https://github.com/mason-org/mason.nvim" }, "mini.nvim": { - "rev": "a5fda91040763cf9ad70bdce1c656b0f4ba1d16e", + "rev": "6791615e48801cbf5b2baefadcea77a7760de3f4", "src": "https://github.com/nvim-mini/mini.nvim" }, "neo-tree.nvim": { - "rev": "84c75e7a7e443586f60508d12fc50f90d9aee14e", + "rev": "83e7a2982fd12b9c3d35bc39dd5877cd91a02a61", "src": "https://github.com/nvim-neo-tree/neo-tree.nvim", "version": ">=0.0.0" }, @@ -71,8 +87,12 @@ "rev": "7b9923abad60b903ece7c52940e1321d39eccc79", "src": "https://github.com/windwp/nvim-autopairs" }, + "nvim-colorizer.lua": { + "rev": "5cfe7fffbd01e17b3c1e14af85d5febdef88bd8c", + "src": "https://github.com/catgoose/nvim-colorizer.lua" + }, "nvim-dap": { - "rev": "45a69eba683a2c448dd9ecfc4de89511f0646b5f", + "rev": "531771530d4f82ad2d21e436e3cc052d68d7aebb", "src": "https://github.com/mfussenegger/nvim-dap" }, "nvim-dap-go": { @@ -83,12 +103,16 @@ "rev": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49", "src": "https://github.com/rcarriga/nvim-dap-ui" }, + "nvim-highlight-colors": { + "rev": "e4c7af0211866162d999ce0bdd6a029302e19139", + "src": "https://github.com/brenoprata10/nvim-highlight-colors" + }, "nvim-lint": { - "rev": "eab58b48eb11d7745c11c505e0f3057165902461", + "rev": "d48f3a76189d03b2239f6df1b2f7e3fa8353743b", "src": "https://github.com/mfussenegger/nvim-lint" }, "nvim-lspconfig": { - "rev": "451d4ef9abd4f0f08e379ef0d55d1c391b6125a7", + "rev": "dfbada1a311c4bf3369f8d5421369c9b6e8b888f", "src": "https://github.com/neovim/nvim-lspconfig" }, "nvim-nio": { @@ -105,27 +129,47 @@ "src": "https://github.com/windwp/nvim-ts-autotag" }, "nvim-web-devicons": { - "rev": "2795c26c916bb3c57dde308b82be51971fa92747", + "rev": "0d7d35fa946837b8738b17c18d1faa1ac351e7f9", "src": "https://github.com/nvim-tree/nvim-web-devicons" }, + "org-bullets.nvim": { + "rev": "503fe053550879cc202086a40454e46a87c41ddb", + "src": "https://github.com/nvim-orgmode/org-bullets.nvim" + }, + "orgmode": { + "rev": "f32a06d4b5399dad8bf0478c772bf6c513f02dcf", + "src": "https://github.com/nvim-orgmode/orgmode" + }, "plenary.nvim": { "rev": "74b06c6c75e4eeb3108ec01852001636d85a932b", "src": "https://github.com/nvim-lua/plenary.nvim" }, + "render-markdown.nvim": { + "rev": "640a3ec6d538bad17c328be373c7cad0293d9589", + "src": "https://github.com/MeanderingProgrammer/render-markdown.nvim" + }, + "smear-cursor.nvim": { + "rev": "9e9378d6ee34bb3782e0e8c63d9ec8ca618b479b", + "src": "https://github.com/sphamba/smear-cursor.nvim" + }, "snacks.nvim": { - "rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e", + "rev": "0770753c88228f7f15449c6a5b242e3f7cd0d71c", "src": "https://github.com/folke/snacks.nvim" }, "telescope-fzf-native.nvim": { "rev": "b25b749b9db64d375d782094e2b9dce53ad53a40", "src": "https://github.com/nvim-telescope/telescope-fzf-native.nvim" }, + "telescope-orgmode.nvim": { + "rev": "214fe56e105bb3d0638f33320ed959911a1bfcb1", + "src": "https://github.com/nvim-orgmode/telescope-orgmode.nvim" + }, "telescope-ui-select.nvim": { "rev": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2", "src": "https://github.com/nvim-telescope/telescope-ui-select.nvim" }, "telescope.nvim": { - "rev": "f04ab730b8f9c6bf3f54a206d0dcddfd70c52d59", + "rev": "7d324792b7943e4aa16ad007212e6acc6f9fe335", "src": "https://github.com/nvim-telescope/telescope.nvim" }, "todo-comments.nvim": { @@ -136,9 +180,17 @@ "rev": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6", "src": "https://github.com/folke/tokyonight.nvim" }, + "undotree": { + "rev": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d", + "src": "https://github.com/mbbill/undotree" + }, "which-key.nvim": { "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", "src": "https://github.com/folke/which-key.nvim" + }, + "yazi.nvim": { + "rev": "357942e1b73eae5cbe27b44a9afe7f37732f63fa", + "src": "https://github.com/mikavilpas/yazi.nvim" } } } From 18989440dc2fc7a68ffabfe1479f5ba5dc5450cc Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Mon, 1 Jun 2026 15:57:12 -0600 Subject: [PATCH 05/15] separate blink config --- lua/custom/plugins/blink.lua | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lua/custom/plugins/blink.lua b/lua/custom/plugins/blink.lua index d251bd61db0..6334cdfd8ca 100644 --- a/lua/custom/plugins/blink.lua +++ b/lua/custom/plugins/blink.lua @@ -47,6 +47,10 @@ require('blink.cmp').setup { -- See `:help blink-cmp-config-keymap` for defining your own keymap preset = 'default', + -- Disable default Tab snippet navigation (using C-, / C-. instead) + [''] = false, + [''] = false, + -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps }, From 4f14be42da92ff94a38210c3eeb344ec4bb84c57 Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Mon, 8 Jun 2026 09:56:12 -0600 Subject: [PATCH 06/15] adjust nvim config for working with omarchy clipboard --- init.lua | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 0cb4e9b7319..7df28ba2777 100644 --- a/init.lua +++ b/init.lua @@ -118,11 +118,25 @@ do -- Don't show the mode, since it's already in the status line vim.o.showmode = false + -- OSC 52 clipboard support (works over SSH/tmux) + -- Must be set before vim.o.clipboard so Neovim uses OSC 52 for copy/paste + vim.g.clipboard = { + name = 'OSC 52', + copy = { + ['+'] = require('vim.ui.clipboard.osc52').copy '+', + ['*'] = require('vim.ui.clipboard.osc52').copy '*', + }, + paste = { + ['+'] = require('vim.ui.clipboard.osc52').paste '+', + ['*'] = require('vim.ui.clipboard.osc52').paste '*', + }, + } + -- Sync clipboard between OS and Neovim. -- Schedule the setting after `UiEnter` because it can increase startup-time. -- Remove this option if you want your OS clipboard to remain independent. -- See `:help 'clipboard'` - vim.schedule(function() vim.o.clipboard = 'unnamedplus' end) + -- vim.schedule(function() vim.o.clipboard = 'unnamedplus' end) -- Enable break indent vim.o.breakindent = true From 5e7e6b83a6dbf36fe0d13905657eb5ca7ea9681d Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Tue, 30 Jun 2026 13:47:24 -0600 Subject: [PATCH 07/15] folke todo and remove buffer line --- init.lua | 4 ---- lua/custom/plugins/bufferline.lua | 29 ++++++++++++++++++++++++++++ lua/custom/plugins/todo-comments.lua | 6 ++++++ 3 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 lua/custom/plugins/bufferline.lua create mode 100644 lua/custom/plugins/todo-comments.lua diff --git a/init.lua b/init.lua index 7df28ba2777..f70a959f690 100644 --- a/init.lua +++ b/init.lua @@ -450,10 +450,6 @@ do -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. + vim.cmd.colorscheme 'tokyonight-storm' - -- Highlight todo, notes, etc in comments - vim.pack.add { gh 'folke/todo-comments.nvim' } - require('todo-comments').setup { signs = false } - -- [[ mini.nvim ]] -- A collection of various small independent plugins/modules vim.pack.add { gh 'nvim-mini/mini.nvim' } diff --git a/lua/custom/plugins/bufferline.lua b/lua/custom/plugins/bufferline.lua new file mode 100644 index 00000000000..335d1b1f669 --- /dev/null +++ b/lua/custom/plugins/bufferline.lua @@ -0,0 +1,29 @@ +-- local function gh(repo) return 'https://github.com/' .. repo end +-- +-- vim.pack.add { gh 'akinsho/bufferline.nvim' } +-- +-- require('bufferline').setup { +-- options = { +-- mode = 'buffers', +-- diagnostics = 'nvim_lsp', +-- separator_style = 'thin', +-- always_show_bufferline = false, +-- offsets = { +-- { +-- filetype = 'snacks_explorer', +-- text = 'Explorer', +-- text_align = 'center', +-- separator = true, +-- }, +-- }, +-- }, +-- } +-- +-- vim.keymap.set('n', 'H', 'BufferLineCyclePrev', { desc = 'Prev buffer' }) +-- vim.keymap.set('n', 'L', 'BufferLineCycleNext', { desc = 'Next buffer' }) +-- vim.keymap.set('n', 'vd', 'bdelete', { desc = '[V]uffer [D]elete' }) +-- vim.keymap.set('n', 'vD', 'bdelete!', { desc = '[V]uffer [D]elete (force)' }) +-- vim.keymap.set('n', 'vo', 'BufferLineCloseOthers', { desc = '[V]uffer delete [O]thers' }) +-- vim.keymap.set('n', 'vp', 'BufferLineCyclePrev', { desc = '[V]uffer [P]rev' }) +-- vim.keymap.set('n', 'vn', 'BufferLineCycleNext', { desc = '[V]uffer [N]ext' }) + diff --git a/lua/custom/plugins/todo-comments.lua b/lua/custom/plugins/todo-comments.lua new file mode 100644 index 00000000000..e5f162674e4 --- /dev/null +++ b/lua/custom/plugins/todo-comments.lua @@ -0,0 +1,6 @@ +-- folke/todo-comments: highlight & search TODOs + +vim.pack.add { 'https://github.com/folke/todo-comments.nvim' } +require('todo-comments').setup { signs = false } + +vim.keymap.set('n', 'st', 'TodoTelescope', { desc = '[S]earch [T]odo' }) \ No newline at end of file From ff96b43785f586079b9062b20823cfa5da4fbed4 Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Tue, 30 Jun 2026 19:51:33 -0600 Subject: [PATCH 08/15] restore marks, add yazi and smear --- lua/custom/plugins/smear-cursor.lua | 27 +++++++++++++++++++++++++++ lua/custom/plugins/yazi.lua | 13 +++++++++++++ lua/kickstart/plugins/neo-tree.lua | 2 +- nvim-pack-lock.json | 16 ---------------- 4 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 lua/custom/plugins/smear-cursor.lua create mode 100644 lua/custom/plugins/yazi.lua diff --git a/lua/custom/plugins/smear-cursor.lua b/lua/custom/plugins/smear-cursor.lua new file mode 100644 index 00000000000..00f4fd5d356 --- /dev/null +++ b/lua/custom/plugins/smear-cursor.lua @@ -0,0 +1,27 @@ +-- smear-cursor.nvim: animated cursor movement + +local function gh(repo) + return 'https://github.com/' .. repo +end + +vim.pack.add { gh 'sphamba/smear-cursor.nvim' } + +require('smear_cursor').setup { + smear_between_buffers = true, + smear_between_neighbor_lines = true, + scroll_buffer_space = true, + legacy_computing_symbols_support = false, + smear_insert_mode = true, + + -- Transparent background: TokyoNight storm has no opaque bg, so the smear + -- rendering can leave a shadow. This fallback color eliminates it. + transparent_bg_fallback_color = '#24283b', + + -- Slightly snappier than defaults (matches your 50ms updatetime) + stiffness = 0.7, + trailing_stiffness = 0.5, + + -- Prevent ghost cursor artifacts when using transparent backgrounds + hide_target_hack = true, + never_draw_over_target = true, +} diff --git a/lua/custom/plugins/yazi.lua b/lua/custom/plugins/yazi.lua new file mode 100644 index 00000000000..88f23bc8daf --- /dev/null +++ b/lua/custom/plugins/yazi.lua @@ -0,0 +1,13 @@ +-- yazi.nvim: file manager integration + +local function gh(repo) + return 'https://github.com/' .. repo +end + +vim.pack.add { gh 'mikavilpas/yazi.nvim' } + +require('yazi').setup { + open_for_directories = true, +} + +vim.keymap.set('n', '\\', 'Yazi', { desc = 'Yazi file manager' }) diff --git a/lua/kickstart/plugins/neo-tree.lua b/lua/kickstart/plugins/neo-tree.lua index 549629ae020..fd6148261cb 100644 --- a/lua/kickstart/plugins/neo-tree.lua +++ b/lua/kickstart/plugins/neo-tree.lua @@ -7,7 +7,7 @@ vim.pack.add { 'https://github.com/MunifTanjim/nui.nvim', } -vim.keymap.set('n', '\\', 'Neotree reveal', { desc = 'NeoTree reveal', silent = true }) +-- vim.keymap.set('n', '\\', 'Neotree reveal', { desc = 'NeoTree reveal', silent = true }) require('neo-tree').setup { filesystem = { diff --git a/nvim-pack-lock.json b/nvim-pack-lock.json index fa6128ce9cd..dc0e6d71d19 100644 --- a/nvim-pack-lock.json +++ b/nvim-pack-lock.json @@ -132,14 +132,6 @@ "rev": "0d7d35fa946837b8738b17c18d1faa1ac351e7f9", "src": "https://github.com/nvim-tree/nvim-web-devicons" }, - "org-bullets.nvim": { - "rev": "503fe053550879cc202086a40454e46a87c41ddb", - "src": "https://github.com/nvim-orgmode/org-bullets.nvim" - }, - "orgmode": { - "rev": "f32a06d4b5399dad8bf0478c772bf6c513f02dcf", - "src": "https://github.com/nvim-orgmode/orgmode" - }, "plenary.nvim": { "rev": "74b06c6c75e4eeb3108ec01852001636d85a932b", "src": "https://github.com/nvim-lua/plenary.nvim" @@ -160,10 +152,6 @@ "rev": "b25b749b9db64d375d782094e2b9dce53ad53a40", "src": "https://github.com/nvim-telescope/telescope-fzf-native.nvim" }, - "telescope-orgmode.nvim": { - "rev": "214fe56e105bb3d0638f33320ed959911a1bfcb1", - "src": "https://github.com/nvim-orgmode/telescope-orgmode.nvim" - }, "telescope-ui-select.nvim": { "rev": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2", "src": "https://github.com/nvim-telescope/telescope-ui-select.nvim" @@ -187,10 +175,6 @@ "which-key.nvim": { "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", "src": "https://github.com/folke/which-key.nvim" - }, - "yazi.nvim": { - "rev": "357942e1b73eae5cbe27b44a9afe7f37732f63fa", - "src": "https://github.com/mikavilpas/yazi.nvim" } } } From 4a28b0e37a91f29262ad7eb540bda2014b09b85a Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Fri, 3 Jul 2026 11:09:20 -0600 Subject: [PATCH 09/15] add custom plugins --- init.lua | 5 +++- lua/custom/plugins/00-core.lua | 45 +++++++++++------------------ lua/custom/plugins/blink.lua | 2 +- lua/custom/plugins/marks.lua | 5 ++++ lua/custom/plugins/orgmode.lua | 33 +++++++++++++++++++++ lua/custom/plugins/smear-cursor.lua | 15 ++++++---- lua/custom/plugins/snacks.lua | 2 +- lua/custom/plugins/yazi.lua | 4 +++ lua/kickstart/plugins/autopairs.lua | 15 ++++++++++ lua/kickstart/plugins/neo-tree.lua | 1 + 10 files changed, 90 insertions(+), 37 deletions(-) create mode 100644 lua/custom/plugins/marks.lua create mode 100644 lua/custom/plugins/orgmode.lua diff --git a/init.lua b/init.lua index f70a959f690..0b89d4d1df7 100644 --- a/init.lua +++ b/init.lua @@ -668,7 +668,9 @@ do -- Useful status updates for LSP. vim.pack.add { gh 'j-hui/fidget.nvim' } - require('fidget').setup {} + require('fidget').setup { + notification = { enabled = false }, + } -- This function gets run when an LSP attaches to a particular buffer. -- That is to say, every time a new file is opened that is associated with @@ -859,6 +861,7 @@ do -- python = { "isort", "black" }, -- -- You can use 'stop_after_first' to run the first available formatter from the list + go = { 'goimports' }, typescript = { 'prettierd' }, typescriptreact = { 'prettierd' }, javascript = { 'prettierd' }, diff --git a/lua/custom/plugins/00-core.lua b/lua/custom/plugins/00-core.lua index ab20c239af4..00829d321fa 100644 --- a/lua/custom/plugins/00-core.lua +++ b/lua/custom/plugins/00-core.lua @@ -30,6 +30,9 @@ vim.opt.updatetime = 50 -- Add rounded borders to all floating windows (hover, signature help, diagnostics, etc.) vim.o.winborder = 'rounded' +-- Associate .gotmpl files with the gotmpl filetype (for gopls) +vim.filetype.add { extension = { gotmpl = 'gotmpl' } } + -- ============================================================ -- Keymaps -- ============================================================ @@ -115,34 +118,20 @@ vim.keymap.set({ 'n', 'v' }, 'ss', 's', { desc = 'Substitute' }) -- Go Autocommands -- ============================================================ -local go_group = vim.api.nvim_create_augroup('GoAutoImport', { clear = true }) - --- TODO: Fix "no code actions available" notification on InsertLeave and BufWritePre --- The notification appears when gopls has no imports to organize. --- Solution: Check for code actions first before calling vim.lsp.buf.code_action, --- or suppress the notification with a custom callback. -vim.api.nvim_create_autocmd('BufWritePre', { - group = go_group, - pattern = '*.go', - callback = function() - vim.lsp.buf.format { async = false } - vim.lsp.buf.code_action { - context = { only = { 'source.organizeImports' } }, - apply = true, - } - end, -}) - -vim.api.nvim_create_autocmd('InsertLeave', { - group = go_group, - pattern = '*.go', - callback = function() - vim.lsp.buf.code_action { - context = { only = { 'source.organizeImports' } }, - apply = true, - } - end, -}) +-- Import organization handled by conform.nvim with goimports formatter on save. + +-- If you want organizeImports on InsertLeave, uncomment below with guard: +-- local go_group = vim.api.nvim_create_augroup('GoAutoImport', { clear = true }) +-- vim.api.nvim_create_autocmd('InsertLeave', { +-- group = go_group, +-- pattern = '*.go', +-- callback = function() +-- local clients = vim.lsp.get_clients({ bufnr = 0 }) +-- if vim.iter(clients):any(function(c) return c:supports_method('textDocument/codeAction', 0) end) then +-- vim.lsp.buf.code_action { context = { only = { 'source.organizeImports' } }, apply = true } +-- end +-- end, +-- }) -- ============================================================ -- Highlights diff --git a/lua/custom/plugins/blink.lua b/lua/custom/plugins/blink.lua index 6334cdfd8ca..89243277a9d 100644 --- a/lua/custom/plugins/blink.lua +++ b/lua/custom/plugins/blink.lua @@ -81,7 +81,7 @@ require('blink.cmp').setup { -- the rust implementation via `'prefer_rust_with_warning'` -- -- See `:help blink-cmp-config-fuzzy` for more information - fuzzy = { implementation = 'lua' }, + fuzzy = { implementation = 'prefer_rust_with_warning' }, -- Shows a signature help window while you type arguments for a function signature = { enabled = true, window = { border = 'rounded' } }, diff --git a/lua/custom/plugins/marks.lua b/lua/custom/plugins/marks.lua new file mode 100644 index 00000000000..4080afcd03e --- /dev/null +++ b/lua/custom/plugins/marks.lua @@ -0,0 +1,5 @@ +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { gh 'chentoast/marks.nvim' } + +require('marks').setup {} diff --git a/lua/custom/plugins/orgmode.lua b/lua/custom/plugins/orgmode.lua new file mode 100644 index 00000000000..25189e1bfe1 --- /dev/null +++ b/lua/custom/plugins/orgmode.lua @@ -0,0 +1,33 @@ +local gh = function(repo) return 'https://github.com/' .. repo end + +vim.pack.add { + gh 'nvim-orgmode/orgmode', + gh 'nvim-orgmode/org-bullets.nvim', + gh 'nvim-orgmode/telescope-orgmode.nvim', +} + +require('orgmode').setup { + org_agenda_files = '~/org/**/*', + org_default_notes_file = '~/org/refile.org', + org_capture_templates = { + d = { + description = 'Dev journal entry', + template = '**** %^{Topic}\n***** %U %?', + target = '~/org/dev-journal.org', + datetree = true, + }, + }, + org_babel_default_header_args = { + [':tangle'] = 'no', + [':noweb'] = 'no', + }, + org_edit_src_filetype_map = { + -- sh = 'bash', + }, +} + +require('org-bullets').setup() + +vim.lsp.enable('org') + +pcall(require('telescope').load_extension, 'orgmode') diff --git a/lua/custom/plugins/smear-cursor.lua b/lua/custom/plugins/smear-cursor.lua index 00f4fd5d356..9089be7179f 100644 --- a/lua/custom/plugins/smear-cursor.lua +++ b/lua/custom/plugins/smear-cursor.lua @@ -1,8 +1,6 @@ -- smear-cursor.nvim: animated cursor movement -local function gh(repo) - return 'https://github.com/' .. repo -end +local function gh(repo) return 'https://github.com/' .. repo end vim.pack.add { gh 'sphamba/smear-cursor.nvim' } @@ -10,7 +8,7 @@ require('smear_cursor').setup { smear_between_buffers = true, smear_between_neighbor_lines = true, scroll_buffer_space = true, - legacy_computing_symbols_support = false, + legacy_computing_symbols_support = true, smear_insert_mode = true, -- Transparent background: TokyoNight storm has no opaque bg, so the smear @@ -18,8 +16,13 @@ require('smear_cursor').setup { transparent_bg_fallback_color = '#24283b', -- Slightly snappier than defaults (matches your 50ms updatetime) - stiffness = 0.7, - trailing_stiffness = 0.5, + stiffness = 0.8, + trailing_stiffness = 0.6, + stiffness_insert_mode = 0.7, + trailing_stiffness_insert_mode = 0.7, + damping = 0.95, + damping_insert_mode = 0.95, + distance_stop_animating = 0.5, -- Prevent ghost cursor artifacts when using transparent backgrounds hide_target_hack = true, diff --git a/lua/custom/plugins/snacks.lua b/lua/custom/plugins/snacks.lua index 3fc4059bcd8..0deee02e377 100644 --- a/lua/custom/plugins/snacks.lua +++ b/lua/custom/plugins/snacks.lua @@ -9,7 +9,7 @@ require('snacks').setup { dashboard = { enabled = false }, explorer = { enabled = true, - replace_netrw = true, + replace_netrw = false, }, indent = { enabled = true }, input = { enabled = true }, diff --git a/lua/custom/plugins/yazi.lua b/lua/custom/plugins/yazi.lua index 88f23bc8daf..1d8abd638a2 100644 --- a/lua/custom/plugins/yazi.lua +++ b/lua/custom/plugins/yazi.lua @@ -6,6 +6,10 @@ end vim.pack.add { gh 'mikavilpas/yazi.nvim' } +-- Disable netrw early so it doesn't load before yazi's hijack +vim.g.loaded_netrw = 1 +vim.g.loaded_netrwPlugin = 1 + require('yazi').setup { open_for_directories = true, } diff --git a/lua/kickstart/plugins/autopairs.lua b/lua/kickstart/plugins/autopairs.lua index 1d2cdab098d..9eade735769 100644 --- a/lua/kickstart/plugins/autopairs.lua +++ b/lua/kickstart/plugins/autopairs.lua @@ -3,3 +3,18 @@ vim.pack.add { 'https://github.com/windwp/nvim-autopairs' } require('nvim-autopairs').setup {} + +-- Don't auto-insert } inside org #+BEGIN_SRC / #+END_SRC blocks +-- Avoids conflict with orgmode's indent/format machinery +local rule = require('nvim-autopairs').get_rule('{') +if rule then + rule:with_pair(function(opts) + if vim.bo[opts.bufnr].filetype ~= 'org' then return true end + local node = vim.treesitter.get_node() + while node do + if node:type() == 'block' then return false end + node = node:parent() + end + return true + end) +end diff --git a/lua/kickstart/plugins/neo-tree.lua b/lua/kickstart/plugins/neo-tree.lua index fd6148261cb..93366af1a86 100644 --- a/lua/kickstart/plugins/neo-tree.lua +++ b/lua/kickstart/plugins/neo-tree.lua @@ -11,6 +11,7 @@ vim.pack.add { require('neo-tree').setup { filesystem = { + hijack_netrw_behavior = 'disabled', window = { mappings = { ['\\'] = 'close_window', From 50e16dafa9d0e64cf34b293d4f4bc1dd9893ba4b Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Sat, 1 Aug 2026 08:31:34 -0600 Subject: [PATCH 10/15] add python and rust lsp config --- init.lua | 28 ++++++++++++++++++---------- lua/custom/plugins/00-core.lua | 8 ++++++++ lua/custom/plugins/rust.lua | 26 ++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 lua/custom/plugins/rust.lua diff --git a/init.lua b/init.lua index 0b89d4d1df7..2834ef7ec40 100644 --- a/init.lua +++ b/init.lua @@ -746,15 +746,22 @@ do ---@type table local servers = { -- clangd = {}, - -- gopls = {}, - -- pyright = {}, - -- tsc = {}, -- - -- Some languages (like rust) have entire language plugins that can be useful: - -- https://github.com/mrcjkb/rustaceanvim - -- - -- But for many setups, the LSP (`rust_analyzer`) will work just fine - -- rust_analyzer = {}, + gopls = {}, +- pyright = {}, ++ ruff = {}, ++ basedpyright = { ++ settings = { ++ basedpyright = { ++ analysis = { ++ typeCheckingMode = 'standard', ++ autoImportCompletions = true, ++ useLibraryCodeForTypes = true, ++ }, ++ }, ++ }, ++ }, + rust_analyzer = {}, stylua = {}, -- Used to format Lua code @@ -841,6 +848,7 @@ do lua = true, python = true, go = true, + rust = true, javascript = true, typescript = true, typescriptreact = true, @@ -856,9 +864,9 @@ do }, -- You can also specify external formatters in here. formatters_by_ft = { - -- rust = { 'rustfmt' }, + rust = { 'rustfmt' }, -- Conform can also run multiple formatters sequentially - -- python = { "isort", "black" }, + python = { 'ruff_format' }, -- -- You can use 'stop_after_first' to run the first available formatter from the list go = { 'goimports' }, diff --git a/lua/custom/plugins/00-core.lua b/lua/custom/plugins/00-core.lua index 00829d321fa..03775dfc8b5 100644 --- a/lua/custom/plugins/00-core.lua +++ b/lua/custom/plugins/00-core.lua @@ -133,6 +133,14 @@ vim.keymap.set({ 'n', 'v' }, 'ss', 's', { desc = 'Substitute' }) -- end, -- }) +-- Auto-fix Ruff import sorting on save +vim.api.nvim_create_autocmd('BufWritePre', { + pattern = '*.py', + callback = function() + vim.lsp.buf.code_action({ context = { only = { 'source.organizeImports' } }, apply = true }) + end, +}) + -- ============================================================ -- Highlights -- ============================================================ diff --git a/lua/custom/plugins/rust.lua b/lua/custom/plugins/rust.lua new file mode 100644 index 00000000000..dbb551f1232 --- /dev/null +++ b/lua/custom/plugins/rust.lua @@ -0,0 +1,26 @@ +vim.lsp.config('rust_analyzer', { + settings = { + ['rust-analyzer'] = { + cargo = { buildScripts = { enable = true } }, + procMacro = { enable = true }, + }, + }, +}) +vim.lsp.enable('rust_analyzer') + +vim.api.nvim_create_autocmd('BufWritePre', { + pattern = '*.rs', + group = vim.api.nvim_create_augroup('rust', { clear = true }), + callback = function(args) + local client = vim.lsp.get_clients({ name = 'rust_analyzer', bufnr = args.buf })[1] + if not client then return end + + local params = vim.lsp.util.make_range_params(0, client.offset_encoding) + params.context = { only = { 'source.organizeImports' } } + + local result = client.request_sync('textDocument/codeAction', params, 1000) + if result and result.result and result.result[1] and result.result[1].edit then + vim.lsp.util.apply_workspace_edit(result.result[1].edit, client.offset_encoding) + end + end, +}) From 0f1b1b4bbf8e389af7827ecc2e9d925f708ec81d Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Fri, 28 Aug 2026 16:01:58 -0600 Subject: [PATCH 11/15] make inlay hints background transparent --- lua/custom/plugins/00-core.lua | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/lua/custom/plugins/00-core.lua b/lua/custom/plugins/00-core.lua index 03775dfc8b5..de112c58de4 100644 --- a/lua/custom/plugins/00-core.lua +++ b/lua/custom/plugins/00-core.lua @@ -165,5 +165,12 @@ require('tokyonight').setup { } vim.cmd.colorscheme 'tokyonight-storm' +-- Make native LSP inlay hints transparent without changing their text styling. +local ok, hl = pcall(vim.api.nvim_get_hl, 0, { name = 'LspInlayHint', link = false }) +if ok then + hl.bg = nil + vim.api.nvim_set_hl(0, 'LspInlayHint', hl) +end + -- NOTE: blink.cmp border overrides (menu = 'none', signature = 'none') -- are now set directly in init.lua to avoid double-setup issues. From dee0e4b6054463945622b92e006095a0dbf4bba5 Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Sun, 6 Sep 2026 14:18:39 -0600 Subject: [PATCH 12/15] Add inlay hints plugin --- lua/custom/plugins/inlay-hints.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 lua/custom/plugins/inlay-hints.lua diff --git a/lua/custom/plugins/inlay-hints.lua b/lua/custom/plugins/inlay-hints.lua new file mode 100644 index 00000000000..211f7bf5fbc --- /dev/null +++ b/lua/custom/plugins/inlay-hints.lua @@ -0,0 +1,17 @@ +-- Configure server-side inlay hints. + +vim.lsp.config('gopls', { + settings = { + gopls = { + hints = { + assignVariableTypes = true, + compositeLiteralFields = true, + compositeLiteralTypes = true, + constantValues = true, + functionTypeParameters = true, + parameterNames = true, + rangeVariableTypes = true, + }, + }, + }, +}) From 6653fe18e13e2724dd414b41b903e8dbedec2ffe Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Mon, 21 Sep 2026 09:55:06 -0600 Subject: [PATCH 13/15] fix fterm, lint and transparency --- init.lua | 14 ++++-- lua/custom/plugins/99.lua | 78 ++++++++++++++--------------- lua/custom/plugins/fterm.lua | 12 ++--- lua/custom/plugins/markdown.lua | 46 +++++++++++++++++ lua/custom/plugins/smear-cursor.lua | 56 ++++++++++----------- lua/kickstart/plugins/lint.lua | 2 +- qq | 0 7 files changed, 129 insertions(+), 79 deletions(-) create mode 100644 lua/custom/plugins/markdown.lua create mode 100644 qq diff --git a/init.lua b/init.lua index 2834ef7ec40..6066cb254c4 100644 --- a/init.lua +++ b/init.lua @@ -822,7 +822,8 @@ do -- You can press `g?` for help in this menu. local ensure_installed = vim.tbl_keys(servers or {}) vim.list_extend(ensure_installed, { - -- You can add other tools here that you want Mason to install + 'markdownlint-cli2', + 'prettier', }) require('mason-tool-installer').setup { ensure_installed = ensure_installed } @@ -846,7 +847,8 @@ do -- You can specify filetypes to autoformat on save here: local enabled_filetypes = { lua = true, - python = true, + markdown = true, + python = true, go = true, rust = true, javascript = true, @@ -865,7 +867,8 @@ do -- You can also specify external formatters in here. formatters_by_ft = { rust = { 'rustfmt' }, - -- Conform can also run multiple formatters sequentially + markdown = { 'prettier', 'markdownlint-cli2' }, + -- Conform can also run multiple formatters sequentially python = { 'ruff_format' }, -- -- You can use 'stop_after_first' to run the first available formatter from the list @@ -874,6 +877,11 @@ do typescriptreact = { 'prettierd' }, javascript = { 'prettierd' }, }, + formatters = { + prettier = { + prepend_args = { '--prose-wrap=always' }, + }, + }, } vim.keymap.set({ 'n', 'v' }, 'f', function() require('conform').format { async = true } end, { desc = '[F]ormat buffer' }) diff --git a/lua/custom/plugins/99.lua b/lua/custom/plugins/99.lua index e3538ba71e9..c9c5fd48722 100644 --- a/lua/custom/plugins/99.lua +++ b/lua/custom/plugins/99.lua @@ -1,39 +1,39 @@ --- ThePrimeagen/99: AI assistant integration - -local function gh(repo) - return 'https://github.com/' .. repo -end - -vim.pack.add { gh 'ThePrimeagen/99' } - -local _99 = require '99' -local cwd = vim.uv.cwd() -local basename = vim.fs.basename(cwd) - -_99.setup { - provider = _99.Providers.OpenCodeProvider, - model = 'opencode-go/qwen3.5-plus', - logger = { - level = _99.DEBUG, - path = '/tmp/' .. basename .. '.99.debug', - print_on_error = true, - }, - md_files = { - 'AGENT.md', - 'SKILL.md', - }, -} - -vim.keymap.set('n', '9s', function() - _99.search() -end, { desc = '[9]9 Search' }) - -vim.keymap.set('v', '9vd', function() - _99.set_model('opencode-go/qwen3.5-plus') - _99.visual() -end, { desc = '[9]9 Visual [d]efault (qwen3.5-plus)' }) - -vim.keymap.set('v', '9vf', function() - _99.set_model('opencode-go/mimo-v2-pro') - _99.visual() -end, { desc = '[9]9 Visual [f]ast (mimo-v2-pro)' }) +-- -- ThePrimeagen/99: AI assistant integration +-- +-- local function gh(repo) +-- return 'https://github.com/' .. repo +-- end +-- +-- vim.pack.add { gh 'ThePrimeagen/99' } +-- +-- local _99 = require '99' +-- local cwd = vim.uv.cwd() +-- local basename = vim.fs.basename(cwd) +-- +-- _99.setup { +-- provider = _99.Providers.OpenCodeProvider, +-- model = 'opencode-go/qwen3.5-plus', +-- logger = { +-- level = _99.DEBUG, +-- path = '/tmp/' .. basename .. '.99.debug', +-- print_on_error = true, +-- }, +-- md_files = { +-- 'AGENT.md', +-- 'SKILL.md', +-- }, +-- } +-- +-- vim.keymap.set('n', '9s', function() +-- _99.search() +-- end, { desc = '[9]9 Search' }) +-- +-- vim.keymap.set('v', '9vd', function() +-- _99.set_model('opencode-go/qwen3.5-plus') +-- _99.visual() +-- end, { desc = '[9]9 Visual [d]efault (qwen3.5-plus)' }) +-- +-- vim.keymap.set('v', '9vf', function() +-- _99.set_model('opencode-go/mimo-v2-pro') +-- _99.visual() +-- end, { desc = '[9]9 Visual [f]ast (mimo-v2-pro)' }) diff --git a/lua/custom/plugins/fterm.lua b/lua/custom/plugins/fterm.lua index 70a23b79ed2..f1de38e2d2b 100644 --- a/lua/custom/plugins/fterm.lua +++ b/lua/custom/plugins/fterm.lua @@ -1,8 +1,6 @@ -- FTerm.nvim: floating terminal -local function gh(repo) - return 'https://github.com/' .. repo -end +local function gh(repo) return 'https://github.com/' .. repo end vim.pack.add { gh 'numToStr/FTerm.nvim' } @@ -19,9 +17,7 @@ local custom_term = fterm:new { border = 'rounded', } -function _G.__fterm_custom_toggle() - custom_term:toggle() -end +function _G.__fterm_custom_toggle() custom_term:toggle() end -vim.keymap.set('n', '', 'lua __fterm_custom_toggle()', { desc = '[T]oggle [T]erminal' }) -vim.keymap.set('t', '', 'lua __fterm_custom_toggle()', { desc = '[T]oggle [T]erminal' }) +vim.keymap.set('n', '', 'lua __fterm_custom_toggle()', { desc = '[T]oggle [T]erminal' }) +vim.keymap.set('t', '', 'lua __fterm_custom_toggle()', { desc = '[T]oggle [T]erminal' }) diff --git a/lua/custom/plugins/markdown.lua b/lua/custom/plugins/markdown.lua new file mode 100644 index 00000000000..43db3871ed2 --- /dev/null +++ b/lua/custom/plugins/markdown.lua @@ -0,0 +1,46 @@ +-- Render Markdown with visual wrapping, without changing the file's line breaks. + +local function gh(repo) return 'https://github.com/' .. repo end + +vim.pack.add { gh 'MeanderingProgrammer/render-markdown.nvim' } + +require('render-markdown').setup { + preset = 'lazy', + file_types = { 'markdown' }, + code = { + sign = false, + width = 'block', + right_pad = 1, + }, + heading = { + sign = false, + icons = {}, + }, + overrides = { + buftype = { + nofile = { + code = { + disable_background = true, + highlight_border = false, + }, + }, + }, + }, +} + +vim.api.nvim_create_autocmd('FileType', { + pattern = 'markdown', + callback = function(args) + vim.opt_local.wrap = true + vim.opt_local.linebreak = true + vim.opt_local.breakindent = true + vim.opt_local.showbreak = ' ' + vim.opt_local.textwidth = 0 + vim.opt_local.wrapmargin = 0 + + vim.keymap.set('n', 'um', 'RenderMarkdown toggle', { + buffer = args.buf, + desc = 'Toggle Markdown rendering', + }) + end, +}) diff --git a/lua/custom/plugins/smear-cursor.lua b/lua/custom/plugins/smear-cursor.lua index 9089be7179f..11600b64d43 100644 --- a/lua/custom/plugins/smear-cursor.lua +++ b/lua/custom/plugins/smear-cursor.lua @@ -1,30 +1,30 @@ -- smear-cursor.nvim: animated cursor movement -local function gh(repo) return 'https://github.com/' .. repo end - -vim.pack.add { gh 'sphamba/smear-cursor.nvim' } - -require('smear_cursor').setup { - smear_between_buffers = true, - smear_between_neighbor_lines = true, - scroll_buffer_space = true, - legacy_computing_symbols_support = true, - smear_insert_mode = true, - - -- Transparent background: TokyoNight storm has no opaque bg, so the smear - -- rendering can leave a shadow. This fallback color eliminates it. - transparent_bg_fallback_color = '#24283b', - - -- Slightly snappier than defaults (matches your 50ms updatetime) - stiffness = 0.8, - trailing_stiffness = 0.6, - stiffness_insert_mode = 0.7, - trailing_stiffness_insert_mode = 0.7, - damping = 0.95, - damping_insert_mode = 0.95, - distance_stop_animating = 0.5, - - -- Prevent ghost cursor artifacts when using transparent backgrounds - hide_target_hack = true, - never_draw_over_target = true, -} +-- local function gh(repo) return 'https://github.com/' .. repo end +-- +-- vim.pack.add { gh 'sphamba/smear-cursor.nvim' } +-- +-- require('smear_cursor').setup { +-- smear_between_buffers = true, +-- smear_between_neighbor_lines = true, +-- scroll_buffer_space = true, +-- legacy_computing_symbols_support = true, +-- smear_insert_mode = true, +-- +-- -- Transparent background: TokyoNight storm has no opaque bg, so the smear +-- -- rendering can leave a shadow. This fallback color eliminates it. +-- transparent_bg_fallback_color = '#24283b', +-- +-- -- Slightly snappier than defaults (matches your 50ms updatetime) +-- stiffness = 0.8, +-- trailing_stiffness = 0.6, +-- stiffness_insert_mode = 0.7, +-- trailing_stiffness_insert_mode = 0.7, +-- damping = 0.95, +-- damping_insert_mode = 0.95, +-- distance_stop_animating = 0.5, +-- +-- -- Prevent ghost cursor artifacts when using transparent backgrounds +-- hide_target_hack = true, +-- never_draw_over_target = true, +-- } diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua index d63054452fd..9b960107e00 100644 --- a/lua/kickstart/plugins/lint.lua +++ b/lua/kickstart/plugins/lint.lua @@ -4,7 +4,7 @@ vim.pack.add { 'https://github.com/mfussenegger/nvim-lint' } local lint = require 'lint' lint.linters_by_ft = { - markdown = { 'markdownlint' }, -- Make sure to install `markdownlint` via mason / npm + markdown = { 'markdownlint-cli2' }, } -- To allow other plugins to add linters to require('lint').linters_by_ft, diff --git a/qq b/qq new file mode 100644 index 00000000000..e69de29bb2d From 8936674f01046d9fa82f4fe49e2de8a1264f2a6b Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Tue, 22 Sep 2026 19:26:13 -0600 Subject: [PATCH 14/15] fix nvim startup errors Strip leftover diff markers in init.lua (colorscheme, servers), drop missing requires for kickstart.plugins.gitsigns and custom.plugins.git, fix invalid fidget notification option, remove stray qq file. --- init.lua | 42 ++++++++++++++++++++---------------------- qq | 0 2 files changed, 20 insertions(+), 22 deletions(-) delete mode 100644 qq diff --git a/init.lua b/init.lua index 6066cb254c4..0b9951c077e 100644 --- a/init.lua +++ b/init.lua @@ -448,7 +448,7 @@ do -- Load the colorscheme here. -- Like many other themes, this one has different styles, and you could load -- any other, such as 'tokyonight-storm', 'tokyonight-moon', or 'tokyonight-day'. -+ vim.cmd.colorscheme 'tokyonight-storm' + vim.cmd.colorscheme 'tokyonight-storm' -- [[ mini.nvim ]] -- A collection of various small independent plugins/modules @@ -668,9 +668,7 @@ do -- Useful status updates for LSP. vim.pack.add { gh 'j-hui/fidget.nvim' } - require('fidget').setup { - notification = { enabled = false }, - } + require('fidget').setup {} -- This function gets run when an LSP attaches to a particular buffer. -- That is to say, every time a new file is opened that is associated with @@ -747,20 +745,19 @@ do local servers = { -- clangd = {}, -- - gopls = {}, -- pyright = {}, -+ ruff = {}, -+ basedpyright = { -+ settings = { -+ basedpyright = { -+ analysis = { -+ typeCheckingMode = 'standard', -+ autoImportCompletions = true, -+ useLibraryCodeForTypes = true, -+ }, -+ }, -+ }, -+ }, + gopls = {}, + ruff = {}, + basedpyright = { + settings = { + basedpyright = { + analysis = { + typeCheckingMode = 'standard', + autoImportCompletions = true, + useLibraryCodeForTypes = true, + }, + }, + }, + }, rust_analyzer = {}, stylua = {}, -- Used to format Lua code @@ -848,7 +845,7 @@ do local enabled_filetypes = { lua = true, markdown = true, - python = true, + python = true, go = true, rust = true, javascript = true, @@ -868,7 +865,7 @@ do formatters_by_ft = { rust = { 'rustfmt' }, markdown = { 'prettier', 'markdownlint-cli2' }, - -- Conform can also run multiple formatters sequentially + -- Conform can also run multiple formatters sequentially python = { 'ruff_format' }, -- -- You can use 'stop_after_first' to run the first available formatter from the list @@ -981,7 +978,8 @@ do require 'kickstart.plugins.lint' require 'kickstart.plugins.autopairs' require 'kickstart.plugins.neo-tree' - require 'kickstart.plugins.gitsigns' -- adds gitsigns recommended keymaps + -- NOTE: `kickstart.plugins.gitsigns` was removed upstream (merged into Section 4 above). + -- Gitsigns recommended keymaps are already configured in the `on_attach` in Section 4. -- NOTE: You can add your own plugins, configuration, etc. in `lua/custom/plugins/*.lua`. -- @@ -995,7 +993,7 @@ do -- If separate modules need a specific order, require them explicitly instead: -- require 'custom.plugins.colorscheme' -- require 'custom.plugins.ui' - require 'custom.plugins.git' + -- NOTE: `custom.plugins.git` does not exist (no lua/custom/plugins/git.lua), so it is disabled. end -- The line beneath this is called `modeline`. See `:help modeline` diff --git a/qq b/qq deleted file mode 100644 index e69de29bb2d..00000000000 From 494fb495820ad6d0358aaba5fe9e3ef1fc6ca00c Mon Sep 17 00:00:00 2001 From: ManoloEsS Date: Tue, 22 Sep 2026 19:39:32 -0600 Subject: [PATCH 15/15] latest changes --- init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 0b9951c077e..fcc56e26c31 100644 --- a/init.lua +++ b/init.lua @@ -984,7 +984,7 @@ do -- NOTE: You can add your own plugins, configuration, etc. in `lua/custom/plugins/*.lua`. -- -- For independent modules, uncomment the convenience loader: - -- require 'custom.plugins' + require 'custom.plugins' -- -- `custom.plugins` automatically loads files from that directory, but their -- order is unspecified. If plugins depend on each other, keep them in the same