Compare commits

..

9 Commits

Author SHA1 Message Date
fzechert d92312b83c add keybinds to jump between buffers 2026-07-05 01:15:25 +02:00
fzechert a83481d10d fix keymaps 2026-07-03 23:36:51 +02:00
fzechert 9810b20e0b configure LSP, codelens, and trouble 2026-06-28 20:52:55 +02:00
fzechert d256020251 configure trouble plugin 2026-06-28 20:15:04 +02:00
fzechert 9c48b3b3a0 add which-key plugin 2026-06-28 02:05:01 +02:00
fzechert 44f2c9f887 fix lsp info dialog 2026-06-27 19:13:01 +02:00
fzechert 3b707ada11 add lualine plugin 2026-06-25 02:45:04 +02:00
fzechert 7c428386d8 added language server info output 2026-06-25 02:44:53 +02:00
fzechert cb1a941fe1 fix deprecated API usage vim.highlight -> vim.hl 2026-06-25 02:43:51 +02:00
13 changed files with 629 additions and 54 deletions
+35 -2
View File
@@ -38,7 +38,7 @@ create_cmd("TextYankPost", {
desc = "Highlight yanked text",
group = create_group("cmd-highlight-yank", { clear = true }),
callback = function()
vim.highlight.on_yank()
vim.hl.on_yank()
end
})
@@ -46,9 +46,10 @@ create_cmd("TextYankPost", {
create_cmd("FileType", {
desc = "Disable list characters for some filetypes",
group = create_group("cmd-disable-listchars", { clear = true }),
pattern = { "netrw" },
pattern = { "netrw", "trouble" },
callback = function(args)
vim.opt_local.list = false
vim.opt.textwidth = 0
end
})
@@ -113,3 +114,35 @@ create_cmd({"InsertLeave", "CmdlineLeave", "TermLeave", "BufEnter", "WinEnter" }
trailing_hl_match_ids[window] = vim.fn.matchadd("TrailingWhitespace", [[\s\+$]])
end
})
-- Open Trouble Quickfix list automatically
create_cmd("QuickFixCmdPost", {
desc = "Automatically open Quickfix List in Trouble",
group = create_group("cmd-quickfix-open-trouble", { clear = true }),
callback = function()
vim.cmd([[Trouble qflist open]])
end
})
-- Automatically open diagnostic float when hovering with cursor
create_cmd("CursorHold", {
desc = "Automatically open Diagnostic Float",
group = create_group("cmd-auto-open-diagnostic-float", { clear = true }),
callback = function()
-- If any floating window exists, do nothing
for _, win in ipairs(vim.api.nvim_list_wins()) do
local cfg = vim.api.nvim_win_get_config(win)
if cfg.relative ~= "" then
return
end
end
-- Only open if there is a diagnostic under cursor
local diags = vim.diagnostic.get(0, { lnum = vim.fn.line('.') - 1 })
if #diags == 0 then
return
end
vim.diagnostic.open_float(nil, { focus = false, scope = "cursor" })
end,
})
+3 -3
View File
@@ -31,15 +31,15 @@
]]
vim.diagnostic.config({
update_in_insert = true,
update_in_insert = false,
severity_sort = true,
float = {
border = vim.g.ui.popupborder,
source = true,
},
underline = true,
-- underline = true,
-- underline only from a specified severity level
-- underline = { severity = { min = vim.diagnostic.severity.WARN } },
underline = { severity = { min = vim.diagnostic.severity.WARN } },
virtual_text = {
prefix = vim.g.ui.symbols.diagnostic.virtual_text_prefix,
severity = nil, -- show all severities
+35 -1
View File
@@ -47,7 +47,7 @@ local function smart_buffer_switch(current)
local current_index = nil
for index, buffer in ipairs(buffers) do
if buffer.bufnr == current then
current_index = i
current_index = index
break
end
end
@@ -97,3 +97,37 @@ map("n", "<leader>bd", smart_buffer_delete, { desc = "Close Current Buffer" })
map("n", "<leader>bw", smart_buffer_wipeout, { desc = "Wipeout Current Buffer" })
map("n", "<leader>bD", delete_other_buffers, { desc = "Close All Other Buffers" })
map("n", "<leader>bW", wipeout_other_buffers, { desc = "Wipeout All Other Buffers" })
for i = 1, 10 do
map("n", "<Leader>b" .. (i%10), "<Cmd>LualineBuffersJump! " .. i .. "<Cr>", { desc = "Jump to Buffer " .. i })
end
-- Trouble Keybinds
-- open diagnostics window
map("n", "<leader>xd", [[<Cmd>Trouble diagnostics toggle focus=false filter.buf=0<CR>]], { desc = "Toggle diagnostic message for current buffer" })
map("n", "<leader>xD", [[<Cmd>Trouble diagnostics toggle focus=false<CR>]], { desc = "Toggle diagnostic message for project" })
map("n", "grl", [[<Cmd>Trouble lsp toggle focus=false win.position=right win.relative=win pinned=true<CR>]], { desc = "Open LSP Info" })
map("n", "grt", [[<Cmd>Trouble symbols toggle focus=false<CR>]], { desc = "Open TreeSitter Symbols" })
map("n", "grs", [[<Cmd>Trouble lsp_document_symbols toggle focus=false<CR>]], { desc = "Open LSP Document Symbols", silent = true, noremap = true })
map("n", "grD", [[<Cmd>Trouble lsp_declarations toggle<CR>]], { desc = "Show LSP Declarations", silent = true, noremap = true })
map("n", "grd", [[<Cmd>Trouble lsp_definitions toggle<CR>]], { desc = "Show LSP Definitions", silent = true, noremap = true })
map("n", "gri", [[<Cmd>Trouble lsp_implementations toggle<CR>]], { desc = "Show LSP Implementations", silent = true, noremap = true })
map("n", "grc", [[<Cmd>Trouble lsp_incoming_calls toggle<CR>]], { desc = "Show LSP incoming calls", silent = true, noremap = true })
map("n", "grC", [[<Cmd>Trouble lsp_outgoing_calls toggle<CR>]], { desc = "Show LSP outgoing calls", silent = true, noremap = true })
map("n", "grr", [[<Cmd>Trouble lsp_references toggle<CR>]], { desc = "Show LSP references", silent = true, noremap = true })
map("n", "<leader>xq", [[<Cmd>Trouble qflist toggle focus=false<CR>]], { desc = "Show Quickfix List" })
map("n", "<leader>xl", [[<Cmd>Trouble loclist toggle focus=false<CR>]], { desc = "Show Location List" })
map("n", "grn", vim.lsp.buf.rename, { desc = "Rename", silent = true, noremap = true })
map({"n", "v"}, "gra", vim.lsp.buf.code_action, { desc = "Action", silent = true, noremap = true })
map("n", "gl", vim.diagnostic.open_float, { desc = "Open Diagnostic Float" })
map("n", "grx", vim.lsp.codelens.run, { desc = "Run Codelens Operation" })
-- Toggle Codelens
map("n", "<leader>tc", function()
vim.g.codelens_enabled = not vim.g.codelens_enabled
vim.lsp.codelens.enable(vim.g.codelens_enabled)
end, { desc = "Toggle Code Lens" })
-- Open Signature Help
map("i", "<C-s>", function()
vim.lsp.buf.signature_help()
end, { desc = "Show signature help" })
+5 -5
View File
@@ -62,7 +62,7 @@ vim.opt.pumborder = vim.g.ui.popupborder
vim.opt.splitbelow = true
vim.opt.splitright = true
-- hide mode, displayed in lualine
-- vim.opt.showmode = false
vim.opt.showmode = false
vim.opt.shortmess:append("S")
-- enable visual bell
vim.opt.visualbell = true
@@ -75,7 +75,7 @@ vim.opt.backspace = { "indent", "eol", "start" }
vim.opt.preserveindent = true
vim.opt.smartindent = true
vim.opt.breakindent = true
vim.opt.breakindentopt:append({ min = 20, shift = -2, sbr = ture, list = -1 })
vim.opt.breakindentopt:append({ min = 20, shift = -2, sbr = true, list = -1 })
-- tab settings
vim.opt.expandtab = false
vim.opt.shiftround = true
@@ -91,7 +91,7 @@ vim.opt.matchpairs:append({ "<:>" })
vim.opt.hlsearch = true
vim.opt.ignorecase = true
vim.opt.inccommand = split
vim.opt.inccommand = "split"
vim.opt.incsearch = true
vim.opt.smartcase = true
@@ -108,8 +108,8 @@ vim.opt.swapfile = true
-- Performance settings
vim.opt.updatetime = 1000
vim.opt.timeoutlen = 300
vim.opt.updatetime = 1000 -- after this idle time, write backup, swap files etc.
vim.opt.timeoutlen = 500 -- timeout to wait for key combinations to complete.
-- Mouse and Clipboard settings
+6 -2
View File
@@ -50,12 +50,12 @@ vim.g.ui = {
linebreak = "",
windowborder = "single",
popupborder = "single",
custom_highlights = function(colors, utils)
custom_highlights = function(colors, _)
return {
whitespace = { fg = colors.overlay0 },
TrailingWhitespace = { fg = colors.red },
LineNr = { fg = colors.overlay0 },
CursorLineNR = { fg = colors.peach },
CursorLineNr = { fg = colors.peach },
}
end,
symbols = {
@@ -66,5 +66,9 @@ vim.g.ui = {
sign_info = "I",
sign_hint = "H",
},
component_separators = { left = "", right = "" },
section_separators = { left = "", right = "" },
window = "",
not_overline = "\u{0305}",
}
}
+166 -38
View File
@@ -33,48 +33,176 @@ vim.pack.add({
{ src = "https://github.com/neovim/nvim-lspconfig" },
})
vim.lsp.config("lua_ls", {
on_init = function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
path ~= vim.fn.stdpath("config")
and (
vim.uv.fs_stat(path .. "/.luarc.json")
or vim.uv.fs_stat(path .. "/.luarc.jsonc")
)
then
-- Path is not neovim's config folder and
-- the file .luarc.json or .luarc.jsonc exists
-- in the directory -> exit function and skip custom
-- configuration of the client below
return
require("lsp.lua_ls")
local function run_healthcheck(section)
local before = {}
for _, b in ipairs(vim.api.nvim_list_bufs()) do
before[b] = true
end
vim.cmd("silent checkhealth " .. section)
local after = vim.api.nvim_list_bufs()
local health_buf = nil
for _, b in ipairs(after) do
if not before[b] then
health_buf = b
break
end
end
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
runtime = {
-- neovim uses LuaJIT runtime
version = "LuaJIT",
-- find lua modules the same way neovim does
path = {
"lua/?.lua",
"lua/?/init.lua",
}
},
-- make the server aware of neovim runtime files
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
-- for LSP settings type annotations
vim.api.nvim_get_runtime_file("lua/lspconfig", false)[1],
if not health_buf then
return { "Could not capture :checkhealth " .. section .. " output" }
end
-- Read lines
local lines = vim.api.nvim_buf_get_lines(health_buf, 0, -1, false)
-- Close the health window
for _, win in ipairs(vim.api.nvim_list_wins()) do
if vim.api.nvim_win_get_buf(win) == health_buf then
vim.api.nvim_win_close(win, true)
end
end
-- Close the buffer
vim.api.nvim_buf_delete(health_buf, { force = true })
return lines
end
local function get_all_treesitter_languages()
local bufnr = 0
local ok, parser = pcall(vim.treesitter.get_parser, bufnr)
if not ok or not parser then
return {}
end
local langs = { parser:lang() }
for _, child in ipairs(parser:children()) do
table.insert(langs, child:lang())
end
return langs
end
local function get_treesitter_status()
local bufnr = 0
local ok, parser = pcall(vim.treesitter.get_parser, bufnr)
if not ok or not parser then
return {
"Treesitter:",
" active: no",
" parsers: none",
}
end
local langs = get_all_treesitter_languages()
return {
"Treesitter:",
" active: yes",
" parsers: " .. table.concat(langs, ", "),
}
end
local function show_lsp_details()
local popup_buffer = vim.api.nvim_create_buf(false, true)
local lsp_clients = vim.lsp.get_clients({ bufnr = 0 })
local lines = {}
-- Treesitter status
table.insert(lines, "Treesitter Status")
table.insert(lines, "=================")
local ts = get_treesitter_status()
for _, l in ipairs(ts) do
table.insert(lines, l)
end
table.insert(lines, "")
if #lsp_clients == 0 then
table.insert(lines, "No LSP clients attached.")
else
table.insert(lines, "Active LSP Clients:")
table.insert(lines, "===================")
for _, client in ipairs(lsp_clients) do
table.insert(lines, "")
table.insert(lines, "" .. client.name)
-- Root folders
local roots = {}
if client.workspace_folders then
for _, workspace_folder in ipairs(client.workspace_folders) do
table.insert(roots, workspace_folder.name or workspace_folder.uri or "")
end
end
if #roots > 0 then
table.insert(lines, " Roots:")
for _, root in ipairs(roots) do
table.insert(lines, " - " ..root)
end
else
table.insert(lines, " Roots: none")
end
-- Capabilities
table.insert(lines, " Capabilities:")
for capability, _ in pairs(client.server_capabilities or {}) do
table.insert(lines, " - " .. capability)
end
end
end
table.insert(lines, "")
table.insert(lines, "Health Check (vim.lsp):")
table.insert(lines, "=======================")
local health_lines = run_healthcheck("vim.lsp")
for _, l in ipairs(health_lines) do
table.insert(lines, " " .. l)
end
table.insert(lines, "")
table.insert(lines, "Health Check (vim.treesitter):")
table.insert(lines, "=======================")
health_lines = run_healthcheck("vim.treesitter")
for _, l in ipairs(health_lines) do
table.insert(lines, " " .. l)
end
vim.api.nvim_buf_set_lines(popup_buffer, 0, -1, false, lines)
vim.api.nvim_set_option_value("modifiable", false, { buf = popup_buffer })
vim.api.nvim_set_option_value("readonly", true, { buf = popup_buffer })
local width = math.floor(vim.o.columns * 0.6)
local height = math.floor(vim.o.lines * 0.6)
local row = math.floor((vim.o.lines - height) / 2)
local col = math.floor((vim.o.columns - width) / 2)
local window = vim.api.nvim_open_win(popup_buffer, true, {
relative = "editor",
style = "minimal",
border = vim.g.ui.popupborder,
row = row,
col = col,
width = width,
height = height,
})
end,
settings = {
Lua = {}
}
vim.keymap.set("n", "q", function()
if vim.api.nvim_win_is_valid(window) then
vim.api.nvim_win_close(window, true)
end
end, { buffer = popup_buffer, nowait = true, desc = "Close Window" })
end
vim.keymap.set("n", "<leader>xi", show_lsp_details, {
desc = "Show detailed LSP info in a float"
})
vim.lsp.enable({ "lua_ls" })
vim.g.codelens_enabled = true
vim.lsp.codelens.enable(vim.g.codelens_enable)
+75
View File
@@ -0,0 +1,75 @@
--[[
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠚⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠗⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣶⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣶⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠐⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⠂
⠀⠀⠀⠀⢀⣠⣴⣆⡈⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠃⠘⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢁⣰⣦⣄⡀
⠀⠀⠐⠾⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠷⠂
⠀⢸⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⡇
⠀⢸⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⡇
⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⡆⢰⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠃⠘⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⡇⢸⠿⠛⠉
__ _ _
/ _|___ ___| |_ __ _ ___| | __
| ||_ /____/ __| __/ _` |/ __| |/ /
| _/ /_____\__ \ || (_| | (__| <
|_|/___| |___/\__\__,_|\___|_|\_\
Neovim v0.12 configuration
(C) Frank Zechert 2026
]]
vim.lsp.config("lua_ls", {
on_init = function(client)
if client.workspace_folders then
local path = client.workspace_folders[1].name
if
path ~= vim.fn.stdpath("config")
and (
vim.uv.fs_stat(path .. "/.luarc.json")
or vim.uv.fs_stat(path .. "/.luarc.jsonc")
)
then
-- Path is not neovim's config folder, or has custom
-- lua language server configuration, skip custom client configuration
return
end
end
client.config.settings.Lua = vim.tbl_deep_extend("force", client.config.settings.Lua, {
runtime = {
-- neovim uses LuaJIT runtime
version = "LuaJIT",
-- find lua modules the same way neovim does
path = {
"lua/?.lua",
"lua/?/init.lua",
}
},
-- make the server aware of neovim runtime files
workspace = {
checkThirdParty = false,
library = {
vim.env.VIMRUNTIME,
-- for LSP settings type annotations
vim.api.nvim_get_runtime_file("lua/lspconfig", false)[1],
}
}
})
end,
settings = {
Lua = {}
}
})
vim.lsp.enable({ "lua_ls" })
+4
View File
@@ -31,3 +31,7 @@
]]
require("plugins/catppuccin")
require("plugins/lualine")
require("plugins/trouble")
require("plugins/whichkey")
+154
View File
@@ -0,0 +1,154 @@
--[[
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠚⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠗⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣶⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣶⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠐⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⠂
⠀⠀⠀⠀⢀⣠⣴⣆⡈⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠃⠘⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢁⣰⣦⣄⡀
⠀⠀⠐⠾⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠷⠂
⠀⢸⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⡇
⠀⢸⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⡇
⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⡆⢰⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠃⠘⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⡇⢸⠿⠛⠉
__ _ _
/ _|___ ___| |_ __ _ ___| | __
| ||_ /____/ __| __/ _` |/ __| |/ /
| _/ /_____\__ \ || (_| | (__| <
|_|/___| |___/\__\__,_|\___|_|\_\
Neovim v0.12 configuration
(C) Frank Zechert 2026
]]
vim.pack.add({
{ src = "https://github.com/nvim-tree/nvim-web-devicons" },
{ src = "https://github.com/nvim-lualine/lualine.nvim" }
})
local function expandtabs()
if not vim.bo.expandtab then
return string.format("%s %d", vim.g.ui.listchars.leadtab, vim.bo.tabstop)
else
local width = vim.bo.shiftwidth
if width == 0 then
width = vim.bo.tabstop
end
return string.format("%s %d", vim.g.ui.listchars.nbsp, width)
end
end
local function windownumber()
return string.format("%s %s", vim.g.ui.symbols.window, vim.fn.winnr())
end
local function treesitter_status()
local ok, parser = pcall(vim.treesitter.get_parser, 0)
if not ok or not parser then
return "T"..vim.g.ui.symbols.not_overline
else
return "T"
end
end
local function lsp_status()
local clients = vim.lsp.get_clients({bufnr = 0})
if #clients == 0 then
-- no LSP is attached
return "L"..vim.g.ui.symbols.not_overline
end
local lsp_names = {}
for _, client in ipairs(clients) do
local roots = {}
if client.workspace_folders then
for _, workspace_folder in ipairs(client.workspace_folders) do
table.insert(roots, workspace_folder.name or workspace_folder.uri or "")
end
end
local has_root = (roots and #roots > 0)
local root_flag = has_root and "+R" or ""
table.insert(lsp_names, string.format("%s%s", client.name, root_flag))
end
return string.format("L: %s", table.concat(lsp_names, ", "))
end
require('lualine').setup({
options = {
component_separators = vim.g.ui.symbols.component_separators,
section_separators = vim.g.ui.symbols.section_separators,
globalstatus = false,
refresh = {
refresh_time = 33, -- ~30 fps
}
},
sections = {
lualine_a = { "mode" },
lualine_b = { "searchcount", "selectioncount" },
lualine_c = {
{ "filename", file_status = true, newfile_status = true, path = 1 },
},
lualine_x = {
"encoding",
{ "fileformat", icons_enabled = true, symbols = { unix = "LF", dos = "CRLF", mac = "CR" } },
expandtabs,
"filesize"
},
lualine_y = {},
lualine_z = { "location", "progress" },
},
inactive_sections = {
lualine_a = {},
lualine_b = {},
lualine_c = {
{ "filename", file_status = true, newfile_status = true, path = 1 },
},
lualine_x = {
"encoding",
{ "fileformat", icons_enabled = true, symbols = { unix = "LF", dos = "CRLF", mac = "CR" } },
expandtabs,
"filesize",
},
lualine_y = {},
lualine_z = { "location", "progress" },
},
tabline = {
lualine_a = {
{ "buffers", mode = 2, use_mode_colors = true },
},
lualine_b = {},
lualine_c = {},
lualine_x = {},
lualine_y = {},
lualine_z = {
{ "tabs", mode = 0, use_mode_colors = true },
},
},
winbar = {
lualine_a = { windownumber },
lualine_b = { "filename", "filetype" },
lualine_c = { "diagnostics" },
lualine_x = { treesitter_status, lsp_status },
lualine_y = { "branch", "diff" },
lualine_z = {},
},
inactive_winbar = {
lualine_a = { windownumber },
lualine_b = {},
lualine_c = {},
lualine_x = {},
lualine_y = {},
lualine_z = {},
}
})
+78
View File
@@ -0,0 +1,78 @@
--[[
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠚⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠗⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣶⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣶⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠐⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⠂
⠀⠀⠀⠀⢀⣠⣴⣆⡈⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠃⠘⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢁⣰⣦⣄⡀
⠀⠀⠐⠾⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠷⠂
⠀⢸⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⡇
⠀⢸⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⡇
⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⡆⢰⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠃⠘⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⡇⢸⠿⠛⠉
__ _ _
/ _|___ ___| |_ __ _ ___| | __
| ||_ /____/ __| __/ _` |/ __| |/ /
| _/ /_____\__ \ || (_| | (__| <
|_|/___| |___/\__\__,_|\___|_|\_\
Neovim v0.12 configuration
(C) Frank Zechert 2026
]]
vim.pack.add({
{ src = "https://github.com/nvim-tree/nvim-web-devicons" },
{ src = "https://github.com/folke/trouble.nvim" },
})
local trouble = require("trouble")
trouble.setup({
auto_preview = true,
auto_refresh = true,
auto_jump = false,
auto_close = true,
modes = {
diagnostics = {
preview = {
type = "split",
relative = "win",
position = "right",
size = 0.4
},
},
lsp_declarations = {
preview = {
type = "split",
relative = "win",
position = "right",
size = 0.4
},
},
lsp_definitions = {
preview = {
type = "split",
relative = "win",
position = "right",
size = 0.4
},
},
lsp_references = {
preview = {
type = "split",
relative = "win",
position = "right",
size = 0.4
},
},
},
})
+47
View File
@@ -0,0 +1,47 @@
--[[
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠚⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠗⢀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣤⣀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⣶⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⢿⣿⣿⣿⣿⣿⣿⡿⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣶⣤
⠀⠀⠀⠀⠀⠀⠀⠀⠐⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠓⠦⣌⡙⠻⠟⢋⣡⠴⠚⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⠂
⠀⠀⠀⠀⢀⣠⣴⣆⡈⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠃⠘⢉⣠⣴⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢁⣰⣦⣄⡀
⠀⠀⠐⠾⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠷⠂
⠀⢸⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⡇
⠀⢸⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⣦⣄⡉⠛⠿⠿⠛⢉⣠⣴⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⡇
⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠻⢿⣿⣷⡆⢰⣾⣿⡿⠟⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣌⡙⠃⠘⢋⣡⣴⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⣿⣷⣾⣿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⠛⠿⣿⣿⣿⣿⠿⠛⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⣿⣷⣦⣄⡉⢉⣠⣴⣾⣿⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⣿⣿⣿⣿⡇⢸⣿⣿⣿⣿⠿⠛⠉
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⠿⡇⢸⠿⠛⠉
__ _ _
/ _|___ ___| |_ __ _ ___| | __
| ||_ /____/ __| __/ _` |/ __| |/ /
| _/ /_____\__ \ || (_| | (__| <
|_|/___| |___/\__\__,_|\___|_|\_\
Neovim v0.12 configuration
(C) Frank Zechert 2026
]]
vim.pack.add({
{ src = "https://github.com/folke/which-key.nvim" },
})
local wk = require("which-key")
wk.setup({
preset = "modern"
})
wk.add({
{ "<leader>b", group = "Buffers..." },
{ "<leader>x", group = "Trouble..." },
{ "gr", group = "LSP...", mode = {"n","v"} },
{ "<leader>t", group = "Toggle..." },
})
+16
View File
@@ -4,9 +4,25 @@
"rev": "e068ab5f8261f23f6f71ffd8791ae40315b77b9c",
"src": "https://github.com/catppuccin/nvim"
},
"lualine.nvim": {
"rev": "221ce6b2d999187044529f49da6554a92f740a96",
"src": "https://github.com/nvim-lualine/lualine.nvim"
},
"nvim-lspconfig": {
"rev": "bfcc0171a43f22afa61d927ffe9fcb6cb85dc99e",
"src": "https://github.com/neovim/nvim-lspconfig"
},
"nvim-web-devicons": {
"rev": "dfbfaa967a6f7ec50789bead7ef87e336c1fa63c",
"src": "https://github.com/nvim-tree/nvim-web-devicons"
},
"trouble.nvim": {
"rev": "bd67efe408d4816e25e8491cc5ad4088e708a69a",
"src": "https://github.com/folke/trouble.nvim"
},
"which-key.nvim": {
"rev": "3aab2147e74890957785941f0c1ad87d0a44c15a",
"src": "https://github.com/folke/which-key.nvim"
}
}
}
+2
View File
@@ -1,4 +1,6 @@
git
make
unzip
tree-sitter-cli
fzf
ripgrep