feat: add new plugins, refactor options, and improve blink.cmp detection

- Add focusline.nvim for scroll-aware cursor centering
- Add kitty-scrollback.nvim for Kitty terminal scrollback integration
- Add qalc.nvim for inline calculator support
- Add blink.lib as explicit dependency for blink.cmp
- Fix blink.cmp binary detection to check v2 install path first
- Add PackChanged autocmd to auto-rebuild blink.cmp after updates
- Expand inc-rename.nvim config with all available options documented
- Add luv library path to lazydev for vim.uv completions
- Consolidate leader key setup into options.lua (remove duplicate in init.lua)
- Add autoread + FocusGained/CursorHold triggers for external file changes
- Add BufReadPost autocmd to restore last cursor position on file open
- Reorganize options.lua with section headers and logical grouping
- Update plugin lockfile revisions (blink.cmp, conform, gitsigns, lualine, etc.)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-08 12:30:14 -04:00
parent 93d8f9a28d
commit c28e6c3e59
4 changed files with 184 additions and 66 deletions
+4 -8
View File
@@ -19,10 +19,6 @@
-- You should have received a copy of the GNU General Public License -- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>. -- along with this program. If not, see <https://www.gnu.org/licenses/>.
-- Set leader keys before loading any plugins
vim.g.mapleader = " "
vim.g.maplocalleader = " "
-- Initialize global registry -- Initialize global registry
_G.Config = { _G.Config = {
plugins = {}, plugins = {},
@@ -30,10 +26,10 @@ _G.Config = {
} }
-- Load core modules -- Load core modules
require('lazyload') require("lazyload") -- Plugin lazy-loading module
require('options') require("options") -- Configuration options
require('plugins') require("plugins") -- Plugin specifications and setup
require('keymaps') require("keymaps") -- Key mappings
-- Source machine-local and secret overrides (silently ignored if absent) -- Source machine-local and secret overrides (silently ignored if absent)
local user_dots = vim.fn.expand("~/.config/.user-dots/nvim/") local user_dots = vim.fn.expand("~/.config/.user-dots/nvim/")
+75 -36
View File
@@ -4,10 +4,6 @@
└────────────────────────────────────────────────────────────────┘ └────────────────────────────────────────────────────────────────┘
--]] --]]
-- Set leader keys before any other configuration
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- Copyright (C) 2026 rootiest -- Copyright (C) 2026 rootiest
-- --
-- This program is free software: you can redistribute it and/or modify -- This program is free software: you can redistribute it and/or modify
@@ -23,6 +19,32 @@ vim.g.maplocalleader = "\\"
-- You should have received a copy of the GNU General Public License -- You should have received a copy of the GNU General Public License
-- along with this program. If not, see <https://www.gnu.org/licenses/>. -- along with this program. If not, see <https://www.gnu.org/licenses/>.
-- ╭─────────────────────────────────────────────────────────╮
-- │ Basic Options │
-- ╰─────────────────────────────────────────────────────────╯
-- Set leader keys before any other configuration
vim.g.mapleader = " "
vim.g.maplocalleader = "\\"
-- Indentation
vim.opt.tabstop = 2 -- Tab width in spaces
vim.opt.shiftwidth = 2 -- Indent width for >> and auto-indent
vim.opt.expandtab = true -- Use spaces instead of tabs
-- Performance and UI defaults
vim.opt.updatetime = 200 -- Faster completion and CursorHold events
vim.opt.autowrite = true -- Enable auto write
vim.opt.number = true -- Show line numbers
vim.opt.relativenumber = true -- Relative line numbers
-- ╭─────────────────────────────────────────────────────────╮
-- │ Sessions and Saving │
-- ╰─────────────────────────────────────────────────────────╯
-- Persistent undo across sessions
vim.opt.undofile = true
-- Autowrite/Autosave -- Autowrite/Autosave
-- This ensures changes are saved on every buffer change or when leaving insert mode. -- This ensures changes are saved on every buffer change or when leaving insert mode.
vim.api.nvim_create_autocmd({ "InsertLeave", "TextChanged" }, { vim.api.nvim_create_autocmd({ "InsertLeave", "TextChanged" }, {
@@ -36,29 +58,26 @@ vim.api.nvim_create_autocmd({ "InsertLeave", "TextChanged" }, {
end, end,
}) })
-- Performance and UI defaults -- Automatically reload files changed outside of Neovim
vim.opt.updatetime = 200 -- Faster completion and CursorHold events vim.opt.autoread = true
vim.opt.autowrite = true -- Enable auto write
vim.opt.number = true -- Show line numbers
vim.opt.relativenumber = true -- Relative line numbers
-- Persistent undo across sessions -- Auto-reload Triggers
vim.opt.undofile = true -- Reload when focus is gained or when the cursor is idle
vim.api.nvim_create_autocmd({ "FocusGained", "CursorHold" }, {
-- Indentation group = vim.api.nvim_create_augroup("autoread_on_focus", { clear = true }),
vim.opt.tabstop = 2 -- Tab width in spaces
vim.opt.shiftwidth = 2 -- Indent width for >> and auto-indent
vim.opt.expandtab = true -- Use spaces instead of tabs
-- FormatOnSave
vim.api.nvim_create_autocmd("BufWritePre", {
pattern = "*", pattern = "*",
callback = function(args) callback = function()
require("conform").format({ bufnr = args.buf }) -- Only if the buffer is not modified, to avoid losing unsaved changes
if vim.bo.modified == false then
vim.cmd("checktime")
end
end, end,
}) })
-- Execute Format -- Format Function
-- Formats the entire buffer by default,
-- but if a range is provided (e.g., via visual selection),
-- it formats only that range.
vim.api.nvim_create_user_command("Format", function(args) vim.api.nvim_create_user_command("Format", function(args)
local range = nil local range = nil
if args.count ~= -1 then if args.count ~= -1 then
@@ -71,17 +90,38 @@ vim.api.nvim_create_user_command("Format", function(args)
require("conform").format({ async = true, lsp_format = "fallback", range = range }) require("conform").format({ async = true, lsp_format = "fallback", range = range })
end, { range = true }) end, { range = true })
--[[ -- FormatOnSave
┌────────────────────────────────────────────────────────────────┐ -- Formats the buffer before saving.
│ Root Management │ -- This is a common practice to ensure code is consistently formatted.
└────────────────────────────────────────────────────────────────┘ vim.api.nvim_create_autocmd("BufWritePre", {
--]] pattern = "*",
callback = function()
-- Call Format function
vim.api.nvim_command("Format")
end,
})
-- Return to last-known cursor position when reopening files
vim.api.nvim_create_autocmd("BufReadPost", {
desc = "Jump to last known cursor position on open",
pattern = "*",
callback = function()
local last_pos = vim.fn.line("'\"")
if last_pos > 1 and last_pos <= vim.fn.line("$") then
vim.cmd('normal! g`\"')
end
end,
})
-- ╭─────────────────────────────────────────────────────────╮
-- │ Root Management │
-- ╰─────────────────────────────────────────────────────────╯
-- Automatically change the working directory to the project root. -- Automatically change the working directory to the project root.
-- This ensures that plugins like Snacks.picker and GrugFar work -- This ensures that plugins like Snacks.picker and GrugFar work
-- relative to the file or project you are currently editing. -- relative to the file or project you are currently editing.
vim.api.nvim_create_autocmd("BufEnter", { vim.api.nvim_create_autocmd("BufEnter", {
group = vim.api.nvim_create_augroup("rootiest_auto_cd", { clear = true }), group = vim.api.nvim_create_augroup("buffer_auto_cd", { clear = true }),
callback = function() callback = function()
local path = vim.api.nvim_buf_get_name(0) local path = vim.api.nvim_buf_get_name(0)
if path == "" then if path == "" then
@@ -115,17 +155,18 @@ vim.api.nvim_create_autocmd("FileType", {
end, end,
}) })
--[[ -- ╭─────────────────────────────────────────────────────────╮
┌────────────────────────────────────────────────────────────────┐ -- │ Shell Interaction │
│ Shell Interaction │ -- ╰─────────────────────────────────────────────────────────╯
└────────────────────────────────────────────────────────────────┘
--]]
-- Detect terminal environment -- Detect terminal environment
local is_kitty = os.getenv("KITTY_PID") ~= nil local is_kitty = os.getenv("KITTY_PID") ~= nil
local current_shell = os.getenv("SHELL") or "/bin/sh" local current_shell = os.getenv("SHELL") or "/bin/sh"
local shell_name = current_shell:match("([^/]+)$") or "sh" local shell_name = current_shell:match("([^/]+)$") or "sh"
-- Terminal Title Management
local title_group = vim.api.nvim_create_augroup("TerminalTitle", { clear = true })
-- Helper function to update the terminal title -- Helper function to update the terminal title
local function set_terminal_title(title) local function set_terminal_title(title)
-- If in Kitty, we use the direct escape sequence as it's reliable -- If in Kitty, we use the direct escape sequence as it's reliable
@@ -139,9 +180,7 @@ local function set_terminal_title(title)
end end
end end
-- Create the Autocommand Group -- Terminal title updates on buffer enter and window enter
local title_group = vim.api.nvim_create_augroup("TerminalTitle", { clear = true })
vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, { vim.api.nvim_create_autocmd({ "BufEnter", "BufWinEnter" }, {
group = title_group, group = title_group,
callback = function() callback = function()
+73 -6
View File
@@ -171,6 +171,23 @@ lazyload.on_vim_enter(function()
vim.pack.add({ { src = "https://git.disroot.org/andyg/leap.nvim", name = "leap" } }) vim.pack.add({ { src = "https://git.disroot.org/andyg/leap.nvim", name = "leap" } })
vim.api.nvim_set_hl(0, "LeapBackdrop", { link = "Comment" }) vim.api.nvim_set_hl(0, "LeapBackdrop", { link = "Comment" })
-- Focusline.nvim
vim.pack.add({
{ src = "https://github.com/ABDsheikho/focusline.nvim" },
})
require("focusline").setup({
-- focus_target can be a line number (e.g., 15), or a ratio (e.g., 0.25, 1 / 4, "25%").
focus_target = "30%", -- try it with 30%
-- which motion to associate focusline with.
with_motion = {
"zz",
"z,",
"\x04", -- Ctrl+D
"\x15", -- Ctrl+U
},
})
-- Mini.surround -- Mini.surround
vim.pack.add({ { src = "https://github.com/echasnovski/mini.surround", name = "mini.surround" } }) vim.pack.add({ { src = "https://github.com/echasnovski/mini.surround", name = "mini.surround" } })
require("mini.surround").setup() require("mini.surround").setup()
@@ -181,6 +198,7 @@ lazyload.on_vim_enter(function()
-- Gx.nvim -- Gx.nvim
vim.pack.add({ { src = "https://github.com/chrishrb/gx.nvim", name = "gx" } }) vim.pack.add({ { src = "https://github.com/chrishrb/gx.nvim", name = "gx" } })
---@diagnostic disable-next-line: missing-fields
require("gx").setup({ require("gx").setup({
handlers = { handlers = {
plugin = true, plugin = true,
@@ -237,6 +255,7 @@ lazyload.on_vim_enter(function()
vim.pack.add({ { src = "https://github.com/folke/lazydev.nvim", name = "lazydev" } }) vim.pack.add({ { src = "https://github.com/folke/lazydev.nvim", name = "lazydev" } })
require("lazydev").setup({ require("lazydev").setup({
library = { library = {
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
{ path = "snacks.nvim", words = { "Snacks" } }, { path = "snacks.nvim", words = { "Snacks" } },
}, },
}) })
@@ -252,25 +271,33 @@ lazyload.on_vim_enter(function()
-- We check if the binary exists or if cargo is available to build it. -- We check if the binary exists or if cargo is available to build it.
-- If neither, we skip loading to avoid errors. -- If neither, we skip loading to avoid errors.
local blink_path = vim.fn.stdpath("data") .. "/site/pack/core/opt/blink.cmp" local blink_path = vim.fn.stdpath("data") .. "/site/pack/core/opt/blink.cmp"
local has_blink_bin = vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.so") == 1 local has_blink_bin =
-- Check v2 location (most likely where it is now)
vim.fn.filereadable(blink_path .. "/lua/blink/cmp/lib/libblink_cmp_fuzzy.so") == 1
-- Check v1/Cargo location (fallback)
or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.so") == 1
-- Check macOS/Windows extensions
or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.dylib") == 1 or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.dylib") == 1
or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.dll") == 1 or vim.fn.filereadable(blink_path .. "/target/release/libblink_cmp_fuzzy.dll") == 1
local has_cargo = vim.fn.executable("cargo") == 1 local has_cargo = vim.fn.executable("cargo") == 1
if has_blink_bin or has_cargo then if has_blink_bin or has_cargo then
-- 1. Add blink.lib first as it's a dependency for blink.cmp
vim.pack.add({ { src = "https://github.com/saghen/blink.lib", name = "blink.lib" } })
-- 2. Add blink.cmp and other sources
vim.pack.add({ { src = "https://github.com/saghen/blink.cmp", name = "blink.cmp" } }) vim.pack.add({ { src = "https://github.com/saghen/blink.cmp", name = "blink.cmp" } })
vim.pack.add({ { src = "https://github.com/rafamadriz/friendly-snippets", name = "friendly-snippets" } }) vim.pack.add({ { src = "https://github.com/rafamadriz/friendly-snippets", name = "friendly-snippets" } })
vim.pack.add({ { src = "https://github.com/fang2hou/blink-copilot", name = "blink-copilot" } }) vim.pack.add({ { src = "https://github.com/fang2hou/blink-copilot", name = "blink-copilot" } })
-- Blink.cmp setup -- 3. Blink.cmp setup
require("blink.cmp").setup({ require("blink.cmp").setup({
keymap = { preset = "default" }, keymap = { preset = "default" },
appearance = { appearance = {
use_nvim_cmp_as_default = true, use_nvim_cmp_as_default = true,
nerd_font_variant = "mono", nerd_font_variant = "mono",
kind_icons = { kind_icons = { Copilot = "" },
Copilot = "",
},
}, },
sources = { sources = {
default = { "lsp", "path", "snippets", "buffer", "copilot" }, default = { "lsp", "path", "snippets", "buffer", "copilot" },
@@ -295,6 +322,21 @@ lazyload.on_vim_enter(function()
vim.notify("blink.cmp: binary not found and cargo not installed. Completion disabled.", vim.log.levels.WARN) vim.notify("blink.cmp: binary not found and cargo not installed. Completion disabled.", vim.log.levels.WARN)
end end
-- Autocmd to build blink.cmp after plugin installation or update
vim.api.nvim_create_autocmd("User", {
pattern = "PackChanged", -- This triggers after vim.pack.update() finishes
callback = function()
-- Check if blink is actually installed before trying to build
local status, blink = pcall(require, "blink.cmp")
if status then
vim.notify("Blink.cmp: Building native library...", vim.log.levels.INFO)
---@diagnostic disable-next-line: undefined-field
blink.build():wait(60000)
vim.notify("Blink.cmp: Build complete.", vim.log.levels.INFO)
end
end,
})
local lspconfig = require("lspconfig") local lspconfig = require("lspconfig")
local capabilities = (has_blink_bin or has_cargo) and require("blink.cmp").get_lsp_capabilities() or nil local capabilities = (has_blink_bin or has_cargo) and require("blink.cmp").get_lsp_capabilities() or nil
@@ -336,6 +378,7 @@ lazyload.on_vim_enter(function()
local n_lines = vim.api.nvim_buf_line_count(0) local n_lines = vim.api.nvim_buf_line_count(0)
return { return {
from = { line = 1, col = 1 }, from = { line = 1, col = 1 },
---@diagnostic disable-next-line: undefined-field
to = { line = n_lines, col = math.max(vim.fn.getline(n_lines):len(), 1) }, to = { line = n_lines, col = math.max(vim.fn.getline(n_lines):len(), 1) },
} }
end, end,
@@ -371,7 +414,26 @@ lazyload.on_vim_enter(function()
-- Inc-rename.nvim -- Inc-rename.nvim
vim.pack.add({ { src = "https://github.com/smjonas/inc-rename.nvim", name = "inc-rename" } }) vim.pack.add({ { src = "https://github.com/smjonas/inc-rename.nvim", name = "inc-rename" } })
require("inc_rename").setup() require("inc_rename").setup({
-- the name of the command
cmd_name = "IncRename",
-- the highlight group used for highlighting the identifier's new name
hl_group = "Substitute",
-- whether an empty new name should be previewed; if false the command preview will be cancelled instead
preview_empty_name = false,
-- whether to display a `Renamed m instances in n files` message after a rename operation
show_message = true,
-- whether to save the "IncRename" command in the commandline history (set to false to prevent issues with
-- navigating to older entries that may arise due to the behavior of command preview)
save_in_cmdline_history = true,
-- the type of the external input buffer to use (currently supports "dressing" or "snacks")
input_buffer_type = nil,
-- callback to run after renaming, receives the result table (from LSP handler) as an argument
post_hook = nil,
})
-- Qalc
vim.pack.add({ { src = "https://github.com/Apeiros-46B/qalc.nvim", name = "qalc" } })
-- Noice dependencies -- Noice dependencies
vim.pack.add({ { src = "https://github.com/MunifTanjim/nui.nvim", name = "nui" } }) vim.pack.add({ { src = "https://github.com/MunifTanjim/nui.nvim", name = "nui" } })
@@ -396,4 +458,9 @@ lazyload.on_vim_enter(function()
lsp_doc_border = false, -- add a border to hover docs and signature help lsp_doc_border = false, -- add a border to hover docs and signature help
}, },
}) })
-- Kitty Scrollback
vim.pack.add({ { src = "https://github.com/mikesmithgh/kitty-scrollback.nvim", name = "kitty-scrollback" } })
Config.plugins.kitty_scrollback = {}
require("kitty-scrollback").setup(Config.plugins.kitty_scrollback)
end) end)
+26 -10
View File
@@ -5,9 +5,13 @@
"src": "https://github.com/fang2hou/blink-copilot" "src": "https://github.com/fang2hou/blink-copilot"
}, },
"blink.cmp": { "blink.cmp": {
"rev": "c573a15a62bd0bfd4006ee0849b24f5404395500", "rev": "80f5dd3f11049f1c3a87557718d4e55556a0e3f5",
"src": "https://github.com/saghen/blink.cmp" "src": "https://github.com/saghen/blink.cmp"
}, },
"blink.lib": {
"rev": "f29d8bac6549bc1e7d699c83f680823d7def98bd",
"src": "https://github.com/saghen/blink.lib"
},
"catppuccin": { "catppuccin": {
"rev": "426dbebe06b5c69fd846ceb17b42e12f890aedf1", "rev": "426dbebe06b5c69fd846ceb17b42e12f890aedf1",
"src": "https://github.com/catppuccin/nvim" "src": "https://github.com/catppuccin/nvim"
@@ -17,7 +21,7 @@
"src": "https://github.com/LudoPinelli/comment-box.nvim" "src": "https://github.com/LudoPinelli/comment-box.nvim"
}, },
"conform": { "conform": {
"rev": "086a40dc7ed8242c03be9f47fbcee68699cc2395", "rev": "dca1a190aa85f9065979ef35802fb77131911106",
"src": "https://github.com/stevearc/conform.nvim" "src": "https://github.com/stevearc/conform.nvim"
}, },
"cord.nvim": { "cord.nvim": {
@@ -28,6 +32,10 @@
"rev": "fcea7ff883235d9024dc41e638f164a450c14ca2", "rev": "fcea7ff883235d9024dc41e638f164a450c14ca2",
"src": "https://github.com/folke/flash.nvim" "src": "https://github.com/folke/flash.nvim"
}, },
"focusline.nvim": {
"rev": "037a5c3e7849f2b9ad65732733d43c1136d72601",
"src": "https://github.com/ABDsheikho/focusline.nvim"
},
"friendly-snippets": { "friendly-snippets": {
"rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9", "rev": "6cd7280adead7f586db6fccbd15d2cac7e2188b9",
"src": "https://github.com/rafamadriz/friendly-snippets" "src": "https://github.com/rafamadriz/friendly-snippets"
@@ -37,11 +45,11 @@
"src": "https://github.com/f-person/git-blame.nvim" "src": "https://github.com/f-person/git-blame.nvim"
}, },
"gitsigns": { "gitsigns": {
"rev": "8d82c240f190fc33723d48c308ccc1ed8baad69d", "rev": "dd3f588bacbeb041be6facf1742e42097f62165d",
"src": "https://github.com/lewis6991/gitsigns.nvim" "src": "https://github.com/lewis6991/gitsigns.nvim"
}, },
"grug-far": { "grug-far": {
"rev": "21604255d0e8f9968322f61f2b6c09e5efe1285a", "rev": "21790e59dd0109a92a70cb874dd002af186314f5",
"src": "https://github.com/MagicDuck/grug-far.nvim" "src": "https://github.com/MagicDuck/grug-far.nvim"
}, },
"gx": { "gx": {
@@ -52,24 +60,28 @@
"rev": "0074b551a17338ccdcd299bd86687cc651bcb33d", "rev": "0074b551a17338ccdcd299bd86687cc651bcb33d",
"src": "https://github.com/smjonas/inc-rename.nvim" "src": "https://github.com/smjonas/inc-rename.nvim"
}, },
"kitty-scrollback": {
"rev": "27a34ad53f188758fe202eb08f0063bce572dde4",
"src": "https://github.com/mikesmithgh/kitty-scrollback.nvim"
},
"lazydev": { "lazydev": {
"rev": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d", "rev": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d",
"src": "https://github.com/folke/lazydev.nvim" "src": "https://github.com/folke/lazydev.nvim"
}, },
"leap": { "leap": {
"rev": "b960d5038c5c505c52e56a54490f9bbb1f0e6ef6", "rev": "156c71aabb68d520c6269db4103c8e5580e3ea67",
"src": "https://git.disroot.org/andyg/leap.nvim" "src": "https://git.disroot.org/andyg/leap.nvim"
}, },
"lualine": { "lualine": {
"rev": "a905eeebc4e63fdc48b5135d3bf8aea5618fb21c", "rev": "131a558e13f9f28b15cd235557150ccb23f89286",
"src": "https://github.com/nvim-lualine/lualine.nvim" "src": "https://github.com/nvim-lualine/lualine.nvim"
}, },
"mason": { "mason": {
"rev": "b03fb0f20bc1d43daf558cda981a2be22e73ac42", "rev": "cb8445f8ce85d957416c106b780efd51c6298f89",
"src": "https://github.com/williamboman/mason.nvim" "src": "https://github.com/williamboman/mason.nvim"
}, },
"mason-lspconfig": { "mason-lspconfig": {
"rev": "0a3b42c3e503df87aef6d6513e13148381495c3a", "rev": "0c2823e0418f3d9230ff8b201c976e84de1cb401",
"src": "https://github.com/williamboman/mason-lspconfig.nvim" "src": "https://github.com/williamboman/mason-lspconfig.nvim"
}, },
"mini.ai": { "mini.ai": {
@@ -93,7 +105,7 @@
"src": "https://github.com/MunifTanjim/nui.nvim" "src": "https://github.com/MunifTanjim/nui.nvim"
}, },
"nvim-lspconfig": { "nvim-lspconfig": {
"rev": "4b7fbaa239c5db6b36f424a4521ca9f1a401be33", "rev": "31026a13eefb20681124706a79fc1df6bf11ab27",
"src": "https://github.com/neovim/nvim-lspconfig" "src": "https://github.com/neovim/nvim-lspconfig"
}, },
"nvim-treesitter": { "nvim-treesitter": {
@@ -105,13 +117,17 @@
"src": "https://github.com/nvim-treesitter/nvim-treesitter-context" "src": "https://github.com/nvim-treesitter/nvim-treesitter-context"
}, },
"nvim-web-devicons": { "nvim-web-devicons": {
"rev": "c72328a5494b4502947a022fe69c0c47e53b6aa6", "rev": "4fc505ac7bd7692824a142e96e5f529c133862f8",
"src": "https://github.com/nvim-tree/nvim-web-devicons" "src": "https://github.com/nvim-tree/nvim-web-devicons"
}, },
"persistence": { "persistence": {
"rev": "b20b2a7887bd39c1a356980b45e03250f3dce49c", "rev": "b20b2a7887bd39c1a356980b45e03250f3dce49c",
"src": "https://github.com/folke/persistence.nvim" "src": "https://github.com/folke/persistence.nvim"
}, },
"qalc": {
"rev": "33198ba0533d6a514f9a48cb472e40407c2ea9f6",
"src": "https://github.com/Apeiros-46B/qalc.nvim"
},
"snacks": { "snacks": {
"rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e", "rev": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e",
"src": "https://github.com/folke/snacks.nvim" "src": "https://github.com/folke/snacks.nvim"