From 217f4f052665ade5a89cf92bc3260fb94a13aa7a Mon Sep 17 00:00:00 2001 From: probalazs Date: Thu, 16 Apr 2026 19:05:41 +0200 Subject: [PATCH 01/10] Enable autopairs and neo-tree plugins, remove nvim-web-devicons Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index cacc5b7b1c3..60307b99beb 100644 --- a/init.lua +++ b/init.lua @@ -358,9 +358,6 @@ require('lazy').setup({ cond = function() return vim.fn.executable 'make' == 1 end, }, { 'nvim-telescope/telescope-ui-select.nvim' }, - - -- Useful for getting pretty icons, but requires a Nerd Font. - { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, }, config = function() -- Telescope is a fuzzy finder that comes with a lot of different things that @@ -932,8 +929,8 @@ require('lazy').setup({ -- 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.autopairs', + require 'kickstart.plugins.neo-tree', -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommended keymaps -- NOTE: The import below can automatically add your own plugins, configuration, etc from `lua/custom/plugins/*.lua` From 967d525c9d463057ffb7538c32f647e38b4a768d Mon Sep 17 00:00:00 2001 From: probalazs Date: Thu, 16 Apr 2026 19:46:07 +0200 Subject: [PATCH 02/10] Add TypeScript support, split keymaps, and custom plugins - Enable ts_ls LSP with prettier formatter and eslint_d linter - Add prettier and eslint_d auto-install via Mason - Enable lint plugin for JS/TS filetypes - Add split keymaps (sv, sh) - Add bufdelete, editorconfig, and toggleterm plugins - Enable custom plugins import Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 24 +++++++++++++++--------- lua/custom/plugins/init.lua | 19 ++++++++++++++++++- lua/kickstart/plugins/lint.lua | 4 ++++ 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/init.lua b/init.lua index 60307b99beb..50c65ba060e 100644 --- a/init.lua +++ b/init.lua @@ -212,6 +212,10 @@ vim.keymap.set('n', '', '', { desc = 'Move focus to the right win vim.keymap.set('n', '', '', { desc = 'Move focus to the lower window' }) vim.keymap.set('n', '', '', { desc = 'Move focus to the upper window' }) +vim.keymap.set('n', 'sv', 'vsp', { desc = '[S]plit [V]ertical' }) +vim.keymap.set('n', 'sh', 'sp', { desc = '[S]plit [H]orizontal' }) + + -- 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" }) @@ -606,7 +610,7 @@ require('lazy').setup({ -- https://github.com/pmizio/typescript-tools.nvim -- -- But for many setups, the LSP (`ts_ls`) will work just fine - -- ts_ls = {}, + ts_ls = {}, stylua = {}, -- Used to format Lua code @@ -649,7 +653,8 @@ require('lazy').setup({ -- 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 + 'prettier', + 'eslint_d', }) require('mason-tool-installer').setup { ensure_installed = ensure_installed } @@ -693,11 +698,12 @@ require('lazy').setup({ end, formatters_by_ft = { lua = { 'stylua' }, - -- Conform can also run multiple formatters sequentially - -- 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 }, + javascript = { 'prettier', stop_after_first = true }, + typescript = { 'prettier', stop_after_first = true }, + javascriptreact = { 'prettier', stop_after_first = true }, + typescriptreact = { 'prettier', stop_after_first = true }, + json = { 'prettier', stop_after_first = true }, + css = { 'prettier', stop_after_first = true }, }, }, }, @@ -928,7 +934,7 @@ require('lazy').setup({ -- -- require 'kickstart.plugins.debug', -- require 'kickstart.plugins.indent_line', - -- require 'kickstart.plugins.lint', + require 'kickstart.plugins.lint', require 'kickstart.plugins.autopairs', require 'kickstart.plugins.neo-tree', -- require 'kickstart.plugins.gitsigns', -- adds gitsigns recommended keymaps @@ -937,7 +943,7 @@ require('lazy').setup({ -- This is the easiest way to modularize your config. -- -- Uncomment the following line and add your plugins to `lua/custom/plugins/*.lua` to get going. - -- { import = 'custom.plugins' }, + { import = 'custom.plugins' }, -- -- For additional information with loading, sourcing and examples see `:help lazy.nvim-🔌-plugin-spec` -- Or use telescope! diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index b3ddcfdd3aa..5319ba5f66b 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -5,4 +5,21 @@ ---@module 'lazy' ---@type LazySpec -return {} +return { + { + 'famiu/bufdelete.nvim', + keys = { + { 'bd', 'Bdelete', desc = '[B]uffer [D]elete' }, + }, + }, + { 'editorconfig/editorconfig-vim' }, + { + 'akinsho/toggleterm.nvim', + version = '*', + opts = { + open_mapping = [[]], + direction = 'horizontal', + size = 15, + }, + }, +} diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua index 556f3178811..14d9780287d 100644 --- a/lua/kickstart/plugins/lint.lua +++ b/lua/kickstart/plugins/lint.lua @@ -9,6 +9,10 @@ return { local lint = require 'lint' lint.linters_by_ft = { markdown = { 'markdownlint' }, -- Make sure to install `markdownlint` via mason / npm + javascript = { 'eslint_d' }, + typescript = { 'eslint_d' }, + javascriptreact = { 'eslint_d' }, + typescriptreact = { 'eslint_d' }, } -- To allow other plugins to add linters to require('lint').linters_by_ft, From 033e4b16006c147d8a59de79b3b57ce1cecfb727 Mon Sep 17 00:00:00 2001 From: probalazs Date: Sat, 18 Apr 2026 14:36:23 +0200 Subject: [PATCH 03/10] Configure Neovide, completion, and terminal direction - Disable Neovide animations (cursor, scroll, position) - Switch blink.cmp preset to super-tab for tab-based completion - Change toggleterm direction to vertical with 80 column width Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 10 +++++++++- lua/custom/plugins/init.lua | 4 ++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/init.lua b/init.lua index dec3d8e87cc..b0df136931b 100644 --- a/init.lua +++ b/init.lua @@ -93,6 +93,14 @@ vim.g.maplocalleader = ' ' -- Set to true if you have a Nerd Font installed and selected in the terminal vim.g.have_nerd_font = false +-- Neovide configuration +if vim.g.neovide then + vim.g.neovide_cursor_animation_length = 0 + vim.g.neovide_cursor_trail_size = 0 + vim.g.neovide_scroll_animation_length = 0 + vim.g.neovide_position_animation_length = 0 +end + -- [[ Setting options ]] -- See `:help vim.o` -- NOTE: You can change these options as you wish! @@ -763,7 +771,7 @@ require('lazy').setup({ -- : Toggle signature help -- -- See :h blink-cmp-config-keymap for defining your own keymap - preset = 'default', + preset = 'super-tab', -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index 5319ba5f66b..2c1f50f142a 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -18,8 +18,8 @@ return { version = '*', opts = { open_mapping = [[]], - direction = 'horizontal', - size = 15, + direction = 'vertical', + size = 80, }, }, } From 1e3180f5db53023fa2d427b08d4bae1508e67d49 Mon Sep 17 00:00:00 2001 From: probalazs Date: Sat, 18 Apr 2026 15:03:46 +0200 Subject: [PATCH 04/10] Add flash.nvim, vim-visual-multi, and buffer completion source - Add flash.nvim for fast screen navigation (s/S keymaps) - Add vim-visual-multi for multiple cursor support - Add buffer words as a blink.cmp completion source Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 2 +- lua/custom/plugins/init.lua | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index b0df136931b..021fdf68d6e 100644 --- a/init.lua +++ b/init.lua @@ -790,7 +790,7 @@ require('lazy').setup({ }, sources = { - default = { 'lsp', 'path', 'snippets' }, + default = { 'lsp', 'path', 'snippets', 'buffer' }, }, snippets = { preset = 'luasnip' }, diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index 2c1f50f142a..7993a34fd16 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -13,6 +13,18 @@ return { }, }, { 'editorconfig/editorconfig-vim' }, + { + 'folke/flash.nvim', + event = 'VeryLazy', + keys = { + { 's', function() require('flash').jump() end, mode = { 'n', 'x', 'o' }, desc = 'Flash jump' }, + { 'S', function() require('flash').treesitter() end, mode = { 'n', 'x', 'o' }, desc = 'Flash treesitter' }, + }, + }, + { + 'mg979/vim-visual-multi', + event = 'VeryLazy', + }, { 'akinsho/toggleterm.nvim', version = '*', From 5fd790130b317b99b40ccbf2be08e56ac917d479 Mon Sep 17 00:00:00 2001 From: probalazs Date: Sat, 18 Apr 2026 15:26:11 +0200 Subject: [PATCH 05/10] Configure Telescope with buffer delete and file ignore patterns - Add Ctrl+d to delete buffers from the Telescope picker - Ignore node_modules, lock files, dist, build, and cache dirs in search Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/init.lua b/init.lua index 021fdf68d6e..48b3dabbc1a 100644 --- a/init.lua +++ b/init.lua @@ -394,15 +394,23 @@ require('lazy').setup({ -- [[ Configure Telescope ]] -- See `:help telescope` and `:help telescope.setup()` require('telescope').setup { - -- You can put your default mappings / updates / etc. in here - -- All the info you're looking for is in `:help telescope.setup()` - -- - -- defaults = { - -- mappings = { - -- i = { [''] = 'to_fuzzy_refine' }, - -- }, - -- }, - -- pickers = {} + defaults = { + mappings = { + i = { [''] = require('telescope.actions').delete_buffer }, + n = { [''] = require('telescope.actions').delete_buffer }, + }, + file_ignore_patterns = { + 'node_modules', + 'package%-lock%.json', + 'yarn%.lock', + 'pnpm%-lock%.yaml', + '%.git/', + 'dist/', + 'build/', + '%.next/', + '%.cache/', + }, + }, extensions = { ['ui-select'] = { require('telescope.themes').get_dropdown() }, }, From bc020fba1ac260f8cc6d0230f8b8ea75dd20b686 Mon Sep 17 00:00:00 2001 From: probalazs Date: Sat, 18 Apr 2026 19:09:26 +0200 Subject: [PATCH 06/10] Add llama.vim, LlamaStart/Stop commands, and fix completion preset - Add llama.vim plugin with optimized FIM context settings - Add LlamaStart/LlamaStop commands for managing llama-server - Auto-stop llama-server on Neovim exit - Switch blink.cmp back to default preset (Ctrl+y) for Tab compatibility Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 32 +++++++++++++++++++++++++++++++- lua/custom/plugins/init.lua | 11 +++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 48b3dabbc1a..0e69b7dd6c3 100644 --- a/init.lua +++ b/init.lua @@ -223,6 +223,36 @@ vim.keymap.set('n', '', '', { desc = 'Move focus to the upper win vim.keymap.set('n', 'sv', 'vsp', { desc = '[S]plit [V]ertical' }) vim.keymap.set('n', 'sh', 'sp', { desc = '[S]plit [H]orizontal' }) +local llama_job_id = nil + +vim.api.nvim_create_user_command('LlamaStart', function() + if llama_job_id then + vim.notify('llama-server is already running', vim.log.levels.WARN) + return + end + llama_job_id = vim.fn.jobstart('llama-server --fim-qwen-3b-default -c 16384', { detach = true }) + vim.notify('llama-server started', vim.log.levels.INFO) +end, { desc = 'Start llama-server' }) + +vim.api.nvim_create_user_command('LlamaStop', function() + if not llama_job_id then + vim.notify('llama-server is not running', vim.log.levels.WARN) + return + end + vim.fn.jobstop(llama_job_id) + llama_job_id = nil + vim.notify('llama-server stopped', vim.log.levels.INFO) +end, { desc = 'Stop llama-server' }) + +vim.api.nvim_create_autocmd('VimLeavePre', { + callback = function() + if llama_job_id then + vim.fn.jobstop(llama_job_id) + llama_job_id = nil + end + end, +}) + -- 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" }) @@ -779,7 +809,7 @@ require('lazy').setup({ -- : Toggle signature help -- -- See :h blink-cmp-config-keymap for defining your own keymap - preset = 'super-tab', + preset = 'default', -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see: -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index 7993a34fd16..00beadee443 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -13,6 +13,17 @@ return { }, }, { 'editorconfig/editorconfig-vim' }, + { + 'ggml-org/llama.vim', + init = function() + vim.g.llama_config = { + n_predict = 256, -- longer suggestions + ring_n_chunks = 64, -- more project context chunks + ring_chunk_size = 64, -- smaller chunks for speed + ring_scope = 2048, -- wider scope around cursor + } + end, + }, { 'folke/flash.nvim', event = 'VeryLazy', From d7b0ef21e4bc0b7923f136829a679f78bdeb3243 Mon Sep 17 00:00:00 2001 From: probalazs Date: Sat, 18 Apr 2026 19:18:02 +0200 Subject: [PATCH 07/10] Add LlamaToggle command, hide completion info, and update README - Add :LlamaToggle to enable/disable llama.vim completions without stopping server - Disable inline timing/info display in llama.vim (show_info = 0) - Add llama.cpp installation instructions to README Co-Authored-By: Claude Sonnet 4.6 --- README.md | 5 +++++ init.lua | 4 ++++ lua/custom/plugins/init.lua | 1 + 3 files changed, 10 insertions(+) diff --git a/README.md b/README.md index 093e42a6dd9..24a70f5be70 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,11 @@ External Requirements: - If you want to write Typescript, you need `npm` - If you want to write Golang, you will need `go` - etc. +- [llama.cpp](https://github.com/ggml-org/llama.cpp) (optional, for local AI code completion via llama.vim) + - macOS: `brew install llama.cpp` + - Other platforms: see [llama.cpp installation](https://github.com/ggml-org/llama.cpp#installation) + - Start the server with: `:LlamaStart` inside Neovim (uses `qwen2.5` FIM model by default) + - Stop the server with: `:LlamaStop` (also stops automatically when Neovim exits) > [!NOTE] > See [Install Recipes](#Install-Recipes) for additional Windows and Linux specific notes diff --git a/init.lua b/init.lua index 0e69b7dd6c3..74ec4b84709 100644 --- a/init.lua +++ b/init.lua @@ -225,6 +225,10 @@ vim.keymap.set('n', 'sh', 'sp', { desc = '[S]plit [H]orizontal' local llama_job_id = nil +vim.api.nvim_create_user_command('LlamaToggle', function() + vim.cmd 'call llama#toggle()' +end, { desc = 'Toggle llama.vim completion' }) + vim.api.nvim_create_user_command('LlamaStart', function() if llama_job_id then vim.notify('llama-server is already running', vim.log.levels.WARN) diff --git a/lua/custom/plugins/init.lua b/lua/custom/plugins/init.lua index 00beadee443..a3296aae928 100644 --- a/lua/custom/plugins/init.lua +++ b/lua/custom/plugins/init.lua @@ -21,6 +21,7 @@ return { ring_n_chunks = 64, -- more project context chunks ring_chunk_size = 64, -- smaller chunks for speed ring_scope = 2048, -- wider scope around cursor + show_info = 0, -- disable inline timing/info display } end, }, From 4ce5fcb9c7d1d3dd75e8464ee0d24a5ce5308647 Mon Sep 17 00:00:00 2001 From: probalazs Date: Mon, 20 Apr 2026 13:08:51 +0200 Subject: [PATCH 08/10] Speed up Telescope file search with fd and rg optimizations Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/init.lua b/init.lua index 74ec4b84709..ad00dada839 100644 --- a/init.lua +++ b/init.lua @@ -433,6 +433,17 @@ require('lazy').setup({ i = { [''] = require('telescope.actions').delete_buffer }, n = { [''] = require('telescope.actions').delete_buffer }, }, + vimgrep_arguments = { + 'rg', + '--color=never', + '--no-heading', + '--with-filename', + '--line-number', + '--column', + '--smart-case', + '--hidden', + '--glob=!.git/', + }, file_ignore_patterns = { 'node_modules', 'package%-lock%.json', @@ -458,7 +469,9 @@ require('lazy').setup({ local builtin = require 'telescope.builtin' vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) - vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) + vim.keymap.set('n', 'sf', function() + builtin.find_files { find_command = { 'fd', '--type', 'f', '--hidden', '--exclude', '.git' } } + end, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) vim.keymap.set({ 'n', 'v' }, 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) vim.keymap.set('n', 'sg', builtin.live_grep, { desc = '[S]earch by [G]rep' }) From 3fa066dbc0a09905f7980dfcf9d42b9b23b59998 Mon Sep 17 00:00:00 2001 From: probalazs Date: Mon, 20 Apr 2026 14:36:20 +0200 Subject: [PATCH 09/10] Skip linters that are not installed on the system Co-Authored-By: Claude Sonnet 4.6 --- lua/kickstart/plugins/lint.lua | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua index 14d9780287d..91c5c987e69 100644 --- a/lua/kickstart/plugins/lint.lua +++ b/lua/kickstart/plugins/lint.lua @@ -56,7 +56,11 @@ return { -- Only run the linter in buffers that you can modify in order to -- avoid superfluous noise, notably within the handy LSP pop-ups that -- describe the hovered symbol using Markdown. - if vim.bo.modifiable then lint.try_lint() end + if vim.bo.modifiable then + local linters = lint.linters_by_ft[vim.bo.filetype] or {} + local available = vim.tbl_filter(function(l) return vim.fn.executable(lint.linters[l] and lint.linters[l].cmd or l) == 1 end, linters) + if #available > 0 then lint.try_lint(available) end + end end, }) end, From dd2537cd304a942f306bcac0fbec7cdb14adb4e8 Mon Sep 17 00:00:00 2001 From: probalazs Date: Mon, 20 Apr 2026 17:00:41 +0200 Subject: [PATCH 10/10] =?UTF-8?q?Switch=20to=20Ros=C3=A9=20Pine=20Moon=20t?= =?UTF-8?q?heme,=20add=20autosave=20on=20InsertLeave,=20fix=20lint=20execu?= =?UTF-8?q?table=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- init.lua | 26 +++++++++++++------------- lua/kickstart/plugins/lint.lua | 6 +++++- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/init.lua b/init.lua index ad00dada839..55cf1391953 100644 --- a/init.lua +++ b/init.lua @@ -248,6 +248,14 @@ vim.api.nvim_create_user_command('LlamaStop', function() vim.notify('llama-server stopped', vim.log.levels.INFO) end, { desc = 'Stop llama-server' }) +vim.api.nvim_create_autocmd('InsertLeave', { + callback = function() + if vim.bo.modified and vim.bo.buftype == '' and vim.fn.expand '%' ~= '' then + vim.cmd 'silent! write' + end + end, +}) + vim.api.nvim_create_autocmd('VimLeavePre', { callback = function() if llama_job_id then @@ -869,20 +877,12 @@ require('lazy').setup({ -- change the command in the config to whatever the name of that colorscheme is. -- -- If you want to see what colorschemes are already installed, you can use `:Telescope colorscheme`. - 'folke/tokyonight.nvim', - priority = 1000, -- Make sure to load this before all the other start plugins. + 'rose-pine/neovim', + name = 'rose-pine', + priority = 1000, config = function() - ---@diagnostic disable-next-line: missing-fields - require('tokyonight').setup { - styles = { - 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-night' + require('rose-pine').setup { variant = 'moon' } + vim.cmd.colorscheme 'rose-pine' end, }, diff --git a/lua/kickstart/plugins/lint.lua b/lua/kickstart/plugins/lint.lua index 91c5c987e69..1a398424404 100644 --- a/lua/kickstart/plugins/lint.lua +++ b/lua/kickstart/plugins/lint.lua @@ -58,7 +58,11 @@ return { -- describe the hovered symbol using Markdown. if vim.bo.modifiable then local linters = lint.linters_by_ft[vim.bo.filetype] or {} - local available = vim.tbl_filter(function(l) return vim.fn.executable(lint.linters[l] and lint.linters[l].cmd or l) == 1 end, linters) + local available = vim.tbl_filter(function(l) + local linter = lint.linters[l] + local cmd = type(linter) == 'table' and linter.cmd or l + return type(cmd) == 'string' and vim.fn.executable(cmd) == 1 + end, linters) if #available > 0 then lint.try_lint(available) end end end,