nvim config

This commit is contained in:
Harivansh Rathi 2025-10-22 22:19:33 -04:00
commit 57407e8ef8
21 changed files with 984 additions and 0 deletions

8
lua/plugins/arrow.lua Normal file
View file

@ -0,0 +1,8 @@
return {
"otavioschwanck/arrow.nvim",
event = 'VeryLazy',
opts = {
show_icons = true,
leader_key = '-'
}
}

View file

@ -0,0 +1,7 @@
return {
"windwp/nvim-autopairs",
event = "InsertEnter",
config = function()
require("nvim-autopairs").setup({})
end,
}

130
lua/plugins/blink.lua Normal file
View file

@ -0,0 +1,130 @@
return {
"saghen/blink.cmp",
lazy = false,
dependencies = {
"rafamadriz/friendly-snippets",
"zbirenbaum/copilot.lua",
"giuxtaposition/blink-cmp-copilot",
"mikavilpas/blink-ripgrep.nvim",
"xzbdmw/colorful-menu.nvim",
},
version = "v0.*",
opts = function()
local has_colorful, colorful = pcall(require, "colorful-menu")
return {
keymap = {
preset = "super-tab",
['<A-1>'] = { function(cmp) cmp.accept({ index = 1 }) end },
['<A-2>'] = { function(cmp) cmp.accept({ index = 2 }) end },
['<A-3>'] = { function(cmp) cmp.accept({ index = 3 }) end },
['<A-4>'] = { function(cmp) cmp.accept({ index = 4 }) end },
['<A-5>'] = { function(cmp) cmp.accept({ index = 5 }) end },
['<A-6>'] = { function(cmp) cmp.accept({ index = 6 }) end },
['<A-7>'] = { function(cmp) cmp.accept({ index = 7 }) end },
['<A-8>'] = { function(cmp) cmp.accept({ index = 8 }) end },
['<A-9>'] = { function(cmp) cmp.accept({ index = 9 }) end },
['<A-0>'] = { function(cmp) cmp.accept({ index = 10 }) end },
},
appearance = {
use_nvim_cmp_as_default = true,
nerd_font_variant = "mono",
kind_icons = {
Copilot = "",
Text = '󰉿',
Method = '󰊕',
Function = '󰊕',
Constructor = '󰒓',
Field = '󰜢',
Variable = '󰆦',
Property = '󰖷',
Class = '󱡠',
Interface = '󱡠',
Struct = '󱡠',
Module = '󰅩',
Unit = '󰪚',
Value = '󰦨',
Enum = '󰦨',
EnumMember = '󰦨',
Keyword = '󰻾',
Constant = '󰏿',
Snippet = '󱄽',
Color = '󰏘',
File = '󰈔',
Reference = '󰬲',
Folder = '󰉋',
Event = '󱐋',
Operator = '󰪚',
TypeParameter = '󰬛',
},
},
completion = {
menu = {
border = "single",
draw = has_colorful and {
columns = { { "kind_icon" }, { "label", gap = 1 } },
components = {
label = {
text = colorful.blink_components_text,
highlight = colorful.blink_components_highlight,
},
},
} or {
columns = { { "kind_icon" }, { "label", gap = 1 } },
}
},
documentation = {
window = {
border = "single",
}
}
},
signature = { window = { border = 'single' } },
cmdline = { enabled = true },
sources = {
default = { "snippets", "lsp", "path", "buffer", "copilot", "ripgrep" },
providers = {
copilot = {
name = "copilot",
module = "blink-cmp-copilot",
score_offset = 100,
async = true,
transform_items = function(_, items)
local CompletionItemKind = require("blink.cmp.types").CompletionItemKind
local kind_idx = #CompletionItemKind + 1
CompletionItemKind[kind_idx] = "Copilot"
for _, item in ipairs(items) do
item.kind = kind_idx
end
return items
end,
},
ripgrep = {
module = "blink-ripgrep",
name = "Ripgrep",
opts = {
prefix_min_len = 3,
backend = {
context_size = 5,
ripgrep = {
max_filesize = "1M",
additional_rg_options = {},
},
},
},
},
},
},
}
end,
opts_extend = {
"sources.default",
"sources.providers",
},
}

View file

@ -0,0 +1,68 @@
return {
{
"datsfilipe/vesper.nvim",
name = "vesper",
priority = 1000,
lazy = false,
},
{
'maxmx03/solarized.nvim',
lazy = false,
priority = 1000,
---@type solarized.config
opts = {},
},
{
"folke/tokyonight.nvim",
name = "tokyonight",
priority = 1000,
lazy = false,
config = function()
-- Auto-detect light/dark mode
local function set_theme()
-- Check if running in VSCode
if vim.env.VSCODE or vim.env.TERM_PROGRAM == "vscode" then
vim.o.termguicolors = true
vim.o.background = "light"
require('solarized').setup({})
vim.cmd.colorscheme("solarized")
return
end
-- Check COLORFGBG for other terminals
if os.getenv("COLORFGBG") then
local colors = vim.split(os.getenv("COLORFGBG"), ";")
if colors[2] and tonumber(colors[2]) > 7 then
vim.o.termguicolors = true
vim.o.background = "light"
require('solarized').setup({})
vim.cmd.colorscheme("solarized")
return
end
end
-- Default to dark
vim.o.background = "dark"
require("vesper").setup({ transparent = true })
vim.cmd.colorscheme("vesper")
end
-- Set theme on startup
set_theme()
-- Add command to manually toggle
vim.api.nvim_create_user_command("ToggleTheme", function()
if vim.g.colors_name == "vesper" then
vim.o.termguicolors = true
vim.o.background = "light"
require('solarized').setup({})
vim.cmd.colorscheme("solarized")
else
vim.o.background = "dark"
require("vesper").setup({ transparent = true })
vim.cmd.colorscheme("vesper")
end
end, {})
end,
},
}

14
lua/plugins/comment.lua Normal file
View file

@ -0,0 +1,14 @@
return {
"numToStr/Comment.nvim",
keys = {
{ "gcc", mode = "n", desc = "Comment toggle current line" },
{ "gc", mode = { "n", "o" }, desc = "Comment toggle linewise" },
{ "gc", mode = "x", desc = "Comment toggle linewise (visual)" },
{ "gbc", mode = "n", desc = "Comment toggle current block" },
{ "gb", mode = { "n", "o" }, desc = "Comment toggle blockwise" },
{ "gb", mode = "x", desc = "Comment toggle blockwise (visual)" },
},
config = function()
require("Comment").setup()
end,
}

18
lua/plugins/flash.lua Normal file
View file

@ -0,0 +1,18 @@
return {
"folke/flash.nvim",
event = "VeryLazy",
opts = {
modes = {
search = {
enabled = true,
}
}
},
keys = {
{ "s", mode = { "n", "x", "o" }, function() require("flash").jump() end, desc = "Flash" },
{ "S", mode = { "n", "x", "o" }, function() require("flash").treesitter() end, desc = "Flash Treesitter" },
{ "r", mode = "o", function() require("flash").remote() end, desc = "Remote Flash" },
{ "R", mode = { "o", "x" }, function() require("flash").treesitter_search() end, desc = "Treesitter Search" },
{ "<c-s>", mode = { "c" }, function() require("flash").toggle() end, desc = "Toggle Flash Search" },
},
}

72
lua/plugins/git.lua Normal file
View file

@ -0,0 +1,72 @@
return {
-- Neogit: Modern Git interface with tree view
{
"NeogitOrg/neogit",
dependencies = {
"nvim-lua/plenary.nvim", -- required
"sindrets/diffview.nvim", -- optional - Diff integration
"nvim-telescope/telescope.nvim", -- optional
},
config = function()
require('neogit').setup({
-- Neo-tree style integration
kind = "split",
commit_editor = {
kind = "split",
},
popup = {
kind = "split",
},
-- Signs for different git states
signs = {
-- { CLOSED, OPENED }
hunk = { "", "" },
item = { "", "" },
section = { "", "" },
},
-- Integrations
integrations = {
telescope = true,
diffview = true,
},
})
end,
keys = {
{ "<leader>gg", "<cmd>Neogit<cr>", desc = "Open Neogit" },
{ "<leader>gc", "<cmd>Neogit commit<cr>", desc = "Git Commit" },
{ "<leader>gp", "<cmd>Neogit push<cr>", desc = "Git Push" },
{ "<leader>gl", "<cmd>Neogit pull<cr>", desc = "Git Pull" },
},
},
-- Diffview: Enhanced diff viewing
{
"sindrets/diffview.nvim",
cmd = { "DiffviewOpen", "DiffviewClose", "DiffviewToggleFiles", "DiffviewFocusFiles" },
config = function()
require("diffview").setup({
diff_binaries = false, -- Show diffs for binaries
enhanced_diff_hl = false, -- See ':h diffview-config-enhanced_diff_hl'
git_cmd = { "git" }, -- The git executable followed by default args.
use_icons = true, -- Requires nvim-web-devicons
show_help_hints = true, -- Show hints for how to open the help panel
watch_index = true, -- Update views and index on git index changes.
})
end,
keys = {
{ "<leader>gdo", "<cmd>DiffviewOpen<cr>", desc = "Open Diffview" },
{ "<leader>gdc", "<cmd>DiffviewClose<cr>", desc = "Close Diffview" },
{ "<leader>gdh", "<cmd>DiffviewFileHistory<cr>", desc = "File History" },
},
},
-- Fugitive: Additional Git commands
{
'tpope/vim-fugitive',
cmd = { 'Git', 'Gblame', 'Gdiff', 'Gread', 'Gwrite', 'Ggrep' },
keys = {
{ '<leader>gb', '<cmd>Git blame<cr>', desc = 'Git Blame' },
{ '<leader>gd', '<cmd>Gdiff<cr>', desc = 'Git Diff (Fugitive)' },
}
},
}

15
lua/plugins/gitsigns.lua Normal file
View file

@ -0,0 +1,15 @@
return {
"lewis6991/gitsigns.nvim",
event = { "BufReadPre", "BufNewFile" },
config = function()
require("gitsigns").setup({
signs = {
add = { text = "" },
change = { text = "" },
delete = { text = "_" },
topdelete = { text = "" },
changedelete = { text = "~" },
},
})
end,
}

57
lua/plugins/lsp.lua Normal file
View file

@ -0,0 +1,57 @@
return {
{
"neovim/nvim-lspconfig",
dependencies = {
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
},
config = function()
require("mason").setup()
require("mason-lspconfig").setup({
ensure_installed = { "lua_ls", "pyright", "tsserver" },
automatic_installation = true,
})
local lspconfig = require("lspconfig")
local capabilities = vim.lsp.protocol.make_client_capabilities()
-- Basic LSP keymaps
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("UserLspConfig", {}),
callback = function(ev)
local opts = { buffer = ev.buf }
vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts)
vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts)
vim.keymap.set("n", "K", vim.lsp.buf.hover, opts)
vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts)
vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts)
vim.keymap.set({ "n", "v" }, "<leader>ca", vim.lsp.buf.code_action, opts)
vim.keymap.set("n", "gr", vim.lsp.buf.references, opts)
vim.keymap.set("n", "<leader>f", function()
vim.lsp.buf.format({ async = true })
end, opts)
end,
})
-- Setup language servers
lspconfig.lua_ls.setup({
capabilities = capabilities,
settings = {
Lua = {
diagnostics = {
globals = { "vim" },
},
},
},
})
lspconfig.pyright.setup({
capabilities = capabilities,
})
lspconfig.tsserver.setup({
capabilities = capabilities,
})
end,
},
}

20
lua/plugins/lualine.lua Normal file
View file

@ -0,0 +1,20 @@
return {
'nvim-lualine/lualine.nvim',
event = 'VeryLazy',
dependencies = { 'nvim-tree/nvim-web-devicons' },
opts = {
options = {
theme = 'auto',
component_separators = { left = '', right = '' },
section_separators = { left = '', right = '' },
},
sections = {
lualine_a = {'mode'},
lualine_b = {'branch', 'diff', 'diagnostics'},
lualine_c = {'filename'},
lualine_x = {'encoding', 'fileformat', 'filetype'},
lualine_y = {'progress'},
lualine_z = {'location'}
},
}
}

29
lua/plugins/neo-tree.lua Normal file
View file

@ -0,0 +1,29 @@
return {
"nvim-neo-tree/neo-tree.nvim",
branch = "v3.x",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-tree/nvim-web-devicons",
"MunifTanjim/nui.nvim",
},
cmd = "Neotree",
keys = {
{ "<leader>e", "<cmd>Neotree toggle<cr>", desc = "Toggle file explorer" },
},
config = function()
require("neo-tree").setup({
close_if_last_window = true,
window = {
width = 30,
},
filesystem = {
filtered_items = {
visible = true, -- Show filtered items (hidden files)
hide_dotfiles = false, -- Show dotfiles
hide_gitignored = false, -- Show git ignored files
hide_hidden = false, -- Show hidden files on Windows
},
},
})
end,
}

24
lua/plugins/telescope.lua Normal file
View file

@ -0,0 +1,24 @@
return {
"nvim-telescope/telescope.nvim",
tag = "0.1.5",
dependencies = { "nvim-lua/plenary.nvim" },
cmd = "Telescope",
keys = {
{ "<leader>ff", "<cmd>Telescope find_files<cr>", desc = "Find files" },
{ "<leader>fg", "<cmd>Telescope live_grep<cr>", desc = "Live grep" },
{ "<leader>fb", "<cmd>Telescope buffers<cr>", desc = "Buffers" },
{ "<leader>fh", "<cmd>Telescope help_tags<cr>", desc = "Help tags" },
},
config = function()
require("telescope").setup({
defaults = {
mappings = {
i = {
["<C-j>"] = "move_selection_next",
["<C-k>"] = "move_selection_previous",
},
},
},
})
end,
}

View file

@ -0,0 +1,17 @@
return {
"nvim-treesitter/nvim-treesitter",
build = ":TSUpdate",
event = { "BufReadPost", "BufNewFile" },
config = function()
require("nvim-treesitter.configs").setup({
ensure_installed = { "lua", "vim", "vimdoc", "query", "javascript", "typescript", "python", "html", "css", "json", "yaml", "markdown" },
auto_install = true,
highlight = {
enable = true,
},
indent = {
enable = true,
},
})
end,
}

18
lua/plugins/which-key.lua Normal file
View file

@ -0,0 +1,18 @@
return {
"folke/which-key.nvim",
event = 'VeryLazy',
opts = {
win = {
border = { "", "", "", "", "","", "", "" },
},
},
keys = {
{
"<leader>?",
function()
require("which-key").show({ global = false })
end,
desc = "Buffer Local Keymaps (which-key)",
},
},
}