Add gitsigns via vim.pack, track the pack lockfile

Restores plugin management after the v0.12 config rewrite dropped the
earlier `vim.pack.add` calls. Plugins now live in `config/plugins/`,
one file per plugin, so adding the next is a single require.

Sets `<leader>` to Space for the gitsigns hunk mappings, and pins
'signcolumn' open so git and diagnostic signs don't shift text.

The lockfile moves into the repo and is symlinked by bootstrap.sh, as
the vim.pack docs recommend, giving reproducible plugin revisions
across machines and a rollback path via git. vim.pack writes it with a
truncating open, so it follows the symlink rather than replacing it.

Drops the orphaned nvim-tree entry, unreferenced since the rewrite.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jonny Barnes 2026-08-08 13:57:02 +01:00
commit 509b16f543
No known key found for this signature in database
6 changed files with 72 additions and 0 deletions

View file

@ -38,6 +38,7 @@ echo "Setting up NeoVim"
test -d $HOME/.config/nvim || mkdir -p $HOME/.config/nvim test -d $HOME/.config/nvim || mkdir -p $HOME/.config/nvim
test -d $HOME/.local/share/nvim || mkdir -p $HOME/.local/share/nvim test -d $HOME/.local/share/nvim || mkdir -p $HOME/.local/share/nvim
test -L $HOME/.config/nvim/init.lua || ln -f -s $BASEDIR/neovim/init.lua $HOME/.config/nvim/init.lua test -L $HOME/.config/nvim/init.lua || ln -f -s $BASEDIR/neovim/init.lua $HOME/.config/nvim/init.lua
test -L $HOME/.config/nvim/nvim-pack-lock.json || ln -f -s $BASEDIR/neovim/nvim-pack-lock.json $HOME/.config/nvim/nvim-pack-lock.json
test -d $HOME/.config/nvim/lua || mkdir -p $HOME/.config/nvim/lua test -d $HOME/.config/nvim/lua || mkdir -p $HOME/.config/nvim/lua
test -L $HOME/.config/nvim/lua/config || ln -f -s $BASEDIR/neovim/config $HOME/.config/nvim/lua/config test -L $HOME/.config/nvim/lua/config || ln -f -s $BASEDIR/neovim/config $HOME/.config/nvim/lua/config
test -d $HOME/.config/nvim/lsp || mkdir -p $HOME/.config/nvim/lsp test -d $HOME/.config/nvim/lsp || mkdir -p $HOME/.config/nvim/lsp

View file

@ -1,3 +1,4 @@
require('config.options') require('config.options')
require('config.plugins')
require('config.diagnostics') require('config.diagnostics')
require('config.lsp') require('config.lsp')

View file

@ -1,8 +1,14 @@
-- Set before any plugin defines a <leader> mapping
vim.g.mapleader = ' '
vim.g.maplocalleader = '\\'
vim.o.autocomplete = true vim.o.autocomplete = true
vim.o.pumborder = 'rounded' vim.o.pumborder = 'rounded'
vim.o.pummaxwidth = 40 vim.o.pummaxwidth = 40
vim.o.completeopt = 'menu,menuone,noinsert,nearest' vim.o.completeopt = 'menu,menuone,noinsert,nearest'
vim.o.number = true vim.o.number = true
-- Always shown, so git/diagnostic signs don't shift the text around
vim.o.signcolumn = 'yes'
vim.o.spelllang = 'en_gb' vim.o.spelllang = 'en_gb'
vim.o.spell = true vim.o.spell = true
vim.o.termguicolors = true vim.o.termguicolors = true

View file

@ -0,0 +1,55 @@
vim.pack.add({ 'https://github.com/lewis6991/gitsigns.nvim' })
require('gitsigns').setup({
on_attach = function(bufnr)
local gitsigns = require('gitsigns')
local function map(mode, lhs, rhs, desc)
vim.keymap.set(mode, lhs, rhs, { buffer = bufnr, desc = desc })
end
-- Navigation, falling back to vim's own diff motions in diff mode
map('n', ']c', function()
if vim.wo.diff then
vim.cmd.normal({ ']c', bang = true })
else
gitsigns.nav_hunk('next')
end
end, 'Next git hunk')
map('n', '[c', function()
if vim.wo.diff then
vim.cmd.normal({ '[c', bang = true })
else
gitsigns.nav_hunk('prev')
end
end, 'Previous git hunk')
-- Actions
map('n', '<leader>hs', gitsigns.stage_hunk, 'Stage hunk')
map('n', '<leader>hr', gitsigns.reset_hunk, 'Reset hunk')
map('v', '<leader>hs', function()
gitsigns.stage_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, 'Stage selected hunk')
map('v', '<leader>hr', function()
gitsigns.reset_hunk({ vim.fn.line('.'), vim.fn.line('v') })
end, 'Reset selected hunk')
map('n', '<leader>hS', gitsigns.stage_buffer, 'Stage buffer')
map('n', '<leader>hR', gitsigns.reset_buffer, 'Reset buffer')
map('n', '<leader>hp', gitsigns.preview_hunk, 'Preview hunk')
map('n', '<leader>hd', gitsigns.diffthis, 'Diff against index')
map('n', '<leader>hb', function()
gitsigns.blame_line({ full = true })
end, 'Blame line')
map('n', '<leader>hq', gitsigns.setqflist, 'Hunks to quickfix')
-- Toggles
map('n', '<leader>tb', gitsigns.toggle_current_line_blame, 'Toggle line blame')
map('n', '<leader>td', gitsigns.toggle_deleted, 'Toggle deleted lines')
end,
})

View file

@ -0,0 +1 @@
require('config.plugins.gitsigns')

View file

@ -0,0 +1,8 @@
{
"plugins": {
"gitsigns.nvim": {
"rev": "31d6fb2d618bca1482b9f274751ead5f03461408",
"src": "https://github.com/lewis6991/gitsigns.nvim"
}
}
}