update nvim

This commit is contained in:
kyasuda
2025-09-05 10:32:09 -07:00
parent 22b43c6ddf
commit b8b8d6ef09
16 changed files with 618 additions and 248 deletions

View File

@@ -49,8 +49,8 @@ return {
local s = " "
for e, n in pairs(diagnostics_dict) do
local sym = e == "error" and ""
or e == "hint" and ""
or (e == "warning" and "" or "")
or e == "hint" and ""
or (e == "warning" and "" or "")
s = s .. n .. sym
end
return s

View File

@@ -1,56 +1,92 @@
return {
"catppuccin/nvim",
name = "catppuccin",
priority = 1000,
opts = {
flavour = "macchiato", -- latte, frappe, macchiato, mocha
term_colors = true, -- sets terminal colors (e.g. `g:terminal_color_0`)
integrations = {
cmp = true,
gitsigns = true,
nvimtree = true,
mini = {
enabled = true,
indentscope_color = "",
},
bufferline = true,
dashboard = true,
fidget = true,
indent_blankline = {
enabled = true,
scope_color = "lavendar", -- catppuccin color (eg. `lavender`) Default: text
colored_indent_levels = true,
},
copilot_vim = true,
native_lsp = {
enabled = true,
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,
},
},
notify = true,
treesitter = true,
rainbow_delimiters = true,
telescope = {
enabled = true,
-- style = "nvchad"
},
which_key = true
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations)
}
}
"catppuccin/nvim",
name = "catppuccin",
priority = 1000,
opts = {
flavour = "macchiato", -- latte, frappe, macchiato, mocha
transparent_background = false, -- disables setting the background color.
float = {
transparent = false, -- enable transparent floating windows
solid = false, -- use solid styling for floating windows, see |winborder|
},
show_end_of_buffer = false, -- shows the '~' characters after the end of buffers
term_colors = true, -- sets terminal colors (e.g. `g:terminal_color_0`)
dim_inactive = {
enabled = false, -- dims the background color of inactive window
shade = "dark",
percentage = 0.15, -- percentage of the shade to apply to the inactive window
},
no_italic = false, -- Force no italic
no_bold = false, -- Force no bold
no_underline = false, -- Force no underline
styles = { -- Handles the styles of general hi groups (see `:h highlight-args`):
comments = { "italic" }, -- Change the style of comments
conditionals = { "italic" },
loops = { "bold" },
functions = { "bold", "italic" },
keywords = { "bold" },
strings = {},
variables = { "bold" },
numbers = { "bold" },
booleans = { "bold" },
properties = { "bold" },
types = { "bold" },
operators = { "bold" },
-- miscs = {}, -- Uncomment to turn off hard-coded styles
},
color_overrides = {},
custom_highlights = {},
default_integrations = true,
auto_integrations = false,
integrations = {
cmp = true,
gitsigns = true,
nvimtree = true,
mini = {
enabled = true,
indentscope_color = "",
},
bufferline = true,
dashboard = true,
diffview = true,
fidget = true,
noice = true,
indent_blankline = {
enabled = true,
scope_color = "lavendar", -- catppuccin color (eg. `lavender`) Default: text
colored_indent_levels = true,
},
copilot_vim = true,
native_lsp = {
enabled = true,
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,
},
},
notify = true,
treesitter = true,
rainbow_delimiters = true,
render_markdown = true,
telescope = {
enabled = true,
-- style = "nvchad"
},
which_key = true,
-- For more plugins integrations please scroll down (https://github.com/catppuccin/nvim#integrations)
},
},
}

View File

@@ -8,98 +8,121 @@ return {
},
opts = {
adapters = {
copilot = function()
return require("codecompanion.adapters").extend("copilot", {
schema = {
name = "copilot",
opts = {
stream = true,
tools = true,
vision = true,
},
features = {
text = true,
tokens = true,
},
model = {
-- default = "claude-3.7-sonnet-thought",
-- default = "o3-mini",
-- default = "gemini-2.0-flash-001",
default = "gpt-4.1",
-- default = "gpt-4o",
-- default = "o3-mini-2025-01-31",
-- choices = {
-- ["o3-mini-2025-01-31"] = { opts = { can_reason = true } },
-- ["o1-2024-12-17"] = { opts = { can_reason = true } },
-- ["o1-mini-2024-09-12"] = { opts = { can_reason = true } },
-- "gpt-4o-2024-08-06",
-- "claude-3.7-sonnet-thought",
-- "claude-3.7-sonnet",
-- "claude-3.5-sonnet",
-- "gemini-2.0-flash-001",
-- {{{ HTTP
http = {
-- {{{ COPILOT
copilot = function()
return require("codecompanion.adapters").extend("copilot", {
schema = {
name = "copilot",
opts = {
stream = true,
tools = true,
vision = true,
},
features = {
text = true,
tokens = true,
},
model = {
-- default = "claude-3.7-sonnet-thought",
-- default = "o3-mini",
-- default = "gemini-2.0-flash-001",
default = "gpt-4.1",
-- default = "gpt-4o",
-- default = "o3-mini-2025-01-31",
-- choices = {
-- ["o3-mini-2025-01-31"] = { opts = { can_reason = true } },
-- ["o1-2024-12-17"] = { opts = { can_reason = true } },
-- ["o1-mini-2024-09-12"] = { opts = { can_reason = true } },
-- "gpt-4o-2024-08-06",
-- "claude-3.7-sonnet-thought",
-- "claude-3.7-sonnet",
-- "claude-3.5-sonnet",
-- "gemini-2.0-flash-001",
-- },
},
-- max_tokens = {
-- default = 65536,
-- },
},
-- max_tokens = {
-- default = 65536,
-- },
},
})
end,
llama_cpp = function()
return require("codecompanion.adapters").extend("openai_compatible", {
name = "llama.cpp",
formatted_name = "llama.cpp",
opts = {
stream = false,
},
schema = {
-- model = {
-- default = "qwen2.5-coder-14b-instruct",
-- choices = {
-- ["qwen2.5-coder-14b-instruct"] = { opts = { can_reason = true } },
-- ["/models/lmstudio-community/DeepSeek-R1-Distill-Qwen-7B-GGUF/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf"] = {
-- opts = { can_reason = true },
-- },
-- ["/models/lmstudio-community/Qwen2.5-7B-Instruct-1M-GGUF/Qwen2.5-7B-Instruct-1M-Q4_K_M.gguf"] = {
-- opts = { can_reason = true },
-- },
-- },
-- },
temperature = {
order = 2,
mapping = "parameters",
type = "number",
optional = true,
default = 0.2,
validate = function(n)
return n >= 0 and n <= 2, "Must be between 0 and 2"
end,
})
end,
-- }}}
-- {{{ LLAMA_CPP
llama_cpp = function()
return require("codecompanion.adapters").extend("openai_compatible", {
name = "llama.cpp",
formatted_name = "llama.cpp",
opts = {
stream = false,
},
},
env = {
url = "http://localhost:8080",
chat_url = "/v1/chat/completions",
},
})
end,
openrouter = function()
return require("codecompanion.adapters").extend("openai_compatible", {
env = {
url = "https://openrouter.ai/api",
api_key = "cmd:cat $HOME/.openrouterapikey",
chat_url = "/v1/chat/completions",
},
schema = {
model = {
default = "google/gemini-2.5-pro-exp-03-25:free",
-- default = "deepseek/deepseek-chat-v3-0324:free",
-- default = "google/gemini-2.0-flash-thinking-exp:free",
-- default = "deepseek/deepseek-r1-distill-qwen-32b:free",
-- default = "qwen/qwen-2.5-coder-32b-instruct:free",
schema = {
-- model = {
-- default = "qwen2.5-coder-14b-instruct",
-- choices = {
-- ["qwen2.5-coder-14b-instruct"] = { opts = { can_reason = true } },
-- ["/models/lmstudio-community/DeepSeek-R1-Distill-Qwen-7B-GGUF/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf"] = {
-- opts = { can_reason = true },
-- },
-- ["/models/lmstudio-community/Qwen2.5-7B-Instruct-1M-GGUF/Qwen2.5-7B-Instruct-1M-Q4_K_M.gguf"] = {
-- opts = { can_reason = true },
-- },
-- },
-- },
temperature = {
order = 2,
mapping = "parameters",
type = "number",
optional = true,
default = 0.2,
validate = function(n)
return n >= 0 and n <= 2, "Must be between 0 and 2"
end,
},
},
},
})
end,
env = {
url = "http://localhost:8080",
chat_url = "/v1/chat/completions",
},
})
end,
-- }}}
-- {{{ OPENROUTER
openrouter = function()
return require("codecompanion.adapters").extend("openai_compatible", {
env = {
url = "https://openrouter.ai/api",
api_key = "cmd:cat $HOME/.openrouterapikey",
chat_url = "/v1/chat/completions",
},
schema = {
model = {
default = "google/gemini-2.5-pro-exp-03-25:free",
-- default = "deepseek/deepseek-chat-v3-0324:free",
-- default = "google/gemini-2.0-flash-thinking-exp:free",
-- default = "deepseek/deepseek-r1-distill-qwen-32b:free",
-- default = "qwen/qwen-2.5-coder-32b-instruct:free",
},
},
})
end,
-- }}}
},
-- }}}
-- {{{ ACP
acp = {
gemini_cli = function()
return require("codecompanion.adapters").extend("gemini_cli", {
defaults = {
auth_method = "oauth-personal", -- "oauth-personal"|"gemini-api-key"|"vertex-ai"
mcpServers = {},
timeout = 20000, -- 20 seconds
},
})
end,
},
-- }}}
},
strategies = {
chat = {
@@ -212,6 +235,7 @@ return {
},
},
init = function()
require("plugins.codecompanion.fidget-spinner"):init()
require("utils.codecompanion.fidget-spinner"):init()
require("utils.codecompanion.extmarks").setup()
end,
}

View File

@@ -1,126 +0,0 @@
local notify = require("notify")
local spinner_frames = { "", "", "", "", "", "", "", "", "", "" }
local spinner_len = #spinner_frames -- cache spinner length
local M = {}
local timeout = 2999
-- Helper function to safely call notify
local function safe_notify(msg, level, opts)
local ok, res = pcall(notify, msg, level, opts)
return ok, res
end
function M:init()
local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestStarted",
group = group,
callback = function(request)
local handle = M:create_progress_handle(request)
M:store_progress_handle(request.data.id, handle)
end,
})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestFinished",
group = group,
callback = function(request)
local handle = M:pop_progress_handle(request.data.id)
if handle then
M:report_exit_status(handle, request)
handle:finish()
end
end,
})
end
M.handles = {}
function M:store_progress_handle(id, handle)
M.handles[id] = handle
end
function M:pop_progress_handle(id)
local handle = M.handles[id]
M.handles[id] = nil
return handle
end
function M:create_progress_handle(request)
local title = " Requesting assistance"
.. " ("
.. request.data.strategy
.. ") from "
.. request.data.adapter.formatted_name
.. " using "
.. request.data.adapter.model
local idx = 1
local start_time = os.time()
local notification_id =
notify(spinner_frames[idx] .. " In progress (" .. "0s" .. ")...", "info", { title = title, timeout = false })
local handle = { notification_id = notification_id, title = title, finished = false }
local timer = vim.loop.new_timer()
timer:start(
0,
100,
vim.schedule_wrap(function()
if handle.finished then
return
end -- stop updating if finished
idx = idx % spinner_len + 1
local elapsed = os.difftime(os.time(), start_time)
local opts = { replace = handle.notification_id, title = title, timeout = false }
local ok, new_id = safe_notify(spinner_frames[idx] .. " In progress (" .. elapsed .. "s)...", "info", opts)
if ok then
handle.notification_id = new_id
else
handle.notification_id = notify(
spinner_frames[idx] .. " In progress (" .. elapsed .. "s)...",
"info",
{ title = title, timeout = false }
)
end
end)
)
handle.timer = timer
handle.finish = function()
handle.finished = true -- mark as finished to abort future updates
if handle.timer then
handle.timer:stop()
handle.timer:close()
handle.timer = nil
end
end
return handle
end
function M:report_exit_status(handle, request)
local title = handle.title
or (
" Requesting assistance"
.. " ("
.. request.data.strategy
.. ") from "
.. request.data.adapter.formatted_name
.. " using "
.. request.data.adapter.model
)
local function report(msg, level)
local opts = { replace = handle.notification_id, title = title, timeout = timeout }
local ok = safe_notify(msg, level, opts)
if not ok then
notify(msg, level, { title = title, timeout = timeout })
end
end
if request.data.status == "success" then
report("Completed", "info")
elseif request.data.status == "error" then
report(" Error", "error")
else
report("󰜺 Cancelled", "warn")
end
end
return M

View File

@@ -1,73 +0,0 @@
-- lua/plugins/codecompanion/fidget-spinner.lua
local progress = require("fidget.progress")
local M = {}
function M:init()
local group = vim.api.nvim_create_augroup("CodeCompanionFidgetHooks", {})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestStarted",
group = group,
callback = function(request)
local handle = M:create_progress_handle(request)
M:store_progress_handle(request.data.id, handle)
end,
})
vim.api.nvim_create_autocmd({ "User" }, {
pattern = "CodeCompanionRequestFinished",
group = group,
callback = function(request)
local handle = M:pop_progress_handle(request.data.id)
if handle then
M:report_exit_status(handle, request)
handle:finish()
end
end,
})
end
M.handles = {}
function M:store_progress_handle(id, handle)
M.handles[id] = handle
end
function M:pop_progress_handle(id)
local handle = M.handles[id]
M.handles[id] = nil
return handle
end
function M:create_progress_handle(request)
return progress.handle.create({
title = " Requesting assistance (" .. request.data.strategy .. ")",
message = "In progress...",
lsp_client = {
name = M:llm_role_title(request.data.adapter),
},
})
end
function M:llm_role_title(adapter)
local parts = {}
table.insert(parts, adapter.formatted_name)
if adapter.model and adapter.model ~= "" then
table.insert(parts, "(" .. adapter.model .. ")")
end
return table.concat(parts, " ")
end
function M:report_exit_status(handle, request)
if request.data.status == "success" then
handle.message = "Completed"
elseif request.data.status == "error" then
handle.message = " Error"
else
handle.message = "󰜺 Cancelled"
end
end
return M

View File

@@ -1,5 +1,7 @@
return {
"zbirenbaum/copilot.lua",
cmd = "Copilot",
event = "InsertEnter",
opts = {
panel = {
enabled = true,
@@ -49,7 +51,29 @@ return {
listCount = 10, -- #completions for panel
inlineSuggestCount = 5, -- #completions for getCompletions
},
telemetry = {
telemetryLevel = "all",
},
},
},
copilot_node_command = "node", -- Node.js version must be > 20
workspace_folders = {},
-- copilot_model = "",
disable_limit_reached_message = false, -- Set to `true` to suppress completion limit reached popup
logger = {
file = vim.fn.stdpath("log") .. "/copilot-lua.log",
file_log_level = vim.log.levels.OFF,
print_log_level = vim.log.levels.WARN,
trace_lsp = "off", -- "off" | "messages" | "verbose"
trace_lsp_progress = false,
log_lsp_messages = false,
},
root_dir = function()
return vim.fs.dirname(vim.fs.find(".git", { upward = true })[1])
end,
server = {
type = "nodejs", -- "nodejs" | "binary"
custom_server_filepath = nil,
},
},
}

View File

@@ -0,0 +1,113 @@
return {
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
opts = {
default = {
-- file and directory options
dir_path = function()
return vim.fn.expand("%:t:r")
end, ---@type string | fun(): string
extension = "png", ---@type string | fun(): string
file_name = "%Y-%m-%d-%H-%M-%S", ---@type string | fun(): string
use_absolute_path = false, ---@type boolean | fun(): boolean
relative_to_current_file = false, ---@type boolean | fun(): boolean
-- logging options
verbose = true, ---@type boolean | fun(): boolean
-- template options
template = "$FILE_PATH", ---@type string | fun(context: table): string
url_encode_path = false, ---@type boolean | fun(): boolean
relative_template_path = true, ---@type boolean | fun(): boolean
use_cursor_in_template = true, ---@type boolean | fun(): boolean
insert_mode_after_paste = true, ---@type boolean | fun(): boolean
insert_template_after_cursor = true, ---@type boolean | fun(): boolean
-- prompt options
prompt_for_file_name = true, ---@type boolean | fun(): boolean
show_dir_path_in_prompt = false, ---@type boolean | fun(): boolean
-- base64 options
max_base64_size = 10, ---@type number | fun(): number
embed_image_as_base64 = false, ---@type boolean | fun(): boolean
-- image options
process_cmd = "", ---@type string | fun(): string
copy_images = false, ---@type boolean | fun(): boolean
download_images = true, ---@type boolean | fun(): boolean
-- drag and drop options
drag_and_drop = {
enabled = true, ---@type boolean | fun(): boolean
insert_mode = false, ---@type boolean | fun(): boolean
},
},
-- filetype specific options
filetypes = {
markdown = {
url_encode_path = true, ---@type boolean | fun(): boolean
template = "![$CURSOR]($FILE_PATH)", ---@type string | fun(context: table): string
download_images = false, ---@type boolean | fun(): boolean
},
vimwiki = {
url_encode_path = true, ---@type boolean | fun(): boolean
template = "![$CURSOR]($FILE_PATH)", ---@type string | fun(context: table): string
download_images = false, ---@type boolean | fun(): boolean
},
html = {
template = '<img src="$FILE_PATH" alt="$CURSOR">', ---@type string | fun(context: table): string
},
tex = {
relative_template_path = false, ---@type boolean | fun(): boolean
template = [[
\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{$FILE_PATH}
\caption{$CURSOR}
\label{fig:$LABEL}
\end{figure}
]], ---@type string | fun(context: table): string
},
typst = {
template = [[
#figure(
image("$FILE_PATH", width: 80%),
caption: [$CURSOR],
) <fig-$LABEL>
]], ---@type string | fun(context: table): string
},
rst = {
template = [[
.. image:: $FILE_PATH
:alt: $CURSOR
:width: 80%
]], ---@type string | fun(context: table): string
},
asciidoc = {
template = 'image::$FILE_PATH[width=80%, alt="$CURSOR"]', ---@type string | fun(context: table): string
},
org = {
template = [=[
#+BEGIN_FIGURE
[[file:$FILE_PATH]]
#+CAPTION: $CURSOR
#+NAME: fig:$LABEL
#+END_FIGURE
]=], ---@type string | fun(context: table): string
},
},
-- file, directory, and custom triggered options
files = {}, ---@type table | fun(): table
dirs = {}, ---@type table | fun(): table
custom = {}, ---@type table | fun(): table
},
}

View File

@@ -1,51 +0,0 @@
return {
"ravitemer/mcphub.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
},
cmd = "MCPHub",
build = "bundled_build.lua", -- Bundles mcp-hub locally
config = function()
vim.notify = require("notify")
require("mcphub").setup({
use_bundled_binary = true, -- Use local binary
port = 37373, -- Port for MCP Hub Express API
config = vim.fn.expand("~/.config/mcphub/servers.json"), -- Config file path
native_servers = {}, -- add your native servers here
auto_approve = true,
extensions = {
avante = {},
codecompanion = {
show_result_in_chat = true, -- Show tool results in chat
make_vars = true, -- Create chat variables from resources
make_slash_commands = true, -- make /slash_commands from MCP server prompts
},
},
-- UI configuration
ui = {
window = {
width = 0.8, -- Window width (0-1 ratio)
height = 0.8, -- Window height (0-1 ratio)
border = "rounded", -- Window border style
relative = "editor", -- Window positioning
zindex = 50, -- Window stack order
},
},
-- Event callbacks
on_ready = function(hub) end, -- Called when hub is ready
on_error = function(err)
vim.notify(err, "ERROR")
end, -- Called on errors
-- Logging configuration
log = {
level = vim.log.levels.WARN, -- Minimum log level
to_file = false, -- Enable file logging
file_path = nil, -- Custom log file path
prefix = "MCPHub", -- Log message prefix
},
})
end,
}

View File

@@ -1,63 +1,66 @@
return {
"echasnovski/mini.diff",
depends = { "echasnovski/mini.nvim" },
opts = {
config = function()
local diff = require("mini.diff")
diff.setup({
-- Options for how hunks are visualized
view = {
-- Visualization style. Possible values are 'sign' and 'number'.
-- Default: 'number' if line numbers are enabled, 'sign' otherwise.
style = vim.go.number and "number" or "sign",
-- Options for how hunks are visualized
view = {
-- Visualization style. Possible values are 'sign' and 'number'.
-- Default: 'number' if line numbers are enabled, 'sign' otherwise.
style = vim.go.number and "number" or "sign",
-- Signs used for hunks with 'sign' view
signs = { add = "", change = "", delete = "" },
-- Signs used for hunks with 'sign' view
signs = { add = "", change = "", delete = "" },
-- Priority of used visualization extmarks
priority = 199,
},
-- Priority of used visualization extmarks
priority = 199,
},
-- Source for how reference text is computed/updated/etc
-- Uses content from Git index by default
source = nil,
-- Source for how reference text is computed/updated/etc
-- Uses content from Git index by default
source = diff.gen_source.none(),
-- Delays (in ms) defining asynchronous processes
delay = {
-- How much to wait before update following every text change
text_change = 200,
},
-- Delays (in ms) defining asynchronous processes
delay = {
-- How much to wait before update following every text change
text_change = 200,
},
-- Module mappings. Use `''` (empty string) to disable one.
mappings = {
-- Apply hunks inside a visual/operator region
apply = "gh",
-- Module mappings. Use `''` (empty string) to disable one.
mappings = {
-- Apply hunks inside a visual/operator region
apply = "gh",
-- Reset hunks inside a visual/operator region
reset = "gH",
-- Reset hunks inside a visual/operator region
reset = "gH",
-- Hunk range textobject to be used inside operator
-- Works also in Visual mode if mapping differs from apply and reset
textobject = "gh",
-- Hunk range textobject to be used inside operator
-- Works also in Visual mode if mapping differs from apply and reset
textobject = "gh",
-- Go to hunk range in corresponding direction
goto_first = "[H",
goto_prev = "[h",
goto_next = "]h",
goto_last = "]H",
},
-- Go to hunk range in corresponding direction
goto_first = "[H",
goto_prev = "[h",
goto_next = "]h",
goto_last = "]H",
},
-- Various options
options = {
-- Diff algorithm. See `:h vim.diff()`.
algorithm = "histogram",
-- Various options
options = {
-- Diff algorithm. See `:h vim.diff()`.
algorithm = "histogram",
-- Whether to use "indent heuristic". See `:h vim.diff()`.
indent_heuristic = true,
-- Whether to use "indent heuristic". See `:h vim.diff()`.
indent_heuristic = true,
-- The amount of second-stage diff to align lines (in Neovim>=0.9)
linematch = 60,
-- The amount of second-stage diff to align lines (in Neovim>=0.9)
linematch = 60,
-- Whether to wrap around edges during hunk navigation
wrap_goto = false,
},
},
-- Whether to wrap around edges during hunk navigation
wrap_goto = false,
},
})
end,
}

View File

@@ -171,8 +171,8 @@ return {
sources = cmp.config.sources({
{ name = "nvim_lsp_signature_help", group_index = 0 },
{ name = "lazydev", group_index = 0 },
{ name = "copilot", group_index = 0 },
{ name = "nvim_lsp", group_index = 1 },
{ name = "copilot", group_index = 1 },
{ name = "codecompanion", group_index = 2 },
{ name = "async_path", group_index = 2 },
{ name = "nvim_lsp_document_symbol", group_index = 2 },

View File

@@ -12,6 +12,7 @@ return {
vim = { "vint" },
go = { "golangcilint" },
}
lint.linters.jsonlint.cmd = "vscode-json-language-server"
lint.linters.shellcheck.args = {
"-s",
"bash",