mirror of
https://github.com/LazyVim/LazyVim.git
synced 2025-06-21 16:39:06 +02:00
🤖 I have created a release *beep* *boop* --- ## [13.0.0](https://github.com/LazyVim/LazyVim/compare/v12.44.1...v13.0.0) (2024-11-08) ### ⚠ BREAKING CHANGES * **core:** move a bunch of LazyVim features to snacks.nvim ([#4706](https://github.com/LazyVim/LazyVim/issues/4706)) ### Features * **core:** move a bunch of LazyVim features to snacks.nvim ([#4706](https://github.com/LazyVim/LazyVim/issues/4706)) ([2f46974
](2f4697443c
)) * **elixir:** add support for livebook files (`*.livemd`) ([#4184](https://github.com/LazyVim/LazyVim/issues/4184)) ([2fcd4cd
](2fcd4cdc5f
)) * **eslint:** add option to disable eslint auto format ([#4225](https://github.com/LazyVim/LazyVim/issues/4225)) ([2d2e425
](2d2e425d25
)) * **extras.nushell:** update to upstream treesitter ([#4715](https://github.com/LazyVim/LazyVim/issues/4715)) ([37cc039
](37cc03948d
)) * **extras:** lang/zig ([#4437](https://github.com/LazyVim/LazyVim/issues/4437)) ([4379faf
](4379fafc7b
)) * **extras:** rego language support ([#4297](https://github.com/LazyVim/LazyVim/issues/4297)) ([cf86484
](cf86484797
)) * **keymaps:** only add lazygit keymaps when available. Closes [#4643](https://github.com/LazyVim/LazyVim/issues/4643). Closes [#4247](https://github.com/LazyVim/LazyVim/issues/4247) ([aa53cd4
](aa53cd47c4
)) * **lang.angular:** configure `prettier` as formatter for `angular` templates ([#4345](https://github.com/LazyVim/LazyVim/issues/4345)) ([2d6687c
](2d6687c646
)) * **scala:** add key for worksheet hover ([#3853](https://github.com/LazyVim/LazyVim/issues/3853)) ([859646f
](859646f628
)) * **toggle:** add illuminate toggle for which-key ([#4708](https://github.com/LazyVim/LazyVim/issues/4708)) ([67ba582
](67ba58215b
)) ### Bug Fixes * **blink:** remove `draw="reversed"` for now till new release ([b841a1d
](b841a1dfc3
)) * **copilot-chat:** setup cmp conditionally ([#4716](https://github.com/LazyVim/LazyVim/issues/4716)) ([a86c252
](a86c25286b
)) * **dap:** use dap's splitstr when running with args. Closes [#4387](https://github.com/LazyVim/LazyVim/issues/4387) ([776994a
](776994a207
)) * **dial:** follow comment explanation for integers ([#4658](https://github.com/LazyVim/LazyVim/issues/4658)) ([c879b39
](c879b397c7
)) * **extras:** make kulala keys only for http files ([#4574](https://github.com/LazyVim/LazyVim/issues/4574)) ([b0ced33
](b0ced339a8
)) * **extras:** use the correct naming when setting up eruby formatter ([#4625](https://github.com/LazyVim/LazyVim/issues/4625)) ([8534af4
](8534af4a79
)) * **lang/r:** make keymaps in which-key menu available in visual mode ([#4565](https://github.com/LazyVim/LazyVim/issues/4565)) ([ee2ec7e
](ee2ec7e474
)) * **lang/ruby:** do not enable Rubocop as LSP if Solargraph is used ([#4566](https://github.com/LazyVim/LazyVim/issues/4566)) ([fd361d0
](fd361d07a2
)) * **lsp:** wrap hover and signature_help ([7616816
](76168166e5
)) * **lualine:** apply highlight groups correctly to truncated pretty_paths ([#4379](https://github.com/LazyVim/LazyVim/issues/4379)) ([1d4157e
](1d4157e681
)) * **lualine:** make sure path is in root before substituting ([67b216c
](67b216c973
)) * **navic:** use the same background color as lualine section_c ([#4231](https://github.com/LazyVim/LazyVim/issues/4231)) ([64b0f0b
](64b0f0b71d
)) * **neotest:** disambiguous key map descriptions ([#4374](https://github.com/LazyVim/LazyVim/issues/4374)) ([dfde914
](dfde9148ef
)) * **options:** disable default ruler ([#4731](https://github.com/LazyVim/LazyVim/issues/4731)) ([da3058a
](da3058a72d
)) * **options:** removed deprecated options ([1e975be
](1e975be7a5
)) * **prettier:** keep existing formatters_by_ft ([#4719](https://github.com/LazyVim/LazyVim/issues/4719)) ([4ff3606
](4ff36062dd
)) * **project.nvim:** correctly delete projects ([#4314](https://github.com/LazyVim/LazyVim/issues/4314)) ([c097355
](c09735594a
)) * **snacks:** dont add `snacks_notif` to close_with_q ([e6f612f
](e6f612f1cc
)) * **snippet:** don't set navigation mappings in nightly ([#4375](https://github.com/LazyVim/LazyVim/issues/4375)) ([1552791
](15527910c3
)) * **telescope:** buffers to start at final item ([#4189](https://github.com/LazyVim/LazyVim/issues/4189)) ([f78bc3b
](f78bc3b858
)) * **telescope:** check for gmake if needed ([0bc09d8
](0bc09d8206
)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
314 lines
8.2 KiB
Lua
314 lines
8.2 KiB
Lua
_G.LazyVim = require("lazyvim.util")
|
|
|
|
---@class LazyVimConfig: LazyVimOptions
|
|
local M = {}
|
|
|
|
M.version = "13.0.0" -- x-release-please-version
|
|
LazyVim.config = M
|
|
|
|
---@class LazyVimOptions
|
|
local defaults = {
|
|
-- colorscheme can be a string like `catppuccin` or a function that will load the colorscheme
|
|
---@type string|fun()
|
|
colorscheme = function()
|
|
require("tokyonight").load()
|
|
end,
|
|
-- load the default settings
|
|
defaults = {
|
|
autocmds = true, -- lazyvim.config.autocmds
|
|
keymaps = true, -- lazyvim.config.keymaps
|
|
-- lazyvim.config.options can't be configured here since that's loaded before lazyvim setup
|
|
-- if you want to disable loading options, add `package.loaded["lazyvim.config.options"] = true` to the top of your init.lua
|
|
},
|
|
news = {
|
|
-- When enabled, NEWS.md will be shown when changed.
|
|
-- This only contains big new features and breaking changes.
|
|
lazyvim = true,
|
|
-- Same but for Neovim's news.txt
|
|
neovim = false,
|
|
},
|
|
-- icons used by other plugins
|
|
-- stylua: ignore
|
|
icons = {
|
|
misc = {
|
|
dots = "",
|
|
},
|
|
ft = {
|
|
octo = "",
|
|
},
|
|
dap = {
|
|
Stopped = { " ", "DiagnosticWarn", "DapStoppedLine" },
|
|
Breakpoint = " ",
|
|
BreakpointCondition = " ",
|
|
BreakpointRejected = { " ", "DiagnosticError" },
|
|
LogPoint = ".>",
|
|
},
|
|
diagnostics = {
|
|
Error = " ",
|
|
Warn = " ",
|
|
Hint = " ",
|
|
Info = " ",
|
|
},
|
|
git = {
|
|
added = " ",
|
|
modified = " ",
|
|
removed = " ",
|
|
},
|
|
kinds = {
|
|
Array = " ",
|
|
Boolean = " ",
|
|
Class = " ",
|
|
Codeium = " ",
|
|
Color = " ",
|
|
Control = " ",
|
|
Collapsed = " ",
|
|
Constant = " ",
|
|
Constructor = " ",
|
|
Copilot = " ",
|
|
Enum = " ",
|
|
EnumMember = " ",
|
|
Event = " ",
|
|
Field = " ",
|
|
File = " ",
|
|
Folder = " ",
|
|
Function = " ",
|
|
Interface = " ",
|
|
Key = " ",
|
|
Keyword = " ",
|
|
Method = " ",
|
|
Module = " ",
|
|
Namespace = " ",
|
|
Null = " ",
|
|
Number = " ",
|
|
Object = " ",
|
|
Operator = " ",
|
|
Package = " ",
|
|
Property = " ",
|
|
Reference = " ",
|
|
Snippet = " ",
|
|
String = " ",
|
|
Struct = " ",
|
|
TabNine = " ",
|
|
Text = " ",
|
|
TypeParameter = " ",
|
|
Unit = " ",
|
|
Value = " ",
|
|
Variable = " ",
|
|
},
|
|
},
|
|
---@type table<string, string[]|boolean>?
|
|
kind_filter = {
|
|
default = {
|
|
"Class",
|
|
"Constructor",
|
|
"Enum",
|
|
"Field",
|
|
"Function",
|
|
"Interface",
|
|
"Method",
|
|
"Module",
|
|
"Namespace",
|
|
"Package",
|
|
"Property",
|
|
"Struct",
|
|
"Trait",
|
|
},
|
|
markdown = false,
|
|
help = false,
|
|
-- you can specify a different filter for each filetype
|
|
lua = {
|
|
"Class",
|
|
"Constructor",
|
|
"Enum",
|
|
"Field",
|
|
"Function",
|
|
"Interface",
|
|
"Method",
|
|
"Module",
|
|
"Namespace",
|
|
-- "Package", -- remove package since luals uses it for control flow structures
|
|
"Property",
|
|
"Struct",
|
|
"Trait",
|
|
},
|
|
},
|
|
}
|
|
|
|
M.json = {
|
|
version = 6,
|
|
path = vim.g.lazyvim_json or vim.fn.stdpath("config") .. "/lazyvim.json",
|
|
data = {
|
|
version = nil, ---@type string?
|
|
news = {}, ---@type table<string, string>
|
|
extras = {}, ---@type string[]
|
|
},
|
|
}
|
|
|
|
function M.json.load()
|
|
local f = io.open(M.json.path, "r")
|
|
if f then
|
|
local data = f:read("*a")
|
|
f:close()
|
|
local ok, json = pcall(vim.json.decode, data, { luanil = { object = true, array = true } })
|
|
if ok then
|
|
M.json.data = vim.tbl_deep_extend("force", M.json.data, json or {})
|
|
if M.json.data.version ~= M.json.version then
|
|
LazyVim.json.migrate()
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
---@type LazyVimOptions
|
|
local options
|
|
local lazy_clipboard
|
|
|
|
---@param opts? LazyVimOptions
|
|
function M.setup(opts)
|
|
options = vim.tbl_deep_extend("force", defaults, opts or {}) or {}
|
|
|
|
-- autocmds can be loaded lazily when not opening a file
|
|
local lazy_autocmds = vim.fn.argc(-1) == 0
|
|
if not lazy_autocmds then
|
|
M.load("autocmds")
|
|
end
|
|
|
|
local group = vim.api.nvim_create_augroup("LazyVim", { clear = true })
|
|
vim.api.nvim_create_autocmd("User", {
|
|
group = group,
|
|
pattern = "VeryLazy",
|
|
callback = function()
|
|
if lazy_autocmds then
|
|
M.load("autocmds")
|
|
end
|
|
M.load("keymaps")
|
|
if lazy_clipboard ~= nil then
|
|
vim.opt.clipboard = lazy_clipboard
|
|
end
|
|
|
|
LazyVim.format.setup()
|
|
LazyVim.news.setup()
|
|
LazyVim.root.setup()
|
|
|
|
vim.api.nvim_create_user_command("LazyExtras", function()
|
|
LazyVim.extras.show()
|
|
end, { desc = "Manage LazyVim extras" })
|
|
|
|
vim.api.nvim_create_user_command("LazyHealth", function()
|
|
vim.cmd([[Lazy! load all]])
|
|
vim.cmd([[checkhealth]])
|
|
end, { desc = "Load all plugins and run :checkhealth" })
|
|
|
|
local health = require("lazy.health")
|
|
vim.list_extend(health.valid, {
|
|
"recommended",
|
|
"desc",
|
|
"vscode",
|
|
})
|
|
end,
|
|
})
|
|
|
|
LazyVim.track("colorscheme")
|
|
LazyVim.try(function()
|
|
if type(M.colorscheme) == "function" then
|
|
M.colorscheme()
|
|
else
|
|
vim.cmd.colorscheme(M.colorscheme)
|
|
end
|
|
end, {
|
|
msg = "Could not load your colorscheme",
|
|
on_error = function(msg)
|
|
LazyVim.error(msg)
|
|
vim.cmd.colorscheme("habamax")
|
|
end,
|
|
})
|
|
LazyVim.track()
|
|
end
|
|
|
|
---@param buf? number
|
|
---@return string[]?
|
|
function M.get_kind_filter(buf)
|
|
buf = (buf == nil or buf == 0) and vim.api.nvim_get_current_buf() or buf
|
|
local ft = vim.bo[buf].filetype
|
|
if M.kind_filter == false then
|
|
return
|
|
end
|
|
if M.kind_filter[ft] == false then
|
|
return
|
|
end
|
|
if type(M.kind_filter[ft]) == "table" then
|
|
return M.kind_filter[ft]
|
|
end
|
|
---@diagnostic disable-next-line: return-type-mismatch
|
|
return type(M.kind_filter) == "table" and type(M.kind_filter.default) == "table" and M.kind_filter.default or nil
|
|
end
|
|
|
|
---@param name "autocmds" | "options" | "keymaps"
|
|
function M.load(name)
|
|
local function _load(mod)
|
|
if require("lazy.core.cache").find(mod)[1] then
|
|
LazyVim.try(function()
|
|
require(mod)
|
|
end, { msg = "Failed loading " .. mod })
|
|
end
|
|
end
|
|
local pattern = "LazyVim" .. name:sub(1, 1):upper() .. name:sub(2)
|
|
-- always load lazyvim, then user file
|
|
if M.defaults[name] or name == "options" then
|
|
_load("lazyvim.config." .. name)
|
|
vim.api.nvim_exec_autocmds("User", { pattern = pattern .. "Defaults", modeline = false })
|
|
end
|
|
_load("config." .. name)
|
|
if vim.bo.filetype == "lazy" then
|
|
-- HACK: LazyVim may have overwritten options of the Lazy ui, so reset this here
|
|
vim.cmd([[do VimResized]])
|
|
end
|
|
vim.api.nvim_exec_autocmds("User", { pattern = pattern, modeline = false })
|
|
end
|
|
|
|
M.did_init = false
|
|
function M.init()
|
|
if M.did_init then
|
|
return
|
|
end
|
|
M.did_init = true
|
|
local plugin = require("lazy.core.config").spec.plugins.LazyVim
|
|
if plugin then
|
|
vim.opt.rtp:append(plugin.dir)
|
|
end
|
|
|
|
package.preload["lazyvim.plugins.lsp.format"] = function()
|
|
LazyVim.deprecate([[require("lazyvim.plugins.lsp.format")]], [[LazyVim.format]])
|
|
return LazyVim.format
|
|
end
|
|
|
|
-- delay notifications till vim.notify was replaced or after 500ms
|
|
LazyVim.lazy_notify()
|
|
|
|
-- load options here, before lazy init while sourcing plugin modules
|
|
-- this is needed to make sure options will be correctly applied
|
|
-- after installing missing plugins
|
|
M.load("options")
|
|
-- defer built-in clipboard handling: "xsel" and "pbcopy" can be slow
|
|
lazy_clipboard = vim.opt.clipboard
|
|
vim.opt.clipboard = ""
|
|
|
|
if vim.g.deprecation_warnings == false then
|
|
vim.deprecate = function() end
|
|
end
|
|
|
|
LazyVim.plugin.setup()
|
|
M.json.load()
|
|
end
|
|
|
|
setmetatable(M, {
|
|
__index = function(_, key)
|
|
if options == nil then
|
|
return vim.deepcopy(defaults)[key]
|
|
end
|
|
---@cast options LazyVimConfig
|
|
return options[key]
|
|
end,
|
|
})
|
|
|
|
return M
|