feat(neovim): AI and other quality of life improvements

- fix: session, conform, vim-illuminate, todo-comments, nvim-navbuddy, lspconfig plugins NOT on vscode
- new: codeium, obsidian.nvim
- Add codeium autocomplete
- fix: todo-comments: Search in hidden files (dotfiles)
- fix: trouble: wasn't working earlier
- new: Switch buffer with <alt-1>..<alt-9>
- chore: Better keybindings
This commit is contained in:
Pratik Tripathy
2024-12-17 20:14:20 +05:30
parent 20b3597501
commit 26fe26a74b
11 changed files with 136 additions and 80 deletions

View File

@@ -1,3 +1,24 @@
return {
-- TODO: Use similar keymaps to Windsurf
-- codeium
{
"Exafunction/codeium.nvim",
cond = require("config.util").is_not_vscode(),
cmd = "Codeium",
build = ":Codeium Auth",
event = "InsertEnter",
opts = {
enable_cmp_source = vim.g.ai_cmp,
virtual_text = {
enabled = not vim.g.ai_cmp,
key_bindings = {
accept = false, -- handled by nvim-cmp / blink.cmp
next = "<M-]>",
prev = "<M-[>",
},
},
},
config = function()
require("codeium").setup({})
end,
},
}

View File

@@ -1,7 +1,4 @@
return {
-- TODO: Figureout how to add custom snippets
{
-- Autocompletion
"hrsh7th/nvim-cmp",
@@ -41,12 +38,14 @@ return {
"hrsh7th/cmp-vsnip",
"hrsh7th/vim-vsnip",
"Exafunction/codeium",
},
config = function()
-- See `:help cmp`
local cmp = require("cmp")
local defaults = require("cmp.config.default")()
local luasnip = require("luasnip")
require("luasnip.loaders.from_vscode").lazy_load()
luasnip.config.setup({})
@@ -57,6 +56,13 @@ return {
-- hl_group = "CmpGhostText",
-- },
-- },
sources = {
{ name = "nvim_lsp" },
{ name = "codeium" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
@@ -97,12 +103,6 @@ return {
end
end, { "i", "s" }),
}),
sources = {
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "buffer" },
{ name = "path" },
},
sorting = defaults.sorting,
})
end,

View File

@@ -1,7 +1,7 @@
return {
{
"stevearc/conform.nvim",
-- cond = require("config.util").is_not_vscode(),
cond = require("config.util").is_not_vscode(),
lazy = true,
event = { "BufWritePre" },
opts = {
@@ -31,9 +31,9 @@ return {
local disable_filetypes = { c = true, cpp = true }
local lsp_format_opt
if disable_filetypes[vim.bo[bufnr].filetype] then
lsp_format_opt = 'never'
lsp_format_opt = "never"
else
lsp_format_opt = 'fallback'
lsp_format_opt = "fallback"
end
return {
quiet = false,
@@ -60,6 +60,6 @@ return {
},
},
},
}
},
},
}

View File

@@ -1,7 +1,4 @@
return {
-- TODO:
-- Reduce noice timeout
{ "tpope/vim-repeat" },
-- Better code folding
@@ -168,6 +165,7 @@ return {
{
"RRethy/vim-illuminate",
lazy = false,
cond = require("config.util").is_not_vscode(),
opts = {
delay = 200,
large_file_cutoff = 2000,
@@ -206,10 +204,23 @@ return {
-- Finds and lists all of the TODO, HACK, BUG, etc comment
{
"folke/todo-comments.nvim",
cond = require("config.util").is_not_vscode(),
event = "VimEnter",
dependencies = { "nvim-lua/plenary.nvim" },
config = true,
opts = {
search = {
command = "rg",
args = {
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--hidden", -- include hidden files
"--glob=!.git", -- exclude .git directory
},
},
signs = false,
keywords = {
HACK = { alt = { "TIP" } },
@@ -231,15 +242,19 @@ return {
desc = "Previous todo comment",
},
-- TODO: Include hidden files
{ "<leader>fT", "<cmd>TodoTelescope<cr>", desc = "List Todo/Fix/Fixme" },
{ "<leader>ft", "<cmd>TodoTelescope keywords=TODO,FIX,FIXME<cr>", desc = "List Todo" },
{ "<leader>df", "<cmd>TodoTelescope keywords=FIX,FIXME<cr>", desc = "TODO: FIXME Tags" },
{ "<leader>dt", "<cmd>TodoTelescope keywords=TODO<cr>", desc = "TODO: Project Todos" },
{ "<leader>dT", "<cmd>TodoTelescope<cr>", desc = "TODO: All" },
},
},
-- better diagnostics list and others
{
"folke/trouble.nvim",
lazy = false,
cmd = "Trouble",
cond = require("config.util").is_not_vscode(),
dependencies = { "nvim-tree/nvim-web-devicons" },
opts = {
-- Default: Preview in a split
preview = {
@@ -249,12 +264,11 @@ return {
size = 0.6,
},
modes = {
-- Show only the most severe diagnostics; once resolved, less severe will be shown
most_severe = {
project_warnings = {
mode = "diagnostics", -- inherit from diagnostics mode
filter = function(items)
local severity = vim.diagnostic.severity.HINT
local severity = vim.diagnostic.severity.WARN
for _, item in ipairs(items) do
severity = math.min(severity, item.severity)
end
@@ -265,13 +279,13 @@ return {
},
-- Diagnostics from buffer + Errors from current project
project_errors = {
file_hints = {
mode = "diagnostics", -- inherit from diagnostics mode
filter = {
any = {
buf = 0, -- current buffer
{
severity = vim.diagnostic.severity.ERROR,
severity = vim.diagnostic.severity.INFO,
-- limit to files in the current project
function(item)
return item.filename:find((vim.loop or vim.uv).cwd(), 1, true)
@@ -283,11 +297,10 @@ return {
},
},
keys = {
{ "<leader>dd", "<cmd>Trouble project_errors toggle focus=true<cr>", desc = "Trouble: Document Diagnostics" },
{ "<leader>dw", "<cmd>Trouble most_severe toggle focus=true<cr>", desc = "Trouble: List Project Diagnostics" },
{ "<leader>dl", "<cmd>Trouble loclist toggle focus=true<cr>", desc = "Trouble: Location List" },
{ "<leader>dd", "<cmd>Trouble file_hints toggle focus=true<cr>", desc = "Trouble: File Diagnostics" },
{ "<leader>dw", "<cmd>Trouble project_warnings toggle focus=true<cr>", desc = "Trouble: List Project Diagnostics" },
{ "<leader>dq", "<cmd>Trouble quickfix toggle focus=true<cr>", desc = "Trouble: Quickfix List" },
{ "gr", "<cmd>Trouble lsp_references toggle focus=true<cr>", desc = "Code: List References" },
{ "gr", "<cmd>Trouble lsp_references toggle focus=true<cr>", desc = "Goto References" },
{
"[q",
function()
@@ -306,6 +319,7 @@ return {
"]q",
function()
if require("trouble").is_open() then
---@diagnostic disable-next-line: missing-parameter, missing-fields
require("trouble").next({ skip_groups = true, jump = true })
else
local ok, err = pcall(vim.cmd.cnext)
@@ -349,6 +363,7 @@ return {
-- Search and jump around symbols in the buffer
{
"SmiteshP/nvim-navbuddy",
cond = require("config.util").is_not_vscode(),
dependencies = {
"SmiteshP/nvim-navic",
"MunifTanjim/nui.nvim",
@@ -472,12 +487,22 @@ return {
-- See `:help nvim-treesitter`
-- Defer Treesitter setup after first render to improve startup time of 'nvim {filename}'
vim.defer_fn(function()
---@diagnostic disable-next-line: missing-fields
require("nvim-treesitter.configs").setup({
ensure_installed = {
-- These 2 are required for cmdline
"regex",
"markdown",
"markdown_inline",
"lua",
"rust",
"typescript",
"javascript",
"bash",
"html",
"css",
"json",
"yaml",
},
auto_install = true,
@@ -538,10 +563,6 @@ return {
enable = true,
border = "none",
floating_preview_opts = {},
-- peek_definition_code = {
-- ["<leader>cd"] = { query = "@function.outer", desc = "Peek function definition on a popup" },
-- ["<leader>cD"] = { query = "@class.outer", desc = "Peek class definition on a popup" },
-- },
},
},
})

View File

@@ -10,19 +10,20 @@ return {
},
config = true,
keys = {
{ "<leader>gg", "<cmd>Neogit<cr>", desc = "Git: Open Neogit", mode = { "n" } },
{ "<leader>gL", "<cmd>Neogit log<cr>", desc = "Git: Open Log", mode = { "n" } },
{ "<leader>gg", "<cmd>Neogit<cr>", desc = "Git: Open Neogit", mode = { "n" } },
{ "<leader>gL", "<cmd>Neogit log<cr>", desc = "Git: Open Log", mode = { "n" } },
},
},
-- Git Diffview
{
"sindrets/diffview.nvim",
cond = require("config.util").is_not_vscode(),
keys = {
{ "<leader>gd", "<cmd>DiffviewOpen<cr>", desc = "Git: Open Diffview", mode = { "n" } },
{ "<leader>gD", "<cmd>DiffviewOpen<cr>", desc = "Git: Open Diffview against master", mode = { "n" } },
{ "<leader>gh", "<cmd>DiffviewFileHistory<cr>", desc = "Git: Show file history", mode = { "n" } },
{ "<leader>gd", "<cmd>DiffviewOpen<cr>", desc = "Git: Open Diffview", mode = { "n" } },
{ "<leader>gD", "<cmd>DiffviewOpen<cr>", desc = "Git: Open Diffview against master", mode = { "n" } },
{ "<leader>gh", "<cmd>DiffviewFileHistory<cr>", desc = "Git: Show file history", mode = { "n" } },
},
-- TODO:
-- Toggle Diffview keymap

View File

@@ -1,9 +1,8 @@
return {
{
-- TODO: Disable it for VSCode
--
-- Main LSP Configuration
"neovim/nvim-lspconfig",
cond = require("config.util").is_not_vscode(),
dependencies = {
{ "williamboman/mason.nvim", config = true }, -- NOTE: Must be loaded before dependants
"williamboman/mason-lspconfig.nvim",
@@ -47,7 +46,7 @@ return {
map("gd", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition")
map("<F12>", require("telescope.builtin").lsp_definitions, "[G]oto [D]efinition")
map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
-- map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation")
-- Fuzzy find all the symbols in your current document.

View File

@@ -161,22 +161,21 @@ return {
-- Keymaps for LSP Things -> In code-lsp.lua
-- Grep things -> Search
vim.keymap.set("n", "<leader>sb", function()
-- Buffer
vim.keymap.set("n", "<leader>bs", function()
require("telescope.builtin").live_grep({
grep_open_files = true,
prompt_title = "Live Grep in Open Files",
})
end, { desc = "Search Open Buffers" })
vim.keymap.set("n", "<leader>sg", require("telescope.builtin").live_grep, { desc = "Search/LiveGrep the Project" })
end, { desc = "Live Grep Open Buffers" })
vim.keymap.set("n", "<leader>bl", require("telescope.builtin").buffers, { desc = "List Buffers" })
vim.keymap.set("n", "<C-a-f>", require("telescope.builtin").live_grep, { desc = "Search/LiveGrep the Project" })
vim.keymap.set("n", "<leader>sw", require("telescope.builtin").grep_string, { desc = "Search current Word in Project" })
-- List
vim.keymap.set("n", "<leader>fb", require("telescope.builtin").buffers, { desc = "List Buffers" })
vim.keymap.set("n", "<C-a-p>", require("telescope.builtin").find_files, { desc = "List & Search Files" })
vim.keymap.set("n", "<leader>ff", require("telescope.builtin").find_files, { desc = "List & Search Files" })
vim.keymap.set("n", "<leader>fq", require("telescope.builtin").quickfixhistory, { desc = "List Quickfix History" })
vim.keymap.set("n", "<leader>dQ", require("telescope.builtin").quickfixhistory, { desc = "List Quickfix History" })
-- Git
vim.keymap.set("n", "<leader>gfb", require("telescope.builtin").git_branches, { desc = "List Git Branches" })

View File

@@ -35,7 +35,7 @@ return {
"akinsho/bufferline.nvim",
cond = require("config.util").is_not_vscode(),
dependencies = {
{ "echasnovski/mini.bufremove", version = "*" },
"echasnovski/mini.bufremove",
},
event = "VeryLazy",
keys = {
@@ -71,13 +71,19 @@ return {
-- <alt+1> ... <alt+9> to switch to a buffer
for i = 1, 9 do
vim.keymap.set("n", string.format("<A-%s>", i), string.format("<cmd>BufferLineGoToBuffer %s<CR>", i), { noremap = true, silent = true })
vim.keymap.set(
{ "n", "v" },
string.format("<A-%s>", i),
string.format("<cmd>BufferLineGoToBuffer %s<CR>", i),
{ noremap = true, silent = true }
)
end
-- Fix bufferline when restoring a session
vim.api.nvim_create_autocmd("BufAdd", {
callback = function()
vim.schedule(function()
---@diagnostic disable-next-line: param-type-mismatch
pcall(buf_line)
end)
end,
@@ -107,7 +113,7 @@ return {
},
opts = {
render = "wrapped-compact", -- Smaller popups
timeout = 2500,
timeout = 2000,
max_height = function()
return math.floor(vim.o.lines * 0.25)
end,
@@ -163,7 +169,7 @@ return {
{ find = "; after #%d+" },
{ find = "; before #%d+" },
-- Display delete, yank, jump notifications at bottom
-- When message contains following
{ find = "yanked" },
{ find = "fewer lines" },
{ find = "more lines" },

View File

@@ -108,24 +108,20 @@ return {
},
{
"folke/lazydev.nvim",
ft = "lua", -- only load on lua files
"epwalsh/obsidian.nvim",
version = "*",
dependencies = {
"nvim-lua/plenary.nvim",
},
cond = require("config.util").is_not_vscode(),
ft = "markdown",
opts = {
library = {
-- See the configuration section for more details
-- Load luvit types when the `vim.uv` word is found
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
workspaces = {
{ name = "personal", path = "~/Code/Notes" },
},
completion = {
nvim_cmp = true,
},
},
},
{
"hrsh7th/nvim-cmp",
opts = function(_, opts)
opts.sources = opts.sources or {}
table.insert(opts.sources, {
name = "lazydev",
group_index = 0, -- set group index to 0 to skip loading LuaLS completions
})
end,
},
}