add nvim config (fix double-nested lua structure)
This commit is contained in:
50
nvim/.config/nvim/lua/autocmds.lua
Normal file
50
nvim/.config/nvim/lua/autocmds.lua
Normal file
@@ -0,0 +1,50 @@
|
||||
-- Standalone autocmds (migrated from NvChad)
|
||||
|
||||
local autocmd = vim.api.nvim_create_autocmd
|
||||
|
||||
autocmd({ "BufRead", "BufNewFile" }, { pattern = "*.wesl", command = "setfiletype wesl" })
|
||||
|
||||
-- Register wgsl as the treesitter language for wesl files
|
||||
vim.treesitter.language.register("wgsl", "wesl")
|
||||
|
||||
-- Terminal group
|
||||
local terminal_group = vim.api.nvim_create_augroup("terminal", { clear = true })
|
||||
|
||||
-- Auto-close terminal buffers on exit
|
||||
autocmd("TermClose", {
|
||||
group = terminal_group,
|
||||
command = "bdelete!"
|
||||
})
|
||||
|
||||
-- Start terminal in insert mode for autoscroll
|
||||
autocmd("TermOpen", {
|
||||
group = terminal_group,
|
||||
command = "startinsert"
|
||||
})
|
||||
|
||||
-- User event that loads after UIEnter + only if file buf is there
|
||||
-- This is used by plugins for lazy loading via "User FilePost" event
|
||||
autocmd({ "UIEnter", "BufReadPost", "BufNewFile" }, {
|
||||
group = vim.api.nvim_create_augroup("FilePost", { clear = true }),
|
||||
callback = function(args)
|
||||
local file = vim.api.nvim_buf_get_name(args.buf)
|
||||
local buftype = vim.api.nvim_get_option_value("buftype", { buf = args.buf })
|
||||
|
||||
if not vim.g.ui_entered and args.event == "UIEnter" then
|
||||
vim.g.ui_entered = true
|
||||
end
|
||||
|
||||
if file ~= "" and buftype ~= "nofile" and vim.g.ui_entered then
|
||||
vim.api.nvim_exec_autocmds("User", { pattern = "FilePost", modeline = false })
|
||||
vim.api.nvim_del_augroup_by_name "FilePost"
|
||||
|
||||
vim.schedule(function()
|
||||
vim.api.nvim_exec_autocmds("FileType", {})
|
||||
|
||||
if vim.g.editorconfig then
|
||||
require("editorconfig").config(args.buf)
|
||||
end
|
||||
end)
|
||||
end
|
||||
end,
|
||||
})
|
||||
103
nvim/.config/nvim/lua/configs/barbar.lua
Normal file
103
nvim/.config/nvim/lua/configs/barbar.lua
Normal file
@@ -0,0 +1,103 @@
|
||||
-- Barbar configuration with bearded-arc colors
|
||||
|
||||
local colors = {
|
||||
bg = "#1c2433", -- black (main bg)
|
||||
bg_inactive = "#232b3a", -- black2 (inactive tabs)
|
||||
fg = "#c3cfd9", -- base05
|
||||
fg_inactive = "#626a79", -- light_grey
|
||||
white = "#ABB7C1", -- white (active text)
|
||||
|
||||
selected_bg = "#303847", -- one_bg2 (selected tab bg)
|
||||
modified = "#3CEC85", -- green
|
||||
error = "#FF738A", -- red
|
||||
warn = "#EACD61", -- yellow
|
||||
info = "#69C3FF", -- blue
|
||||
hint = "#bd93ff", -- purple
|
||||
|
||||
nord_blue = "#6da4cd", -- accent color
|
||||
}
|
||||
|
||||
require("barbar").setup({
|
||||
animation = false,
|
||||
auto_hide = false,
|
||||
tabpages = true,
|
||||
clickable = true,
|
||||
focus_on_close = "left",
|
||||
|
||||
highlight_alternate = false,
|
||||
highlight_inactive_file_icons = false,
|
||||
highlight_visible = false,
|
||||
|
||||
icons = {
|
||||
buffer_index = false,
|
||||
buffer_number = false,
|
||||
button = "",
|
||||
diagnostics = {
|
||||
[vim.diagnostic.severity.ERROR] = { enabled = true, icon = " " },
|
||||
[vim.diagnostic.severity.WARN] = { enabled = false },
|
||||
[vim.diagnostic.severity.INFO] = { enabled = false },
|
||||
[vim.diagnostic.severity.HINT] = { enabled = false },
|
||||
},
|
||||
gitsigns = {
|
||||
added = { enabled = false },
|
||||
changed = { enabled = false },
|
||||
deleted = { enabled = false },
|
||||
},
|
||||
filetype = {
|
||||
custom_colors = false,
|
||||
enabled = false,
|
||||
},
|
||||
separator = { left = "▎", right = "" },
|
||||
separator_at_end = true,
|
||||
modified = { button = "●" },
|
||||
pinned = { button = " ", filename = true },
|
||||
preset = "default",
|
||||
alternate = { filetype = { enabled = false } },
|
||||
current = { buffer_index = false },
|
||||
inactive = { button = "" },
|
||||
visible = { modified = { buffer_number = false } },
|
||||
},
|
||||
|
||||
insert_at_end = false,
|
||||
insert_at_start = false,
|
||||
maximum_padding = 1,
|
||||
minimum_padding = 1,
|
||||
maximum_length = 15,
|
||||
minimum_length = 15, -- Set to same as maximum for uniform width
|
||||
|
||||
semantic_letters = true,
|
||||
sidebar_filetypes = {
|
||||
undotree = { text = "undotree" },
|
||||
},
|
||||
|
||||
no_name_title = nil,
|
||||
})
|
||||
|
||||
-- Set custom highlight groups to match bearded-arc theme
|
||||
vim.api.nvim_set_hl(0, "BufferCurrent", { fg = colors.white, bg = colors.bg, bold = true })
|
||||
vim.api.nvim_set_hl(0, "BufferCurrentIndex", { fg = colors.white, bg = colors.bg })
|
||||
vim.api.nvim_set_hl(0, "BufferCurrentMod", { fg = colors.modified, bg = colors.bg, bold = true })
|
||||
vim.api.nvim_set_hl(0, "BufferCurrentSign", { fg = colors.nord_blue, bg = colors.bg })
|
||||
vim.api.nvim_set_hl(0, "BufferCurrentTarget", { fg = colors.error, bg = colors.bg, bold = true })
|
||||
|
||||
vim.api.nvim_set_hl(0, "BufferVisible", { fg = colors.fg, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferVisibleIndex", { fg = colors.fg, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferVisibleMod", { fg = colors.modified, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferVisibleSign", { fg = colors.fg_inactive, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferVisibleTarget", { fg = colors.error, bg = colors.bg_inactive, bold = true })
|
||||
|
||||
vim.api.nvim_set_hl(0, "BufferInactive", { fg = colors.fg_inactive, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferInactiveIndex", { fg = colors.fg_inactive, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferInactiveMod", { fg = colors.modified, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferInactiveSign", { fg = colors.fg_inactive, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferInactiveTarget", { fg = colors.error, bg = colors.bg_inactive })
|
||||
|
||||
vim.api.nvim_set_hl(0, "BufferTabpages", { fg = colors.nord_blue, bg = colors.bg_inactive, bold = true })
|
||||
vim.api.nvim_set_hl(0, "BufferTabpageFill", { fg = colors.fg_inactive, bg = colors.bg_inactive })
|
||||
|
||||
vim.api.nvim_set_hl(0, "BufferOffset", { fg = colors.fg_inactive, bg = colors.bg_inactive })
|
||||
|
||||
-- Error diagnostics highlight
|
||||
vim.api.nvim_set_hl(0, "BufferCurrentERROR", { fg = colors.error, bg = colors.bg })
|
||||
vim.api.nvim_set_hl(0, "BufferVisibleERROR", { fg = colors.error, bg = colors.bg_inactive })
|
||||
vim.api.nvim_set_hl(0, "BufferInactiveERROR", { fg = colors.error, bg = colors.bg_inactive })
|
||||
20
nvim/.config/nvim/lua/configs/claudecode.lua
Normal file
20
nvim/.config/nvim/lua/configs/claudecode.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
-- Track which mode we're in (work or normal)
|
||||
vim.g.claude_mode = "normal"
|
||||
|
||||
local function get_claude_command()
|
||||
if vim.g.claude_mode == "work" then
|
||||
return {
|
||||
bin = "sh",
|
||||
bin_args = {
|
||||
"-c",
|
||||
"CLAUDE_CONFIG_DIR=~/.claude-work claude"
|
||||
},
|
||||
}
|
||||
else
|
||||
return {
|
||||
bin = "claude",
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
require("claudecode").setup(get_claude_command())
|
||||
15
nvim/.config/nvim/lua/configs/conform.lua
Normal file
15
nvim/.config/nvim/lua/configs/conform.lua
Normal file
@@ -0,0 +1,15 @@
|
||||
local options = {
|
||||
formatters_by_ft = {
|
||||
lua = { "stylua" },
|
||||
-- css = { "prettier" },
|
||||
-- html = { "prettier" },
|
||||
},
|
||||
|
||||
-- format_on_save = {
|
||||
-- -- These options will be passed to conform.format()
|
||||
-- timeout_ms = 500,
|
||||
-- lsp_fallback = true,
|
||||
-- },
|
||||
}
|
||||
|
||||
return options
|
||||
24
nvim/.config/nvim/lua/configs/csharp_ls.lua
Normal file
24
nvim/.config/nvim/lua/configs/csharp_ls.lua
Normal file
@@ -0,0 +1,24 @@
|
||||
return {
|
||||
-- Recognized filetypes for C#
|
||||
filetypes = { "cs", "vb" },
|
||||
|
||||
-- Root directory detection: looks for .sln, .csproj, or version control folders
|
||||
root_dir = function(fname)
|
||||
local util = require("lspconfig.util")
|
||||
return util.root_pattern("*.sln")(fname)
|
||||
or util.root_pattern("*.csproj")(fname)
|
||||
or util.root_pattern(".git", ".hg")(fname)
|
||||
or util.path.dirname(fname)
|
||||
end,
|
||||
|
||||
-- Additional settings for csharp_ls (expand as needed)
|
||||
settings = {
|
||||
csharp = {
|
||||
formatting = {
|
||||
enable = true, -- Enable formatting if supported
|
||||
},
|
||||
-- Add further csharp_ls settings here
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
123
nvim/.config/nvim/lua/configs/fzf.lua
Normal file
123
nvim/.config/nvim/lua/configs/fzf.lua
Normal file
@@ -0,0 +1,123 @@
|
||||
-- fzf-lua configuration with bearded-arc colors
|
||||
|
||||
require("fzf-lua").setup({
|
||||
"default-title",
|
||||
winopts = {
|
||||
height = 0.85,
|
||||
width = 0.80,
|
||||
row = 0.35,
|
||||
col = 0.50,
|
||||
border = "rounded",
|
||||
preview = {
|
||||
border = "rounded",
|
||||
wrap = "nowrap",
|
||||
hidden = "nohidden",
|
||||
vertical = "down:45%",
|
||||
horizontal = "right:60%",
|
||||
layout = "flex",
|
||||
flip_columns = 120,
|
||||
scrollbar = "float",
|
||||
},
|
||||
},
|
||||
fzf_opts = {
|
||||
["--no-scrollbar"] = true,
|
||||
["--info"] = "inline-right",
|
||||
},
|
||||
keymap = {
|
||||
builtin = {
|
||||
["<C-d>"] = "preview-page-down",
|
||||
["<C-u>"] = "preview-page-up",
|
||||
},
|
||||
fzf = {
|
||||
["ctrl-q"] = "select-all+accept",
|
||||
["tab"] = "down",
|
||||
["shift-tab"] = "up",
|
||||
},
|
||||
},
|
||||
files = {
|
||||
prompt = "Files❯ ",
|
||||
file_icons = true,
|
||||
git_icons = false,
|
||||
fd_opts = [[--color=never --type f --hidden --follow --exclude .git --exclude node_modules]],
|
||||
file_ignore_patterns = {"%.git$", "%.xml$" },
|
||||
},
|
||||
grep = {
|
||||
prompt = "Grep❯ ",
|
||||
input_prompt = "Grep For❯ ",
|
||||
file_icons = true,
|
||||
git_icons = false,
|
||||
rg_opts = "--column --line-number --no-heading --color=always --smart-case --max-columns=4096 -e",
|
||||
},
|
||||
oldfiles = {
|
||||
prompt = "History❯ ",
|
||||
cwd_only = false,
|
||||
stat_file = true,
|
||||
include_current_session = true,
|
||||
},
|
||||
buffers = {
|
||||
prompt = "Buffers❯ ",
|
||||
file_icons = true,
|
||||
color_icons = true,
|
||||
sort_lastused = true,
|
||||
},
|
||||
lsp = {
|
||||
prompt_postfix = "❯ ",
|
||||
file_icons = true,
|
||||
git_icons = false,
|
||||
lsp_icons = true,
|
||||
symbols = {
|
||||
prompt = "Symbols❯ ",
|
||||
async = true,
|
||||
symbol_icons = {
|
||||
File = " ",
|
||||
Module = " ",
|
||||
Namespace = " ",
|
||||
Package = " ",
|
||||
Class = " ",
|
||||
Method = " ",
|
||||
Property = " ",
|
||||
Field = " ",
|
||||
Constructor = " ",
|
||||
Enum = " ",
|
||||
Interface = " ",
|
||||
Function = " ",
|
||||
Variable = " ",
|
||||
Constant = " ",
|
||||
String = " ",
|
||||
Number = " ",
|
||||
Boolean = " ",
|
||||
Array = " ",
|
||||
Object = " ",
|
||||
Key = " ",
|
||||
Null = " ",
|
||||
EnumMember = " ",
|
||||
Struct = " ",
|
||||
Event = " ",
|
||||
Operator = " ",
|
||||
TypeParameter = " ",
|
||||
},
|
||||
},
|
||||
},
|
||||
diagnostics = {
|
||||
prompt = "Diagnostics❯ ",
|
||||
file_icons = true,
|
||||
git_icons = false,
|
||||
diag_icons = true,
|
||||
icon_padding = " ",
|
||||
severity_sort = true,
|
||||
severity_limit = nil,
|
||||
severity_bound = nil,
|
||||
fzf_opts = {
|
||||
["--tiebreak"] = "index",
|
||||
},
|
||||
signs = {
|
||||
["Error"] = { text = " ", texthl = "DiagnosticError" },
|
||||
["Warn"] = { text = " ", texthl = "DiagnosticWarn" },
|
||||
["Info"] = { text = " ", texthl = "DiagnosticInfo" },
|
||||
["Hint"] = { text = " ", texthl = "DiagnosticHint" },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Setup fzf-lua as vim.ui.select provider
|
||||
require("fzf-lua").register_ui_select()
|
||||
47
nvim/.config/nvim/lua/configs/lazy.lua
Normal file
47
nvim/.config/nvim/lua/configs/lazy.lua
Normal file
@@ -0,0 +1,47 @@
|
||||
return {
|
||||
defaults = { lazy = true },
|
||||
install = { colorscheme = { "nvchad" } },
|
||||
|
||||
ui = {
|
||||
icons = {
|
||||
ft = "",
|
||||
lazy = " ",
|
||||
loaded = "",
|
||||
not_loaded = "",
|
||||
},
|
||||
},
|
||||
|
||||
performance = {
|
||||
rtp = {
|
||||
disabled_plugins = {
|
||||
"2html_plugin",
|
||||
"tohtml",
|
||||
"getscript",
|
||||
"getscriptPlugin",
|
||||
"gzip",
|
||||
"logipat",
|
||||
"netrw",
|
||||
"netrwPlugin",
|
||||
"netrwSettings",
|
||||
"netrwFileHandlers",
|
||||
"matchit",
|
||||
"tar",
|
||||
"tarPlugin",
|
||||
"rrhelper",
|
||||
"spellfile_plugin",
|
||||
"vimball",
|
||||
"vimballPlugin",
|
||||
"zip",
|
||||
"zipPlugin",
|
||||
"tutor",
|
||||
"rplugin",
|
||||
"syntax",
|
||||
"synmenu",
|
||||
"optwin",
|
||||
"compiler",
|
||||
"bugreport",
|
||||
"ftplugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
138
nvim/.config/nvim/lua/configs/lspconfig.lua
Normal file
138
nvim/.config/nvim/lua/configs/lspconfig.lua
Normal file
@@ -0,0 +1,138 @@
|
||||
-- LSP capabilities (with blink.cmp completion support)
|
||||
local capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
|
||||
capabilities.textDocument.completion.completionItem = {
|
||||
documentationFormat = { "markdown", "plaintext" },
|
||||
snippetSupport = true,
|
||||
preselectSupport = true,
|
||||
insertReplaceSupport = true,
|
||||
labelDetailsSupport = true,
|
||||
deprecatedSupport = true,
|
||||
commitCharactersSupport = true,
|
||||
tagSupport = { valueSet = { 1 } },
|
||||
resolveSupport = {
|
||||
properties = {
|
||||
"documentation",
|
||||
"detail",
|
||||
"additionalTextEdits",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
-- on_attach function with LSP keybindings
|
||||
local on_attach = function(client, bufnr)
|
||||
local function opts(desc)
|
||||
return { buffer = bufnr, desc = "LSP " .. desc }
|
||||
end
|
||||
|
||||
local map = vim.keymap.set
|
||||
|
||||
-- Navigation
|
||||
map("n", "gD", vim.lsp.buf.declaration, opts "Go to declaration")
|
||||
map("n", "gd", vim.lsp.buf.definition, opts "Go to definition")
|
||||
map("n", "gi", vim.lsp.buf.implementation, opts "Go to implementation")
|
||||
map("n", "gr", vim.lsp.buf.references, opts "Show references")
|
||||
map("n", "<leader>sh", vim.lsp.buf.signature_help, opts "Show signature help")
|
||||
map("n", "<leader>D", vim.lsp.buf.type_definition, opts "Go to type definition")
|
||||
|
||||
-- Workspace
|
||||
map("n", "<leader>wa", vim.lsp.buf.add_workspace_folder, opts "Add workspace folder")
|
||||
map("n", "<leader>wr", vim.lsp.buf.remove_workspace_folder, opts "Remove workspace folder")
|
||||
map("n", "<leader>wl", function()
|
||||
print(vim.inspect(vim.lsp.buf.list_workspace_folders()))
|
||||
end, opts "List workspace folders")
|
||||
|
||||
-- Actions
|
||||
map("n", "<leader>ra", vim.lsp.buf.rename, opts "Rename symbol")
|
||||
map({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, opts "Code action")
|
||||
|
||||
-- Diagnostics (already mapped in mappings.lua, but keeping for consistency)
|
||||
map("n", "[d", vim.diagnostic.goto_prev, opts "Go to previous diagnostic")
|
||||
map("n", "]d", vim.diagnostic.goto_next, opts "Go to next diagnostic")
|
||||
map("n", "<leader>q", vim.diagnostic.setloclist, opts "Set loclist")
|
||||
end
|
||||
|
||||
-- Disable semantic tokens (performance optimization)
|
||||
local on_init = function(client, _)
|
||||
if client.supports_method "textDocument/semanticTokens" then
|
||||
client.server_capabilities.semanticTokensProvider = nil
|
||||
end
|
||||
end
|
||||
|
||||
local servers = {
|
||||
rust_analyzer = {
|
||||
filetypes = { "rust" },
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
completion = {
|
||||
addCallParenthesis = true,
|
||||
addCallArgumentSnippets = false,
|
||||
postfix = {
|
||||
enabled = false,
|
||||
},
|
||||
},
|
||||
callInfo = {
|
||||
full = false,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
csharp_ls = {
|
||||
filetypes = { "cs" },
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
},
|
||||
clangd = {
|
||||
filetypes = { "c", "cpp", "objc", "objcpp" },
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
},
|
||||
glsl_analyzer = {
|
||||
filetypes = { "glsl" },
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
},
|
||||
wgsl_analyzer = {
|
||||
filetypes = { "wgsl", "wesl" },
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
},
|
||||
pylsp = {
|
||||
filetypes = { "python" },
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
},
|
||||
ron_lsp = {
|
||||
cmd = { "ron-lsp" },
|
||||
filetypes = { "ron" },
|
||||
root_dir = function(fname)
|
||||
local util = require("lspconfig.util")
|
||||
return util.root_pattern("Cargo.toml", ".git")(fname) or vim.loop.cwd()
|
||||
end,
|
||||
on_attach = on_attach,
|
||||
on_init = on_init,
|
||||
capabilities = capabilities,
|
||||
},
|
||||
}
|
||||
|
||||
for server, opts in pairs(servers) do
|
||||
vim.lsp.config(server, opts)
|
||||
if opts.filetypes then
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = opts.filetypes,
|
||||
callback = function()
|
||||
vim.lsp.enable(server)
|
||||
end,
|
||||
})
|
||||
else
|
||||
vim.lsp.enable(server)
|
||||
end
|
||||
end
|
||||
211
nvim/.config/nvim/lua/configs/lualine.lua
Normal file
211
nvim/.config/nvim/lua/configs/lualine.lua
Normal file
@@ -0,0 +1,211 @@
|
||||
-- Lualine configuration with bearded-arc theme colors
|
||||
local colors = {
|
||||
bg = "#232b3a", -- statusline_bg
|
||||
fg = "#c3cfd9", -- base05
|
||||
white = "#ABB7C1", -- white
|
||||
black = "#1c2433", -- black
|
||||
grey = "#444c5b", -- grey
|
||||
light_grey = "#626a79", -- light_grey
|
||||
|
||||
-- Mode colors
|
||||
nord_blue = "#6da4cd", -- normal mode
|
||||
cyan = "#22ECDB", -- visual mode
|
||||
dark_purple = "#B78AFF", -- insert mode
|
||||
green = "#3CEC85", -- success/terminal
|
||||
red = "#FF738A", -- errors/replace
|
||||
yellow = "#EACD61", -- warnings
|
||||
orange = "#FF955C", -- command
|
||||
blue = "#69C3FF", -- info
|
||||
|
||||
-- Section backgrounds
|
||||
lightbg = "#303847", -- file section bg
|
||||
}
|
||||
|
||||
-- Custom theme based on bearded-arc
|
||||
local bearded_arc_theme = {
|
||||
normal = {
|
||||
a = { bg = colors.nord_blue, fg = colors.black, gui = "bold" },
|
||||
b = { bg = colors.lightbg, fg = colors.white },
|
||||
c = { bg = colors.bg, fg = colors.fg },
|
||||
},
|
||||
insert = {
|
||||
a = { bg = colors.dark_purple, fg = colors.black, gui = "bold" },
|
||||
b = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
visual = {
|
||||
a = { bg = colors.cyan, fg = colors.black, gui = "bold" },
|
||||
b = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
replace = {
|
||||
a = { bg = colors.red, fg = colors.black, gui = "bold" },
|
||||
b = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
command = {
|
||||
a = { bg = colors.orange, fg = colors.black, gui = "bold" },
|
||||
b = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
terminal = {
|
||||
a = { bg = colors.green, fg = colors.black, gui = "bold" },
|
||||
b = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
inactive = {
|
||||
a = { bg = colors.bg, fg = colors.grey },
|
||||
b = { bg = colors.bg, fg = colors.grey },
|
||||
c = { bg = colors.bg, fg = colors.grey },
|
||||
},
|
||||
}
|
||||
|
||||
-- Custom component for LSP status
|
||||
local function lsp_status()
|
||||
local clients = vim.lsp.get_clients({ bufnr = 0 })
|
||||
if #clients == 0 then
|
||||
return ""
|
||||
end
|
||||
|
||||
local client_names = {}
|
||||
for _, client in ipairs(clients) do
|
||||
table.insert(client_names, client.name)
|
||||
end
|
||||
|
||||
return " " .. table.concat(client_names, ", ")
|
||||
end
|
||||
|
||||
-- Custom component for LSP diagnostics count
|
||||
local function lsp_diagnostics()
|
||||
local error_count = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.ERROR })
|
||||
local warn_count = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.WARN })
|
||||
local info_count = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.INFO })
|
||||
local hint_count = #vim.diagnostic.get(0, { severity = vim.diagnostic.severity.HINT })
|
||||
|
||||
local parts = {}
|
||||
if error_count > 0 then
|
||||
table.insert(parts, string.format("%%#DiagnosticError# %d", error_count))
|
||||
end
|
||||
if warn_count > 0 then
|
||||
table.insert(parts, string.format("%%#DiagnosticWarn# %d", warn_count))
|
||||
end
|
||||
if info_count > 0 then
|
||||
table.insert(parts, string.format("%%#DiagnosticInfo# %d", info_count))
|
||||
end
|
||||
if hint_count > 0 then
|
||||
table.insert(parts, string.format("%%#DiagnosticHint# %d", hint_count))
|
||||
end
|
||||
|
||||
return table.concat(parts, " ")
|
||||
end
|
||||
|
||||
-- Custom component for git status
|
||||
local function git_status()
|
||||
local gitsigns = vim.b.gitsigns_status_dict
|
||||
if not gitsigns then
|
||||
return ""
|
||||
end
|
||||
|
||||
local parts = {}
|
||||
if gitsigns.added and gitsigns.added > 0 then
|
||||
table.insert(parts, string.format("%%#GitSignsAdd#+%d", gitsigns.added))
|
||||
end
|
||||
if gitsigns.changed and gitsigns.changed > 0 then
|
||||
table.insert(parts, string.format("%%#GitSignsChange#~%d", gitsigns.changed))
|
||||
end
|
||||
if gitsigns.removed and gitsigns.removed > 0 then
|
||||
table.insert(parts, string.format("%%#GitSignsDelete#-%d", gitsigns.removed))
|
||||
end
|
||||
|
||||
return table.concat(parts, " ")
|
||||
end
|
||||
|
||||
require("lualine").setup({
|
||||
options = {
|
||||
theme = bearded_arc_theme,
|
||||
component_separators = { left = "", right = "" },
|
||||
section_separators = { left = "", right = "" },
|
||||
disabled_filetypes = {
|
||||
statusline = { "alpha", "dashboard", "NvimTree", "neo-tree" },
|
||||
winbar = {},
|
||||
},
|
||||
ignore_focus = {},
|
||||
always_divide_middle = true,
|
||||
globalstatus = true,
|
||||
refresh = {
|
||||
statusline = 1000,
|
||||
tabline = 1000,
|
||||
winbar = 1000,
|
||||
},
|
||||
},
|
||||
sections = {
|
||||
lualine_a = {
|
||||
{
|
||||
"mode",
|
||||
fmt = function(str)
|
||||
return str:sub(1, 1) -- Show only first letter (N, I, V, etc.)
|
||||
end,
|
||||
},
|
||||
},
|
||||
lualine_b = {
|
||||
{
|
||||
"branch",
|
||||
icon = "",
|
||||
color = { fg = colors.light_grey },
|
||||
},
|
||||
{
|
||||
git_status,
|
||||
color = { bg = colors.lightbg },
|
||||
},
|
||||
},
|
||||
lualine_c = {
|
||||
{
|
||||
"filename",
|
||||
path = 1, -- Relative path
|
||||
symbols = {
|
||||
modified = " ",
|
||||
readonly = " ",
|
||||
unnamed = "[No Name]",
|
||||
newfile = " ",
|
||||
},
|
||||
color = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
{
|
||||
lsp_diagnostics,
|
||||
color = { bg = colors.bg },
|
||||
},
|
||||
},
|
||||
lualine_x = {
|
||||
{
|
||||
lsp_status,
|
||||
color = { fg = colors.nord_blue, bg = colors.bg },
|
||||
},
|
||||
{
|
||||
"filetype",
|
||||
colored = true,
|
||||
icon_only = false,
|
||||
icon = { align = "right" },
|
||||
},
|
||||
},
|
||||
lualine_y = {
|
||||
{
|
||||
"progress",
|
||||
color = { bg = colors.lightbg, fg = colors.white },
|
||||
},
|
||||
},
|
||||
lualine_z = {
|
||||
{
|
||||
"location",
|
||||
icon = "",
|
||||
color = { bg = colors.green, fg = colors.black },
|
||||
},
|
||||
},
|
||||
},
|
||||
inactive_sections = {
|
||||
lualine_a = {},
|
||||
lualine_b = {},
|
||||
lualine_c = { "filename" },
|
||||
lualine_x = { "location" },
|
||||
lualine_y = {},
|
||||
lualine_z = {},
|
||||
},
|
||||
tabline = {},
|
||||
winbar = {},
|
||||
inactive_winbar = {},
|
||||
extensions = { "lazy", "mason" },
|
||||
})
|
||||
174
nvim/.config/nvim/lua/mappings.lua
Normal file
174
nvim/.config/nvim/lua/mappings.lua
Normal file
@@ -0,0 +1,174 @@
|
||||
-- Standalone mappings (migrated from NvChad + custom)
|
||||
|
||||
local map = vim.keymap.set
|
||||
|
||||
-- === Basic Mappings ===
|
||||
|
||||
-- Command mode
|
||||
map("n", ";", ":", { desc = "CMD enter command mode" })
|
||||
map("i", "jk", "<ESC>", { desc = "Escape insert mode" })
|
||||
|
||||
-- Insert mode navigation
|
||||
map("i", "<C-b>", "<ESC>^i", { desc = "Move beginning of line" })
|
||||
map("i", "<C-e>", "<End>", { desc = "Move end of line" })
|
||||
map("i", "<C-h>", "<Left>", { desc = "Move left" })
|
||||
map("i", "<C-l>", "<Right>", { desc = "Move right" })
|
||||
|
||||
-- Window navigation
|
||||
map("n", "<C-h>", "<C-w>h", { desc = "Switch window left" })
|
||||
map("n", "<C-l>", "<C-w>l", { desc = "Switch window right" })
|
||||
|
||||
-- General
|
||||
map("n", "<Esc>", "<cmd>noh<CR>", { desc = "Clear highlights" })
|
||||
map("n", "<C-s>", "<cmd>w<CR>", { desc = "Save file" })
|
||||
map("n", "<C-c>", "<cmd>%y+<CR>", { desc = "Copy whole file" })
|
||||
|
||||
-- Toggle options
|
||||
map("n", "<leader>n", "<cmd>set nu!<CR>", { desc = "Toggle line number" })
|
||||
map("n", "<leader>rn", "<cmd>set rnu!<CR>", { desc = "Toggle relative number" })
|
||||
|
||||
-- Format
|
||||
map({ "n", "x" }, "<leader>fm", function()
|
||||
require("conform").format { lsp_fallback = true }
|
||||
end, { desc = "Format file" })
|
||||
|
||||
-- Comment
|
||||
map("n", "<leader>/", "gcc", { desc = "Toggle comment", remap = true })
|
||||
map("v", "<leader>/", "gc", { desc = "Toggle comment", remap = true })
|
||||
|
||||
-- === LSP Mappings ===
|
||||
|
||||
map("n", "<leader>ds", vim.diagnostic.setloclist, { desc = "LSP diagnostic loclist" })
|
||||
|
||||
-- === Barbar buffer navigation ===
|
||||
|
||||
map("n", "<Tab>", "<cmd>BufferNext<cr>", { desc = "Next buffer" })
|
||||
map("n", "<S-Tab>", "<cmd>BufferPrevious<cr>", { desc = "Previous buffer" })
|
||||
map("n", "<leader>x", "<cmd>BufferClose<cr>", { desc = "Close buffer" })
|
||||
map("n", "<leader>X", "<cmd>BufferClose!<cr>", { desc = "Force close buffer" })
|
||||
map("n", "<leader>bn", "<cmd>enew<cr>", { desc = "New buffer" })
|
||||
map("n", "<leader>bj", "<cmd>BufferPick<cr>", { desc = "Jump to buffer" })
|
||||
map("n", "<leader>bp", "<cmd>BufferPin<cr>", { desc = "Pin/unpin buffer" })
|
||||
|
||||
map("n", "<A-,>", "<cmd>BufferPrevious<cr>", { desc = "Previous buffer" })
|
||||
map("n", "<A-.>", "<cmd>BufferNext<cr>", { desc = "Next buffer" })
|
||||
map("n", "<A-<>", "<cmd>BufferMovePrevious<cr>", { desc = "Move buffer left" })
|
||||
map("n", "<A->>", "<cmd>BufferMoveNext<cr>", { desc = "Move buffer right" })
|
||||
map("n", "<leader>bc", "<cmd>BufferCloseAllButCurrent<cr>", { desc = "Close all but current" })
|
||||
map("n", "<leader>bC", "<cmd>BufferCloseAllButPinned<cr>", { desc = "Close all but pinned" })
|
||||
|
||||
map("n", "<A-1>", "<cmd>BufferGoto 1<cr>", { desc = "Go to buffer 1" })
|
||||
map("n", "<A-2>", "<cmd>BufferGoto 2<cr>", { desc = "Go to buffer 2" })
|
||||
map("n", "<A-3>", "<cmd>BufferGoto 3<cr>", { desc = "Go to buffer 3" })
|
||||
map("n", "<A-4>", "<cmd>BufferGoto 4<cr>", { desc = "Go to buffer 4" })
|
||||
map("n", "<A-5>", "<cmd>BufferGoto 5<cr>", { desc = "Go to buffer 5" })
|
||||
map("n", "<A-6>", "<cmd>BufferGoto 6<cr>", { desc = "Go to buffer 6" })
|
||||
map("n", "<A-7>", "<cmd>BufferGoto 7<cr>", { desc = "Go to buffer 7" })
|
||||
map("n", "<A-8>", "<cmd>BufferGoto 8<cr>", { desc = "Go to buffer 8" })
|
||||
map("n", "<A-9>", "<cmd>BufferGoto 9<cr>", { desc = "Go to buffer 9" })
|
||||
map("n", "<A-0>", "<cmd>BufferLast<cr>", { desc = "Go to last buffer" })
|
||||
|
||||
-- === fzf-lua ===
|
||||
|
||||
local fzf = require('fzf-lua')
|
||||
|
||||
-- File finding
|
||||
map("n", "<leader>ff", function() fzf.files() end, { desc = "Find files" })
|
||||
map("n", "<leader>fa", function() fzf.files({ cmd = "fd --type f --hidden --follow --exclude .git" }) end, { desc = "Find all files" })
|
||||
map("n", "<leader>fo", function() fzf.oldfiles() end, { desc = "Recent files" })
|
||||
map("n", "<leader>fb", function() fzf.buffers() end, { desc = "Find buffers" })
|
||||
|
||||
-- Grep
|
||||
map("n", "<leader>fw", function() fzf.live_grep() end, { desc = "Live grep" })
|
||||
map("n", "<leader>fz", function() fzf.lgrep_curbuf() end, { desc = "Find in current buffer" })
|
||||
|
||||
-- Git
|
||||
map("n", "<leader>cm", function() fzf.git_commits() end, { desc = "Git commits" })
|
||||
map("n", "<leader>gt", function() fzf.git_status() end, { desc = "Git status" })
|
||||
|
||||
-- Other
|
||||
map("n", "<leader>fh", function() fzf.help_tags() end, { desc = "Help tags" })
|
||||
map("n", "<leader>ma", function() fzf.marks() end, { desc = "Marks" })
|
||||
|
||||
-- LSP
|
||||
map('n', '<leader>fs', function() fzf.lsp_document_symbols() end, { desc = 'Document symbols' })
|
||||
map('n', '<leader>fd', function() fzf.diagnostics_document({ severity_limit = vim.diagnostic.severity.ERROR }) end, { desc = "Buffer diagnostics" })
|
||||
map('n', '<leader>fD', function() fzf.diagnostics_workspace({ severity_limit = vim.diagnostic.severity.ERROR }) end, { desc = "Workspace diagnostics" })
|
||||
map('n', '<leader>fr', function() fzf.lsp_references() end, { desc = 'References' })
|
||||
map('n', '<leader>fW', function() vim.diagnostic.open_float() end, { desc = "Open diagnostics window" })
|
||||
map("n", "<leader>ca", function() vim.lsp.buf.code_action() end, { desc = 'Code action'})
|
||||
|
||||
-- === Themery ===
|
||||
|
||||
map("n", "<leader>th", "<cmd>Themery<CR>", { desc = "Theme switcher" })
|
||||
|
||||
-- === WhichKey ===
|
||||
|
||||
map("n", "<leader>wK", "<cmd>WhichKey <CR>", { desc = "Show all keymaps" })
|
||||
map("n", "<leader>wk", function()
|
||||
vim.cmd("WhichKey " .. vim.fn.input "WhichKey: ")
|
||||
end, { desc = "Query lookup" })
|
||||
|
||||
-- === NvimTree ===
|
||||
|
||||
map("n", "<C-n>", "<cmd>NvimTreeToggle<CR>", { desc = "Toggle nvimtree" })
|
||||
map("n", "<leader>e", "<cmd>NvimTreeFocus<CR>", { desc = "Focus nvimtree" })
|
||||
|
||||
-- === VGit ===
|
||||
|
||||
map('n', '<C-k>', function() require('vgit').hunk_up() end, { desc = 'Previous hunk' })
|
||||
map('n', '<C-j>', function() require('vgit').hunk_down() end, { desc = 'Next hunk' })
|
||||
map('n', '<leader>gs', function() require('vgit').buffer_hunk_stage() end, { desc = 'Stage hunk' })
|
||||
map('n', '<leader>gr', function() require('vgit').buffer_hunk_reset() end, { desc = 'Reset hunk' })
|
||||
map('n', '<leader>gp', function() require('vgit').buffer_hunk_preview() end, { desc = 'Preview hunk' })
|
||||
map('n', '<leader>gb', function() require('vgit').buffer_blame_preview() end, { desc = 'Blame buffer' })
|
||||
map('n', '<leader>gf', function() require('vgit').buffer_diff_preview() end, { desc = 'Show buffer diff' })
|
||||
map('n', '<leader>gh', function() require('vgit').buffer_history_preview() end, { desc = 'Show buffer history' })
|
||||
map('n', '<leader>gu', function() require('vgit').buffer_reset() end, { desc = 'Reset buffer' })
|
||||
map('n', '<leader>gx', function() require('vgit').toggle_diff_preference() end, { desc = 'Toggle diff view' })
|
||||
map('n', '<leader>gd', function() require('vgit').project_diff_preview() end, { desc = 'Show project diff' })
|
||||
|
||||
-- === Custom scrolling ===
|
||||
|
||||
map("n", "<C-Up>", "10k", { remap = true })
|
||||
map("n", "<C-Down>", "10j", { remap = true })
|
||||
|
||||
|
||||
-- === Move lines ===
|
||||
|
||||
map("n", "ø", ":m -2<CR>==", { desc = "Move line up" })
|
||||
map("v", "ø", ":'<,'>m '<-2<CR>gv=gv", { desc = "Move selection up" })
|
||||
map("n", "æ", ":m +1<CR>==", { desc = "Move line down" })
|
||||
map("v", "æ", ":'<,'>m '>+1<CR>gv=gv", { desc = "Move selection down" })
|
||||
|
||||
-- === Cargo ===
|
||||
|
||||
map("n", "<leader>cr", function()
|
||||
vim.cmd("vsplit")
|
||||
vim.cmd("terminal cargo run")
|
||||
end, { desc = "Cargo run in terminal" })
|
||||
|
||||
map("n", "<leader>cb", function()
|
||||
vim.cmd("vsplit")
|
||||
vim.cmd("terminal cargo build")
|
||||
end, { desc = "Cargo build in terminal" })
|
||||
|
||||
-- === Claude Code ===
|
||||
|
||||
map("n", "<leader>cc", "<cmd>ClaudeCodeAdd %<cr>", { desc = "Add current file to Claude" })
|
||||
map("v", "<leader>cc", "<cmd>ClaudeCodeSend<cr>", { desc = "Send to Claude Code" })
|
||||
|
||||
-- Create command for Claude context with range support
|
||||
vim.api.nvim_create_user_command("ClaudeContext", function(opts)
|
||||
local filepath = vim.fn.fnamemodify(vim.fn.expand("%"), ":.")
|
||||
local context = string.format("@%s#L%d-%d", filepath, opts.line1, opts.line2)
|
||||
vim.fn.setreg("+", context)
|
||||
vim.notify("Copied: " .. context, vim.log.levels.INFO)
|
||||
end, { range = true })
|
||||
|
||||
map("v", "<leader>cy", ":ClaudeContext<CR>", { desc = "Copy selection as Claude Code context" })
|
||||
|
||||
map("n", "<leader>ct", function()
|
||||
vim.g.claude_mode = vim.g.claude_mode == "work" and "normal" or "work"
|
||||
vim.notify("Claude mode: " .. vim.g.claude_mode, vim.log.levels.INFO)
|
||||
end, { desc = "Toggle Claude mode (work/normal)" })
|
||||
69
nvim/.config/nvim/lua/options.lua
Normal file
69
nvim/.config/nvim/lua/options.lua
Normal file
@@ -0,0 +1,69 @@
|
||||
-- Standalone options (migrated from NvChad)
|
||||
|
||||
local opt = vim.opt
|
||||
local o = vim.o
|
||||
local g = vim.g
|
||||
|
||||
-- UI
|
||||
o.laststatus = 3 -- Global statusline
|
||||
o.showmode = false -- Don't show mode (statusline handles it)
|
||||
o.cursorline = true -- Highlight current line
|
||||
o.cursorlineopt = "number" -- Only highlight line number
|
||||
|
||||
-- Clipboard
|
||||
o.clipboard = "unnamedplus" -- Use system clipboard
|
||||
|
||||
-- Indenting
|
||||
o.expandtab = true -- Use spaces instead of tabs
|
||||
o.shiftwidth = 2 -- Indent width
|
||||
o.smartindent = true -- Smart autoindenting
|
||||
o.tabstop = 2 -- Tab width
|
||||
o.softtabstop = 2 -- Backspace removes 2 spaces
|
||||
|
||||
-- UI elements
|
||||
opt.fillchars = { eob = " " } -- Hide ~ on empty lines
|
||||
o.ignorecase = true -- Ignore case in search
|
||||
o.smartcase = true -- Case-sensitive if uppercase in search
|
||||
o.mouse = "a" -- Enable mouse
|
||||
|
||||
-- Numbers
|
||||
o.number = true -- Show line numbers
|
||||
o.numberwidth = 2 -- Line number column width
|
||||
o.ruler = false -- Don't show cursor position (statusline handles it)
|
||||
|
||||
-- Disable nvim intro
|
||||
opt.shortmess:append "sI"
|
||||
|
||||
-- Sign column
|
||||
o.signcolumn = "yes" -- Always show sign column
|
||||
|
||||
-- Splits
|
||||
o.splitbelow = true -- Horizontal splits go below
|
||||
o.splitright = true -- Vertical splits go right
|
||||
|
||||
-- Timeouts
|
||||
o.timeoutlen = 400 -- Time to wait for mapped sequence
|
||||
|
||||
-- Files
|
||||
o.undofile = true -- Persistent undo
|
||||
|
||||
-- Update time (used by gitsigns and swap file)
|
||||
o.updatetime = 250
|
||||
|
||||
-- Navigation
|
||||
opt.whichwrap:append "<>[]hl" -- Move to next/prev line with these keys
|
||||
|
||||
-- Disable unused providers (performance)
|
||||
g.loaded_node_provider = 0
|
||||
g.loaded_python3_provider = 0
|
||||
g.loaded_perl_provider = 0
|
||||
g.loaded_ruby_provider = 0
|
||||
|
||||
-- Add Mason binaries to PATH
|
||||
local is_windows = vim.fn.has "win32" ~= 0
|
||||
local sep = is_windows and "\\" or "/"
|
||||
local delim = is_windows and ";" or ":"
|
||||
vim.env.PATH = table.concat({ vim.fn.stdpath "data", "mason", "bin" }, sep) .. delim .. vim.env.PATH
|
||||
|
||||
-- User overrides
|
||||
o.scrolloff = 10 -- Keep 10 lines visible above/below cursor
|
||||
138
nvim/.config/nvim/lua/plugins/coding.lua
Normal file
138
nvim/.config/nvim/lua/plugins/coding.lua
Normal file
@@ -0,0 +1,138 @@
|
||||
-- LSP, completion, treesitter, and code formatting
|
||||
return {
|
||||
-- LSP server manager
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
cmd = { "Mason", "MasonInstall", "MasonUninstall", "MasonUpdate" },
|
||||
opts = {
|
||||
PATH = "skip",
|
||||
ui = {
|
||||
icons = {
|
||||
package_pending = " ",
|
||||
package_installed = " ",
|
||||
package_uninstalled = " ",
|
||||
},
|
||||
},
|
||||
max_concurrent_installers = 10,
|
||||
},
|
||||
},
|
||||
|
||||
-- Bridge between mason and lspconfig
|
||||
{
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
dependencies = { "williamboman/mason.nvim" },
|
||||
},
|
||||
|
||||
-- LSP configuration
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
event = "User FilePost",
|
||||
config = function()
|
||||
require "configs.lspconfig"
|
||||
end,
|
||||
},
|
||||
|
||||
-- Syntax highlighting
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
cmd = { "TSInstall", "TSBufEnable", "TSBufDisable", "TSModuleInfo" },
|
||||
build = ":TSUpdate",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"lua", "vim", "vimdoc",
|
||||
"rust", "c", "cpp", "glsl", "wgsl", "python",
|
||||
},
|
||||
highlight = {
|
||||
enable = true,
|
||||
use_languagetree = true,
|
||||
},
|
||||
indent = { enable = false },
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("nvim-treesitter.configs").setup(opts)
|
||||
end,
|
||||
},
|
||||
|
||||
-- Completion engine (load on insert or command mode for faster startup)
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
version = "1.*",
|
||||
event = { "InsertEnter", "CmdlineEnter" },
|
||||
dependencies = {
|
||||
"saghen/blink.compat",
|
||||
optional = true,
|
||||
opts = {},
|
||||
},
|
||||
opts = {
|
||||
keymap = {
|
||||
preset = 'none',
|
||||
['<Tab>'] = { 'select_next', 'fallback' },
|
||||
['<S-Tab>'] = { 'select_prev', 'fallback' },
|
||||
['<Esc>'] = { 'hide', 'fallback' },
|
||||
['<CR>'] = { 'accept', 'fallback' },
|
||||
['<C-space>'] = { 'show', 'show_documentation', 'hide_documentation' },
|
||||
},
|
||||
appearance = {
|
||||
use_nvim_cmp_as_default = true,
|
||||
nerd_font_variant = 'mono'
|
||||
},
|
||||
signature = {
|
||||
enabled = true,
|
||||
},
|
||||
completion = {
|
||||
menu = { border = "rounded" },
|
||||
list = { selection = { auto_insert = false } },
|
||||
},
|
||||
sources = {
|
||||
transform_items = function(_, items)
|
||||
return vim.tbl_filter(function(item)
|
||||
return item.kind ~= require('blink.cmp.types').CompletionItemKind.Snippet
|
||||
end, items)
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Inline diagnostic messages
|
||||
{
|
||||
"rachartier/tiny-inline-diagnostic.nvim",
|
||||
event = "VeryLazy",
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require('tiny-inline-diagnostic').setup({
|
||||
preset = "powerline",
|
||||
})
|
||||
vim.diagnostic.config({
|
||||
virtual_text = false,
|
||||
severity_sort = true,
|
||||
})
|
||||
end
|
||||
},
|
||||
|
||||
-- Code formatter
|
||||
{
|
||||
'stevearc/conform.nvim',
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
wgsl = { 'wgslfmt' },
|
||||
wesl = { 'wgslfmt' },
|
||||
},
|
||||
formatters = {
|
||||
wgslfmt = {
|
||||
command = 'wgslfmt',
|
||||
args = { '-' },
|
||||
stdin = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Filetype-specific plugins
|
||||
{
|
||||
"elkowar/yuck.vim",
|
||||
ft = "yuck",
|
||||
},
|
||||
-- Disabled plugins
|
||||
{ "hrsh7th/nvim-cmp", enabled = false },
|
||||
}
|
||||
30
nvim/.config/nvim/lua/plugins/init.lua
Normal file
30
nvim/.config/nvim/lua/plugins/init.lua
Normal file
@@ -0,0 +1,30 @@
|
||||
-- Core editor plugins
|
||||
return {
|
||||
-- Keybinding helper (lazy load on first key after leader)
|
||||
{
|
||||
"folke/which-key.nvim",
|
||||
event = "VeryLazy",
|
||||
},
|
||||
|
||||
-- Motion plugin (s/S for jumping) - load on key press
|
||||
{
|
||||
url = "https://codeberg.org/andyg/leap.nvim",
|
||||
keys = {
|
||||
{ "s", mode = { "n", "x", "o" }, desc = "Leap forward" },
|
||||
{ "S", mode = { "n", "x", "o" }, desc = "Leap backward" },
|
||||
},
|
||||
config = function()
|
||||
vim.keymap.set({'n', 'x', 'o'}, 's', '<Plug>(leap-forward)')
|
||||
vim.keymap.set({'n', 'x', 'o'}, 'S', '<Plug>(leap-backward)')
|
||||
end,
|
||||
},
|
||||
|
||||
-- Session management (defer loading)
|
||||
{
|
||||
"rmagatti/auto-session",
|
||||
event = "VimEnter",
|
||||
opts = {
|
||||
suppressed_dirs = { "~/", "~/Projects", "~/Downloads", "/" },
|
||||
},
|
||||
},
|
||||
}
|
||||
83
nvim/.config/nvim/lua/plugins/tools.lua
Normal file
83
nvim/.config/nvim/lua/plugins/tools.lua
Normal file
@@ -0,0 +1,83 @@
|
||||
-- Git, fuzzy finding, and file navigation
|
||||
return {
|
||||
-- Git signs in gutter
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
event = "User FilePost",
|
||||
opts = {
|
||||
signs = {
|
||||
add = { text = "│" },
|
||||
change = { text = "│" },
|
||||
delete = { text = "" },
|
||||
topdelete = { text = "‾" },
|
||||
changedelete = { text = "" },
|
||||
untracked = { text = "┆" },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Advanced git integration (defer until file is loaded)
|
||||
{
|
||||
'tanvirtin/vgit.nvim',
|
||||
dependencies = { 'nvim-lua/plenary.nvim', 'nvim-tree/nvim-web-devicons' },
|
||||
event = 'User FilePost',
|
||||
config = function()
|
||||
require("vgit").setup({
|
||||
settings = {
|
||||
live_blame = {
|
||||
enabled = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Fuzzy finder
|
||||
{
|
||||
"ibhagwan/fzf-lua",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("configs.fzf")
|
||||
end,
|
||||
},
|
||||
|
||||
-- File manager
|
||||
{
|
||||
"mikavilpas/yazi.nvim",
|
||||
version = "*",
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
{ "nvim-lua/plenary.nvim", lazy = true },
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"<leader>-",
|
||||
mode = { "n", "v" },
|
||||
"<cmd>Yazi<cr>",
|
||||
desc = "Open yazi at current file",
|
||||
},
|
||||
{
|
||||
"<C-y>",
|
||||
"<cmd>Yazi<cr>",
|
||||
desc = "Open yazi at current file",
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
open_for_directories = false,
|
||||
keymaps = {
|
||||
show_help = "<f1>",
|
||||
},
|
||||
},
|
||||
init = function()
|
||||
vim.g.loaded_netrwPlugin = 1
|
||||
end,
|
||||
},
|
||||
{ "coder/claudecode.nvim",
|
||||
event = "VeryLazy",
|
||||
dependencies = { "folke/snacks.nvim" },
|
||||
config = function()
|
||||
require("configs.claudecode")
|
||||
end
|
||||
},
|
||||
}
|
||||
53
nvim/.config/nvim/lua/plugins/ui.lua
Normal file
53
nvim/.config/nvim/lua/plugins/ui.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
-- UI and visual plugins
|
||||
return {
|
||||
-- Statusline
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("configs.lualine")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Buffer tabs
|
||||
{
|
||||
"romgrk/barbar.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("configs.barbar")
|
||||
end,
|
||||
},
|
||||
|
||||
-- Improved UI for vim.ui.input and vim.ui.select (LSP rename, code actions, etc.)
|
||||
{
|
||||
"folke/snacks.nvim",
|
||||
priority = 1000,
|
||||
lazy = false,
|
||||
opts = {
|
||||
input = {
|
||||
enabled = true,
|
||||
win = {
|
||||
relative = "cursor",
|
||||
row = 1,
|
||||
col = 0,
|
||||
},
|
||||
},
|
||||
select = {
|
||||
enabled = false,
|
||||
},
|
||||
indent = {
|
||||
enabled = true,
|
||||
char = "│",
|
||||
},
|
||||
notifier = {
|
||||
enabled = true,
|
||||
timeout = 6000,
|
||||
},
|
||||
quickfile = { enabled = false },
|
||||
statuscolumn = { enabled = false },
|
||||
words = { enabled = false },
|
||||
},
|
||||
},
|
||||
}
|
||||
Reference in New Issue
Block a user