fix keymaps, lazy load pass trying to reduce startup time, shaved ~35ms

This commit is contained in:
Martin Larsson 2026-04-12 02:31:00 +02:00
parent 8b38a13192
commit f5efed19c7
11 changed files with 295 additions and 218 deletions

View file

@ -35,7 +35,8 @@ local function toggle_terminal()
vim.api.nvim_command("startinsert") vim.api.nvim_command("startinsert")
end end
vim.keymap.set("n", "<leader>t", function()
utils.set_keymap_list({{ "<leader>t", function()
toggle_terminal() toggle_terminal()
require("window_management").autosize_windows() require("window_management").autosize_windows()
end) end }})

View file

@ -30,10 +30,6 @@
"rev": "8b54c59bcb23366645ae10edca6edfb9d3a0853e", "rev": "8b54c59bcb23366645ae10edca6edfb9d3a0853e",
"src": "https://github.com/b0o/incline.nvim" "src": "https://github.com/b0o/incline.nvim"
}, },
"live-rename.nvim": {
"rev": "3a3cddf23b89a17992f9ca67afc5858077769462",
"src": "https://github.com/saecki/live-rename.nvim"
},
"logger.nvim": { "logger.nvim": {
"rev": "63dd10c9b9a159fd6cfe08435d9606384ff103c5", "rev": "63dd10c9b9a159fd6cfe08435d9606384ff103c5",
"src": "https://github.com/rmagatti/logger.nvim" "src": "https://github.com/rmagatti/logger.nvim"
@ -63,7 +59,7 @@
"src": "https://github.com/MunifTanjim/nui.nvim" "src": "https://github.com/MunifTanjim/nui.nvim"
}, },
"nvim-dap": { "nvim-dap": {
"rev": "2a8799ad91a1495c6bdf753f9b2179b3ff0f5bba", "rev": "45a69eba683a2c448dd9ecfc4de89511f0646b5f",
"src": "https://github.com/mfussenegger/nvim-dap" "src": "https://github.com/mfussenegger/nvim-dap"
}, },
"nvim-dap-go": { "nvim-dap-go": {
@ -75,7 +71,7 @@
"src": "https://github.com/LiadOz/nvim-dap-repl-highlights" "src": "https://github.com/LiadOz/nvim-dap-repl-highlights"
}, },
"nvim-dap-ui": { "nvim-dap-ui": {
"rev": "f5b6673f374626515401c5bc51b005f784a4f252", "rev": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49",
"src": "https://github.com/rcarriga/nvim-dap-ui" "src": "https://github.com/rcarriga/nvim-dap-ui"
}, },
"nvim-dap-virtual-text": { "nvim-dap-virtual-text": {
@ -94,6 +90,10 @@
"rev": "57e1fa7638e753efbd62e5aa53b82b08a80fed7e", "rev": "57e1fa7638e753efbd62e5aa53b82b08a80fed7e",
"src": "https://github.com/LarssonMartin1998/nvim-norrsken" "src": "https://github.com/LarssonMartin1998/nvim-norrsken"
}, },
"nvim-rephrase": {
"rev": "3391726e2768fd241e89d032f8523ea053099387",
"src": "git@github.com:LarssonMartin1998/nvim-rephrase"
},
"nvim-treesitter": { "nvim-treesitter": {
"rev": "7caec274fd19c12b55902a5b795100d21531391f", "rev": "7caec274fd19c12b55902a5b795100d21531391f",
"src": "https://github.com/nvim-treesitter/nvim-treesitter", "src": "https://github.com/nvim-treesitter/nvim-treesitter",

View file

@ -3,47 +3,27 @@ local function gh(repo)
end end
vim.pack.add({ vim.pack.add({
-- Mini suite -- Foundational
gh("LarssonMartin1998/mini.nvim"), gh("LarssonMartin1998/mini.nvim"),
{ src = gh("nvim-treesitter/nvim-treesitter"), version = "main" },
-- Colorscheme -- Colorscheme
gh("rktjmp/lush.nvim"), gh("rktjmp/lush.nvim"),
gh("LarssonMartin1998/nvim-norrsken"), gh("LarssonMartin1998/nvim-norrsken"),
-- Treesitter
{ src = gh("nvim-treesitter/nvim-treesitter"), version = "main" },
gh("nvim-treesitter/nvim-treesitter-context"),
gh("nvim-treesitter/nvim-treesitter-textobjects"),
-- Completion
gh("rafamadriz/friendly-snippets"),
{ src = gh("L3MON4D3/LuaSnip"), version = vim.version.range("2.x") },
{ src = gh("saghen/blink.cmp"), version = vim.version.range("1.x") },
-- UI -- UI
gh("nvim-lualine/lualine.nvim"), gh("nvim-lualine/lualine.nvim"),
gh("b0o/incline.nvim"), gh("b0o/incline.nvim"),
gh("kosayoda/nvim-lightbulb"),
gh("rachartier/tiny-glimmer.nvim"),
gh("rachartier/tiny-inline-diagnostic.nvim"),
-- DAP -- Motions
gh("mfussenegger/nvim-dap"), gh("mawkler/demicolon.nvim"),
gh("rcarriga/nvim-dap-ui"), gh("nvim-treesitter/nvim-treesitter-textobjects"),
gh("nvim-neotest/nvim-nio"),
gh("LiadOz/nvim-dap-repl-highlights"),
gh("theHamsta/nvim-dap-virtual-text"),
gh("Weissle/persistent-breakpoints.nvim"),
gh("leoluz/nvim-dap-go"),
-- Misc -- Misc
gh("OXY2DEV/markview.nvim"), gh("OXY2DEV/markview.nvim"),
gh("MunifTanjim/nui.nvim"), gh("MunifTanjim/nui.nvim"),
gh("xzbdmw/colorful-menu.nvim"),
}) })
require("colorful-menu").setup({})
vim.cmd.packadd("nvim.undotree") vim.cmd.packadd("nvim.undotree")
vim.api.nvim_create_user_command("VimPackClean", function() vim.api.nvim_create_user_command("VimPackClean", function()

View file

@ -45,10 +45,16 @@ vim.schedule(function()
}) })
end) end)
require("treesitter-context").setup({ vim.api.nvim_create_autocmd("CursorMoved", {
max_lines = 2, once = true,
multiline_threshold = 3, callback = function()
trim_scope = "inner", vim.pack.add({ "https://github.com/nvim-treesitter/nvim-treesitter-context" })
require("treesitter-context").setup({
max_lines = 2,
multiline_threshold = 3,
trim_scope = "inner",
})
end,
}) })
-- Textobject helpers -- Textobject helpers

View file

@ -1,3 +1,55 @@
local function gh(repo)
return "https://github.com/" .. repo
end
vim.api.nvim_create_autocmd("ModeChanged", {
once = true,
callback = function()
vim.pack.add({
gh("rafamadriz/friendly-snippets"),
{ src = gh("L3MON4D3/LuaSnip"), version = vim.version.range("2.x") },
{ src = gh("saghen/blink.cmp"), version = vim.version.range("1.x") },
gh("xzbdmw/colorful-menu.nvim"),
})
require("blink.cmp").setup({
keymap = { preset = "super-tab" },
appearance = {
nerd_font_variant = "mono",
},
completion = {
documentation = {
auto_show = false,
},
menu = {
draw = {
columns = { { "kind_icon" }, { "label", gap = 1 } },
components = {
label = {
text = function(ctx)
return require("colorful-menu").blink_components_text(ctx)
end,
highlight = function(ctx)
return require("colorful-menu").blink_components_highlight(ctx)
end,
},
},
},
},
},
snippets = {
preset = "luasnip",
active = function() return false end,
},
sources = {
default = { "lsp", "path", "snippets", "buffer" },
},
fuzzy = { implementation = "prefer_rust_with_warning" },
})
require("colorful-menu").setup({})
end,
})
local ls = require("luasnip") local ls = require("luasnip")
require("luasnip.loaders.from_vscode").lazy_load() require("luasnip.loaders.from_vscode").lazy_load()
ls.filetype_extend("typescriptreact", { "html" }) ls.filetype_extend("typescriptreact", { "html" })
@ -6,38 +58,3 @@ ls.config.set_config({
enable_autosnippets = false, enable_autosnippets = false,
store_selection_keys = false, store_selection_keys = false,
}) })
require("blink.cmp").setup({
keymap = { preset = "super-tab" },
appearance = {
nerd_font_variant = "mono",
},
completion = {
documentation = {
auto_show = false,
},
menu = {
draw = {
columns = { { "kind_icon" }, { "label", gap = 1 } },
components = {
label = {
text = function(ctx)
return require("colorful-menu").blink_components_text(ctx)
end,
highlight = function(ctx)
return require("colorful-menu").blink_components_highlight(ctx)
end,
},
},
},
},
},
snippets = {
preset = "luasnip",
active = function() return false end,
},
sources = {
default = { "lsp", "path", "snippets", "buffer" },
},
fuzzy = { implementation = "prefer_rust_with_warning" },
})

View file

@ -1,8 +1,5 @@
vim.schedule(function() require("demicolon").setup({
vim.pack.add({ "https://github.com/mawkler/demicolon.nvim" }) keymaps = {
require("demicolon").setup({ repeat_motions = "stateful",
keymaps = { },
repeat_motions = "stateful", })
},
})
end)

View file

@ -1,21 +1,26 @@
vim.schedule(function() local function gh(repo)
vim.pack.add({ return "https://github.com/" .. repo
"https://github.com/rmagatti/logger.nvim", end
"https://github.com/rmagatti/goto-preview",
})
require("goto-preview").setup({ vim.api.nvim_create_autocmd("LspAttach", {
border = { "", "", "", "", "", "", "", "" }, once = true,
focus_on_open = true, callback = function()
stack_floating_preview_windows = false, vim.pack.add({
preview_window_title = { enable = true, position = "left" }, gh("https://github.com/rmagatti/goto-preview"),
vim_ui_input = false, gh("rmagatti/logger.nvim")
}) })
require("goto-preview").setup({
border = { "", "", "", "", "", "", "", "" },
focus_on_open = true,
stack_floating_preview_windows = false,
preview_window_title = { enable = true, position = "left" },
vim_ui_input = false,
})
local utils = require("utils") require("utils").set_keymap_list({
utils.set_keymap_list({ { "gp", function() require("goto-preview").goto_preview_definition() end },
{ "gp", function() require("goto-preview").goto_preview_definition() end }, { "gy", function() require("goto-preview").goto_preview_type_definition() end },
{ "gy", function() require("goto-preview").goto_preview_type_definition() end }, { "<Leader>q", function() require("goto-preview").close_all_win() end },
{ "<Leader>q", function() require("goto-preview").close_all_win() end }, })
}) end,
end) })

View file

@ -3,95 +3,148 @@ local inlay_hints_handler = require("inlay_hints_handler")
local is_debug_mode_active = false local is_debug_mode_active = false
local dap = require("dap") local function gh(repo)
return "https://github.com/" .. repo
end
require("nvim-dap-repl-highlights").setup({}) vim.api.nvim_create_autocmd("BufReadPost", {
require("nvim-dap-virtual-text").setup({}) once = true,
require("persistent-breakpoints").setup({ load_breakpoints_event = { "BufReadPost" } }) callback = function()
require("dapui").setup({ vim.pack.add({
controls = { enabled = false }, gh("Weissle/persistent-breakpoints.nvim"),
layouts = { })
{ require("persistent-breakpoints").setup({
elements = { load_breakpoints_event = { "BufReadPost" },
{ id = "watches", size = 0.5 }, })
{ id = "stacks", size = 0.5 }, end,
},
position = "bottom",
size = 15,
},
},
}) })
require("dap-go").setup({})
dap.adapters.codelldb = require("dap.codelldb") local function setup_dap()
vim.pack.add({
gh("mfussenegger/nvim-dap"),
gh("rcarriga/nvim-dap-ui"),
gh("nvim-neotest/nvim-nio"),
gh("LiadOz/nvim-dap-repl-highlights"),
gh("theHamsta/nvim-dap-virtual-text"),
gh("leoluz/nvim-dap-go"),
})
local virtual_text = require("nvim-dap-virtual-text/virtual_text") local dap = require("dap")
local breakpoint_api = require("persistent-breakpoints.api")
local stepping_keymaps = { require("nvim-dap-repl-highlights").setup({})
{ "<F10>", function() dap.step_over() end }, require("nvim-dap-virtual-text").setup({})
{ "<F11>", function() dap.step_into() end }, require("dapui").setup({
{ "<F12>", function() dap.step_out() end }, controls = { enabled = false },
{ layouts = {
"<leader>dc", {
function() elements = {
require("dapui").float_element("console", { { id = "watches", size = 0.5 },
enter = true, { id = "stacks", size = 0.5 },
title = "output", },
border = "rounded", position = "bottom",
position = "center", size = 15,
width = math.floor(vim.o.columns * 0.8), },
height = math.floor(vim.o.lines * 0.6), },
}) })
end, require("dap-go").setup({})
},
}
for _, sign in ipairs({ dap.adapters.codelldb = require("dap.codelldb")
{ "DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" } },
{ "DapBreakpointRejected", { text = "🔵", texthl = "", linehl = "", numhl = "" } }, for _, sign in ipairs({
{ "DapBreakpointCondition", { text = "🟥", texthl = "", linehl = "", numhl = "" } }, { "DapBreakpoint", { text = "🛑", texthl = "", linehl = "", numhl = "" } },
}) do { "DapBreakpointRejected", { text = "🔵", texthl = "", linehl = "", numhl = "" } },
vim.fn.sign_define(unpack(sign)) { "DapBreakpointCondition", { text = "🟥", texthl = "", linehl = "", numhl = "" } },
}) do
vim.fn.sign_define(unpack(sign))
end
local virtual_text = require("nvim-dap-virtual-text/virtual_text")
local stepping_keymaps = {
{ "<F10>", function() dap.step_over() end },
{ "<F11>", function() dap.step_into() end },
{ "<F12>", function() dap.step_out() end },
{
"<leader>dc",
function()
require("dapui").float_element("console", {
enter = true,
title = "output",
border = "rounded",
position = "center",
width = math.floor(vim.o.columns * 0.8),
height = math.floor(vim.o.lines * 0.6),
})
end,
},
}
local function enter_debug_mode()
if is_debug_mode_active then return end
utils.set_keymap_list(stepping_keymaps)
is_debug_mode_active = true
inlay_hints_handler.disable()
require("dapui").open()
end
local function exit_debug_mode()
if not is_debug_mode_active then return end
utils.del_keymap_list(stepping_keymaps)
is_debug_mode_active = false
inlay_hints_handler.restore()
virtual_text.clear_virtual_text()
require("dapui").close()
end
for _, request in ipairs({ "attach", "launch" }) do
dap.listeners.before[request]["dapui_config"] = enter_debug_mode
end
for _, event in ipairs({ "event_terminated", "event_exited" }) do
dap.listeners.after[event]["dapui_config"] = exit_debug_mode
end
end end
local function enter_debug_mode() local function with_dap(fn)
if is_debug_mode_active then return end return function(...)
utils.set_keymap_list(stepping_keymaps) setup_dap()
is_debug_mode_active = true return fn(...)
inlay_hints_handler.disable() end
require("dapui").open()
end
local function exit_debug_mode()
if not is_debug_mode_active then return end
utils.del_keymap_list(stepping_keymaps)
is_debug_mode_active = false
inlay_hints_handler.restore()
virtual_text.clear_virtual_text()
require("dapui").close()
end
for _, request in ipairs({ "attach", "launch" }) do
dap.listeners.before[request]["dapui_config"] = enter_debug_mode
end
for _, event in ipairs({ "event_terminated", "event_exited" }) do
dap.listeners.after[event]["dapui_config"] = exit_debug_mode
end
local function dap_stop()
dap.terminate()
dap.close()
exit_debug_mode()
end end
utils.set_keymap_list({ utils.set_keymap_list({
{ "<leader>dr", dap.continue }, {
{ "<leader>bt", breakpoint_api.toggle_breakpoint }, "<leader>dr",
{ "<leader>bc", breakpoint_api.set_conditional_breakpoint }, with_dap(function()
{ "<leader>br", breakpoint_api.clear_all_breakpoints }, require("dap").continue()
{ "<leader>ds", dap_stop }, end),
},
{
"<leader>bt",
function()
require("persistent-breakpoints.api").toggle_breakpoint()
end,
},
{
"<leader>bc",
function()
require("persistent-breakpoints.api").set_conditional_breakpoint()
end,
},
{
"<leader>br",
function()
require("persistent-breakpoints.api").clear_all_breakpoints()
end,
},
{
"<leader>ds",
with_dap(function()
local dap = require("dap")
dap.terminate()
dap.close()
end),
},
}) })
vim.api.nvim_create_user_command("LaunchTemplate", function() vim.api.nvim_create_user_command("LaunchTemplate", function()

View file

@ -1,9 +1,15 @@
require("nvim-lightbulb").setup({ vim.api.nvim_create_autocmd("LspAttach", {
hide_in_unfocused_buffer = true, once = true,
code_lenses = false, -- 0.12 shows code lenses as virtual lines natively callback = function()
sign = { enabled = true }, vim.pack.add({ "https://github.com/kosayoda/nvim-lightbulb" })
virtual_text = { enabled = false }, require("nvim-lightbulb").setup({
float = { enabled = false }, hide_in_unfocused_buffer = true,
status_text = { enabled = false }, code_lenses = false, -- 0.12 shows code lenses as virtual lines natively
autocmd = { enabled = true, updatetime = 25 }, sign = { enabled = true },
virtual_text = { enabled = false },
float = { enabled = false },
status_text = { enabled = false },
autocmd = { enabled = true, updatetime = 25 },
})
end,
}) })

View file

@ -1,24 +1,30 @@
require("tiny-glimmer").setup({ vim.api.nvim_create_autocmd("CursorMoved", {
refresh_interval_ms = 6, once = true,
overwrite = { callback = function()
auto_map = true, vim.pack.add({ "https://github.com/rachartier/tiny-glimmer.nvim" })
paste = { require("tiny-glimmer").setup({
enabled = true, refresh_interval_ms = 6,
default_animation = { name = "fade", settings = { from_color = "DiffText" } }, overwrite = {
}, auto_map = true,
undo = { paste = {
enabled = true, enabled = true,
default_animation = { name = "fade", settings = { from_color = "DiffDelete" } }, default_animation = { name = "fade", settings = { from_color = "DiffText" } },
}, },
redo = { undo = {
enabled = true, enabled = true,
default_animation = { name = "fade", settings = { from_color = "DiffAdd" } }, default_animation = { name = "fade", settings = { from_color = "DiffDelete" } },
}, },
}, redo = {
animations = { enabled = true,
fade = { default_animation = { name = "fade", settings = { from_color = "DiffAdd" } },
chars_for_max_duration = 1, },
to_color = "Folded", },
}, animations = {
}, fade = {
chars_for_max_duration = 1,
to_color = "Folded",
},
},
})
end,
}) })

View file

@ -1,11 +1,17 @@
require("tiny-inline-diagnostic").setup({ vim.api.nvim_create_autocmd("LspAttach", {
preset = "modern", once = true,
transparent_bg = false, callback = function()
transparent_cursorline = false, vim.pack.add({ "https://github.com/rachartier/tiny-inline-diagnostic.nvim" })
options = { require("tiny-inline-diagnostic").setup({
multilines = { preset = "modern",
enabled = true, transparent_bg = false,
always_show = true, transparent_cursorline = false,
}, options = {
}, multilines = {
enabled = true,
always_show = true,
},
},
})
end,
}) })