migrate to dotter

This commit is contained in:
Alexander Navarro 2025-09-01 12:10:36 -04:00
parent c5618f2f2c
commit 23b6c0a596
265 changed files with 62 additions and 3125 deletions

View file

@ -0,0 +1,33 @@
local function select_or_create(search)
local grapple = require("grapple")
if grapple.exists(search) then
grapple.select(search)
else
grapple.tag()
end
end
return {
"cbochs/grapple.nvim",
dependencies = {
{ "nvim-tree/nvim-web-devicons", lazy = true },
},
cmd = "Grapple",
keys = {
{ "<leader><leader>a", "<cmd>Grapple toggle<cr>", desc = "Toggle bookmark for current file" },
{ "<leader><leader>D", "<cmd>Grapple reset<cr>", desc = "Delete all bookmarks" },
{ "<leader><leader>t", "<cmd>Grapple toggle_tags<cr>", desc = "Toggle bookmarks window" },
{ "<leader><leader>T", "<cmd>Grapple toggle_scopes<cr>", desc = "Toggle scopes window" },
{ "<leader><leader>n", "<cmd>Grapple cycle forward<cr>", desc = "Next bookmark" },
{ "<leader><leader>N", "<cmd>Grapple cycle backward<cr>", desc = "Prev bookmark" },
{ "<leader><leader>j", function() select_or_create({ index = 1 }) end, desc = "Go or create bookmark 1" },
{ "<leader><leader>k", function() select_or_create({ index = 2 }) end, desc = "Go or create bookmark 2" },
{ "<leader><leader>l", function() select_or_create({ index = 3 }) end, desc = "Go or create bookmark 3" },
{ "<leader><leader>ñ", function() select_or_create({ index = 4 }) end, desc = "Go or create bookmark 4" },
{ "<leader><leader>J", "<cmd>Grapple tag index=1<cr>", desc = "Override bookmark 1" },
{ "<leader><leader>K", "<cmd>Grapple tag index=2<cr>", desc = "Override bookmark 2" },
{ "<leader><leader>L", "<cmd>Grapple tag index=3<cr>", desc = "Override bookmark 3" },
{ "<leader><leader>Ñ", "<cmd>Grapple tag index=4<cr>", desc = "Override bookmark 4" },
},
}

View file

@ -0,0 +1,66 @@
return { -- Change colors.none if not using a transparent background
"catppuccin/nvim",
name = "catppuccin",
priority = 1000,
config = function()
local utils = require("catppuccin.utils.colors")
local opts = {
flavour = "macchiato",
transparent_background = true,
integrations = {
aerial = true,
blink_cmp = true,
cmp = true,
gitsigns = true,
indent_blankline = { enabled = true, scope_color = "text", },
lsp_trouble = true,
mason = true,
noice = true,
notify = true,
mini = {
enabled = true,
indentscope_color = "",
},
},
custom_highlights = function(colors)
return {
-- Fix colors for cmp
Pmenu = { bg = colors.none, blend = 0 },
FloatBorder = { bg = colors.none },
CmpItemMenu = { fg = colors.text, bg = colors.none },
-- dadbod-ui
NotificationInfo = { bg = colors.none, fg = colors.text },
NotificationWarning = { bg = colors.none, fg = colors.yellow },
NotificationError = { bg = colors.none, fg = colors.red },
-- for word diff in previews
GitSignsAddInline = {
fg = colors.teal,
bg = utils.darken(colors.teal, 0.4),
style = { "bold" },
},
GitSignsDeleteInline = {
fg = colors.red,
bg = utils.darken(colors.red, 0.4),
style = { "bold" },
},
GitSignsChangeInline = {
fg = colors.mauve,
bg = utils.darken(colors.mauve, 0.4),
style = { "bold" },
},
GitSignsDeleteVirtLn = { bg = colors.none, fg = colors.red },
MiniJump2dDim = { fg = colors.surface1 },
MiniJump2dSpot = { bg = colors.base, fg = colors.teal, style = { "bold", "underline" } },
MiniJump2dSpotAhead = { bg = colors.base, fg = colors.teal, style = { "bold", "underline" } },
MiniJump2dSpotUnique = { bg = colors.base, fg = colors.teal, style = { "bold", "underline" } },
}
end,
}
require("catppuccin").setup(opts)
vim.cmd.colorscheme("catppuccin-macchiato")
end,
}

View file

@ -0,0 +1,27 @@
return {
{
"LudoPinelli/comment-box.nvim",
opts = {
outer_blank_lines = true,
},
keys = {
{ "gcb", function() require("comment-box").lcbox() end, { desc = "Create a comment box", mode = { "n", "v" }, } },
{ "gcl", function() require("comment-box").llline() end, { desc = "Create a comment line", mode = { "n", "v" }, } },
},
},
{
"danymat/neogen",
opts = { snippet_engine = "nvim" },
dependencies = { "nvim-treesitter/nvim-treesitter" },
version = "*", -- stable releases
keys = {
{
"gcd",
function()
require("neogen").generate()
end,
desc = "Generate comment docstring",
},
},
}
}

View file

@ -0,0 +1,64 @@
return {
"saghen/blink.cmp",
lazy = false,
version = "*",
dependencies = {
"neovim/nvim-lspconfig",
"echasnovski/mini.nvim",
"folke/lazydev.nvim",
{ "saghen/blink.compat", version = "*", },
},
opts = function()
local window_options = {
border = "rounded",
winblend = vim.o.pumblend,
}
---@module 'blink.cmp'
---@type blink.cmp.Config
return {
appearance = {
nerd_font_variant = 'mono'
},
completion = {
accept = { auto_brackets = { enabled = true }, },
-- Show documentation when selecting a completion item
documentation = { auto_show = true, auto_show_delay_ms = 500 },
-- Display a preview of the selected item on the current line
ghost_text = { enabled = true },
},
keymap = {
preset = "enter",
["<C-j>"] = { 'select_next', 'fallback' },
["<C-k>"] = { 'select_prev', 'fallback' },
["<C-u>"] = { 'scroll_documentation_up', 'fallback' },
["<C-d>"] = { 'scroll_documentation_down', 'fallback' },
},
sources = {
providers = {
lazydev = { name = "LazyDev", module = "lazydev.integrations.blink" },
luasnip = {
name = 'luasnip',
module = 'blink.compat.source',
score_offset = -3,
opts = {
use_show_condition = false,
show_autosnippets = true,
},
},
},
default = {
"lsp",
"path",
"snippets",
"buffer",
"lazydev",
},
per_filetype = {
sql = { 'snippets', 'dadbod', 'buffer' },
},
},
}
end
}

View file

@ -0,0 +1,98 @@
return {
{
"mfussenegger/nvim-dap",
dependencies = {
{
"igorlfs/nvim-dap-view",
---@module 'dap-view'
---@type dapview.Config
opts = {
auto_toggle = true,
switchbuf = "useopen,uselast",
winbar = {
sections = { "watches", "scopes", "breakpoints", "repl", "console" },
controls = {
enabled = true,
},
},
windows = {
terminal = {
start_hidden = true,
}
}
},
},
},
config = function()
local dap = require("dap")
dap.adapters.codelldb = {
type = "executable",
command = "codelldb",
}
dap.listeners.before['event_initialized']['toggle_lsp_virtual_text'] = function()
vim.lsp.inlay_hint.enable(false)
end
dap.listeners.after['event_terminated']['toggle_lsp_virtual_text'] = function()
vim.lsp.inlay_hint.enable(true)
end
require("nvim-dap-virtual-text").setup()
end,
keys = {
{
"<leader>dd",
function()
local dap = require("dap")
if dap.status() == "" then
dap.run_last()
else
dap.restart()
end
end,
desc = "Run last or restart debugger"
},
{ "<leader>db", function() require("dap").toggle_breakpoint() end, desc = "Toggle breakpoint" },
{
"<leader>dB",
function()
vim.ui.input({ prompt = "Breakpoint condition: " }, function(input)
require("dap").set_breakpoint(input)
end)
end,
desc = "Conditional Breakpoint",
},
{ "<leader>dw", function() require("dap-view").add_expr() end, desc = "Watch expresion under cursor", mode = { "n", "v" } },
{
"<leader>dW",
function()
vim.ui.input({ prompt = "Watch expresion: " }, function(input)
require("dap-view").add_expr(input)
end)
end,
desc = "Watch expression",
},
{ "<leader>dj", function() require("dap").step_over() end, desc = "Step over" },
{ "<leader>dJ", function() require("dap").continue() end, desc = "Continue" },
{ "<leader>dl", function() require("dap").step_into() end, desc = "Step into" },
{ "<leader>dk", function() require("dap").step_out() end, desc = "Step out" },
{ "<leader>dh", function() require("dap.ui.widgets").hover() end, desc = "Show expresion under cursor" },
{ "<leader>dx", function() require("dap").clear_breakpoints() end, desc = "Clear breakpoint" },
{ "<leader>dX", function() require("dap").terminate() end, desc = "Terminate" },
{ "<leader>ud", function() require("dap-view").toggle(true) end, desc = "Toggle dap-view" },
}
},
{
"theHamsta/nvim-dap-virtual-text",
dependencies = { "mfussenegger/nvim-dap", "nvim-treesitter/nvim-treesitter" },
config = function()
require('nvim-dap-virtual-text').setup({
only_first_definition = false,
all_references = true,
virt_text_pos = "eol",
})
end
},
}

View file

@ -0,0 +1,43 @@
return {
"mikavilpas/yazi.nvim",
event = "VeryLazy",
dependencies = {
{ "nvim-lua/plenary.nvim", lazy = true },
},
-- 👇 if you use `open_for_directories=true`, this is recommended
init = function()
-- More details: https://github.com/mikavilpas/yazi.nvim/issues/802
-- vim.g.loaded_netrw = 1
vim.g.loaded_netrwPlugin = 1
end,
keys = {
{
"<leader>e",
"<cmd>Yazi<cr>",
desc = "Open yazi at the current file",
},
-- {
-- -- Open in the current working directory
-- "<leader>E",
-- "<cmd>Yazi cwd<cr>",
-- desc = "Open the file manager in nvim's working directory",
-- },
},
opts = {
-- if you want to open yazi instead of netrw, see below for more info
open_for_directories = true,
open_multiple_tabs = true,
floating_window_scaling_factor = 1,
keymaps = {
show_help = '<f1>',
open_file_in_vertical_split = '<c-v>',
open_file_in_horizontal_split = '<c-s>',
open_file_in_tab = '<c-t>',
grep_in_directory = '<c-w>',
cycle_open_buffers = '<tab>',
copy_relative_path_to_selected_files = '<c-y>',
send_to_quickfix_list = '<c-q>',
change_working_directory = "<c-\\>",
},
},
}

View file

@ -0,0 +1,122 @@
return {
"stevearc/conform.nvim",
event = { "BufWritePre" },
cmd = { "ConformInfo" },
opts = {
-- See available formatters in: https://github.com/stevearc/conform.nvim#formatters
-- Formatters can be installed by mason
formatters_by_ft = {
-- Conform will run multiple formatters sequentially
-- Use a stop_after_first = true to run only the first available formatters
-- Use the "_" filetype to run formatters on filetypes that don't
-- have other formatters configured.
["_"] = { "trim_whitespace" },
blade = { "blade-formatter" },
css = { "biome" },
go = { "gofumpt", "goimports_reviser", "golines" },
html = { "djlint", "prettierd", stop_after_first = true },
htmldjango = { "djlint", stop_after_first = true },
javascript = { "biome" },
javascriptreact = { "biome" },
json = { "biome" },
jsonc = { "biome" },
lua = { "stylua" },
markdown = { "markdownlint" },
php = { "pint" },
python = { "ruff_format", "ruff_organize_imports" },
rust = { "rustfmt" },
scss = { "biome", "prettierd", "prettier", stop_after_first = true },
sh = { "shfmt" },
sql = { "sleek" },
toml = { "taplo" },
typescript = { "biome" },
typescriptreact = { "biome" },
xml = { "lemminx" },
zsh = { "shfmt" },
},
formatters = {
djlint = {
prepend_args = {
"--format-css",
"--indent-css",
"2",
"--format-js",
"--indent-js",
"2",
"--indent",
"2",
"--preserve-blank-lines",
"--quiet"
}
}
},
format_on_save = function(bufnr)
-- Disable with a global or buffer-local variable
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
return { timeout_ms = 2000, lsp_fallback = true }
end,
},
config = function(_, opts)
require("conform").setup(opts)
local function toggleAutoFormat()
-- to make this global, change b to g
if vim.b.disable_autoformat == nil then
vim.b.disable_autoformat = true
print("Autoformat set to: " .. tostring(not vim.b.disable_autoformat))
return
end
vim.b.disable_autoformat = not vim.b.disable_autoformat
print("Autoformat set to: " .. tostring(not vim.b.disable_autoformat))
end
vim.keymap.set("n", "<leader>uf", toggleAutoFormat, { desc = "Toggle auto format", silent = true })
vim.api.nvim_create_user_command("Fmt", function(args)
local range = nil
if args.count ~= -1 then
local end_line = vim.api.nvim_buf_get_lines(0, args.line2 - 1, args.line2, true)[1]
range = {
start = { args.line1, 0 },
["end"] = { args.line2, end_line:len() },
}
end
local function callback(err, did_edit)
if not did_edit then
vim.notify("The file was not formatted:\n" .. tostring(err), vim.log.levels.ERROR)
return
end
if args.bang then
vim.cmd("w")
end
end
require("conform").format(
{
async = true,
lsp_format = "fallback",
range = range,
formatters = args.fargs
},
callback
)
end, {
range = true,
bang = true,
force = true,
desc = "Format the document",
nargs = '*',
-- complete = function()
-- local formatters = require('conform').formatters_by_ft
--
-- return vim.tbl_keys(formatters)
-- end
})
end,
}

View file

@ -0,0 +1,35 @@
return {
"ibhagwan/fzf-lua",
lazy = false, -- Required to register vim.ui.select() wrapper
dependencies = { "echasnovski/mini.nvim" },
config = function()
require("fzf-lua").setup({
winopts = {
height = 0.85,
width = 0.90,
},
files = {
-- path_shorten = true,
cwd_prompt = false,
-- formatter = "path.filename_first",
},
})
require("fzf-lua").register_ui_select()
end,
keys = {
{ "<leader>ff", function() require("fzf-lua").files() end, desc = "Find files" },
{ "<leader>fb", function() require("fzf-lua").buffers() end, desc = "Find buffers" },
{ "<leader>fw", function() require("fzf-lua").grep_cword() end, desc = "Find word under cursor" },
{ "<leader>fW", function() require("fzf-lua").live_grep_native() end, desc = "Find word (live grep)" },
{ "<leader>fw", function() require("fzf-lua").grep_visual() end, desc = "Find selection", mode = { "v" } },
{ "<leader>fw", function() require("fzf-lua").grep_cword() end, desc = "Find word under cursor" },
{ "<leader>fg", function() require("fzf-lua").git_bcommits() end, desc = "Find commit log for current buffer" },
{ "<leader>fl", function() require("fzf-lua").lsp_document_symbols() end, desc = "Find LSP Symbols" },
{ "<leader>fr", function() require("fzf-lua").registers() end, desc = "Find registers" },
{ "<leader>fk", function() require("fzf-lua").keymaps() end, desc = "Find keymaps" },
{ "<leader>fh", function() require("fzf-lua").helptags() end, desc = "Find help tags" },
}
}

View file

@ -0,0 +1,29 @@
return {
'neovim/nvim-lspconfig',
'tpope/vim-sleuth', -- Detect tabstop and shiftwidth automatically
{
"mason-org/mason.nvim",
opts = {}
},
{
"ckolkey/ts-node-action",
dependencies = { "nvim-treesitter" },
opts = {},
keys = {
{ "<leader>ls", function() require("ts-node-action").node_action() end, desc = "Node Action" }
}
},
{
-- allow to reuse the same nvim instance when opening files in the same terminal context
"willothy/flatten.nvim",
opts = {
integrations = {
kitty = true,
wezterm = false,
},
},
-- Ensure that it runs first to minimize delay when opening file from terminal
lazy = false,
priority = 1001,
},
}

View file

@ -0,0 +1,24 @@
return {
{
'mrcjkb/rustaceanvim',
version = '^6', -- Recommended
lazy = false, -- This plugin is already lazy
},
{
-- `lazydev` configures Lua LSP for your Neovim config, runtime and plugins
-- used for completion, annotations and signatures of Neovim apis
'folke/lazydev.nvim',
ft = 'lua',
opts = {
library = {
-- Load luvit types when the `vim.uv` word is found
{ path = "${3rd}/luv/library", words = { "vim%.uv" } }
},
},
},
{
"pmizio/typescript-tools.nvim",
dependencies = { "nvim-lua/plenary.nvim", "neovim/nvim-lspconfig" },
opts = {},
}
}

View file

@ -0,0 +1,29 @@
return {
"mfussenegger/nvim-lint",
event = "VeryLazy",
config = function()
local lint = require("lint")
lint.linters.gitlint.stdin = true
lint.linters.gitlint.args = { "--contrib", "contrib-title-conventional-commits", "--msg-filename", "-" }
lint.linters_by_ft = {
-- astro = { "eslint_d" },
python = { "ruff" },
sh = { "shellcheck" },
NeogitCommitMessage = { "gitlint" },
gitcommit = { "gitlint" },
markdown = { "markdownlint" },
javascript = { "biomejs" },
typescript = { "biomejs" },
javascriptreact = { "biomejs" },
typescriptreact = { "biomejs" },
}
vim.api.nvim_create_autocmd({ "BufWritePost" }, {
callback = function()
require("lint").try_lint()
end,
})
end,
}

View file

@ -0,0 +1,14 @@
return {
{
"MeanderingProgrammer/markdown.nvim",
name = "render-markdown", -- Only needed if you have another plugin named markdown.nvim
dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.nvim' }, -- if you use the mini.nvim suite
-- dependencies = { 'nvim-treesitter/nvim-treesitter', 'echasnovski/mini.icons' }, -- if you use standalone mini plugins
opts = {
file_types = { 'markdown' },
sign = {
enabled = false,
},
},
},
}

View file

@ -0,0 +1,248 @@
return {
'echasnovski/mini.nvim',
version = '*',
dependencies = {
"rafamadriz/friendly-snippets",
},
config = function()
require('mini.icons').setup()
vim.fn.sign_define("DapBreakpoint", { text = "", texthl = "DapBreakpoint" })
vim.fn.sign_define("DapBreakpointCondition", { text = "", texthl = "DapBreakpointCondition" })
vim.fn.sign_define("DapBreakpointRejected", { text = "", texthl = "DapBreakpointRejected" })
vim.fn.sign_define("DapLogPoint", { text = ".>", texthl = "DapLogPoint" })
vim.fn.sign_define("DapStopped", { text = "󰁕 ", texthl = "DapStopped", numhl = "debugPC" })
require('mini.bracketed').setup({
diagnostic = { options = { severity = vim.diagnostic.severity.ERROR } },
})
require("mini.ai").setup({})
require('mini.cursorword').setup() -- Highlight word under cursor
require('mini.extra').setup()
require('mini.jump').setup({
mappings = {
repeat_jump = ""
}
}) -- Extend f, F, t, T
require('mini.jump2d').setup(
{
spotter = require('mini.jump2d').gen_pattern_spotter('[^%s%p]+', 'start'),
view = {
dim = true,
n_steps_ahead = 2
},
allowed_lines = {
blank = false,
cursor_at = false
},
}
)
require('mini.surround').setup()
require('mini.operators').setup()
require('mini.pairs').setup({
modes = { command = true }
})
require('mini.splitjoin').setup()
require("mini.align").setup({})
-- require('mini.animate').setup()
require('mini.notify').setup()
vim.notify = require('mini.notify').make_notify()
vim.keymap.set('n', '<Leader>un', require('mini.notify').show_history, { desc = 'Show notifications', silent = true })
require('mini.statusline').setup()
require('mini.diff').setup({ view = { style = 'sign' } })
require('mini.git').setup({})
vim.keymap.set({ 'n', 'x' }, '<Leader>gs', '<Cmd>lua MiniGit.show_at_cursor()<CR>',
{ desc = 'Show at cursor', silent = true })
local starter = require('mini.starter')
starter.setup({
footer = '',
evaluate_single = true,
items = {
starter.sections.recent_files(10, true),
starter.sections.sessions(5, true),
starter.sections.pick(),
starter.sections.builtin_actions(),
},
content_hooks = {
starter.gen_hook.adding_bullet(),
starter.gen_hook.indexing('all', { 'Builtin actions' }),
starter.gen_hook.aligning("center", "center"),
},
})
require('mini.indentscope').setup({
draw = {
animation = require('mini.indentscope').gen_animation.none(),
},
})
require('mini.move').setup({
mappings = {
-- Move visual selection in Visual mode
left = 'H',
right = 'L',
down = 'J',
up = 'K',
-- Move current line in Normal mode
line_left = '',
line_right = '',
line_down = '',
line_up = '',
},
})
require('mini.comment').setup({
options = {
-- Whether to ignore blank lines when commenting
ignore_blank_line = true,
-- Whether to ignore blank lines in actions and textobject
start_of_line = true,
},
})
local gen_loader = require('mini.snippets').gen_loader
require('mini.snippets').setup({
snippets = {
-- Load custom file with global snippets first (adjust for Windows)
gen_loader.from_file('~/.config/nvim-unstable/snippets/global.json'),
-- Load snippets based on current language by reading files from
-- "snippets/" subdirectories from 'runtimepath' directories.
gen_loader.from_lang(),
},
})
local miniclue = require("mini.clue")
miniclue.setup({
triggers = {
-- Leader triggers
{ mode = "n", keys = "<Leader>" },
{ mode = "v", keys = "<Leader>" },
{ mode = "x", keys = "<Leader>" },
-- Built-in completion
{ mode = "i", keys = "<C-x>" },
-- `g` key
{ mode = "n", keys = "g" },
{ mode = "x", keys = "g" },
-- Marks
{ mode = "n", keys = "'" },
{ mode = "n", keys = "`" },
{ mode = "x", keys = "'" },
{ mode = "x", keys = "`" },
-- Registers
{ mode = "n", keys = '"' },
{ mode = "x", keys = '"' },
{ mode = "i", keys = "<C-r>" },
{ mode = "c", keys = "<C-r>" },
-- Window commands
{ mode = "n", keys = "<C-w>" },
-- `z` key
{ mode = "n", keys = "z" },
{ mode = "x", keys = "z" },
},
-- Add a "postkeys" value to activate those keys after others
clues = {
miniclue.gen_clues.builtin_completion(),
miniclue.gen_clues.g(),
miniclue.gen_clues.marks(),
miniclue.gen_clues.registers(),
miniclue.gen_clues.windows(),
miniclue.gen_clues.z(),
{ mode = "n", keys = "<Leader><Leader>", desc = "+Bookmarks" },
{ mode = "n", keys = "<Leader><Leader>n", postkeys = "<Leader><Leader>" },
{ mode = "n", keys = "<Leader><Leader>N", postkeys = "<Leader><Leader>" },
{ mode = "n", keys = "<Leader>b", desc = "+Buffers" },
{ mode = "n", keys = "<Leader>bh", postkeys = "<Leader>b" },
{ mode = "n", keys = "<Leader>bl", postkeys = "<Leader>b" },
{ mode = "n", keys = "<Leader>d", desc = "+Debugger" },
{ mode = "n", keys = "<Leader>dh", postkeys = "<Leader>d" },
{ mode = "n", keys = "<Leader>dJ", postkeys = "<Leader>d" },
{ mode = "n", keys = "<Leader>dj", postkeys = "<Leader>d" },
{ mode = "n", keys = "<Leader>dk", postkeys = "<Leader>d" },
{ mode = "n", keys = "<Leader>dl", postkeys = "<Leader>d" },
{ mode = "n", keys = "<Leader>f", desc = "+Find" },
{ mode = "n", keys = "<Leader>g", desc = "+Git" },
{ mode = "n", keys = "<Leader>l", desc = "+LSP" },
{ mode = "n", keys = "<Leader>r", desc = "+Replace" },
{ mode = "n", keys = "<Leader>u", desc = "+UI & Config" },
{ mode = "n", keys = "<Leader>w", desc = "+Workspace" },
{ mode = "n", keys = "<Leader>p", desc = "+Run stuff" },
{ mode = "n", keys = "<Leader>z", desc = "+ZK" },
{ mode = "v", keys = "<Leader>z", desc = "+ZK" },
{ mode = "v", keys = "<Leader>a", desc = "+AI" },
{ mode = "n", keys = "<Leader>a", desc = "+AI" },
{ mode = "n", keys = "g?", desc = "+Print Debug" },
},
-- Clue window settings
window = {
-- Floating window config
config = {
width = "auto",
},
-- Delay before showing clue window
delay = 200,
-- Keys to scroll inside the clue window
scroll_down = "<C-d>",
scroll_up = "<C-u>",
},
})
local hipatterns = require('mini.hipatterns')
hipatterns.setup({
highlighters = {
-- Highlight standalone 'FIXME', 'HACK', 'TODO', 'NOTE'
fixme = { pattern = '%f[%w]()FIXME()%f[%W]', group = 'MiniHipatternsFixme' },
hack = { pattern = '%f[%w]()HACK()%f[%W]', group = 'MiniHipatternsHack' },
todo = { pattern = '%f[%w]()TODO()%f[%W]', group = 'MiniHipatternsTodo' },
note = { pattern = '%f[%w]()NOTE()%f[%W]', group = 'MiniHipatternsNote' },
-- Highlight hex color strings (`#rrggbb`) using that color
hex_color = hipatterns.gen_highlighter.hex_color(),
},
})
require('mini.sessions').setup({
autowrite = false
})
vim.keymap.set('n', '<Leader>us', function()
local default_name = require('mini.sessions').get_latest() or "Session.vim"
vim.ui.input({ prompt = "Session name: ", default = default_name }, function(input)
if input == nil then
return
end
require('mini.sessions').write(input)
end)
end,
{ desc = 'Save session', silent = true })
vim.keymap.set('n', '<Leader>uS', function() require('mini.sessions').read() end,
{ desc = 'Load session (latest)', silent = true })
vim.api.nvim_create_user_command("SessionSelect", function()
require('mini.sessions').select('read')
end, {})
vim.api.nvim_create_user_command("SessionDelete", function()
require('mini.sessions').select('delete')
end, {})
vim.keymap.set('n', '<Leader>uz', function()
require('mini.misc').zoom()
end,
{ desc = 'Toggle zoom', silent = true })
end
}

View file

@ -0,0 +1,46 @@
return {
{
"coffebar/transfer.nvim",
cmd = { "TransferInit", "DiffRemote", "TransferUpload", "TransferDownload", "TransferDirDiff", "TransferRepeat" },
opts = {},
keys = {
{ "<leader>xx", function() vim.cmd("TransferRepeat") end, desc = "Repeat last transfer" },
{ "<leader>xc", function() vim.cmd("TransferInit") end, desc = "Config transfer.nvim" },
{ "<leader>xj", function() vim.cmd("TransferDownload") end, desc = "Download current file with transfer.nvim" },
{ "<leader>xJ", function() vim.cmd("TransferDownload " .. vim.uv.cwd()) end, desc = "Download root dir with transfer.nvim" },
{ "<leader>xk", function() vim.cmd("TransferUpload") end, desc = "Upload current file with transfer.nvim" },
{ "<leader>xK", function() vim.cmd("TransferUpload " .. vim.uv.cwd()) end, desc = "Upload root dir with transfer.nvim" },
{ "<leader>xd", function() vim.cmd("DiffRemote") end, desc = "Diff current file with transfer.nvim" },
{ "<leader>xD", function() vim.cmd("TransferDirDiff " .. vim.uv.cwd()) end, desc = "Diff root dir with transfer.nvim" },
},
config = function(_, opts)
require("transfer").setup(opts)
require("yazi").config.forwarded_dds_events = {
"TransferUpload",
"TransferDownload",
"DiffRemote",
"TransferDirDiff",
}
vim.api.nvim_create_autocmd("User", {
pattern = "YaziDDSCustom",
callback = function(event)
-- vim.print(event.data);
local data = vim.json.decode(event.data.raw_data)
if event.data.type == "DiffRemote" or event.data.type == "TransferDirDiff" then
local response = vim.system({ "ya", "emit-to", "0", "close" }, { timeout = 1000 }):wait()
if response.stderr ~= "" then
vim.notify(response.stderr, vim.log.levels.ERROR)
return
end
end
vim.iter(data):each(function(path) vim.cmd(string.format("%s %s", event.data.type, path)) end)
end,
})
end
},
}

View file

@ -0,0 +1,64 @@
return {
"mrjones2014/smart-splits.nvim",
lazy = false,
build = './kitty/install-kittens.bash',
opts = { ignored_filetypes = { "nofile", "quickfix", "qf", "prompt" }, ignored_buftypes = { "nofile" } },
keys = {
{
"<C-h>",
function()
require("smart-splits").move_cursor_left()
end,
desc = "Move to left window",
},
{
"<C-j>",
function()
require("smart-splits").move_cursor_down()
end,
desc = "Move to bottom window",
},
{
"<C-k>",
function()
require("smart-splits").move_cursor_up()
end,
desc = "Move to upper window",
},
{
"<C-l>",
function()
require("smart-splits").move_cursor_right()
end,
desc = "Move to right window",
},
{
"<A-h>",
function()
require("smart-splits").resize_left()
end,
desc = "Move to left window",
},
{
"<A-j>",
function()
require("smart-splits").resize_down()
end,
desc = "Move to bottom window",
},
{
"<A-k>",
function()
require("smart-splits").resize_up()
end,
desc = "Move to upper window",
},
{
"<A-l>",
function()
require("smart-splits").resize_right()
end,
desc = "Move to right window",
},
},
}

View file

@ -0,0 +1,14 @@
return {
{
"m4xshen/hardtime.nvim",
lazy = false,
dependencies = { "MunifTanjim/nui.nvim" },
keys = {
{ "<leader>uH", "<CMD>Hardtime toggle<CR>", desc = "Toggle hardtime" }
},
opts = {
max_count = 10,
disable_mouse = false,
},
},
}

View file

@ -0,0 +1,50 @@
return {
{
"nvim-treesitter/nvim-treesitter",
lazy = false,
branch = "master",
dependencies = {
{
"JoosepAlviste/nvim-ts-context-commentstring",
opts = {
enable_autocmd = false,
},
},
{ "nvim-treesitter/nvim-treesitter-context" },
},
build = ":TSUpdate",
opts = {
auto_install = true,
highlight = { enable = true },
indent = { enable = true },
},
},
{
"nvim-treesitter/nvim-treesitter-textobjects",
dependencies = { "nvim-treesitter", },
config = function()
require 'nvim-treesitter.configs'.setup({
textobjects = {
move = {
enable = true,
set_jumps = true, -- whether to set jumps in the jumplist
goto_next = {
["]]"] = { query = { "@block.outer", "@function.outer", "@class.outer", } },
},
goto_previous = {
["[["] = { query = { "@block.outer", "@function.outer", "@class.outer", } },
}
},
},
})
local ts_repeat_move = require "nvim-treesitter.textobjects.repeatable_move"
-- Repeat movement with ; and ,
-- ensure ; goes forward and , goes backward regardless of the last direction
vim.keymap.set({ "n", "x", "o" }, ";", ts_repeat_move.repeat_last_move_previous)
vim.keymap.set({ "n", "x", "o" }, ",", ts_repeat_move.repeat_last_move_next)
end
}
}

View file

@ -0,0 +1,97 @@
---@module 'trouble'
return {
"folke/trouble.nvim",
dependencies = { "echasnovski/mini.nvim", "ibhagwan/fzf-lua" },
cmd = { "Trouble" },
keys = {
{
"<leader>fD",
"<cmd>Trouble diagnostics open<cr>",
desc = "Find diagnostics (Trouble)",
},
{
"<leader>fd",
"<cmd>Trouble diagnostics open filter.buf=0<cr>",
desc = "Find buffer diagnostics (Trouble)",
},
{
"<leader>ll",
"<cmd>Trouble symbols open<cr>",
desc = "Symbols (Trouble)",
},
{
"<leader>li",
"<cmd>Trouble lsp open<cr>",
desc = "LSP info of node (Trouble)",
},
{
"<leader>fq",
"<cmd>Trouble qflist open<cr>",
desc = "Quickfix List (Trouble)",
},
},
opts = function()
local config = require("fzf-lua.config")
local actions = require("trouble.sources.fzf").actions
config.defaults.actions.files["ctrl-t"] = actions.open
---@type trouble.Window.opts
local win_opts = {
-- size = { width = 30, height = 0.5 },
minimal = true,
border = "rounded",
position = "bottom",
}
---@type trouble.Config
return {
focus = true,
---@type trouble.Window.opts
preview = {
type = "split",
relative = "win",
position = "top",
},
---@type table<string, trouble.Action.spec|false>
keys = {
["<s-cr>"] = "jump_close",
["<cr>"] = "jump",
["<2-leftmouse>"] = "jump",
["<c-v>"] = "jump_split_close",
["<c-s>"] = "jump_vsplit_close",
["v"] = "jump_split_close",
["s"] = "jump_vsplit_close",
["<c-k>"] = "cancel", -- hack to fool myself into thinking I move to the avobe window
["a"] = function(view, ctx)
-- TODO: this is not possible until this issue is solved
-- https://github.com/neovim/neovim/issues/31206
local trouble = require("trouble")
view:action("jump_only")
vim.lsp.buf.code_action()
trouble.focus(view, ctx)
end,
},
win = win_opts,
---@type table<string, trouble.Mode>
modes = {
symbols = {
focus = true,
win = win_opts
},
lsp_references = {
focus = true,
win = win_opts
},
lsp = {
focus = true,
win = win_opts
},
}
}
end
}