nvim
This commit is contained in:
24
nvim/.config/nvim/LICENSE
Normal file
24
nvim/.config/nvim/LICENSE
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
This is free and unencumbered software released into the public domain.
|
||||||
|
|
||||||
|
Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||||
|
distribute this software, either in source code form or as a compiled
|
||||||
|
binary, for any purpose, commercial or non-commercial, and by any
|
||||||
|
means.
|
||||||
|
|
||||||
|
In jurisdictions that recognize copyright laws, the author or authors
|
||||||
|
of this software dedicate any and all copyright interest in the
|
||||||
|
software to the public domain. We make this dedication for the benefit
|
||||||
|
of the public at large and to the detriment of our heirs and
|
||||||
|
successors. We intend this dedication to be an overt act of
|
||||||
|
relinquishment in perpetuity of all present and future rights to this
|
||||||
|
software under copyright law.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||||
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
For more information, please refer to <https://unlicense.org>
|
||||||
9
nvim/.config/nvim/README.md
Normal file
9
nvim/.config/nvim/README.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
**This repo is supposed to used as config by NvChad users!**
|
||||||
|
|
||||||
|
- The main nvchad repo (NvChad/NvChad) is used as a plugin by this repo.
|
||||||
|
- So you just import its modules , like `require "nvchad.options" , require "nvchad.mappings"`
|
||||||
|
- So you can delete the .git from this repo ( when you clone it locally ) or fork it :)
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
|
||||||
|
1) Lazyvim starter https://github.com/LazyVim/starter as nvchad's starter was inspired by Lazyvim's . It made a lot of things easier!
|
||||||
339
nvim/.config/nvim/colors/bearded-arc.lua
Normal file
339
nvim/.config/nvim/colors/bearded-arc.lua
Normal file
@@ -0,0 +1,339 @@
|
|||||||
|
-- Bearded Arc colorscheme
|
||||||
|
-- Accurate port from NvChad base46 theme with proper highlight group mappings
|
||||||
|
|
||||||
|
vim.cmd("hi clear")
|
||||||
|
if vim.fn.exists("syntax_on") then
|
||||||
|
vim.cmd("syntax reset")
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.o.background = "dark"
|
||||||
|
vim.g.colors_name = "bearded-arc"
|
||||||
|
|
||||||
|
-- Base 30 color palette (UI colors)
|
||||||
|
local base_30 = {
|
||||||
|
white = "#ABB7C1",
|
||||||
|
darker_black = "#19212e",
|
||||||
|
black = "#1c2433",
|
||||||
|
black2 = "#232b3a",
|
||||||
|
one_bg = "#262e3d",
|
||||||
|
one_bg2 = "#303847",
|
||||||
|
one_bg3 = "#3a4251",
|
||||||
|
grey = "#444c5b",
|
||||||
|
grey_fg = "#4e5665",
|
||||||
|
grey_fg2 = "#58606f",
|
||||||
|
light_grey = "#626a79",
|
||||||
|
red = "#FF738A",
|
||||||
|
baby_pink = "#F38CEC",
|
||||||
|
pink = "#ee9cdd",
|
||||||
|
line = "#303847",
|
||||||
|
green = "#3CEC85",
|
||||||
|
vibrant_green = "#9bdead",
|
||||||
|
nord_blue = "#6da4cd",
|
||||||
|
blue = "#69C3FF",
|
||||||
|
yellow = "#EACD61",
|
||||||
|
sun = "#f6d96d",
|
||||||
|
purple = "#bd93ff",
|
||||||
|
dark_purple = "#B78AFF",
|
||||||
|
teal = "#12c7c4",
|
||||||
|
orange = "#FF955C",
|
||||||
|
cyan = "#22ECDB",
|
||||||
|
statusline_bg = "#232b3a",
|
||||||
|
lightbg = "#303847",
|
||||||
|
pmenu_bg = "#3CEC85",
|
||||||
|
folder_bg = "#69C3FF",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Base 16 color palette (syntax colors)
|
||||||
|
local base_16 = {
|
||||||
|
base00 = "#1c2433",
|
||||||
|
base01 = "#262e3d",
|
||||||
|
base02 = "#303847",
|
||||||
|
base03 = "#444c5b",
|
||||||
|
base04 = "#a1adb7",
|
||||||
|
base05 = "#c3cfd9",
|
||||||
|
base06 = "#ABB7C1",
|
||||||
|
base07 = "#08bdba",
|
||||||
|
base08 = "#FF738A",
|
||||||
|
base09 = "#FF955C",
|
||||||
|
base0A = "#EACD61",
|
||||||
|
base0B = "#3CEC85",
|
||||||
|
base0C = "#77aed7",
|
||||||
|
base0D = "#69C3FF",
|
||||||
|
base0E = "#22ECDB",
|
||||||
|
base0F = "#B78AFF",
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Helper function to set highlights
|
||||||
|
local function hi(group, opts)
|
||||||
|
local cmd = "hi " .. group
|
||||||
|
if opts.fg then cmd = cmd .. " guifg=" .. opts.fg end
|
||||||
|
if opts.bg then cmd = cmd .. " guibg=" .. opts.bg end
|
||||||
|
if opts.sp then cmd = cmd .. " guisp=" .. opts.sp end
|
||||||
|
if opts.style then cmd = cmd .. " gui=" .. opts.style end
|
||||||
|
vim.cmd(cmd)
|
||||||
|
end
|
||||||
|
|
||||||
|
-- === UI ELEMENTS (from defaults.lua) ===
|
||||||
|
|
||||||
|
-- Line Numbers & Sidebar (CRITICAL FIX)
|
||||||
|
hi("LineNr", { fg = base_30.grey })
|
||||||
|
hi("CursorLineNr", { fg = base_30.white })
|
||||||
|
hi("SignColumn", { fg = base_16.base03 })
|
||||||
|
hi("FoldColumn", { fg = base_30.grey, bg = base_16.base00 })
|
||||||
|
hi("Folded", { fg = base_30.light_grey, bg = base_16.base01 })
|
||||||
|
|
||||||
|
-- Main Editor
|
||||||
|
hi("Normal", { fg = base_16.base05, bg = base_16.base00 })
|
||||||
|
hi("NormalFloat", { bg = base_30.darker_black })
|
||||||
|
hi("FloatBorder", { fg = base_30.blue })
|
||||||
|
hi("FloatTitle", { fg = base_30.white, bg = base_30.grey })
|
||||||
|
|
||||||
|
-- Cursor and Lines
|
||||||
|
hi("Cursor", { fg = base_16.base00, bg = base_16.base05 })
|
||||||
|
hi("CursorLine", { bg = base_30.black2 })
|
||||||
|
hi("CursorColumn", { bg = base_16.base01 })
|
||||||
|
hi("ColorColumn", { bg = base_16.base01 })
|
||||||
|
|
||||||
|
-- Visual Selection
|
||||||
|
hi("Visual", { bg = base_30.one_bg2 })
|
||||||
|
hi("VisualNOS", { bg = base_30.one_bg2 })
|
||||||
|
|
||||||
|
-- Search
|
||||||
|
hi("Search", { fg = base_16.base00, bg = base_16.base0A })
|
||||||
|
hi("IncSearch", { fg = base_16.base01, bg = base_16.base09 })
|
||||||
|
hi("Substitute", { fg = base_16.base01, bg = base_16.base0A })
|
||||||
|
|
||||||
|
-- Window Separators
|
||||||
|
hi("WinSeparator", { fg = base_30.line })
|
||||||
|
hi("WinBar", { bg = base_30.statusline_bg })
|
||||||
|
hi("WinBarNC", { bg = base_30.statusline_bg })
|
||||||
|
|
||||||
|
-- Completion Menu
|
||||||
|
hi("Pmenu", { bg = base_30.one_bg })
|
||||||
|
hi("PmenuSbar", { bg = base_30.one_bg })
|
||||||
|
hi("PmenuSel", { bg = base_30.pmenu_bg, fg = base_30.black })
|
||||||
|
hi("PmenuThumb", { bg = base_30.grey })
|
||||||
|
|
||||||
|
-- Statusline & Tabline
|
||||||
|
hi("StatusLine", { bg = base_30.statusline_bg })
|
||||||
|
hi("StatusLineNC", { bg = base_30.statusline_bg })
|
||||||
|
hi("TabLine", { fg = base_30.light_grey, bg = base_30.black2 })
|
||||||
|
hi("TabLineSel", { fg = base_30.white, bg = base_30.black })
|
||||||
|
hi("TabLineFill", { bg = base_30.black2 })
|
||||||
|
|
||||||
|
-- Messages & Prompts
|
||||||
|
hi("ErrorMsg", { fg = base_16.base08, bg = base_16.base00 })
|
||||||
|
hi("WarningMsg", { fg = base_16.base0A })
|
||||||
|
hi("MoreMsg", { fg = base_16.base0B })
|
||||||
|
hi("ModeMsg", { fg = base_16.base0B })
|
||||||
|
hi("Question", { fg = base_16.base0D })
|
||||||
|
|
||||||
|
-- Special Elements
|
||||||
|
hi("MatchParen", { bg = base_30.grey, fg = base_30.white })
|
||||||
|
hi("NonText", { fg = base_16.base03 })
|
||||||
|
hi("SpecialKey", { fg = base_16.base03 })
|
||||||
|
hi("Conceal", { fg = base_16.base0D, bg = base_16.base00 })
|
||||||
|
hi("Directory", { fg = base_16.base0D })
|
||||||
|
hi("Title", { fg = base_16.base0D })
|
||||||
|
|
||||||
|
-- === SYNTAX HIGHLIGHTING (from syntax.lua) ===
|
||||||
|
|
||||||
|
hi("Comment", { fg = base_30.grey_fg, style = "italic" })
|
||||||
|
|
||||||
|
-- Constants
|
||||||
|
hi("Constant", { fg = base_16.base09 })
|
||||||
|
hi("String", { fg = base_16.base0B })
|
||||||
|
hi("Character", { fg = base_16.base08 })
|
||||||
|
hi("Number", { fg = base_16.base09 })
|
||||||
|
hi("Boolean", { fg = base_16.base09 })
|
||||||
|
hi("Float", { fg = base_16.base09 })
|
||||||
|
|
||||||
|
-- Identifiers
|
||||||
|
hi("Identifier", { fg = base_16.base08 })
|
||||||
|
hi("Function", { fg = base_16.base0D })
|
||||||
|
|
||||||
|
-- Statements
|
||||||
|
hi("Statement", { fg = base_16.base0E })
|
||||||
|
hi("Conditional", { fg = base_16.base0E })
|
||||||
|
hi("Repeat", { fg = base_16.base0E })
|
||||||
|
hi("Label", { fg = base_16.base0A })
|
||||||
|
hi("Operator", { fg = base_16.base05 })
|
||||||
|
hi("Keyword", { fg = base_16.base0E })
|
||||||
|
hi("Exception", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
-- PreProcessor
|
||||||
|
hi("PreProc", { fg = base_16.base0A })
|
||||||
|
hi("Include", { fg = base_16.base0D })
|
||||||
|
hi("Define", { fg = base_16.base0E })
|
||||||
|
hi("Macro", { fg = base_16.base08 })
|
||||||
|
hi("PreCondit", { fg = base_16.base0A })
|
||||||
|
|
||||||
|
-- Types
|
||||||
|
hi("Type", { fg = base_16.base0A })
|
||||||
|
hi("StorageClass", { fg = base_16.base0A })
|
||||||
|
hi("Structure", { fg = base_16.base0E })
|
||||||
|
hi("Typedef", { fg = base_16.base0A })
|
||||||
|
|
||||||
|
-- Special
|
||||||
|
hi("Special", { fg = base_16.base0C })
|
||||||
|
hi("SpecialChar", { fg = base_16.base0F })
|
||||||
|
hi("Tag", { fg = base_16.base0A })
|
||||||
|
hi("Delimiter", { fg = base_16.base0F })
|
||||||
|
hi("SpecialComment", { fg = base_16.base0C })
|
||||||
|
hi("Debug", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
-- Errors
|
||||||
|
hi("Error", { fg = base_16.base00, bg = base_16.base08 })
|
||||||
|
hi("Todo", { fg = base_16.base0A, bg = base_16.base01 })
|
||||||
|
|
||||||
|
hi("Underlined", { fg = base_16.base0B, style = "underline" })
|
||||||
|
hi("Ignore", { fg = base_16.base0C })
|
||||||
|
|
||||||
|
-- === DIFF ===
|
||||||
|
|
||||||
|
hi("DiffAdd", { fg = base_16.base0B, bg = base_16.base00 })
|
||||||
|
hi("DiffChange", { fg = base_16.base0E, bg = base_16.base00 })
|
||||||
|
hi("DiffDelete", { fg = base_16.base08, bg = base_16.base00 })
|
||||||
|
hi("DiffText", { fg = base_16.base0D, bg = base_16.base01 })
|
||||||
|
|
||||||
|
hi("Added", { fg = base_30.green })
|
||||||
|
hi("Changed", { fg = base_30.yellow })
|
||||||
|
hi("Removed", { fg = base_30.red })
|
||||||
|
|
||||||
|
-- === GIT SIGNS ===
|
||||||
|
|
||||||
|
hi("GitSignsAdd", { fg = base_30.green })
|
||||||
|
hi("GitSignsChange", { fg = base_30.yellow })
|
||||||
|
hi("GitSignsDelete", { fg = base_30.red })
|
||||||
|
|
||||||
|
-- === LSP DIAGNOSTICS (from lsp.lua) ===
|
||||||
|
|
||||||
|
hi("DiagnosticError", { fg = base_30.red })
|
||||||
|
hi("DiagnosticWarn", { fg = base_30.yellow })
|
||||||
|
hi("DiagnosticInfo", { fg = base_30.green })
|
||||||
|
hi("DiagnosticHint", { fg = base_30.purple })
|
||||||
|
|
||||||
|
hi("DiagnosticUnderlineError", { sp = base_30.red, style = "underline" })
|
||||||
|
hi("DiagnosticUnderlineWarn", { sp = base_30.yellow, style = "underline" })
|
||||||
|
hi("DiagnosticUnderlineInfo", { sp = base_30.green, style = "underline" })
|
||||||
|
hi("DiagnosticUnderlineHint", { sp = base_30.purple, style = "underline" })
|
||||||
|
|
||||||
|
hi("LspReferenceText", { bg = base_30.one_bg3 })
|
||||||
|
hi("LspReferenceRead", { bg = base_30.one_bg3 })
|
||||||
|
hi("LspReferenceWrite", { bg = base_30.one_bg3 })
|
||||||
|
|
||||||
|
hi("LspInlayHint", { fg = base_30.light_grey, bg = base_30.black2 })
|
||||||
|
hi("LspSignatureActiveParameter", { fg = base_30.black, bg = base_30.green })
|
||||||
|
|
||||||
|
-- === TELESCOPE (from telescope.lua) ===
|
||||||
|
|
||||||
|
hi("TelescopeBorder", { fg = base_30.grey, bg = base_30.darker_black })
|
||||||
|
hi("TelescopePromptBorder", { fg = base_30.grey, bg = base_30.darker_black })
|
||||||
|
hi("TelescopePromptNormal", { fg = base_16.base05, bg = base_30.darker_black })
|
||||||
|
hi("TelescopeResultsBorder", { fg = base_30.grey, bg = base_30.darker_black })
|
||||||
|
hi("TelescopeResultsNormal", { bg = base_30.darker_black })
|
||||||
|
hi("TelescopePreviewBorder", { fg = base_30.grey, bg = base_30.darker_black })
|
||||||
|
hi("TelescopePreviewNormal", { bg = base_30.darker_black })
|
||||||
|
hi("TelescopeSelection", { bg = base_30.one_bg2, fg = base_30.white })
|
||||||
|
hi("TelescopeSelectionCaret", { fg = base_30.cyan, bg = base_30.one_bg2 })
|
||||||
|
hi("TelescopeMatching", { fg = base_30.blue, style = "bold" })
|
||||||
|
|
||||||
|
-- === TREESITTER (from treesitter.lua) ===
|
||||||
|
|
||||||
|
hi("@variable", { fg = base_16.base05 })
|
||||||
|
hi("@variable.builtin", { fg = base_16.base09 })
|
||||||
|
hi("@variable.parameter", { fg = base_16.base08 })
|
||||||
|
hi("@variable.member", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
hi("@constant", { fg = base_16.base08 })
|
||||||
|
hi("@constant.builtin", { fg = base_16.base09 })
|
||||||
|
hi("@constant.macro", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
hi("@string", { fg = base_16.base0B })
|
||||||
|
hi("@string.regex", { fg = base_16.base0C })
|
||||||
|
hi("@string.escape", { fg = base_16.base0C })
|
||||||
|
hi("@character", { fg = base_16.base08 })
|
||||||
|
hi("@number", { fg = base_16.base09 })
|
||||||
|
hi("@boolean", { fg = base_16.base09 })
|
||||||
|
hi("@float", { fg = base_16.base09 })
|
||||||
|
|
||||||
|
hi("@function", { fg = base_16.base0D })
|
||||||
|
hi("@function.builtin", { fg = base_16.base0D })
|
||||||
|
hi("@function.macro", { fg = base_16.base08 })
|
||||||
|
hi("@function.method", { fg = base_16.base0D })
|
||||||
|
|
||||||
|
hi("@constructor", { fg = base_16.base0C })
|
||||||
|
hi("@parameter", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
hi("@keyword", { fg = base_16.base0E })
|
||||||
|
hi("@keyword.function", { fg = base_16.base0E })
|
||||||
|
hi("@keyword.return", { fg = base_16.base0E })
|
||||||
|
hi("@keyword.operator", { fg = base_16.base0E })
|
||||||
|
|
||||||
|
hi("@conditional", { fg = base_16.base0E })
|
||||||
|
hi("@repeat", { fg = base_16.base0E })
|
||||||
|
hi("@label", { fg = base_16.base0A })
|
||||||
|
hi("@operator", { fg = base_16.base05 })
|
||||||
|
hi("@exception", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
hi("@type", { fg = base_16.base0A })
|
||||||
|
hi("@type.builtin", { fg = base_16.base0A })
|
||||||
|
hi("@type.qualifier", { fg = base_16.base0E })
|
||||||
|
|
||||||
|
hi("@structure", { fg = base_16.base0E })
|
||||||
|
hi("@include", { fg = base_16.base0D })
|
||||||
|
|
||||||
|
hi("@property", { fg = base_16.base08 })
|
||||||
|
hi("@field", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
hi("@punctuation.delimiter", { fg = base_16.base0F })
|
||||||
|
hi("@punctuation.bracket", { fg = base_16.base05 })
|
||||||
|
hi("@punctuation.special", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
hi("@comment", { fg = base_30.grey_fg, style = "italic" })
|
||||||
|
hi("@comment.todo", { fg = base_30.grey, bg = base_30.white })
|
||||||
|
hi("@comment.note", { fg = base_30.white, bg = base_30.blue })
|
||||||
|
hi("@comment.warning", { fg = base_30.black, bg = base_30.yellow })
|
||||||
|
hi("@comment.error", { fg = base_30.white, bg = base_30.red })
|
||||||
|
|
||||||
|
hi("@tag", { fg = base_16.base08 })
|
||||||
|
hi("@tag.attribute", { fg = base_16.base0A })
|
||||||
|
hi("@tag.delimiter", { fg = base_16.base0F })
|
||||||
|
|
||||||
|
hi("@markup.strong", { style = "bold" })
|
||||||
|
hi("@markup.italic", { style = "italic" })
|
||||||
|
hi("@markup.underline", { style = "underline" })
|
||||||
|
hi("@markup.strike", { style = "strikethrough" })
|
||||||
|
hi("@markup.heading", { fg = base_16.base0D, style = "bold" })
|
||||||
|
hi("@markup.link", { fg = base_16.base08, style = "underline" })
|
||||||
|
hi("@markup.link.url", { fg = base_16.base0B, style = "underline" })
|
||||||
|
hi("@markup.list", { fg = base_16.base08 })
|
||||||
|
|
||||||
|
-- === NVIM-TREE ===
|
||||||
|
|
||||||
|
hi("NvimTreeNormal", { bg = base_30.darker_black })
|
||||||
|
hi("NvimTreeNormalNC", { bg = base_30.darker_black })
|
||||||
|
hi("NvimTreeRootFolder", { fg = base_30.red, style = "bold" })
|
||||||
|
hi("NvimTreeGitDirty", { fg = base_30.yellow })
|
||||||
|
hi("NvimTreeGitNew", { fg = base_30.green })
|
||||||
|
hi("NvimTreeGitDeleted", { fg = base_30.red })
|
||||||
|
hi("NvimTreeSpecialFile", { fg = base_30.yellow, style = "underline" })
|
||||||
|
hi("NvimTreeIndentMarker", { fg = base_30.grey })
|
||||||
|
hi("NvimTreeImageFile", { fg = base_30.dark_purple })
|
||||||
|
hi("NvimTreeSymlink", { fg = base_30.cyan })
|
||||||
|
hi("NvimTreeFolderName", { fg = base_30.blue })
|
||||||
|
hi("NvimTreeFolderIcon", { fg = base_30.folder_bg })
|
||||||
|
hi("NvimTreeOpenedFolderName", { fg = base_30.blue })
|
||||||
|
|
||||||
|
-- === WHICH-KEY ===
|
||||||
|
|
||||||
|
hi("WhichKey", { fg = base_30.blue })
|
||||||
|
hi("WhichKeyGroup", { fg = base_30.green })
|
||||||
|
hi("WhichKeyDesc", { fg = base_16.base05 })
|
||||||
|
hi("WhichKeySeparator", { fg = base_30.grey })
|
||||||
|
hi("WhichKeyFloat", { bg = base_30.darker_black })
|
||||||
|
hi("WhichKeyBorder", { fg = base_30.blue, bg = base_30.darker_black })
|
||||||
|
|
||||||
|
-- === HEALTH CHECK ===
|
||||||
|
|
||||||
|
hi("healthSuccess", { fg = base_30.green, bg = base_30.black })
|
||||||
5
nvim/.config/nvim/ftplugin/wesl.lua
Normal file
5
nvim/.config/nvim/ftplugin/wesl.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
-- WESL filetype settings
|
||||||
|
vim.opt_local.shiftwidth = 4 -- Indentation width for >> and <<
|
||||||
|
vim.opt_local.tabstop = 4 -- Width of a tab character
|
||||||
|
vim.opt_local.softtabstop = 4 -- Number of spaces for tab in insert mode
|
||||||
|
vim.opt_local.expandtab = true -- Use spaces instead of tabs
|
||||||
5
nvim/.config/nvim/ftplugin/wgsl.lua
Normal file
5
nvim/.config/nvim/ftplugin/wgsl.lua
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
-- WGSL filetype settings
|
||||||
|
vim.opt_local.shiftwidth = 4 -- Indentation width for >> and <<
|
||||||
|
vim.opt_local.tabstop = 4 -- Width of a tab character
|
||||||
|
vim.opt_local.softtabstop = 4 -- Number of spaces for tab in insert mode
|
||||||
|
vim.opt_local.expandtab = true -- Use spaces instead of tabs
|
||||||
26
nvim/.config/nvim/init.lua
Normal file
26
nvim/.config/nvim/init.lua
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
vim.g.mapleader = " "
|
||||||
|
|
||||||
|
-- bootstrap lazy and all plugins
|
||||||
|
local lazypath = vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
|
||||||
|
|
||||||
|
if not vim.uv.fs_stat(lazypath) then
|
||||||
|
local repo = "https://github.com/folke/lazy.nvim.git"
|
||||||
|
vim.fn.system { "git", "clone", "--filter=blob:none", repo, "--branch=stable", lazypath }
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
local lazy_config = require "configs.lazy"
|
||||||
|
|
||||||
|
-- load plugins
|
||||||
|
require("lazy").setup({
|
||||||
|
{ import = "plugins" },
|
||||||
|
}, lazy_config)
|
||||||
|
|
||||||
|
-- load theme
|
||||||
|
vim.cmd.colorscheme("bearded-arc")
|
||||||
|
|
||||||
|
-- Load standalone config (migrated from NvChad)
|
||||||
|
require "options"
|
||||||
|
require "autocmds"
|
||||||
|
require "mappings"
|
||||||
25
nvim/.config/nvim/lazy-lock.json
Normal file
25
nvim/.config/nvim/lazy-lock.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"auto-session": { "branch": "main", "commit": "dcbc339a1a0e6505f755d980ad11f892b6a8d492" },
|
||||||
|
"barbar.nvim": { "branch": "master", "commit": "539d73def39c9172b4d4d769f14090e08f37b29d" },
|
||||||
|
"blink.cmp": { "branch": "main", "commit": "4b18c32adef2898f95cdef6192cbd5796c1a332d" },
|
||||||
|
"claudecode.nvim": { "branch": "main", "commit": "aa9a5cebebdbfa449c1c5ff229ba5d98e66bafed" },
|
||||||
|
"conform.nvim": { "branch": "master", "commit": "c2526f1cde528a66e086ab1668e996d162c75f4f" },
|
||||||
|
"fzf-lua": { "branch": "main", "commit": "fb8c50ba62a0daa433b7ac2b78834f318322b879" },
|
||||||
|
"gitsigns.nvim": { "branch": "main", "commit": "31217271a7314c343606acb4072a94a039a19fb5" },
|
||||||
|
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||||
|
"leap.nvim": { "branch": "main", "commit": "9a26da7a14c09cd84c05a4e8326890ef0f92a590" },
|
||||||
|
"lualine.nvim": { "branch": "master", "commit": "47f91c416daef12db467145e16bed5bbfe00add8" },
|
||||||
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "ae609525ddf01c153c39305730b1791800ffe4fe" },
|
||||||
|
"mason.nvim": { "branch": "main", "commit": "44d1e90e1f66e077268191e3ee9d2ac97cc18e65" },
|
||||||
|
"nvim-cmp": { "branch": "main", "commit": "85bbfad83f804f11688d1ab9486b459e699292d6" },
|
||||||
|
"nvim-lspconfig": { "branch": "master", "commit": "f4e9d367d4e067d7a5fabc9fd3f1349b291eb718" },
|
||||||
|
"nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
|
||||||
|
"nvim-web-devicons": { "branch": "master", "commit": "746ffbb17975ebd6c40142362eee1b0249969c5c" },
|
||||||
|
"plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
|
||||||
|
"snacks.nvim": { "branch": "main", "commit": "fe7cfe9800a182274d0f868a74b7263b8c0c020b" },
|
||||||
|
"tiny-inline-diagnostic.nvim": { "branch": "main", "commit": "ecce93ff7db4461e942c03e0fcc64bd785df4057" },
|
||||||
|
"vgit.nvim": { "branch": "main", "commit": "796a183620ffcab17fc00baff3187006463cbaef" },
|
||||||
|
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" },
|
||||||
|
"yazi.nvim": { "branch": "main", "commit": "1874d812de12881d1da8c19c8ce2f94f36d00a6b" },
|
||||||
|
"yuck.vim": { "branch": "master", "commit": "9b5e0370f70cc30383e1dabd6c215475915fe5c3" }
|
||||||
|
}
|
||||||
50
nvim/dotfiles/nvim/.config/nvim/lua/autocmds.lua
Normal file
50
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/barbar.lua
Normal file
103
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/claudecode.lua
Normal file
20
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/conform.lua
Normal file
15
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/csharp_ls.lua
Normal file
24
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/fzf.lua
Normal file
123
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/lazy.lua
Normal file
47
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/lspconfig.lua
Normal file
138
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/configs/lualine.lua
Normal file
211
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/mappings.lua
Normal file
174
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/options.lua
Normal file
69
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/plugins/coding.lua
Normal file
138
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/plugins/init.lua
Normal file
30
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/plugins/tools.lua
Normal file
83
nvim/dotfiles/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/dotfiles/nvim/.config/nvim/lua/plugins/ui.lua
Normal file
53
nvim/dotfiles/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