- tmux: hand-rolled catppuccin theme, three-way status bar toggle, plugin cleanup - nvim: switch colorscheme to catppuccin-mocha, update lualine colors - nvim: add tmuxline.vim for tmux statusline generation - kitty: fix MesloLGS NF font typo, remove deprecated config keys Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
251 lines
7.5 KiB
Lua
251 lines
7.5 KiB
Lua
-- ~/.config/nvim/lua/plugins/init.lua
|
|
return {
|
|
-- Colorschemes
|
|
{ "gruvbox-community/gruvbox", priority = 1000 },
|
|
{ "folke/tokyonight.nvim", priority = 1000 },
|
|
{ "catppuccin/nvim", name = "catppuccin", priority = 1000 },
|
|
{ "EdenEast/nightfox.nvim", priority = 1000 },
|
|
{ "rose-pine/neovim", name = "rose-pine", priority = 1000 },
|
|
{ "rebelot/kanagawa.nvim", priority = 1000 },
|
|
{ "sainnhe/everforest", priority = 1000 },
|
|
|
|
|
|
-- Auto-save
|
|
{
|
|
"okuuva/auto-save.nvim",
|
|
version = "v1.*",
|
|
event = { "InsertLeave", "TextChanged" },
|
|
init = function()
|
|
local group = vim.api.nvim_create_augroup("autosave_message", { clear = true })
|
|
vim.api.nvim_create_autocmd("User", {
|
|
pattern = "AutoSaveWritePost",
|
|
group = group,
|
|
callback = function(opts)
|
|
local saved_buffer = opts.data and opts.data.saved_buffer
|
|
if not saved_buffer then
|
|
return
|
|
end
|
|
|
|
local filename = vim.fn.fnamemodify(vim.api.nvim_buf_get_name(saved_buffer), ":t")
|
|
if filename == "" then
|
|
filename = "[No Name]"
|
|
end
|
|
vim.notify("AutoSave: " .. filename, vim.log.levels.INFO, { title = "auto-save.nvim" })
|
|
end,
|
|
})
|
|
end,
|
|
opts = {
|
|
enabled = true,
|
|
trigger_events = {
|
|
immediate_save = { "BufLeave", "FocusLost" },
|
|
defer_save = { "InsertLeave", "TextChanged" },
|
|
cancel_deferred_save = { "InsertEnter" },
|
|
},
|
|
},
|
|
},
|
|
|
|
-- File explorer
|
|
{ import = "plugins.nvim-tree" },
|
|
|
|
-- Treesitter
|
|
{ import = "plugins.treesitter" },
|
|
|
|
-- Rainbow delimiters
|
|
{ import = "plugins.rainbow_delimiters" },
|
|
|
|
-- Git integration
|
|
{
|
|
"lewis6991/gitsigns.nvim",
|
|
event = { "BufReadPre", "BufNewFile" },
|
|
opts = {
|
|
signs = {
|
|
add = { text = "│" },
|
|
change = { text = "│" },
|
|
delete = { text = "_" },
|
|
topdelete = { text = "‾" },
|
|
changedelete = { text = "~" },
|
|
untracked = { text = "┆" },
|
|
},
|
|
signcolumn = false, -- Disable signs by default
|
|
numhl = false, -- Disable number highlights by default
|
|
linehl = false, -- Disable line highlights by default
|
|
word_diff = false,
|
|
current_line_blame = false,
|
|
}
|
|
},
|
|
{
|
|
"tpope/vim-fugitive",
|
|
cmd = { "Git", "Gvdiffsplit" },
|
|
},
|
|
{
|
|
"kdheepak/lazygit.nvim",
|
|
dependencies = { "nvim-lua/plenary.nvim" },
|
|
cmd = {
|
|
"LazyGit",
|
|
"LazyGitConfig",
|
|
"LazyGitCurrentFile",
|
|
"LazyGitFilter",
|
|
"LazyGitFilterCurrentFile",
|
|
},
|
|
keys = {
|
|
{ "<leader>gg", "<cmd>LazyGit<cr>", desc = "LazyGit" },
|
|
},
|
|
},
|
|
|
|
-- Status line
|
|
{ import = "plugins.lualine" },
|
|
|
|
-- Tmux statusline generator (run :TmuxlineSnapshot ~/.config/tmux/themes/tmuxline.tmux)
|
|
{
|
|
"edkolev/tmuxline.vim",
|
|
cmd = { "Tmuxline", "TmuxlineSnapshot" },
|
|
config = function()
|
|
vim.g.tmuxline_separators = {
|
|
left = "",
|
|
left_alt = "",
|
|
right = "",
|
|
right_alt = "",
|
|
space = " ",
|
|
}
|
|
vim.g.tmuxline_preset = {
|
|
a = "#S",
|
|
win = "#I #W",
|
|
cwin = "#I #W",
|
|
y = "%H:%M",
|
|
z = "%d %b",
|
|
}
|
|
end,
|
|
},
|
|
|
|
-- FZF
|
|
{
|
|
"junegunn/fzf",
|
|
build = function()
|
|
vim.fn["fzf#install"]()
|
|
end,
|
|
},
|
|
{ "junegunn/fzf.vim" },
|
|
|
|
-- Productivity
|
|
{ "numToStr/Comment.nvim", event = "VeryLazy", opts = {} },
|
|
{ "windwp/nvim-autopairs", event = "InsertEnter", opts = {} },
|
|
{ "tpope/vim-surround", event = "VeryLazy" },
|
|
|
|
-- -- Tmux navigation
|
|
-- { "christoomey/vim-tmux-navigator" },
|
|
|
|
-- LaTeX
|
|
{ import = "plugins.vimtex" },
|
|
|
|
-- Org-mode
|
|
{
|
|
"nvim-orgmode/orgmode",
|
|
dependencies = { "nvim-treesitter/nvim-treesitter" },
|
|
opts = {},
|
|
},
|
|
|
|
-- Telescope
|
|
{
|
|
"nvim-telescope/telescope.nvim",
|
|
dependencies = { "nvim-lua/plenary.nvim" },
|
|
keys = {
|
|
{ "<leader>ff", ":Telescope find_files<CR>", desc = "Find files" },
|
|
{ "<leader>fg", ":Telescope live_grep<CR>", desc = "Live grep" },
|
|
{ "<leader>fb", ":Telescope buffers<CR>", desc = "Buffers" },
|
|
{ "<leader>fh", ":Telescope help_tags<CR>", desc = "Help tags" },
|
|
},
|
|
},
|
|
|
|
-- Yazi file manager
|
|
{
|
|
"mikavilpas/yazi.nvim",
|
|
keys = {
|
|
{ "<leader>y", ":Yazi<CR>", desc = "Open Yazi" },
|
|
},
|
|
opts = {
|
|
open_for_directories = false,
|
|
keymaps = {
|
|
show_help = "<F1>",
|
|
},
|
|
},
|
|
},
|
|
|
|
-- Markdown
|
|
{ "SidOfc/mkdx", ft = "markdown" },
|
|
{
|
|
"MeanderingProgrammer/render-markdown.nvim",
|
|
dependencies = { "nvim-treesitter/nvim-treesitter", "echasnovski/mini.icons" },
|
|
ft = { "markdown", "norg", "rmd", "org" },
|
|
config = function()
|
|
require('render-markdown').setup({
|
|
heading = {
|
|
enabled = true,
|
|
sign = true,
|
|
position = 'overlay',
|
|
icons = { ' ', ' ', ' ', ' ', ' ', ' ' },
|
|
backgrounds = {
|
|
'RenderMarkdownH1Bg',
|
|
'RenderMarkdownH2Bg',
|
|
'RenderMarkdownH3Bg',
|
|
'RenderMarkdownH4Bg',
|
|
'RenderMarkdownH5Bg',
|
|
'RenderMarkdownH6Bg',
|
|
},
|
|
foregrounds = {
|
|
'RenderMarkdownH1',
|
|
'RenderMarkdownH2',
|
|
'RenderMarkdownH3',
|
|
'RenderMarkdownH4',
|
|
'RenderMarkdownH5',
|
|
'RenderMarkdownH6',
|
|
},
|
|
},
|
|
})
|
|
end,
|
|
},
|
|
|
|
-- Code formatting
|
|
{ import = "plugins.prettier" },
|
|
|
|
-- Copilot
|
|
{
|
|
"zbirenbaum/copilot.lua",
|
|
event = "InsertEnter",
|
|
opts = {
|
|
suggestion = { enabled = true },
|
|
panel = { enabled = true },
|
|
},
|
|
},
|
|
|
|
-- Indent guides
|
|
{
|
|
"lukas-reineke/indent-blankline.nvim",
|
|
main = "ibl",
|
|
event = { "BufReadPost", "BufNewFile" },
|
|
opts = {},
|
|
},
|
|
|
|
-- UFO (folding)
|
|
{
|
|
"kevinhwang91/nvim-ufo",
|
|
dependencies = { "kevinhwang91/promise-async" },
|
|
event = "BufReadPost",
|
|
config = function()
|
|
vim.o.foldcolumn = "0"
|
|
vim.o.foldlevel = 99
|
|
vim.o.foldlevelstart = 99
|
|
vim.o.foldenable = true
|
|
|
|
require("ufo").setup({
|
|
provider_selector = function(bufnr, filetype, buftype)
|
|
-- Disable for latex and markdown files
|
|
if filetype == "tex" or filetype == "latex" or filetype == "markdown" then
|
|
return ""
|
|
end
|
|
return { "treesitter", "indent" }
|
|
end,
|
|
})
|
|
end,
|
|
},
|
|
}
|