nvim,tmux,kitty: full config overhaul (AstroNvim → native 0.12)
Replaces AstroNvim v5 with from-scratch Neovim 0.12 config using vim.lsp.config()/vim.lsp.enable() natively, lazy.nvim, blink.cmp, and smart-splits tmux integration. tmux: new C-Space prefix, hjkl pane nav, resize key table, tpm plugins. kitty: add allow_remote_control for smart-splits.
This commit is contained in:
3
dot_config/kitty/kitty.d/40-remote-control.conf
Normal file
3
dot_config/kitty/kitty.d/40-remote-control.conf
Normal file
@@ -0,0 +1,3 @@
|
||||
# Required for smart-splits.nvim local resize support
|
||||
allow_remote_control yes
|
||||
listen_on unix:/tmp/kitty
|
||||
6
dot_config/nvim/after/queries/jinja/injections.scm
Normal file
6
dot_config/nvim/after/queries/jinja/injections.scm
Normal file
@@ -0,0 +1,6 @@
|
||||
; Jinja template injection queries
|
||||
; Injects HTML into Jinja host language nodes
|
||||
|
||||
((text) @injection.content
|
||||
(#set! injection.language "html")
|
||||
(#set! injection.combined))
|
||||
@@ -238,6 +238,353 @@ function M.load()
|
||||
CmpItemKindMethod = { fg = p.azure },
|
||||
CmpItemKindKeyword = { fg = p.sacred },
|
||||
CmpItemKindVariable = { fg = p.text },
|
||||
|
||||
-- PLUGINS: BLINK.CMP (Completion) ----------------------------------------
|
||||
BlinkCmpMenu = { fg = p.text, bg = p.panel },
|
||||
BlinkCmpMenuBorder = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpMenuSelection = { fg = p.ink, bg = p.razor, bold = true },
|
||||
BlinkCmpScrollBarThumb = { bg = p.stealth },
|
||||
BlinkCmpScrollBarGutter = { bg = p.panel },
|
||||
BlinkCmpLabel = { fg = p.text },
|
||||
BlinkCmpLabelDeprecated = { fg = p.dim, strikethrough = true },
|
||||
BlinkCmpLabelMatch = { fg = p.tech, bold = true },
|
||||
BlinkCmpKindText = { fg = p.text },
|
||||
BlinkCmpKindMethod = { fg = p.azure },
|
||||
BlinkCmpKindFunction = { fg = p.azure },
|
||||
BlinkCmpKindConstructor = { fg = p.amber },
|
||||
BlinkCmpKindField = { fg = p.text },
|
||||
BlinkCmpKindVariable = { fg = p.text },
|
||||
BlinkCmpKindClass = { fg = p.amber },
|
||||
BlinkCmpKindInterface = { fg = p.amber },
|
||||
BlinkCmpKindModule = { fg = p.amber },
|
||||
BlinkCmpKindProperty = { fg = p.text },
|
||||
BlinkCmpKindUnit = { fg = p.tech },
|
||||
BlinkCmpKindValue = { fg = p.tech },
|
||||
BlinkCmpKindEnum = { fg = p.amber },
|
||||
BlinkCmpKindKeyword = { fg = p.sacred },
|
||||
BlinkCmpKindSnippet = { fg = p.toxic },
|
||||
BlinkCmpKindColor = { fg = p.tech },
|
||||
BlinkCmpKindFile = { fg = p.text },
|
||||
BlinkCmpKindReference = { fg = p.tech },
|
||||
BlinkCmpKindFolder = { fg = p.text },
|
||||
BlinkCmpKindEnumMember = { fg = p.tech },
|
||||
BlinkCmpKindConstant = { fg = p.tech },
|
||||
BlinkCmpKindStruct = { fg = p.amber },
|
||||
BlinkCmpKindEvent = { fg = p.amber },
|
||||
BlinkCmpKindOperator = { fg = p.text },
|
||||
BlinkCmpKindTypeParameter = { fg = p.amber },
|
||||
BlinkCmpGhostText = { fg = p.stealth, italic = true },
|
||||
BlinkCmpDoc = { fg = p.text, bg = p.panel },
|
||||
BlinkCmpDocBorder = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpDocSeparator = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpDocCursorLine = { bg = p.border },
|
||||
BlinkCmpSignatureHelp = { fg = p.text, bg = p.panel },
|
||||
BlinkCmpSignatureHelpBorder = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpSignatureHelpActiveParameter = { fg = p.ink, bg = p.tech, bold = true },
|
||||
BlinkCmpSource = { fg = p.dim },
|
||||
|
||||
-- PLUGINS: BUFFERLINE -----------------------------------------------------
|
||||
BufferLineBackground = { fg = p.dim, bg = p.panel },
|
||||
BufferLineFill = { bg = p.panel },
|
||||
BufferLineBuffer = { fg = p.dim, bg = p.panel },
|
||||
BufferLineBufferSelected = { fg = p.text, bg = p.void, bold = true },
|
||||
BufferLineBufferVisible = { fg = p.dim, bg = p.panel },
|
||||
BufferLineTab = { fg = p.dim, bg = p.panel },
|
||||
BufferLineTabSelected = { fg = p.text, bg = p.void, bold = true },
|
||||
BufferLineTabClose = { fg = p.razor, bg = p.panel },
|
||||
BufferLineModified = { fg = p.tech, bg = p.panel },
|
||||
BufferLineModifiedSelected = { fg = p.tech, bg = p.void },
|
||||
BufferLineModifiedVisible = { fg = p.tech, bg = p.panel },
|
||||
BufferLineSeparator = { fg = p.border, bg = p.panel },
|
||||
BufferLineSeparatorSelected = { fg = p.border, bg = p.void },
|
||||
BufferLineSeparatorVisible = { fg = p.border, bg = p.panel },
|
||||
BufferLineIndicatorSelected = { fg = p.razor, bg = p.void },
|
||||
BufferLineCloseButton = { fg = p.dim, bg = p.panel },
|
||||
BufferLineCloseButtonSelected = { fg = p.razor, bg = p.void },
|
||||
BufferLineCloseButtonVisible = { fg = p.dim, bg = p.panel },
|
||||
BufferLineDiagnostic = { fg = p.dim, bg = p.panel },
|
||||
BufferLineDiagnosticSelected = { fg = p.dim, bg = p.void },
|
||||
BufferLineError = { fg = p.alert, bg = p.panel },
|
||||
BufferLineErrorSelected = { fg = p.alert, bg = p.void, bold = true },
|
||||
BufferLineWarning = { fg = p.amber, bg = p.panel },
|
||||
BufferLineWarningSelected = { fg = p.amber, bg = p.void, bold = true },
|
||||
BufferLineInfo = { fg = p.tech, bg = p.panel },
|
||||
BufferLineInfoSelected = { fg = p.tech, bg = p.void, bold = true },
|
||||
BufferLineHint = { fg = p.dim, bg = p.panel },
|
||||
BufferLineHintSelected = { fg = p.dim, bg = p.void, bold = true },
|
||||
BufferLinePick = { fg = p.razor, bg = p.panel, bold = true },
|
||||
BufferLinePickSelected = { fg = p.razor, bg = p.void, bold = true },
|
||||
BufferLinePickVisible = { fg = p.razor, bg = p.panel, bold = true },
|
||||
|
||||
-- PLUGINS: WHICH-KEY ------------------------------------------------------
|
||||
WhichKey = { fg = p.razor, bold = true },
|
||||
WhichKeySeparator = { fg = p.stealth },
|
||||
WhichKeyGroup = { fg = p.tech },
|
||||
WhichKeyDesc = { fg = p.text },
|
||||
WhichKeyFloat = { bg = p.panel },
|
||||
WhichKeyBorder = { fg = p.border, bg = p.panel },
|
||||
WhichKeyTitle = { fg = p.ink, bg = p.razor, bold = true },
|
||||
WhichKeyNormal = { fg = p.text, bg = p.panel },
|
||||
WhichKeyValue = { fg = p.dim },
|
||||
WhichKeyIcon = { fg = p.azure },
|
||||
WhichKeyIconAzure = { fg = p.azure },
|
||||
WhichKeyIconGreen = { fg = p.toxic },
|
||||
WhichKeyIconYellow = { fg = p.amber },
|
||||
WhichKeyIconRed = { fg = p.razor },
|
||||
WhichKeyIconPurple = { fg = p.sacred },
|
||||
WhichKeyIconCyan = { fg = p.tech },
|
||||
|
||||
-- PLUGINS: TROUBLE --------------------------------------------------------
|
||||
TroubleNormal = { fg = p.text, bg = p.void },
|
||||
TroubleNormalNC = { fg = p.dim, bg = p.void },
|
||||
TroubleText = { fg = p.text },
|
||||
TroubleCount = { fg = p.ink, bg = p.razor, bold = true },
|
||||
TroubleError = { fg = p.alert },
|
||||
TroubleWarning = { fg = p.amber },
|
||||
TroubleHint = { fg = p.dim },
|
||||
TroubleInfo = { fg = p.tech },
|
||||
TroubleSource = { fg = p.dim },
|
||||
TroubleCode = { fg = p.stealth },
|
||||
TroubleLocation = { fg = p.dim },
|
||||
TroubleFile = { fg = p.tech, bold = true },
|
||||
TroubleIndent = { fg = p.border },
|
||||
TroublePos = { fg = p.dim },
|
||||
TroubleSignError = { fg = p.alert },
|
||||
TroubleSignWarning = { fg = p.amber },
|
||||
TroubleSignHint = { fg = p.dim },
|
||||
TroubleSignInfo = { fg = p.tech },
|
||||
TroublePreview = { fg = p.ink, bg = p.razor },
|
||||
TroubleFocusText = { fg = p.text, bold = true },
|
||||
|
||||
-- PLUGINS: INDENT-BLANKLINE -----------------------------------------------
|
||||
IblIndent = { fg = p.border },
|
||||
IblScope = { fg = p.stealth },
|
||||
IblWhitespace = { fg = p.border },
|
||||
|
||||
-- PLUGINS: NEOGIT ---------------------------------------------------------
|
||||
NeogitBranch = { fg = p.razor, bold = true },
|
||||
NeogitRemote = { fg = p.tech },
|
||||
NeogitHunkHeader = { fg = p.text, bg = p.panel, bold = true },
|
||||
NeogitHunkHeaderHighlight = { fg = p.ink, bg = p.tech, bold = true },
|
||||
NeogitDiffAdd = { fg = p.toxic, bg = p.void },
|
||||
NeogitDiffDelete = { fg = p.razor, bg = p.void },
|
||||
NeogitDiffContext = { fg = p.dim, bg = p.void },
|
||||
NeogitDiffAddHighlight = { fg = p.toxic, bg = p.panel },
|
||||
NeogitDiffDeleteHighlight = { fg = p.razor, bg = p.panel },
|
||||
NeogitDiffContextHighlight = { fg = p.text, bg = p.panel },
|
||||
NeogitCommitViewHeader = { fg = p.ink, bg = p.razor, bold = true },
|
||||
NeogitFilePath = { fg = p.tech, underline = true },
|
||||
NeogitDiffHeader = { fg = p.amber, bold = true },
|
||||
NeogitDiffHeaderHighlight = { fg = p.ink, bg = p.amber, bold = true },
|
||||
NeogitObjectId = { fg = p.dim },
|
||||
NeogitStashes = { fg = p.sacred },
|
||||
NeogitRebaseDone = { fg = p.toxic },
|
||||
NeogitFold = { fg = p.stealth },
|
||||
|
||||
-- PLUGINS: AERIAL (Symbols Outline) --------------------------------------
|
||||
AerialLine = { fg = p.ink, bg = p.razor },
|
||||
AerialLineNC = { fg = p.dim, bg = p.panel },
|
||||
AerialNormal = { fg = p.text, bg = p.void },
|
||||
AerialGuide = { fg = p.border },
|
||||
AerialClass = { fg = p.amber },
|
||||
AerialClassIcon = { fg = p.amber },
|
||||
AerialFunction = { fg = p.azure },
|
||||
AerialFunctionIcon = { fg = p.azure },
|
||||
AerialMethod = { fg = p.azure },
|
||||
AerialMethodIcon = { fg = p.azure },
|
||||
AerialConstructor = { fg = p.amber },
|
||||
AerialField = { fg = p.text },
|
||||
AerialVariable = { fg = p.text },
|
||||
AerialEnum = { fg = p.amber },
|
||||
AerialEnumIcon = { fg = p.amber },
|
||||
AerialInterface = { fg = p.amber },
|
||||
AerialModule = { fg = p.amber },
|
||||
AerialNamespace = { fg = p.amber },
|
||||
AerialPackage = { fg = p.amber },
|
||||
AerialProperty = { fg = p.text },
|
||||
AerialStruct = { fg = p.amber },
|
||||
AerialType = { fg = p.amber },
|
||||
AerialTypeParameter = { fg = p.amber },
|
||||
AerialConstant = { fg = p.tech },
|
||||
AerialString = { fg = p.toxic },
|
||||
AerialNumber = { fg = p.tech },
|
||||
AerialBoolean = { fg = p.tech },
|
||||
AerialKey = { fg = p.sacred },
|
||||
AerialKeyword = { fg = p.sacred },
|
||||
AerialOperator = { fg = p.text },
|
||||
AerialNull = { fg = p.dim },
|
||||
AerialArray = { fg = p.tech },
|
||||
AerialObject = { fg = p.amber },
|
||||
AerialEvent = { fg = p.amber },
|
||||
|
||||
-- PLUGINS: DAP-UI ---------------------------------------------------------
|
||||
DapUIScope = { fg = p.tech, bold = true },
|
||||
DapUIType = { fg = p.amber },
|
||||
DapUIDecoration = { fg = p.border },
|
||||
DapUIThread = { fg = p.toxic },
|
||||
DapUIStoppedThread = { fg = p.razor, bold = true },
|
||||
DapUICurrentFrameName = { fg = p.razor, bold = true },
|
||||
DapUISource = { fg = p.dim },
|
||||
DapUILineNumber = { fg = p.stealth },
|
||||
DapUIFloatBorder = { fg = p.border, bg = p.panel },
|
||||
DapUIFloatNormal = { fg = p.text, bg = p.panel },
|
||||
DapUIWatchesEmpty = { fg = p.dim },
|
||||
DapUIWatchesValue = { fg = p.toxic },
|
||||
DapUIWatchesError = { fg = p.alert },
|
||||
DapUIBreakpointsPath = { fg = p.tech },
|
||||
DapUIBreakpointsInfo = { fg = p.dim },
|
||||
DapUIBreakpointsCurrentLine = { fg = p.razor, bold = true },
|
||||
DapUIBreakpointsDisabledLine = { fg = p.stealth },
|
||||
DapUIEndofBuffer = { fg = p.void },
|
||||
DapUIModifiedValue = { fg = p.amber, bold = true },
|
||||
DapUIStop = { fg = p.razor },
|
||||
DapUIStepOver = { fg = p.tech },
|
||||
DapUIStepInto = { fg = p.tech },
|
||||
DapUIStepBack = { fg = p.tech },
|
||||
DapUIStepOut = { fg = p.tech },
|
||||
DapUIRestart = { fg = p.toxic },
|
||||
DapUIUnavailable = { fg = p.stealth },
|
||||
DapUIPlayPause = { fg = p.toxic },
|
||||
|
||||
-- PLUGINS: DAP VIRTUAL TEXT -----------------------------------------------
|
||||
NvimDapVirtualText = { fg = p.dim, italic = true },
|
||||
NvimDapVirtualTextChanged = { fg = p.amber, italic = true },
|
||||
NvimDapVirtualTextError = { fg = p.alert, italic = true },
|
||||
NvimDapVirtualTextInfo = { fg = p.tech, italic = true },
|
||||
|
||||
-- PLUGINS: NVIM-NOTIFY ----------------------------------------------------
|
||||
NotifyERRORBorder = { fg = p.razor },
|
||||
NotifyWARNBorder = { fg = p.amber },
|
||||
NotifyINFOBorder = { fg = p.tech },
|
||||
NotifyDEBUGBorder = { fg = p.stealth },
|
||||
NotifyTRACEBorder = { fg = p.sacred },
|
||||
NotifyERRORIcon = { fg = p.razor },
|
||||
NotifyWARNIcon = { fg = p.amber },
|
||||
NotifyINFOIcon = { fg = p.tech },
|
||||
NotifyDEBUGIcon = { fg = p.stealth },
|
||||
NotifyTRACEIcon = { fg = p.sacred },
|
||||
NotifyERRORTitle = { fg = p.razor, bold = true },
|
||||
NotifyWARNTitle = { fg = p.amber, bold = true },
|
||||
NotifyINFOTitle = { fg = p.tech, bold = true },
|
||||
NotifyDEBUGTitle = { fg = p.stealth, bold = true },
|
||||
NotifyTRACETitle = { fg = p.sacred, bold = true },
|
||||
NotifyERRORBody = { fg = p.text, bg = p.panel },
|
||||
NotifyWARNBody = { fg = p.text, bg = p.panel },
|
||||
NotifyINFOBody = { fg = p.text, bg = p.panel },
|
||||
NotifyDEBUGBody = { fg = p.dim, bg = p.panel },
|
||||
NotifyTRACEBody = { fg = p.dim, bg = p.panel },
|
||||
|
||||
-- PLUGINS: SATELLITE (Scrollbar) -----------------------------------------
|
||||
SatelliteBar = { bg = p.panel },
|
||||
SatelliteCursor = { fg = p.razor },
|
||||
SatellitePosition = { fg = p.dim },
|
||||
SatelliteError = { fg = p.alert },
|
||||
SatelliteWarning = { fg = p.amber },
|
||||
SatelliteHint = { fg = p.dim },
|
||||
SatelliteInfo = { fg = p.tech },
|
||||
SatelliteSearch = { fg = p.tech },
|
||||
SatelliteGit = { fg = p.toxic },
|
||||
SatelliteMark = { fg = p.amber },
|
||||
|
||||
-- PLUGINS: OIL.NVIM (File Explorer) --------------------------------------
|
||||
OilDir = { fg = p.tech, bold = true },
|
||||
OilDirIcon = { fg = p.tech },
|
||||
OilLink = { fg = p.sacred, italic = true },
|
||||
OilLinkTarget = { fg = p.sacred },
|
||||
OilCopy = { fg = p.amber, bold = true },
|
||||
OilMove = { fg = p.amber },
|
||||
OilChange = { fg = p.tech },
|
||||
OilCreate = { fg = p.toxic, bold = true },
|
||||
OilDelete = { fg = p.razor, bold = true },
|
||||
OilPermissionNone = { fg = p.stealth },
|
||||
OilPermissionRead = { fg = p.tech },
|
||||
OilPermissionWrite = { fg = p.amber },
|
||||
OilPermissionExecute = { fg = p.toxic },
|
||||
OilTypeDir = { fg = p.tech },
|
||||
OilTypeFile = { fg = p.text },
|
||||
OilTypeLink = { fg = p.sacred },
|
||||
OilTypeSpecial = { fg = p.razor },
|
||||
OilSize = { fg = p.dim },
|
||||
OilMtime = { fg = p.stealth },
|
||||
|
||||
-- PLUGINS: NEOTEST --------------------------------------------------------
|
||||
NeotestPassed = { fg = p.toxic },
|
||||
NeotestFailed = { fg = p.razor },
|
||||
NeotestRunning = { fg = p.amber },
|
||||
NeotestSkipped = { fg = p.dim },
|
||||
NeotestUnknown = { fg = p.stealth },
|
||||
NeotestTest = { fg = p.text },
|
||||
NeotestFile = { fg = p.tech },
|
||||
NeotestDir = { fg = p.tech, bold = true },
|
||||
NeotestNamespace = { fg = p.amber },
|
||||
NeotestMarked = { fg = p.razor, bold = true },
|
||||
NeotestTarget = { fg = p.razor },
|
||||
NeotestAdapterName = { fg = p.sacred, bold = true },
|
||||
NeotestWinSelect = { fg = p.tech, bold = true },
|
||||
NeotestFocused = { bold = true },
|
||||
NeotestIndent = { fg = p.border },
|
||||
NeotestExpandMarker = { fg = p.dim },
|
||||
NeotestWatching = { fg = p.amber },
|
||||
|
||||
-- PLUGINS: GRUG-FAR (Search & Replace) -----------------------------------
|
||||
GrugFarResultsHeader = { fg = p.ink, bg = p.razor, bold = true },
|
||||
GrugFarResultsMatch = { fg = p.void, bg = p.tech, bold = true },
|
||||
GrugFarResultsMatchAdded = { fg = p.toxic },
|
||||
GrugFarResultsMatchRemoved = { fg = p.razor },
|
||||
GrugFarResultsLineNo = { fg = p.dim },
|
||||
GrugFarResultsPath = { fg = p.tech, underline = true },
|
||||
GrugFarResultsStats = { fg = p.dim },
|
||||
GrugFarInputLabel = { fg = p.amber, bold = true },
|
||||
GrugFarInputPlaceholder = { fg = p.stealth },
|
||||
GrugFarHelpHeader = { fg = p.dim, bold = true },
|
||||
GrugFarHelpWinHeader = { fg = p.ink, bg = p.panel, bold = true },
|
||||
|
||||
-- PLUGINS: TWINNY (AI Ghost Text) ----------------------------------------
|
||||
TwinnyAccept = { fg = p.stealth, italic = true },
|
||||
TwinnyHint = { fg = p.stealth, italic = true },
|
||||
|
||||
-- PLUGINS: GITSIGNS (extended) -------------------------------------------
|
||||
GitSignsCurrentLineBlame = { fg = p.stealth, italic = true },
|
||||
GitSignsAddNr = { fg = p.toxic },
|
||||
GitSignsChangeNr = { fg = p.tech },
|
||||
GitSignsDeleteNr = { fg = p.razor },
|
||||
GitSignsAddLn = { fg = p.toxic, bg = p.panel },
|
||||
GitSignsChangeLn = { fg = p.tech, bg = p.panel },
|
||||
GitSignsDeleteLn = { fg = p.razor, bg = p.panel },
|
||||
GitSignsAddPreview = { fg = p.toxic, bg = p.panel },
|
||||
GitSignsDeletePreview = { fg = p.razor, bg = p.panel },
|
||||
GitSignsAddInline = { fg = p.void, bg = p.toxic },
|
||||
GitSignsDeleteInline = { fg = p.void, bg = p.razor },
|
||||
GitSignsChangeInline = { fg = p.void, bg = p.tech },
|
||||
GitSignsUntracked = { fg = p.dim },
|
||||
|
||||
-- PLUGINS: RENDER-MARKDOWN ------------------------------------------------
|
||||
RenderMarkdownH1 = { fg = p.razor, bold = true },
|
||||
RenderMarkdownH2 = { fg = p.amber, bold = true },
|
||||
RenderMarkdownH3 = { fg = p.tech, bold = true },
|
||||
RenderMarkdownH4 = { fg = p.toxic, bold = true },
|
||||
RenderMarkdownH5 = { fg = p.sacred, bold = true },
|
||||
RenderMarkdownH6 = { fg = p.azure, bold = true },
|
||||
RenderMarkdownH1Bg = { bg = p.panel },
|
||||
RenderMarkdownH2Bg = { bg = p.panel },
|
||||
RenderMarkdownH3Bg = { bg = p.panel },
|
||||
RenderMarkdownH4Bg = { bg = p.panel },
|
||||
RenderMarkdownH5Bg = { bg = p.panel },
|
||||
RenderMarkdownH6Bg = { bg = p.panel },
|
||||
RenderMarkdownCode = { bg = p.panel },
|
||||
RenderMarkdownCodeInline = { fg = p.toxic, bg = p.panel },
|
||||
RenderMarkdownBullet = { fg = p.razor },
|
||||
RenderMarkdownQuote = { fg = p.stealth, italic = true },
|
||||
RenderMarkdownDash = { fg = p.border },
|
||||
RenderMarkdownLink = { fg = p.tech, underline = true },
|
||||
RenderMarkdownSign = { bg = p.void },
|
||||
RenderMarkdownMath = { fg = p.tech },
|
||||
RenderMarkdownTableHead = { fg = p.ink, bg = p.razor, bold = true },
|
||||
RenderMarkdownTableRow = { fg = p.text },
|
||||
RenderMarkdownTableFill = { fg = p.border },
|
||||
RenderMarkdownTodo = { fg = p.void, bg = p.amber, bold = true },
|
||||
RenderMarkdownUnchecked = { fg = p.stealth },
|
||||
RenderMarkdownChecked = { fg = p.toxic },
|
||||
}
|
||||
|
||||
for group, highlight in pairs(groups) do
|
||||
@@ -376,6 +723,44 @@ function M.load()
|
||||
end
|
||||
end
|
||||
|
||||
-- PLUGINS: LUALINE --------------------------------------------------------
|
||||
-- Export lualine theme from palette for use in lualine config
|
||||
do
|
||||
local p = M.palette
|
||||
M.lualine = {
|
||||
normal = {
|
||||
a = { fg = p.ink, bg = p.razor, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
insert = {
|
||||
a = { fg = p.ink, bg = p.toxic, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
visual = {
|
||||
a = { fg = p.ink, bg = p.tech, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
replace = {
|
||||
a = { fg = p.ink, bg = p.amber, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
command = {
|
||||
a = { fg = p.ink, bg = p.sacred, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
inactive = {
|
||||
a = { fg = p.dim, bg = p.panel },
|
||||
b = { fg = p.dim, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
M.load()
|
||||
|
||||
return M
|
||||
@@ -238,6 +238,353 @@ function M.load()
|
||||
CmpItemKindMethod = { fg = p.azure },
|
||||
CmpItemKindKeyword = { fg = p.sacred },
|
||||
CmpItemKindVariable = { fg = p.text },
|
||||
|
||||
-- PLUGINS: BLINK.CMP (Completion) ----------------------------------------
|
||||
BlinkCmpMenu = { fg = p.text, bg = p.panel },
|
||||
BlinkCmpMenuBorder = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpMenuSelection = { fg = p.ink, bg = p.razor, bold = true },
|
||||
BlinkCmpScrollBarThumb = { bg = p.stealth },
|
||||
BlinkCmpScrollBarGutter = { bg = p.panel },
|
||||
BlinkCmpLabel = { fg = p.text },
|
||||
BlinkCmpLabelDeprecated = { fg = p.dim, strikethrough = true },
|
||||
BlinkCmpLabelMatch = { fg = p.tech, bold = true },
|
||||
BlinkCmpKindText = { fg = p.text },
|
||||
BlinkCmpKindMethod = { fg = p.azure },
|
||||
BlinkCmpKindFunction = { fg = p.azure },
|
||||
BlinkCmpKindConstructor = { fg = p.amber },
|
||||
BlinkCmpKindField = { fg = p.text },
|
||||
BlinkCmpKindVariable = { fg = p.text },
|
||||
BlinkCmpKindClass = { fg = p.amber },
|
||||
BlinkCmpKindInterface = { fg = p.amber },
|
||||
BlinkCmpKindModule = { fg = p.amber },
|
||||
BlinkCmpKindProperty = { fg = p.text },
|
||||
BlinkCmpKindUnit = { fg = p.tech },
|
||||
BlinkCmpKindValue = { fg = p.tech },
|
||||
BlinkCmpKindEnum = { fg = p.amber },
|
||||
BlinkCmpKindKeyword = { fg = p.sacred },
|
||||
BlinkCmpKindSnippet = { fg = p.toxic },
|
||||
BlinkCmpKindColor = { fg = p.tech },
|
||||
BlinkCmpKindFile = { fg = p.text },
|
||||
BlinkCmpKindReference = { fg = p.tech },
|
||||
BlinkCmpKindFolder = { fg = p.text },
|
||||
BlinkCmpKindEnumMember = { fg = p.tech },
|
||||
BlinkCmpKindConstant = { fg = p.tech },
|
||||
BlinkCmpKindStruct = { fg = p.amber },
|
||||
BlinkCmpKindEvent = { fg = p.amber },
|
||||
BlinkCmpKindOperator = { fg = p.text },
|
||||
BlinkCmpKindTypeParameter = { fg = p.amber },
|
||||
BlinkCmpGhostText = { fg = p.stealth, italic = true },
|
||||
BlinkCmpDoc = { fg = p.text, bg = p.panel },
|
||||
BlinkCmpDocBorder = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpDocSeparator = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpDocCursorLine = { bg = p.border },
|
||||
BlinkCmpSignatureHelp = { fg = p.text, bg = p.panel },
|
||||
BlinkCmpSignatureHelpBorder = { fg = p.border, bg = p.panel },
|
||||
BlinkCmpSignatureHelpActiveParameter = { fg = p.ink, bg = p.tech, bold = true },
|
||||
BlinkCmpSource = { fg = p.dim },
|
||||
|
||||
-- PLUGINS: BUFFERLINE -----------------------------------------------------
|
||||
BufferLineBackground = { fg = p.dim, bg = p.panel },
|
||||
BufferLineFill = { bg = p.panel },
|
||||
BufferLineBuffer = { fg = p.dim, bg = p.panel },
|
||||
BufferLineBufferSelected = { fg = p.text, bg = p.void, bold = true },
|
||||
BufferLineBufferVisible = { fg = p.dim, bg = p.panel },
|
||||
BufferLineTab = { fg = p.dim, bg = p.panel },
|
||||
BufferLineTabSelected = { fg = p.text, bg = p.void, bold = true },
|
||||
BufferLineTabClose = { fg = p.razor, bg = p.panel },
|
||||
BufferLineModified = { fg = p.tech, bg = p.panel },
|
||||
BufferLineModifiedSelected = { fg = p.tech, bg = p.void },
|
||||
BufferLineModifiedVisible = { fg = p.tech, bg = p.panel },
|
||||
BufferLineSeparator = { fg = p.border, bg = p.panel },
|
||||
BufferLineSeparatorSelected = { fg = p.border, bg = p.void },
|
||||
BufferLineSeparatorVisible = { fg = p.border, bg = p.panel },
|
||||
BufferLineIndicatorSelected = { fg = p.razor, bg = p.void },
|
||||
BufferLineCloseButton = { fg = p.dim, bg = p.panel },
|
||||
BufferLineCloseButtonSelected = { fg = p.razor, bg = p.void },
|
||||
BufferLineCloseButtonVisible = { fg = p.dim, bg = p.panel },
|
||||
BufferLineDiagnostic = { fg = p.dim, bg = p.panel },
|
||||
BufferLineDiagnosticSelected = { fg = p.dim, bg = p.void },
|
||||
BufferLineError = { fg = p.alert, bg = p.panel },
|
||||
BufferLineErrorSelected = { fg = p.alert, bg = p.void, bold = true },
|
||||
BufferLineWarning = { fg = p.amber, bg = p.panel },
|
||||
BufferLineWarningSelected = { fg = p.amber, bg = p.void, bold = true },
|
||||
BufferLineInfo = { fg = p.tech, bg = p.panel },
|
||||
BufferLineInfoSelected = { fg = p.tech, bg = p.void, bold = true },
|
||||
BufferLineHint = { fg = p.dim, bg = p.panel },
|
||||
BufferLineHintSelected = { fg = p.dim, bg = p.void, bold = true },
|
||||
BufferLinePick = { fg = p.razor, bg = p.panel, bold = true },
|
||||
BufferLinePickSelected = { fg = p.razor, bg = p.void, bold = true },
|
||||
BufferLinePickVisible = { fg = p.razor, bg = p.panel, bold = true },
|
||||
|
||||
-- PLUGINS: WHICH-KEY ------------------------------------------------------
|
||||
WhichKey = { fg = p.razor, bold = true },
|
||||
WhichKeySeparator = { fg = p.stealth },
|
||||
WhichKeyGroup = { fg = p.tech },
|
||||
WhichKeyDesc = { fg = p.text },
|
||||
WhichKeyFloat = { bg = p.panel },
|
||||
WhichKeyBorder = { fg = p.border, bg = p.panel },
|
||||
WhichKeyTitle = { fg = p.ink, bg = p.razor, bold = true },
|
||||
WhichKeyNormal = { fg = p.text, bg = p.panel },
|
||||
WhichKeyValue = { fg = p.dim },
|
||||
WhichKeyIcon = { fg = p.azure },
|
||||
WhichKeyIconAzure = { fg = p.azure },
|
||||
WhichKeyIconGreen = { fg = p.toxic },
|
||||
WhichKeyIconYellow = { fg = p.amber },
|
||||
WhichKeyIconRed = { fg = p.razor },
|
||||
WhichKeyIconPurple = { fg = p.sacred },
|
||||
WhichKeyIconCyan = { fg = p.tech },
|
||||
|
||||
-- PLUGINS: TROUBLE --------------------------------------------------------
|
||||
TroubleNormal = { fg = p.text, bg = p.void },
|
||||
TroubleNormalNC = { fg = p.dim, bg = p.void },
|
||||
TroubleText = { fg = p.text },
|
||||
TroubleCount = { fg = p.ink, bg = p.razor, bold = true },
|
||||
TroubleError = { fg = p.alert },
|
||||
TroubleWarning = { fg = p.amber },
|
||||
TroubleHint = { fg = p.dim },
|
||||
TroubleInfo = { fg = p.tech },
|
||||
TroubleSource = { fg = p.dim },
|
||||
TroubleCode = { fg = p.stealth },
|
||||
TroubleLocation = { fg = p.dim },
|
||||
TroubleFile = { fg = p.tech, bold = true },
|
||||
TroubleIndent = { fg = p.border },
|
||||
TroublePos = { fg = p.dim },
|
||||
TroubleSignError = { fg = p.alert },
|
||||
TroubleSignWarning = { fg = p.amber },
|
||||
TroubleSignHint = { fg = p.dim },
|
||||
TroubleSignInfo = { fg = p.tech },
|
||||
TroublePreview = { fg = p.ink, bg = p.razor },
|
||||
TroubleFocusText = { fg = p.text, bold = true },
|
||||
|
||||
-- PLUGINS: INDENT-BLANKLINE -----------------------------------------------
|
||||
IblIndent = { fg = p.border },
|
||||
IblScope = { fg = p.stealth },
|
||||
IblWhitespace = { fg = p.border },
|
||||
|
||||
-- PLUGINS: NEOGIT ---------------------------------------------------------
|
||||
NeogitBranch = { fg = p.razor, bold = true },
|
||||
NeogitRemote = { fg = p.tech },
|
||||
NeogitHunkHeader = { fg = p.text, bg = p.panel, bold = true },
|
||||
NeogitHunkHeaderHighlight = { fg = p.ink, bg = p.tech, bold = true },
|
||||
NeogitDiffAdd = { fg = p.toxic, bg = p.void },
|
||||
NeogitDiffDelete = { fg = p.razor, bg = p.void },
|
||||
NeogitDiffContext = { fg = p.dim, bg = p.void },
|
||||
NeogitDiffAddHighlight = { fg = p.toxic, bg = p.panel },
|
||||
NeogitDiffDeleteHighlight = { fg = p.razor, bg = p.panel },
|
||||
NeogitDiffContextHighlight = { fg = p.text, bg = p.panel },
|
||||
NeogitCommitViewHeader = { fg = p.ink, bg = p.razor, bold = true },
|
||||
NeogitFilePath = { fg = p.tech, underline = true },
|
||||
NeogitDiffHeader = { fg = p.amber, bold = true },
|
||||
NeogitDiffHeaderHighlight = { fg = p.ink, bg = p.amber, bold = true },
|
||||
NeogitObjectId = { fg = p.dim },
|
||||
NeogitStashes = { fg = p.sacred },
|
||||
NeogitRebaseDone = { fg = p.toxic },
|
||||
NeogitFold = { fg = p.stealth },
|
||||
|
||||
-- PLUGINS: AERIAL (Symbols Outline) --------------------------------------
|
||||
AerialLine = { fg = p.ink, bg = p.razor },
|
||||
AerialLineNC = { fg = p.dim, bg = p.panel },
|
||||
AerialNormal = { fg = p.text, bg = p.void },
|
||||
AerialGuide = { fg = p.border },
|
||||
AerialClass = { fg = p.amber },
|
||||
AerialClassIcon = { fg = p.amber },
|
||||
AerialFunction = { fg = p.azure },
|
||||
AerialFunctionIcon = { fg = p.azure },
|
||||
AerialMethod = { fg = p.azure },
|
||||
AerialMethodIcon = { fg = p.azure },
|
||||
AerialConstructor = { fg = p.amber },
|
||||
AerialField = { fg = p.text },
|
||||
AerialVariable = { fg = p.text },
|
||||
AerialEnum = { fg = p.amber },
|
||||
AerialEnumIcon = { fg = p.amber },
|
||||
AerialInterface = { fg = p.amber },
|
||||
AerialModule = { fg = p.amber },
|
||||
AerialNamespace = { fg = p.amber },
|
||||
AerialPackage = { fg = p.amber },
|
||||
AerialProperty = { fg = p.text },
|
||||
AerialStruct = { fg = p.amber },
|
||||
AerialType = { fg = p.amber },
|
||||
AerialTypeParameter = { fg = p.amber },
|
||||
AerialConstant = { fg = p.tech },
|
||||
AerialString = { fg = p.toxic },
|
||||
AerialNumber = { fg = p.tech },
|
||||
AerialBoolean = { fg = p.tech },
|
||||
AerialKey = { fg = p.sacred },
|
||||
AerialKeyword = { fg = p.sacred },
|
||||
AerialOperator = { fg = p.text },
|
||||
AerialNull = { fg = p.dim },
|
||||
AerialArray = { fg = p.tech },
|
||||
AerialObject = { fg = p.amber },
|
||||
AerialEvent = { fg = p.amber },
|
||||
|
||||
-- PLUGINS: DAP-UI ---------------------------------------------------------
|
||||
DapUIScope = { fg = p.tech, bold = true },
|
||||
DapUIType = { fg = p.amber },
|
||||
DapUIDecoration = { fg = p.border },
|
||||
DapUIThread = { fg = p.toxic },
|
||||
DapUIStoppedThread = { fg = p.razor, bold = true },
|
||||
DapUICurrentFrameName = { fg = p.razor, bold = true },
|
||||
DapUISource = { fg = p.dim },
|
||||
DapUILineNumber = { fg = p.stealth },
|
||||
DapUIFloatBorder = { fg = p.border, bg = p.panel },
|
||||
DapUIFloatNormal = { fg = p.text, bg = p.panel },
|
||||
DapUIWatchesEmpty = { fg = p.dim },
|
||||
DapUIWatchesValue = { fg = p.toxic },
|
||||
DapUIWatchesError = { fg = p.alert },
|
||||
DapUIBreakpointsPath = { fg = p.tech },
|
||||
DapUIBreakpointsInfo = { fg = p.dim },
|
||||
DapUIBreakpointsCurrentLine = { fg = p.razor, bold = true },
|
||||
DapUIBreakpointsDisabledLine = { fg = p.stealth },
|
||||
DapUIEndofBuffer = { fg = p.void },
|
||||
DapUIModifiedValue = { fg = p.amber, bold = true },
|
||||
DapUIStop = { fg = p.razor },
|
||||
DapUIStepOver = { fg = p.tech },
|
||||
DapUIStepInto = { fg = p.tech },
|
||||
DapUIStepBack = { fg = p.tech },
|
||||
DapUIStepOut = { fg = p.tech },
|
||||
DapUIRestart = { fg = p.toxic },
|
||||
DapUIUnavailable = { fg = p.stealth },
|
||||
DapUIPlayPause = { fg = p.toxic },
|
||||
|
||||
-- PLUGINS: DAP VIRTUAL TEXT -----------------------------------------------
|
||||
NvimDapVirtualText = { fg = p.dim, italic = true },
|
||||
NvimDapVirtualTextChanged = { fg = p.amber, italic = true },
|
||||
NvimDapVirtualTextError = { fg = p.alert, italic = true },
|
||||
NvimDapVirtualTextInfo = { fg = p.tech, italic = true },
|
||||
|
||||
-- PLUGINS: NVIM-NOTIFY ----------------------------------------------------
|
||||
NotifyERRORBorder = { fg = p.razor },
|
||||
NotifyWARNBorder = { fg = p.amber },
|
||||
NotifyINFOBorder = { fg = p.tech },
|
||||
NotifyDEBUGBorder = { fg = p.stealth },
|
||||
NotifyTRACEBorder = { fg = p.sacred },
|
||||
NotifyERRORIcon = { fg = p.razor },
|
||||
NotifyWARNIcon = { fg = p.amber },
|
||||
NotifyINFOIcon = { fg = p.tech },
|
||||
NotifyDEBUGIcon = { fg = p.stealth },
|
||||
NotifyTRACEIcon = { fg = p.sacred },
|
||||
NotifyERRORTitle = { fg = p.razor, bold = true },
|
||||
NotifyWARNTitle = { fg = p.amber, bold = true },
|
||||
NotifyINFOTitle = { fg = p.tech, bold = true },
|
||||
NotifyDEBUGTitle = { fg = p.stealth, bold = true },
|
||||
NotifyTRACETitle = { fg = p.sacred, bold = true },
|
||||
NotifyERRORBody = { fg = p.text, bg = p.panel },
|
||||
NotifyWARNBody = { fg = p.text, bg = p.panel },
|
||||
NotifyINFOBody = { fg = p.text, bg = p.panel },
|
||||
NotifyDEBUGBody = { fg = p.dim, bg = p.panel },
|
||||
NotifyTRACEBody = { fg = p.dim, bg = p.panel },
|
||||
|
||||
-- PLUGINS: SATELLITE (Scrollbar) -----------------------------------------
|
||||
SatelliteBar = { bg = p.panel },
|
||||
SatelliteCursor = { fg = p.razor },
|
||||
SatellitePosition = { fg = p.dim },
|
||||
SatelliteError = { fg = p.alert },
|
||||
SatelliteWarning = { fg = p.amber },
|
||||
SatelliteHint = { fg = p.dim },
|
||||
SatelliteInfo = { fg = p.tech },
|
||||
SatelliteSearch = { fg = p.tech },
|
||||
SatelliteGit = { fg = p.toxic },
|
||||
SatelliteMark = { fg = p.amber },
|
||||
|
||||
-- PLUGINS: OIL.NVIM (File Explorer) --------------------------------------
|
||||
OilDir = { fg = p.tech, bold = true },
|
||||
OilDirIcon = { fg = p.tech },
|
||||
OilLink = { fg = p.sacred, italic = true },
|
||||
OilLinkTarget = { fg = p.sacred },
|
||||
OilCopy = { fg = p.amber, bold = true },
|
||||
OilMove = { fg = p.amber },
|
||||
OilChange = { fg = p.tech },
|
||||
OilCreate = { fg = p.toxic, bold = true },
|
||||
OilDelete = { fg = p.razor, bold = true },
|
||||
OilPermissionNone = { fg = p.stealth },
|
||||
OilPermissionRead = { fg = p.tech },
|
||||
OilPermissionWrite = { fg = p.amber },
|
||||
OilPermissionExecute = { fg = p.toxic },
|
||||
OilTypeDir = { fg = p.tech },
|
||||
OilTypeFile = { fg = p.text },
|
||||
OilTypeLink = { fg = p.sacred },
|
||||
OilTypeSpecial = { fg = p.razor },
|
||||
OilSize = { fg = p.dim },
|
||||
OilMtime = { fg = p.stealth },
|
||||
|
||||
-- PLUGINS: NEOTEST --------------------------------------------------------
|
||||
NeotestPassed = { fg = p.toxic },
|
||||
NeotestFailed = { fg = p.razor },
|
||||
NeotestRunning = { fg = p.amber },
|
||||
NeotestSkipped = { fg = p.dim },
|
||||
NeotestUnknown = { fg = p.stealth },
|
||||
NeotestTest = { fg = p.text },
|
||||
NeotestFile = { fg = p.tech },
|
||||
NeotestDir = { fg = p.tech, bold = true },
|
||||
NeotestNamespace = { fg = p.amber },
|
||||
NeotestMarked = { fg = p.razor, bold = true },
|
||||
NeotestTarget = { fg = p.razor },
|
||||
NeotestAdapterName = { fg = p.sacred, bold = true },
|
||||
NeotestWinSelect = { fg = p.tech, bold = true },
|
||||
NeotestFocused = { bold = true },
|
||||
NeotestIndent = { fg = p.border },
|
||||
NeotestExpandMarker = { fg = p.dim },
|
||||
NeotestWatching = { fg = p.amber },
|
||||
|
||||
-- PLUGINS: GRUG-FAR (Search & Replace) -----------------------------------
|
||||
GrugFarResultsHeader = { fg = p.ink, bg = p.razor, bold = true },
|
||||
GrugFarResultsMatch = { fg = p.void, bg = p.tech, bold = true },
|
||||
GrugFarResultsMatchAdded = { fg = p.toxic },
|
||||
GrugFarResultsMatchRemoved = { fg = p.razor },
|
||||
GrugFarResultsLineNo = { fg = p.dim },
|
||||
GrugFarResultsPath = { fg = p.tech, underline = true },
|
||||
GrugFarResultsStats = { fg = p.dim },
|
||||
GrugFarInputLabel = { fg = p.amber, bold = true },
|
||||
GrugFarInputPlaceholder = { fg = p.stealth },
|
||||
GrugFarHelpHeader = { fg = p.dim, bold = true },
|
||||
GrugFarHelpWinHeader = { fg = p.ink, bg = p.panel, bold = true },
|
||||
|
||||
-- PLUGINS: TWINNY (AI Ghost Text) ----------------------------------------
|
||||
TwinnyAccept = { fg = p.stealth, italic = true },
|
||||
TwinnyHint = { fg = p.stealth, italic = true },
|
||||
|
||||
-- PLUGINS: GITSIGNS (extended) -------------------------------------------
|
||||
GitSignsCurrentLineBlame = { fg = p.stealth, italic = true },
|
||||
GitSignsAddNr = { fg = p.toxic },
|
||||
GitSignsChangeNr = { fg = p.tech },
|
||||
GitSignsDeleteNr = { fg = p.razor },
|
||||
GitSignsAddLn = { fg = p.toxic, bg = p.panel },
|
||||
GitSignsChangeLn = { fg = p.tech, bg = p.panel },
|
||||
GitSignsDeleteLn = { fg = p.razor, bg = p.panel },
|
||||
GitSignsAddPreview = { fg = p.toxic, bg = p.panel },
|
||||
GitSignsDeletePreview = { fg = p.razor, bg = p.panel },
|
||||
GitSignsAddInline = { fg = p.void, bg = p.toxic },
|
||||
GitSignsDeleteInline = { fg = p.void, bg = p.razor },
|
||||
GitSignsChangeInline = { fg = p.void, bg = p.tech },
|
||||
GitSignsUntracked = { fg = p.dim },
|
||||
|
||||
-- PLUGINS: RENDER-MARKDOWN ------------------------------------------------
|
||||
RenderMarkdownH1 = { fg = p.razor, bold = true },
|
||||
RenderMarkdownH2 = { fg = p.amber, bold = true },
|
||||
RenderMarkdownH3 = { fg = p.tech, bold = true },
|
||||
RenderMarkdownH4 = { fg = p.toxic, bold = true },
|
||||
RenderMarkdownH5 = { fg = p.sacred, bold = true },
|
||||
RenderMarkdownH6 = { fg = p.azure, bold = true },
|
||||
RenderMarkdownH1Bg = { bg = p.panel },
|
||||
RenderMarkdownH2Bg = { bg = p.panel },
|
||||
RenderMarkdownH3Bg = { bg = p.panel },
|
||||
RenderMarkdownH4Bg = { bg = p.panel },
|
||||
RenderMarkdownH5Bg = { bg = p.panel },
|
||||
RenderMarkdownH6Bg = { bg = p.panel },
|
||||
RenderMarkdownCode = { bg = p.panel },
|
||||
RenderMarkdownCodeInline = { fg = p.toxic, bg = p.panel },
|
||||
RenderMarkdownBullet = { fg = p.razor },
|
||||
RenderMarkdownQuote = { fg = p.stealth, italic = true },
|
||||
RenderMarkdownDash = { fg = p.border },
|
||||
RenderMarkdownLink = { fg = p.tech, underline = true },
|
||||
RenderMarkdownSign = { bg = p.void },
|
||||
RenderMarkdownMath = { fg = p.tech },
|
||||
RenderMarkdownTableHead = { fg = p.ink, bg = p.razor, bold = true },
|
||||
RenderMarkdownTableRow = { fg = p.text },
|
||||
RenderMarkdownTableFill = { fg = p.border },
|
||||
RenderMarkdownTodo = { fg = p.void, bg = p.amber, bold = true },
|
||||
RenderMarkdownUnchecked = { fg = p.stealth },
|
||||
RenderMarkdownChecked = { fg = p.toxic },
|
||||
}
|
||||
|
||||
for group, highlight in pairs(groups) do
|
||||
@@ -376,6 +723,44 @@ function M.load()
|
||||
end
|
||||
end
|
||||
|
||||
-- PLUGINS: LUALINE --------------------------------------------------------
|
||||
-- Export lualine theme from palette for use in lualine config
|
||||
do
|
||||
local p = M.palette
|
||||
M.lualine = {
|
||||
normal = {
|
||||
a = { fg = p.ink, bg = p.razor, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
insert = {
|
||||
a = { fg = p.ink, bg = p.toxic, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
visual = {
|
||||
a = { fg = p.ink, bg = p.tech, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
replace = {
|
||||
a = { fg = p.ink, bg = p.amber, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
command = {
|
||||
a = { fg = p.ink, bg = p.sacred, gui = "bold" },
|
||||
b = { fg = p.text, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
inactive = {
|
||||
a = { fg = p.dim, bg = p.panel },
|
||||
b = { fg = p.dim, bg = p.panel },
|
||||
c = { fg = p.dim, bg = p.void },
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
M.load()
|
||||
|
||||
return M
|
||||
@@ -1,19 +1,54 @@
|
||||
-- This file simply bootstraps the installation of Lazy.nvim and then calls other files for execution
|
||||
-- This file doesn't necessarily need to be touched, BE CAUTIOUS editing this file and proceed at your own risk.
|
||||
local lazypath = vim.env.LAZY or vim.fn.stdpath "data" .. "/lazy/lazy.nvim"
|
||||
if not (vim.env.LAZY or (vim.uv or vim.loop).fs_stat(lazypath)) then
|
||||
-- stylua: ignore
|
||||
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
|
||||
-- Bootstrap lazy.nvim
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git", "clone", "--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
"--branch=stable", lazypath,
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
|
||||
-- validate that lazy is available
|
||||
if not pcall(require, "lazy") then
|
||||
-- stylua: ignore
|
||||
vim.api.nvim_echo({ { ("Unable to load lazy from: %s\n"):format(lazypath), "ErrorMsg" }, { "Press any key to exit...", "MoreMsg" } }, true, {})
|
||||
vim.fn.getchar()
|
||||
vim.cmd.quit()
|
||||
-- Leader must be set before lazy loads plugins
|
||||
vim.g.mapleader = " "
|
||||
vim.g.maplocalleader = " "
|
||||
|
||||
-- Load core config (order matters)
|
||||
require("options")
|
||||
require("autocmds")
|
||||
|
||||
-- Load LSP server configurations (vim.lsp.config calls)
|
||||
-- These must run before vim.lsp.enable() in plugins/lsp.lua
|
||||
do
|
||||
local lsp_dir = vim.fn.stdpath("config") .. "/lua/lsp"
|
||||
for _, name in ipairs(vim.fn.readdir(lsp_dir)) do
|
||||
if name:match("%.lua$") then
|
||||
require("lsp." .. name:gsub("%.lua$", ""))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
require "lazy_setup"
|
||||
require "polish"
|
||||
-- Load colorscheme before plugins (prevents flash of wrong colors)
|
||||
-- colors/apex-neon.lua is managed by refresh-apex-themes, not via lazy
|
||||
vim.cmd.colorscheme("apex-neon")
|
||||
|
||||
-- Setup lazy.nvim
|
||||
require("lazy").setup({
|
||||
spec = { { import = "plugins" } },
|
||||
lockfile = vim.fn.stdpath("config") .. "/lazy-lock.json",
|
||||
defaults = { lazy = false },
|
||||
install = { colorscheme = { "apex-neon", "habamax" } },
|
||||
checker = { enabled = false },
|
||||
change_detection = { enabled = false },
|
||||
performance = {
|
||||
rtp = {
|
||||
disabled_plugins = {
|
||||
"gzip", "matchit", "matchparen", "netrwPlugin",
|
||||
"tarPlugin", "tohtml", "tutor", "zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Keymaps loaded after lazy so plugin keymaps can be set in their own files
|
||||
require("keymaps")
|
||||
|
||||
56
dot_config/nvim/lazy-lock.json
Normal file
56
dot_config/nvim/lazy-lock.json
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" },
|
||||
"actions-preview.nvim": { "branch": "master", "commit": "2b604b2e8e662c03b716436f6ffebcb19663e66a" },
|
||||
"aerial.nvim": { "branch": "master", "commit": "645d108a5242ec7b378cbe643eb6d04d4223f034" },
|
||||
"blink.cmp": { "branch": "main", "commit": "485c03400608cb6534bbf84da8c1c471fc4808c0" },
|
||||
"blink.compat": { "branch": "main", "commit": "2ed6d9a28b07fa6f3bface818470605f8896408c" },
|
||||
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
|
||||
"cmp-latex-symbols": { "branch": "main", "commit": "0f8a9539f4c1c8fcf3b5244866b07b9d07282fa2" },
|
||||
"cmp-vimtex": { "branch": "master", "commit": "c09ca05bfa0641754516f13294d73d3799a02fc8" },
|
||||
"conform.nvim": { "branch": "master", "commit": "086a40dc7ed8242c03be9f47fbcee68699cc2395" },
|
||||
"diffview.nvim": { "branch": "main", "commit": "4516612fe98ff56ae0415a259ff6361a89419b0a" },
|
||||
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
|
||||
"gitsigns.nvim": { "branch": "main", "commit": "8d82c240f190fc33723d48c308ccc1ed8baad69d" },
|
||||
"grug-far.nvim": { "branch": "main", "commit": "b08a9f8d0602fdf075262e8e1b6dc776b3966003" },
|
||||
"indent-blankline.nvim": { "branch": "master", "commit": "d28a3f70721c79e3c5f6693057ae929f3d9c0a03" },
|
||||
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
|
||||
"llm.nvim": { "branch": "main", "commit": "fdc0758187da61612f9d3365f7a1ac45de47471c" },
|
||||
"ltex_extra.nvim": { "branch": "master", "commit": "49ea83c231139d98b7c9668c99e7b4591421b056" },
|
||||
"lualine.nvim": { "branch": "master", "commit": "f5d2a8570f8b736ddb9bb4be504355bcd6e15ec8" },
|
||||
"luasnip-latex-snippets.nvim": { "branch": "main", "commit": "a14821dd680dfdd2006b135425cc2a8ab297ebc6" },
|
||||
"mason-lspconfig.nvim": { "branch": "main", "commit": "63a3c6a80538de1003373a619e29aeda27809ad3" },
|
||||
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
|
||||
"mason.nvim": { "branch": "main", "commit": "b03fb0f20bc1d43daf558cda981a2be22e73ac42" },
|
||||
"neogit": { "branch": "master", "commit": "e06745228600a585b88726fc9fba44a373c15a47" },
|
||||
"neotest": { "branch": "master", "commit": "fd0b7986dd0ae04e38ec7dc0c78a432e3820839c" },
|
||||
"neotest-java": { "branch": "main", "commit": "01b4a5950b4615c4afd132c6edcf04e10150bbe2" },
|
||||
"neotest-rust": { "branch": "main", "commit": "2c9941d4a358839918fac21d20fc8fef0e1ad05f" },
|
||||
"nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" },
|
||||
"nvim-dap": { "branch": "master", "commit": "45a69eba683a2c448dd9ecfc4de89511f0646b5f" },
|
||||
"nvim-dap-ui": { "branch": "master", "commit": "1a66cabaa4a4da0be107d5eda6d57242f0fe7e49" },
|
||||
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
|
||||
"nvim-jdtls": { "branch": "master", "commit": "77ccaeb422f8c81b647605da5ddb4a7f725cda90" },
|
||||
"nvim-navic": { "branch": "master", "commit": "f5eba192f39b453675d115351808bd51276d9de5" },
|
||||
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
|
||||
"nvim-notify": { "branch": "master", "commit": "8701bece920b38ea289b457f902e2ad184131a5d" },
|
||||
"nvim-surround": { "branch": "main", "commit": "61319d4bd1c5e336e197defa15bd104c51f0fb29" },
|
||||
"nvim-treesitter": { "branch": "master", "commit": "cf12346a3414fa1b06af75c79faebe7f76df080a" },
|
||||
"nvim-treesitter-textobjects": { "branch": "master", "commit": "5ca4aaa6efdcc59be46b95a3e876300cfead05ef" },
|
||||
"nvim-web-devicons": { "branch": "master", "commit": "6e76c5e47e957fbf080b1fdac165c66dbd2e7cfb" },
|
||||
"oil.nvim": { "branch": "master", "commit": "0fcc83805ad11cf714a949c98c605ed717e0b83e" },
|
||||
"persistence.nvim": { "branch": "main", "commit": "b20b2a7887bd39c1a356980b45e03250f3dce49c" },
|
||||
"plenary.nvim": { "branch": "master", "commit": "fcb3e9ac127d178b4c189088396165b3facc219e" },
|
||||
"project.nvim": { "branch": "main", "commit": "8c6bad7d22eef1b71144b401c9f74ed01526a4fb" },
|
||||
"render-markdown.nvim": { "branch": "main", "commit": "54d4b5431e9634ee3d8d30784e017239b5b89d41" },
|
||||
"satellite.nvim": { "branch": "main", "commit": "62b0aa1a941e35e694e8a50b589150bcca8c084d" },
|
||||
"scope.nvim": { "branch": "main", "commit": "228aabdb1b9cc74f0c0ccec88e79873857236e49" },
|
||||
"smart-splits.nvim": { "branch": "master", "commit": "0bd02161ee5c5378bf4133fcedf53d1fc4179e1d" },
|
||||
"statuscol.nvim": { "branch": "main", "commit": "c46172d0911aa5d49ba5f39f4351d1bb7aa289cc" },
|
||||
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c" },
|
||||
"telescope.nvim": { "branch": "0.1.x", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" },
|
||||
"toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" },
|
||||
"trouble.nvim": { "branch": "main", "commit": "748ca2789044607f19786b1d837044544c55e80a" },
|
||||
"vim-visual-multi": { "branch": "master", "commit": "a6975e7c1ee157615bbc80fc25e4392f71c344d4" },
|
||||
"vimtex": { "branch": "master", "commit": "9306903316c3ddd250676b7cf97c84a84c9c8f99" },
|
||||
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }
|
||||
}
|
||||
10
dot_config/nvim/lua/apex-neon.lua
Normal file
10
dot_config/nvim/lua/apex-neon.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
-- Proxy so require("apex-neon") returns the colorscheme module
|
||||
-- colors/apex-neon.lua is managed by refresh-apex-themes — do not edit that file
|
||||
-- This shim is safe to keep in chezmoi alongside the colors/ file
|
||||
local colors_path = vim.fn.stdpath("config") .. "/colors/apex-neon.lua"
|
||||
local ok, result = pcall(dofile, colors_path)
|
||||
if not ok then
|
||||
vim.notify("apex-neon shim: failed to load " .. colors_path, vim.log.levels.WARN)
|
||||
return {}
|
||||
end
|
||||
return result
|
||||
81
dot_config/nvim/lua/autocmds.lua
Normal file
81
dot_config/nvim/lua/autocmds.lua
Normal file
@@ -0,0 +1,81 @@
|
||||
local augroup = function(name)
|
||||
return vim.api.nvim_create_augroup("user_" .. name, { clear = true })
|
||||
end
|
||||
|
||||
-- Filetype detection
|
||||
vim.filetype.add({ extension = { j2 = "jinja.html" } })
|
||||
|
||||
-- Highlight on yank
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
group = augroup("yank_highlight"),
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
})
|
||||
|
||||
-- Remove trailing whitespace on save
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
group = augroup("trailing_whitespace"),
|
||||
pattern = "*",
|
||||
command = [[%s/\s\+$//e]],
|
||||
})
|
||||
|
||||
-- Resize splits when window resizes
|
||||
vim.api.nvim_create_autocmd("VimResized", {
|
||||
group = augroup("resize_splits"),
|
||||
callback = function()
|
||||
local current_tab = vim.fn.tabpagenr()
|
||||
vim.cmd("tabdo wincmd =")
|
||||
vim.cmd("tabnext " .. current_tab)
|
||||
end,
|
||||
})
|
||||
|
||||
-- Close certain filetypes with q
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
group = augroup("close_with_q"),
|
||||
pattern = { "help", "lspinfo", "man", "qf", "checkhealth" },
|
||||
callback = function(event)
|
||||
vim.bo[event.buf].buflisted = false
|
||||
vim.keymap.set("n", "q", "<cmd>close<cr>", { buffer = event.buf, silent = true })
|
||||
end,
|
||||
})
|
||||
|
||||
-- LSP on attach: inlay hints + navic
|
||||
vim.api.nvim_create_autocmd("LspAttach", {
|
||||
group = augroup("lsp_attach"),
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
if not client then return end
|
||||
|
||||
-- Enable inlay hints
|
||||
if client.supports_method("textDocument/inlayHint") then
|
||||
vim.lsp.inlay_hint.enable(true, { bufnr = args.buf })
|
||||
end
|
||||
|
||||
-- Wire nvim-navic for breadcrumbs (lualine winbar)
|
||||
if client.supports_method("textDocument/documentSymbol") then
|
||||
local ok, navic = pcall(require, "nvim-navic")
|
||||
if ok then
|
||||
navic.attach(client, args.buf)
|
||||
end
|
||||
end
|
||||
|
||||
-- LSP keymaps (buffer-local)
|
||||
local map = function(keys, func, desc)
|
||||
vim.keymap.set("n", keys, func, { buffer = args.buf, desc = "LSP: " .. desc })
|
||||
end
|
||||
|
||||
map("gd", vim.lsp.buf.definition, "Go to definition")
|
||||
map("gi", vim.lsp.buf.implementation, "Go to implementation")
|
||||
map("<leader>D", vim.lsp.buf.type_definition, "Type definition")
|
||||
map("<leader>lf", function() vim.lsp.buf.format({ async = true }) end, "Format")
|
||||
map("<leader>lr", vim.lsp.buf.rename, "Rename symbol")
|
||||
map("<leader>ls", vim.lsp.buf.document_symbol, "Document symbols")
|
||||
map("<leader>lR", vim.lsp.buf.references, "References")
|
||||
map("<leader>li", function()
|
||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled({ bufnr = args.buf }), { bufnr = args.buf })
|
||||
end, "Toggle inlay hints")
|
||||
|
||||
-- grr, grn, gra, K are Neovim 0.12 built-ins, no need to set
|
||||
end,
|
||||
})
|
||||
@@ -1,29 +0,0 @@
|
||||
-- AstroCommunity: import any community modules here
|
||||
-- We import this file in `lazy_setup.lua` before the `plugins/` folder.
|
||||
-- This guarantees that the specs are processed before any user plugins.
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrocommunity",
|
||||
-- these packs can set up things such as Treesitter, Language Servers, additional language specific plugins, and more!
|
||||
{ import = "astrocommunity.snippet.nvim-snippets" },
|
||||
{ import = "astrocommunity.pack.lua" },
|
||||
{ import = "astrocommunity.pack.hyprlang" },
|
||||
{ import = "astrocommunity.pack.java" },
|
||||
{ import = "astrocommunity.pack.rust" },
|
||||
{ import = "astrocommunity.pack.go" },
|
||||
{ import = "astrocommunity.pack.docker" },
|
||||
{ import = "astrocommunity.pack.json" },
|
||||
{ import = "astrocommunity.pack.html-css" },
|
||||
{ import = "astrocommunity.pack.sql" },
|
||||
{ import = "astrocommunity.pack.typescript" },
|
||||
{ import = "astrocommunity.pack.toml" },
|
||||
{ import = "astrocommunity.pack.xml" },
|
||||
{ import = "astrocommunity.pack.yaml" },
|
||||
{ import = "astrocommunity.pack.python" },
|
||||
{ import = "astrocommunity.pack.kotlin" },
|
||||
{ import = "astrocommunity.pack.php" },
|
||||
|
||||
{ import = "astrocommunity.markdown-and-latex.vimtex" },
|
||||
-- import/override with your plugins folder
|
||||
}
|
||||
43
dot_config/nvim/lua/keymaps.lua
Normal file
43
dot_config/nvim/lua/keymaps.lua
Normal file
@@ -0,0 +1,43 @@
|
||||
local map = vim.keymap.set
|
||||
|
||||
-- Better window navigation
|
||||
map("n", "<leader>|", "<C-w>v", { desc = "Vertical split" })
|
||||
map("n", "<leader>-", "<C-w>s", { desc = "Horizontal split" })
|
||||
map("n", "<leader>w", "<C-w>q", { desc = "Close split" })
|
||||
|
||||
-- Buffer navigation
|
||||
map("n", "]b", "<cmd>bnext<cr>", { desc = "Next buffer" })
|
||||
map("n", "[b", "<cmd>bprevious<cr>", { desc = "Prev buffer" })
|
||||
map("n", "<leader>bd", "<cmd>bdelete<cr>", { desc = "Delete buffer" })
|
||||
map("n", "<leader>bo", "<cmd>%bd|e#|bd#<cr>", { desc = "Close other buffers" })
|
||||
|
||||
-- Diagnostics
|
||||
map("n", "]d", vim.diagnostic.goto_next, { desc = "Next diagnostic" })
|
||||
map("n", "[d", vim.diagnostic.goto_prev, { desc = "Prev diagnostic" })
|
||||
|
||||
-- Move lines
|
||||
map("v", "J", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
|
||||
map("v", "K", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
|
||||
|
||||
-- Keep cursor centered
|
||||
map("n", "<C-d>", "<C-d>zz")
|
||||
map("n", "<C-u>", "<C-u>zz")
|
||||
map("n", "n", "nzzzv")
|
||||
map("n", "N", "Nzzzv")
|
||||
|
||||
-- Clear search highlight
|
||||
map("n", "<Esc>", "<cmd>nohlsearch<cr>")
|
||||
|
||||
-- Don't yank on paste in visual mode
|
||||
map("x", "<leader>p", '"_dP', { desc = "Paste without yanking" })
|
||||
|
||||
-- Better indenting
|
||||
map("v", "<", "<gv")
|
||||
map("v", ">", ">gv")
|
||||
|
||||
-- Save
|
||||
map({ "n", "i" }, "<C-s>", "<cmd>w<cr>", { desc = "Save" })
|
||||
|
||||
-- Quit
|
||||
map("n", "<leader>q", "<cmd>q<cr>", { desc = "Quit" })
|
||||
map("n", "<leader>Q", "<cmd>qa<cr>", { desc = "Quit all" })
|
||||
@@ -1,32 +0,0 @@
|
||||
require("lazy").setup({
|
||||
{
|
||||
"AstroNvim/AstroNvim",
|
||||
version = "^5", -- Remove version tracking to elect for nightly AstroNvim
|
||||
import = "astronvim.plugins",
|
||||
opts = { -- AstroNvim options must be set here with the `import` key
|
||||
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
|
||||
maplocalleader = ",", -- This ensures the localleader key must be configured before Lazy is set up
|
||||
icons_enabled = true, -- Set to false to disable icons (if no Nerd Font is available)
|
||||
pin_plugins = nil, -- Default will pin plugins when tracking `version` of AstroNvim, set to true/false to override
|
||||
update_notifications = true, -- Enable/disable notification about running `:Lazy update` twice to update pinned plugins
|
||||
},
|
||||
},
|
||||
{ import = "community" },
|
||||
{ import = "plugins" },
|
||||
} --[[@as LazySpec]], {
|
||||
-- Configure any other `lazy.nvim` configuration options here
|
||||
install = { colorscheme = { "astrotheme", "habamax" } },
|
||||
ui = { backdrop = 100 },
|
||||
performance = {
|
||||
rtp = {
|
||||
-- disable some rtp plugins, add more to your liking
|
||||
disabled_plugins = {
|
||||
"gzip",
|
||||
"netrwPlugin",
|
||||
"tarPlugin",
|
||||
"tohtml",
|
||||
"zipPlugin",
|
||||
},
|
||||
},
|
||||
},
|
||||
} --[[@as LazyConfig]])
|
||||
38
dot_config/nvim/lua/lsp/ltex.lua
Normal file
38
dot_config/nvim/lua/lsp/ltex.lua
Normal file
@@ -0,0 +1,38 @@
|
||||
-- LTeX grammar/spell checking for LaTeX and Markdown
|
||||
-- ltex_extra.nvim manages dictionaries/rules persistence
|
||||
vim.lsp.config("ltex", {
|
||||
filetypes = { "tex", "plaintex", "bib", "markdown" },
|
||||
settings = {
|
||||
ltex = {
|
||||
checkFrequency = "save",
|
||||
language = "en-GB",
|
||||
additionalRules = { motherTongue = "de-DE" },
|
||||
dictionary = {
|
||||
["en-GB"] = {},
|
||||
["de-DE"] = {},
|
||||
["fr-FR"] = {},
|
||||
},
|
||||
disabledRules = {
|
||||
["en-GB"] = {},
|
||||
["de-DE"] = {},
|
||||
["fr-FR"] = {},
|
||||
},
|
||||
hiddenFalsePositives = {
|
||||
["en-GB"] = {},
|
||||
["de-DE"] = {},
|
||||
["fr-FR"] = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
on_attach = function(client, bufnr)
|
||||
local ok, ltex_extra = pcall(require, "ltex_extra")
|
||||
if ok then
|
||||
ltex_extra.setup({
|
||||
load_langs = { "en-GB", "de-DE", "fr-FR" },
|
||||
init_check = true,
|
||||
path = ".ltex",
|
||||
log_level = "none",
|
||||
})
|
||||
end
|
||||
end,
|
||||
})
|
||||
17
dot_config/nvim/lua/lsp/lua_ls.lua
Normal file
17
dot_config/nvim/lua/lsp/lua_ls.lua
Normal file
@@ -0,0 +1,17 @@
|
||||
vim.lsp.config("lua_ls", {
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = { version = "LuaJIT" },
|
||||
workspace = {
|
||||
checkThirdParty = false,
|
||||
library = {
|
||||
vim.env.VIMRUNTIME,
|
||||
"${3rd}/luv/library",
|
||||
},
|
||||
},
|
||||
diagnostics = { globals = { "vim" } },
|
||||
telemetry = { enable = false },
|
||||
format = { enable = false }, -- stylua handles formatting
|
||||
},
|
||||
},
|
||||
})
|
||||
1
dot_config/nvim/lua/lsp/marksman.lua
Normal file
1
dot_config/nvim/lua/lsp/marksman.lua
Normal file
@@ -0,0 +1 @@
|
||||
vim.lsp.config("marksman", {})
|
||||
40
dot_config/nvim/lua/lsp/rust_analyzer.lua
Normal file
40
dot_config/nvim/lua/lsp/rust_analyzer.lua
Normal file
@@ -0,0 +1,40 @@
|
||||
vim.lsp.config("rust_analyzer", {
|
||||
settings = {
|
||||
["rust-analyzer"] = {
|
||||
cargo = {
|
||||
allFeatures = true,
|
||||
loadOutDirsFromCheck = true,
|
||||
runBuildScripts = true,
|
||||
},
|
||||
checkOnSave = {
|
||||
allFeatures = true,
|
||||
command = "clippy",
|
||||
extraArgs = { "--no-deps" },
|
||||
},
|
||||
procMacro = {
|
||||
enable = true,
|
||||
ignored = {
|
||||
["async-trait"] = { "async_trait" },
|
||||
["napi-derive"] = { "napi" },
|
||||
["async-recursion"] = { "async_recursion" },
|
||||
},
|
||||
},
|
||||
inlayHints = {
|
||||
bindingModeHints = { enable = false },
|
||||
closingBraceHints = { minLines = 25 },
|
||||
lifetimeElisionHints = { enable = "never" },
|
||||
typeHints = { enable = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
-- Support project-local override (e.g. Tauri: root_dir = src-tauri/)
|
||||
local local_cfg_path = vim.fn.getcwd() .. "/.nvim.lua"
|
||||
local local_cfg = vim.secure.read(local_cfg_path)
|
||||
if local_cfg then
|
||||
local ok, err = pcall(loadstring(local_cfg))
|
||||
if not ok then
|
||||
vim.notify("rust_analyzer local config error: " .. tostring(err), vim.log.levels.WARN)
|
||||
end
|
||||
end
|
||||
10
dot_config/nvim/lua/lsp/svelte.lua
Normal file
10
dot_config/nvim/lua/lsp/svelte.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
vim.lsp.config("svelte", {
|
||||
on_attach = function(client, _)
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = { "*.js", "*.ts" },
|
||||
callback = function(ctx)
|
||||
client.notify("$/onDidChangeTsOrJsFile", { uri = ctx.match })
|
||||
end,
|
||||
})
|
||||
end,
|
||||
})
|
||||
13
dot_config/nvim/lua/lsp/taplo.lua
Normal file
13
dot_config/nvim/lua/lsp/taplo.lua
Normal file
@@ -0,0 +1,13 @@
|
||||
vim.lsp.config("taplo", {
|
||||
settings = {
|
||||
evenBetterToml = {
|
||||
formatter = {
|
||||
indentTables = false,
|
||||
indentEntries = false,
|
||||
inlineTable = {},
|
||||
trailingNewline = true,
|
||||
reorderKeys = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
20
dot_config/nvim/lua/lsp/texlab.lua
Normal file
20
dot_config/nvim/lua/lsp/texlab.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
vim.lsp.config("texlab", {
|
||||
settings = {
|
||||
texlab = {
|
||||
build = {
|
||||
executable = "latexmk",
|
||||
args = { "-pdf", "-interaction=nonstopmode", "-synctex=1", "%f" },
|
||||
onSave = false,
|
||||
forwardSearchAfter = false,
|
||||
},
|
||||
chktex = {
|
||||
onOpenAndSave = false,
|
||||
onEdit = false,
|
||||
},
|
||||
diagnosticsDelay = 300,
|
||||
formatterLineLength = 80,
|
||||
bibtexFormatter = "texlab",
|
||||
latexFormatter = "latexindent",
|
||||
},
|
||||
},
|
||||
})
|
||||
26
dot_config/nvim/lua/lsp/ts_ls.lua
Normal file
26
dot_config/nvim/lua/lsp/ts_ls.lua
Normal file
@@ -0,0 +1,26 @@
|
||||
vim.lsp.config("ts_ls", {
|
||||
settings = {
|
||||
typescript = {
|
||||
inlayHints = {
|
||||
includeInlayParameterNameHints = "all",
|
||||
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
|
||||
includeInlayFunctionParameterTypeHints = true,
|
||||
includeInlayVariableTypeHints = true,
|
||||
includeInlayPropertyDeclarationTypeHints = true,
|
||||
includeInlayFunctionLikeReturnTypeHints = true,
|
||||
includeInlayEnumMemberValueHints = true,
|
||||
},
|
||||
},
|
||||
javascript = {
|
||||
inlayHints = {
|
||||
includeInlayParameterNameHints = "all",
|
||||
includeInlayParameterNameHintsWhenArgumentMatchesName = false,
|
||||
includeInlayFunctionParameterTypeHints = true,
|
||||
includeInlayVariableTypeHints = true,
|
||||
includeInlayPropertyDeclarationTypeHints = true,
|
||||
includeInlayFunctionLikeReturnTypeHints = true,
|
||||
includeInlayEnumMemberValueHints = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
})
|
||||
11
dot_config/nvim/lua/lsp/yamlls.lua
Normal file
11
dot_config/nvim/lua/lsp/yamlls.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
vim.lsp.config("yamlls", {
|
||||
settings = {
|
||||
yaml = {
|
||||
keyOrdering = false,
|
||||
format = { enable = true },
|
||||
validate = true,
|
||||
schemaStore = { enable = false, url = "" },
|
||||
schemas = {},
|
||||
},
|
||||
},
|
||||
})
|
||||
62
dot_config/nvim/lua/options.lua
Normal file
62
dot_config/nvim/lua/options.lua
Normal file
@@ -0,0 +1,62 @@
|
||||
local opt = vim.opt
|
||||
|
||||
-- Line numbers
|
||||
opt.number = true
|
||||
opt.relativenumber = true
|
||||
opt.signcolumn = "yes"
|
||||
|
||||
-- Indentation
|
||||
opt.tabstop = 4
|
||||
opt.shiftwidth = 4
|
||||
opt.expandtab = true
|
||||
opt.smartindent = true
|
||||
|
||||
-- Editing
|
||||
opt.wrap = false
|
||||
opt.scrolloff = 8
|
||||
opt.sidescrolloff = 8
|
||||
opt.virtualedit = "block"
|
||||
opt.clipboard = "unnamedplus"
|
||||
|
||||
-- Files
|
||||
opt.undofile = true
|
||||
opt.swapfile = false
|
||||
opt.backup = false
|
||||
|
||||
-- Windows
|
||||
opt.splitright = true
|
||||
opt.splitbelow = true
|
||||
|
||||
-- Search
|
||||
opt.ignorecase = true
|
||||
opt.smartcase = true
|
||||
opt.hlsearch = true
|
||||
opt.incsearch = true
|
||||
|
||||
-- Performance
|
||||
opt.updatetime = 250
|
||||
opt.timeoutlen = 300
|
||||
|
||||
-- Appearance
|
||||
opt.termguicolors = true
|
||||
opt.cursorline = true
|
||||
opt.showmode = false -- lualine handles this
|
||||
opt.pumheight = 10
|
||||
opt.conceallevel = 2 -- for LaTeX/Markdown
|
||||
|
||||
-- Folds (treesitter-based, foldenable=false = open all by default)
|
||||
opt.foldmethod = "expr"
|
||||
opt.foldexpr = "v:lua.vim.treesitter.foldexpr()"
|
||||
opt.foldenable = false
|
||||
opt.foldlevel = 99
|
||||
|
||||
-- Spell (disabled globally; enabled per-filetype via ftplugin/)
|
||||
opt.spell = false
|
||||
|
||||
-- Completion
|
||||
opt.completeopt = { "menu", "menuone", "noselect" }
|
||||
|
||||
-- Misc
|
||||
opt.mouse = "a"
|
||||
opt.fileencoding = "utf-8"
|
||||
opt.shortmess:append("c")
|
||||
34
dot_config/nvim/lua/plugins/ai.lua
Normal file
34
dot_config/nvim/lua/plugins/ai.lua
Normal file
@@ -0,0 +1,34 @@
|
||||
return {
|
||||
-- Local AI ghost text via ollama (FIM completion)
|
||||
{
|
||||
"huggingface/llm.nvim",
|
||||
event = "InsertEnter",
|
||||
keys = {
|
||||
{ "<leader>ta", "<cmd>LLMToggleAutoSuggest<cr>", desc = "Toggle AI suggestions" },
|
||||
},
|
||||
opts = {
|
||||
backend = "ollama",
|
||||
model = "qwen2.5-coder:latest",
|
||||
url = vim.env.OLLAMA_HOST or "http://localhost:11434",
|
||||
tokens_to_clear = { "<|endoftext|>" },
|
||||
fim = {
|
||||
enabled = true,
|
||||
prefix = "<|fim_prefix|>",
|
||||
middle = "<|fim_middle|>",
|
||||
suffix = "<|fim_suffix|>",
|
||||
},
|
||||
context_window = 4096,
|
||||
tokenizer = nil, -- use token estimation
|
||||
enable_suggestions_on_startup = true,
|
||||
display = {
|
||||
renderer = "virtual-text",
|
||||
virtual_text = {
|
||||
enabled = true,
|
||||
hl = "Comment",
|
||||
},
|
||||
},
|
||||
accept_keymap = "<Tab>",
|
||||
dismiss_keymap = "<C-]>",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,83 +1,2 @@
|
||||
-- AstroCore provides a central place to modify mappings, vim options, autocommands, and more!
|
||||
-- Configuration documentation can be found with `:h astrocore`
|
||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
||||
-- as this provides autocomplete and documentation while editing
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrocore",
|
||||
---@type AstroCoreOpts
|
||||
opts = {
|
||||
-- Configure core features of AstroNvim
|
||||
features = {
|
||||
large_buf = { size = 1024 * 256, lines = 10000 }, -- set global limits for large files for disabling features like treesitter
|
||||
autopairs = true, -- enable autopairs at start
|
||||
cmp = true, -- enable completion at start
|
||||
diagnostics = { virtual_text = true, virtual_lines = false }, -- diagnostic settings on startup
|
||||
highlighturl = true, -- highlight URLs at start
|
||||
notifications = true, -- enable notifications at start
|
||||
},
|
||||
-- Diagnostics configuration (for vim.diagnostics.config({...})) when diagnostics are on
|
||||
diagnostics = {
|
||||
virtual_text = true,
|
||||
underline = true,
|
||||
},
|
||||
-- passed to `vim.filetype.add`
|
||||
filetypes = {
|
||||
-- see `:h vim.filetype.add` for usage
|
||||
extension = {
|
||||
foo = "fooscript",
|
||||
},
|
||||
filename = {
|
||||
[".foorc"] = "fooscript",
|
||||
},
|
||||
pattern = {
|
||||
[".*/etc/foo/.*"] = "fooscript",
|
||||
},
|
||||
},
|
||||
-- vim options can be configured here
|
||||
options = {
|
||||
opt = { -- vim.opt.<key>
|
||||
relativenumber = true, -- sets vim.opt.relativenumber
|
||||
number = true, -- sets vim.opt.number
|
||||
spell = false, -- sets vim.opt.spell
|
||||
signcolumn = "yes", -- sets vim.opt.signcolumn to yes
|
||||
wrap = false, -- sets vim.opt.wrap
|
||||
},
|
||||
g = { -- vim.g.<key>
|
||||
-- configure global vim variables (vim.g)
|
||||
-- NOTE: `mapleader` and `maplocalleader` must be set in the AstroNvim opts or before `lazy.setup`
|
||||
-- This can be found in the `lua/lazy_setup.lua` file
|
||||
},
|
||||
},
|
||||
-- Mappings can be configured through AstroCore as well.
|
||||
-- NOTE: keycodes follow the casing in the vimdocs. For example, `<Leader>` must be capitalized
|
||||
mappings = {
|
||||
-- first key is the mode
|
||||
n = {
|
||||
-- second key is the lefthand side of the map
|
||||
|
||||
-- navigate buffer tabs
|
||||
["]b"] = { function() require("astrocore.buffer").nav(vim.v.count1) end, desc = "Next buffer" },
|
||||
["[b"] = { function() require("astrocore.buffer").nav(-vim.v.count1) end, desc = "Previous buffer" },
|
||||
|
||||
-- mappings seen under group name "Buffer"
|
||||
["<Leader>bd"] = {
|
||||
function()
|
||||
require("astroui.status.heirline").buffer_picker(
|
||||
function(bufnr) require("astrocore.buffer").close(bufnr) end
|
||||
)
|
||||
end,
|
||||
desc = "Close buffer from tabline",
|
||||
},
|
||||
|
||||
-- tables with just a `desc` key will be registered with which-key if it's installed
|
||||
-- this is useful for naming menus
|
||||
-- ["<Leader>b"] = { desc = "Buffers" },
|
||||
|
||||
-- setting a mapping to false will disable it
|
||||
-- ["<C-S>"] = false,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
-- AstroNvim removed; core settings live in lua/options.lua and lua/autocmds.lua
|
||||
return {}
|
||||
|
||||
@@ -1,107 +1,2 @@
|
||||
-- AstroLSP allows you to customize the features in AstroNvim's LSP configuration engine
|
||||
-- Configuration documentation can be found with `:h astrolsp`
|
||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
||||
-- as this provides autocomplete and documentation while editing
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astrolsp",
|
||||
---@type AstroLSPOpts
|
||||
opts = {
|
||||
-- Configuration table of features provided by AstroLSP
|
||||
features = {
|
||||
codelens = true, -- enable/disable codelens refresh on start
|
||||
inlay_hints = false, -- enable/disable inlay hints on start
|
||||
semantic_tokens = true, -- enable/disable semantic token highlighting
|
||||
},
|
||||
-- customize lsp formatting options
|
||||
formatting = {
|
||||
-- control auto formatting on save
|
||||
format_on_save = {
|
||||
enabled = true, -- enable or disable format on save globally
|
||||
allow_filetypes = { -- enable format on save for specified filetypes only
|
||||
-- "go",
|
||||
},
|
||||
ignore_filetypes = { -- disable format on save for specified filetypes
|
||||
-- "python",
|
||||
},
|
||||
},
|
||||
disabled = { -- disable formatting capabilities for the listed language servers
|
||||
-- disable lua_ls formatting capability if you want to use StyLua to format your lua code
|
||||
-- "lua_ls",
|
||||
},
|
||||
timeout_ms = 1000, -- default format timeout
|
||||
-- filter = function(client) -- fully override the default formatting function
|
||||
-- return true
|
||||
-- end
|
||||
},
|
||||
-- enable servers that you already have installed without mason
|
||||
servers = {
|
||||
-- "pyright"
|
||||
},
|
||||
-- ensure servers are installed
|
||||
ensure_installed = {
|
||||
"ltex",
|
||||
},
|
||||
-- customize language server configuration options passed to `lspconfig`
|
||||
---@diagnostic disable: missing-fields
|
||||
config = {
|
||||
-- clangd = { capabilities = { offsetEncoding = "utf-8" } },
|
||||
},
|
||||
-- customize how language servers are attached
|
||||
handlers = {
|
||||
-- a function without a key is simply the default handler, functions take two parameters, the server name and the configured options table for that server
|
||||
-- function(server, opts) require("lspconfig")[server].setup(opts) end
|
||||
|
||||
-- the key is the server that is being setup with `lspconfig`
|
||||
-- rust_analyzer = false, -- setting a handler to false will disable the set up of that language server
|
||||
-- pyright = function(_, opts) require("lspconfig").pyright.setup(opts) end -- or a custom handler function can be passed
|
||||
},
|
||||
-- Configure buffer local auto commands to add when attaching a language server
|
||||
autocmds = {
|
||||
-- first key is the `augroup` to add the auto commands to (:h augroup)
|
||||
lsp_codelens_refresh = {
|
||||
-- Optional condition to create/delete auto command group
|
||||
-- can either be a string of a client capability or a function of `fun(client, bufnr): boolean`
|
||||
-- condition will be resolved for each client on each execution and if it ever fails for all clients,
|
||||
-- the auto commands will be deleted for that buffer
|
||||
cond = "textDocument/codeLens",
|
||||
-- cond = function(client, bufnr) return client.name == "lua_ls" end,
|
||||
-- list of auto commands to set
|
||||
{
|
||||
-- events to trigger
|
||||
event = { "InsertLeave", "BufEnter" },
|
||||
-- the rest of the autocmd options (:h nvim_create_autocmd)
|
||||
desc = "Refresh codelens (buffer)",
|
||||
callback = function(args)
|
||||
if require("astrolsp").config.features.codelens then vim.lsp.codelens.refresh { bufnr = args.buf } end
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
-- mappings to be set up on attaching of a language server
|
||||
mappings = {
|
||||
n = {
|
||||
-- a `cond` key can provided as the string of a server capability to be required to attach, or a function with `client` and `bufnr` parameters from the `on_attach` that returns a boolean
|
||||
gD = {
|
||||
function() vim.lsp.buf.declaration() end,
|
||||
desc = "Declaration of current symbol",
|
||||
cond = "textDocument/declaration",
|
||||
},
|
||||
["<Leader>uY"] = {
|
||||
function() require("astrolsp.toggles").buffer_semantic_tokens() end,
|
||||
desc = "Toggle LSP semantic highlight (buffer)",
|
||||
cond = function(client)
|
||||
return client.supports_method "textDocument/semanticTokens/full" and vim.lsp.semantic_tokens ~= nil
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
-- A custom `on_attach` function to be run after the default `on_attach` function
|
||||
-- takes two parameters `client` and `bufnr` (`:h lspconfig-setup`)
|
||||
on_attach = function(client, bufnr)
|
||||
-- this would disable semanticTokensProvider for all clients
|
||||
-- client.server_capabilities.semanticTokensProvider = nil
|
||||
end,
|
||||
},
|
||||
}
|
||||
-- AstroNvim removed; LSP config uses native vim.lsp.config in lua/lsp/
|
||||
return {}
|
||||
|
||||
2
dot_config/nvim/lua/plugins/astroui.lua
Normal file
2
dot_config/nvim/lua/plugins/astroui.lua
Normal file
@@ -0,0 +1,2 @@
|
||||
-- AstroNvim removed; colorscheme is set via vim.cmd.colorscheme("apex-neon") in init.lua
|
||||
return {}
|
||||
@@ -1,37 +0,0 @@
|
||||
-- AstroUI provides the basis for configuring the AstroNvim User Interface
|
||||
-- Configuration documentation can be found with `:h astroui`
|
||||
-- NOTE: We highly recommend setting up the Lua Language Server (`:LspInstall lua_ls`)
|
||||
-- as this provides autocomplete and documentation while editing
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"AstroNvim/astroui",
|
||||
---@type AstroUIOpts
|
||||
opts = {
|
||||
-- change colorscheme
|
||||
colorscheme = "{{ .chezmoi.config.data.theme }}",
|
||||
-- AstroUI allows you to easily modify highlight groups easily for any and all colorschemes
|
||||
highlights = {
|
||||
init = { -- this table overrides highlights in all themes
|
||||
-- Normal = { bg = "#000000" },
|
||||
},
|
||||
astrodark = { -- a table of overrides/changes when applying the astrotheme theme
|
||||
-- Normal = { bg = "#000000" },
|
||||
},
|
||||
},
|
||||
-- Icons can be configured throughout the interface
|
||||
icons = {
|
||||
-- configure the loading of the lsp in the status line
|
||||
LSPLoading1 = "⠋",
|
||||
LSPLoading2 = "⠙",
|
||||
LSPLoading3 = "⠹",
|
||||
LSPLoading4 = "⠸",
|
||||
LSPLoading5 = "⠼",
|
||||
LSPLoading6 = "⠴",
|
||||
LSPLoading7 = "⠦",
|
||||
LSPLoading8 = "⠧",
|
||||
LSPLoading9 = "⠇",
|
||||
LSPLoading10 = "⠏",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -1,29 +1,2 @@
|
||||
return {
|
||||
"windwp/nvim-autopairs",
|
||||
config = function(plugin, opts)
|
||||
require "astronvim.plugins.configs.nvim-autopairs"(plugin, opts) -- include the default astronvim config that calls the setup call
|
||||
-- add more custom autopairs configuration such as custom rules
|
||||
local npairs = require "nvim-autopairs"
|
||||
local Rule = require "nvim-autopairs.rule"
|
||||
local cond = require "nvim-autopairs.conds"
|
||||
npairs.add_rules(
|
||||
{
|
||||
Rule("$", "$", { "tex", "latex" })
|
||||
-- don't add a pair if the next character is %
|
||||
:with_pair(cond.not_after_regex "%%")
|
||||
-- don't add a pair if the previous character is xxx
|
||||
:with_pair(
|
||||
cond.not_before_regex("xxx", 3)
|
||||
)
|
||||
-- don't move right when repeat character
|
||||
:with_move(cond.none())
|
||||
-- don't delete if the next character is xx
|
||||
:with_del(cond.not_after_regex "xx")
|
||||
-- disable adding a newline when you press <cr>
|
||||
:with_cr(cond.none()),
|
||||
},
|
||||
-- disable for .vim files, but it work for another filetypes
|
||||
Rule("a", "a", "-vim")
|
||||
)
|
||||
end,
|
||||
}
|
||||
-- nvim-autopairs is configured in editing.lua
|
||||
return {}
|
||||
|
||||
@@ -1,39 +1,2 @@
|
||||
return {
|
||||
-- Let blink.cmp consume nvim-cmp sources
|
||||
{ "saghen/blink.compat", version = "2.*", lazy = true, opts = {} },
|
||||
|
||||
-- Add vimtex + latex symbol sources to blink.cmp
|
||||
{
|
||||
"Saghen/blink.cmp",
|
||||
optional = true,
|
||||
dependencies = {
|
||||
"micangl/cmp-vimtex", -- environments, \cite, \ref, etc. via vimtex
|
||||
"kdheepak/cmp-latex-symbols", -- math symbols via LaTeX macros
|
||||
},
|
||||
opts = function(_, opts)
|
||||
opts.sources = opts.sources or {}
|
||||
opts.sources.providers = opts.sources.providers or {}
|
||||
opts.sources.default = opts.sources.default or { "lsp", "path", "snippets", "buffer" }
|
||||
|
||||
-- Only turn on the LaTeX sources for TeX filetypes
|
||||
opts.sources.per_filetype = vim.tbl_deep_extend("force", opts.sources.per_filetype or {}, {
|
||||
tex = { inherit_defaults = true, "vimtex", "latex_symbols" },
|
||||
plaintex = { inherit_defaults = true, "vimtex", "latex_symbols" },
|
||||
})
|
||||
|
||||
-- Expose nvim-cmp sources to blink via blink.compat
|
||||
opts.sources.providers.vimtex = {
|
||||
name = "vimtex",
|
||||
module = "blink.compat.source",
|
||||
}
|
||||
opts.sources.providers.latex_symbols = {
|
||||
name = "latex_symbols",
|
||||
module = "blink.compat.source",
|
||||
-- Insert LaTeX commands (e.g. \alpha) instead of Unicode characters:
|
||||
opts = { strategy = 2 }, -- documented in cmp-latex-symbols README
|
||||
score_offset = -2, -- keep it below LSP/snippets in relevance
|
||||
}
|
||||
return opts
|
||||
end,
|
||||
},
|
||||
}
|
||||
-- blink.cmp LaTeX sources are configured in completion.lua
|
||||
return {}
|
||||
|
||||
101
dot_config/nvim/lua/plugins/completion.lua
Normal file
101
dot_config/nvim/lua/plugins/completion.lua
Normal file
@@ -0,0 +1,101 @@
|
||||
return {
|
||||
-- Snippet engine
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
version = "v2.*",
|
||||
build = "make install_jsregexp",
|
||||
dependencies = { "rafamadriz/friendly-snippets" },
|
||||
opts = {
|
||||
enable_autosnippets = true,
|
||||
history = true,
|
||||
update_events = "TextChanged,TextChangedI",
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("luasnip").setup(opts)
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
-- Extend js snippets to ts
|
||||
require("luasnip").filetype_extend("typescript", { "javascript" })
|
||||
require("luasnip").filetype_extend("svelte", { "javascript", "html" })
|
||||
end,
|
||||
},
|
||||
|
||||
-- Castel-style LaTeX snippets (autosnippets for math mode)
|
||||
{
|
||||
"iurimateus/luasnip-latex-snippets.nvim",
|
||||
ft = { "tex", "plaintex", "markdown" },
|
||||
dependencies = { "L3MON4D3/LuaSnip", "lervag/vimtex" },
|
||||
opts = { use_treesitter = false, allow_on_markdown = true },
|
||||
config = function(_, opts)
|
||||
require("luasnip-latex-snippets").setup(opts)
|
||||
end,
|
||||
},
|
||||
|
||||
-- blink.compat: exposes nvim-cmp sources to blink.cmp
|
||||
{ "saghen/blink.compat", version = "2.*", lazy = true, opts = {} },
|
||||
|
||||
-- LaTeX completion sources (via blink.compat)
|
||||
{
|
||||
"micangl/cmp-vimtex",
|
||||
lazy = true,
|
||||
},
|
||||
{
|
||||
"kdheepak/cmp-latex-symbols",
|
||||
lazy = true,
|
||||
},
|
||||
|
||||
-- Main completion engine
|
||||
{
|
||||
"saghen/blink.cmp",
|
||||
version = "v0.*",
|
||||
dependencies = {
|
||||
"L3MON4D3/LuaSnip",
|
||||
"saghen/blink.compat",
|
||||
"micangl/cmp-vimtex",
|
||||
"kdheepak/cmp-latex-symbols",
|
||||
},
|
||||
opts = {
|
||||
keymap = {
|
||||
preset = "default",
|
||||
["<Tab>"] = { "select_next", "fallback" },
|
||||
["<S-Tab>"] = { "select_prev", "fallback" },
|
||||
["<CR>"] = { "accept", "fallback" },
|
||||
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
|
||||
["<C-e>"] = { "hide" },
|
||||
["<C-b>"] = { "scroll_documentation_up", "fallback" },
|
||||
["<C-f>"] = { "scroll_documentation_down", "fallback" },
|
||||
},
|
||||
completion = {
|
||||
ghost_text = { enabled = true },
|
||||
documentation = { auto_show = true, auto_show_delay_ms = 200 },
|
||||
menu = {
|
||||
draw = {
|
||||
treesitter = { "lsp" },
|
||||
},
|
||||
},
|
||||
},
|
||||
snippets = {
|
||||
preset = "luasnip",
|
||||
},
|
||||
sources = {
|
||||
default = { "lsp", "snippets", "buffer", "path" },
|
||||
per_filetype = {
|
||||
tex = { inherit_defaults = true, "vimtex", "latex_symbols" },
|
||||
plaintex = { inherit_defaults = true, "vimtex", "latex_symbols" },
|
||||
},
|
||||
providers = {
|
||||
vimtex = {
|
||||
name = "vimtex",
|
||||
module = "blink.compat.source",
|
||||
},
|
||||
latex_symbols = {
|
||||
name = "latex_symbols",
|
||||
module = "blink.compat.source",
|
||||
opts = { strategy = 2 }, -- insert LaTeX commands, not Unicode
|
||||
score_offset = -2,
|
||||
},
|
||||
},
|
||||
},
|
||||
signature = { enabled = true },
|
||||
},
|
||||
},
|
||||
}
|
||||
79
dot_config/nvim/lua/plugins/dap/init.lua
Normal file
79
dot_config/nvim/lua/plugins/dap/init.lua
Normal file
@@ -0,0 +1,79 @@
|
||||
return {
|
||||
-- Debug Adapter Protocol base
|
||||
{
|
||||
"mfussenegger/nvim-dap",
|
||||
dependencies = {
|
||||
"rcarriga/nvim-dap-ui",
|
||||
"theHamsta/nvim-dap-virtual-text",
|
||||
"nvim-neotest/nvim-nio",
|
||||
},
|
||||
keys = {
|
||||
{ "<leader>db", function() require("dap").toggle_breakpoint() end, desc = "Toggle breakpoint" },
|
||||
{ "<leader>dB", function() require("dap").set_breakpoint(vim.fn.input("Condition: ")) end, desc = "Conditional breakpoint" },
|
||||
{ "<leader>dc", function() require("dap").continue() end, desc = "Continue" },
|
||||
{ "<leader>di", function() require("dap").step_into() end, desc = "Step into" },
|
||||
{ "<leader>do", function() require("dap").step_over() end, desc = "Step over" },
|
||||
{ "<leader>dO", function() require("dap").step_out() end, desc = "Step out" },
|
||||
{ "<leader>dr", function() require("dap").repl.open() end, desc = "Open REPL" },
|
||||
{ "<leader>du", function() require("dapui").toggle() end, desc = "Toggle DAP UI" },
|
||||
{ "<leader>dv", function() require("nvim-dap-virtual-text").toggle() end, desc = "Toggle virtual text" },
|
||||
},
|
||||
config = function()
|
||||
local dap = require("dap")
|
||||
local dapui = require("dapui")
|
||||
|
||||
-- Auto-open/close DAP UI
|
||||
dap.listeners.after.event_initialized["dapui_config"] = function() dapui.open() end
|
||||
dap.listeners.before.event_terminated["dapui_config"] = function() dapui.close() end
|
||||
dap.listeners.before.event_exited["dapui_config"] = function() dapui.close() end
|
||||
|
||||
-- Load language-specific configs
|
||||
require("plugins.dap.rust")
|
||||
require("plugins.dap.js")
|
||||
end,
|
||||
},
|
||||
|
||||
-- DAP UI panels
|
||||
{
|
||||
"rcarriga/nvim-dap-ui",
|
||||
lazy = true,
|
||||
dependencies = { "mfussenegger/nvim-dap", "nvim-neotest/nvim-nio" },
|
||||
opts = {
|
||||
icons = { expanded = "", collapsed = "", current_frame = "" },
|
||||
layouts = {
|
||||
{
|
||||
elements = {
|
||||
{ id = "scopes", size = 0.25 },
|
||||
{ id = "breakpoints", size = 0.25 },
|
||||
{ id = "stacks", size = 0.25 },
|
||||
{ id = "watches", size = 0.25 },
|
||||
},
|
||||
size = 40,
|
||||
position = "left",
|
||||
},
|
||||
{
|
||||
elements = {
|
||||
{ id = "repl", size = 0.5 },
|
||||
{ id = "console", size = 0.5 },
|
||||
},
|
||||
size = 10,
|
||||
position = "bottom",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Inline variable values during debug session
|
||||
{
|
||||
"theHamsta/nvim-dap-virtual-text",
|
||||
lazy = true,
|
||||
opts = {
|
||||
enabled = true,
|
||||
enabled_commands = true,
|
||||
highlight_changed_variables = true,
|
||||
highlight_new_as_changed = false,
|
||||
commented = false,
|
||||
virt_text_pos = "eol",
|
||||
},
|
||||
},
|
||||
}
|
||||
41
dot_config/nvim/lua/plugins/dap/js.lua
Normal file
41
dot_config/nvim/lua/plugins/dap/js.lua
Normal file
@@ -0,0 +1,41 @@
|
||||
local M = {}
|
||||
|
||||
local function setup()
|
||||
local dap = require("dap")
|
||||
local mason_path = vim.fn.stdpath("data") .. "/mason/packages/js-debug-adapter"
|
||||
|
||||
dap.adapters["pwa-node"] = {
|
||||
type = "server",
|
||||
host = "localhost",
|
||||
port = "${port}",
|
||||
executable = {
|
||||
command = "node",
|
||||
args = { mason_path .. "/js-debug/src/dapDebugServer.js", "${port}" },
|
||||
},
|
||||
}
|
||||
|
||||
local js_config = {
|
||||
{
|
||||
type = "pwa-node",
|
||||
request = "launch",
|
||||
name = "Launch file",
|
||||
program = "${file}",
|
||||
cwd = "${workspaceFolder}",
|
||||
sourceMaps = true,
|
||||
},
|
||||
{
|
||||
type = "pwa-node",
|
||||
request = "attach",
|
||||
name = "Attach",
|
||||
processId = require("dap.utils").pick_process,
|
||||
cwd = "${workspaceFolder}",
|
||||
},
|
||||
}
|
||||
|
||||
for _, lang in ipairs({ "javascript", "typescript", "svelte" }) do
|
||||
dap.configurations[lang] = js_config
|
||||
end
|
||||
end
|
||||
|
||||
setup()
|
||||
return M
|
||||
43
dot_config/nvim/lua/plugins/dap/rust.lua
Normal file
43
dot_config/nvim/lua/plugins/dap/rust.lua
Normal file
@@ -0,0 +1,43 @@
|
||||
local M = {}
|
||||
|
||||
local function setup()
|
||||
local dap = require("dap")
|
||||
local mason_path = vim.fn.stdpath("data") .. "/mason/packages/codelldb"
|
||||
|
||||
dap.adapters.codelldb = {
|
||||
type = "server",
|
||||
port = "${port}",
|
||||
executable = {
|
||||
command = mason_path .. "/extension/adapter/codelldb",
|
||||
args = { "--port", "${port}" },
|
||||
},
|
||||
}
|
||||
|
||||
dap.configurations.rust = {
|
||||
{
|
||||
name = "Launch (Rust)",
|
||||
type = "codelldb",
|
||||
request = "launch",
|
||||
program = function()
|
||||
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/target/debug/", "file")
|
||||
end,
|
||||
cwd = "${workspaceFolder}",
|
||||
stopOnEntry = false,
|
||||
args = {},
|
||||
},
|
||||
{
|
||||
name = "Launch Tauri (Rust)",
|
||||
type = "codelldb",
|
||||
request = "launch",
|
||||
program = function()
|
||||
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/src-tauri/target/debug/", "file")
|
||||
end,
|
||||
cwd = "${workspaceFolder}/src-tauri",
|
||||
stopOnEntry = false,
|
||||
args = {},
|
||||
},
|
||||
}
|
||||
end
|
||||
|
||||
setup()
|
||||
return M
|
||||
68
dot_config/nvim/lua/plugins/editing.lua
Normal file
68
dot_config/nvim/lua/plugins/editing.lua
Normal file
@@ -0,0 +1,68 @@
|
||||
return {
|
||||
-- Auto-close brackets, with LaTeX math guard
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
event = "InsertEnter",
|
||||
config = function()
|
||||
local npairs = require("nvim-autopairs")
|
||||
local Rule = require("nvim-autopairs.rule")
|
||||
local cond = require("nvim-autopairs.conds")
|
||||
|
||||
npairs.setup({
|
||||
check_ts = true,
|
||||
ts_config = { java = false }, -- disable for Java (interferes with jdtls)
|
||||
fast_wrap = { map = "<M-e>" },
|
||||
})
|
||||
|
||||
-- LaTeX inline math: $...$ pair
|
||||
npairs.add_rules({
|
||||
Rule("$", "$", { "tex", "latex" })
|
||||
:with_pair(cond.not_after_regex("%%")) -- don't pair after %
|
||||
:with_move(cond.none())
|
||||
:with_del(cond.not_after_regex("xx"))
|
||||
:with_cr(cond.none()),
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Surround operations: ys, cs, ds
|
||||
{
|
||||
"kylechui/nvim-surround",
|
||||
version = "*",
|
||||
event = "VeryLazy",
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Formatter (format on save)
|
||||
{
|
||||
"stevearc/conform.nvim",
|
||||
event = "BufWritePre",
|
||||
cmd = "ConformInfo",
|
||||
keys = {
|
||||
{ "<leader>lf", function() require("conform").format({ async = true, lsp_fallback = true }) end, desc = "Format" },
|
||||
},
|
||||
opts = {
|
||||
formatters_by_ft = {
|
||||
lua = { "stylua" },
|
||||
rust = { "rustfmt" },
|
||||
javascript = { "prettier" },
|
||||
typescript = { "prettier" },
|
||||
javascriptreact = { "prettier" },
|
||||
typescriptreact = { "prettier" },
|
||||
svelte = { "prettier" },
|
||||
java = { "google-java-format" },
|
||||
json = { "prettier" },
|
||||
yaml = { "prettier" },
|
||||
toml = { "taplo" },
|
||||
html = { "prettier" },
|
||||
css = { "prettier" },
|
||||
markdown = { "prettier" },
|
||||
["jinja.html"] = { "djlint" },
|
||||
},
|
||||
format_on_save = {
|
||||
timeout_ms = 2000,
|
||||
lsp_fallback = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
63
dot_config/nvim/lua/plugins/git.lua
Normal file
63
dot_config/nvim/lua/plugins/git.lua
Normal file
@@ -0,0 +1,63 @@
|
||||
return {
|
||||
-- Gutter signs, hunk navigation, inline blame
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
opts = {
|
||||
signs = {
|
||||
add = { text = "▎" },
|
||||
change = { text = "▎" },
|
||||
delete = { text = "" },
|
||||
topdelete = { text = "" },
|
||||
changedelete = { text = "▎" },
|
||||
untracked = { text = "▎" },
|
||||
},
|
||||
on_attach = function(bufnr)
|
||||
local gs = package.loaded.gitsigns
|
||||
local map = function(mode, lhs, rhs, desc)
|
||||
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
|
||||
end
|
||||
|
||||
-- Navigation
|
||||
map("n", "]h", function()
|
||||
if vim.wo.diff then return "]h" end
|
||||
vim.schedule(function() gs.next_hunk() end)
|
||||
return "<Ignore>"
|
||||
end, "Next hunk")
|
||||
map("n", "[h", function()
|
||||
if vim.wo.diff then return "[h" end
|
||||
vim.schedule(function() gs.prev_hunk() end)
|
||||
return "<Ignore>"
|
||||
end, "Prev hunk")
|
||||
|
||||
-- Actions
|
||||
map("n", "<leader>hs", gs.stage_hunk, "Stage hunk")
|
||||
map("n", "<leader>gu", gs.undo_stage_hunk, "Undo stage hunk")
|
||||
map("n", "<leader>gh", gs.preview_hunk, "Preview hunk")
|
||||
map("n", "<leader>hb", gs.toggle_current_line_blame, "Toggle blame")
|
||||
map("n", "<leader>gb", gs.toggle_current_line_blame, "Toggle blame")
|
||||
map("n", "<leader>gd", gs.diffthis, "Diff this")
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
-- Magit-style full git interface
|
||||
{
|
||||
"NeogitOrg/neogit",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"sindrets/diffview.nvim",
|
||||
"nvim-telescope/telescope.nvim",
|
||||
},
|
||||
cmd = "Neogit",
|
||||
keys = {
|
||||
{ "<leader>gg", "<cmd>Neogit<cr>", desc = "Neogit" },
|
||||
},
|
||||
opts = {
|
||||
integrations = {
|
||||
telescope = true,
|
||||
diffview = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
105
dot_config/nvim/lua/plugins/java.lua
Normal file
105
dot_config/nvim/lua/plugins/java.lua
Normal file
@@ -0,0 +1,105 @@
|
||||
return {
|
||||
{
|
||||
"mfussenegger/nvim-jdtls",
|
||||
ft = "java",
|
||||
config = function()
|
||||
local jdtls = require("jdtls")
|
||||
local jdtls_path = vim.fn.stdpath("data") .. "/mason/packages/jdtls"
|
||||
local lombok_jar = jdtls_path .. "/lombok.jar"
|
||||
|
||||
-- Find project root
|
||||
local root_markers = { ".git", "mvnw", "gradlew", "pom.xml", "build.gradle" }
|
||||
local root_dir = require("jdtls.setup").find_root(root_markers)
|
||||
if not root_dir then
|
||||
return
|
||||
end
|
||||
|
||||
-- Unique workspace per project
|
||||
local project_name = vim.fn.fnamemodify(root_dir, ":p:h:t")
|
||||
local workspace_dir = vim.fn.stdpath("data") .. "/jdtls-workspace/" .. project_name
|
||||
|
||||
-- Find launcher jar and platform config
|
||||
local jdtls_launcher = vim.fn.glob(jdtls_path .. "/plugins/org.eclipse.equinox.launcher_*.jar")
|
||||
local jdtls_config_dir
|
||||
if vim.fn.has("linux") == 1 then
|
||||
jdtls_config_dir = jdtls_path .. "/config_linux"
|
||||
elseif vim.fn.has("mac") == 1 then
|
||||
jdtls_config_dir = jdtls_path .. "/config_mac"
|
||||
end
|
||||
|
||||
local config = {
|
||||
cmd = {
|
||||
"java",
|
||||
"-Declipse.application=org.eclipse.jdt.ls.core.id1",
|
||||
"-Dosgi.bundles.defaultStartLevel=4",
|
||||
"-Declipse.product=org.eclipse.jdt.ls.core.product",
|
||||
"-Dlog.protocol=true",
|
||||
"-Dlog.level=ALL",
|
||||
"-Xmx1g",
|
||||
"--add-modules=ALL-SYSTEM",
|
||||
"--add-opens", "java.base/java.util=ALL-UNNAMED",
|
||||
"--add-opens", "java.base/java.lang=ALL-UNNAMED",
|
||||
-- Lombok support
|
||||
vim.fn.filereadable(lombok_jar) == 1 and "-javaagent:" .. lombok_jar or nil,
|
||||
"-jar", jdtls_launcher,
|
||||
"-configuration", jdtls_config_dir,
|
||||
"-data", workspace_dir,
|
||||
},
|
||||
root_dir = root_dir,
|
||||
settings = {
|
||||
java = {
|
||||
eclipse = { downloadSources = true },
|
||||
configuration = { updateBuildConfiguration = "interactive" },
|
||||
maven = { downloadSources = true },
|
||||
implementationsCodeLens = { enabled = true },
|
||||
referencesCodeLens = { enabled = true },
|
||||
references = { includeDecompiledSources = true },
|
||||
inlayHints = { parameterNames = { enabled = "none" } }, -- too noisy for Java
|
||||
format = { enabled = true },
|
||||
},
|
||||
signatureHelp = { enabled = true },
|
||||
completion = {
|
||||
favoriteStaticMembers = {
|
||||
"org.hamcrest.MatcherAssert.assertThat",
|
||||
"org.hamcrest.Matchers.*",
|
||||
"org.junit.Assert.*",
|
||||
"org.junit.Assume.*",
|
||||
"org.junit.jupiter.api.Assertions.*",
|
||||
"org.mockito.Mockito.*",
|
||||
},
|
||||
},
|
||||
},
|
||||
init_options = {
|
||||
bundles = {},
|
||||
},
|
||||
on_attach = function(client, bufnr)
|
||||
-- Enable navic for breadcrumbs
|
||||
local ok, navic = pcall(require, "nvim-navic")
|
||||
if ok then navic.attach(client, bufnr) end
|
||||
|
||||
-- Java-specific keymaps
|
||||
local map = function(keys, func, desc)
|
||||
vim.keymap.set("n", keys, func, { buffer = bufnr, desc = "Java: " .. desc })
|
||||
end
|
||||
map("<leader>jo", jdtls.organize_imports, "Organize imports")
|
||||
map("<leader>jv", jdtls.extract_variable, "Extract variable")
|
||||
map("<leader>jm", function() jdtls.extract_method(true) end, "Extract method")
|
||||
map("<leader>jc", "<cmd>!javac %<cr>", "Compile file")
|
||||
map("<leader>jf", jdtls.rename_file, "Rename file (+ class)")
|
||||
|
||||
-- DAP: enable Java debugging if nvim-dap is available
|
||||
local ok_dap, dap = pcall(require, "jdtls.dap")
|
||||
if ok_dap then
|
||||
dap.setup_dap_main_class_configs()
|
||||
end
|
||||
end,
|
||||
capabilities = vim.lsp.protocol.make_client_capabilities(),
|
||||
}
|
||||
|
||||
-- Filter nil from cmd array
|
||||
config.cmd = vim.tbl_filter(function(v) return v ~= nil end, config.cmd)
|
||||
|
||||
jdtls.start_or_attach(config)
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,17 +1,2 @@
|
||||
-- Gilles Castel-style LaTeX snippets for LuaSnip
|
||||
return {
|
||||
-- Make sure autosnippets are enabled globally
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
opts = function(_, opts) opts.enable_autosnippets = true end,
|
||||
},
|
||||
|
||||
-- The LaTeX snippets themselves
|
||||
{
|
||||
"iurimateus/luasnip-latex-snippets.nvim",
|
||||
ft = { "tex", "plaintex", "markdown" },
|
||||
dependencies = { "L3MON4D3/LuaSnip", "lervag/vimtex" },
|
||||
opts = { use_treesitter = false, allow_on_markdown = true }, -- use vimtex to detect math mode
|
||||
config = function(_, opts) require("luasnip-latex-snippets").setup(opts) end,
|
||||
},
|
||||
}
|
||||
-- luasnip-latex-snippets is configured in completion.lua
|
||||
return {}
|
||||
|
||||
79
dot_config/nvim/lua/plugins/lsp.lua
Normal file
79
dot_config/nvim/lua/plugins/lsp.lua
Normal file
@@ -0,0 +1,79 @@
|
||||
return {
|
||||
-- Mason: installs LSP servers, formatters, DAP adapters
|
||||
{
|
||||
"williamboman/mason.nvim",
|
||||
cmd = "Mason",
|
||||
build = ":MasonUpdate",
|
||||
opts = {
|
||||
ui = { icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗" } },
|
||||
},
|
||||
},
|
||||
|
||||
-- mason-lspconfig bridges mason ↔ vim.lsp.enable
|
||||
{
|
||||
"williamboman/mason-lspconfig.nvim",
|
||||
dependencies = { "williamboman/mason.nvim" },
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"lua_ls", "rust_analyzer", "ts_ls", "svelte",
|
||||
"html", "texlab", "marksman", "yamlls", "taplo",
|
||||
-- ltex managed via mason-tool-installer for version control
|
||||
},
|
||||
automatic_installation = false,
|
||||
},
|
||||
},
|
||||
|
||||
-- mason-tool-installer: formatters, linters, DAP, extra servers
|
||||
{
|
||||
"WhoIsSethDaniel/mason-tool-installer.nvim",
|
||||
dependencies = { "williamboman/mason.nvim" },
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
-- LSP servers
|
||||
"lua-language-server",
|
||||
"rust-analyzer",
|
||||
"typescript-language-server",
|
||||
"svelte-language-server",
|
||||
"html-lsp",
|
||||
"texlab",
|
||||
"marksman",
|
||||
"yaml-language-server",
|
||||
"taplo",
|
||||
"ltex-ls",
|
||||
-- Formatters
|
||||
"stylua",
|
||||
"prettier",
|
||||
"rustfmt",
|
||||
"google-java-format",
|
||||
"djlint",
|
||||
-- DAP
|
||||
"codelldb",
|
||||
"js-debug-adapter",
|
||||
},
|
||||
auto_update = false,
|
||||
run_on_start = true,
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("mason-tool-installer").setup(opts)
|
||||
-- Enable servers after mason installs them
|
||||
-- Server configs loaded by init.lua (lua/lsp/*.lua)
|
||||
vim.api.nvim_create_autocmd("User", {
|
||||
pattern = "MasonToolsStartingInstall",
|
||||
once = true,
|
||||
callback = function()
|
||||
vim.schedule(function()
|
||||
vim.lsp.enable({
|
||||
"lua_ls", "rust_analyzer", "ts_ls", "svelte",
|
||||
"html", "texlab", "marksman", "yamlls", "taplo", "ltex",
|
||||
})
|
||||
end)
|
||||
end,
|
||||
})
|
||||
-- Also enable on startup (for machines where tools are already installed)
|
||||
vim.lsp.enable({
|
||||
"lua_ls", "rust_analyzer", "ts_ls", "svelte",
|
||||
"html", "texlab", "marksman", "yamlls", "taplo", "ltex",
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,5 +1,2 @@
|
||||
return {
|
||||
"ray-x/lsp_signature.nvim",
|
||||
event = "BufRead",
|
||||
config = function() require("lsp_signature").setup() end,
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,66 +1,9 @@
|
||||
-- Grammar & spell checking for LaTeX/Markdown via LanguageTool (LTeX-LS)
|
||||
return {
|
||||
-- Tell AstroLSP to manage the ltex server and pass our settings
|
||||
{
|
||||
"AstroNvim/astrolsp",
|
||||
---@param opts AstroLSPOpts
|
||||
opts = function(_, opts)
|
||||
opts.servers = opts.servers or {}
|
||||
if not vim.tbl_contains(opts.servers, "ltex") then table.insert(opts.servers, "ltex") end
|
||||
|
||||
-- Extend the ltex server configuration
|
||||
opts.config = require("astrocore").extend_tbl(opts.config or {}, {
|
||||
ltex = {
|
||||
filetypes = { "tex", "plaintex", "bib", "markdown" },
|
||||
settings = {
|
||||
ltex = {
|
||||
-- Run checks on save for performance; switch to "edit" if you prefer live feedback
|
||||
checkFrequency = "save",
|
||||
-- Pick the language you want LTeX to check as the document language
|
||||
language = "en-GB",
|
||||
-- Mother tongue helps the grammar engine (adjust to your preference)
|
||||
additionalRules = { motherTongue = "de-DE" },
|
||||
-- Let ltex_extra manage dictionaries/rules on disk
|
||||
dictionary = {
|
||||
["en-GB"] = {},
|
||||
["de-DE"] = {},
|
||||
["fr-FR"] = {},
|
||||
},
|
||||
disabledRules = {
|
||||
["en-GB"] = {},
|
||||
["de-DE"] = {},
|
||||
["fr-FR"] = {},
|
||||
},
|
||||
hiddenFalsePositives = {
|
||||
["en-GB"] = {},
|
||||
["de-DE"] = {},
|
||||
["fr-FR"] = {},
|
||||
},
|
||||
},
|
||||
},
|
||||
-- hook up ltex_extra when the server attaches
|
||||
on_attach = function(client, bufnr)
|
||||
local ok, ltex_extra = pcall(require, "ltex_extra")
|
||||
if ok then
|
||||
ltex_extra.setup {
|
||||
-- load both EN+DE dictionaries; change to your set
|
||||
load_langs = { "en-GB", "de-DE", "fr-FR" },
|
||||
init_check = true,
|
||||
-- store per-project files in .ltex (add to .gitignore if you want)
|
||||
path = ".ltex",
|
||||
log_level = "none",
|
||||
}
|
||||
end
|
||||
end,
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Companion plugin: add-to-dictionary / disable-rule / hide-false-positive
|
||||
-- ltex_extra: persist custom dictionary/rules to disk
|
||||
{
|
||||
"barreiroleo/ltex_extra.nvim",
|
||||
ft = { "tex", "plaintex", "markdown" },
|
||||
ft = { "tex", "plaintex", "bib", "markdown" },
|
||||
lazy = true,
|
||||
-- Actual setup happens in lua/lsp/ltex.lua on_attach
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,18 +1,2 @@
|
||||
return {
|
||||
"L3MON4D3/LuaSnip",
|
||||
enabled = true,
|
||||
version = "v2.*",
|
||||
build = "make install_jsregexp",
|
||||
event = "InsertEnter",
|
||||
dependencies = {
|
||||
"rafamadriz/friendly-snippets",
|
||||
},
|
||||
config = function(plugin, opts)
|
||||
-- run the default astronvim config that calls the setup call
|
||||
require "astronvim.plugins.configs.luasnip"(plugin, opts)
|
||||
-- lazy load snippets from friendly-snippets
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
-- add more custom luasnip configuration such as filetype extend or custom snippets
|
||||
require("luasnip").filetype_extend("javascript", { "javascriptreact" })
|
||||
end,
|
||||
}
|
||||
-- LuaSnip is configured in completion.lua
|
||||
return {}
|
||||
|
||||
@@ -1,28 +1,2 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- Customize Mason
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
-- use mason-tool-installer for automatically installing Mason packages
|
||||
{
|
||||
"WhoIsSethDaniel/mason-tool-installer.nvim",
|
||||
-- overrides `require("mason-tool-installer").setup(...)`
|
||||
opts = {
|
||||
-- Make sure to use the names found in `:Mason`
|
||||
ensure_installed = {
|
||||
-- install language servers
|
||||
"lua-language-server",
|
||||
|
||||
-- install formatters
|
||||
"stylua",
|
||||
|
||||
-- install debuggers
|
||||
"debugpy",
|
||||
|
||||
-- install any other package
|
||||
"tree-sitter-cli",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
-- Mason is configured in lsp.lua
|
||||
return {}
|
||||
|
||||
@@ -1,135 +1,2 @@
|
||||
-- Minimal Markdown + math workflow (FOSS/KISS):
|
||||
-- - Blink completion of LaTeX symbols in Markdown
|
||||
-- - :MdPdf for one-shot Pandoc -> PDF (LuaLaTeX) and open in Zathura (auto-reload)
|
||||
-- - :MdWatch / :MdWatchStop to rebuild on save via `entr`
|
||||
return {
|
||||
-- Markdown gets LaTeX symbol completion (inserts \alpha, not α)
|
||||
{
|
||||
"Saghen/blink.cmp",
|
||||
optional = true,
|
||||
opts = function(_, opts)
|
||||
opts.sources = opts.sources or {}
|
||||
opts.sources.per_filetype = vim.tbl_deep_extend("force", opts.sources.per_filetype or {}, {
|
||||
markdown = { inherit_defaults = true, "latex_symbols" },
|
||||
})
|
||||
return opts
|
||||
end,
|
||||
},
|
||||
|
||||
-- Ensure Treesitter grammars for Markdown editing
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = function(_, opts)
|
||||
opts.ensure_installed = opts.ensure_installed or {}
|
||||
for _, lang in ipairs { "markdown", "markdown_inline" } do
|
||||
if not vim.tbl_contains(opts.ensure_installed, lang) then table.insert(opts.ensure_installed, lang) end
|
||||
end
|
||||
end,
|
||||
},
|
||||
|
||||
-- Commands + keymaps
|
||||
{
|
||||
"AstroNvim/astrocore",
|
||||
init = function()
|
||||
local function have(bin) return vim.fn.executable(bin) == 1 end
|
||||
|
||||
local function pandoc_cmd(input_md)
|
||||
local stem = input_md:gsub("%.md$", "")
|
||||
local md = vim.fn.shellescape(input_md)
|
||||
local pdf = vim.fn.shellescape(stem .. ".pdf")
|
||||
local cmd = ("pandoc %s -o %s --from=markdown+tex_math_dollars+raw_tex --pdf-engine=lualatex --citeproc"):format(
|
||||
md,
|
||||
pdf
|
||||
)
|
||||
return cmd, (stem .. ".pdf")
|
||||
end
|
||||
|
||||
-- One-shot: build PDF and open Zathura once (it auto-reloads)
|
||||
vim.api.nvim_create_user_command("MdPdf", function()
|
||||
if not have "pandoc" then
|
||||
vim.notify("MdPdf: pandoc not found. Install pandoc.", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
local name = vim.api.nvim_buf_get_name(0)
|
||||
if name == "" or not name:match "%.md$" then
|
||||
vim.notify("MdPdf: open a Markdown (*.md) file", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
local cmd, pdf = pandoc_cmd(name)
|
||||
vim.fn.jobstart({ "sh", "-c", cmd }, {
|
||||
detach = true,
|
||||
on_exit = function()
|
||||
if have "zathura" and not vim.g._mdpdf_zathura_opened then
|
||||
vim.g._mdpdf_zathura_opened = true
|
||||
vim.fn.jobstart({ "zathura", "--fork", pdf }, { detach = true })
|
||||
end
|
||||
end,
|
||||
})
|
||||
end, {})
|
||||
|
||||
-- Continuous: watch with entr and rebuild on change
|
||||
vim.api.nvim_create_user_command("MdWatch", function()
|
||||
if not have "pandoc" then
|
||||
vim.notify("MdWatch: pandoc not found. Install pandoc.", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
if not have "entr" then
|
||||
vim.notify("MdWatch: entr not found. Install entr.", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
local buf = vim.api.nvim_get_current_buf()
|
||||
local name = vim.api.nvim_buf_get_name(buf)
|
||||
if name == "" or not name:match "%.md$" then
|
||||
vim.notify("MdWatch: open a Markdown (*.md) file", vim.log.levels.WARN)
|
||||
return
|
||||
end
|
||||
|
||||
-- First build (also opens Zathura once)
|
||||
vim.cmd "MdPdf"
|
||||
|
||||
local cmd, _ = pandoc_cmd(name)
|
||||
local qfile = vim.fn.shellescape(name)
|
||||
local pipeline = ("printf %%s\\n %s | entr -r sh -c %s"):format(qfile, vim.fn.shellescape(cmd))
|
||||
local jobid = vim.fn.jobstart({ "sh", "-c", pipeline }, { detach = false })
|
||||
if jobid <= 0 then
|
||||
vim.notify("MdWatch: failed to start entr", vim.log.levels.ERROR)
|
||||
return
|
||||
end
|
||||
vim.b.md_kiss_watch_job = jobid
|
||||
vim.notify("MdWatch: watching " .. name .. " (use :MdWatchStop to stop)", vim.log.levels.INFO)
|
||||
|
||||
-- Auto-stop when buffer unloads
|
||||
vim.api.nvim_create_autocmd({ "BufUnload", "BufWipeout" }, {
|
||||
buffer = buf,
|
||||
once = true,
|
||||
callback = function()
|
||||
if vim.b.md_kiss_watch_job then pcall(vim.fn.jobstop, vim.b.md_kiss_watch_job) end
|
||||
end,
|
||||
})
|
||||
end, {})
|
||||
|
||||
vim.api.nvim_create_user_command("MdWatchStop", function()
|
||||
local job = vim.b.md_kiss_watch_job
|
||||
if job then
|
||||
pcall(vim.fn.jobstop, job)
|
||||
vim.b.md_kiss_watch_job = nil
|
||||
vim.notify("MdWatch: stopped", vim.log.levels.INFO)
|
||||
else
|
||||
vim.notify("MdWatch: no watcher running for this buffer", vim.log.levels.WARN)
|
||||
end
|
||||
end, {})
|
||||
|
||||
-- Buffer-local keymaps for Markdown
|
||||
local group = vim.api.nvim_create_augroup("md_kiss_keys", { clear = true })
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
group = group,
|
||||
pattern = "markdown",
|
||||
callback = function(args)
|
||||
vim.keymap.set("n", "<leader>mP", "<cmd>MdPdf<CR>", { buffer = args.buf, desc = "Markdown → PDF (Pandoc)" })
|
||||
vim.keymap.set("n", "<leader>mw", "<cmd>MdWatch<CR>", { buffer = args.buf, desc = "Watch & rebuild (entr)" })
|
||||
vim.keymap.set("n", "<leader>mW", "<cmd>MdWatchStop<CR>", { buffer = args.buf, desc = "Stop watch" })
|
||||
end,
|
||||
})
|
||||
end,
|
||||
},
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,19 +1,2 @@
|
||||
-- Lightweight inline ASCII preview for LaTeX math
|
||||
return {
|
||||
"jbyuki/nabla.nvim",
|
||||
ft = { "tex", "plaintex", "markdown" },
|
||||
keys = {
|
||||
-- Popup preview for the expression under cursor
|
||||
{ "<leader>mp", function() require("nabla").popup() end, desc = "Math: popup preview" },
|
||||
|
||||
-- Toggle inline virtual rendering; re-enable wrap after toggle (nabla toggles it off)
|
||||
{
|
||||
"<leader>mv",
|
||||
function()
|
||||
require("nabla").toggle_virt { autogen = true }
|
||||
vim.wo.wrap = true
|
||||
end,
|
||||
desc = "Math: toggle inline preview",
|
||||
},
|
||||
},
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,14 +1,2 @@
|
||||
---@type LazySpec
|
||||
return {
|
||||
"2kabhishek/nerdy.nvim",
|
||||
cmd = "Nerdy",
|
||||
dependencies = {
|
||||
"folke/snacks.nvim",
|
||||
},
|
||||
opts = {
|
||||
max_recents = 30,
|
||||
add_default_keybindings = true,
|
||||
copy_to_clipboard = false,
|
||||
copy_register = "+",
|
||||
},
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,24 +1,2 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- Customize None-ls sources
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"nvimtools/none-ls.nvim",
|
||||
opts = function(_, opts)
|
||||
-- opts variable is the default configuration table for the setup function call
|
||||
-- local null_ls = require "null-ls"
|
||||
|
||||
-- Check supported formatters and linters
|
||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/formatting
|
||||
-- https://github.com/nvimtools/none-ls.nvim/tree/main/lua/null-ls/builtins/diagnostics
|
||||
|
||||
-- Only insert new sources, do not replace the existing ones
|
||||
-- (If you wish to replace, use `opts.sources = {}` instead of the `list_insert_unique` function)
|
||||
opts.sources = require("astrocore").list_insert_unique(opts.sources, {
|
||||
-- Set a formatter
|
||||
-- null_ls.builtins.formatting.stylua,
|
||||
-- null_ls.builtins.formatting.prettier,
|
||||
})
|
||||
end,
|
||||
}
|
||||
-- none-ls replaced by conform.nvim in editing.lua
|
||||
return {}
|
||||
|
||||
@@ -1,40 +1,2 @@
|
||||
---@type LazySpec
|
||||
return {
|
||||
"obsidian-nvim/obsidian.nvim",
|
||||
version = "*", -- recommended, use latest release instead of latest commit
|
||||
lazy = true,
|
||||
ft = "markdown",
|
||||
-- Replace the above line with this if you only want to load obsidian.nvim for markdown files in your vault:
|
||||
-- event = {
|
||||
-- -- If you want to use the home shortcut '~' here you need to call 'vim.fn.expand'.
|
||||
-- -- E.g. "BufReadPre " .. vim.fn.expand "~" .. "/my-vault/*.md"
|
||||
-- -- refer to `:h file-pattern` for more examples
|
||||
-- "BufReadPre path/to/my-vault/*.md",
|
||||
-- "BufNewFile path/to/my-vault/*.md",
|
||||
-- },
|
||||
dependencies = {
|
||||
-- Required.
|
||||
"nvim-lua/plenary.nvim",
|
||||
|
||||
-- see above for full list of optional dependencies ☝️
|
||||
},
|
||||
---@module 'obsidian'
|
||||
---@type obsidian.config.ClientOpts
|
||||
opts = {
|
||||
workspaces = {
|
||||
{
|
||||
name = "uni",
|
||||
path = "~/Documents/uni",
|
||||
},
|
||||
},
|
||||
-- Optional, completion of wiki links, local markdown links, and tags using nvim-cmp.
|
||||
completion = {
|
||||
-- Enables completion using nvim_cmp
|
||||
nvim_cmp = false,
|
||||
-- Enables completion using blink.cmp
|
||||
blink = true,
|
||||
-- Trigger completion at 2 chars.
|
||||
min_chars = 2,
|
||||
},
|
||||
},
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,25 +1,2 @@
|
||||
-- A vimtex-like workflow for compiling Markdown to PDF using pandoc
|
||||
return {
|
||||
"arminveres/md-pdf.nvim",
|
||||
lazy = true,
|
||||
-- Set up a keymap for compiling
|
||||
keys = {
|
||||
{
|
||||
"<Leader>mc",
|
||||
function()
|
||||
-- The plugin's main function to convert markdown to pdf
|
||||
require("md-pdf").convert_md_to_pdf()
|
||||
end,
|
||||
desc = "Markdown Compile",
|
||||
},
|
||||
},
|
||||
-- Configure the plugin
|
||||
opts = {
|
||||
-- Set zathura as the PDF viewer to match the vimtex setup
|
||||
preview_cmd = function()
|
||||
return "zathura"
|
||||
end,
|
||||
-- other options...
|
||||
ignore_viewer_state = true, -- Auto-recompile PDF on each write
|
||||
},
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,4 +1,2 @@
|
||||
return {
|
||||
"andweeb/presence.nvim",
|
||||
event = "VimEnter",
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
@@ -1,22 +1,2 @@
|
||||
return {
|
||||
"folke/snacks.nvim",
|
||||
opts = {
|
||||
dashboard = {
|
||||
preset = {
|
||||
header = table.concat({
|
||||
" █████ ███████ ████████ ██████ ██████ ",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"███████ ███████ ██ ██████ ██ ██",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"██ ██ ███████ ██ ██ ██ ██████ ",
|
||||
"",
|
||||
"███ ██ ██ ██ ██ ███ ███",
|
||||
"████ ██ ██ ██ ██ ████ ████",
|
||||
"██ ██ ██ ██ ██ ██ ██ ████ ██",
|
||||
"██ ██ ██ ██ ██ ██ ██ ██ ██",
|
||||
"██ ████ ████ ██ ██ ██",
|
||||
}, "\n"),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
-- Removed: not part of the from-scratch config
|
||||
return {}
|
||||
|
||||
44
dot_config/nvim/lua/plugins/telescope.lua
Normal file
44
dot_config/nvim/lua/plugins/telescope.lua
Normal file
@@ -0,0 +1,44 @@
|
||||
return {
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
branch = "0.1.x",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
{
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
build = "make",
|
||||
cond = function()
|
||||
return vim.fn.executable("make") == 1
|
||||
end,
|
||||
},
|
||||
},
|
||||
cmd = "Telescope",
|
||||
keys = {
|
||||
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find files" },
|
||||
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
|
||||
{ "<leader>fb", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
|
||||
{ "<leader>fs", "<cmd>Telescope lsp_document_symbols<cr>", desc = "LSP symbols" },
|
||||
{ "<leader>fd", "<cmd>Telescope diagnostics<cr>", desc = "Diagnostics" },
|
||||
{ "<leader>fr", "<cmd>Telescope oldfiles<cr>", desc = "Recent files" },
|
||||
{ "<leader>fw", "<cmd>Telescope grep_string<cr>", desc = "Grep word under cursor" },
|
||||
{ "<leader>fp", "<cmd>Telescope projects<cr>", desc = "Projects" },
|
||||
{ "<leader>fh", "<cmd>Telescope help_tags<cr>", desc = "Help tags" },
|
||||
},
|
||||
config = function()
|
||||
local telescope = require("telescope")
|
||||
telescope.setup({
|
||||
defaults = {
|
||||
prompt_prefix = " ",
|
||||
selection_caret = " ",
|
||||
path_display = { "smart" },
|
||||
file_ignore_patterns = { ".git/", "node_modules/", "target/" },
|
||||
},
|
||||
pickers = {
|
||||
find_files = { hidden = true },
|
||||
},
|
||||
})
|
||||
pcall(telescope.load_extension, "fzf")
|
||||
pcall(telescope.load_extension, "projects")
|
||||
end,
|
||||
},
|
||||
}
|
||||
70
dot_config/nvim/lua/plugins/terminal.lua
Normal file
70
dot_config/nvim/lua/plugins/terminal.lua
Normal file
@@ -0,0 +1,70 @@
|
||||
return {
|
||||
-- Floating terminal
|
||||
{
|
||||
"akinsho/toggleterm.nvim",
|
||||
version = "*",
|
||||
keys = {
|
||||
{ "<C-\\>", "<cmd>ToggleTerm direction=float<cr>", mode = { "n", "t" }, desc = "Toggle float terminal" },
|
||||
},
|
||||
opts = {
|
||||
size = function(term)
|
||||
if term.direction == "horizontal" then
|
||||
return 15
|
||||
elseif term.direction == "vertical" then
|
||||
return vim.o.columns * 0.4
|
||||
end
|
||||
end,
|
||||
open_mapping = nil, -- managed via keymaps above
|
||||
hide_numbers = true,
|
||||
shade_terminals = false,
|
||||
start_in_insert = true,
|
||||
insert_mappings = false,
|
||||
terminal_mappings = false,
|
||||
persist_size = true,
|
||||
direction = "float",
|
||||
close_on_exit = true,
|
||||
float_opts = {
|
||||
border = "curved",
|
||||
winblend = 3,
|
||||
},
|
||||
on_open = function(term)
|
||||
vim.cmd("startinsert!")
|
||||
vim.api.nvim_buf_set_keymap(term.bufnr, "t", "<Esc>", "<C-\\><C-n>", { noremap = true, silent = true })
|
||||
end,
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("toggleterm").setup(opts)
|
||||
|
||||
-- Named terminals
|
||||
local Terminal = require("toggleterm.terminal").Terminal
|
||||
|
||||
-- Tauri dev server
|
||||
local tauri_term = Terminal:new({
|
||||
cmd = "cargo tauri dev",
|
||||
direction = "float",
|
||||
hidden = true,
|
||||
display_name = "Tauri Dev",
|
||||
})
|
||||
|
||||
-- Test runner
|
||||
local test_term = Terminal:new({
|
||||
direction = "horizontal",
|
||||
hidden = true,
|
||||
display_name = "Tests",
|
||||
})
|
||||
|
||||
-- Claude Code
|
||||
local claude_term = Terminal:new({
|
||||
cmd = "claude",
|
||||
direction = "float",
|
||||
hidden = true,
|
||||
display_name = "Claude Code",
|
||||
float_opts = { border = "curved" },
|
||||
})
|
||||
|
||||
vim.keymap.set("n", "<leader>tt", function() tauri_term:toggle() end, { desc = "Toggle Tauri dev" })
|
||||
vim.keymap.set("n", "<leader>te", function() test_term:toggle() end, { desc = "Toggle test terminal" })
|
||||
vim.keymap.set("n", "<leader>cc", function() claude_term:toggle() end, { desc = "Claude Code" })
|
||||
end,
|
||||
},
|
||||
}
|
||||
33
dot_config/nvim/lua/plugins/testing.lua
Normal file
33
dot_config/nvim/lua/plugins/testing.lua
Normal file
@@ -0,0 +1,33 @@
|
||||
return {
|
||||
{
|
||||
"nvim-neotest/neotest",
|
||||
dependencies = {
|
||||
"nvim-lua/plenary.nvim",
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"nvim-neotest/nvim-nio",
|
||||
"rouge8/neotest-rust",
|
||||
"rcasia/neotest-java",
|
||||
},
|
||||
keys = {
|
||||
{ "<leader>tr", function() require("neotest").run.run() end, desc = "Run nearest test" },
|
||||
{ "<leader>ts", function() require("neotest").run.run(vim.fn.expand("%")) end, desc = "Run test suite" },
|
||||
{ "<leader>tl", function() require("neotest").run.run_last() end, desc = "Run last test" },
|
||||
{ "<leader>to", function() require("neotest").output.open({ enter = true }) end, desc = "Open test output" },
|
||||
{ "<leader>tp", function() require("neotest").output_panel.toggle() end, desc = "Toggle test panel" },
|
||||
{ "<leader>ts", function() require("neotest").summary.toggle() end, desc = "Toggle summary" },
|
||||
},
|
||||
opts = function()
|
||||
return {
|
||||
adapters = {
|
||||
require("neotest-rust")({ args = { "--no-capture" } }),
|
||||
require("neotest-java")({
|
||||
ignore_wrapper = false,
|
||||
}),
|
||||
},
|
||||
output = { open_on_run = false },
|
||||
quickfix = { open = false },
|
||||
status = { virtual_text = true },
|
||||
}
|
||||
end,
|
||||
},
|
||||
}
|
||||
@@ -1,15 +1,70 @@
|
||||
if true then return {} end -- WARN: REMOVE THIS LINE TO ACTIVATE THIS FILE
|
||||
|
||||
-- Customize Treesitter
|
||||
|
||||
---@type LazySpec
|
||||
return {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"lua",
|
||||
"vim",
|
||||
-- add more arguments for adding more treesitter parsers
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
build = ":TSUpdate",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
},
|
||||
opts = {
|
||||
ensure_installed = {
|
||||
"lua", "rust", "typescript", "javascript", "svelte",
|
||||
"java", "latex", "markdown", "markdown_inline",
|
||||
"yaml", "toml", "bash", "html", "css", "jinja",
|
||||
"json", "vim", "vimdoc", "regex",
|
||||
},
|
||||
auto_install = true,
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting = { "latex" }, -- needed for vimtex
|
||||
},
|
||||
indent = { enable = true },
|
||||
incremental_selection = {
|
||||
enable = true,
|
||||
keymaps = {
|
||||
init_selection = "<C-space>",
|
||||
node_incremental = "<C-space>",
|
||||
scope_incremental = false,
|
||||
node_decremental = "<bs>",
|
||||
},
|
||||
},
|
||||
textobjects = {
|
||||
select = {
|
||||
enable = true,
|
||||
lookahead = true,
|
||||
keymaps = {
|
||||
["am"] = "@function.outer",
|
||||
["im"] = "@function.inner",
|
||||
["ac"] = "@class.outer",
|
||||
["ic"] = "@class.inner",
|
||||
["a,"] = "@parameter.outer",
|
||||
["i,"] = "@parameter.inner",
|
||||
},
|
||||
},
|
||||
move = {
|
||||
enable = true,
|
||||
set_jumps = true,
|
||||
goto_next_start = {
|
||||
["]m"] = "@function.outer",
|
||||
["]c"] = "@class.outer",
|
||||
},
|
||||
goto_next_end = {
|
||||
["]M"] = "@function.outer",
|
||||
["]C"] = "@class.outer",
|
||||
},
|
||||
goto_previous_start = {
|
||||
["[m"] = "@function.outer",
|
||||
["[c"] = "@class.outer",
|
||||
},
|
||||
goto_previous_end = {
|
||||
["[M"] = "@function.outer",
|
||||
["[C"] = "@class.outer",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
config = function(_, opts)
|
||||
require("nvim-treesitter.configs").setup(opts)
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
341
dot_config/nvim/lua/plugins/ui.lua
Normal file
341
dot_config/nvim/lua/plugins/ui.lua
Normal file
@@ -0,0 +1,341 @@
|
||||
return {
|
||||
-- Seamless navigation between nvim splits and tmux panes
|
||||
{
|
||||
"mrjones2014/smart-splits.nvim",
|
||||
lazy = false,
|
||||
opts = {
|
||||
multiplexer_integration = "tmux",
|
||||
cursor_follows_swapped_panes = false,
|
||||
},
|
||||
keys = {
|
||||
-- Navigate
|
||||
{ "<C-h>", function() require("smart-splits").move_cursor_left() end, mode = { "n", "t" }, desc = "Move to left split/pane" },
|
||||
{ "<C-j>", function() require("smart-splits").move_cursor_down() end, mode = { "n", "t" }, desc = "Move to lower split/pane" },
|
||||
{ "<C-k>", function() require("smart-splits").move_cursor_up() end, mode = { "n", "t" }, desc = "Move to upper split/pane" },
|
||||
{ "<C-l>", function() require("smart-splits").move_cursor_right() end, mode = { "n", "t" }, desc = "Move to right split/pane" },
|
||||
-- Resize
|
||||
{ "<C-A-h>", function() require("smart-splits").resize_left() end, desc = "Resize left" },
|
||||
{ "<C-A-j>", function() require("smart-splits").resize_down() end, desc = "Resize down" },
|
||||
{ "<C-A-k>", function() require("smart-splits").resize_up() end, desc = "Resize up" },
|
||||
{ "<C-A-l>", function() require("smart-splits").resize_right() end, desc = "Resize right" },
|
||||
},
|
||||
},
|
||||
|
||||
-- Breadcrumbs: current file > class > method via LSP
|
||||
{
|
||||
"SmiteshP/nvim-navic",
|
||||
lazy = true, -- attached via LspAttach in autocmds.lua
|
||||
opts = {
|
||||
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 = " ",
|
||||
},
|
||||
lsp = { auto_attach = false }, -- we attach manually in autocmds.lua
|
||||
highlight = true,
|
||||
separator = " › ",
|
||||
},
|
||||
},
|
||||
|
||||
-- Statusline
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons", "SmiteshP/nvim-navic" },
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
local navic = require("nvim-navic")
|
||||
require("lualine").setup({
|
||||
options = {
|
||||
theme = require("apex-neon").lualine,
|
||||
globalstatus = true,
|
||||
component_separators = { left = "", right = "" },
|
||||
section_separators = { left = "", right = "" },
|
||||
},
|
||||
sections = {
|
||||
lualine_a = { "mode" },
|
||||
lualine_b = { "branch", "diff", "diagnostics" },
|
||||
lualine_c = { { "filename", path = 1 } },
|
||||
lualine_x = {
|
||||
{
|
||||
-- Show recording macro indicator
|
||||
function()
|
||||
local reg = vim.fn.reg_recording()
|
||||
return reg ~= "" and "Recording @" .. reg or ""
|
||||
end,
|
||||
color = { fg = "#ffb700" },
|
||||
},
|
||||
"encoding", "fileformat", "filetype",
|
||||
},
|
||||
lualine_y = { "progress" },
|
||||
lualine_z = { "location" },
|
||||
},
|
||||
winbar = {
|
||||
lualine_c = {
|
||||
{
|
||||
function()
|
||||
return navic.is_available() and navic.get_location() or ""
|
||||
end,
|
||||
},
|
||||
},
|
||||
},
|
||||
inactive_winbar = {
|
||||
lualine_c = { { "filename", path = 1 } },
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Buffer tabs at top
|
||||
{
|
||||
"akinsho/bufferline.nvim",
|
||||
version = "*",
|
||||
dependencies = "nvim-tree/nvim-web-devicons",
|
||||
event = "VeryLazy",
|
||||
opts = {
|
||||
options = {
|
||||
mode = "buffers",
|
||||
separator_style = "slant",
|
||||
show_buffer_close_icons = true,
|
||||
show_close_icon = false,
|
||||
color_icons = true,
|
||||
diagnostics = "nvim_lsp",
|
||||
offsets = {
|
||||
{ filetype = "aerial", text = "Symbols", text_align = "center", separator = true },
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Scoped buffers per tab
|
||||
{
|
||||
"tiagovla/scope.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Keymap discovery
|
||||
{
|
||||
"folke/which-key.nvim",
|
||||
event = "VeryLazy",
|
||||
opts = {
|
||||
preset = "modern",
|
||||
icons = { mappings = false },
|
||||
},
|
||||
config = function(_, opts)
|
||||
local wk = require("which-key")
|
||||
wk.setup(opts)
|
||||
wk.add({
|
||||
{ "<leader>f", group = "Find / Telescope" },
|
||||
{ "<leader>g", group = "Git" },
|
||||
{ "<leader>l", group = "LSP" },
|
||||
{ "<leader>r", group = "Refactor" },
|
||||
{ "<leader>x", group = "Diagnostics / Trouble" },
|
||||
{ "<leader>d", group = "Debug (DAP)" },
|
||||
{ "<leader>t", group = "Test" },
|
||||
{ "<leader>u", group = "UI Toggles" },
|
||||
{ "<leader>S", group = "Sessions" },
|
||||
{ "<leader>j", group = "Java" },
|
||||
{ "<leader>c", group = "AI / Claude" },
|
||||
{ "<leader>h", group = "Git Hunks" },
|
||||
})
|
||||
|
||||
-- UI toggle keymaps (no plugin dependency)
|
||||
local map = vim.keymap.set
|
||||
map("n", "<leader>uw", function() vim.opt.wrap = not vim.wo.wrap end, { desc = "Toggle wrap" })
|
||||
map("n", "<leader>uf", "zA", { desc = "Toggle all folds" })
|
||||
end,
|
||||
},
|
||||
|
||||
-- Indentation guides
|
||||
{
|
||||
"lukas-reineke/indent-blankline.nvim",
|
||||
main = "ibl",
|
||||
event = { "BufReadPost", "BufNewFile" },
|
||||
keys = {
|
||||
{ "<leader>ui", "<cmd>IBLToggle<cr>", desc = "Toggle indent guides" },
|
||||
},
|
||||
opts = {
|
||||
indent = { char = "│" },
|
||||
scope = { enabled = true },
|
||||
},
|
||||
},
|
||||
|
||||
-- Rendered markdown in buffer
|
||||
{
|
||||
"MeanderingProgrammer/render-markdown.nvim",
|
||||
ft = { "markdown" },
|
||||
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
|
||||
opts = {
|
||||
heading = { enabled = true },
|
||||
code = { enabled = true, style = "full" },
|
||||
bullet = { enabled = true },
|
||||
},
|
||||
},
|
||||
|
||||
-- File explorer as buffer
|
||||
{
|
||||
"stevearc/oil.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
cmd = "Oil",
|
||||
keys = {
|
||||
{ "-", "<cmd>Oil --float<cr>", desc = "Open oil (float)" },
|
||||
},
|
||||
opts = {
|
||||
default_file_explorer = true,
|
||||
float = { padding = 2 },
|
||||
view_options = { show_hidden = true },
|
||||
},
|
||||
},
|
||||
|
||||
-- Symbols outline panel
|
||||
{
|
||||
"stevearc/aerial.nvim",
|
||||
dependencies = { "nvim-treesitter/nvim-treesitter", "nvim-tree/nvim-web-devicons" },
|
||||
keys = {
|
||||
{ "<leader>uo", "<cmd>AerialToggle!<cr>", desc = "Symbols outline" },
|
||||
},
|
||||
opts = {
|
||||
attach_mode = "global",
|
||||
backends = { "lsp", "treesitter", "markdown", "man" },
|
||||
layout = { min_width = 28 },
|
||||
show_guides = true,
|
||||
},
|
||||
},
|
||||
|
||||
-- Diagnostics list
|
||||
{
|
||||
"folke/trouble.nvim",
|
||||
version = "v3.*",
|
||||
cmd = "Trouble",
|
||||
keys = {
|
||||
{ "<leader>xx", "<cmd>Trouble diagnostics toggle<cr>", desc = "Workspace diagnostics" },
|
||||
{ "<leader>xd", "<cmd>Trouble diagnostics toggle filter.buf=0<cr>", desc = "Document diagnostics" },
|
||||
{ "<leader>xq", "<cmd>Trouble qflist toggle<cr>", desc = "Quickfix list" },
|
||||
{ "<leader>xl", "<cmd>Trouble loclist toggle<cr>", desc = "Location list" },
|
||||
{ "<leader>xs", "<cmd>Trouble lsp toggle focus=false win.position=right<cr>", desc = "LSP definitions" },
|
||||
},
|
||||
opts = { use_diagnostic_signs = true },
|
||||
},
|
||||
|
||||
-- Better notifications
|
||||
{
|
||||
"rcarriga/nvim-notify",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function()
|
||||
local notify = require("notify")
|
||||
notify.setup({
|
||||
timeout = 3000,
|
||||
max_width = 80,
|
||||
stages = "fade_in_slide_out",
|
||||
render = "default",
|
||||
background_colour = "#050505",
|
||||
})
|
||||
vim.notify = notify
|
||||
end,
|
||||
keys = {
|
||||
{ "<leader>un", function() require("notify").dismiss({ silent = true, pending = true }) end, desc = "Dismiss notifications" },
|
||||
},
|
||||
},
|
||||
|
||||
-- Sign column + fold gutter management
|
||||
{
|
||||
"luukvbaal/statuscol.nvim",
|
||||
event = "BufReadPost",
|
||||
config = function()
|
||||
local builtin = require("statuscol.builtin")
|
||||
require("statuscol").setup({
|
||||
relculright = true,
|
||||
segments = {
|
||||
{ text = { builtin.foldfunc }, click = "v:lua.ScFa" },
|
||||
{ text = { "%s" }, click = "v:lua.ScSa" },
|
||||
{ text = { builtin.lnumfunc, " " }, click = "v:lua.ScLa" },
|
||||
},
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- Scrollbar with diagnostic + git marks
|
||||
{
|
||||
"lewis6991/satellite.nvim",
|
||||
event = "BufReadPost",
|
||||
opts = {
|
||||
current_only = false,
|
||||
winblend = 50,
|
||||
handlers = {
|
||||
cursor = { enable = true },
|
||||
search = { enable = true },
|
||||
marks = { enable = true },
|
||||
quickfix = { enable = false },
|
||||
gitsigns = { enable = true },
|
||||
diagnostics = { enable = true, min_severity = vim.diagnostic.severity.WARN },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
-- Session save/restore per directory
|
||||
{
|
||||
"folke/persistence.nvim",
|
||||
event = "BufReadPre",
|
||||
opts = { dir = vim.fn.stdpath("state") .. "/sessions/" },
|
||||
keys = {
|
||||
{ "<leader>Ss", function() require("persistence").save() end, desc = "Save session" },
|
||||
{ "<leader>Sr", function() require("persistence").load() end, desc = "Restore session" },
|
||||
{ "<leader>Sl", function() require("persistence").load({ last = true }) end, desc = "Last session" },
|
||||
},
|
||||
},
|
||||
|
||||
-- Project-wide search and replace
|
||||
{
|
||||
"MagicDuck/grug-far.nvim",
|
||||
cmd = "GrugFar",
|
||||
keys = {
|
||||
{ "<leader>sr", "<cmd>GrugFar<cr>", desc = "Search & replace" },
|
||||
{ "<leader>rs", "<cmd>GrugFar<cr>", desc = "Search & replace" },
|
||||
{ "<leader>sw", function() require("grug-far").open({ prefills = { search = vim.fn.expand("<cword>") } }) end, desc = "Search word" },
|
||||
},
|
||||
opts = { headerMaxWidth = 80 },
|
||||
},
|
||||
|
||||
-- Code action preview (diff before applying)
|
||||
{
|
||||
"aznhe21/actions-preview.nvim",
|
||||
event = "LspAttach",
|
||||
keys = {
|
||||
{ "<leader>la", function() require("actions-preview").code_actions() end, mode = { "n", "v" }, desc = "Code actions (preview)" },
|
||||
},
|
||||
opts = {},
|
||||
},
|
||||
|
||||
-- Multi-cursor (Ctrl+N equivalent)
|
||||
{
|
||||
"mg979/vim-visual-multi",
|
||||
event = "VeryLazy",
|
||||
init = function()
|
||||
vim.g.VM_maps = {
|
||||
["Find Under"] = "<C-n>",
|
||||
["Find Subword Under"] = "<C-n>",
|
||||
}
|
||||
end,
|
||||
},
|
||||
|
||||
-- Project switcher (auto-detect project root)
|
||||
{
|
||||
"ahmedkhalf/project.nvim",
|
||||
lazy = false,
|
||||
config = function()
|
||||
require("project_nvim").setup({
|
||||
detection_methods = { "lsp", "pattern" },
|
||||
patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json", "Cargo.toml" },
|
||||
silent_chdir = true,
|
||||
})
|
||||
end,
|
||||
},
|
||||
|
||||
-- UI Toggles
|
||||
-- (wrap, fold, spell are just keymap + vim.opt calls — no plugin needed)
|
||||
}
|
||||
@@ -1,22 +1,28 @@
|
||||
return {
|
||||
"lervag/vimtex",
|
||||
ft = { "tex", "latex" }, -- lazy-load on filetype
|
||||
init = function()
|
||||
-- Viewer
|
||||
vim.g.vimtex_view_method = "zathura"
|
||||
|
||||
-- Compiler: latexmk + LuaLaTeX
|
||||
vim.g.vimtex_compiler_method = "latexmk"
|
||||
-- Option A: pass -lualatex explicitly to latexmk
|
||||
vim.g.vimtex_compiler_latexmk = {
|
||||
options = {
|
||||
"-lualatex",
|
||||
"-synctex=1",
|
||||
"-interaction=nonstopmode",
|
||||
"-file-line-error",
|
||||
},
|
||||
}
|
||||
-- Option B (also helpful): make LuaLaTeX the default engine for latexmk
|
||||
vim.g.vimtex_compiler_latexmk_engines = { _ = "-lualatex" }
|
||||
end,
|
||||
-- VimTeX: LaTeX compilation, navigation, text objects
|
||||
{
|
||||
"lervag/vimtex",
|
||||
ft = { "tex", "plaintex", "bib" },
|
||||
init = function()
|
||||
-- Must be set before vimtex loads
|
||||
vim.g.vimtex_view_method = "zathura"
|
||||
vim.g.vimtex_compiler_method = "latexmk"
|
||||
vim.g.vimtex_compiler_latexmk = {
|
||||
options = {
|
||||
"-pdf",
|
||||
"-shell-escape",
|
||||
"-verbose",
|
||||
"-file-line-error",
|
||||
"-synctex=1",
|
||||
"-interaction=nonstopmode",
|
||||
"-lualatex",
|
||||
},
|
||||
}
|
||||
-- Disable vimtex completion (blink.cmp handles it via cmp-vimtex)
|
||||
vim.g.vimtex_complete_enabled = 0
|
||||
-- Disable vimtex's own syntax (use treesitter instead, with vim regex fallback)
|
||||
vim.g.vimtex_syntax_enabled = 1
|
||||
vim.g.vimtex_syntax_conceal_disable = 0
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
-- This will run last in the setup process.
|
||||
-- This is just pure lua so anything that doesn't
|
||||
-- fit in the normal config locations above can go here
|
||||
|
||||
-- Set the conceal level for prettier formatting in LaTeX and Markdown
|
||||
vim.opt.conceallevel = 2
|
||||
29
dot_config/tmux/apex-neon.conf
Normal file
29
dot_config/tmux/apex-neon.conf
Normal file
@@ -0,0 +1,29 @@
|
||||
# Apex Neon — managed by refresh-apex-themes, do not edit manually
|
||||
# Run: refresh-apex-themes to update from ~/Dev/Themes/apex/dist
|
||||
|
||||
# Palette variables
|
||||
set -g @void "#050505"
|
||||
set -g @panel "#0d0d0d"
|
||||
set -g @border "#262626"
|
||||
set -g @stealth "#1a1a1a"
|
||||
set -g @text "#ededed"
|
||||
set -g @dim "#404040"
|
||||
set -g @razor "#ff0044"
|
||||
set -g @tech "#00eaff"
|
||||
set -g @toxic "#00ff99"
|
||||
set -g @amber "#ffb700"
|
||||
set -g @azure "#0088cc"
|
||||
set -g @sacred "#9d00ff"
|
||||
|
||||
# Status bar styling
|
||||
set -g status-style "fg=#{@text},bg=#{@void}"
|
||||
set -g pane-border-style "fg=#{@border}"
|
||||
set -g pane-active-border-style "fg=#{@razor}"
|
||||
set -g message-style "fg=#{@void},bg=#{@tech}"
|
||||
set -g mode-style "fg=#{@void},bg=#{@tech}"
|
||||
set -g display-panes-active-colour "#{@tech}"
|
||||
set -g display-panes-colour "#{@dim}"
|
||||
set -g clock-mode-colour "#{@tech}"
|
||||
|
||||
set -g window-status-style "fg=#{@dim},bg=#{@void}"
|
||||
set -g window-status-current-style "fg=#{@void},bg=#{@tech},bold"
|
||||
@@ -1,97 +1,136 @@
|
||||
#### GENERAL SETTINGS ####
|
||||
set -g default-terminal "xterm-256color"
|
||||
set -ga terminal-overrides ",xterm-256color:Tc" # truecolor support
|
||||
set -g history-limit 10000
|
||||
#### TERMINAL ####
|
||||
set -g default-terminal "tmux-256color"
|
||||
set -ag terminal-overrides ",xterm-256color:RGB"
|
||||
|
||||
#### PREFIX ####
|
||||
unbind C-b
|
||||
set -g prefix C-Space
|
||||
bind C-Space send-prefix
|
||||
|
||||
#### GENERAL OPTIONS ####
|
||||
set -g mouse on
|
||||
|
||||
# Renaming
|
||||
set -g base-index 1
|
||||
setw -g pane-base-index 1
|
||||
set -g renumber-windows on
|
||||
set -sg escape-time 10
|
||||
set -g repeat-time 600
|
||||
set -g history-limit 50000
|
||||
set -g focus-events on
|
||||
setw -g aggressive-resize on
|
||||
set -g mode-keys vi
|
||||
set -g status-keys vi
|
||||
set -wg automatic-rename on
|
||||
set -g renumber-window on
|
||||
set -g allow-rename off
|
||||
|
||||
# Border status
|
||||
setw -g pane-border-status top
|
||||
|
||||
#### KEYBINDINGS ####
|
||||
# Use Alt-a as prefix
|
||||
unbind C-b
|
||||
set -g prefix M-a
|
||||
bind M-a send-prefix
|
||||
#### PANE NAVIGATION (no prefix — smart-splits passthrough) ####
|
||||
bind -n C-h select-pane -L
|
||||
bind -n C-j select-pane -D
|
||||
bind -n C-k select-pane -U
|
||||
bind -n C-l select-pane -R
|
||||
|
||||
# Better split bindings
|
||||
unbind '"'
|
||||
unbind %
|
||||
bind | split-window -h -c "#{pane_current_path}"
|
||||
bind - split-window -v -c "#{pane_current_path}"
|
||||
bind -n M-H split-window -h -b -c "#{pane_current_path}"
|
||||
bind -n M-L split-window -h -c "#{pane_current_path}"
|
||||
bind -n M-K split-window -v -b -c "#{pane_current_path}"
|
||||
bind -n M-J split-window -v -c "#{pane_current_path}"
|
||||
|
||||
# Vim-like pane movement
|
||||
#### PANE NAVIGATION (with prefix) ####
|
||||
bind h select-pane -L
|
||||
bind j select-pane -D
|
||||
bind k select-pane -U
|
||||
bind l select-pane -R
|
||||
bind -n M-h select-pane -L
|
||||
bind -n M-j select-pane -D
|
||||
bind -n M-k select-pane -U
|
||||
bind -n M-l select-pane -R
|
||||
|
||||
# Alt+Tab to switch between last panes
|
||||
bind -n M-Tab last-pane
|
||||
#### PANE MOVEMENT (swap) ####
|
||||
bind H swap-pane -U
|
||||
bind J swap-pane -D
|
||||
bind K swap-pane -U
|
||||
bind L swap-pane -D
|
||||
|
||||
# Resize panes with vimkeys
|
||||
bind -n C-M-h resize-pane -L 5
|
||||
bind -n C-M-j resize-pane -D 5
|
||||
bind -n C-M-k resize-pane -U 5
|
||||
bind -n C-M-l resize-pane -R 5
|
||||
#### PANE SPLITS ####
|
||||
unbind '"'
|
||||
unbind %
|
||||
bind s split-window -v -c "#{pane_current_path}"
|
||||
bind v split-window -h -c "#{pane_current_path}"
|
||||
bind q kill-pane
|
||||
bind z resize-pane -Z
|
||||
|
||||
# Reload config
|
||||
bind r source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded!"
|
||||
#### RESIZE MODE ####
|
||||
bind r switch-client -T resize
|
||||
bind -T resize h resize-pane -L 5
|
||||
bind -T resize j resize-pane -D 5
|
||||
bind -T resize k resize-pane -U 5
|
||||
bind -T resize l resize-pane -R 5
|
||||
bind -T resize H resize-pane -L 15
|
||||
bind -T resize J resize-pane -D 15
|
||||
bind -T resize K resize-pane -U 15
|
||||
bind -T resize L resize-pane -R 15
|
||||
bind -T resize Escape switch-client -T root
|
||||
bind -T resize Enter switch-client -T root
|
||||
|
||||
#### COPY/CLIPBOARD SUPPORT ####
|
||||
setw -g mode-keys vi
|
||||
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "kitty +kitten clipboard"
|
||||
#### WINDOWS ####
|
||||
bind Return new-window -c "#{pane_current_path}"
|
||||
bind c new-window -c "#{pane_current_path}"
|
||||
bind Q kill-window
|
||||
bind Tab next-window
|
||||
bind BTab previous-window
|
||||
bind 1 select-window -t :1
|
||||
bind 2 select-window -t :2
|
||||
bind 3 select-window -t :3
|
||||
bind 4 select-window -t :4
|
||||
bind 5 select-window -t :5
|
||||
bind 6 select-window -t :6
|
||||
bind 7 select-window -t :7
|
||||
bind 8 select-window -t :8
|
||||
bind 9 select-window -t :9
|
||||
bind , command-prompt -I "#W" "rename-window '%%'"
|
||||
|
||||
#### SESSIONS ####
|
||||
bind Space choose-tree -Zs
|
||||
bind '$' command-prompt -I "#S" "rename-session '%%'"
|
||||
bind d detach-client
|
||||
bind C-s run-shell "~/.config/tmux/plugins/tpm/plugins/tmux-resurrect/scripts/save.sh"
|
||||
bind C-r run-shell "~/.config/tmux/plugins/tpm/plugins/tmux-resurrect/scripts/restore.sh"
|
||||
|
||||
# Apex Neon theme
|
||||
set -g status-style "fg=#ededed,bg=#050505"
|
||||
set -g status-justify "absolute-centre"
|
||||
set -g pane-border-style "fg=#262626"
|
||||
set -g pane-active-border-style "fg=#ff0044"
|
||||
set -g message-style "fg=#050505,bg=#00eaff"
|
||||
set -g mode-style "fg=#050505,bg=#00eaff"
|
||||
set -g display-panes-active-colour "#00eaff"
|
||||
set -g display-panes-colour "#404040"
|
||||
set -g clock-mode-colour "#00eaff"
|
||||
#### COPY MODE ####
|
||||
bind '[' copy-mode
|
||||
bind ']' paste-buffer
|
||||
bind -T copy-mode-vi v send -X begin-selection
|
||||
bind -T copy-mode-vi y send -X copy-selection-and-cancel
|
||||
bind -T copy-mode-vi C-v send -X rectangle-toggle
|
||||
bind -T copy-mode-vi Escape send -X cancel
|
||||
bind -T copy-mode-vi q send -X cancel
|
||||
|
||||
set -g @tmux-weather-location "Nospelt"
|
||||
#### MISC ####
|
||||
bind R source-file ~/.config/tmux/tmux.conf \; display-message "Config reloaded!"
|
||||
bind ? list-keys
|
||||
bind t clock-mode
|
||||
|
||||
set -g window-status-style "fg=#404040,bg=#050505"
|
||||
set -g window-status-current-style "fg=#050505,bg=#00eaff,bold"
|
||||
set -g window-status-format " #I:#W "
|
||||
set -g window-status-current-format "#[fg=#050505,bg=#00eaff,bold] #I:#W #[fg=#00eaff,bg=#050505]"
|
||||
#### THEME ####
|
||||
source-file ~/.config/tmux/apex-neon.conf
|
||||
|
||||
#### STATUS BAR ####
|
||||
set -g status-left-length 100
|
||||
set -g status-left "#[fg=#050505,bg=#ff0044,bold] #S #[fg=#ff0044,bg=#050505] "
|
||||
set -g status-right-length 200
|
||||
|
||||
set -g status-right-length 100
|
||||
set -g status-right "#[fg=#9d00ff]#H #[fg=#00eaff]%Y-%m-%d %H:%M "
|
||||
set -g status-left "#[fg=#{@void},bg=#{@razor},bold] #S #[fg=#{@razor},bg=default] "
|
||||
set -g status-right " #{cpu_fg_color}CPU:#{cpu_percentage} #[fg=#{@tech}]MEM:#{ram_percentage} #{battery_color_fg}BAT:#{battery_percentage} #[fg=#{@amber}]#{@tmux-weather-location}:#{weather} #[fg=#{@dim}]%Y-%m-%d #[fg=#{@text}]%H:%M "
|
||||
|
||||
set -g window-status-format " #I:#W "
|
||||
set -g window-status-current-format "#[bold] #I:#W "
|
||||
set -g status-justify "absolute-centre"
|
||||
|
||||
#### TMUX PLUGIN MANAGER + PLUGINS ####
|
||||
#### RESURRECT / CONTINUUM ####
|
||||
set -g @continuum-restore 'on'
|
||||
set -g @continuum-save-interval '15'
|
||||
set -g @resurrect-capture-pane-contents 'on'
|
||||
|
||||
#### PLUGINS (TPM) ####
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
set -g @plugin 'tmux-plugins/tmux-resurrect'
|
||||
set -g @plugin 'tmux-plugins/tmux-continuum'
|
||||
set -g @plugin 'tmux-plugins/tmux-yank'
|
||||
|
||||
# style
|
||||
set -g @plugin 'joshmedeski/tmux-nerd-font-window-name'
|
||||
set -g @plugin 'tmux-plugins/tmux-cpu'
|
||||
set -g @plugin 'tmux-plugins/tmux-battery'
|
||||
set -g @plugin 'xamut/tmux-weather'
|
||||
|
||||
set -g @tmux-weather-location "Nospelt"
|
||||
|
||||
# Initialize TPM (must be last)
|
||||
run '~/.config/tmux/plugins/tpm/tpm'
|
||||
|
||||
Reference in New Issue
Block a user