mirror of
https://github.com/iofq/nvim.nix.git
synced 2026-01-23 00:45:17 -06:00
minidiff/git
This commit is contained in:
parent
38e0a620f3
commit
96a162e9e8
4 changed files with 102 additions and 77 deletions
|
|
@ -20,7 +20,6 @@ with final.pkgs.lib; let
|
|||
copilot-lua
|
||||
diffview-nvim
|
||||
eyeliner-nvim
|
||||
gitsigns-nvim
|
||||
lazy-nvim
|
||||
mini-nvim
|
||||
neogit
|
||||
|
|
|
|||
|
|
@ -3,6 +3,44 @@ return {
|
|||
'echasnovski/mini.nvim',
|
||||
lazy = false,
|
||||
dependencies = { 'folke/snacks.nvim' },
|
||||
keys = {
|
||||
{
|
||||
'<leader>gp',
|
||||
function()
|
||||
MiniDiff.toggle_overlay(0)
|
||||
end,
|
||||
noremap = true,
|
||||
desc = 'git diff overlay',
|
||||
},
|
||||
{
|
||||
'<leader>gr',
|
||||
function()
|
||||
return MiniDiff.operator('reset') .. 'gh'
|
||||
end,
|
||||
noremap = true,
|
||||
desc = 'git diff reset',
|
||||
},
|
||||
{
|
||||
'<leader>gd',
|
||||
function()
|
||||
return MiniGit.show_at_cursor()
|
||||
end,
|
||||
noremap = true,
|
||||
desc = 'git show at cursor',
|
||||
},
|
||||
{
|
||||
'<leader>gb',
|
||||
'<Cmd>vert Git blame -- %<CR>',
|
||||
noremap = true,
|
||||
desc = 'git blame',
|
||||
},
|
||||
{
|
||||
'<leader>gg',
|
||||
':Git ',
|
||||
noremap = true,
|
||||
desc = 'git command',
|
||||
},
|
||||
},
|
||||
config = function()
|
||||
require('mini.basics').setup { mappings = { windows = true } }
|
||||
require('mini.tabline').setup {
|
||||
|
|
@ -13,17 +51,10 @@ return {
|
|||
content = {
|
||||
active = function()
|
||||
local mode, mode_hl = MiniStatusline.section_mode {}
|
||||
local git = function()
|
||||
local g = vim.b.gitsigns_head
|
||||
return (g == nil) and '' or g
|
||||
end
|
||||
local diff = function()
|
||||
local g = vim.b.gitsigns_status
|
||||
return (g == nil) and '' or g
|
||||
end
|
||||
local filename = MiniStatusline.section_filename { trunc_width = 140 }
|
||||
local diff = MiniStatusline.section_diff { trunc_width = 75, icon = '' }
|
||||
local diagnostics = MiniStatusline.section_diagnostics { trunc_width = 75 }
|
||||
local lsp = MiniStatusline.section_lsp { trunc_width = 75 }
|
||||
local filename = MiniStatusline.section_filename { trunc_width = 140 }
|
||||
local search = MiniStatusline.section_searchcount { trunc_width = 75 }
|
||||
|
||||
return MiniStatusline.combine_groups {
|
||||
|
|
@ -31,7 +62,7 @@ return {
|
|||
'%<', -- Mark general truncate point
|
||||
{ hl = 'MiniStatuslineFilename', strings = { filename } },
|
||||
'%=', -- End left alignment
|
||||
{ hl = 'MiniStatusDevinfo', strings = { git(), diff(), diagnostics, lsp } },
|
||||
{ hl = 'MiniStatusDevinfo', strings = { diff, diagnostics, lsp } },
|
||||
{ hl = mode_hl, strings = { search } },
|
||||
}
|
||||
end,
|
||||
|
|
@ -51,12 +82,29 @@ return {
|
|||
require('mini.jump2d').setup { mappings = { start_jumping = '<leader>S' } }
|
||||
require('mini.operators').setup {
|
||||
replace = {
|
||||
prefix = "gR"
|
||||
}
|
||||
prefix = 'gR',
|
||||
},
|
||||
}
|
||||
require('mini.git').setup()
|
||||
local align_blame = function(au_data)
|
||||
if au_data.data.git_subcommand ~= 'blame' then
|
||||
return
|
||||
end
|
||||
|
||||
-- Align blame output with source
|
||||
local win_src = au_data.data.win_source
|
||||
vim.wo.wrap = false
|
||||
vim.fn.winrestview { topline = vim.fn.line('w0', win_src) }
|
||||
vim.api.nvim_win_set_cursor(0, { vim.fn.line('.', win_src), 0 })
|
||||
|
||||
-- Bind both windows so that they scroll together
|
||||
vim.wo[win_src].scrollbind, vim.wo.scrollbind = true, true
|
||||
end
|
||||
vim.api.nvim_create_autocmd('User', { pattern = 'MiniGitCommandSplit', callback = align_blame })
|
||||
|
||||
require('mini.surround').setup()
|
||||
require('mini.splitjoin').setup { detect = { separator = '[,;\n]' } }
|
||||
|
||||
require('mini.diff').setup { options = { wrap_goto = true } }
|
||||
local miniclue = require('mini.clue')
|
||||
miniclue.setup {
|
||||
triggers = {
|
||||
|
|
@ -99,12 +147,10 @@ return {
|
|||
integrations = {
|
||||
map.gen_integration.builtin_search(),
|
||||
map.gen_integration.diagnostic(),
|
||||
map.gen_integration.gitsigns(),
|
||||
map.gen_integration.diff(),
|
||||
},
|
||||
window = {
|
||||
show_integration_count = false,
|
||||
winblend = 0,
|
||||
width = 5,
|
||||
},
|
||||
}
|
||||
vim.keymap.set('n', '<leader>nm', map.toggle, { noremap = true, desc = 'minimap open' })
|
||||
|
|
|
|||
|
|
@ -107,55 +107,11 @@ return {
|
|||
vim.cmd('colorscheme terafox')
|
||||
vim.api.nvim_set_hl(0, 'StatusLine', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 'none' })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = 'green', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = 'red', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = 'green', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'GitSignsCurrentLineBlame', { link = 'Comment' })
|
||||
vim.api.nvim_set_hl(0, 'MiniDiffSignAdd', { fg = 'green', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'MiniDiffSignDelete', { fg = 'red', bold = true })
|
||||
vim.api.nvim_set_hl(0, 'MiniDiffSignChange', { fg = 'green', bold = true })
|
||||
end,
|
||||
},
|
||||
{
|
||||
'lewis6991/gitsigns.nvim',
|
||||
event = 'VeryLazy',
|
||||
opts = {
|
||||
signcolumn = false,
|
||||
numhl = true,
|
||||
on_attach = function()
|
||||
local gs = package.loaded.gitsigns
|
||||
vim.keymap.set('n', '<leader>gg', gs.preview_hunk, { desc = 'git preview hunk' })
|
||||
vim.keymap.set('n', '<leader>gR', gs.reset_hunk, { desc = 'git reset hunk' })
|
||||
vim.keymap.set('n', '<leader>gs', gs.stage_hunk, { desc = 'git stage hunk' })
|
||||
vim.keymap.set('n', '<leader>gd', gs.diffthis, { desc = 'git diff hunk' })
|
||||
vim.keymap.set('n', '<leader>gb', function()
|
||||
gs.blame_line { full = true }
|
||||
end, { desc = 'git blame_line current' })
|
||||
vim.keymap.set('n', '<leader>gB', gs.toggle_current_line_blame, { desc = 'git blame_line toggle' })
|
||||
vim.keymap.set('v', '<leader>gR', function()
|
||||
gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') }
|
||||
end, { desc = 'git reset hunk' })
|
||||
|
||||
-- Navigation
|
||||
vim.keymap.set('n', ']g', function()
|
||||
if vim.wo.diff then
|
||||
return ']c'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.next_hunk { target = 'all' }
|
||||
end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
|
||||
vim.keymap.set('n', '[g', function()
|
||||
if vim.wo.diff then
|
||||
return '[c'
|
||||
end
|
||||
vim.schedule(function()
|
||||
gs.prev_hunk { target = 'all' }
|
||||
end)
|
||||
return '<Ignore>'
|
||||
end, { expr = true })
|
||||
end,
|
||||
},
|
||||
},
|
||||
{
|
||||
'gbprod/yanky.nvim',
|
||||
opts = {
|
||||
|
|
|
|||
|
|
@ -124,91 +124,115 @@ return {
|
|||
function()
|
||||
Snacks.picker.smart()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find files' },
|
||||
noremap = true,
|
||||
desc = 'Fuzzy find files',
|
||||
},
|
||||
{
|
||||
'<leader>fe',
|
||||
function()
|
||||
Snacks.explorer()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'snacks explorer' },
|
||||
noremap = true,
|
||||
desc = 'snacks explorer',
|
||||
},
|
||||
{
|
||||
'<leader>fE',
|
||||
function()
|
||||
Snacks.explorer.reveal()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'snacks explorer open current file' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'snacks explorer open current file',
|
||||
},
|
||||
{
|
||||
'<leader>fg',
|
||||
function()
|
||||
Snacks.picker.git_files()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find files' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Fuzzy find files',
|
||||
},
|
||||
{
|
||||
'<leader>fa',
|
||||
function()
|
||||
Snacks.picker.grep()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find grep' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Fuzzy find grep',
|
||||
},
|
||||
{
|
||||
'<leader>f8',
|
||||
function()
|
||||
Snacks.picker.grep_word()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find grep word' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Fuzzy find grep word',
|
||||
},
|
||||
{
|
||||
'<leader>f?',
|
||||
function()
|
||||
Snacks.picker.pickers()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'See all pickers' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'See all pickers',
|
||||
},
|
||||
{
|
||||
"<leader>f'",
|
||||
function()
|
||||
Snacks.picker.marks()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Pick marks' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Pick marks',
|
||||
},
|
||||
{
|
||||
'<leader>fu',
|
||||
function()
|
||||
Snacks.picker.undo()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Pick undotree' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Pick undotree',
|
||||
},
|
||||
{
|
||||
'<leader>fj',
|
||||
function()
|
||||
Snacks.picker.jumps()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Pick jumps' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Pick jumps',
|
||||
},
|
||||
{
|
||||
'<leader>f.',
|
||||
function()
|
||||
Snacks.picker.resume()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find resume' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Fuzzy find resume',
|
||||
},
|
||||
{
|
||||
'<leader><leader>',
|
||||
function()
|
||||
Snacks.picker.buffers()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'Fuzzy find buffers' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'Fuzzy find buffers',
|
||||
},
|
||||
{
|
||||
'<leader>fn',
|
||||
function()
|
||||
Snacks.picker.notifications()
|
||||
end,
|
||||
{ noremap = true, silent = true, desc = 'pick notifications' },
|
||||
noremap = true,
|
||||
silent = true,
|
||||
desc = 'pick notifications',
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue