
A lightweight popup for writing Git commit messages directly within Neovim.
It facilitates a descriptive commit style (e.g. Mitchell Hashimoto) by providing a dedicated writing environment.
CommitPad focuses on one thing: delivering the best commit experience. It doesn't replace a full Git toolkit.
filetype=markdown buffer, enabling your formatters, linters, snippets, and LSP..git directory (.git/commitpad/ or .git/worktrees/<name>/commitpad/)..gitmessage clutter or .gitignore pollution.doc: vs docs:) and structural breaks in the type[scope][!]: description format.hjkl.git push --force-with-lease.Signed-off-by) between commits.fugitive: Preserves your window layout by using a floating overlay instead of disruptive splits.$EDITOR: Instantly summon and dismiss your draft with a dedicated toggle (<leader>gc).lazygit: Leverages your full Neovim setup (LSP, spell check), avoiding the overhead of a TUI context switch.git commit -m: Enables iterative drafting and multiline formatting, rather than hasty one-liners.Lazy.nvim
{
"Sengoku11/commitpad.nvim",
dependencies = { "MunifTanjim/nui.nvim" },
cmd = { "CommitPad", "CommitPadAmend" },
keys = {
{ "<leader>gc", "<cmd>CommitPad<cr>", desc = "CommitPad" },
{ "<leader>gac", "<cmd>CommitPadAmend<cr>", desc = "CommitPadAmend" },
},
opts = {
-- Recommended options
stage_files = true, -- Display staged files in UI so you can stage/unstage without leaving the popup
},
}
Default Options
opts = {
footer = false, -- A dedicated buffer that provides a "sticky" area for repetitive tags
stage_files = false, -- Display staged files in UI (Git status pane)
hints = {
controls = true, -- Display control hints in the popup border
titles = true, -- Display annotations in popup titles
diff_counts = true, -- Display +added -deleted lines count in status headers
},
mappings = {
commit = "<leader><CR>",
commit_and_push = "<leader>gp",
clear_or_reset = "<C-l>",
jump_to_status = "<leader>l",
jump_to_input = "<leader>h",
stage_toggle = "s", -- Stage/Unstage file in the status pane when stage_files = true
},
}
vim.system)MunifTanjim/nui.nvimFor the best experience writing prose in the popup, these settings are recommended.
-- Soft wrap lines at word boundaries, preserving indentation
vim.opt.wrap = true -- Enable soft wrap (required for the options below)
vim.opt.breakindent = true -- Visual indentation matches the code level
vim.opt.linebreak = true -- Wrap at words, not arbitrary characters
-- Builtin spell check
vim.opt.spell = true
vim.opt.spelllang = { "en_us" }
vim.opt.spelloptions = "camel"