From f2e2edad1b088b2fbaba49fb5a334434343fc972 Mon Sep 17 00:00:00 2001 From: sommerfeld Date: Wed, 13 May 2026 13:43:08 +0100 Subject: feat(nvim): add :PackClean, :PackUpdate, :PackSync user commands Wraps vim.pack for a more ergonomic workflow: - :PackClean - delete plugins no longer declared in vim.pack.add() (computed from vim.pack.get() where active == false) - :PackUpdate - run vim.pack.update(nil, { force = true }); skips the confirmation buffer - :PackSync - :PackClean followed by :PackUpdate --- dot_config/nvim/lua/config/pack.lua | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 dot_config/nvim/lua/config/pack.lua (limited to 'dot_config/nvim/lua/config') diff --git a/dot_config/nvim/lua/config/pack.lua b/dot_config/nvim/lua/config/pack.lua new file mode 100644 index 0000000..bdef872 --- /dev/null +++ b/dot_config/nvim/lua/config/pack.lua @@ -0,0 +1,41 @@ +-- User commands wrapping vim.pack for ergonomic update/clean/sync workflows. + +local function orphans() + return vim + .iter(vim.pack.get()) + :filter(function(x) + return not x.active + end) + :map(function(x) + return x.spec.name + end) + :totable() +end + +local function clean() + local names = orphans() + if #names == 0 then + vim.notify("no orphan plugins", vim.log.levels.INFO) + return + end + vim.pack.del(names) +end + +local function update() + vim.pack.update(nil, { force = true }) +end + +vim.api.nvim_create_user_command("PackClean", clean, { + desc = "Remove plugins not declared in vim.pack.add()", +}) + +vim.api.nvim_create_user_command("PackUpdate", update, { + desc = "Update all plugins without confirmation", +}) + +vim.api.nvim_create_user_command("PackSync", function() + clean() + update() +end, { + desc = "Clean orphan plugins then update the rest", +}) -- cgit v1.3.1