Compare commits
17 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c83a164a1c | |||
| db2b2d364f | |||
| 00c2714194 | |||
| 311ea6f97e | |||
| b8a764fac9 | |||
| 0765563c63 | |||
| c42a29d509 | |||
| deaffa8343 | |||
| 9da1ccbc85 | |||
| 206336a9a3 | |||
| 4e79b98122 | |||
| 820c2c1207 | |||
| 8b3a35220e | |||
| 3d0d89284f | |||
| ead16ef172 | |||
| 8c9d5aba7f | |||
| 533e740964 |
@@ -1 +1,2 @@
|
||||
lazy-lock.json
|
||||
.DS_Store
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"trailingComma": "es5",
|
||||
"tabWidth": 4,
|
||||
"semi": false,
|
||||
"singleQuote": false,
|
||||
"overrides": [
|
||||
{
|
||||
"files": ".prettierrc",
|
||||
"options": {
|
||||
"parser": "json"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
column_width = 120
|
||||
column_width = 80
|
||||
line_endings = "Unix"
|
||||
indent_type = "Spaces"
|
||||
indent_width = 2
|
||||
indent_type = "Tabs"
|
||||
indent_width = 4
|
||||
quote_style = "AutoPreferDouble"
|
||||
call_parentheses = "None"
|
||||
|
||||
@@ -1,4 +1,50 @@
|
||||
## Remove lines containing regex
|
||||
```
|
||||
:%g/{regex}/d
|
||||
<div align="center">
|
||||
<img src="/assets/neovim.png" width="600">
|
||||
</div>
|
||||
|
||||
# Neovim Configuration
|
||||
|
||||
Personal Neovim configuration using [lazy.nvim](https://github.com/folke/lazy.nvim) for plugin management.
|
||||
|
||||
## Features
|
||||
|
||||
- **LSP**: Native LSP with Mason for language server management
|
||||
- **Completion**: Blink.cmp with Copilot integration
|
||||
- **Fuzzy Finding**: Telescope for files and grep
|
||||
- **File Explorer**: Snacks.nvim explorer
|
||||
- **Git**: Fugitive, Gitsigns, and GitHub integration
|
||||
- **AI**: Copilot and CopilotChat
|
||||
- **UI**: Bufferline, Lualine, Dropbar, and various colorschemes
|
||||
- **Navigation**: Harpoon, Kitty navigator for splits
|
||||
- **Editing**: Treesitter, autopairs, rainbow delimiters, visual-multi
|
||||
|
||||
## Key Mappings
|
||||
|
||||
| Key | Action |
|
||||
| ------------------- | ----------------------- |
|
||||
| `<leader>e` | File explorer |
|
||||
| `<leader>f` | Find files |
|
||||
| `<leader>g` | Live grep |
|
||||
| `<Tab>` / `<S-Tab>` | Cycle buffers |
|
||||
| `<Alt-Arrow>` | Navigate splits (Kitty) |
|
||||
| `<Alt-c>` | Toggle Copilot Chat |
|
||||
| `<C-q>` | Toggle terminal |
|
||||
| `<leader>u` | Undotree |
|
||||
| `<leader>ap` | Code actions preview |
|
||||
| `<leader>sp` | Colorscheme picker |
|
||||
|
||||
## Requirements
|
||||
|
||||
- Neovim >= 0.10
|
||||
- Git
|
||||
- A [Nerd Font](https://www.nerdfonts.com/)
|
||||
- ripgrep (for Telescope grep)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
git clone https://github.com/Zacharias-Brohn/nvimdots ~/.config/nvim
|
||||
nvim
|
||||
```
|
||||
|
||||
Plugins will be installed automatically on first launch.
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 225 KiB |
@@ -0,0 +1,13 @@
|
||||
function! neoformat#formatters#qml#enabled() abort
|
||||
return ['qmlformat']
|
||||
endfunction
|
||||
|
||||
function! neoformat#formatters#qml#qmlformat() abort
|
||||
return {
|
||||
\ 'exe': '/usr/lib/qt6/bin/qmlformat',
|
||||
\ 'args': ['-t', '-n', '--objects-spacing', '--functions-spacing', '-i'],
|
||||
\ 'replace': 1,
|
||||
\ 'stderr': 1,
|
||||
\ 'stdin': 0
|
||||
\ }
|
||||
endfunction
|
||||
@@ -0,0 +1,432 @@
|
||||
-- Generated by zshell. Material 3 based Neovim colorscheme.
|
||||
-- This file is a Jinja template rendered by zshell.
|
||||
|
||||
vim.g.colors_name = nil
|
||||
vim.o.background = "dark"
|
||||
|
||||
vim.cmd("highlight clear")
|
||||
if vim.fn.exists("syntax_on") == 1 then
|
||||
vim.cmd("syntax reset")
|
||||
end
|
||||
|
||||
vim.g.colors_name = "zshell"
|
||||
vim.o.termguicolors = true
|
||||
|
||||
local set = vim.api.nvim_set_hl
|
||||
local function hl(group, opts)
|
||||
set(0, group, opts)
|
||||
end
|
||||
|
||||
local function link(from, to)
|
||||
hl(from, { link = to })
|
||||
end
|
||||
|
||||
local is_light = "dark" == "light"
|
||||
local function pick(light, dark)
|
||||
return is_light and light or dark
|
||||
end
|
||||
|
||||
local c = {
|
||||
bg = "#1A1206",
|
||||
bg_alt = "#231A0D",
|
||||
bg_float = "#271E11",
|
||||
bg_popup = "#32291A",
|
||||
bg_cursorline = pick("#32291A", "#3D3324"),
|
||||
bg_fold = "#231A0D",
|
||||
bg_visual = "#733429",
|
||||
bg_search = pick("#B5893E", "#733429"),
|
||||
bg_incsearch = "#7D2C1E",
|
||||
bg_selection = "#7D2C1E",
|
||||
bg_statusline = pick("#32291A", "#271E11"),
|
||||
bg_statusline_nc = "#231A0D",
|
||||
bg_tabline = "#231A0D",
|
||||
bg_tabsel = "#32291A",
|
||||
|
||||
fg = "#F1E0CA",
|
||||
fg_muted = "#DBC3A1",
|
||||
fg_subtle = "#A38E6E",
|
||||
fg_comment = pick("#A38E6E", "#55442A"),
|
||||
fg_strong = pick("#1A1B1F", "#F2F2F7"),
|
||||
fg_on_soft = pick("#17181C", "#F4F4F8"),
|
||||
|
||||
border = "#55442A",
|
||||
accent = "#FFB4A6",
|
||||
accent_container = "#7D2C1E",
|
||||
accent_fg = "#FFDAD4",
|
||||
accent_solid_fg = "#5F150A",
|
||||
|
||||
secondary = "#FFB4A6",
|
||||
secondary_container = "#733429",
|
||||
secondary_fg = "#FFDAD4",
|
||||
secondary_solid_fg = "#561E15",
|
||||
|
||||
tertiary = "#F0BE6D",
|
||||
tertiary_container = "#B5893E",
|
||||
tertiary_fg = "#000000",
|
||||
tertiary_solid_fg = "#432C00",
|
||||
|
||||
error = "#FFB4AB",
|
||||
error_container = "#93000A",
|
||||
error_fg = "#FFDAD6",
|
||||
error_solid_fg = "#690005",
|
||||
|
||||
ok = "#FFBD9D",
|
||||
warn = "#FFDFD5",
|
||||
info = "#B9AB66",
|
||||
hint = "#FFBA8D",
|
||||
add = "#FFBD9D",
|
||||
change = "#B9AB66",
|
||||
delete = "#FF563E",
|
||||
|
||||
cursor_fg = "#5F150A",
|
||||
cursor_bg = "#FFB4A6",
|
||||
match_bg = "#B5893E",
|
||||
match_fg = "#000000",
|
||||
todo_bg = "#B5893E",
|
||||
todo_fg = "#000000",
|
||||
|
||||
-- Syntax accents must stay dynamic. These come from your generated palette
|
||||
-- instead of fixed hex values, so foregrounds change with the wallpaper too.
|
||||
code_keyword = "#F18F8A",
|
||||
code_func = "#FFBA8D",
|
||||
code_string = "#FFBD9D",
|
||||
code_number = "#FFDFD5",
|
||||
code_const = "#FF563E",
|
||||
code_type = "#FFB4A6",
|
||||
code_special = "#F0BE6D",
|
||||
code_preproc = "#FFB4A6",
|
||||
code_builtin = "#FFB4A6",
|
||||
code_param = "#FFDFD5",
|
||||
code_field = "#FFB4A6",
|
||||
code_namespace = "#F0BE6D",
|
||||
code_operator = pick("#FFB4A6", "#FFB4A6"),
|
||||
|
||||
line_current = pick("#232428", "#E7E7EC"),
|
||||
ref_bg = pick("#3D3324", "#32291A"),
|
||||
}
|
||||
|
||||
-- Core UI -------------------------------------------------------------------
|
||||
hl("Normal", { fg = c.fg, bg = c.bg })
|
||||
hl("NormalNC", { fg = c.fg, bg = c.bg })
|
||||
hl("NormalFloat", { fg = c.fg, bg = c.bg_float })
|
||||
hl("FloatBorder", { fg = c.border, bg = c.bg_float })
|
||||
hl("FloatTitle", { fg = c.accent, bg = c.bg_float, bold = true })
|
||||
hl("FloatFooter", { fg = c.fg_muted, bg = c.bg_float })
|
||||
hl("WinSeparator", { fg = c.border, bg = "NONE" })
|
||||
link("VertSplit", "WinSeparator")
|
||||
|
||||
hl("Cursor", { fg = c.cursor_fg, bg = c.cursor_bg })
|
||||
link("lCursor", "Cursor")
|
||||
link("CursorIM", "Cursor")
|
||||
link("TermCursor", "Cursor")
|
||||
|
||||
hl("CursorLine", { bg = c.bg_cursorline })
|
||||
hl("CursorColumn", { bg = c.bg_cursorline })
|
||||
hl("ColorColumn", { bg = c.bg_alt })
|
||||
|
||||
hl("LineNr", { fg = c.fg_subtle, bg = c.bg })
|
||||
hl("LineNrAbove", { fg = c.fg_subtle, bg = c.bg })
|
||||
hl("LineNrBelow", { fg = c.fg_subtle, bg = c.bg })
|
||||
hl("CursorLineNr", { fg = c.line_current, bg = c.bg_cursorline, bold = true })
|
||||
|
||||
hl("SignColumn", { fg = c.fg_muted, bg = c.bg })
|
||||
hl("FoldColumn", { fg = c.fg_muted, bg = c.bg })
|
||||
hl("Folded", { fg = c.fg_muted, bg = c.bg_fold, italic = true })
|
||||
|
||||
hl("NonText", { fg = c.border, bg = "NONE" })
|
||||
link("EndOfBuffer", "NonText")
|
||||
hl("Whitespace", { fg = c.border, bg = "NONE" })
|
||||
hl("SpecialKey", { fg = c.border, bg = "NONE" })
|
||||
|
||||
hl("Visual", { bg = c.bg_visual })
|
||||
link("VisualNOS", "Visual")
|
||||
hl("Search", { fg = c.tertiary_fg, bg = c.bg_search })
|
||||
hl("CurSearch", { fg = c.accent_fg, bg = c.bg_incsearch, bold = true })
|
||||
link("IncSearch", "CurSearch")
|
||||
hl("Substitute", { fg = c.accent_fg, bg = c.bg_incsearch, bold = true })
|
||||
hl("MatchParen", { fg = c.match_fg, bg = c.match_bg, bold = true })
|
||||
|
||||
hl("Pmenu", { fg = c.fg, bg = c.bg_popup })
|
||||
hl("PmenuSel", { fg = c.fg_on_soft, bg = c.bg_selection, bold = true })
|
||||
hl("PmenuKind", { fg = c.secondary, bg = c.bg_popup })
|
||||
hl("PmenuKindSel", { fg = c.fg_on_soft, bg = c.secondary_container, bold = true })
|
||||
hl("PmenuExtra", { fg = c.fg_muted, bg = c.bg_popup })
|
||||
hl("PmenuExtraSel", { fg = c.fg_on_soft, bg = c.bg_selection })
|
||||
hl("PmenuSbar", { bg = c.bg_alt })
|
||||
hl("PmenuThumb", { bg = c.border })
|
||||
hl("PmenuMatch", { fg = c.accent, bg = c.bg_popup, bold = true })
|
||||
hl("PmenuMatchSel", { fg = c.accent, bg = c.bg_selection, bold = true })
|
||||
hl("PmenuBorder", { fg = c.border, bg = c.bg_popup })
|
||||
|
||||
hl("StatusLine", { fg = c.fg_strong, bg = c.bg_statusline })
|
||||
hl("StatusLineNC", { fg = c.fg_muted, bg = c.bg_statusline_nc })
|
||||
link("StatusLineTerm", "StatusLine")
|
||||
link("StatusLineTermNC", "StatusLineNC")
|
||||
hl("TabLine", { fg = c.fg_muted, bg = c.bg_tabline })
|
||||
hl("TabLineFill", { bg = c.bg_tabline })
|
||||
hl("TabLineSel", { fg = c.fg_on_soft, bg = c.accent_container, bold = true })
|
||||
hl("WinBar", { fg = c.fg, bg = c.bg })
|
||||
hl("WinBarNC", { fg = c.fg_muted, bg = c.bg })
|
||||
|
||||
hl("Directory", { fg = c.accent, bg = "NONE" })
|
||||
hl("Title", { fg = c.accent, bg = "NONE", bold = true })
|
||||
hl("Question", { fg = c.secondary, bg = "NONE", bold = true })
|
||||
hl("ModeMsg", { fg = c.accent, bg = "NONE", bold = true })
|
||||
hl("MoreMsg", { fg = c.info, bg = "NONE", bold = true })
|
||||
hl("ErrorMsg", { fg = c.error, bg = "NONE", bold = true })
|
||||
hl("WarningMsg", { fg = c.warn, bg = "NONE", bold = true })
|
||||
hl("OkMsg", { fg = c.ok, bg = "NONE", bold = true })
|
||||
hl("QuickFixLine", { bg = c.bg_selection, bold = true })
|
||||
|
||||
-- Diffs ---------------------------------------------------------------------
|
||||
hl("DiffAdd", { fg = c.add, bg = c.bg_alt })
|
||||
hl("DiffChange", { fg = c.change, bg = c.bg_alt })
|
||||
hl("DiffDelete", { fg = c.delete, bg = c.bg_alt })
|
||||
hl("DiffText", { fg = c.fg_on_soft, bg = c.accent_container, bold = true })
|
||||
link("DiffTextAdd", "DiffText")
|
||||
hl("Added", { fg = c.add })
|
||||
hl("Changed", { fg = c.change })
|
||||
hl("Removed", { fg = c.delete })
|
||||
|
||||
-- Standard syntax groups ----------------------------------------------------
|
||||
hl("Comment", { fg = c.fg_comment, italic = true })
|
||||
hl("Constant", { fg = c.code_const })
|
||||
hl("String", { fg = c.code_string })
|
||||
hl("Character", { fg = c.code_string })
|
||||
hl("Number", { fg = c.code_number })
|
||||
hl("Boolean", { fg = c.code_number, bold = true })
|
||||
hl("Float", { fg = c.code_number })
|
||||
|
||||
hl("Identifier", { fg = c.fg })
|
||||
hl("Function", { fg = c.code_func, bold = true })
|
||||
|
||||
hl("Statement", { fg = c.code_keyword, bold = true })
|
||||
link("Conditional", "Statement")
|
||||
link("Repeat", "Statement")
|
||||
link("Label", "Statement")
|
||||
hl("Operator", { fg = c.code_operator })
|
||||
hl("Keyword", { fg = c.code_keyword, italic = true })
|
||||
link("Exception", "Statement")
|
||||
|
||||
hl("PreProc", { fg = c.code_preproc })
|
||||
link("Include", "PreProc")
|
||||
link("Define", "PreProc")
|
||||
link("Macro", "PreProc")
|
||||
link("PreCondit", "PreProc")
|
||||
|
||||
hl("Type", { fg = c.code_type, bold = true })
|
||||
link("StorageClass", "Type")
|
||||
link("Structure", "Type")
|
||||
link("Typedef", "Type")
|
||||
|
||||
hl("Special", { fg = c.code_special })
|
||||
link("SpecialChar", "Special")
|
||||
link("Tag", "Special")
|
||||
hl("Delimiter", { fg = c.fg_muted })
|
||||
link("SpecialComment", "Special")
|
||||
link("Debug", "Special")
|
||||
|
||||
hl("Underlined", { fg = c.accent, underline = true })
|
||||
hl("Todo", { fg = c.todo_fg, bg = c.todo_bg, bold = true })
|
||||
hl("Error", { fg = c.error, bold = true })
|
||||
|
||||
-- Spell ---------------------------------------------------------------------
|
||||
hl("SpellBad", { sp = c.error, undercurl = true })
|
||||
hl("SpellCap", { sp = c.info, undercurl = true })
|
||||
hl("SpellLocal", { sp = c.hint, undercurl = true })
|
||||
hl("SpellRare", { sp = c.secondary, undercurl = true })
|
||||
|
||||
-- Diagnostics ---------------------------------------------------------------
|
||||
hl("DiagnosticError", { fg = c.error })
|
||||
hl("DiagnosticWarn", { fg = c.warn })
|
||||
hl("DiagnosticInfo", { fg = c.info })
|
||||
hl("DiagnosticHint", { fg = c.hint })
|
||||
hl("DiagnosticOk", { fg = c.ok })
|
||||
|
||||
hl("DiagnosticUnderlineError", { sp = c.error, undercurl = true })
|
||||
hl("DiagnosticUnderlineWarn", { sp = c.warn, undercurl = true })
|
||||
hl("DiagnosticUnderlineInfo", { sp = c.info, undercurl = true })
|
||||
hl("DiagnosticUnderlineHint", { sp = c.hint, undercurl = true })
|
||||
hl("DiagnosticUnderlineOk", { sp = c.ok, undercurl = true })
|
||||
|
||||
link("DiagnosticSignError", "DiagnosticError")
|
||||
link("DiagnosticSignWarn", "DiagnosticWarn")
|
||||
link("DiagnosticSignInfo", "DiagnosticInfo")
|
||||
link("DiagnosticSignHint", "DiagnosticHint")
|
||||
link("DiagnosticSignOk", "DiagnosticOk")
|
||||
|
||||
link("DiagnosticFloatingError", "DiagnosticError")
|
||||
link("DiagnosticFloatingWarn", "DiagnosticWarn")
|
||||
link("DiagnosticFloatingInfo", "DiagnosticInfo")
|
||||
link("DiagnosticFloatingHint", "DiagnosticHint")
|
||||
link("DiagnosticFloatingOk", "DiagnosticOk")
|
||||
|
||||
hl("DiagnosticVirtualTextError", { fg = c.error, bg = c.error_container })
|
||||
hl("DiagnosticVirtualTextWarn", { fg = c.warn, bg = c.bg_alt })
|
||||
hl("DiagnosticVirtualTextInfo", { fg = c.info, bg = c.bg_alt })
|
||||
hl("DiagnosticVirtualTextHint", { fg = c.hint, bg = c.bg_alt })
|
||||
hl("DiagnosticVirtualTextOk", { fg = c.ok, bg = c.bg_alt })
|
||||
|
||||
link("DiagnosticVirtualLinesError", "DiagnosticVirtualTextError")
|
||||
link("DiagnosticVirtualLinesWarn", "DiagnosticVirtualTextWarn")
|
||||
link("DiagnosticVirtualLinesInfo", "DiagnosticVirtualTextInfo")
|
||||
link("DiagnosticVirtualLinesHint", "DiagnosticVirtualTextHint")
|
||||
link("DiagnosticVirtualLinesOk", "DiagnosticVirtualTextOk")
|
||||
|
||||
hl("DiagnosticDeprecated", { fg = c.fg_muted, strikethrough = true })
|
||||
hl("DiagnosticUnnecessary", { fg = c.fg_muted, italic = true })
|
||||
|
||||
-- LSP reference/inlay/codelens ---------------------------------------------
|
||||
hl("LspReferenceText", { bg = c.ref_bg })
|
||||
hl("LspReferenceRead", { bg = c.ref_bg })
|
||||
hl("LspReferenceWrite", { bg = c.ref_bg, sp = c.accent, undercurl = true })
|
||||
hl("LspReferenceTarget", { fg = c.accent, bg = c.ref_bg, bold = true })
|
||||
hl("LspInlayHint", { fg = c.fg_muted, bg = c.bg_alt, italic = true })
|
||||
hl("LspCodeLens", { fg = c.fg_muted, italic = true })
|
||||
hl("LspCodeLensSeparator", { fg = c.border })
|
||||
hl("LspSignatureActiveParameter", { fg = c.accent, bold = true, underline = true })
|
||||
|
||||
-- Treesitter captures -------------------------------------------------------
|
||||
link("@comment", "Comment")
|
||||
link("@comment.documentation", "Comment")
|
||||
link("@comment.todo", "Todo")
|
||||
link("@comment.error", "DiagnosticError")
|
||||
link("@comment.warning", "DiagnosticWarn")
|
||||
link("@comment.note", "DiagnosticInfo")
|
||||
|
||||
link("@constant", "Constant")
|
||||
hl("@constant.builtin", { fg = c.code_builtin, italic = true, bold = true })
|
||||
hl("@constant.macro", { fg = c.code_preproc, bold = true })
|
||||
link("@string", "String")
|
||||
hl("@string.escape", { fg = c.code_special, bold = true })
|
||||
link("@string.regex", "Special")
|
||||
link("@character", "Character")
|
||||
link("@number", "Number")
|
||||
link("@boolean", "Boolean")
|
||||
link("@float", "Float")
|
||||
|
||||
link("@variable", "Identifier")
|
||||
hl("@variable.builtin", { fg = c.code_builtin, italic = true, bold = true })
|
||||
hl("@variable.parameter", { fg = c.code_param, italic = true })
|
||||
hl("@variable.member", { fg = c.code_field })
|
||||
hl("@property", { fg = c.code_field })
|
||||
hl("@field", { fg = c.code_field })
|
||||
|
||||
link("@function", "Function")
|
||||
hl("@function.builtin", { fg = c.code_builtin, bold = true })
|
||||
link("@function.call", "Function")
|
||||
hl("@function.method", { fg = c.code_func })
|
||||
hl("@function.method.call", { fg = c.code_func })
|
||||
hl("@constructor", { fg = c.code_type, bold = true })
|
||||
|
||||
link("@keyword", "Keyword")
|
||||
hl("@keyword.function", { fg = c.code_keyword, bold = true })
|
||||
hl("@keyword.operator", { fg = c.code_operator })
|
||||
link("@keyword.return", "Keyword")
|
||||
link("@conditional", "Conditional")
|
||||
link("@repeat", "Repeat")
|
||||
link("@label", "Label")
|
||||
link("@operator", "Operator")
|
||||
link("@exception", "Exception")
|
||||
|
||||
link("@preproc", "PreProc")
|
||||
link("@include", "Include")
|
||||
link("@define", "Define")
|
||||
link("@macro", "Macro")
|
||||
|
||||
link("@type", "Type")
|
||||
hl("@type.builtin", { fg = c.code_type, italic = true, bold = true })
|
||||
link("@type.definition", "Type")
|
||||
hl("@attribute", { fg = c.code_preproc })
|
||||
hl("@module", { fg = c.code_namespace })
|
||||
hl("@namespace", { fg = c.code_namespace })
|
||||
|
||||
link("@punctuation.delimiter", "Delimiter")
|
||||
link("@punctuation.bracket", "Delimiter")
|
||||
hl("@punctuation.special", { fg = c.code_special })
|
||||
link("@tag", "Tag")
|
||||
hl("@tag.attribute", { fg = c.code_field })
|
||||
link("@tag.delimiter", "Delimiter")
|
||||
|
||||
-- LSP semantic token families ----------------------------------------------
|
||||
link("@lsp.type.class", "@type")
|
||||
link("@lsp.type.comment", "@comment")
|
||||
link("@lsp.type.decorator", "@attribute")
|
||||
link("@lsp.type.enum", "@type")
|
||||
link("@lsp.type.enumMember", "@constant")
|
||||
link("@lsp.type.event", "@property")
|
||||
link("@lsp.type.function", "@function")
|
||||
link("@lsp.type.interface", "@type")
|
||||
link("@lsp.type.keyword", "@keyword")
|
||||
link("@lsp.type.macro", "@macro")
|
||||
link("@lsp.type.method", "@function.method")
|
||||
link("@lsp.type.modifier", "@keyword")
|
||||
link("@lsp.type.namespace", "@namespace")
|
||||
link("@lsp.type.number", "@number")
|
||||
link("@lsp.type.operator", "@operator")
|
||||
link("@lsp.type.parameter", "@variable.parameter")
|
||||
link("@lsp.type.property", "@property")
|
||||
link("@lsp.type.regexp", "@string.regex")
|
||||
link("@lsp.type.string", "@string")
|
||||
link("@lsp.type.struct", "@type")
|
||||
link("@lsp.type.type", "@type")
|
||||
link("@lsp.type.typeParameter", "@type")
|
||||
link("@lsp.type.variable", "@variable")
|
||||
|
||||
hl("@lsp.mod.deprecated", { strikethrough = true })
|
||||
link("@lsp.mod.readonly", "Constant")
|
||||
link("@lsp.typemod.variable.readonly", "Constant")
|
||||
|
||||
-- Common plugin aliases -----------------------------------------------------
|
||||
hl("GitSignsAdd", { fg = c.add, bg = c.bg })
|
||||
hl("GitSignsChange", { fg = c.change, bg = c.bg })
|
||||
hl("GitSignsDelete", { fg = c.delete, bg = c.bg })
|
||||
|
||||
hl("MiniIndentscopeSymbol", { fg = c.border, nocombine = true })
|
||||
hl("IblIndent", { fg = c.border, nocombine = true })
|
||||
hl("IblScope", { fg = c.fg_muted, nocombine = true })
|
||||
|
||||
link("TelescopeNormal", "NormalFloat")
|
||||
link("TelescopeBorder", "FloatBorder")
|
||||
link("TelescopeTitle", "FloatTitle")
|
||||
link("TelescopeSelection", "PmenuSel")
|
||||
hl("TelescopeMatching", { fg = c.accent, bold = true })
|
||||
|
||||
-- Snacks.nvim picker / explorer --------------------------------------------
|
||||
hl("SnacksPicker", { fg = c.fg, bg = c.bg })
|
||||
hl("SnacksPickerBorder", { fg = c.border, bg = c.bg })
|
||||
hl("SnacksPickerBoxBorder", { fg = c.border, bg = c.bg_alt })
|
||||
hl("SnacksPickerTitle", { fg = c.accent, bg = c.bg_alt, bold = true })
|
||||
|
||||
hl("SnacksPickerInput", { fg = c.fg, bg = c.bg_alt })
|
||||
hl("SnacksPickerInputBorder", { fg = c.border, bg = c.bg_alt })
|
||||
hl("SnacksPickerInputTitle", { fg = c.accent, bg = c.bg_alt, bold = true })
|
||||
hl("SnacksPickerInputSearch", { fg = c.accent, bg = c.bg_alt, bold = true })
|
||||
hl("SnacksPickerPrompt", { fg = c.accent, bg = c.bg_alt, bold = true })
|
||||
|
||||
hl("SnacksPickerList", { fg = c.fg, bg = c.bg })
|
||||
hl("SnacksPickerListBorder", { fg = c.border, bg = c.bg })
|
||||
hl("SnacksPickerListTitle", { fg = c.secondary, bg = c.bg, bold = true })
|
||||
hl("SnacksPickerListCursorLine", { bg = c.bg_cursorline })
|
||||
|
||||
hl("SnacksPickerPreview", { fg = c.fg, bg = c.bg_float })
|
||||
hl("SnacksPickerPreviewBorder", { fg = c.border, bg = c.bg_float })
|
||||
hl("SnacksPickerPreviewTitle", { fg = c.tertiary, bg = c.bg_float, bold = true })
|
||||
|
||||
hl("SnacksPickerMatch", { fg = c.accent, bold = true })
|
||||
hl("SnacksPickerFile", { fg = c.fg })
|
||||
hl("SnacksPickerDir", { fg = c.secondary })
|
||||
hl("SnacksPickerPathHidden", { fg = c.fg_muted })
|
||||
hl("SnacksPickerPathIgnored", { fg = c.fg_subtle, italic = true })
|
||||
hl("SnacksPickerPathExcluded", { fg = c.fg_subtle, italic = true })
|
||||
|
||||
hl("SnacksPickerGitStatusAdded", { fg = c.add })
|
||||
hl("SnacksPickerGitStatusModified", { fg = c.change })
|
||||
hl("SnacksPickerGitStatusDeleted", { fg = c.delete })
|
||||
hl("SnacksPickerGitStatusRenamed", { fg = c.info })
|
||||
hl("SnacksPickerGitStatusCopied", { fg = c.info })
|
||||
hl("SnacksPickerGitStatusUntracked", { fg = c.hint })
|
||||
hl("SnacksPickerGitStatusIgnored", { fg = c.fg_subtle })
|
||||
hl("SnacksPickerGitStatusStaged", { fg = c.ok })
|
||||
|
||||
return c
|
||||
@@ -1,12 +0,0 @@
|
||||
local gen_hook = MiniSplitjoin.gen_hook
|
||||
|
||||
local curly = { brackets = { '%b{}' }, separator = ';' }
|
||||
local curly_semi = { brackets = { '%b{}' }, separator = ';' }
|
||||
local add_semicolon_curly = gen_hook.add_trailing_separator(curly)
|
||||
local remove_semicolon_curly = gen_hook.del_trailing_separator(curly)
|
||||
local pad_curly = gen_hook.pad_brackets(curly_semi)
|
||||
|
||||
vim.b.minisplitjoin_config = {
|
||||
split = { hooks_post = { remove_semicolon_curly }},
|
||||
join = { hooks_pre = { add_semicolon_curly }, hooks_post = { pad_curly }},
|
||||
}
|
||||
|
||||
@@ -1,30 +1,43 @@
|
||||
if vim.env.PROF then
|
||||
local snacks = vim.fn.stdpath("data") .. "/lazy/snacks.nvim"
|
||||
local snacks = vim.fn.stdpath "data" .. "/lazy/snacks.nvim"
|
||||
|
||||
vim.opt.rtp:append( snacks )
|
||||
require("snacks.profiler").startup({
|
||||
vim.opt.rtp:append(snacks)
|
||||
require("snacks.profiler").startup {
|
||||
startup = {
|
||||
event = "UIEnter",
|
||||
},
|
||||
})
|
||||
}
|
||||
end
|
||||
|
||||
vim.cmd('source ' .. vim.fn.stdpath("config") .. "/cursor.vim")
|
||||
require("config.lazy")
|
||||
require("options")
|
||||
require("globals")
|
||||
require("mappings")
|
||||
require("autocmd")
|
||||
local home = os.getenv "HOME"
|
||||
package.path = package.path
|
||||
.. ";"
|
||||
.. home
|
||||
.. "/.luarocks/share/lua/5.4/?.lua"
|
||||
.. ";"
|
||||
.. home
|
||||
.. "/.luarocks/share/lua/5.4/?/init.lua"
|
||||
|
||||
package.cpath = package.cpath .. ";" .. home .. "/.luarocks/lib/lua/5.4/?.so"
|
||||
|
||||
vim.cmd("source " .. vim.fn.stdpath "config" .. "/cursor.vim")
|
||||
require "config.lazy"
|
||||
require "options"
|
||||
require "globals"
|
||||
require "mappings"
|
||||
require "autocmd"
|
||||
require("minimodules").load_modules()
|
||||
-- require("coc-settings")
|
||||
|
||||
if vim.g.neovide then
|
||||
require("config.neovide")
|
||||
require "config.neovide"
|
||||
end
|
||||
|
||||
vim.filetype.add({
|
||||
vim.filetype.add {
|
||||
pattern = {
|
||||
[".*/hypr/.*%.conf"] = "hyprlang",
|
||||
[".*/uwsm/env.*"] = "zsh",
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
vim.cmd.colorscheme "zshell"
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
local M = {}
|
||||
|
||||
M.icons = {
|
||||
misc = {
|
||||
dots = "",
|
||||
},
|
||||
ft = {
|
||||
octo = " ",
|
||||
gh = " ",
|
||||
["markdown.gh"] = " ",
|
||||
},
|
||||
dap = {
|
||||
Stopped = { " ", "DiagnosticWarn", "DapStoppedLine" },
|
||||
Breakpoint = " ",
|
||||
BreakpointCondition = " ",
|
||||
BreakpointRejected = { " ", "DiagnosticError" },
|
||||
LogPoint = ".>",
|
||||
},
|
||||
diagnostics = {
|
||||
Error = " ",
|
||||
Warn = " ",
|
||||
Hint = " ",
|
||||
Info = " ",
|
||||
},
|
||||
git = {
|
||||
added = " ",
|
||||
modified = " ",
|
||||
removed = " ",
|
||||
},
|
||||
kinds = {
|
||||
Array = " ",
|
||||
Boolean = " ",
|
||||
Class = " ",
|
||||
Codeium = " ",
|
||||
Color = " ",
|
||||
Control = " ",
|
||||
Collapsed = " ",
|
||||
Constant = " ",
|
||||
Constructor = " ",
|
||||
Copilot = " ",
|
||||
Enum = " ",
|
||||
EnumMember = " ",
|
||||
Event = " ",
|
||||
Field = " ",
|
||||
File = " ",
|
||||
Folder = " ",
|
||||
Function = " ",
|
||||
Interface = " ",
|
||||
Key = " ",
|
||||
Keyword = " ",
|
||||
Method = " ",
|
||||
Module = " ",
|
||||
Namespace = " ",
|
||||
Null = " ",
|
||||
Number = " ",
|
||||
Object = " ",
|
||||
Operator = " ",
|
||||
Package = " ",
|
||||
Property = " ",
|
||||
Reference = " ",
|
||||
Snippet = " ",
|
||||
String = " ",
|
||||
Struct = " ",
|
||||
Supermaven = " ",
|
||||
TabNine = " ",
|
||||
Text = " ",
|
||||
TypeParameter = " ",
|
||||
Unit = " ",
|
||||
Value = " ",
|
||||
Variable = " ",
|
||||
},
|
||||
}
|
||||
|
||||
return M
|
||||
+69
-5
@@ -2,7 +2,7 @@ local autocmd = vim.api.nvim_create_autocmd
|
||||
|
||||
autocmd("LspAttach", {
|
||||
callback = function(args)
|
||||
local client = vim.lsp.get_client_by_id( args.data.client_id )
|
||||
local client = vim.lsp.get_client_by_id(args.data.client_id)
|
||||
if client then
|
||||
vim.lsp.document_color.enable(false, args.buf, { "background" })
|
||||
end
|
||||
@@ -10,11 +10,75 @@ autocmd("LspAttach", {
|
||||
})
|
||||
|
||||
autocmd("VimLeave", {
|
||||
command = "set guicursor=a:ver25-Cursor"
|
||||
command = "set guicursor=a:ver25-Cursor",
|
||||
})
|
||||
|
||||
autocmd({ "CursorHold" }, {
|
||||
autocmd("BufWritePre", {
|
||||
callback = function()
|
||||
vim.diagnostic.open_float(nil, { focus = false })
|
||||
end
|
||||
local ok = pcall(function()
|
||||
vim.cmd "undojoin"
|
||||
end)
|
||||
vim.cmd "Neoformat"
|
||||
end,
|
||||
})
|
||||
|
||||
autocmd({ "InsertLeave" }, {
|
||||
callback = function()
|
||||
require("lint").try_lint()
|
||||
end,
|
||||
})
|
||||
|
||||
local progress = vim.defaulttable()
|
||||
vim.api.nvim_create_autocmd("LspProgress", {
|
||||
---@param ev {data: {client_id: integer, params: lsp.ProgressParams}}
|
||||
callback = function(ev)
|
||||
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
||||
local value = ev.data.params.value --[[@as {percentage?: number, title?: string, message?: string, kind: "begin" | "report" | "end"}]]
|
||||
if not client or type(value) ~= "table" then
|
||||
return
|
||||
end
|
||||
local p = progress[client.id]
|
||||
|
||||
for i = 1, #p + 1 do
|
||||
if i == #p + 1 or p[i].token == ev.data.params.token then
|
||||
p[i] = {
|
||||
token = ev.data.params.token,
|
||||
msg = ("[%3d%%] %s%s"):format(
|
||||
value.kind == "end" and 100 or value.percentage or 100,
|
||||
value.title or "",
|
||||
value.message and (" **%s**"):format(value.message)
|
||||
or ""
|
||||
),
|
||||
done = value.kind == "end",
|
||||
}
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
local msg = {} ---@type string[]
|
||||
progress[client.id] = vim.tbl_filter(function(v)
|
||||
return table.insert(msg, v.msg) or not v.done
|
||||
end, p)
|
||||
|
||||
local spinner = {
|
||||
"⠋",
|
||||
"⠙",
|
||||
"⠹",
|
||||
"⠸",
|
||||
"⠼",
|
||||
"⠴",
|
||||
"⠦",
|
||||
"⠧",
|
||||
"⠇",
|
||||
"⠏",
|
||||
}
|
||||
vim.notify(table.concat(msg, "\n"), "info", {
|
||||
id = "lsp_progress",
|
||||
title = client.name,
|
||||
opts = function(notif)
|
||||
notif.icon = #progress[client.id] == 0 and " "
|
||||
or spinner[math.floor(vim.uv.hrtime() / (1e6 * 80)) % #spinner + 1]
|
||||
end,
|
||||
})
|
||||
end,
|
||||
})
|
||||
|
||||
+100
-52
@@ -1,4 +1,4 @@
|
||||
vimiopt.backup = false
|
||||
vim.opt.backup = false
|
||||
vim.opt.writebackup = false
|
||||
vim.opt.completeopt = "menuone,menu,noinsert,noselect,popup"
|
||||
vim.opt.pumheight = 10
|
||||
@@ -9,8 +9,8 @@ vim.opt.signcolumn = "yes"
|
||||
|
||||
local keyset = vim.keymap.set
|
||||
function _G.check_back_space()
|
||||
local col = vim.fn.col('.') - 1
|
||||
return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil
|
||||
local col = vim.fn.col "." - 1
|
||||
return col == 0 or vim.fn.getline("."):sub(col, col):match "%s" ~= nil
|
||||
end
|
||||
|
||||
-- Use Tab for trigger completion with characters ahead and navigate
|
||||
@@ -18,75 +18,81 @@ end
|
||||
-- no select by setting `"suggest.noselect": true` in your configuration file
|
||||
-- NOTE: Use command ':verbose imap <tab>' to make sure Tab is not mapped by
|
||||
-- other plugins before putting this into your config
|
||||
local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false}
|
||||
keyset("i", "<TAB>", 'coc#pum#visible() ? coc#pum#next(0) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()', opts)
|
||||
local opts =
|
||||
{ silent = true, noremap = true, expr = true, replace_keycodes = false }
|
||||
keyset(
|
||||
"i",
|
||||
"<TAB>",
|
||||
'coc#pum#visible() ? coc#pum#next(0) : v:lua.check_back_space() ? "<TAB>" : coc#refresh()',
|
||||
opts
|
||||
)
|
||||
keyset("i", "<S-TAB>", [[coc#pum#visible() ? coc#pum#prev(0) : "\<C-h>"]], opts)
|
||||
|
||||
-- Make <CR> to accept selected completion item or notify coc.nvim to format
|
||||
-- <C-g>u breaks current undo, please make your own choice
|
||||
|
||||
keyset("i", "<cr>", [[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]], opts)
|
||||
keyset(
|
||||
"i",
|
||||
"<cr>",
|
||||
[[coc#pum#visible() ? coc#pum#confirm() : "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"]],
|
||||
opts
|
||||
)
|
||||
|
||||
-- Use <c-j> to trigger snippets
|
||||
keyset("i", "<c-j>", "<Plug>(coc-snippets-expand-jump)")
|
||||
-- Use <c-space> to trigger completion
|
||||
keyset("i", "<c-space>", "coc#refresh()", {silent = true, expr = true})
|
||||
keyset("i", "<c-space>", "coc#refresh()", { silent = true, expr = true })
|
||||
|
||||
-- Use `[g` and `]g` to navigate diagnostics
|
||||
-- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list
|
||||
keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", {silent = true})
|
||||
keyset("n", "]g", "<Plug>(coc-diagnostic-next)", {silent = true})
|
||||
keyset("n", "[g", "<Plug>(coc-diagnostic-prev)", { silent = true })
|
||||
keyset("n", "]g", "<Plug>(coc-diagnostic-next)", { silent = true })
|
||||
|
||||
-- GoTo code navigation
|
||||
keyset("n", "gd", "<Plug>(coc-definition)", {silent = true})
|
||||
keyset("n", "gy", "<Plug>(coc-type-definition)", {silent = true})
|
||||
keyset("n", "gi", "<Plug>(coc-implementation)", {silent = true})
|
||||
keyset("n", "gr", "<Plug>(coc-references)", {silent = true})
|
||||
|
||||
keyset("n", "gd", "<Plug>(coc-definition)", { silent = true })
|
||||
keyset("n", "gy", "<Plug>(coc-type-definition)", { silent = true })
|
||||
keyset("n", "gi", "<Plug>(coc-implementation)", { silent = true })
|
||||
keyset("n", "gr", "<Plug>(coc-references)", { silent = true })
|
||||
|
||||
-- Use K to show documentation in preview window
|
||||
function _G.show_docs()
|
||||
local cw = vim.fn.expand('<cword>')
|
||||
if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then
|
||||
vim.api.nvim_command('h ' .. cw)
|
||||
elseif vim.api.nvim_eval('coc#rpc#ready()') then
|
||||
vim.fn.CocActionAsync('doHover')
|
||||
local cw = vim.fn.expand "<cword>"
|
||||
if vim.fn.index({ "vim", "help" }, vim.bo.filetype) >= 0 then
|
||||
vim.api.nvim_command("h " .. cw)
|
||||
elseif vim.api.nvim_eval "coc#rpc#ready()" then
|
||||
vim.fn.CocActionAsync "doHover"
|
||||
else
|
||||
vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw)
|
||||
vim.api.nvim_command("!" .. vim.o.keywordprg .. " " .. cw)
|
||||
end
|
||||
end
|
||||
keyset("n", "K", '<CMD>lua _G.show_docs()<CR>', {silent = true})
|
||||
|
||||
keyset("n", "K", "<CMD>lua _G.show_docs()<CR>", { silent = true })
|
||||
|
||||
-- Highlight the symbol and its references on a CursorHold event(cursor is idle)
|
||||
vim.api.nvim_create_augroup("CocGroup", {})
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
group = "CocGroup",
|
||||
command = "silent call CocActionAsync('highlight')",
|
||||
desc = "Highlight symbol under cursor on CursorHold"
|
||||
desc = "Highlight symbol under cursor on CursorHold",
|
||||
})
|
||||
|
||||
|
||||
-- Symbol renaming
|
||||
keyset("n", "<leader>rn", "<Plug>(coc-rename)", {silent = true})
|
||||
|
||||
keyset("n", "<leader>rn", "<Plug>(coc-rename)", { silent = true })
|
||||
|
||||
-- Formatting selected code
|
||||
keyset("x", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
|
||||
keyset("n", "<leader>f", "<Plug>(coc-format-selected)", {silent = true})
|
||||
|
||||
keyset("x", "<leader>f", "<Plug>(coc-format-selected)", { silent = true })
|
||||
keyset("n", "<leader>f", "<Plug>(coc-format-selected)", { silent = true })
|
||||
|
||||
-- Setup formatexpr specified filetype(s)
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
group = "CocGroup",
|
||||
pattern = "typescript,json",
|
||||
command = "setl formatexpr=CocAction('formatSelected')",
|
||||
desc = "Setup formatexpr specified filetype(s)."
|
||||
desc = "Setup formatexpr specified filetype(s).",
|
||||
})
|
||||
|
||||
-- Apply codeAction to the selected region
|
||||
-- Example: `<leader>aap` for current paragraph
|
||||
local opts = {silent = true, nowait = true}
|
||||
local opts = { silent = true, nowait = true }
|
||||
keyset("x", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
|
||||
keyset("n", "<leader>a", "<Plug>(coc-codeaction-selected)", opts)
|
||||
|
||||
@@ -99,13 +105,22 @@ keyset("n", "<leader>qf", "<Plug>(coc-fix-current)", opts)
|
||||
|
||||
-- Remap keys for apply refactor code actions.
|
||||
keyset("n", "<leader>re", "<Plug>(coc-codeaction-refactor)", { silent = true })
|
||||
keyset("x", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
|
||||
keyset("n", "<leader>r", "<Plug>(coc-codeaction-refactor-selected)", { silent = true })
|
||||
keyset(
|
||||
"x",
|
||||
"<leader>r",
|
||||
"<Plug>(coc-codeaction-refactor-selected)",
|
||||
{ silent = true }
|
||||
)
|
||||
keyset(
|
||||
"n",
|
||||
"<leader>r",
|
||||
"<Plug>(coc-codeaction-refactor-selected)",
|
||||
{ silent = true }
|
||||
)
|
||||
|
||||
-- Run the Code Lens actions on the current line
|
||||
keyset("n", "<leader>cl", "<Plug>(coc-codelens-action)", opts)
|
||||
|
||||
|
||||
-- Map function and class text objects
|
||||
-- NOTE: Requires 'textDocument.documentSymbol' support from the language server
|
||||
keyset("x", "if", "<Plug>(coc-funcobj-i)", opts)
|
||||
@@ -117,44 +132,77 @@ keyset("o", "ic", "<Plug>(coc-classobj-i)", opts)
|
||||
keyset("x", "ac", "<Plug>(coc-classobj-a)", opts)
|
||||
keyset("o", "ac", "<Plug>(coc-classobj-a)", opts)
|
||||
|
||||
|
||||
-- Remap <C-f> and <C-b> to scroll float windows/popups
|
||||
---@diagnostic disable-next-line: redefined-local
|
||||
local opts = {silent = true, nowait = true, expr = true}
|
||||
keyset("n", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
|
||||
keyset("n", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
|
||||
keyset("i", "<C-f>",
|
||||
'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"', opts)
|
||||
keyset("i", "<C-b>",
|
||||
'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"', opts)
|
||||
keyset("v", "<C-f>", 'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"', opts)
|
||||
keyset("v", "<C-b>", 'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"', opts)
|
||||
|
||||
local opts = { silent = true, nowait = true, expr = true }
|
||||
keyset(
|
||||
"n",
|
||||
"<C-f>",
|
||||
'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"',
|
||||
opts
|
||||
)
|
||||
keyset(
|
||||
"n",
|
||||
"<C-b>",
|
||||
'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"',
|
||||
opts
|
||||
)
|
||||
keyset(
|
||||
"i",
|
||||
"<C-f>",
|
||||
'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(1)<cr>" : "<Right>"',
|
||||
opts
|
||||
)
|
||||
keyset(
|
||||
"i",
|
||||
"<C-b>",
|
||||
'coc#float#has_scroll() ? "<c-r>=coc#float#scroll(0)<cr>" : "<Left>"',
|
||||
opts
|
||||
)
|
||||
keyset(
|
||||
"v",
|
||||
"<C-f>",
|
||||
'coc#float#has_scroll() ? coc#float#scroll(1) : "<C-f>"',
|
||||
opts
|
||||
)
|
||||
keyset(
|
||||
"v",
|
||||
"<C-b>",
|
||||
'coc#float#has_scroll() ? coc#float#scroll(0) : "<C-b>"',
|
||||
opts
|
||||
)
|
||||
|
||||
-- Use CTRL-S for selections ranges
|
||||
-- Requires 'textDocument/selectionRange' support of language server
|
||||
keyset("n", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
|
||||
keyset("x", "<C-s>", "<Plug>(coc-range-select)", {silent = true})
|
||||
|
||||
keyset("n", "<C-s>", "<Plug>(coc-range-select)", { silent = true })
|
||||
keyset("x", "<C-s>", "<Plug>(coc-range-select)", { silent = true })
|
||||
|
||||
-- Add `:Format` command to format current buffer
|
||||
vim.api.nvim_create_user_command("Format", "call CocAction('format')", {})
|
||||
|
||||
-- " Add `:Fold` command to fold current buffer
|
||||
vim.api.nvim_create_user_command("Fold", "call CocAction('fold', <f-args>)", {nargs = '?'})
|
||||
vim.api.nvim_create_user_command(
|
||||
"Fold",
|
||||
"call CocAction('fold', <f-args>)",
|
||||
{ nargs = "?" }
|
||||
)
|
||||
|
||||
-- Add `:OR` command for organize imports of the current buffer
|
||||
vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {})
|
||||
vim.api.nvim_create_user_command(
|
||||
"OR",
|
||||
"call CocActionAsync('runCommand', 'editor.action.organizeImport')",
|
||||
{}
|
||||
)
|
||||
|
||||
-- Add (Neo)Vim's native statusline support
|
||||
-- NOTE: Please see `:h coc-status` for integrations with external plugins that
|
||||
-- provide custom statusline: lightline.vim, vim-airline
|
||||
vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}")
|
||||
vim.opt.statusline:prepend "%{coc#status()}%{get(b:,'coc_current_function','')}"
|
||||
|
||||
-- Mappings for CoCList
|
||||
-- code actions and coc stuff
|
||||
---@diagnostic disable-next-line: redefined-local
|
||||
local opts = {silent = true, nowait = true}
|
||||
local opts = { silent = true, nowait = true }
|
||||
-- Show all diagnostics
|
||||
keyset("n", "<space>a", ":<C-u>CocList diagnostics<cr>", opts)
|
||||
-- Manage extensions
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
require("tiny-inline-diagnostic").setup({})
|
||||
@@ -0,0 +1,73 @@
|
||||
require("actions-preview").setup {
|
||||
-- options for vim.diff(): https://neovim.io/doc/user/lua.html#vim.diff()
|
||||
diff = {
|
||||
ctxlen = 3,
|
||||
},
|
||||
|
||||
highlight_command = {
|
||||
-- require("actions-preview.highlight").delta(),
|
||||
-- require("actions-preview.highlight").diff_so_fancy(),
|
||||
-- require("actions-preview.highlight").diff_highlight(),
|
||||
},
|
||||
|
||||
-- priority list of preferred backend
|
||||
backend = { "snacks", "nui" },
|
||||
|
||||
-- options related to telescope.nvim
|
||||
telescope = vim.tbl_extend(
|
||||
"force",
|
||||
require("telescope.themes").get_dropdown(),
|
||||
-- a table for customizing content
|
||||
{
|
||||
-- a function to make a table containing the values to be displayed.
|
||||
-- fun(action: Action): { title: string, client_name: string|nil }
|
||||
make_value = nil,
|
||||
|
||||
-- a function to make a function to be used in `display` of a entry.
|
||||
-- see also `:h telescope.make_entry` and `:h telescope.pickers.entry_display`.
|
||||
-- fun(values: { index: integer, action: Action, title: string, client_name: string }[]): function
|
||||
make_make_display = nil,
|
||||
}
|
||||
),
|
||||
|
||||
-- options for nui.nvim components
|
||||
nui = {
|
||||
-- component direction. "col" or "row"
|
||||
dir = "col",
|
||||
-- keymap for selection component: https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/menu#keymap
|
||||
keymap = nil,
|
||||
-- options for nui Layout component: https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/layout
|
||||
layout = {
|
||||
position = "50%",
|
||||
size = {
|
||||
width = "60%",
|
||||
height = "100%",
|
||||
},
|
||||
min_width = 40,
|
||||
min_height = 10,
|
||||
relative = "editor",
|
||||
},
|
||||
-- options for preview area: https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/popup
|
||||
preview = {
|
||||
size = "80%",
|
||||
border = {
|
||||
style = "rounded",
|
||||
padding = { 0, 1 },
|
||||
},
|
||||
},
|
||||
-- options for selection area: https://github.com/MunifTanjim/nui.nvim/tree/main/lua/nui/menu
|
||||
select = {
|
||||
size = "20%",
|
||||
border = {
|
||||
style = "rounded",
|
||||
padding = { 0, 1 },
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
--- options for snacks picker
|
||||
---@type snacks.picker.Config
|
||||
snacks = {
|
||||
layout = { preset = "default" },
|
||||
},
|
||||
}
|
||||
@@ -3,16 +3,24 @@ require("bufferline").setup ({
|
||||
diagnostics = "nvim_lsp",
|
||||
diagnostics_indicator = function(count, level, diagnostics_dict, context)
|
||||
local s = " "
|
||||
if diagnostics_dict then
|
||||
for e, n in pairs(diagnostics_dict) do
|
||||
local sym = e == "error" and " "
|
||||
or (e == "warning" and " " or " ")
|
||||
s = s .. n .. sym
|
||||
s = sym .. n
|
||||
end
|
||||
return s
|
||||
end
|
||||
return ""
|
||||
end,
|
||||
show_close_icon = false,
|
||||
show_buffer_close_icons = false,
|
||||
always_show_bufferline = true,
|
||||
tab_size = 1,
|
||||
indicator = {
|
||||
style = "icon",
|
||||
icon = "▎",
|
||||
},
|
||||
offsets = {
|
||||
{
|
||||
filetype = "NvimTree",
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
return {
|
||||
opts = {
|
||||
max_completions = 1,
|
||||
max_attempts = 2,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,177 @@
|
||||
local M = {}
|
||||
|
||||
local icons = require("assets.icons").icons.kinds
|
||||
|
||||
local devicons = {
|
||||
default_icon = { icon = "", name = "Default" },
|
||||
js = { icon = "", name = "js" },
|
||||
ts = { icon = "", name = "ts" },
|
||||
lock = { icon = "", name = "lock" },
|
||||
["robots.txt"] = { icon = "", name = "robots" },
|
||||
}
|
||||
|
||||
M.components = {
|
||||
kind_icon = {
|
||||
text = function(ctx)
|
||||
local icon = (icons[ctx.kind] or "")
|
||||
|
||||
return icon .. " "
|
||||
end,
|
||||
},
|
||||
|
||||
kind = {
|
||||
highlight = function(ctx)
|
||||
return ctx.kind
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
local opts = {
|
||||
"saghen/blink.cmp",
|
||||
dependencies = {
|
||||
"rafamadriz/friendly-snippets",
|
||||
{
|
||||
"fang2hou/blink-copilot",
|
||||
config = function()
|
||||
require "config.blink-copilot"
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
version = "1.*",
|
||||
|
||||
opts = {
|
||||
keymap = {
|
||||
["<Tab>"] = {
|
||||
function(cmp)
|
||||
if cmp.is_visible() then
|
||||
return cmp.select_next()
|
||||
end
|
||||
|
||||
if cmp.snippet_active() then
|
||||
return cmp.snippet_forward()
|
||||
end
|
||||
end,
|
||||
"fallback",
|
||||
},
|
||||
["<S-Tab>"] = {
|
||||
function(cmp)
|
||||
if cmp.is_visible() then
|
||||
return cmp.select_prev()
|
||||
end
|
||||
|
||||
if cmp.snippet_active() then
|
||||
return cmp.snippet_backward()
|
||||
end
|
||||
end,
|
||||
"fallback",
|
||||
},
|
||||
["<CR>"] = { "accept", "fallback" },
|
||||
["Up"] = {},
|
||||
["Down"] = {},
|
||||
},
|
||||
|
||||
appearance = {
|
||||
nerd_font_variant = "mono",
|
||||
},
|
||||
|
||||
cmdline = {
|
||||
completion = {
|
||||
menu = { auto_show = true },
|
||||
list = { selection = { preselect = false } },
|
||||
},
|
||||
|
||||
keymap = {
|
||||
["<Tab>"] = {
|
||||
function(cmp)
|
||||
if cmp.is_visible() then
|
||||
return cmp.select_next()
|
||||
end
|
||||
end,
|
||||
"fallback",
|
||||
},
|
||||
["<S-Tab>"] = {
|
||||
function(cmp)
|
||||
if cmp.is_visible() then
|
||||
return cmp.select_prev()
|
||||
end
|
||||
end,
|
||||
"fallback",
|
||||
},
|
||||
["<CR>"] = { "accept", "fallback" },
|
||||
["Up"] = {},
|
||||
["Down"] = {},
|
||||
},
|
||||
},
|
||||
|
||||
completion = {
|
||||
documentation = { auto_show = true, auto_show_delay_ms = 50 },
|
||||
keyword = { range = "full" },
|
||||
accept = { auto_brackets = { enabled = true } },
|
||||
ghost_text = { enabled = true },
|
||||
list = {
|
||||
selection = {
|
||||
-- preselect = false,
|
||||
auto_insert = false,
|
||||
},
|
||||
},
|
||||
|
||||
menu = {
|
||||
scrollbar = false,
|
||||
border = "single",
|
||||
draw = {
|
||||
padding = 1,
|
||||
columns = {
|
||||
{ "kind_icon" },
|
||||
{ "label", "label_description", gap = 1 },
|
||||
{ "kind" },
|
||||
},
|
||||
components = M.components,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
signature = { enabled = true },
|
||||
|
||||
sources = {
|
||||
default = { "lsp", "path", "snippets", "buffer", "copilot" },
|
||||
providers = {
|
||||
lsp = {
|
||||
score_offset = 50,
|
||||
},
|
||||
|
||||
path = {
|
||||
opts = {
|
||||
get_cwd = function()
|
||||
return vim.fn.getcwd()
|
||||
end,
|
||||
},
|
||||
},
|
||||
|
||||
buffer = {
|
||||
score_offset = -10,
|
||||
},
|
||||
|
||||
snippets = {
|
||||
score_offset = 0,
|
||||
},
|
||||
|
||||
copilot = {
|
||||
name = "copilot",
|
||||
module = "blink-copilot",
|
||||
score_offset = 100,
|
||||
async = true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
snippets = {
|
||||
preset = "default",
|
||||
},
|
||||
|
||||
fuzzy = { implementation = "prefer_rust_with_warning" },
|
||||
},
|
||||
opts_extend = { "sources.default" },
|
||||
}
|
||||
|
||||
return opts
|
||||
@@ -0,0 +1,71 @@
|
||||
---@diagnostic disable: redundant-parameter
|
||||
require("catppuccin").setup {
|
||||
flavour = "latte",
|
||||
background = {
|
||||
light = "latte",
|
||||
dark = "latte",
|
||||
},
|
||||
transparent_background = false,
|
||||
float = {
|
||||
transparent = false,
|
||||
solid = false,
|
||||
},
|
||||
show_end_of_buffer = false,
|
||||
term_colors = false,
|
||||
dim_inactive = {
|
||||
enabled = false,
|
||||
shade = "dark",
|
||||
percentage = 0.15,
|
||||
},
|
||||
no_italic = false,
|
||||
no_bold = false,
|
||||
no_underline = false,
|
||||
styles = {
|
||||
comments = { "italic" },
|
||||
conditionals = { "italic" },
|
||||
loops = {},
|
||||
functions = {},
|
||||
keywords = {},
|
||||
strings = {},
|
||||
variables = {},
|
||||
numbers = {},
|
||||
booleans = {},
|
||||
properties = {},
|
||||
types = {},
|
||||
operators = {},
|
||||
-- miscs = {},
|
||||
},
|
||||
lsp_styles = {
|
||||
virtual_text = {
|
||||
errors = { "italic" },
|
||||
hints = { "italic" },
|
||||
warnings = { "italic" },
|
||||
information = { "italic" },
|
||||
ok = { "italic" },
|
||||
},
|
||||
underlines = {
|
||||
errors = { "underline" },
|
||||
hints = { "underline" },
|
||||
warnings = { "underline" },
|
||||
information = { "underline" },
|
||||
ok = { "underline" },
|
||||
},
|
||||
inlay_hints = {
|
||||
background = true,
|
||||
},
|
||||
},
|
||||
color_overrides = {},
|
||||
custom_highlights = {},
|
||||
default_integrations = true,
|
||||
auto_integrations = false,
|
||||
integrations = {
|
||||
cmp = true,
|
||||
gitsigns = true,
|
||||
nvimtree = true,
|
||||
notify = false,
|
||||
mini = {
|
||||
enabled = true,
|
||||
indentscope_color = "",
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
local M = {}
|
||||
|
||||
M = {
|
||||
keymaps = {
|
||||
toggle = "<C-S-q>",
|
||||
quit = nil,
|
||||
},
|
||||
|
||||
border = "rounded",
|
||||
width = "0.8",
|
||||
height = "0.8",
|
||||
model = "gpt-5.2",
|
||||
autoinstall = false,
|
||||
panel = false,
|
||||
use_buffer = false,
|
||||
}
|
||||
|
||||
return M
|
||||
+10
-10
@@ -1,21 +1,21 @@
|
||||
require("copilot").setup({
|
||||
require("copilot").setup {
|
||||
panel = {
|
||||
enabled = true,
|
||||
enabled = false,
|
||||
auto_refresh = true,
|
||||
keymap = {
|
||||
jump_prev = "[[",
|
||||
jump_next = "]]",
|
||||
accept = "<CR>",
|
||||
refresh = "gr",
|
||||
open = "<M-CR>"
|
||||
open = "<M-CR>",
|
||||
},
|
||||
layout = {
|
||||
position = "bottom", -- | top | left | right | horizontal | vertical
|
||||
ratio = 0.4
|
||||
ratio = 0.4,
|
||||
},
|
||||
},
|
||||
suggestion = {
|
||||
enabled = true,
|
||||
enabled = false,
|
||||
auto_trigger = true,
|
||||
hide_during_completion = true,
|
||||
debounce = 75,
|
||||
@@ -30,8 +30,8 @@ require("copilot").setup({
|
||||
},
|
||||
filetypes = {
|
||||
-- yaml = false,
|
||||
-- markdown = false,
|
||||
-- help = false,
|
||||
markdown = true,
|
||||
help = true,
|
||||
-- gitcommit = false,
|
||||
-- gitrebase = false,
|
||||
-- hgcommit = false,
|
||||
@@ -49,11 +49,11 @@ require("copilot").setup({
|
||||
-- hypr = false,
|
||||
-- ["."] = false,
|
||||
},
|
||||
copilot_node_command = 'node',
|
||||
copilot_node_command = "node",
|
||||
server_opts_overrides = {},
|
||||
vim.api.nvim_create_autocmd({ "VimLeavePre" }, {
|
||||
callback = function()
|
||||
vim.cmd( "CopilotChatSave AutoSave" )
|
||||
vim.cmd "CopilotChatSave AutoSave"
|
||||
end,
|
||||
}),
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
return {
|
||||
"yarospace/dev-tools.nvim",
|
||||
opts = {
|
||||
actions = {},
|
||||
|
||||
filetypes = {
|
||||
include = {},
|
||||
exclude = {},
|
||||
},
|
||||
|
||||
builtin_actions = {
|
||||
include = {},
|
||||
exclude = {},
|
||||
},
|
||||
|
||||
action_opts = {
|
||||
{
|
||||
group = "Debuggins",
|
||||
name = "Log vars under cursor",
|
||||
opts = {
|
||||
keymap = {
|
||||
global = "<leader>dl",
|
||||
picker = "<M-l>",
|
||||
hide = true,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
ui = {
|
||||
override = true,
|
||||
group_actions = true,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
return {
|
||||
"Bekaboo/dropbar.nvim",
|
||||
dependencies = {
|
||||
"nvim-telescope/telescope-fzf-native.nvim",
|
||||
run = "make"
|
||||
},
|
||||
|
||||
opts = {
|
||||
bar = {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
local opts = {
|
||||
close_if_last_window = true, -- Close Neo-tree if it is the last window left in the tab
|
||||
popup_border_style = Util.ui.borderchars("thick", "tl-t-tr-r-br-b-bl-l"),
|
||||
sources = {
|
||||
"filesystem",
|
||||
"buffers",
|
||||
"git_status",
|
||||
"diagnostics",
|
||||
-- "document_symbols",
|
||||
},
|
||||
source_selector = {
|
||||
winbar = true, -- toggle to show selector on winbar
|
||||
content_layout = "center",
|
||||
tabs_layout = "equal",
|
||||
show_separator_on_edge = true,
|
||||
sources = {
|
||||
{ source = "filesystem", display_name = "" },
|
||||
{ source = "buffers", display_name = "" },
|
||||
{ source = "git_status", display_name = "" },
|
||||
-- { source = "document_symbols", display_name = "o" },
|
||||
{ source = "diagnostics", display_name = "" },
|
||||
},
|
||||
},
|
||||
default_component_configs = {
|
||||
indent = {
|
||||
indent_size = 2,
|
||||
padding = 1, -- extra padding on left hand side
|
||||
-- indent guides
|
||||
with_markers = true,
|
||||
indent_marker = "│",
|
||||
last_indent_marker = "└",
|
||||
-- expander config, needed for nesting files
|
||||
with_expanders = true, -- if nil and file nesting is enabled, will enable expanders
|
||||
expander_collapsed = "",
|
||||
expander_expanded = "",
|
||||
expander_highlight = "NeoTreeExpander",
|
||||
},
|
||||
icon = {
|
||||
folder_closed = "",
|
||||
folder_open = "",
|
||||
folder_empty = "",
|
||||
folder_empty_open = "",
|
||||
-- The next two settings are only a fallback, if you use nvim-web-devicons and configure default icons there
|
||||
-- then these will never be used.
|
||||
default = " ",
|
||||
},
|
||||
modified = { symbol = "" },
|
||||
git_status = { symbols = Icon.git },
|
||||
diagnostics = { symbols = Icon.diagnostics },
|
||||
},
|
||||
window = {
|
||||
width = 40,
|
||||
mappings = {
|
||||
["<1-LeftMouse>"] = "open",
|
||||
["l"] = "open",
|
||||
["<space>"] = "none",
|
||||
["P"] = { "toggle_preview", config = { use_float = false } },
|
||||
},
|
||||
},
|
||||
filesystem = {
|
||||
window = {
|
||||
mappings = {
|
||||
["H"] = "navigate_up",
|
||||
["<bs>"] = "toggle_hidden",
|
||||
["."] = "set_root",
|
||||
["/"] = "fuzzy_finder",
|
||||
["f"] = "filter_on_submit",
|
||||
["<c-x>"] = "clear_filter",
|
||||
["a"] = { "add", config = { show_path = "relative" } }, -- "none", "relative", "absolute"
|
||||
},
|
||||
},
|
||||
filtered_items = {
|
||||
hide_dotfiles = false,
|
||||
hide_gitignored = false,
|
||||
},
|
||||
follow_current_file = {
|
||||
enabled = true,
|
||||
}, -- This will find and focus the file in the active buffer every
|
||||
-- time the current file is changed while the tree is open.
|
||||
group_empty_dirs = true, -- when true, empty folders will be grouped together
|
||||
},
|
||||
async_directory_scan = "always",
|
||||
}
|
||||
|
||||
opts.filesystem.components =
|
||||
require "config.features.neo-tree.sources.filesystem.components"
|
||||
local function hideCursor()
|
||||
vim.cmd [[
|
||||
setlocal guicursor=n:block-Cursor
|
||||
setlocal foldcolumn=0
|
||||
hi Cursor blend=100
|
||||
]]
|
||||
end
|
||||
local function showCursor()
|
||||
vim.cmd [[
|
||||
setlocal guicursor=n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20
|
||||
hi Cursor blend=0
|
||||
]]
|
||||
end
|
||||
|
||||
local neotree_group = Util.augroup "neo-tree_hide_cursor"
|
||||
|
||||
vim.api.nvim_create_autocmd({ "WinEnter", "BufEnter", "InsertEnter" }, {
|
||||
group = neotree_group,
|
||||
callback = function()
|
||||
local action = vim.bo.filetype == "neo-tree" and hideCursor
|
||||
or showCursor
|
||||
action()
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_create_autocmd({ "WinLeave", "BufLeave", "InsertEnter" }, {
|
||||
group = neotree_group,
|
||||
callback = function()
|
||||
showCursor()
|
||||
end,
|
||||
})
|
||||
|
||||
return opts
|
||||
@@ -0,0 +1,86 @@
|
||||
local M = {}
|
||||
|
||||
function M.name(config, node, state)
|
||||
local common = require "neo-tree.sources.common.components"
|
||||
local highlights = require "neo-tree.ui.highlights"
|
||||
|
||||
local highlight = config.highlight or highlights.FILE_NAME
|
||||
local text = node.name
|
||||
if node.type == "directory" then
|
||||
highlight = highlights.DIRECTORY_NAME
|
||||
if config.trailing_slash and text ~= "/" then
|
||||
text = text .. "/"
|
||||
end
|
||||
end
|
||||
|
||||
if node:get_depth() == 1 and node.type ~= "message" then
|
||||
highlight = highlights.ROOT_NAME
|
||||
text = vim.fn.fnamemodify(text, ":p:h:t")
|
||||
text = string.upper(text)
|
||||
else
|
||||
local filtered_by = common.filtered_by(config, node, state)
|
||||
highlight = filtered_by.highlight or highlight
|
||||
if config.use_git_status_colors then
|
||||
local git_status = state.components.git_status({}, node, state)
|
||||
if git_status and git_status.highlight then
|
||||
highlight = git_status.highlight
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if type(config.right_padding) == "number" then
|
||||
if config.right_padding > 0 then
|
||||
text = text .. string.rep(" ", config.right_padding)
|
||||
end
|
||||
else
|
||||
text = text .. " "
|
||||
end
|
||||
|
||||
return {
|
||||
text = text,
|
||||
highlight = highlight,
|
||||
}
|
||||
end
|
||||
|
||||
function M.icon(config, node, state)
|
||||
local common = require "neo-tree.sources.common.components"
|
||||
local highlights = require "neo-tree.ui.highlights"
|
||||
|
||||
local icon = config.default or " "
|
||||
local highlight = config.highlight or highlights.FILE_ICON
|
||||
if node.type == "directory" then
|
||||
highlight = highlights.DIRECTORY_ICON
|
||||
if node.loaded and not node:has_children() then
|
||||
icon = not node.empty_expanded and config.folder_empty
|
||||
or config.folder_empty_open
|
||||
elseif node:is_expanded() then
|
||||
icon = config.folder_open or "-"
|
||||
else
|
||||
icon = config.folder_closed or "+"
|
||||
end
|
||||
elseif node.type == "file" or node.type == "terminal" then
|
||||
local success, web_devicons = pcall(require, "nvim-web-devicons")
|
||||
if success then
|
||||
local devicon, hl = web_devicons.get_icon(node.name, node.ext)
|
||||
icon = devicon or icon
|
||||
highlight = hl or highlight
|
||||
end
|
||||
end
|
||||
|
||||
local filtered_by = common.filtered_by(config, node, state)
|
||||
|
||||
-- Don't render icon in root folder
|
||||
if node:get_depth() == 1 then
|
||||
return {
|
||||
text = nil,
|
||||
highlight = highlight,
|
||||
}
|
||||
end
|
||||
|
||||
return {
|
||||
text = icon .. " ",
|
||||
highlight = filtered_by.highlight or highlight,
|
||||
}
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,42 @@
|
||||
local palettes = {}
|
||||
|
||||
require("github-theme").setup {
|
||||
options = {
|
||||
compile_path = vim.fn.stdpath "cache" .. "/github-theme",
|
||||
compile_file_suffix = "_compiled",
|
||||
hide_end_of_buffer = true,
|
||||
hide_nc_statusline = true,
|
||||
transparent = false,
|
||||
terminal_colors = true,
|
||||
dim_inactive = false,
|
||||
module_default = true,
|
||||
styles = {
|
||||
comments = "italic",
|
||||
functions = "NONE",
|
||||
keywords = "NONE",
|
||||
variables = "NONE",
|
||||
conditionals = "NONE",
|
||||
constants = "NONE",
|
||||
numbers = "NONE",
|
||||
operators = "NONE",
|
||||
strings = "NONE",
|
||||
types = "NONE",
|
||||
},
|
||||
inverse = {
|
||||
match_paren = false,
|
||||
visual = false,
|
||||
search = false,
|
||||
},
|
||||
darken = {
|
||||
floats = true,
|
||||
sidebars = {
|
||||
enable = true,
|
||||
list = {},
|
||||
},
|
||||
},
|
||||
modules = {},
|
||||
},
|
||||
palettes = {},
|
||||
specs = {},
|
||||
groups = {},
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
local icons = require("assets.icons").icons
|
||||
|
||||
require('gitsigns').setup {
|
||||
signs = {
|
||||
add = { text = icons.git.added },
|
||||
change = { text = icons.git.modified },
|
||||
delete = { text = icons.git.removed },
|
||||
topdelete = { text = icons.git.removed },
|
||||
changedelete = { text = icons.git.modified },
|
||||
untracked = { text = '┆' },
|
||||
},
|
||||
signs_staged = {
|
||||
add = { text = icons.git.added },
|
||||
change = { text = icons.git.modified },
|
||||
delete = { text = icons.git.removed },
|
||||
topdelete = { text = icons.git.removed },
|
||||
changedelete = { text = icons.git.modified },
|
||||
untracked = { text = '┆' },
|
||||
},
|
||||
signs_staged_enable = true,
|
||||
signcolumn = true, -- Toggle with `:Gitsigns toggle_signs`
|
||||
numhl = false, -- Toggle with `:Gitsigns toggle_numhl`
|
||||
linehl = false, -- Toggle with `:Gitsigns toggle_linehl`
|
||||
word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff`
|
||||
watch_gitdir = {
|
||||
follow_files = true
|
||||
},
|
||||
auto_attach = true,
|
||||
attach_to_untracked = false,
|
||||
current_line_blame = false, -- Toggle with `:Gitsigns toggle_current_line_blame`
|
||||
current_line_blame_opts = {
|
||||
virt_text = true,
|
||||
virt_text_pos = 'eol', -- 'eol' | 'overlay' | 'right_align'
|
||||
delay = 1000,
|
||||
ignore_whitespace = false,
|
||||
virt_text_priority = 100,
|
||||
use_focus = true,
|
||||
},
|
||||
current_line_blame_formatter = '<author>, <author_time:%R> - <summary>',
|
||||
sign_priority = 6,
|
||||
update_debounce = 100,
|
||||
status_formatter = nil, -- Use default
|
||||
max_file_length = 40000, -- Disable if file is longer than this (in lines)
|
||||
preview_config = {
|
||||
-- Options passed to nvim_open_win
|
||||
style = 'minimal',
|
||||
relative = 'cursor',
|
||||
row = 0,
|
||||
col = 1
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
require("kanagawa").setup({
|
||||
compile = true,
|
||||
undercurl = true,
|
||||
commentStyle = { italic = true },
|
||||
functionStyle = {},
|
||||
keywordStyle = { italic = true},
|
||||
statementStyle = { bold = true },
|
||||
typeStyle = {},
|
||||
transparent = false,
|
||||
dimInactive = false,
|
||||
terminalColors = true,
|
||||
colors = {
|
||||
palette = {},
|
||||
theme = { wave = {}, lotus = {}, dragon = {}, all = {} },
|
||||
},
|
||||
overrides = function(colors)
|
||||
return {}
|
||||
end,
|
||||
theme = "dragon",
|
||||
background = {
|
||||
dark = "dragon",
|
||||
light = "lotus"
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,41 @@
|
||||
require("lint").linters_by_ft = {
|
||||
javascript = { "eslint" },
|
||||
javascriptreact = { "eslint" },
|
||||
typescript = { "eslint" },
|
||||
typescriptreact = { "eslint" },
|
||||
lua = { "luacheck" },
|
||||
python = { "pylint" },
|
||||
go = { "golangci_lint" },
|
||||
rust = { "clippy" },
|
||||
zsh = { "zsh" },
|
||||
sh = { "zsh" },
|
||||
bash = { "zsh" },
|
||||
cpp = { "cpplint" },
|
||||
markdown = { "markdownlint" },
|
||||
json = { "jsonlint" },
|
||||
yaml = { "yamllint" },
|
||||
qml = { "qmllint" },
|
||||
}
|
||||
|
||||
local default_severity = {
|
||||
['error'] = vim.diagnostic.severity.ERROR,
|
||||
['warning'] = vim.diagnostic.severity.WARN,
|
||||
['information'] = vim.diagnostic.severity.INFO,
|
||||
['hint'] = vim.diagnostic.severity.HINT,
|
||||
}
|
||||
require("lint").linters.qmllint = {
|
||||
name = "qmllint",
|
||||
cmd = "qmllint",
|
||||
stdin = true,
|
||||
append_fname = true,
|
||||
args = {},
|
||||
stream = nil,
|
||||
ignore_exitcode = true,
|
||||
env = nil,
|
||||
parser = require("lint.parser").from_pattern(
|
||||
"([^:]+):(%d+) : (.+)",
|
||||
{ "filename", "lnum", "message" },
|
||||
default_severity,
|
||||
{[ "source" ] = "qmllint" }
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
vim.cmd.colorscheme "tokyodark"
|
||||
vim.o.background = "dark"
|
||||
+118
-59
@@ -1,5 +1,22 @@
|
||||
local cmp = require("cmp")
|
||||
local cmp_lsp = require("cmp_nvim_lsp")
|
||||
local cmp = require "cmp"
|
||||
local cmp_lsp = require "cmp_nvim_lsp"
|
||||
local cmp_kinds = require("assets.icons").icons.kinds
|
||||
|
||||
local function flatten_to_array(t)
|
||||
local res = {}
|
||||
local function _flatten(tbl)
|
||||
for _, v in ipairs(tbl) do
|
||||
if type(v) == "table" then
|
||||
_flatten(v)
|
||||
else
|
||||
table.insert(res, v)
|
||||
end
|
||||
end
|
||||
end
|
||||
_flatten(t)
|
||||
return res
|
||||
end
|
||||
|
||||
local capabilities = vim.tbl_deep_extend(
|
||||
"force",
|
||||
{},
|
||||
@@ -7,37 +24,9 @@ local capabilities = vim.tbl_deep_extend(
|
||||
cmp_lsp.default_capabilities()
|
||||
)
|
||||
|
||||
local cmp_kinds = {
|
||||
Text = ' ',
|
||||
Method = ' ',
|
||||
Function = ' ',
|
||||
Constructor = ' ',
|
||||
Field = ' ',
|
||||
Variable = ' ',
|
||||
Class = ' ',
|
||||
Interface = ' ',
|
||||
Module = ' ',
|
||||
Property = ' ',
|
||||
Unit = ' ',
|
||||
Value = ' ',
|
||||
Enum = ' ',
|
||||
Keyword = ' ',
|
||||
Snippet = ' ',
|
||||
Color = ' ',
|
||||
File = ' ',
|
||||
Reference = ' ',
|
||||
Folder = ' ',
|
||||
EnumMember = ' ',
|
||||
Constant = ' ',
|
||||
Struct = ' ',
|
||||
Event = ' ',
|
||||
Operator = ' ',
|
||||
TypeParameter = ' ',
|
||||
}
|
||||
|
||||
require("fidget").setup({})
|
||||
require("fidget").setup {}
|
||||
require("mason").setup()
|
||||
require("mason-lspconfig").setup({
|
||||
require("mason-lspconfig").setup {
|
||||
automatic_enable = true,
|
||||
ensure_installed = {
|
||||
"lua_ls",
|
||||
@@ -52,24 +41,28 @@ require("mason-lspconfig").setup({
|
||||
end,
|
||||
|
||||
["tailwindcss"] = function()
|
||||
local lspconfig = require("lspconfig")
|
||||
local lspconfig = require "lspconfig"
|
||||
lspconfig.tailwindcss.setup {
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end,
|
||||
|
||||
["css-lsp"] = function()
|
||||
local lspconfig = require("lspconfig")
|
||||
local lspconfig = require "lspconfig"
|
||||
lspconfig.cssls.setup {
|
||||
capabilities = capabilities,
|
||||
}
|
||||
end,
|
||||
|
||||
zls = function()
|
||||
local lspconfig = require("lspconfig")
|
||||
lspconfig.zls.setup({
|
||||
local lspconfig = require "lspconfig"
|
||||
lspconfig.zls.setup {
|
||||
capabilities = capabilities,
|
||||
root_dir = lspconfig.util.root_pattern(".git", "build.zig", "zls.json"),
|
||||
root_dir = lspconfig.util.root_pattern(
|
||||
".git",
|
||||
"build.zig",
|
||||
"zls.json"
|
||||
),
|
||||
settings = {
|
||||
zls = {
|
||||
enable_inlay_hints = true,
|
||||
@@ -77,34 +70,40 @@ require("mason-lspconfig").setup({
|
||||
warn_style = true,
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
vim.g.zig_fmt_parse_errors = 0
|
||||
vim.g.zig_fmt_autosave = 0
|
||||
|
||||
end,
|
||||
["lua_ls"] = function()
|
||||
local lspconfig = require("lspconfig")
|
||||
local lspconfig = require "lspconfig"
|
||||
lspconfig.lua_ls.setup {
|
||||
capabilities = capabilities,
|
||||
settings = {
|
||||
Lua = {
|
||||
runtime = { version = "Lua 5.1" },
|
||||
diagnostics = {
|
||||
globals = { "bit", "vim", "it", "describe", "before_each", "after_each" },
|
||||
}
|
||||
}
|
||||
}
|
||||
globals = {
|
||||
"bit",
|
||||
"vim",
|
||||
"it",
|
||||
"describe",
|
||||
"before_each",
|
||||
"after_each",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
end,
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
cmp.setup {
|
||||
preselect = 'None',
|
||||
preselect = "None",
|
||||
formatting = {
|
||||
fields = { 'kind', 'abbr' },
|
||||
fields = { "kind", "abbr" },
|
||||
format = function(entry, vim_item)
|
||||
vim_item.kind = cmp_kinds[vim_item.kind] or ''
|
||||
vim_item.kind = cmp_kinds[vim_item.kind] or ""
|
||||
if entry.completion_item.detail then
|
||||
vim_item.menu = entry.completion_item.detail
|
||||
end
|
||||
@@ -118,6 +117,15 @@ cmp.setup {
|
||||
end,
|
||||
},
|
||||
|
||||
window = {
|
||||
completion = cmp.config.window.bordered(),
|
||||
documentation = cmp.config.window.bordered(),
|
||||
},
|
||||
|
||||
view = {
|
||||
entries = "custom",
|
||||
},
|
||||
|
||||
mapping = {
|
||||
["<C-p>"] = cmp.mapping.select_prev_item(),
|
||||
["<C-n>"] = cmp.mapping.select_next_item(),
|
||||
@@ -149,17 +157,16 @@ cmp.setup {
|
||||
end, { "i", "s" }),
|
||||
},
|
||||
|
||||
sources = cmp.config.sources({
|
||||
sources = cmp.config.sources {
|
||||
{ name = "path" },
|
||||
{ name = "nvim_lsp" },
|
||||
{ name = "luasnip" },
|
||||
{ name = "buffer" },
|
||||
{ name = "nvim_lua" },
|
||||
}),
|
||||
},
|
||||
}
|
||||
|
||||
vim.diagnostic.config({
|
||||
-- update_in_insert = true,
|
||||
vim.diagnostic.config {
|
||||
virtual_text = false,
|
||||
virtual_lines = false,
|
||||
signs = true,
|
||||
@@ -172,20 +179,32 @@ vim.diagnostic.config({
|
||||
header = "",
|
||||
prefix = "",
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
local lspconfig = vim.lsp.config
|
||||
|
||||
lspconfig("texlab", {
|
||||
cmd = { "texlab" },
|
||||
filetypes = { "tex", "bib", "plaintex" },
|
||||
root_markers = { ".git", ".latexmkrc", "latexmkrc", ".texlabroot", "texlabroot", "Tectonic.toml" },
|
||||
root_markers = {
|
||||
".git",
|
||||
".latexmkrc",
|
||||
"latexmkrc",
|
||||
".texlabroot",
|
||||
"texlabroot",
|
||||
"Tectonic.toml",
|
||||
},
|
||||
settings = {
|
||||
texlab = {
|
||||
rootDirectory = nil,
|
||||
build = {
|
||||
executable = "latexmk",
|
||||
args = { "-pdf", "-interaction=nonstopmode", "-synctex=1", "%f" },
|
||||
args = {
|
||||
"-pdf",
|
||||
"-interaction=nonstopmode",
|
||||
"-synctex=1",
|
||||
"%f",
|
||||
},
|
||||
onSave = true,
|
||||
forwardSearchAfter = true,
|
||||
},
|
||||
@@ -193,7 +212,8 @@ lspconfig("texlab", {
|
||||
executable = "zathura",
|
||||
args = {
|
||||
"--synctex-editor-command",
|
||||
[[ nvim-texlabconfig -file '%%%{input}' -line %%%{line} -server ]] .. vim.v.servername,
|
||||
[[ nvim-texlabconfig -file '%%%{input}' -line %%%{line} -server ]]
|
||||
.. vim.v.servername,
|
||||
"--synctex-forward",
|
||||
"%l:1:%f",
|
||||
"%p",
|
||||
@@ -206,7 +226,7 @@ lspconfig("texlab", {
|
||||
diagnosticsDelay = 300,
|
||||
latexFormatter = "latexindent",
|
||||
latexindent = {
|
||||
['local'] = nil,
|
||||
["local"] = nil,
|
||||
modifyLineBreaks = false,
|
||||
},
|
||||
bibtexFormatter = "texlab",
|
||||
@@ -217,6 +237,33 @@ lspconfig("texlab", {
|
||||
|
||||
lspconfig("qmlls", {
|
||||
cmd = { "qmlls6" },
|
||||
filetypes = { "qml" },
|
||||
single_file_support = true,
|
||||
root_dir = function(bufnr, on_dir)
|
||||
local root = vim.fs.root(bufnr, ".git")
|
||||
on_dir(root)
|
||||
end,
|
||||
})
|
||||
|
||||
lspconfig("jsonls", {
|
||||
settings = {
|
||||
json = {
|
||||
schemas = require("schemastore").json.schemas(),
|
||||
validate = { enable = true },
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
lspconfig("yamlls", {
|
||||
settings = {
|
||||
yaml = {
|
||||
schemaStore = {
|
||||
enable = false,
|
||||
url = "",
|
||||
},
|
||||
schemas = require("schemastore").yaml.schemas(),
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
local lspenable = vim.lsp.enable
|
||||
@@ -229,8 +276,20 @@ local servers = {
|
||||
"sourcekit",
|
||||
"qmlls",
|
||||
"tailwindcss",
|
||||
"systemd-lsp",
|
||||
require("mason-lspconfig").get_installed_servers(),
|
||||
}
|
||||
|
||||
for _, server in ipairs(servers) do
|
||||
local flat_servers = flatten_to_array(servers)
|
||||
|
||||
for _, server in ipairs(flat_servers) do
|
||||
lspconfig(server, {
|
||||
on_attach = function(client, bufnr)
|
||||
if client.name == "typos_lsp" then
|
||||
return
|
||||
end
|
||||
end,
|
||||
capabilities = capabilities,
|
||||
})
|
||||
lspenable(server)
|
||||
end
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
require("lspsaga").setup({
|
||||
|
||||
symbol_in_winbar = {
|
||||
enable = false,
|
||||
},
|
||||
|
||||
ui = {
|
||||
code_action = " ",
|
||||
}
|
||||
})
|
||||
+45
-22
@@ -1,5 +1,7 @@
|
||||
local fn = vim.fn
|
||||
|
||||
local icons = require("assets.icons").icons
|
||||
|
||||
local get_active_lsp = function()
|
||||
local msg = ""
|
||||
local buf_ft = vim.api.nvim_get_option_value("filetype", {})
|
||||
@@ -20,7 +22,7 @@ end
|
||||
|
||||
local function spell()
|
||||
if vim.o.spell then
|
||||
return string.format("[SPELL]")
|
||||
return string.format "[SPELL]"
|
||||
end
|
||||
|
||||
return ""
|
||||
@@ -29,7 +31,8 @@ end
|
||||
--- show indicator for Chinese IME
|
||||
local function ime_state()
|
||||
if vim.g.is_mac then
|
||||
local layout = fn.libcall(vim.g.XkbSwitchLib, "Xkb_Switch_getXkbLayout", "")
|
||||
local layout =
|
||||
fn.libcall(vim.g.XkbSwitchLib, "Xkb_Switch_getXkbLayout", "")
|
||||
local res = fn.match(layout, [[\v(Squirrel\.Rime|SCIM.ITABC)]])
|
||||
if res ~= -1 then
|
||||
return "[CN]"
|
||||
@@ -40,18 +43,14 @@ local function ime_state()
|
||||
end
|
||||
|
||||
local diff = function()
|
||||
local git_status = vim.b.gitsigns_status_dict
|
||||
if git_status == nil then
|
||||
return
|
||||
local gitsigns = vim.b.gitsigns_status_dict
|
||||
if gitsigns then
|
||||
return {
|
||||
added = gitsigns.added,
|
||||
modified = gitsigns.changed,
|
||||
removed = gitsigns.removed,
|
||||
}
|
||||
end
|
||||
|
||||
local modify_num = git_status.changed
|
||||
local remove_num = git_status.removed
|
||||
local add_num = git_status.added
|
||||
|
||||
local info = { added = add_num, modified = modify_num, removed = remove_num }
|
||||
-- vim.print(info)
|
||||
return info
|
||||
end
|
||||
|
||||
local virtual_env = function()
|
||||
@@ -60,8 +59,8 @@ local virtual_env = function()
|
||||
return ""
|
||||
end
|
||||
|
||||
local conda_env = os.getenv("CONDA_DEFAULT_ENV")
|
||||
local venv_path = os.getenv("VIRTUAL_ENV")
|
||||
local conda_env = os.getenv "CONDA_DEFAULT_ENV"
|
||||
local venv_path = os.getenv "VIRTUAL_ENV"
|
||||
|
||||
if venv_path == nil then
|
||||
if conda_env == nil then
|
||||
@@ -75,14 +74,22 @@ local virtual_env = function()
|
||||
end
|
||||
end
|
||||
|
||||
local lint_progress = function()
|
||||
local linters = require("lint").get_running()
|
||||
if #linters == 0 then
|
||||
return ""
|
||||
end
|
||||
return table.concat(linters, ", ")
|
||||
end
|
||||
|
||||
require("lualine").setup {
|
||||
laststatus = 0,
|
||||
options = {
|
||||
icons_enabled = true,
|
||||
theme = "auto",
|
||||
theme = "zshell",
|
||||
globalstatus = true,
|
||||
component_separators = '',
|
||||
section_separators = { left = '', right = '' },
|
||||
component_separators = "",
|
||||
section_separators = { left = "", right = "" },
|
||||
disabled_filetypes = {},
|
||||
always_divide_middle = true,
|
||||
},
|
||||
@@ -111,11 +118,16 @@ require("lualine").setup {
|
||||
{
|
||||
"filename",
|
||||
symbols = {
|
||||
readonly = "[]",
|
||||
readonly = "[ ]",
|
||||
},
|
||||
},
|
||||
{
|
||||
"diff",
|
||||
symbols = {
|
||||
added = icons.git.added,
|
||||
modified = icons.git.modified,
|
||||
removed = icons.git.removed,
|
||||
},
|
||||
source = diff,
|
||||
},
|
||||
{
|
||||
@@ -132,14 +144,23 @@ require("lualine").setup {
|
||||
ime_state,
|
||||
color = { fg = "black", bg = "#f46868" },
|
||||
},
|
||||
{
|
||||
lint_progress,
|
||||
icon = " ",
|
||||
},
|
||||
{
|
||||
get_active_lsp,
|
||||
icon = " LSP:",
|
||||
icon = " ",
|
||||
},
|
||||
{
|
||||
"diagnostics",
|
||||
sources = { "nvim_diagnostic" },
|
||||
symbols = { error = " ", warn = " ", info = " ", hint = " " },
|
||||
symbols = {
|
||||
error = icons.diagnostics.Error,
|
||||
warn = icons.diagnostics.Warn,
|
||||
info = icons.diagnostics.Info,
|
||||
hint = icons.diagnostics.Hint,
|
||||
},
|
||||
},
|
||||
},
|
||||
lualine_y = {
|
||||
@@ -155,7 +176,9 @@ require("lualine").setup {
|
||||
"filetype",
|
||||
},
|
||||
lualine_z = {
|
||||
"progress",
|
||||
{
|
||||
"location",
|
||||
},
|
||||
},
|
||||
},
|
||||
inactive_sections = {
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
require("monokai-pro").setup({
|
||||
transparent_background = false,
|
||||
terminal_colors = true,
|
||||
devicons = true,
|
||||
styles = {
|
||||
comment = { italic = true },
|
||||
keyword = { italic = true },
|
||||
type = { italic = true },
|
||||
storageclass = { italic = true },
|
||||
structure = { italic = true },
|
||||
parameter = { italic = true },
|
||||
annotation = { italic = true },
|
||||
tag_attribute = { italic = true },
|
||||
},
|
||||
filter = "pro",
|
||||
|
||||
day_night = {
|
||||
enable = false,
|
||||
day_filter = "pro",
|
||||
night_filter = "spectrum",
|
||||
},
|
||||
inc_search = "background",
|
||||
background_clear = {
|
||||
},
|
||||
plugins = {
|
||||
bufferline = {
|
||||
underline_selected = false,
|
||||
underline_visible = false,
|
||||
},
|
||||
indent_blankline = {
|
||||
context_highlight = "default",
|
||||
context_start_underline = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
+56
-89
@@ -1,7 +1,7 @@
|
||||
vim.notify = require('notify')
|
||||
local dap = require('dap')
|
||||
vim.notify = require "notify"
|
||||
local dap = require "dap"
|
||||
|
||||
require('notify').setup({
|
||||
require("notify").setup {
|
||||
render = "wrapped-default",
|
||||
timeout = 6000,
|
||||
max_width = 50,
|
||||
@@ -17,9 +17,9 @@ require('notify').setup({
|
||||
},
|
||||
on_open = function(win)
|
||||
-- vim.api.nvim_win_set_option(win, 'wrap', true)
|
||||
vim.api.nvim_win_set_option(win, 'breakat', ' ')
|
||||
vim.api.nvim_win_set_option(win, "breakat", " ")
|
||||
end,
|
||||
})
|
||||
}
|
||||
|
||||
-- Utility functions shared between progress reports for LSP and DAP
|
||||
|
||||
@@ -37,8 +37,8 @@ local function get_notif_data(client_id, token)
|
||||
return client_notifs[client_id][token]
|
||||
end
|
||||
|
||||
|
||||
local spinner_frames = { "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" }
|
||||
local spinner_frames =
|
||||
{ "⣾", "⣽", "⣻", "⢿", "⡿", "⣟", "⣯", "⣷" }
|
||||
|
||||
local function update_spinner(client_id, token)
|
||||
local notif_data = get_notif_data(client_id, token)
|
||||
@@ -67,85 +67,52 @@ local function format_message(message, percentage)
|
||||
return (percentage and percentage .. "%\t" or "") .. (message or "")
|
||||
end
|
||||
|
||||
-- vim.lsp.handlers["$/progress"] = function(_, result, ctx)
|
||||
-- local client_id = ctx.client_id
|
||||
--
|
||||
-- local val = result.value
|
||||
--
|
||||
-- if not val.kind then
|
||||
-- return
|
||||
-- end
|
||||
--
|
||||
-- local notif_data = get_notif_data(client_id, result.token)
|
||||
--
|
||||
-- if val.kind == "begin" then
|
||||
-- local message = format_message(val.message, val.percentage)
|
||||
--
|
||||
-- notif_data.notification = vim.notify(message, "info", {
|
||||
-- title = format_title(val.title, vim.lsp.get_client_by_id(client_id).name),
|
||||
-- icon = spinner_frames[1],
|
||||
-- timeout = false,
|
||||
-- hide_from_history = false,
|
||||
-- })
|
||||
--
|
||||
-- notif_data.spinner = 1
|
||||
-- update_spinner(client_id, result.token)
|
||||
-- elseif val.kind == "report" and notif_data then
|
||||
-- notif_data.notification = vim.notify(format_message(val.message, val.percentage), "info", {
|
||||
-- replace = notif_data.notification,
|
||||
-- hide_from_history = false,
|
||||
-- })
|
||||
-- elseif val.kind == "end" and notif_data then
|
||||
-- notif_data.notification =
|
||||
-- vim.notify(val.message and format_message(val.message) or "Complete", "info", {
|
||||
-- icon = "",
|
||||
-- replace = notif_data.notification,
|
||||
-- timeout = 6000,
|
||||
-- })
|
||||
--
|
||||
-- notif_data.spinner = nil
|
||||
-- end
|
||||
-- end
|
||||
--
|
||||
-- local severity = {
|
||||
-- "error",
|
||||
-- "warn",
|
||||
-- "info",
|
||||
-- "info", -- map both hint and info to info?
|
||||
-- }
|
||||
-- vim.lsp.handlers["window/showMessage"] = function(err, method, params, client_id)
|
||||
-- vim.notify(method.message, severity[params.type])
|
||||
-- end
|
||||
--
|
||||
-- dap.listeners.before['event_progressStart']['progress-notifications'] = function(session, body)
|
||||
-- local notif_data = get_notif_data("dap", body.progressId)
|
||||
--
|
||||
-- local message = format_message(body.message, body.percentage)
|
||||
-- notif_data.notification = vim.notify(message, "info", {
|
||||
-- title = format_title(body.title, session.config.type),
|
||||
-- icon = spinner_frames[1],
|
||||
-- timeout = false,
|
||||
-- hide_from_history = false,
|
||||
-- })
|
||||
--
|
||||
-- notif_data.notification.spinner = 1,
|
||||
-- update_spinner("dap", body.progressId)
|
||||
-- end
|
||||
--
|
||||
-- dap.listeners.before['event_progressUpdate']['progress-notifications'] = function(session, body)
|
||||
-- local notif_data = get_notif_data("dap", body.progressId)
|
||||
-- notif_data.notification = vim.notify(format_message(body.message, body.percentage), "info", {
|
||||
-- replace = notif_data.notification,
|
||||
-- hide_from_history = false,
|
||||
-- })
|
||||
-- end
|
||||
--
|
||||
-- dap.listeners.before['event_progressEnd']['progress-notifications'] = function(session, body)
|
||||
-- local notif_data = client_notifs["dap"][body.progressId]
|
||||
-- notif_data.notification = vim.notify(body.message and format_message(body.message) or "Complete", "info", {
|
||||
-- icon = "",
|
||||
-- replace = notif_data.notification,
|
||||
-- timeout = 6000
|
||||
-- })
|
||||
-- notif_data.spinner = nil
|
||||
-- end
|
||||
-- LSP integration
|
||||
-- Make sure to also have the snippet with the common helper functions in your config!
|
||||
|
||||
vim.lsp.handlers["$/progress"] = function(_, result, ctx)
|
||||
local client_id = ctx.client_id
|
||||
|
||||
local val = result.value
|
||||
|
||||
if not val.kind then
|
||||
return
|
||||
end
|
||||
|
||||
local notif_data = get_notif_data(client_id, result.token)
|
||||
|
||||
if val.kind == "begin" then
|
||||
local message = format_message(val.message, val.percentage)
|
||||
|
||||
notif_data.notification = vim.notify(message, "info", {
|
||||
title = format_title(
|
||||
val.title,
|
||||
vim.lsp.get_client_by_id(client_id).name
|
||||
),
|
||||
icon = spinner_frames[1],
|
||||
timeout = false,
|
||||
hide_from_history = false,
|
||||
})
|
||||
|
||||
notif_data.spinner = 1
|
||||
update_spinner(client_id, result.token)
|
||||
elseif val.kind == "report" and notif_data then
|
||||
notif_data.notification =
|
||||
vim.notify(format_message(val.message, val.percentage), "info", {
|
||||
replace = notif_data.notification,
|
||||
hide_from_history = false,
|
||||
})
|
||||
elseif val.kind == "end" and notif_data then
|
||||
notif_data.notification = vim.notify(
|
||||
val.message and format_message(val.message) or "Complete",
|
||||
"info",
|
||||
{
|
||||
icon = "",
|
||||
replace = notif_data.notification,
|
||||
timeout = 3000,
|
||||
}
|
||||
)
|
||||
|
||||
notif_data.spinner = nil
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
-- local null_ls = require("null-ls")
|
||||
--
|
||||
-- local group = vim.api.nvim_create_augroup("lsp_format_on_save", { clear = false })
|
||||
-- local event = "BufWritePre" -- or "BufWritePost"
|
||||
-- local async = event == "BufWritePost"
|
||||
--
|
||||
-- null_ls.setup({
|
||||
-- on_attach = function(client, bufnr)
|
||||
-- if client.supports_method("textDocument/formatting") then
|
||||
-- vim.keymap.set("n", "<Leader>f", function()
|
||||
-- vim.lsp.buf.format({ bufnr = vim.api.nvim_get_current_buf() })
|
||||
-- end, { buffer = bufnr, desc = "[lsp] format" })
|
||||
--
|
||||
-- -- format on save
|
||||
-- vim.api.nvim_clear_autocmds({ buffer = bufnr, group = group })
|
||||
-- vim.api.nvim_create_autocmd(event, {
|
||||
-- buffer = bufnr,
|
||||
-- group = group,
|
||||
-- callback = function()
|
||||
-- vim.lsp.buf.format({ bufnr = bufnr, async = async })
|
||||
-- end,
|
||||
-- desc = "[lsp] format on save",
|
||||
-- })
|
||||
-- end
|
||||
--
|
||||
-- if client.supports_method("textDocument/rangeFormatting") then
|
||||
-- vim.keymap.set("x", "<Leader>f", function()
|
||||
-- vim.lsp.buf.format({ bufnr = vim.api.nvim_get_current_buf() })
|
||||
-- end, { buffer = bufnr, desc = "[lsp] format" })
|
||||
-- end
|
||||
-- end,
|
||||
-- })
|
||||
@@ -0,0 +1,19 @@
|
||||
local prettier = require("prettier")
|
||||
|
||||
prettier.setup({
|
||||
bin = 'prettier',
|
||||
filetypes = {
|
||||
"css",
|
||||
"graphql",
|
||||
"html",
|
||||
"javascript",
|
||||
"javascriptreact",
|
||||
"json",
|
||||
"less",
|
||||
"markdown",
|
||||
"scss",
|
||||
"typescript",
|
||||
"typescriptreact",
|
||||
"yaml",
|
||||
},
|
||||
})
|
||||
@@ -0,0 +1,55 @@
|
||||
local opts = {}
|
||||
|
||||
opts = {
|
||||
file_types = { "markdown" },
|
||||
completions = {
|
||||
lsp = {
|
||||
enabled = true,
|
||||
},
|
||||
},
|
||||
render_modes = true,
|
||||
|
||||
anti_conceal = {
|
||||
enabled = true,
|
||||
above = 1,
|
||||
below = 1,
|
||||
},
|
||||
|
||||
code = {
|
||||
enabled = true,
|
||||
render_modes = false,
|
||||
sign = true,
|
||||
conceal_delimiters = true,
|
||||
language = true,
|
||||
position = "left",
|
||||
language_icon = true,
|
||||
language_name = true,
|
||||
language_info = true,
|
||||
language_pad = 0,
|
||||
width = "full",
|
||||
left_margin = 0,
|
||||
left_pad = 2,
|
||||
right_pad = 0,
|
||||
min_width = 40,
|
||||
border = "thick",
|
||||
language_border = "█",
|
||||
language_left = "",
|
||||
language_right = "",
|
||||
above = "▄",
|
||||
below = "▀",
|
||||
inline = true,
|
||||
inline_left = "",
|
||||
inline_right = "",
|
||||
inline_pad = 0,
|
||||
priority = 140,
|
||||
highlight = "RenderMarkdownCode",
|
||||
highlight_info = "RenderMarkdownCodeInfo",
|
||||
highlight_language = nil,
|
||||
highlight_border = "RenderMarkdownCodeBorder",
|
||||
highlight_fallback = "RenderMarkdownCodeFallback",
|
||||
highlight_inline = "RenderMarkdownCodeInline",
|
||||
style = "full",
|
||||
},
|
||||
}
|
||||
|
||||
return opts
|
||||
@@ -0,0 +1,6 @@
|
||||
-- local colors = require("monokai-pro.octagon.colors").setup()
|
||||
|
||||
require("scrollbar").setup {
|
||||
handle = {},
|
||||
marks = {},
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
require("smart-splits").setup {
|
||||
ignored_buftypes = {
|
||||
"nofile",
|
||||
"quickfix",
|
||||
"prompt",
|
||||
},
|
||||
ignored_filetypes = { "NvimTree" },
|
||||
default_amount = 3,
|
||||
at_edge = "wrap",
|
||||
float_win_behavior = "previous",
|
||||
move_cursor_same_row = false,
|
||||
cursor_follows_swapped_bufs = false,
|
||||
ignored_events = {
|
||||
"BufEnter",
|
||||
"WinEnter",
|
||||
},
|
||||
multiplexer_integration = nil,
|
||||
disable_multiplexer_nav_when_zoomed = true,
|
||||
kitty_password = nil,
|
||||
zellij_move_focus_or_tab = false,
|
||||
log_level = "error",
|
||||
}
|
||||
+57
-6
@@ -57,10 +57,36 @@ return {
|
||||
max_height = 80,
|
||||
},
|
||||
},
|
||||
notifier = { enabled = true },
|
||||
notifier = {
|
||||
timeout = 3000,
|
||||
width = { min = 40, max = 0.4 },
|
||||
height = { min = 1, max = 0.6 },
|
||||
margin = { top = 0, right = 1, bottom = 0 },
|
||||
padding = true,
|
||||
gap = 0,
|
||||
sort = { "level", "added" },
|
||||
level = vim.log.levels.TRACE,
|
||||
icons = {
|
||||
error = " ",
|
||||
warn = " ",
|
||||
info = " ",
|
||||
debug = " ",
|
||||
trace = " ",
|
||||
},
|
||||
keep = function(notif)
|
||||
return vim.fn.getcmdpos() > 0
|
||||
end,
|
||||
---@type snacks.notifier.style
|
||||
style = "fancy",
|
||||
top_down = true,
|
||||
date_format = "%R",
|
||||
---@type string|boolean
|
||||
more_format = " ↓ %d lines ",
|
||||
refresh = 50,
|
||||
},
|
||||
quickfile = { enabled = true },
|
||||
scope = { enabled = true },
|
||||
scroll = { enabled = true },
|
||||
scroll = { enabled = false },
|
||||
statuscolumn = { enabled = true },
|
||||
words = { enabled = true },
|
||||
terminal = {
|
||||
@@ -75,10 +101,35 @@ return {
|
||||
function()
|
||||
Snacks.terminal.toggle()
|
||||
end,
|
||||
mode = "t"
|
||||
}
|
||||
}
|
||||
}
|
||||
mode = "t",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
notification = {
|
||||
border = true,
|
||||
zindex = 100,
|
||||
ft = "markdown",
|
||||
wo = {
|
||||
winblend = 0,
|
||||
wrap = true,
|
||||
conceallevel = 2,
|
||||
colorcolumn = "",
|
||||
},
|
||||
bo = { filetype = "snacks_notif" },
|
||||
},
|
||||
|
||||
notification_history = {
|
||||
border = true,
|
||||
zindex = 100,
|
||||
minimal = false,
|
||||
title = " Notifications ",
|
||||
title_pos = "center",
|
||||
ft = "markdown",
|
||||
bo = { filetype = "snacks_notif_history", modifiable = false },
|
||||
wo = { winhighlight = "Normal:SnacksNotifierHistory" },
|
||||
keys = { q = "close" },
|
||||
},
|
||||
},
|
||||
gitbrowse = {
|
||||
enabled = true,
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ require("tmux").setup({
|
||||
copy_sync = {
|
||||
enable = true,
|
||||
redirect_to_clipboard = true,
|
||||
sync_clipboard = true,
|
||||
sync_clipboard = false,
|
||||
sync_registers = true,
|
||||
},
|
||||
navigation = {
|
||||
|
||||
+13
-13
@@ -1,13 +1,13 @@
|
||||
require'nvim-treesitter.configs'.setup {
|
||||
ensure_installed = "all",
|
||||
ignore_install = { "ipkg" },
|
||||
sync_install = true,
|
||||
auto_install = true,
|
||||
highlight = {
|
||||
enable = true,
|
||||
additional_vim_regex_highlighting = false,
|
||||
},
|
||||
indent = {
|
||||
enable = true,
|
||||
},
|
||||
}
|
||||
local treesitter = require "nvim-treesitter"
|
||||
|
||||
treesitter.install { "all" }
|
||||
|
||||
local parsers = treesitter.get_installed()
|
||||
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = parsers,
|
||||
callback = function()
|
||||
vim.treesitter.start()
|
||||
vim.bo.indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
|
||||
end,
|
||||
})
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
require("zterm-navigator").setup {
|
||||
left = "<A-Left>",
|
||||
right = "<A-Right>",
|
||||
up = "<A-Up>",
|
||||
down = "<A-Down>",
|
||||
|
||||
statusline = {
|
||||
enabled = false,
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
local M = {}
|
||||
|
||||
local function get_qmlls_client(bufnr)
|
||||
for _, c in ipairs(vim.lsp.get_clients { bufnr = bufnr }) do
|
||||
if c.name == "qmlls" then
|
||||
return c
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local function first_client_encoding(bufnr)
|
||||
local c = vim.lsp.get_clients({ bufnr = bufnr })[1]
|
||||
return (c and c.offset_encoding) or "utf-16"
|
||||
end
|
||||
|
||||
local function normalize_locations(result)
|
||||
if not result then
|
||||
return {}
|
||||
end
|
||||
-- Single Location / LocationLink
|
||||
if result.uri or result.targetUri then
|
||||
return { result }
|
||||
end
|
||||
-- Array of Location / LocationLink
|
||||
if vim.islist(result) then
|
||||
return result
|
||||
end
|
||||
return {}
|
||||
end
|
||||
|
||||
local function request_locations(bufnr, method, timeout_ms)
|
||||
local enc = first_client_encoding(bufnr)
|
||||
local params = vim.lsp.util.make_position_params(0, enc)
|
||||
local responses =
|
||||
vim.lsp.buf_request_sync(bufnr, method, params, timeout_ms or 1000)
|
||||
|
||||
if not responses then
|
||||
return {}
|
||||
end
|
||||
|
||||
local all = {}
|
||||
for client_id, resp in pairs(responses) do
|
||||
local result = resp and resp.result
|
||||
local locs = normalize_locations(result)
|
||||
for _, loc in ipairs(locs) do
|
||||
table.insert(all, { client_id = client_id, loc = loc })
|
||||
end
|
||||
end
|
||||
return all
|
||||
end
|
||||
|
||||
local function jump_to_first_location(bufnr, matches)
|
||||
if #matches == 0 then
|
||||
return false
|
||||
end
|
||||
|
||||
local m = matches[1]
|
||||
local client = vim.lsp.get_client_by_id(m.client_id)
|
||||
local enc = (client and client.offset_encoding)
|
||||
or first_client_encoding(bufnr)
|
||||
|
||||
local loc = m.loc
|
||||
-- Convert LocationLink -> Location-ish target for jump_to_location
|
||||
if loc.targetUri then
|
||||
loc = {
|
||||
uri = loc.targetUri,
|
||||
range = loc.targetSelectionRange or loc.targetRange,
|
||||
}
|
||||
end
|
||||
|
||||
vim.lsp.util.jump_to_location(loc, enc)
|
||||
return true
|
||||
end
|
||||
|
||||
local function get_cursor_context(bufnr)
|
||||
local pos = vim.api.nvim_win_get_cursor(0)
|
||||
local row = pos[1] - 1
|
||||
local col = pos[2]
|
||||
local line = vim.api.nvim_buf_get_lines(bufnr, row, row + 1, false)[1] or ""
|
||||
local cword = vim.fn.expand "<cword>"
|
||||
return row, col, line, cword
|
||||
end
|
||||
|
||||
-- Tries to detect something like Config.save() and returns ("Config", "save")
|
||||
local function detect_singleton_member_call(bufnr)
|
||||
local _, col, line, cword = get_cursor_context(bufnr)
|
||||
local before = line:sub(1, col + 1)
|
||||
|
||||
-- If cursor is on "save" in Config.save(), this usually works.
|
||||
local singleton = before:match "([%a_][%w_]*)%s*%.[%w_]*$"
|
||||
if not singleton then
|
||||
-- If cursor is on "Config", this can also catch it.
|
||||
singleton = before:match "([%a_][%w_]*)%s*$"
|
||||
if singleton and not line:sub(col + 1):match "^%s*%." then
|
||||
singleton = nil
|
||||
end
|
||||
end
|
||||
|
||||
if not singleton then
|
||||
return nil
|
||||
end
|
||||
|
||||
-- Basic heuristic: singleton names are often capitalized in QML
|
||||
-- (you can remove this check if your singletons are lowercase)
|
||||
if not singleton:match "^[A-Z_]" then
|
||||
return nil
|
||||
end
|
||||
|
||||
return singleton, cword
|
||||
end
|
||||
|
||||
local function find_project_root(bufnr)
|
||||
local qmlls = get_qmlls_client(bufnr)
|
||||
if qmlls and qmlls.config and qmlls.config.root_dir then
|
||||
return qmlls.config.root_dir
|
||||
end
|
||||
return vim.fs.root(bufnr, { ".qmlls.ini", ".git" }) or vim.fn.getcwd()
|
||||
end
|
||||
|
||||
local function singleton_fallback_jump(bufnr)
|
||||
local singleton, member = detect_singleton_member_call(bufnr)
|
||||
if not singleton then
|
||||
return false
|
||||
end
|
||||
|
||||
local root = find_project_root(bufnr)
|
||||
local target_name = singleton .. ".qml"
|
||||
|
||||
local matches = vim.fs.find(target_name, {
|
||||
path = root,
|
||||
type = "file",
|
||||
limit = math.huge,
|
||||
})
|
||||
|
||||
if not matches or vim.tbl_isempty(matches) then
|
||||
return false
|
||||
end
|
||||
|
||||
local pick = nil
|
||||
if #matches == 1 then
|
||||
pick = matches[1]
|
||||
else
|
||||
-- Prefer a path containing "/Config/" for Config.qml, etc.
|
||||
for _, p in ipairs(matches) do
|
||||
if
|
||||
p:match("/" .. singleton .. "/")
|
||||
or p:match("/" .. target_name .. "$")
|
||||
then
|
||||
pick = p
|
||||
break
|
||||
end
|
||||
end
|
||||
pick = pick or matches[1]
|
||||
end
|
||||
|
||||
vim.cmd.edit(vim.fn.fnameescape(pick))
|
||||
|
||||
-- Optional: try to jump near the member inside the singleton file.
|
||||
if member and member ~= singleton then
|
||||
local escaped = vim.fn.escape(member, [[\/]])
|
||||
-- Try function save(...) first, then any "save" occurrence.
|
||||
local found =
|
||||
vim.fn.search("\\<function\\s\\+" .. escaped .. "\\s*(", "W")
|
||||
if found == 0 then
|
||||
vim.fn.search("\\<" .. escaped .. "\\>", "W")
|
||||
end
|
||||
end
|
||||
|
||||
vim.notify(
|
||||
("LSP returned no locations; fell back to %s.qml"):format(singleton),
|
||||
vim.log.levels.INFO
|
||||
)
|
||||
return true
|
||||
end
|
||||
|
||||
function M.smart_qml_jump()
|
||||
local bufnr = vim.api.nvim_get_current_buf()
|
||||
|
||||
-- 1) Try normal definition
|
||||
local defs = request_locations(bufnr, "textDocument/definition", 1200)
|
||||
if jump_to_first_location(bufnr, defs) then
|
||||
return
|
||||
end
|
||||
|
||||
-- 2) Try type definition
|
||||
local tdefs = request_locations(bufnr, "textDocument/typeDefinition", 1200)
|
||||
if jump_to_first_location(bufnr, tdefs) then
|
||||
return
|
||||
end
|
||||
|
||||
-- 3) Singleton fallback: Config.save() -> Config.qml
|
||||
if singleton_fallback_jump(bufnr) then
|
||||
return
|
||||
end
|
||||
|
||||
vim.notify(
|
||||
"No locations found (definition/typeDefinition/fallback)",
|
||||
vim.log.levels.WARN
|
||||
)
|
||||
end
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,61 @@
|
||||
-- Generated by zshell. Lualine theme matching the zshell colorscheme.
|
||||
|
||||
local is_light = "dark" == "light"
|
||||
local function pick(light, dark)
|
||||
return is_light and light or dark
|
||||
end
|
||||
|
||||
local c = {
|
||||
bg = "#1A1206",
|
||||
bg_alt = "#231A0D",
|
||||
bg_mid = pick("#32291A", "#271E11"),
|
||||
fg = "#F1E0CA",
|
||||
fg_muted = "#DBC3A1",
|
||||
fg_strong = pick("#15161A", "#F4F4F8"),
|
||||
|
||||
normal = "#7D2C1E",
|
||||
insert = "#733429",
|
||||
visual = "#B5893E",
|
||||
replace = "#93000A",
|
||||
command = pick("#FFDFD5", "#B9AB66"),
|
||||
inactive = "#231A0D",
|
||||
|
||||
normal_fg = pick("#15161A", "#F4F4F8"),
|
||||
insert_fg = pick("#15161A", "#F4F4F8"),
|
||||
visual_fg = pick("#15161A", "#F4F4F8"),
|
||||
replace_fg = pick("#15161A", "#F4F4F8"),
|
||||
command_fg = pick("#15161A", "#F4F4F8"),
|
||||
}
|
||||
|
||||
return {
|
||||
normal = {
|
||||
a = { fg = c.normal_fg, bg = c.normal, gui = "bold" },
|
||||
b = { fg = c.fg_strong, bg = c.bg_mid },
|
||||
c = { fg = c.fg, bg = c.bg_alt },
|
||||
},
|
||||
insert = {
|
||||
a = { fg = c.insert_fg, bg = c.insert, gui = "bold" },
|
||||
b = { fg = c.fg_strong, bg = c.bg_mid },
|
||||
c = { fg = c.fg, bg = c.bg_alt },
|
||||
},
|
||||
visual = {
|
||||
a = { fg = c.visual_fg, bg = c.visual, gui = "bold" },
|
||||
b = { fg = c.fg_strong, bg = c.bg_mid },
|
||||
c = { fg = c.fg, bg = c.bg_alt },
|
||||
},
|
||||
replace = {
|
||||
a = { fg = c.replace_fg, bg = c.replace, gui = "bold" },
|
||||
b = { fg = c.fg_strong, bg = c.bg_mid },
|
||||
c = { fg = c.fg, bg = c.bg_alt },
|
||||
},
|
||||
command = {
|
||||
a = { fg = c.command_fg, bg = c.command, gui = "bold" },
|
||||
b = { fg = c.fg_strong, bg = c.bg_mid },
|
||||
c = { fg = c.fg, bg = c.bg_alt },
|
||||
},
|
||||
inactive = {
|
||||
a = { fg = c.fg_muted, bg = c.inactive, gui = "bold" },
|
||||
b = { fg = c.fg_muted, bg = c.inactive },
|
||||
c = { fg = c.fg_muted, bg = c.bg },
|
||||
},
|
||||
}
|
||||
+69
-27
@@ -9,34 +9,53 @@ map("n", ";", ":", { desc = "CMD enter command mode" })
|
||||
map("v", "<C-Up>", ":m '<-2<CR>gv=gv", { desc = "Move selected text up" })
|
||||
map("v", "<C-Down>", ":m '>+1<CR>gv=gv", { desc = "Move selected text down" })
|
||||
|
||||
-- Alt + Arrow Key to change buffer
|
||||
-- map("n", "<A-Left>", "<C-w>h", { desc = "Move to left split" })
|
||||
-- map("n", "<A-Down>", "<C-w>j", { desc = "Move to bottom split" })
|
||||
-- map("n", "<A-Up>", "<C-w>k", { desc = "Move to top split" })
|
||||
-- map("n", "<A-Right>", "<C-w>l", { desc = "Move to right split" })
|
||||
|
||||
map("n", "<A-Left>", "<cmd>lua require('tmux').move_left()<CR>", { desc = "Move to left split" })
|
||||
map("n", "<A-Down>", "<cmd>lua require('tmux').move_bottom()<CR>", { desc = "Move to bottom split" })
|
||||
map("n", "<A-Up>", "<cmd>lua require('tmux').move_top()<CR>", { desc = "Move to top split" })
|
||||
map("n", "<A-Right>", "<cmd>lua require('tmux').move_right()<CR>", { desc = "Move to right split" })
|
||||
|
||||
map("n", "<C-Left>", "<cmd>lua require('tmux').resize_left()<CR>", { desc = "Move to left split" })
|
||||
map("n", "<C-Down>", "<cmd>lua require('tmux').resize_bottom()<CR>", { desc = "Move to bottom split" })
|
||||
map("n", "<C-Up>", "<cmd>lua require('tmux').resize_top()<CR>", { desc = "Move to top split" })
|
||||
map("n", "<C-Right>", "<cmd>lua require('tmux').resize_right()<CR>", { desc = "Move to right split" })
|
||||
|
||||
-- Copilot Chat buffer
|
||||
map("n", "<A-c>", vim.cmd.CopilotChatToggle)
|
||||
map("i", "<A-c>", vim.cmd.CopilotChatToggle)
|
||||
map("v", "<A-c>", vim.cmd.CopilotChatToggle)
|
||||
|
||||
-- Splits
|
||||
vim.keymap.set("n", "<A-S-Left>", require("smart-splits").resize_left)
|
||||
vim.keymap.set("n", "<A-S-Down>", require("smart-splits").resize_down)
|
||||
vim.keymap.set("n", "<A-S-Up>", require("smart-splits").resize_up)
|
||||
vim.keymap.set("n", "<A-S-Right>", require("smart-splits").resize_right)
|
||||
vim.keymap.set("n", "<A-Left>", require("smart-splits").move_cursor_left)
|
||||
vim.keymap.set("n", "<A-Down>", require("smart-splits").move_cursor_down)
|
||||
vim.keymap.set("n", "<A-Up>", require("smart-splits").move_cursor_up)
|
||||
vim.keymap.set("n", "<A-Right>", require("smart-splits").move_cursor_right)
|
||||
|
||||
-- Explorer and Undotree
|
||||
map('n', '<leader>e', function() Snacks.explorer() end)
|
||||
map('n', '<leader>u', require('undotree').toggle, { noremap = true, silent = true })
|
||||
map("n", "<leader>e", function()
|
||||
Snacks.explorer()
|
||||
end)
|
||||
map(
|
||||
"n",
|
||||
"<leader>u",
|
||||
require("undotree").toggle,
|
||||
{ noremap = true, silent = true }
|
||||
)
|
||||
|
||||
-- Telescope grep
|
||||
map("n", "<leader>g", require("telescope.builtin").live_grep, {desc = "Telescope grep" })
|
||||
map("n", "<leader>f", require("telescope.builtin").find_files, {desc = "Telescope find files" })
|
||||
map(
|
||||
"n",
|
||||
"<leader>g",
|
||||
require("telescope.builtin").live_grep,
|
||||
{ desc = "Telescope grep" }
|
||||
)
|
||||
map(
|
||||
"n",
|
||||
"<leader>f",
|
||||
require("telescope.builtin").find_files,
|
||||
{ desc = "Telescope find files" }
|
||||
)
|
||||
|
||||
-- LSP
|
||||
map(
|
||||
"n",
|
||||
"gd",
|
||||
vim.lsp.buf.definition,
|
||||
{ noremap = true, silent = true, buffer = bufnr }
|
||||
)
|
||||
|
||||
map("n", "<A-->", ":bdelete<CR>")
|
||||
-- map("n", "<SA-->", ":BufferRestore<CR>")
|
||||
@@ -54,26 +73,49 @@ map("n", "<leader>zig", "<cmd>LspRestart<cr>")
|
||||
map("x", "<leader>p", [["_dP]])
|
||||
|
||||
-- next greatest remap ever : asbjornHaland
|
||||
map({"n", "v"}, "<leader>y", [["+y]])
|
||||
map({ "n", "v" }, "<leader>y", [["+y]])
|
||||
map("n", "<leader>Y", [["+Y]])
|
||||
|
||||
map({"n", "v"}, "<leader>d", "\"_d")
|
||||
map({ "n", "v" }, "<leader>d", '"_d')
|
||||
|
||||
-- This is going to get me cancelled
|
||||
map("i", "<C-c>", "<Esc>")
|
||||
|
||||
map("n", "<leader>mr", "<cmd>CellularAutomaton make_it_rain<CR>");
|
||||
map("n", "<leader>mr", "<cmd>CellularAutomaton make_it_rain<CR>")
|
||||
|
||||
map("n", "<leader><leader>", function()
|
||||
vim.cmd("so")
|
||||
vim.cmd "so"
|
||||
end)
|
||||
|
||||
map("n", "<A-v>", "<cmd>ChatGPT<CR>")
|
||||
|
||||
map("n", "<leader>fm", "<cmd>TailwindConcealToggle<CR>", { desc = "Toggle Tailwind Conceal" })
|
||||
map(
|
||||
"n",
|
||||
"<leader>fm",
|
||||
"<cmd>TailwindConcealToggle<CR>",
|
||||
{ desc = "Toggle Tailwind Conceal" }
|
||||
)
|
||||
|
||||
-- Terminal
|
||||
map("n", "<C-q>", function() Snacks.terminal.toggle() end, { desc = "Toggle Terminal" })
|
||||
map("n", "<C-q>", function()
|
||||
Snacks.terminal.toggle()
|
||||
end, { desc = "Toggle Terminal" })
|
||||
|
||||
-- Gitbrowse
|
||||
map("n", "<leader>gb", function() Snacks.gitbrowse.open() end )
|
||||
map("n", "<leader>gb", function()
|
||||
Snacks.gitbrowse.open()
|
||||
end)
|
||||
|
||||
-- Notif history
|
||||
map("n", "<leader>n", function()
|
||||
Snacks.notifier.show_history()
|
||||
end)
|
||||
|
||||
-- Actions Previewer
|
||||
map({ "n", "v" }, "<leader>ap", require("actions-preview").code_actions)
|
||||
|
||||
map("n", "K", require("pretty_hover").hover)
|
||||
|
||||
-- winbar
|
||||
local dbar_api = require "dropbar.api"
|
||||
map("n", "<leader>b", dbar_api.pick)
|
||||
|
||||
+7
-2
@@ -9,6 +9,7 @@ vim.opt.smartindent = false
|
||||
vim.o.list = true
|
||||
vim.opt.listchars = { tab = "··", trail = "·", nbsp = "_" }
|
||||
|
||||
vim.opt.laststatus = 3
|
||||
vim.opt.wrap = true
|
||||
vim.opt.linebreak = true
|
||||
vim.opt.swapfile = false
|
||||
@@ -54,5 +55,9 @@ vim.env.PATH = table.concat({ vim.fn.stdpath "data", "mason", "bin" }, sep) .. d
|
||||
|
||||
vim.api.nvim_set_hl( 0, "Cursor", { reverse = true })
|
||||
|
||||
-- vim-tpipeline
|
||||
vim.g.tpipeline_restore = 1
|
||||
vim.api.nvim_create_user_command('Redir', function(ctx)
|
||||
local lines = vim.split(vim.api.nvim_exec(ctx.args, true), '\n', { plain = true })
|
||||
vim.cmd('new')
|
||||
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
|
||||
vim.opt_local.modified = false
|
||||
end, { nargs = '+', complete = 'command' })
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
return {
|
||||
{
|
||||
"olimorris/onedarkpro.nvim",
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require "config.themelight"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"notken12/base46-colors",
|
||||
},
|
||||
{
|
||||
"loctvl842/monokai-pro.nvim",
|
||||
config = function()
|
||||
require "config.monokaipro"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"catppuccin/nvim",
|
||||
name = "catppuccin",
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require "config.catppuccin"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"rebelot/kanagawa.nvim",
|
||||
-- config = function()
|
||||
-- require("config.kanagawa")
|
||||
-- end,
|
||||
},
|
||||
{
|
||||
"sainnhe/edge",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function()
|
||||
vim.g.edge_enable_italic = 1
|
||||
vim.g.edge_style = "default"
|
||||
vim.g.edge_menu_selection_background = "purple"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"projekt0n/github-nvim-theme",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require "config.githubtheme"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"alexmozaidze/palenight.nvim",
|
||||
},
|
||||
{
|
||||
"Yazeed1s/minimal.nvim",
|
||||
init = function()
|
||||
vim.g.minimal_italic_comments = true
|
||||
vim.g.minimal_italic_keywords = true
|
||||
end,
|
||||
},
|
||||
{
|
||||
"folke/tokyonight.nvim",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
opts = {},
|
||||
},
|
||||
}
|
||||
+148
-95
@@ -4,36 +4,22 @@ return {
|
||||
version = false,
|
||||
|
||||
modules = function()
|
||||
require("config.mini-modules")
|
||||
require "config.mini-modules"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
config = function()
|
||||
require("config.treesitter")
|
||||
end,
|
||||
},
|
||||
{
|
||||
"sainnhe/edge",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
branch = "main",
|
||||
build = ":TSUpdate",
|
||||
config = function()
|
||||
vim.g.edge_enable_italic = 1
|
||||
vim.g.edge_style = "default"
|
||||
vim.g.edge_menu_selection_background = "purple"
|
||||
require "config.treesitter"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"rmagatti/auto-session",
|
||||
config = function()
|
||||
require("config.autosession")
|
||||
end,
|
||||
},
|
||||
{
|
||||
"olimorris/onedarkpro.nvim",
|
||||
priority = 1000,
|
||||
config = function()
|
||||
require("config.themelight")
|
||||
require "config.autosession"
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -42,7 +28,7 @@ return {
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("config.telescope")
|
||||
require "config.telescope"
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -58,61 +44,42 @@ return {
|
||||
"akinsho/bufferline.nvim",
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("config.barbar")
|
||||
require "config.barbar"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
event = "VeryLazy",
|
||||
config = function ()
|
||||
if vim.env.TMUX then
|
||||
vim.api.nvim_create_autocmd({ "FocusGained", "ColorScheme", "VimEnter" }, {
|
||||
callback = function()
|
||||
vim.defer_fn( function()
|
||||
vim.opt.laststatus = 0
|
||||
end, 100)
|
||||
end,
|
||||
})
|
||||
vim.o.laststatus = 0
|
||||
end
|
||||
require("config.lualine")
|
||||
config = function()
|
||||
require "config.lualine"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"mawkler/modicator.nvim",
|
||||
config = function()
|
||||
require("config.modicator")
|
||||
end
|
||||
},
|
||||
{
|
||||
"shinchu/lightline-gruvbox.vim",
|
||||
require "config.modicator"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"jiaoshijie/undotree",
|
||||
config = function()
|
||||
require("config.undotree")
|
||||
require "config.undotree"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"hiphish/rainbow-delimiters.nvim",
|
||||
enabled = true,
|
||||
enabled = false,
|
||||
},
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
event = "InsertEnter",
|
||||
config = function()
|
||||
require("config.autopairs")
|
||||
require "config.autopairs"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"tpope/vim-fugitive",
|
||||
},
|
||||
{
|
||||
"rcarriga/nvim-notify",
|
||||
config = function()
|
||||
require "config.notify"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"zbirenbaum/copilot.lua",
|
||||
lazy = true,
|
||||
@@ -136,28 +103,17 @@ return {
|
||||
{
|
||||
"mfussenegger/nvim-dap",
|
||||
config = function()
|
||||
require("config.dapconf")
|
||||
require "config.dapconf"
|
||||
end,
|
||||
},
|
||||
{
|
||||
require("config.snacks")
|
||||
require "config.snacks",
|
||||
},
|
||||
{
|
||||
"notken12/base46-colors",
|
||||
},
|
||||
-- {
|
||||
-- "mason-org/mason-lspconfig.nvim",
|
||||
-- opts = {},
|
||||
-- dependencies = {
|
||||
-- { "mason-org/mason.nvim", opts = {} },
|
||||
-- "neovim/nvim-lspconfig",
|
||||
-- },
|
||||
-- },
|
||||
{
|
||||
"folke/lazydev.nvim",
|
||||
ft = "lua",
|
||||
opts = function()
|
||||
require("config.lazydev")
|
||||
require "config.lazydev"
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -174,9 +130,10 @@ return {
|
||||
"L3MON4D3/LuaSnip",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
"j-hui/fidget.nvim",
|
||||
"b0o/schemastore.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("config.lspconfig")
|
||||
require "config.lspconfig"
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -201,15 +158,15 @@ return {
|
||||
"nvim-lua/plenary.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("config.harpoon")
|
||||
end,
|
||||
},
|
||||
{
|
||||
"catgoose/nvim-colorizer.lua",
|
||||
config = function()
|
||||
require("config.colorizer")
|
||||
require "config.harpoon"
|
||||
end,
|
||||
},
|
||||
-- {
|
||||
-- "catgoose/nvim-colorizer.lua",
|
||||
-- config = function()
|
||||
-- require("config.colorizer")
|
||||
-- end,
|
||||
-- },
|
||||
{
|
||||
"ziglang/zig.vim",
|
||||
},
|
||||
@@ -223,7 +180,7 @@ return {
|
||||
{
|
||||
"f3fora/nvim-texlabconfig",
|
||||
config = function()
|
||||
require("config.texlab")
|
||||
require "config.texlab"
|
||||
end,
|
||||
build = "go build",
|
||||
},
|
||||
@@ -242,7 +199,7 @@ return {
|
||||
{
|
||||
"ThePrimeagen/refactoring.nvim",
|
||||
config = function()
|
||||
require("config.refactoring")
|
||||
require "config.refactoring"
|
||||
end,
|
||||
},
|
||||
{
|
||||
@@ -252,32 +209,128 @@ return {
|
||||
vim.g.minimal_italic_functions = true
|
||||
end,
|
||||
},
|
||||
-- {
|
||||
-- "propet/colorscheme-persist.nvim",
|
||||
-- dependencies = {
|
||||
-- "nvim-telescope/telescope.nvim",
|
||||
-- },
|
||||
-- lazy = false,
|
||||
-- config = true,
|
||||
-- keys = {
|
||||
-- {
|
||||
-- "<leader>sp",
|
||||
-- function()
|
||||
-- require("colorscheme-persist").picker()
|
||||
-- end,
|
||||
-- mode = "n",
|
||||
-- },
|
||||
-- },
|
||||
-- opts = {
|
||||
-- picker_opts = require("telescope.themes").get_dropdown {
|
||||
-- enable_preview = true,
|
||||
-- },
|
||||
-- },
|
||||
-- },
|
||||
{
|
||||
"propet/colorscheme-persist.nvim",
|
||||
dependencies = {
|
||||
"nvim-telescope/telescope.nvim",
|
||||
},
|
||||
lazy = false,
|
||||
config = true,
|
||||
keys = {
|
||||
{
|
||||
"<leader>sp",
|
||||
function()
|
||||
require("colorscheme-persist").picker()
|
||||
end,
|
||||
mode = "n",
|
||||
},
|
||||
},
|
||||
opts = {
|
||||
picker_opts = require("telescope.themes").get_dropdown({
|
||||
enable_preview = true,
|
||||
}),
|
||||
}
|
||||
},
|
||||
{
|
||||
"aserowy/tmux.nvim",
|
||||
"aznhe21/actions-preview.nvim",
|
||||
config = function()
|
||||
require("config.tmux")
|
||||
require "config.actions-preview"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"mfussenegger/nvim-lint",
|
||||
config = function()
|
||||
require "config.lint"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"rachartier/tiny-inline-diagnostic.nvim",
|
||||
config = function()
|
||||
require "config.TID"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"MunifTanjim/nui.nvim",
|
||||
},
|
||||
-- {
|
||||
-- "artemave/workspace-diagnostics.nvim",
|
||||
-- },
|
||||
{
|
||||
require "config.dev-tools",
|
||||
},
|
||||
{
|
||||
"Fildo7525/pretty_hover",
|
||||
event = "LspAttach",
|
||||
opts = {},
|
||||
},
|
||||
{
|
||||
"knubie/vim-kitty-navigator",
|
||||
build = "cp ./*.py ~/.config/kitty/",
|
||||
},
|
||||
{
|
||||
require "config.dropbar",
|
||||
},
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
config = function()
|
||||
require "config.gitsigns"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"sbdchd/neoformat",
|
||||
init = function()
|
||||
vim.cmd(
|
||||
"source "
|
||||
.. vim.fn.stdpath "config"
|
||||
.. "/lua/plugins/neoformat.vim"
|
||||
)
|
||||
end,
|
||||
},
|
||||
{
|
||||
"petertriho/nvim-scrollbar",
|
||||
config = function()
|
||||
require "config.scrollbar"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"Zacharias-Brohn/zterm-navigator.nvim",
|
||||
enabled = false,
|
||||
config = function()
|
||||
require "config.zterm-navigator"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"MeanderingProgrammer/render-markdown.nvim",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
"nvim-mini/mini.nvim",
|
||||
},
|
||||
---@module 'render-markdown'
|
||||
---@type render.md.UserConfig
|
||||
opts = require "config.render-markdown",
|
||||
},
|
||||
{
|
||||
"mrjones2014/smart-splits.nvim",
|
||||
config = function()
|
||||
require "config.smart-splits"
|
||||
end,
|
||||
},
|
||||
{
|
||||
"kkrampis/codex.nvim",
|
||||
lazy = true,
|
||||
cmd = { "Codex", "CodexToggle" },
|
||||
keys = {
|
||||
-- {
|
||||
-- nil,
|
||||
-- function()
|
||||
-- require("codex").toggle()
|
||||
-- end,
|
||||
-- desc = "Toggle Codex",
|
||||
-- mode = { "n", "t" },
|
||||
-- },
|
||||
},
|
||||
opts = function()
|
||||
require "config.codex"
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
let g:neoformat_enabled_python = ['autopep8']
|
||||
let g:neoformat_enabled_javascript = ['prettier']
|
||||
let g:neoformat_enabled_html = ['prettier']
|
||||
let g:neoformat_enabled_css = ['prettier']
|
||||
let g:neoformat_enabled_json = ['prettier']
|
||||
let g:neoformat_enabled_yaml = ['prettier']
|
||||
let g:neoformat_enabled_lua = ['stylua']
|
||||
let g:neoformat_enabled_rust = ['rustfmt']
|
||||
let g:neoformat_enabled_cpp = ['uncrustify']
|
||||
let g:neoformat_enabled_markdown = ['prettier']
|
||||
let g:neoformat_enabled_qml = ['qmlformat']
|
||||
@@ -0,0 +1,221 @@
|
||||
return {
|
||||
"y3owk1n/undo-glow.nvim",
|
||||
version = "*",
|
||||
opts = {
|
||||
animation = {
|
||||
enabled = true,
|
||||
duration = 300,
|
||||
animation_type = "fade",
|
||||
window_scoped = true,
|
||||
},
|
||||
highlights = {
|
||||
undo = {
|
||||
hl_color = { bg = "#693232" }, -- Dark muted red
|
||||
},
|
||||
redo = {
|
||||
hl_color = { bg = "#2F4640" }, -- Dark muted green
|
||||
},
|
||||
yank = {
|
||||
hl_color = { bg = "#7A683A" }, -- Dark muted yellow
|
||||
},
|
||||
paste = {
|
||||
hl_color = { bg = "#325B5B" }, -- Dark muted cyan
|
||||
},
|
||||
search = {
|
||||
hl_color = { bg = "#5C475C" }, -- Dark muted purple
|
||||
},
|
||||
comment = {
|
||||
hl_color = { bg = "#7A5A3D" }, -- Dark muted orange
|
||||
},
|
||||
cursor = {
|
||||
hl_color = { bg = "#793D54" }, -- Dark muted pink
|
||||
},
|
||||
},
|
||||
priority = 2048 * 3,
|
||||
},
|
||||
keys = {
|
||||
{
|
||||
"u",
|
||||
function()
|
||||
require("undo-glow").undo()
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Undo with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"U",
|
||||
function()
|
||||
require("undo-glow").redo()
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Redo with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"p",
|
||||
function()
|
||||
require("undo-glow").paste_below()
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Paste below with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"P",
|
||||
function()
|
||||
require("undo-glow").paste_above()
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Paste above with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"n",
|
||||
function()
|
||||
require("undo-glow").search_next {
|
||||
animation = {
|
||||
animation_type = "strobe",
|
||||
},
|
||||
}
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Search next with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"N",
|
||||
function()
|
||||
require("undo-glow").search_prev {
|
||||
animation = {
|
||||
animation_type = "strobe",
|
||||
},
|
||||
}
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Search prev with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"*",
|
||||
function()
|
||||
require("undo-glow").search_star {
|
||||
animation = {
|
||||
animation_type = "strobe",
|
||||
},
|
||||
}
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Search star with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"#",
|
||||
function()
|
||||
require("undo-glow").search_hash {
|
||||
animation = {
|
||||
animation_type = "strobe",
|
||||
},
|
||||
}
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Search hash with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"gc",
|
||||
function()
|
||||
-- This is an implementation to preserve the cursor position
|
||||
local pos = vim.fn.getpos "."
|
||||
vim.schedule(function()
|
||||
vim.fn.setpos(".", pos)
|
||||
end)
|
||||
return require("undo-glow").comment()
|
||||
end,
|
||||
mode = { "n", "x" },
|
||||
desc = "Toggle comment with highlight",
|
||||
expr = true,
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"gc",
|
||||
function()
|
||||
require("undo-glow").comment_textobject()
|
||||
end,
|
||||
mode = "o",
|
||||
desc = "Comment textobject with highlight",
|
||||
noremap = true,
|
||||
},
|
||||
{
|
||||
"gcc",
|
||||
function()
|
||||
return require("undo-glow").comment_line()
|
||||
end,
|
||||
mode = "n",
|
||||
desc = "Toggle comment line with highlight",
|
||||
expr = true,
|
||||
noremap = true,
|
||||
},
|
||||
},
|
||||
init = function()
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||
desc = "Highlight when yanking (copying) text",
|
||||
callback = function()
|
||||
require("undo-glow").yank()
|
||||
end,
|
||||
})
|
||||
|
||||
-- This only handles neovim instance and do not highlight when switching panes in tmux
|
||||
vim.api.nvim_create_autocmd("CursorMoved", {
|
||||
desc = "Highlight when cursor moved significantly",
|
||||
callback = function()
|
||||
require("undo-glow").cursor_moved {
|
||||
animation = {
|
||||
animation_type = "slide",
|
||||
},
|
||||
}
|
||||
end,
|
||||
})
|
||||
|
||||
-- This will handle highlights when focus gained, including switching panes in tmux
|
||||
vim.api.nvim_create_autocmd("FocusGained", {
|
||||
desc = "Highlight when focus gained",
|
||||
callback = function()
|
||||
---@type UndoGlow.CommandOpts
|
||||
local opts = {
|
||||
animation = {
|
||||
animation_type = "slide",
|
||||
},
|
||||
}
|
||||
|
||||
opts = require("undo-glow.utils").merge_command_opts(
|
||||
"UgCursor",
|
||||
opts
|
||||
)
|
||||
local pos = require("undo-glow.utils").get_current_cursor_row()
|
||||
|
||||
require("undo-glow").highlight_region(
|
||||
vim.tbl_extend("force", opts, {
|
||||
s_row = pos.s_row,
|
||||
s_col = pos.s_col,
|
||||
e_row = pos.e_row,
|
||||
e_col = pos.e_col,
|
||||
force_edge = opts.force_edge == nil and true
|
||||
or opts.force_edge,
|
||||
})
|
||||
)
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("CmdlineLeave", {
|
||||
desc = "Highlight when search cmdline leave",
|
||||
callback = function()
|
||||
require("undo-glow").search_cmd {
|
||||
animation = {
|
||||
animation_type = "fade",
|
||||
},
|
||||
}
|
||||
end,
|
||||
})
|
||||
end,
|
||||
}
|
||||
Reference in New Issue
Block a user