Merge branch 'main' into mini.files-windowpicker

This commit is contained in:
Stefan Krüger 2024-12-18 14:24:07 +01:00 committed by GitHub
commit 6aae586986
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
56 changed files with 1344 additions and 596 deletions

View file

@ -34,7 +34,7 @@ return {
-- codeium cmp source
{
"nvim-cmp",
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "codeium.nvim" },
opts = function(_, opts)
@ -55,17 +55,21 @@ return {
end,
},
{
vim.g.ai_cmp and {
"saghen/blink.cmp",
optional = true,
dependencies = { "codeium.nvim", "saghen/blink.compat" },
opts = {
sources = {
compat = vim.g.ai_cmp and { "codeium" } or nil,
compat = { "codeium" },
providers = {
codeium = {
kind = "Codeium",
score_offset = 100,
async = true,
},
},
},
},
dependencies = {
"codeium.nvim",
vim.g.ai_cmp and "saghen/blink.compat" or nil,
},
},
} or nil,
}

View file

@ -17,7 +17,7 @@ end
return {
{
"CopilotC-Nvim/CopilotChat.nvim",
branch = "canary",
branch = "main",
cmd = "CopilotChat",
opts = function()
local user = vim.env.USER or "User"

View file

@ -58,67 +58,61 @@ return {
end,
},
-- copilot cmp source
{
"nvim-cmp",
optional = true,
dependencies = { -- this will only be evaluated if nvim-cmp is enabled
{
"zbirenbaum/copilot-cmp",
enabled = vim.g.ai_cmp, -- only enable if wanted
opts = {},
config = function(_, opts)
local copilot_cmp = require("copilot_cmp")
copilot_cmp.setup(opts)
-- attach cmp source whenever copilot attaches
-- fixes lazy-loading issues with the copilot cmp source
LazyVim.lsp.on_attach(function()
copilot_cmp._on_insert_enter({})
end, "copilot")
end,
specs = {
{
"nvim-cmp",
optional = true,
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, 1, {
name = "copilot",
group_index = 1,
priority = 100,
})
end,
},
},
},
},
},
-- blink.cmp
{
"saghen/blink.cmp",
optional = true,
dependencies = {
{
"giuxtaposition/blink-cmp-copilot",
enabled = vim.g.ai_cmp, -- only enable if needed
specs = {
{
"blink.cmp",
optional = true,
opts = {
sources = {
providers = {
copilot = { name = "copilot", module = "blink-cmp-copilot" },
},
completion = {
enabled_providers = { "copilot" },
vim.g.ai_cmp
and {
-- copilot cmp source
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { -- this will only be evaluated if nvim-cmp is enabled
{
"zbirenbaum/copilot-cmp",
opts = {},
config = function(_, opts)
local copilot_cmp = require("copilot_cmp")
copilot_cmp.setup(opts)
-- attach cmp source whenever copilot attaches
-- fixes lazy-loading issues with the copilot cmp source
LazyVim.lsp.on_attach(function()
copilot_cmp._on_insert_enter({})
end, "copilot")
end,
specs = {
{
"hrsh7th/nvim-cmp",
optional = true,
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, 1, {
name = "copilot",
group_index = 1,
priority = 100,
})
end,
},
},
},
},
},
},
},
},
{
"saghen/blink.cmp",
optional = true,
dependencies = { "giuxtaposition/blink-cmp-copilot" },
opts = {
sources = {
default = { "copilot" },
providers = {
copilot = {
name = "copilot",
module = "blink-cmp-copilot",
kind = "Copilot",
score_offset = 100,
async = true,
},
},
},
},
},
}
or nil,
}

View file

@ -6,6 +6,7 @@ return {
accept_suggestion = nil, -- handled by nvim-cmp / blink.cmp
},
disable_inline_completion = vim.g.ai_cmp,
ignore_filetypes = { "bigfile", "snacks_input", "snacks_notif" },
},
},
@ -43,41 +44,23 @@ return {
end,
},
-- blink.cmp integration
--
-- FIXME: this currently doesn't work properly
-- {
-- "saghen/blink.cmp",
-- optional = true,
-- opts = {
-- sources = {
-- compat = vim.g.ai_cmp and { "supermaven" } or nil,
-- },
-- },
-- dependencies = {
-- "supermaven-nvim",
-- vim.g.ai_cmp and "saghen/blink.compat" or nil,
-- },
-- },
--
-- Disabble cmp integration for now
{
vim.g.ai_cmp and {
"saghen/blink.cmp",
optional = true,
---@module 'blink.cmp'
---@type blink.cmp.Config
dependencies = { "supermaven-nvim", "saghen/blink.compat" },
opts = {
completion = { ghost_text = { enabled = false } },
},
dependencies = {
{
"supermaven-nvim",
opts = {
disable_inline_completion = false,
sources = {
compat = { "supermaven" },
providers = {
supermaven = {
kind = "Supermaven",
score_offset = 100,
async = true,
},
},
},
},
},
} or nil,
{
"nvim-lualine/lualine.nvim",

View file

@ -1,25 +1,22 @@
return {
-- Tabnine cmp source
{
"nvim-cmp",
optional = true,
dependencies = {
{
"tzachar/cmp-tabnine",
build = {
LazyVim.is_win() and "pwsh -noni .\\install.ps1" or "./install.sh",
},
dependencies = "hrsh7th/nvim-cmp",
opts = {
max_lines = 1000,
max_num_results = 3,
sort = true,
},
config = function(_, opts)
require("cmp_tabnine.config"):setup(opts)
end,
},
"tzachar/cmp-tabnine",
build = LazyVim.is_win() and "pwsh -noni .\\install.ps1" or "./install.sh",
opts = {
max_lines = 1000,
max_num_results = 3,
sort = true,
},
config = function(_, opts)
require("cmp_tabnine.config"):setup(opts)
end,
},
{
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "tzachar/cmp-tabnine" },
---@param opts cmp.ConfigSchema
opts = function(_, opts)
table.insert(opts.sources, 1, {
@ -36,6 +33,25 @@ return {
end)
end,
},
{
"saghen/blink.cmp",
optional = true,
dependencies = { "tzachar/cmp-tabnine", "saghen/blink.compat" },
opts = {
sources = {
compat = { "cmp_tabnine" },
providers = {
cmp_tabnine = {
kind = "TabNine",
score_offset = 100,
async = true,
},
},
},
},
},
-- Show TabNine status in lualine
{
"nvim-lualine/lualine.nvim",

View file

@ -1,3 +1,4 @@
---@diagnostic disable: missing-fields
if lazyvim_docs then
-- set to `true` to follow the main branch
-- you need to have a working rust toolchain to build the plugin
@ -8,6 +9,7 @@ end
return {
{
"hrsh7th/nvim-cmp",
optional = true,
enabled = false,
},
{
@ -17,6 +19,7 @@ return {
opts_extend = {
"sources.completion.enabled_providers",
"sources.compat",
"sources.default",
},
dependencies = {
"rafamadriz/friendly-snippets",
@ -33,18 +36,31 @@ return {
---@module 'blink.cmp'
---@type blink.cmp.Config
opts = {
highlight = {
snippets = {
expand = function(snippet, _)
return LazyVim.cmp.expand(snippet)
end,
},
appearance = {
-- sets the fallback highlight groups to nvim-cmp's highlight groups
-- useful for when your theme doesn't support blink.cmp
-- will be removed in a future release, assuming themes add support
use_nvim_cmp_as_default = false,
-- set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- adjusts spacing to ensure icons are aligned
nerd_font_variant = "mono",
},
-- set to 'mono' for 'Nerd Font Mono' or 'normal' for 'Nerd Font'
-- adjusts spacing to ensure icons are aligned
nerd_font_variant = "mono",
completion = {
accept = {
-- experimental auto-brackets support
auto_brackets = {
enabled = true,
},
},
menu = {
winblend = vim.o.pumblend,
draw = {
treesitter = { "lsp" },
},
},
documentation = {
auto_show = true,
@ -55,33 +71,26 @@ return {
},
},
-- experimental auto-brackets support
accept = { auto_brackets = { enabled = true } },
-- experimental signature help support
-- trigger = { signature_help = { enabled = true } }
-- signature = { enabled = true },
sources = {
-- adding any nvim-cmp sources here will enable them
-- with blink.compat
compat = {},
completion = {
-- remember to enable your providers here
enabled_providers = { "lsp", "path", "snippets", "buffer" },
},
default = { "lsp", "path", "snippets", "buffer" },
cmdline = {},
},
keymap = {
preset = "enter",
["<Tab>"] = {
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
"fallback",
},
["<C-y>"] = { "select_and_accept" },
},
},
---@param opts blink.cmp.Config | { sources: { compat: string[] } }
config = function(_, opts)
-- setup compat sources
local enabled = opts.sources.completion.enabled_providers
local enabled = opts.sources.default
for _, source in ipairs(opts.sources.compat or {}) do
opts.sources.providers[source] = vim.tbl_deep_extend(
"force",
@ -92,6 +101,65 @@ return {
table.insert(enabled, source)
end
end
-- add ai_accept to <Tab> key
if not opts.keymap["<Tab>"] then
if opts.keymap.preset == "super-tab" then -- super-tab
opts.keymap["<Tab>"] = {
require("blink.cmp.keymap.presets")["super-tab"]["<Tab>"][1],
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
"fallback",
}
else -- other presets
opts.keymap["<Tab>"] = {
LazyVim.cmp.map({ "snippet_forward", "ai_accept" }),
"fallback",
}
end
end
--- NOTE: compat with latest version. Currenlty 0.7.6
if not vim.g.lazyvim_blink_main then
---@diagnostic disable-next-line: inject-field
opts.sources.completion = opts.sources.completion or {}
opts.sources.completion.enabled_providers = enabled
if vim.tbl_get(opts, "completion", "menu", "draw", "treesitter") then
---@diagnostic disable-next-line: assign-type-mismatch
opts.completion.menu.draw.treesitter = true
end
end
-- Unset custom prop to pass blink.cmp validation
opts.sources.compat = nil
-- check if we need to override symbol kinds
for _, provider in pairs(opts.sources.providers or {}) do
---@cast provider blink.cmp.SourceProviderConfig|{kind?:string}
if provider.kind then
local CompletionItemKind = require("blink.cmp.types").CompletionItemKind
local kind_idx = #CompletionItemKind + 1
CompletionItemKind[kind_idx] = provider.kind
---@diagnostic disable-next-line: no-unknown
CompletionItemKind[provider.kind] = kind_idx
---@type fun(ctx: blink.cmp.Context, items: blink.cmp.CompletionItem[]): blink.cmp.CompletionItem[]
local transform_items = provider.transform_items
---@param ctx blink.cmp.Context
---@param items blink.cmp.CompletionItem[]
provider.transform_items = function(ctx, items)
items = transform_items and transform_items(ctx, items) or items
for _, item in ipairs(items) do
item.kind = kind_idx or item.kind
end
return items
end
-- Unset custom prop to pass blink.cmp validation
provider.kind = nil
end
end
require("blink.cmp").setup(opts)
end,
},
@ -101,7 +169,9 @@ return {
"saghen/blink.cmp",
opts = function(_, opts)
opts.appearance = opts.appearance or {}
opts.appearance.kind_icons = LazyVim.config.icons.kinds
opts.appearance.kind_icons = vim.tbl_extend("keep", {
Color = "██", -- Use block instead of icon for color items to make swatches more usable
}, LazyVim.config.icons.kinds)
end,
},
@ -110,18 +180,13 @@ return {
"saghen/blink.cmp",
opts = {
sources = {
completion = {
-- add lazydev to your completion providers
enabled_providers = { "lazydev" },
},
-- add lazydev to your completion providers
default = { "lazydev" },
providers = {
lsp = {
-- dont show LuaLS require statements when lazydev has items
fallback_for = { "lazydev" },
},
lazydev = {
name = "LazyDev",
module = "lazydev.integrations.blink",
score_offset = 100, -- show at a higher priority than lsp
},
},
},

View file

@ -14,6 +14,7 @@ return {
"rafamadriz/friendly-snippets",
config = function()
require("luasnip.loaders.from_vscode").lazy_load()
require("luasnip.loaders.from_vscode").lazy_load({ paths = { vim.fn.stdpath("config") .. "/snippets" } })
end,
},
},
@ -33,12 +34,18 @@ return {
return true
end
end
LazyVim.cmp.actions.snippet_stop = function()
if require("luasnip").expand_or_jumpable() then -- or just jumpable(1) is fine?
require("luasnip").unlink_current()
return true
end
end
end,
},
-- nvim-cmp integration
{
"nvim-cmp",
"hrsh7th/nvim-cmp",
optional = true,
dependencies = { "saadparwaiz1/cmp_luasnip" },
opts = function(_, opts)

View file

@ -0,0 +1,118 @@
return {
{
"saghen/blink.cmp",
enabled = false,
optional = true,
},
-- Setup nvim-cmp
{
"hrsh7th/nvim-cmp",
version = false, -- last release is way too old
event = "InsertEnter",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-buffer",
"hrsh7th/cmp-path",
},
-- Not all LSP servers add brackets when completing a function.
-- To better deal with this, LazyVim adds a custom option to cmp,
-- that you can configure. For example:
--
-- ```lua
-- opts = {
-- auto_brackets = { "python" }
-- }
-- ```
opts = function()
vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true })
local cmp = require("cmp")
local defaults = require("cmp.config.default")()
local auto_select = true
return {
auto_brackets = {}, -- configure any filetype to auto add brackets
completion = {
completeopt = "menu,menuone,noinsert" .. (auto_select and "" or ",noselect"),
},
preselect = auto_select and cmp.PreselectMode.Item or cmp.PreselectMode.None,
mapping = cmp.mapping.preset.insert({
["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<C-f>"] = cmp.mapping.scroll_docs(4),
["<C-n>"] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }),
["<C-p>"] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }),
["<C-Space>"] = cmp.mapping.complete(),
["<CR>"] = LazyVim.cmp.confirm({ select = auto_select }),
["<C-y>"] = LazyVim.cmp.confirm({ select = true }),
["<S-CR>"] = LazyVim.cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
["<C-CR>"] = function(fallback)
cmp.abort()
fallback()
end,
["<tab>"] = function(fallback)
return LazyVim.cmp.map({ "snippet_forward", "ai_accept" }, fallback)()
end,
}),
sources = cmp.config.sources({
{ name = "lazydev" },
{ name = "nvim_lsp" },
{ name = "path" },
}, {
{ name = "buffer" },
}),
formatting = {
format = function(entry, item)
local icons = LazyVim.config.icons.kinds
if icons[item.kind] then
item.kind = icons[item.kind] .. item.kind
end
local widths = {
abbr = vim.g.cmp_widths and vim.g.cmp_widths.abbr or 40,
menu = vim.g.cmp_widths and vim.g.cmp_widths.menu or 30,
}
for key, width in pairs(widths) do
if item[key] and vim.fn.strdisplaywidth(item[key]) > width then
item[key] = vim.fn.strcharpart(item[key], 0, width - 1) .. ""
end
end
return item
end,
},
experimental = {
-- only show ghost text when we show ai completions
ghost_text = vim.g.ai_cmp and {
hl_group = "CmpGhostText",
} or false,
},
sorting = defaults.sorting,
}
end,
main = "lazyvim.util.cmp",
},
-- snippets
{
"hrsh7th/nvim-cmp",
dependencies = {
{
"garymjr/nvim-snippets",
opts = {
friendly_snippets = true,
},
dependencies = { "rafamadriz/friendly-snippets" },
},
},
opts = function(_, opts)
opts.snippet = {
expand = function(item)
return LazyVim.cmp.expand(item.body)
end,
}
if LazyVim.has("nvim-snippets") then
table.insert(opts.sources, { name = "snippets" })
end
end,
},
}

View file

@ -33,7 +33,6 @@ return {
-- stylua: ignore
keys = {
{ "<leader>d", "", desc = "+debug", mode = {"n", "v"} },
{ "<leader>dB", function() require("dap").set_breakpoint(vim.fn.input('Breakpoint condition: ')) end, desc = "Breakpoint Condition" },
{ "<leader>db", function() require("dap").toggle_breakpoint() end, desc = "Toggle Breakpoint" },
{ "<leader>dc", function() require("dap").continue() end, desc = "Run/Continue" },
@ -46,7 +45,7 @@ return {
{ "<leader>dl", function() require("dap").run_last() end, desc = "Run Last" },
{ "<leader>do", function() require("dap").step_out() end, desc = "Step Out" },
{ "<leader>dO", function() require("dap").step_over() end, desc = "Step Over" },
{ "<leader>dp", function() require("dap").pause() end, desc = "Pause" },
{ "<leader>dP", function() require("dap").pause() end, desc = "Pause" },
{ "<leader>dr", function() require("dap").repl.toggle() end, desc = "Toggle REPL" },
{ "<leader>ds", function() require("dap").session() end, desc = "Session" },
{ "<leader>dt", function() require("dap").terminate() end, desc = "Terminate" },

View file

@ -2,6 +2,9 @@
-- This works with LSP, Treesitter, and regexp matching to find the other
-- instances.
return {
-- disable snacks words
{ "snacks.nvim", opts = { words = { enabled = false } } },
{
"RRethy/vim-illuminate",
event = "LazyFile",
@ -53,8 +56,4 @@ return {
{ "[[", desc = "Prev Reference" },
},
},
{
"neovim/nvim-lspconfig",
opts = { document_highlight = { enabled = false } },
},
}

View file

@ -29,6 +29,29 @@ return {
},
},
},
{
"mini.diff",
opts = function()
Snacks.toggle({
name = "Mini Diff Signs",
get = function()
return vim.g.minidiff_disable ~= true
end,
set = function(state)
vim.g.minidiff_disable = not state
if state then
require("mini.diff").enable(0)
else
require("mini.diff").disable(0)
end
-- HACK: redraw to update the signs
vim.defer_fn(function()
vim.cmd([[redraw!]])
end, 200)
end,
}):map("<leader>uG")
end,
},
-- lualine integration
{

View file

@ -103,8 +103,11 @@ return {
},
{
"nvim-cmp",
"hrsh7th/nvim-cmp",
optional = true,
opts = function(_, opts)
opts.sorting = opts.sorting or {}
opts.sorting.comparators = opts.sorting.comparators or {}
table.insert(opts.sorting.comparators, 1, require("clangd_extensions.cmp_scores"))
end,
},

View file

@ -9,7 +9,8 @@ return {
},
{
"nvim-cmp",
"hrsh7th/nvim-cmp",
optional = true,
dependencies = {
{ "petertriho/cmp-git", opts = {} },
},

View file

@ -85,8 +85,12 @@ return {
dependencies = { "folke/which-key.nvim" },
ft = java_filetypes,
opts = function()
local mason_registry = require("mason-registry")
local lombok_jar = mason_registry.get_package("jdtls"):get_install_path() .. "/lombok.jar"
local cmd = { vim.fn.exepath("jdtls") }
if LazyVim.has("mason.nvim") then
local mason_registry = require("mason-registry")
local lombok_jar = mason_registry.get_package("jdtls"):get_install_path() .. "/lombok.jar"
table.insert(cmd, string.format("--jvm-arg=-javaagent:%s", lombok_jar))
end
return {
-- How to find the root dir for a given filename. The default comes from
-- lspconfig which provides a function specifically for java projects.
@ -107,10 +111,7 @@ return {
-- How to run jdtls. This can be overridden to a full java command-line
-- if the Python wrapper script doesn't suffice.
cmd = {
vim.fn.exepath("jdtls"),
string.format("--jvm-arg=-javaagent:%s", lombok_jar),
},
cmd = cmd,
full_cmd = function(opts)
local fname = vim.api.nvim_buf_get_name(0)
local root_dir = opts.root_dir(fname)
@ -145,29 +146,30 @@ return {
config = function(_, opts)
-- Find the extra bundles that should be passed on the jdtls command-line
-- if nvim-dap is enabled with java debug/test.
local mason_registry = require("mason-registry")
local bundles = {} ---@type string[]
if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then
local java_dbg_pkg = mason_registry.get_package("java-debug-adapter")
local java_dbg_path = java_dbg_pkg:get_install_path()
local jar_patterns = {
java_dbg_path .. "/extension/server/com.microsoft.java.debug.plugin-*.jar",
}
-- java-test also depends on java-debug-adapter.
if opts.test and mason_registry.is_installed("java-test") then
local java_test_pkg = mason_registry.get_package("java-test")
local java_test_path = java_test_pkg:get_install_path()
vim.list_extend(jar_patterns, {
java_test_path .. "/extension/server/*.jar",
})
end
for _, jar_pattern in ipairs(jar_patterns) do
for _, bundle in ipairs(vim.split(vim.fn.glob(jar_pattern), "\n")) do
table.insert(bundles, bundle)
if LazyVim.has("mason.nvim") then
local mason_registry = require("mason-registry")
if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then
local java_dbg_pkg = mason_registry.get_package("java-debug-adapter")
local java_dbg_path = java_dbg_pkg:get_install_path()
local jar_patterns = {
java_dbg_path .. "/extension/server/com.microsoft.java.debug.plugin-*.jar",
}
-- java-test also depends on java-debug-adapter.
if opts.test and mason_registry.is_installed("java-test") then
local java_test_pkg = mason_registry.get_package("java-test")
local java_test_path = java_test_pkg:get_install_path()
vim.list_extend(jar_patterns, {
java_test_path .. "/extension/server/*.jar",
})
end
for _, jar_pattern in ipairs(jar_patterns) do
for _, bundle in ipairs(vim.split(vim.fn.glob(jar_pattern), "\n")) do
table.insert(bundles, bundle)
end
end
end
end
local function attach_jdtls()
local fname = vim.api.nvim_buf_get_name(0)
@ -239,40 +241,43 @@ return {
},
})
if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then
-- custom init for Java debugger
require("jdtls").setup_dap(opts.dap)
require("jdtls.dap").setup_dap_main_class_configs(opts.dap_main)
if LazyVim.has("mason.nvim") then
local mason_registry = require("mason-registry")
if opts.dap and LazyVim.has("nvim-dap") and mason_registry.is_installed("java-debug-adapter") then
-- custom init for Java debugger
require("jdtls").setup_dap(opts.dap)
require("jdtls.dap").setup_dap_main_class_configs(opts.dap_main)
-- Java Test require Java debugger to work
if opts.test and mason_registry.is_installed("java-test") then
-- custom keymaps for Java test runner (not yet compatible with neotest)
wk.add({
{
mode = "n",
buffer = args.buf,
{ "<leader>t", group = "test" },
-- Java Test require Java debugger to work
if opts.test and mason_registry.is_installed("java-test") then
-- custom keymaps for Java test runner (not yet compatible with neotest)
wk.add({
{
"<leader>tt",
function()
require("jdtls.dap").test_class({
config_overrides = type(opts.test) ~= "boolean" and opts.test.config_overrides or nil,
})
end,
desc = "Run All Test",
mode = "n",
buffer = args.buf,
{ "<leader>t", group = "test" },
{
"<leader>tt",
function()
require("jdtls.dap").test_class({
config_overrides = type(opts.test) ~= "boolean" and opts.test.config_overrides or nil,
})
end,
desc = "Run All Test",
},
{
"<leader>tr",
function()
require("jdtls.dap").test_nearest_method({
config_overrides = type(opts.test) ~= "boolean" and opts.test.config_overrides or nil,
})
end,
desc = "Run Nearest Test",
},
{ "<leader>tT", require("jdtls.dap").pick_test, desc = "Run Test" },
},
{
"<leader>tr",
function()
require("jdtls.dap").test_nearest_method({
config_overrides = type(opts.test) ~= "boolean" and opts.test.config_overrides or nil,
})
end,
desc = "Run Nearest Test",
},
{ "<leader>tT", require("jdtls.dap").pick_test, desc = "Run Test" },
},
})
})
end
end
end

View file

@ -1,3 +1,13 @@
if lazyvim_docs then
-- LSP Server to use for Rust.
-- Set to "bacon-ls" to use bacon-ls instead of rust-analyzer.
-- only for diagnostics. The rest of LSP support will still be
-- provided by rust-analyzer.
vim.g.lazyvim_rust_diagnostics = "rust-analyzer"
end
local diagnostics = vim.g.lazyvim_rust_diagnostics or "rust-analyzer"
return {
recommended = function()
return LazyVim.extras.wants({
@ -35,7 +45,13 @@ return {
{
"williamboman/mason.nvim",
optional = true,
opts = { ensure_installed = { "codelldb" } },
opts = function(_, opts)
opts.ensure_installed = opts.ensure_installed or {}
vim.list_extend(opts.ensure_installed, { "codelldb" })
if diagnostics == "bacon-ls" then
vim.list_extend(opts.ensure_installed, { "bacon" })
end
end,
},
{
@ -62,8 +78,12 @@ return {
enable = true,
},
},
-- Add clippy lints for Rust.
checkOnSave = true,
-- Add clippy lints for Rust if using rust-analyzer
checkOnSave = diagnostics == "rust-analyzer",
-- Enable diagnostics if using rust-analyzer
diagnostics = {
enable = diagnostics == "rust-analyzer",
},
procMacro = {
enable = true,
ignored = {
@ -72,11 +92,36 @@ return {
["async-recursion"] = { "async_recursion" },
},
},
files = {
excludeDirs = {
".direnv",
".git",
".github",
".gitlab",
"bin",
"node_modules",
"target",
"venv",
".venv",
},
},
},
},
},
},
config = function(_, opts)
if LazyVim.has("mason.nvim") then
local package_path = require("mason-registry").get_package("codelldb"):get_install_path()
local codelldb = package_path .. "/extension/adapter/codelldb"
local library_path = package_path .. "/extension/lldb/lib/liblldb.dylib"
local uname = io.popen("uname"):read("*l")
if uname == "Linux" then
library_path = package_path .. "/extension/lldb/lib/liblldb.so"
end
opts.dap = {
adapter = require("rustaceanvim.config").get_codelldb_adapter(codelldb, library_path),
}
end
vim.g.rustaceanvim = vim.tbl_deep_extend("keep", vim.g.rustaceanvim or {}, opts or {})
if vim.fn.executable("rust-analyzer") == 0 then
LazyVim.error(
@ -92,6 +137,9 @@ return {
"neovim/nvim-lspconfig",
opts = {
servers = {
bacon_ls = {
enabled = diagnostics == "bacon-ls",
},
rust_analyzer = { enabled = false },
},
},

View file

@ -130,9 +130,7 @@ return {
optional = true,
opts = {
sources = {
completion = {
enabled_providers = { "dadbod" },
},
default = { "dadbod" },
providers = {
dadbod = { name = "Dadbod", module = "vim_dadbod_completion.blink" },
},

View file

@ -30,7 +30,7 @@ return {
vim.g.vimtex_quickfix_method = vim.fn.executable("pplatex") == 1 and "pplatex" or "latexlog"
end,
keys = {
{ "<localLeader>l", "", desc = "+vimtex" },
{ "<localLeader>l", "", desc = "+vimtex", ft = "tex" },
},
},

View file

@ -0,0 +1,51 @@
return {
-- disable snacks indent when indent-blankline is enabled
{
"snacks.nvim",
opts = {
indent = { enabled = false },
},
},
{
"lukas-reineke/indent-blankline.nvim",
event = "LazyFile",
opts = function()
Snacks.toggle({
name = "Indention Guides",
get = function()
return require("ibl.config").get_config(0).enabled
end,
set = function(state)
require("ibl").setup_buffer(0, { enabled = state })
end,
}):map("<leader>ug")
return {
indent = {
char = "",
tab_char = "",
},
scope = { show_start = false, show_end = false },
exclude = {
filetypes = {
"Trouble",
"alpha",
"dashboard",
"help",
"lazy",
"mason",
"neo-tree",
"notify",
"snacks_dashboard",
"snacks_notif",
"snacks_terminal",
"snacks_win",
"toggleterm",
"trouble",
},
},
}
end,
main = "ibl",
},
}

View file

@ -1,54 +1,64 @@
-- animations
return {
"echasnovski/mini.animate",
recommended = true,
event = "VeryLazy",
cond = vim.g.neovide == nil,
opts = function(_, opts)
-- don't use animate when scrolling with the mouse
local mouse_scrolled = false
for _, scroll in ipairs({ "Up", "Down" }) do
local key = "<ScrollWheel" .. scroll .. ">"
vim.keymap.set({ "", "i" }, key, function()
mouse_scrolled = true
return key
end, { expr = true })
end
-- disable snacks scroll when animate is enabled
{
"snacks.nvim",
opts = {
scroll = { enabled = false },
},
},
vim.api.nvim_create_autocmd("FileType", {
pattern = "grug-far",
callback = function()
vim.b.minianimate_disable = true
end,
})
-- setup animate
{
"echasnovski/mini.animate",
event = "VeryLazy",
cond = vim.g.neovide == nil,
opts = function(_, opts)
-- don't use animate when scrolling with the mouse
local mouse_scrolled = false
for _, scroll in ipairs({ "Up", "Down" }) do
local key = "<ScrollWheel" .. scroll .. ">"
vim.keymap.set({ "", "i" }, key, function()
mouse_scrolled = true
return key
end, { expr = true })
end
Snacks.toggle({
name = "Mini Animate",
get = function()
return not vim.g.minianimate_disable
end,
set = function(state)
vim.g.minianimate_disable = not state
end,
}):map("<leader>ua")
vim.api.nvim_create_autocmd("FileType", {
pattern = "grug-far",
callback = function()
vim.b.minianimate_disable = true
end,
})
local animate = require("mini.animate")
return vim.tbl_deep_extend("force", opts, {
resize = {
timing = animate.gen_timing.linear({ duration = 50, unit = "total" }),
},
scroll = {
timing = animate.gen_timing.linear({ duration = 150, unit = "total" }),
subscroll = animate.gen_subscroll.equal({
predicate = function(total_scroll)
if mouse_scrolled then
mouse_scrolled = false
return false
end
return total_scroll > 1
end,
}),
},
})
end,
Snacks.toggle({
name = "Mini Animate",
get = function()
return not vim.g.minianimate_disable
end,
set = function(state)
vim.g.minianimate_disable = not state
end,
}):map("<leader>ua")
local animate = require("mini.animate")
return vim.tbl_deep_extend("force", opts, {
resize = {
timing = animate.gen_timing.linear({ duration = 50, unit = "total" }),
},
scroll = {
timing = animate.gen_timing.linear({ duration = 150, unit = "total" }),
subscroll = animate.gen_subscroll.equal({
predicate = function(total_scroll)
if mouse_scrolled then
mouse_scrolled = false
return false
end
return total_scroll > 1
end,
}),
},
})
end,
},
}

View file

@ -34,13 +34,33 @@ return {
vim.b.miniindentscope_disable = true
end,
})
vim.api.nvim_create_autocmd("User", {
pattern = "SnacksDashboardOpened",
callback = function(data)
vim.b[data.buf].miniindentscope_disable = true
end,
})
end,
},
-- disable inent-blankline scope when mini-indentscope is enabled
{
"lukas-reineke/indent-blankline.nvim",
optional = true,
event = "LazyFile",
opts = {
scope = { enabled = false },
},
},
-- disable snacks scroll when mini-indentscope is enabled
{
"snacks.nvim",
opts = {
indent = {
scope = { enabled = false },
},
},
},
}

View file

@ -1,7 +1,7 @@
-- Show context of the current function
return {
"nvim-treesitter/nvim-treesitter-context",
event = "VeryLazy",
event = "LazyFile",
opts = function()
local tsc = require("treesitter-context")
Snacks.toggle({

View file

@ -39,11 +39,12 @@ return {
pattern = {
[".*/waybar/config"] = "jsonc",
[".*/mako/config"] = "dosini",
[".*/kitty/.+%.conf"] = "bash",
[".*/kitty/.+%.conf"] = "kitty",
[".*/hypr/.+%.conf"] = "hyprlang",
["%.env%.[%w_.-]+"] = "sh",
},
})
vim.treesitter.language.register("bash", "kitty")
add("git_config")

View file

@ -28,14 +28,24 @@ Config.options.change_detection.enabled = false
Config.options.defaults.cond = function(plugin)
return vim.tbl_contains(enabled, plugin.name) or plugin.vscode
end
vim.g.snacks_animate = false
-- Add some vscode specific keymaps
vim.api.nvim_create_autocmd("User", {
pattern = "LazyVimKeymapsDefaults",
callback = function()
-- VSCode-specific keymaps for search and navigation
vim.keymap.set("n", "<leader><space>", "<cmd>Find<cr>")
vim.keymap.set("n", "<leader>/", [[<cmd>lua require('vscode').action('workbench.action.findInFiles')<cr>]])
vim.keymap.set("n", "<leader>ss", [[<cmd>lua require('vscode').action('workbench.action.gotoSymbol')<cr>]])
-- Keep undo/redo lists in sync with VsCode
vim.keymap.set("n", "u", "<Cmd>call VSCodeNotify('undo')<CR>")
vim.keymap.set("n", "<C-r>", "<Cmd>call VSCodeNotify('redo')<CR>")
-- Navigate VSCode tabs like lazyvim buffers
vim.keymap.set("n", "<S-h>", "<Cmd>call VSCodeNotify('workbench.action.previousEditor')<CR>")
vim.keymap.set("n", "<S-l>", "<Cmd>call VSCodeNotify('workbench.action.nextEditor')<CR>")
end,
})
@ -44,6 +54,15 @@ function LazyVim.terminal()
end
return {
{
"snacks.nvim",
opts = {
indent = { enabled = false },
scroll = { enabled = false },
notifier = { enabled = false },
statuscolumn = { enabled = false },
},
},
{
"LazyVim/LazyVim",
config = function(_, opts)