Compare commits

..

10 Commits

Author SHA1 Message Date
Ori Perry
cfdc17be3a
Merge pull request #1982 from nathanzeng/jump-diagnostic
fix: deprecated diagnostic jumping config
2026-05-07 00:10:03 +03:00
Nathan Zeng
a5d4d12c8c fix: deprecated diagnostic jumping config 2026-05-07 00:03:18 +03:00
Ori Perry
174b5fa2b1
Merge pull request #2005 from nvim-lua/refactor/vim.pack
Refactor/vim.pack
2026-05-06 23:48:20 +03:00
orip
2fccee4349 Split the vim.pack.add call and move each part to the relevant sections 2026-05-05 01:25:21 +03:00
orip
2e8d5b17cb Split into sections 2026-05-05 01:24:17 +03:00
orip
a42ed30a09 Update the explanations and docs 2026-05-05 01:22:42 +03:00
orip
716d7465c0 Enable vim.loader for faster loading time 2026-05-05 01:18:15 +03:00
orip
c4605421e5 Migrate to vim.pack 2026-05-05 01:18:15 +03:00
orip
cd7adee3ce Refactor and update some of the comments 2026-05-05 01:17:59 +03:00
orip
4b065ad2f7 Fix mini.ai example 2026-04-22 17:59:57 +03:00
11 changed files with 1054 additions and 1082 deletions

4
.gitignore vendored
View File

@ -6,9 +6,9 @@ nvim
spell/ spell/
# In your personal fork, you likely want to comment this, since it's recommended to track # In your personal fork, you likely want to comment this, since it's recommended to track
# lazy-lock.json in version control - see https://lazy.folke.io/usage/lockfile # 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 # For the official `nvim-lua/kickstart.nvim` git repository, we leave it ignored to avoid unneeded
# merge conflicts. # merge conflicts.
lazy-lock.json nvim-pack-lock.json
.DS_Store .DS_Store

View File

@ -69,9 +69,9 @@ fork to your machine using one of the commands below, depending on your OS.
> Your fork's URL will be something like this: > Your fork's URL will be something like this:
> `https://github.com/<your_github_username>/kickstart.nvim.git` > `https://github.com/<your_github_username>/kickstart.nvim.git`
You likely want to remove `lazy-lock.json` from your fork's `.gitignore` file You likely want to remove `nvim-pack-lock.json` from your fork's `.gitignore`
too - it's ignored in the kickstart repo to make maintenance easier, but it's file too - it's ignored in the kickstart repo to make maintenance easier, but
[recommended to track it in version control](https://lazy.folke.io/usage/lockfile). it's recommended to track it in version control (see `:help vim.pack-lockfile`).
#### Clone kickstart.nvim #### Clone kickstart.nvim
@ -111,8 +111,10 @@ Start Neovim
nvim nvim
``` ```
That's it! Lazy will install all the plugins you have. Use `:Lazy` to view That's it! `vim.pack` will install all the plugins from your config. Use
the current plugin status. Hit `q` to close the window. `:lua vim.pack.update(nil, { offline = true })` to inspect plugin state and
`:lua vim.pack.update()` to fetch updates (`:write` applies updates, `:quit`
cancels them).
#### Read The Friendly Documentation #### Read The Friendly Documentation
@ -146,7 +148,8 @@ examples of adding popularly requested plugins.
`~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim `~/.local/share/nvim-kickstart`. You can apply this approach to any Neovim
distribution that you would like to try out. distribution that you would like to try out.
* What if I want to "uninstall" this configuration: * What if I want to "uninstall" this configuration:
* See [lazy.nvim uninstall](https://lazy.folke.io/usage#-uninstalling) information * Remove your config directory and local data directory (for example,
`~/.config/nvim` and `~/.local/share/nvim`).
* Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files? * Why is the kickstart `init.lua` a single file? Wouldn't it make sense to split it into multiple files?
* The main purpose of kickstart is to serve as a teaching tool and a reference * The main purpose of kickstart is to serve as a teaching tool and a reference
configuration that someone can easily use to `git clone` as a basis for their own. configuration that someone can easily use to `git clone` as a basis for their own.
@ -167,17 +170,36 @@ After installing all the dependencies continue with the [Install Kickstart](#ins
#### Windows Installation #### Windows Installation
<details><summary>Windows with Microsoft C++ Build Tools and CMake</summary> <details><summary>Windows with Microsoft C++ Build Tools and CMake</summary>
Installation may require installing build tools and updating the run command for `telescope-fzf-native` Kickstart's default config is make-only for `telescope-fzf-native.nvim`.
If `make` is unavailable, the plugin is skipped.
See `telescope-fzf-native` documentation for [more details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation) Recommended: install `make` (see the chocolatey section below).
This requires: If you want a CMake-only setup, customize `init.lua` in two places:
- Install CMake and the Microsoft C++ Build Tools on Windows 1. Include `telescope-fzf-native.nvim` when `cmake` is available:
```lua ```lua
{'nvim-telescope/telescope-fzf-native.nvim', build = 'cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release && cmake --install build --prefix build' } if vim.fn.executable 'make' == 1 or vim.fn.executable 'cmake' == 1 then
table.insert(plugins, gh 'nvim-telescope/telescope-fzf-native.nvim')
end
``` ```
2. In the `PackChanged` hook, use CMake when `make` is unavailable:
```lua
if name == 'telescope-fzf-native.nvim' then
if vim.fn.executable 'make' == 1 then
run_build(name, { 'make' }, ev.data.path)
elseif vim.fn.executable 'cmake' == 1 then
run_build(name, { 'cmake', '-S.', '-Bbuild', '-DCMAKE_BUILD_TYPE=Release' }, ev.data.path)
run_build(name, { 'cmake', '--build', 'build', '--config', 'Release', '--target', 'install' }, ev.data.path)
end
return
end
```
See `telescope-fzf-native` documentation for [build details](https://github.com/nvim-telescope/telescope-fzf-native.nvim#installation).
</details> </details>
<details><summary>Windows with gcc/make using chocolatey</summary> <details><summary>Windows with gcc/make using chocolatey</summary>
Alternatively, one can install gcc and make which don't require changing the config, Alternatively, one can install gcc and make which don't require changing the config,

823
init.lua

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,11 @@
-- --
-- See the kickstart.nvim README for more information -- See the kickstart.nvim README for more information
---@module 'lazy' -- Iterate over all Lua files in the plugins directory and load them
---@type LazySpec local plugins_dir = vim.fs.joinpath(vim.fn.stdpath 'config', 'lua', 'custom', 'plugins')
return {} for file_name, type in vim.fs.dir(plugins_dir) do
if type == 'file' and file_name:match '%.lua$' and file_name ~= 'init.lua' then
local module = file_name:gsub('%.lua$', '')
require('custom.plugins.' .. module)
end
end

View File

@ -12,7 +12,7 @@ local check_version = function()
return return
end end
if vim.version.ge(vim.version(), '0.11') then if vim.version.ge(vim.version(), '0.12') then
vim.health.ok(string.format("Neovim version is: '%s'", verstr)) vim.health.ok(string.format("Neovim version is: '%s'", verstr))
else else
vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr)) vim.health.error(string.format("Neovim out of date: '%s'. Upgrade to latest stable or nightly", verstr))

View File

@ -1,10 +1,5 @@
-- autopairs -- autopairs
-- https://github.com/windwp/nvim-autopairs -- https://github.com/windwp/nvim-autopairs
---@module 'lazy' vim.pack.add { 'https://github.com/windwp/nvim-autopairs' }
---@type LazySpec require('nvim-autopairs').setup {}
return {
'windwp/nvim-autopairs',
event = 'InsertEnter',
opts = {},
}

View File

@ -6,42 +6,29 @@
-- be extended to other languages as well. That's why it's called -- be extended to other languages as well. That's why it's called
-- kickstart.nvim and not kitchen-sink.nvim ;) -- kickstart.nvim and not kitchen-sink.nvim ;)
---@module 'lazy' vim.pack.add {
---@type LazySpec 'https://github.com/mfussenegger/nvim-dap',
return { 'https://github.com/rcarriga/nvim-dap-ui',
-- NOTE: Yes, you can install new plugins here! 'https://github.com/nvim-neotest/nvim-nio',
'mfussenegger/nvim-dap', 'https://github.com/mason-org/mason.nvim',
-- NOTE: And you can specify dependencies as well 'https://github.com/jay-babu/mason-nvim-dap.nvim',
dependencies = { 'https://github.com/leoluz/nvim-dap-go',
-- Creates a beautiful debugger UI }
'rcarriga/nvim-dap-ui',
-- Required dependency for nvim-dap-ui -- Basic debugging keymaps, feel free to change to your liking!
'nvim-neotest/nvim-nio', vim.keymap.set('n', '<F5>', function() require('dap').continue() end, { desc = 'Debug: Start/Continue' })
vim.keymap.set('n', '<F1>', function() require('dap').step_into() end, { desc = 'Debug: Step Into' })
vim.keymap.set('n', '<F2>', function() require('dap').step_over() end, { desc = 'Debug: Step Over' })
vim.keymap.set('n', '<F3>', function() require('dap').step_out() end, { desc = 'Debug: Step Out' })
vim.keymap.set('n', '<leader>b', function() require('dap').toggle_breakpoint() end, { desc = 'Debug: Toggle Breakpoint' })
vim.keymap.set('n', '<leader>B', function() require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') end, { desc = 'Debug: Set Breakpoint' })
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
vim.keymap.set('n', '<F7>', function() require('dapui').toggle() end, { desc = 'Debug: See last session result.' })
-- Installs the debug adapters for you local dap = require 'dap'
'mason-org/mason.nvim', local dapui = require 'dapui'
'jay-babu/mason-nvim-dap.nvim',
-- Add your own debuggers here require('mason-nvim-dap').setup {
'leoluz/nvim-dap-go',
},
keys = {
-- Basic debugging keymaps, feel free to change to your liking!
{ '<F5>', function() require('dap').continue() end, desc = 'Debug: Start/Continue' },
{ '<F1>', function() require('dap').step_into() end, desc = 'Debug: Step Into' },
{ '<F2>', function() require('dap').step_over() end, desc = 'Debug: Step Over' },
{ '<F3>', function() require('dap').step_out() end, desc = 'Debug: Step Out' },
{ '<leader>b', function() require('dap').toggle_breakpoint() end, desc = 'Debug: Toggle Breakpoint' },
{ '<leader>B', function() require('dap').set_breakpoint(vim.fn.input 'Breakpoint condition: ') end, desc = 'Debug: Set Breakpoint' },
-- Toggle to see last session result. Without this, you can't see session output in case of unhandled exception.
{ '<F7>', function() require('dapui').toggle() end, desc = 'Debug: See last session result.' },
},
config = function()
local dap = require 'dap'
local dapui = require 'dapui'
require('mason-nvim-dap').setup {
-- Makes a best effort to setup the various debuggers with -- Makes a best effort to setup the various debuggers with
-- reasonable debug configurations -- reasonable debug configurations
automatic_installation = true, automatic_installation = true,
@ -56,12 +43,12 @@ return {
-- Update this to ensure that you have the debuggers for the langs you want -- Update this to ensure that you have the debuggers for the langs you want
'delve', 'delve',
}, },
} }
-- Dap UI setup -- Dap UI setup
-- For more information, see |:help nvim-dap-ui| -- For more information, see |:help nvim-dap-ui|
---@diagnostic disable-next-line: missing-fields ---@diagnostic disable-next-line: missing-fields
dapui.setup { dapui.setup {
-- Set icons to characters that are more likely to work in every terminal. -- Set icons to characters that are more likely to work in every terminal.
-- Feel free to remove or use ones that you like more! :) -- Feel free to remove or use ones that you like more! :)
-- Don't feel like these are good choices. -- Don't feel like these are good choices.
@ -80,31 +67,29 @@ return {
disconnect = '', disconnect = '',
}, },
}, },
} }
-- Change breakpoint icons -- Change breakpoint icons
-- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' }) -- vim.api.nvim_set_hl(0, 'DapBreak', { fg = '#e51400' })
-- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' }) -- vim.api.nvim_set_hl(0, 'DapStop', { fg = '#ffcc00' })
-- local breakpoint_icons = vim.g.have_nerd_font -- local breakpoint_icons = vim.g.have_nerd_font
-- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' } -- and { Breakpoint = '', BreakpointCondition = '', BreakpointRejected = '', LogPoint = '', Stopped = '' }
-- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' } -- or { Breakpoint = '●', BreakpointCondition = '⊜', BreakpointRejected = '⊘', LogPoint = '◆', Stopped = '⭔' }
-- for type, icon in pairs(breakpoint_icons) do -- for type, icon in pairs(breakpoint_icons) do
-- local tp = 'Dap' .. type -- local tp = 'Dap' .. type
-- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak' -- local hl = (type == 'Stopped') and 'DapStop' or 'DapBreak'
-- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl }) -- vim.fn.sign_define(tp, { text = icon, texthl = hl, numhl = hl })
-- end -- end
dap.listeners.after.event_initialized['dapui_config'] = dapui.open dap.listeners.after.event_initialized['dapui_config'] = dapui.open
dap.listeners.before.event_terminated['dapui_config'] = dapui.close dap.listeners.before.event_terminated['dapui_config'] = dapui.close
dap.listeners.before.event_exited['dapui_config'] = dapui.close dap.listeners.before.event_exited['dapui_config'] = dapui.close
-- Install golang specific config -- Install golang specific config
require('dap-go').setup { require('dap-go').setup {
delve = { delve = {
-- On Windows delve must be run attached or it crashes. -- On Windows delve must be run attached or it crashes.
-- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring -- See https://github.com/leoluz/nvim-dap-go/blob/main/README.md#configuring
detached = vim.fn.has 'win32' == 0, detached = vim.fn.has 'win32' == 0,
}, },
}
end,
} }

View File

@ -2,14 +2,9 @@
-- NOTE: gitsigns is already included in init.lua but contains only the base -- NOTE: gitsigns is already included in init.lua but contains only the base
-- config. This will add also the recommended keymaps. -- config. This will add also the recommended keymaps.
---@module 'lazy' vim.pack.add { 'https://github.com/lewis6991/gitsigns.nvim' }
---@type LazySpec
return { require('gitsigns').setup {
'lewis6991/gitsigns.nvim',
---@module 'gitsigns'
---@type Gitsigns.Config
---@diagnostic disable-next-line: missing-fields
opts = {
on_attach = function(bufnr) on_attach = function(bufnr)
local gitsigns = require 'gitsigns' local gitsigns = require 'gitsigns'
@ -59,5 +54,4 @@ return {
-- Text object -- Text object
map({ 'o', 'x' }, 'ih', gitsigns.select_hunk) map({ 'o', 'x' }, 'ih', gitsigns.select_hunk)
end, end,
},
} }

View File

@ -1,13 +1,6 @@
-- Add indentation guides even on blank lines -- Add indentation guides even on blank lines
---@module 'lazy' -- Enable `lukas-reineke/indent-blankline.nvim`
---@type LazySpec -- See `:help ibl`
return { vim.pack.add { 'https://github.com/lukas-reineke/indent-blankline.nvim' }
'lukas-reineke/indent-blankline.nvim', require('ibl').setup {}
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help ibl`
main = 'ibl',
---@module 'ibl'
---@type ibl.config
opts = {},
}

View File

@ -1,52 +1,48 @@
-- Linting -- Linting
---@module 'lazy' vim.pack.add { 'https://github.com/mfussenegger/nvim-lint' }
---@type LazySpec
return { local lint = require 'lint'
'mfussenegger/nvim-lint', lint.linters_by_ft = {
event = { 'BufReadPre', 'BufNewFile' },
config = function()
local lint = require 'lint'
lint.linters_by_ft = {
markdown = { 'markdownlint' }, -- Make sure to install `markdownlint` via mason / npm markdown = { 'markdownlint' }, -- Make sure to install `markdownlint` via mason / npm
} }
-- To allow other plugins to add linters to require('lint').linters_by_ft, -- To allow other plugins to add linters to require('lint').linters_by_ft,
-- instead set linters_by_ft like this: -- instead set linters_by_ft like this:
-- lint.linters_by_ft = lint.linters_by_ft or {} -- lint.linters_by_ft = lint.linters_by_ft or {}
-- lint.linters_by_ft['markdown'] = { 'markdownlint' } -- lint.linters_by_ft['markdown'] = { 'markdownlint' }
-- --
-- However, note that this will enable a set of default linters, -- However, note that this will enable a set of default linters,
-- which will cause errors unless these tools are available: -- which will cause errors unless these tools are available:
-- { -- {
-- clojure = { "clj-kondo" }, -- clojure = { "clj-kondo" },
-- dockerfile = { "hadolint" }, -- dockerfile = { "hadolint" },
-- inko = { "inko" }, -- inko = { "inko" },
-- janet = { "janet" }, -- janet = { "janet" },
-- json = { "jsonlint" }, -- json = { "jsonlint" },
-- markdown = { "vale" }, -- markdown = { "vale" },
-- rst = { "vale" }, -- rst = { "vale" },
-- ruby = { "ruby" }, -- ruby = { "ruby" },
-- terraform = { "tflint" }, -- terraform = { "tflint" },
-- text = { "vale" } -- text = { "vale" }
-- } -- }
-- --
-- You can disable the default linters by setting their filetypes to nil: -- You can disable the default linters by setting their filetypes to nil:
-- lint.linters_by_ft['clojure'] = nil -- lint.linters_by_ft['clojure'] = nil
-- lint.linters_by_ft['dockerfile'] = nil -- lint.linters_by_ft['dockerfile'] = nil
-- lint.linters_by_ft['inko'] = nil -- lint.linters_by_ft['inko'] = nil
-- lint.linters_by_ft['janet'] = nil -- lint.linters_by_ft['janet'] = nil
-- lint.linters_by_ft['json'] = nil -- lint.linters_by_ft['json'] = nil
-- lint.linters_by_ft['markdown'] = nil -- lint.linters_by_ft['markdown'] = nil
-- lint.linters_by_ft['rst'] = nil -- lint.linters_by_ft['rst'] = nil
-- lint.linters_by_ft['ruby'] = nil -- lint.linters_by_ft['ruby'] = nil
-- lint.linters_by_ft['terraform'] = nil -- lint.linters_by_ft['terraform'] = nil
-- lint.linters_by_ft['text'] = nil -- lint.linters_by_ft['text'] = nil
-- Create autocommand which carries out the actual linting -- Create autocommand which carries out the actual linting
-- on the specified events. -- on the specified events.
local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true }) local lint_augroup = vim.api.nvim_create_augroup('lint', { clear = true })
vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, { vim.api.nvim_create_autocmd({ 'BufEnter', 'BufWritePost', 'InsertLeave' }, {
group = lint_augroup, group = lint_augroup,
callback = function() callback = function()
-- Only run the linter in buffers that you can modify in order to -- Only run the linter in buffers that you can modify in order to
@ -54,6 +50,4 @@ return {
-- describe the hovered symbol using Markdown. -- describe the hovered symbol using Markdown.
if vim.bo.modifiable then lint.try_lint() end if vim.bo.modifiable then lint.try_lint() end
end, end,
}) })
end,
}

View File

@ -1,23 +1,21 @@
-- Neo-tree is a Neovim plugin to browse the file system -- Neo-tree is a Neovim plugin to browse the file system
-- https://github.com/nvim-neo-tree/neo-tree.nvim -- https://github.com/nvim-neo-tree/neo-tree.nvim
---@module 'lazy' local plugins = {
---@type LazySpec { src = 'https://github.com/nvim-neo-tree/neo-tree.nvim', version = vim.version.range '*' },
return { 'https://github.com/nvim-lua/plenary.nvim',
'nvim-neo-tree/neo-tree.nvim', 'https://github.com/MunifTanjim/nui.nvim',
version = '*', }
dependencies = {
'nvim-lua/plenary.nvim', if vim.g.have_nerd_font then
'nvim-tree/nvim-web-devicons', -- not strictly required, but recommended table.insert(plugins, 'https://github.com/nvim-tree/nvim-web-devicons') -- not strictly required, but recommended
'MunifTanjim/nui.nvim', end
},
lazy = false, vim.pack.add(plugins)
keys = {
{ '\\', ':Neotree reveal<CR>', desc = 'NeoTree reveal', silent = true }, vim.keymap.set('n', '\\', '<Cmd>Neotree reveal<CR>', { desc = 'NeoTree reveal', silent = true })
},
---@module 'neo-tree' require('neo-tree').setup {
---@type neotree.Config
opts = {
filesystem = { filesystem = {
window = { window = {
mappings = { mappings = {
@ -25,5 +23,4 @@ return {
}, },
}, },
}, },
},
} }