configs/nvim/lua/plugins/plugins.lua
2025-03-18 22:06:14 +01:00

543 lines
15 KiB
Lua

local function masterBranch(dep)
return {
dep,
branch = "master",
}
end
return {
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = {
"bash",
"html",
"javascript",
"json",
"lua",
"markdown",
"markdown_inline",
"python",
"query",
"regex",
"tsx",
"typescript",
"vim",
"yaml",
"heex",
"elixir",
},
highlight = { enable = true },
indent = { enable = true },
incremental_selection = {
enable = true,
keymaps = {
node_incremental = "v",
node_decremental = "V",
},
},
},
},
{
"gsuuon/note.nvim",
lazy = false,
opts = {
-- opts.spaces are note workspace parent directories.
-- These directories contain a `notes` directory which will be created if missing.
-- `<space path>/notes` acts as the note root, so for space '~' the note root is `~/notes`.
-- Defaults to { '~' }.
spaces = {
"~/git",
},
-- Set keymap = false to disable keymapping
keymap = {
prefix = "<leader>n",
},
},
cmd = "Note",
ft = "note",
},
-- { "nvim-neotest/nvim-nio" },
{ "nvim-lualine/lualine.nvim" },
-- {
-- "nvim-neotest/neotest",
-- dependencies = {
-- "jfpedroza/neotest-elixir",
-- },
-- opts = {
-- adapters = {
-- ["neotest-elixir"] = {},
-- },
-- },
-- },
{
"neovim/nvim-lspconfig",
opts = {
servers = {
-- disable to prevent elixir extra to install it automatically
elixirls = false,
},
},
},
{ "chrisgrieser/nvim-spider", lazy = true },
-- {
-- "hrsh7th/nvim-cmp",
-- opts = {
-- sources = {
-- { name = "copilot", group_index = 2 },
-- -- Other Sources
-- { name = "nvim_lsp", group_index = 2 },
-- { name = "path", group_index = 2 },
-- { name = "luasnip", group_index = 2 },
-- },
-- },
-- },
{
"ibhagwan/fzf-lua",
opts = {
buffers = {
actions = {
["ctrl-w"] = { fn = require("fzf-lua.actions").buf_del, reload = true },
},
},
},
},
{
"MagicDuck/grug-far.nvim",
opts = { headerMaxWidth = 80 },
cmd = "GrugFar",
keys = {
{
"<leader>sr",
function()
local grug = require("grug-far")
local ext = vim.bo.buftype == "" and vim.fn.expand("%:e")
grug.open({
transient = true,
prefills = {
filesFilter = ext and ext ~= "" and "*." .. ext or nil,
},
})
end,
mode = { "n", "v" },
desc = "Search and Replace",
},
},
},
-- {
-- "garymjr/nvim-snippets",
-- opts = {
-- search_paths = { "/Users/kacper.marzecki@schibsted.com/.snippets" },
-- },
-- },
{
"folke/snacks.nvim",
opts = {
-- dashboard = { enabled = false },
-- scratch = { enabled = false },
-- terminal = { enabled = false },
scroll = { enabled = false },
-- indent = { enabled = false },
},
},
{
"rafamadriz/friendly-snippets",
enabled = false,
},
{
"folke/zen-mode.nvim",
keys = {
{
"<leader>z",
"<cmd>ZenMode<CR>",
desc = "Zen Mode",
},
},
opts = {
window = {
backdrop = 0.95, -- shade the backdrop of the Zen window. Set to 1 to keep the same as Normal
-- height and width can be:
-- * an absolute number of cells when > 1
-- * a percentage of the width / height of the editor when <= 1
-- * a function that returns the width or the height
width = 120, -- width of the Zen window
height = 1, -- height of the Zen window
-- by default, no options are changed for the Zen window
-- uncomment any of the options below, or add other vim.wo options you want to apply
options = {
-- signcolumn = "no", -- disable signcolumn
-- number = false, -- disable number column
-- relativenumber = false, -- disable relative numbers
-- cursorline = false, -- disable cursorline
-- cursorcolumn = false, -- disable cursor column
-- foldcolumn = "0", -- disable fold column
-- list = false, -- disable whitespace characters
},
},
plugins = {
-- disable some global vim options (vim.o...)
-- comment the lines to not apply the options
options = {
enabled = true,
ruler = false, -- disables the ruler text in the cmd line area
showcmd = false, -- disables the command in the last line of the screen
-- you may turn on/off statusline in zen mode by setting 'laststatus'
-- statusline will be shown only if 'laststatus' == 3
laststatus = 0, -- turn off the statusline in zen mode
},
twilight = { enabled = true }, -- enable to start Twilight when zen mode opens
gitsigns = { enabled = false }, -- disables git signs
tmux = { enabled = false }, -- disables the tmux statusline
todo = { enabled = false }, -- if set to "true", todo-comments.nvim highlights will be disabled
-- this will change the font size on kitty when in zen mode
-- to make this work, you need to set the following kitty options:
-- - allow_remote_control socket-only
-- - listen_on unix:/tmp/kitty
kitty = {
enabled = false,
font = "+4", -- font size increment
},
-- this will change the font size on alacritty when in zen mode
-- requires Alacritty Version 0.10.0 or higher
-- uses `alacritty msg` subcommand to change font size
alacritty = {
enabled = false,
font = "14", -- font size
},
-- this will change the font size on wezterm when in zen mode
-- See alse also the Plugins/Wezterm section in this projects README
wezterm = {
enabled = false,
-- can be either an absolute font size or the number of incremental steps
font = "+4", -- (10% increase per step)
},
},
on_open = function(win) end,
on_close = function() end,
},
},
{
"nvim-telescope/telescope.nvim",
enabled = true,
opts = {
defaults = {
mappings = {
i = {
["<C-h>"] = "which_key",
["<C-j>"] = "move_selection_next",
["<C-k>"] = "move_selection_previous",
},
},
},
},
keys = {
{
"<leader>,",
false,
},
},
},
{
"tomasky/bookmarks.nvim",
dependencies = { "nvim-telescope/telescope.nvim" },
config = function(_, opts)
require("bookmarks").setup(opts)
require("telescope").load_extension("bookmarks")
end,
},
{
"gpanders/nvim-parinfer",
},
{
"zaldih/themery.nvim",
lazy = false,
opts = {
themes = {
-- "nightfox",
-- "carbonfox",
-- "terafox",
-- "nordfox",
-- "duskfox",
-- "dawnfox",
-- "dayfox",
-- "blue",
-- "darkblue",
-- "blue",
-- "delek",
-- "desert",
-- "elflord",
-- "evening",
-- "industry",
-- "koehler",
-- "morning",
-- "murphy",
-- "pablo",
"peachpuff",
"kanagawa-wave",
"kanagawa-dragon",
"kanagawa-lotus",
-- "ron",
-- "shine",
-- "slate",
-- "torte",
-- "zellner",
"tokyonight",
"tokyonight-night",
"tokyonight-storm",
"tokyonight-day",
"tokyonight-moon",
"oxocarbon",
"vscode",
},
},
},
{ "EdenEast/nightfox.nvim", opts = {
colorblind = {
enable = true,
},
} },
{ "catppuccin/nvim", name = "catppuccin" },
{
"folke/tokyonight.nvim",
opts = {
transparent = true,
styles = {
sidebars = "transparent",
floats = "transparent",
},
},
},
{
"michaelb/sniprun",
branch = "master",
build = "sh install.sh",
config = function()
require("sniprun").setup({
repl_enable = { "Elixir_original", "elixir" },
display = {
"TerminalWithCode",
},
})
end,
},
-- {
-- "zbirenbaum/copilot.lua",
-- opts = {
-- filetypes = {
-- lua = true,
-- markdown = true,
-- javascript = true,
-- typescript = true,
-- elixir = true,
-- },
-- },
-- },
{
"robitx/gp.nvim",
opts = {
providers = {
openai = {
endpoint = "https://api.openai.com/v1/chat/completions",
secret = {
"echo ",
"$OPENAI_API_KEY",
},
},
},
},
},
{
"lmantw/themify.nvim",
lazy = false,
priority = 999,
opts = {
"folke/tokyonight.nvim",
"Yazeed1s/minimal.nvim",
masterBranch("sho-87/kanagawa-paper.nvim"),
masterBranch("ray-x/starry.nvim"),
masterBranch("sainnhe/everforest"),
"default",
},
},
{
"vhyrro/luarocks.nvim",
priority = 1000,
opts = {
luarocks_build_args = {
"--with-lua-include=/usr/include",
},
},
},
-- {
-- "stevearc/oil.nvim",
-- ---@module 'oil'
-- ---@type oil.SetupOpts
-- opts = {},
-- -- Optional dependencies
-- dependencies = { { "echasnovski/mini.icons", opts = {} } },
-- -- dependencies = { "nvim-tree/nvim-web-devicons" }, -- use if you prefer nvim-web-devicons
-- -- Lazy loading is not recommended because it is very tricky to make it work correctly in all situations.
-- lazy = false,
-- },
{
"yetone/avante.nvim",
event = "VeryLazy",
version = false,
-- for macos
opts = vim.loop.os_uname().sysname == "Darwin"
and {
provider = "copilot",
copilot = {
-- endpoint = "https://api.githubcopilot.com/chat/completions",
model = "gpt-4o",
-- timeout = 30000, -- timeout in milliseconds
-- temperature = 0, -- adjust if needed
-- max_tokens = 4096,
-- reasoning_effort = "high" -- only supported for reasoning models (o1, etc.)
},
}
-- for linux
or {
provider = "openai",
openai = {
model = "gpt-4o",
},
},
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
build = "make",
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
dependencies = {
"nvim-treesitter/nvim-treesitter",
"stevearc/dressing.nvim",
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
--- The below dependencies are optional,
"echasnovski/mini.pick", -- for file_selector provider mini.pick
"nvim-telescope/telescope.nvim", -- for file_selector provider telescope
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
"ibhagwan/fzf-lua", -- for file_selector provider fzf
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
"zbirenbaum/copilot.lua", -- for providers='copilot'
{
-- support for image pasting
"HakonHarnes/img-clip.nvim",
event = "VeryLazy",
opts = {
-- recommended settings
default = {
embed_image_as_base64 = false,
prompt_for_file_name = false,
drag_and_drop = {
insert_mode = true,
},
-- required for Windows users
use_absolute_path = true,
},
},
},
{
-- Make sure to set this up properly if you have lazy=true
"MeanderingProgrammer/render-markdown.nvim",
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
},
{ "akinsho/toggleterm.nvim", version = "*", config = true },
{
"ThePrimeagen/harpoon",
branch = "harpoon2",
dependencies = { "nvim-lua/plenary.nvim" },
opts = {
file_with_line = {
create_list_item = function()
local file_path = vim.fn.expand("%:p") -- Absolute file path
local line_number = vim.fn.line(".")
if file_path == "" then
return nil
end
return {
value = file_path .. ":" .. line_number,
context = { file_path = file_path, line_number = line_number },
}
end,
select = function(list_item, list, option)
vim.cmd("edit " .. list_item.context.file_path)
-- Jump to the line
vim.api.nvim_win_set_cursor(0, { list_item.context.line_number, 0 })
end,
},
},
},
{
"sindrets/diffview.nvim",
opts = {},
},
{
"lewis6991/gitsigns.nvim",
event = "LazyFile",
opts = {
signs = {
add = { text = "" },
change = { text = "" },
delete = { text = "" },
topdelete = { text = "" },
changedelete = { text = "" },
untracked = { text = "" },
},
signs_staged = {
add = { text = "" },
change = { text = "" },
delete = { text = "" },
topdelete = { text = "" },
changedelete = { text = "" },
},
on_attach = function(buffer)
local gs = package.loaded.gitsigns
local function map(mode, l, r, desc)
vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc })
end
-- stylua: ignore start
map("n", "]h", function()
if vim.wo.diff then
vim.cmd.normal({ "]c", bang = true })
else
gs.nav_hunk("next")
end
end, "Next Hunk")
map("n", "[h", function()
if vim.wo.diff then
vim.cmd.normal({ "[c", bang = true })
else
gs.nav_hunk("prev")
end
end, "Prev Hunk")
map("n", "]H", function() gs.nav_hunk("last") end, "Last Hunk")
map("n", "[H", function() gs.nav_hunk("first") end, "First Hunk")
map({ "n", "v" }, "<leader>ghs", ":Gitsigns stage_hunk<CR>", "Stage Hunk")
map({ "n", "v" }, "<leader>ghr", ":Gitsigns reset_hunk<CR>", "Reset Hunk")
map("n", "<leader>ghS", gs.stage_buffer, "Stage Buffer")
map("n", "<leader>ghu", gs.undo_stage_hunk, "Undo Stage Hunk")
map("n", "<leader>ghR", gs.reset_buffer, "Reset Buffer")
map("n", "<leader>ghp", gs.preview_hunk_inline, "Preview Hunk Inline")
map("n", "<leader>ghb", function() gs.blame_line({ full = true }) end, "Blame Line")
map("n", "<leader>ghB", function() gs.blame() end, "Blame Buffer")
map("n", "<leader>ghd", gs.diffthis, "Diff This")
map("n", "<leader>ghD", function() gs.diffthis("~") end, "Diff This ~")
map({ "o", "x" }, "ih", ":<C-U>Gitsigns select_hunk<CR>", "GitSigns Select Hunk")
end,
},
},
}