aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/dot_config/nvim
diff options
context:
space:
mode:
Diffstat (limited to 'dot_config/nvim')
-rw-r--r--dot_config/nvim/init.lua1
-rw-r--r--dot_config/nvim/lua/config/pack.lua41
2 files changed, 42 insertions, 0 deletions
diff --git a/dot_config/nvim/init.lua b/dot_config/nvim/init.lua
index 82bcda0..cc5d113 100644
--- a/dot_config/nvim/init.lua
+++ b/dot_config/nvim/init.lua
@@ -125,3 +125,4 @@ require("plugins.init")
require("config.keymaps")
require("config.autocmds")
+require("config.pack")
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",
+})