summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/alpvim/.config/alpvim/init.lua684
-rw-r--r--arch/alpvim/.config/alpvim/init.lua.old523
-rw-r--r--arch/bigvim/.config/bigvim/lazy-lock.json38
3 files changed, 889 insertions, 356 deletions
diff --git a/arch/alpvim/.config/alpvim/init.lua b/arch/alpvim/.config/alpvim/init.lua
index 96a7215..96b073f 100644
--- a/arch/alpvim/.config/alpvim/init.lua
+++ b/arch/alpvim/.config/alpvim/init.lua
@@ -1,36 +1,24 @@
-- Bootstrap lazy.nvim
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.uv.fs_stat(lazypath) then
- vim.fn.system({
- "git", "clone", "--filter=blob:none",
- "https://github.com/folke/lazy.nvim.git",
- "--branch=stable", lazypath,
- })
+ vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
end
vim.opt.rtp:prepend(lazypath)
--- Leader
-vim.g.mapleader = " "
+vim.g.mapleader = " " -- Leader
vim.g.maplocalleader = " "
--- ============================================================
-- Options (adjusted for a raw TTY)
--- ============================================================
-
local opt = vim.opt
-
--- Line numbers
-opt.number = true
+opt.number = true -- Line numbers
opt.relativenumber = true
--- Indentation
-opt.expandtab = true
+opt.expandtab = true -- Indentation
opt.tabstop = 4
opt.shiftwidth = 4
opt.softtabstop = 4
--- Visual
-opt.cursorline = true
+opt.cursorline = true -- Visual
opt.scrolloff = 20
opt.signcolumn = "yes"
opt.list = true
@@ -39,8 +27,7 @@ opt.fillchars:append({ fold = "-" })
opt.termguicolors = true
opt.colorcolumn = ""
--- Behaviour
-opt.swapfile = false
+opt.swapfile = false -- Behaviour
opt.undofile = true
opt.updatetime = 250
opt.timeoutlen = 300
@@ -52,351 +39,374 @@ opt.inccommand = "split"
opt.hlsearch = true
opt.breakindent = true
--- Folding (nvim-ufo, see plugin list below)
-opt.foldcolumn = "0"
+opt.foldcolumn = "0" -- Folding (nvim-ufo, see plugin list below)
opt.foldlevel = 99
opt.foldlevelstart = 99
opt.foldenable = true
-local map = vim.keymap.set
-
--- ============================================================
-- Keymaps
--- ============================================================
-
--- Disable Space in normal/visual (used as leader)
-map({ "n", "v" }, "<Space>", "<Nop>", { silent = true })
-
--- Save
+local map = vim.keymap.set
+map({ "n", "v" }, "<Space>", "<Nop>", { silent = true }) -- Disable Space in normal/visual (used as leader)
map({ "n", "i" }, "<C-s>", "<cmd>w<CR>", { desc = "Save" })
-
--- Clear search highlight
-map("n", "<Esc>", "<cmd>nohlsearch<CR>")
-
--- Exit terminal mode
+map("n", "<Esc>", "<cmd>nohlsearch<CR>") -- Clear search highlight
map("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal" })
-
--- Better up/down on wrapped lines
-map({ "n", "v" }, "j", "gj")
+map({ "n", "v" }, "j", "gj") -- Better up/down on wrapped lines
map({ "n", "v" }, "k", "gk")
--- Buffer navigation
-map("n", "<S-h>", "<cmd>bprevious<CR>", { desc = "Prev buffer" })
-map("n", "<S-l>", "<cmd>bnext<CR>", { desc = "Next buffer" })
+map("n", "<S-h>", "<cmd>bprevious<CR>", { desc = "Prev buffer" }) -- Buffer navigation
+map("n", "<S-l>", "<cmd>bnext<CR>", { desc = "Next buffer" })
map("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" })
--- Splits
-map("n", "<leader>sv", "<C-w>v", { desc = "Split vertical" })
-map("n", "<leader>sh", "<C-w>s", { desc = "Split horizontal" })
-map("n", "<leader>se", "<C-w>=", { desc = "Equal splits" })
+map("n", "<leader>sv", "<C-w>v", { desc = "Split vertical" }) -- Splits
+map("n", "<leader>sh", "<C-w>s", { desc = "Split horizontal" })
+map("n", "<leader>se", "<C-w>=", { desc = "Equal splits" })
map("n", "<leader>sx", "<cmd>close<CR>", { desc = "Close split" })
--- Move lines
-map("n", "<C-S-Down>", "<cmd>m .+1<CR>==", { desc = "Move line down" })
-map("n", "<C-S-Up>", "<cmd>m .-2<CR>==", { desc = "Move line up" })
+map("n", "<C-S-Down>", "<cmd>m .+1<CR>==", { desc = "Move line down" }) -- Move lines
+map("n", "<C-S-Up>", "<cmd>m .-2<CR>==", { desc = "Move line up" })
map("v", "<C-S-Down>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
-map("v", "<C-S-Up>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
+map("v", "<C-S-Up>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
--- Stay in visual after indent
-map("v", "<", "<gv")
+map("v", "<", "<gv") -- Stay in visual after indent
map("v", ">", ">gv")
--- ============================================================
--- Completion helper
--- ============================================================
-
+-- Completion helper: expand blink.cmp menu height + docs while it's open
local function expand_menu()
- local cfg = require("blink.cmp.config").completion
- cfg.menu.max_height = 10
- cfg.documentation.auto_show = true
- pcall(function()
- require("blink.cmp.completion.windows.menu").update_position()
- end)
+ local cfg = require("blink.cmp.config").completion
+ cfg.menu.max_height = 10
+ cfg.documentation.auto_show = true
+ pcall(function()
+ require("blink.cmp.completion.windows.menu").update_position()
+ end)
end
-
vim.api.nvim_create_autocmd("User", {
- pattern = "BlinkCmpMenuClose",
- callback = function()
- local ok, cfg = pcall(function() return require("blink.cmp.config").completion end)
- if not ok then return end
- cfg.menu.max_height = 5
- cfg.documentation.auto_show = false
- end,
+ pattern = "BlinkCmpMenuClose",
+ callback = function()
+ local ok, cfg = pcall(function()
+ return require("blink.cmp.config").completion
+ end)
+ if not ok then
+ return
+ end
+ cfg.menu.max_height = 5
+ cfg.documentation.auto_show = false
+ end,
})
--- ============================================================
--- Fold text helper
--- ============================================================
+-- Trim trailing whitespace on save (skip markdown)
+vim.api.nvim_create_autocmd("BufWritePre", {
+ pattern = "*",
+ callback = function()
+ if vim.bo.filetype == "markdown" then
+ return
+ end
+ local view = vim.fn.winsaveview()
+ vim.cmd([[keeppatterns %s/\s\+$//e]])
+ vim.fn.winrestview(view)
+ end,
+})
+-- Fold text helper for nvim-ufo (ascii "... N lines" suffix instead of unicode)
local function ufo_ascii_foldtext(virtText, lnum, endLnum, width, truncate)
- local newVirtText = {}
- local suffix = (" ... %d lines "):format(endLnum - lnum)
- local sufWidth = vim.fn.strdisplaywidth(suffix)
- local targetWidth = width - sufWidth
- local curWidth = 0
- for _, chunk in ipairs(virtText) do
- local chunkText = chunk[1]
- local chunkWidth = vim.fn.strdisplaywidth(chunkText)
- if targetWidth > curWidth + chunkWidth then
- table.insert(newVirtText, chunk)
- else
- chunkText = truncate(chunkText, targetWidth - curWidth)
- local hlGroup = chunk[2]
- table.insert(newVirtText, { chunkText, hlGroup })
- chunkWidth = vim.fn.strdisplaywidth(chunkText)
- if curWidth + chunkWidth < targetWidth then
- suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
- end
- break
- end
- curWidth = curWidth + chunkWidth
- end
- table.insert(newVirtText, { suffix, "Comment" })
- return newVirtText
+ local newVirtText = {}
+ local suffix = (" ... %d lines "):format(endLnum - lnum)
+ local sufWidth = vim.fn.strdisplaywidth(suffix)
+ local targetWidth = width - sufWidth
+ local curWidth = 0
+ for _, chunk in ipairs(virtText) do
+ local chunkText = chunk[1]
+ local chunkWidth = vim.fn.strdisplaywidth(chunkText)
+ if targetWidth > curWidth + chunkWidth then
+ table.insert(newVirtText, chunk)
+ else
+ chunkText = truncate(chunkText, targetWidth - curWidth)
+ table.insert(newVirtText, { chunkText, chunk[2] })
+ chunkWidth = vim.fn.strdisplaywidth(chunkText)
+ if curWidth + chunkWidth < targetWidth then
+ suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
+ end
+ break
+ end
+ curWidth = curWidth + chunkWidth
+ end
+ table.insert(newVirtText, { suffix, "Comment" })
+ return newVirtText
end
--- ============================================================
--- Plugins: leap, oil, treesitter, nvim-ufo, clangd, blink.cmp
--- ============================================================
-
+-- Plugins: leap, oil, treesitter, nvim-ufo, clangd, blink.cmp, mini.base16
require("lazy").setup({
- -- Motion: s + two chars to jump anywhere
- {
- url = "https://codeberg.org/andyg/leap.nvim",
- keys = {
- { "s", "<Plug>(leap)", mode = { "n", "x", "o" }, desc = "Leap" },
- { "S", "<Plug>(leap-from-window)", mode = { "n", "o" }, desc = "Leap from window" },
- },
- },
-
- -- Buffer-based file explorer
- {
- "stevearc/oil.nvim",
- lazy = false,
- keys = {
- { "<leader>e", "<cmd>Oil<CR>", desc = "File explorer" },
- { "-", "<cmd>Oil<CR>", desc = "Open parent dir" },
- },
- opts = {
- default_file_explorer = true,
- view_options = { show_hidden = true },
- constrain_cursor = false,
- },
- },
-
- -- Treesitter (syntax highlighting + textobjects)
- {
- "nvim-treesitter/nvim-treesitter",
- branch = "main",
- lazy = false,
- build = ":TSUpdate",
- dependencies = {
- { "nvim-treesitter/nvim-treesitter-textobjects", branch = "main" },
- },
- config = function()
- require("nvim-treesitter").setup({})
- require("nvim-treesitter").install({ "c" })
-
- vim.api.nvim_create_autocmd("FileType", {
- callback = function(args)
- local lang = vim.treesitter.language.get_lang(vim.bo[args.buf].filetype)
- if lang and vim.treesitter.language.add(lang) then
- pcall(vim.treesitter.start, args.buf, lang)
- vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
- end
- end,
- })
-
- local ok_to, to = pcall(require, "nvim-treesitter-textobjects")
- if not ok_to then return end
- to.setup({
- select = { lookahead = true },
- move = { set_jumps = true },
- })
- local sel = require("nvim-treesitter-textobjects.select")
- local move = require("nvim-treesitter-textobjects.move")
- local swap = require("nvim-treesitter-textobjects.swap")
- local tmap = vim.keymap.set
-
- local objs = {
- { "af", "@function.outer", "around function" },
- { "if", "@function.inner", "inside function" },
- { "ac", "@class.outer", "around class" },
- { "ic", "@class.inner", "inside class" },
- { "aa", "@parameter.outer", "around argument" },
- { "ia", "@parameter.inner", "inside argument" },
- { "ab", "@block.outer", "around block" },
- { "ib", "@block.inner", "inside block" },
- { "ai", "@conditional.outer", "around conditional" },
- { "ii", "@conditional.inner", "inside conditional" },
- { "al", "@loop.outer", "around loop" },
- { "il", "@loop.inner", "inside loop" },
- }
- for _, o in ipairs(objs) do
- local lhs, q, d = o[1], o[2], o[3]
- tmap({ "x", "o" }, lhs, function() sel.select_textobject(q, "textobjects") end, { desc = d })
- end
-
- local nmo = { "n", "x", "o" }
- tmap(nmo, "]m", function() move.goto_next_start("@function.outer", "textobjects") end, { desc = "next func start" })
- tmap(nmo, "[m", function() move.goto_previous_start("@function.outer", "textobjects") end, { desc = "prev func start" })
- tmap(nmo, "]M", function() move.goto_next_end("@function.outer", "textobjects") end, { desc = "next func end" })
- tmap(nmo, "[M", function() move.goto_previous_end("@function.outer", "textobjects") end, { desc = "prev func end" })
- tmap(nmo, "]]", function() move.goto_next_start("@class.outer", "textobjects") end, { desc = "next class start" })
- tmap(nmo, "[[", function() move.goto_previous_start("@class.outer", "textobjects") end, { desc = "prev class start" })
- tmap(nmo, "][", function() move.goto_next_end("@class.outer", "textobjects") end, { desc = "next class end" })
- tmap(nmo, "[]", function() move.goto_previous_end("@class.outer", "textobjects") end, { desc = "prev class end" })
-
- tmap("n", "<leader>a", function() swap.swap_next("@parameter.inner") end, { desc = "Swap arg with next" })
- tmap("n", "<leader>A", function() swap.swap_previous("@parameter.inner") end, { desc = "Swap arg with prev" })
- end,
- },
-{
- "christoomey/vim-tmux-navigator",
- cmd = {
- "TmuxNavigateLeft", "TmuxNavigateDown",
- "TmuxNavigateUp", "TmuxNavigateRight",
- },
- keys = {
- { "<C-Left>", "<cmd>TmuxNavigateLeft<CR>", desc = "Pane left", mode = { "n", "t" } },
- { "<C-Down>", "<cmd>TmuxNavigateDown<CR>", desc = "Pane down", mode = { "n", "t" } },
- { "<C-Up>", "<cmd>TmuxNavigateUp<CR>", desc = "Pane up", mode = { "n", "t" } },
- { "<C-Right>", "<cmd>TmuxNavigateRight<CR>", desc = "Pane right", mode = { "n", "t" } },
- },
- init = function()
- vim.g.tmux_navigator_no_mappings = 1
- end,
-},
-
- -- Folding
- {
- "kevinhwang91/nvim-ufo",
- dependencies = { "kevinhwang91/promise-async" },
- event = "BufReadPost",
- keys = {
- {
- "zR",
- function()
- require("ufo").openAllFolds()
- end,
- desc = "Open all folds",
- },
- {
- "zM",
- function()
- require("ufo").closeAllFolds()
- end,
- desc = "Close all folds",
- },
- },
- opts = {
- provider_selector = function()
- return { "treesitter", "indent" }
- end,
- fold_virt_text_handler = ufo_ascii_foldtext,
- },
- },
-
- -- Completion engine
- {
- "saghen/blink.cmp",
- version = "*",
- dependencies = { "L3MON4D3/LuaSnip", "rafamadriz/friendly-snippets" },
- opts = {
- keymap = {
- preset = "none",
- ["<C-Space>"] = { "show", "show_documentation", "hide_documentation" },
- ["<C-e>"] = { "hide" },
- ["<CR>"] = { "accept", "fallback" },
- ["<Tab>"] = { expand_menu, "select_next", "fallback" },
- ["<S-Tab>"] = { "select_prev", "fallback" },
- ["<C-b>"] = { "scroll_documentation_up", "fallback" },
- ["<C-f>"] = { "scroll_documentation_down", "fallback" },
- ["<C-n>"] = { "select_next", "fallback" },
- ["<C-p>"] = { "select_prev", "fallback" },
- ["<C-k>"] = { "snippet_forward", "fallback" },
- ["<C-j>"] = { "snippet_backward", "fallback" },
- },
- sources = {
- default = { "lsp", "path", "snippets", "buffer" },
- },
- snippets = { preset = "luasnip" },
- completion = {
- documentation = { auto_show = false, auto_show_delay_ms = 200 },
- ghost_text = { enabled = false },
- menu = {
- auto_show = true,
- max_height = 5,
- draw = {
- -- no kind_icon column -- plain text only, no nerd font glyphs
- columns = { { "label", "label_description", gap = 1 } },
- },
- },
- },
- },
- },
- {
- "L3MON4D3/LuaSnip",
- event = "InsertEnter",
- dependencies = { "rafamadriz/friendly-snippets" },
- config = function()
- require("luasnip.loaders.from_vscode").lazy_load()
- end,
- },
-
- -- LSP
- {
- "neovim/nvim-lspconfig",
- event = { "BufReadPre", "BufNewFile" },
- dependencies = { "saghen/blink.cmp" },
- config = function()
- vim.lsp.config("*", {
- capabilities = require("blink.cmp").get_lsp_capabilities(),
- })
-
- vim.lsp.enable({ "clangd" })
-
- vim.api.nvim_create_autocmd("LspAttach", {
- callback = function(ev)
- local m = function(keys, func, desc)
- vim.keymap.set("n", keys, func, { buffer = ev.buf, desc = "LSP: " .. desc })
- end
- if vim.lsp.inlay_hint then
- vim.lsp.inlay_hint.enable(true, { bufnr = ev.buf })
- end
- m("gd", vim.lsp.buf.definition, "Goto definition")
- m("gD", vim.lsp.buf.declaration, "Goto declaration")
- m("gr", vim.lsp.buf.references, "Goto references")
- m("gI", vim.lsp.buf.implementation, "Goto implementation")
- m("K", vim.lsp.buf.hover, "Hover docs")
- m("<leader>rn", vim.lsp.buf.rename, "Rename")
- m("[d", vim.diagnostic.goto_prev, "Prev diagnostic")
- m("]d", vim.diagnostic.goto_next, "Next diagnostic")
- m("<leader>e", vim.diagnostic.open_float, "Show diagnostic")
- end,
- })
-
- vim.diagnostic.config({
- virtual_text = true,
- signs = {
- text = {
- [vim.diagnostic.severity.ERROR] = "E",
- [vim.diagnostic.severity.WARN] = "W",
- [vim.diagnostic.severity.INFO] = "I",
- [vim.diagnostic.severity.HINT] = "H",
- },
- },
- underline = true,
- update_in_insert = false,
- })
- end,
- },
-
+ { -- Motion: s + two chars to jump anywhere
+ url = "https://codeberg.org/andyg/leap.nvim",
+ keys = {
+ { "s", "<Plug>(leap)", mode = { "n", "x", "o" }, desc = "Leap" },
+ { "S", "<Plug>(leap-from-window)", mode = { "n", "o" }, desc = "Leap from window" },
+ },
+ },
+
+ { -- Buffer-based file explorer
+ "stevearc/oil.nvim",
+ lazy = false,
+ keys = { { "<leader>e", "<cmd>Oil<CR>", desc = "File explorer" }, { "-", "<cmd>Oil<CR>", desc = "Open parent dir" } },
+ opts = { default_file_explorer = true, view_options = { show_hidden = true }, constrain_cursor = false },
+ },
+
+ { -- Treesitter (syntax highlighting + textobjects)
+ "nvim-treesitter/nvim-treesitter",
+ branch = "main",
+ lazy = false,
+ build = ":TSUpdate",
+ dependencies = { { "nvim-treesitter/nvim-treesitter-textobjects", branch = "main" } },
+ config = function()
+ require("nvim-treesitter").setup({})
+ require("nvim-treesitter").install({ "c" })
+
+ vim.api.nvim_create_autocmd("FileType", {
+ callback = function(args)
+ local lang = vim.treesitter.language.get_lang(vim.bo[args.buf].filetype)
+ if lang and vim.treesitter.language.add(lang) then
+ pcall(vim.treesitter.start, args.buf, lang)
+ vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
+ end
+ end,
+ })
+
+ local ok_to, to = pcall(require, "nvim-treesitter-textobjects")
+ if not ok_to then
+ return
+ end
+ to.setup({ select = { lookahead = true }, move = { set_jumps = true } })
+ local sel = require("nvim-treesitter-textobjects.select")
+ local move = require("nvim-treesitter-textobjects.move")
+ local swap = require("nvim-treesitter-textobjects.swap")
+ local tmap = vim.keymap.set
+
+ local objs = { -- text objects: { keymap suffix, query, description }
+ { "af", "@function.outer", "around function" }, { "if", "@function.inner", "inside function" },
+ { "ac", "@class.outer", "around class" }, { "ic", "@class.inner", "inside class" },
+ { "aa", "@parameter.outer", "around argument" }, { "ia", "@parameter.inner", "inside argument" },
+ { "ab", "@block.outer", "around block" }, { "ib", "@block.inner", "inside block" },
+ { "ai", "@conditional.outer", "around conditional" }, { "ii", "@conditional.inner", "inside conditional" },
+ { "al", "@loop.outer", "around loop" }, { "il", "@loop.inner", "inside loop" },
+ }
+ for _, o in ipairs(objs) do
+ local lhs, q, d = o[1], o[2], o[3]
+ tmap({ "x", "o" }, lhs, function()
+ sel.select_textobject(q, "textobjects")
+ end, { desc = d })
+ end
+
+ local nmo = { "n", "x", "o" }
+ local moves = { -- { keymap, move method, query, description }
+ { "]m", "goto_next_start", "@function.outer", "next func start" }, { "[m", "goto_previous_start", "@function.outer", "prev func start" },
+ { "]M", "goto_next_end", "@function.outer", "next func end" }, { "[M", "goto_previous_end", "@function.outer", "prev func end" },
+ { "]]", "goto_next_start", "@class.outer", "next class start" }, { "[[", "goto_previous_start", "@class.outer", "prev class start" },
+ { "][", "goto_next_end", "@class.outer", "next class end" }, { "[]", "goto_previous_end", "@class.outer", "prev class end" },
+ }
+ for _, mv in ipairs(moves) do
+ local lhs, method, q, d = mv[1], mv[2], mv[3], mv[4]
+ tmap(nmo, lhs, function()
+ move[method](q, "textobjects")
+ end, { desc = d })
+ end
+
+ tmap("n", "<leader>a", function()
+ swap.swap_next("@parameter.inner")
+ end, { desc = "Swap arg with next" })
+ tmap("n", "<leader>A", function()
+ swap.swap_previous("@parameter.inner")
+ end, { desc = "Swap arg with prev" })
+ end,
+ },
+
+ {
+ "christoomey/vim-tmux-navigator",
+ cmd = { "TmuxNavigateLeft", "TmuxNavigateDown", "TmuxNavigateUp", "TmuxNavigateRight" },
+ keys = {
+ { "<C-Left>", "<cmd>TmuxNavigateLeft<CR>", desc = "Pane left", mode = { "n", "t" } },
+ { "<C-Down>", "<cmd>TmuxNavigateDown<CR>", desc = "Pane down", mode = { "n", "t" } },
+ { "<C-Up>", "<cmd>TmuxNavigateUp<CR>", desc = "Pane up", mode = { "n", "t" } },
+ { "<C-Right>", "<cmd>TmuxNavigateRight<CR>", desc = "Pane right", mode = { "n", "t" } },
+ },
+ init = function()
+ vim.g.tmux_navigator_no_mappings = 1
+ end,
+ },
+
+ { -- Folding
+ "kevinhwang91/nvim-ufo",
+ dependencies = { "kevinhwang91/promise-async" },
+ event = "BufReadPost",
+ keys = {
+ { "zR", function() require("ufo").openAllFolds() end, desc = "Open all folds" },
+ { "zM", function() require("ufo").closeAllFolds() end, desc = "Close all folds" },
+ },
+ opts = {
+ provider_selector = function()
+ return { "treesitter", "indent" }
+ end,
+ fold_virt_text_handler = ufo_ascii_foldtext,
+ },
+ },
+
+ { "windwp/nvim-autopairs", event = "InsertEnter", opts = { check_ts = true } },
+
+ { -- Completion engine
+ "saghen/blink.cmp",
+ version = "*",
+ dependencies = { "L3MON4D3/LuaSnip", "rafamadriz/friendly-snippets" },
+ opts = {
+ keymap = {
+ preset = "none",
+ ["<C-Space>"] = { "show", "show_documentation", "hide_documentation" }, ["<C-e>"] = { "hide" },
+ ["<CR>"] = { "accept", "fallback" }, ["<Tab>"] = { expand_menu, "select_next", "fallback" },
+ ["<S-Tab>"] = { "select_prev", "fallback" }, ["<C-b>"] = { "scroll_documentation_up", "fallback" },
+ ["<C-f>"] = { "scroll_documentation_down", "fallback" }, ["<C-n>"] = { "select_next", "fallback" },
+ ["<C-p>"] = { "select_prev", "fallback" }, ["<C-k>"] = { "snippet_forward", "fallback" },
+ ["<C-j>"] = { "snippet_backward", "fallback" },
+ },
+ sources = { default = { "lsp", "path", "snippets", "buffer" } },
+ snippets = { preset = "luasnip" },
+ completion = {
+ documentation = { auto_show = false, auto_show_delay_ms = 200 },
+ ghost_text = { enabled = false },
+ menu = {
+ auto_show = true,
+ max_height = 5,
+ -- no kind_icon column -- plain text only, no nerd font glyphs
+ draw = { columns = { { "label", "label_description", gap = 1 } } },
+ },
+ },
+ },
+ },
+ {
+ "L3MON4D3/LuaSnip",
+ event = "InsertEnter",
+ dependencies = { "rafamadriz/friendly-snippets" },
+ config = function()
+ require("luasnip.loaders.from_vscode").lazy_load()
+ end,
+ },
+
+ { -- Base16 theme, auto-loaded from wallust and live-reloaded on change
+ "echasnovski/mini.base16",
+ version = false,
+ lazy = false,
+ priority = 1000,
+ config = function()
+ local palette_path = vim.fn.expand("~/.cache/wallust/nvim.lua")
+ local fallback = {
+ base00 = "#1e1e2e", base01 = "#181825", base02 = "#313244", base03 = "#45475a",
+ base04 = "#585b70", base05 = "#cdd6f4", base06 = "#f5c2e7", base07 = "#b4befe",
+ base08 = "#f38ba8", base09 = "#fab387", base0A = "#f9e2af", base0B = "#a6e3a1",
+ base0C = "#94e2d5", base0D = "#89b4fa", base0E = "#cba6f7", base0F = "#f2cdcd",
+ }
+ local function load_palette()
+ local ok, p = pcall(dofile, palette_path)
+ return ok and p or fallback
+ end
+
+ -- groups cleared to guibg=NONE when transparency is toggled on
+ local transparent_groups = {
+ "Normal", "NormalNC", "NormalFloat", "SignColumn", "FoldColumn", "EndOfBuffer",
+ "LineNr", "LineNrAbove", "LineNrBelow", "CursorLineNr", "CursorLine", "StatusLine",
+ "StatusLineNC", "TabLine", "TabLineFill", "TabLineSel", "VertSplit", "WinSeparator",
+ "Pmenu", "PmenuSbar", "PmenuThumb", "FloatBorder", "FloatTitle", "CursorLineSign",
+ "DiagnosticSignError", "DiagnosticSignWarn", "DiagnosticSignInfo", "DiagnosticSignHint",
+ }
+ local function apply_transparent()
+ for _, grp in ipairs(transparent_groups) do
+ vim.cmd("hi " .. grp .. " guibg=NONE ctermbg=NONE")
+ end
+ end
+
+ local function apply(palette)
+ require("mini.base16").setup({ palette = palette })
+ -- pin gutter/sign/diagnostic backgrounds to match Normal (mini.base16 defaults them to base01)
+ local hls = {
+ LineNr = { fg = palette.base05, bg = palette.base00 },
+ LineNrAbove = { fg = palette.base05, bg = palette.base00 },
+ LineNrBelow = { fg = palette.base05, bg = palette.base00 },
+ CursorLineNr = { fg = palette.base03, bg = palette.base00, bold = true },
+ FoldColumn = { fg = palette.base0C, bg = palette.base00 },
+ SignColumn = { bg = palette.base00 },
+ CursorLineSign = { bg = palette.base00 },
+ DiagnosticSignError = { fg = palette.base08, bg = palette.base00 },
+ DiagnosticSignWarn = { fg = palette.base0A, bg = palette.base00 },
+ DiagnosticSignInfo = { fg = palette.base0D, bg = palette.base00 },
+ DiagnosticSignHint = { fg = palette.base0C, bg = palette.base00 },
+ }
+ for grp, spec in pairs(hls) do
+ vim.api.nvim_set_hl(0, grp, spec)
+ end
+ if vim.g.transparent_bg then
+ apply_transparent()
+ end
+ end
+
+ vim.g.transparent_bg = false
+ apply(load_palette())
+
+ local watcher = vim.uv.new_fs_event() -- live-reload palette on wallust regen
+ if watcher then
+ watcher:start(palette_path, {}, vim.schedule_wrap(function()
+ apply(load_palette())
+ end))
+ end
+
+ vim.keymap.set("n", "<leader>tt", function()
+ vim.g.transparent_bg = not vim.g.transparent_bg
+ if vim.g.transparent_bg then
+ apply_transparent()
+ else
+ apply(load_palette())
+ end
+ end, { desc = "Toggle transparent background" })
+ end,
+ },
+
+ { -- LSP
+ "neovim/nvim-lspconfig",
+ event = { "BufReadPre", "BufNewFile" },
+ dependencies = { "saghen/blink.cmp" },
+ config = function()
+ vim.lsp.config("*", { capabilities = require("blink.cmp").get_lsp_capabilities() })
+ vim.lsp.enable({ "clangd" })
+
+ vim.api.nvim_create_autocmd("LspAttach", {
+ callback = function(ev)
+ local m = function(keys, func, desc)
+ vim.keymap.set("n", keys, func, { buffer = ev.buf, desc = "LSP: " .. desc })
+ end
+ if vim.lsp.inlay_hint then
+ vim.lsp.inlay_hint.enable(true, { bufnr = ev.buf })
+ end
+ m("gd", vim.lsp.buf.definition, "Goto definition")
+ m("gD", vim.lsp.buf.declaration, "Goto declaration")
+ m("gr", vim.lsp.buf.references, "Goto references")
+ m("gI", vim.lsp.buf.implementation, "Goto implementation")
+ m("K", vim.lsp.buf.hover, "Hover docs")
+ m("<leader>rn", vim.lsp.buf.rename, "Rename")
+ m("[d", vim.diagnostic.goto_prev, "Prev diagnostic")
+ m("]d", vim.diagnostic.goto_next, "Next diagnostic")
+ m("<leader>e", vim.diagnostic.open_float, "Show diagnostic")
+ end,
+ })
+
+ vim.diagnostic.config({
+ virtual_text = true,
+ signs = {
+ text = {
+ [vim.diagnostic.severity.ERROR] = "E", [vim.diagnostic.severity.WARN] = "W",
+ [vim.diagnostic.severity.INFO] = "I", [vim.diagnostic.severity.HINT] = "H",
+ },
+ },
+ underline = true,
+ update_in_insert = false,
+ })
+ end,
+ },
}, {
- install = { colorscheme = { "retrobox" } },
- checker = { enabled = false },
- change_detection = { notify = false },
+ checker = { enabled = false },
+ change_detection = { notify = false },
})
-
-vim.cmd.colorscheme("retrobox")
diff --git a/arch/alpvim/.config/alpvim/init.lua.old b/arch/alpvim/.config/alpvim/init.lua.old
new file mode 100644
index 0000000..46a4ef3
--- /dev/null
+++ b/arch/alpvim/.config/alpvim/init.lua.old
@@ -0,0 +1,523 @@
+-- Bootstrap lazy.nvim
+local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+if not vim.uv.fs_stat(lazypath) then
+ vim.fn.system({
+ "git",
+ "clone",
+ "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable",
+ lazypath,
+ })
+end
+vim.opt.rtp:prepend(lazypath)
+
+-- Leader
+vim.g.mapleader = " "
+vim.g.maplocalleader = " "
+
+-- ============================================================
+-- Options (adjusted for a raw TTY)
+-- ============================================================
+
+local opt = vim.opt
+
+-- Line numbers
+opt.number = true
+opt.relativenumber = true
+
+-- Indentation
+opt.expandtab = true
+opt.tabstop = 4
+opt.shiftwidth = 4
+opt.softtabstop = 4
+
+-- Visual
+opt.cursorline = true
+opt.scrolloff = 20
+opt.signcolumn = "yes"
+opt.list = true
+opt.listchars = { tab = " ", trail = ".", nbsp = "_" }
+opt.fillchars:append({ fold = "-" })
+opt.termguicolors = true
+opt.colorcolumn = ""
+
+-- Behaviour
+opt.swapfile = false
+opt.undofile = true
+opt.updatetime = 250
+opt.timeoutlen = 300
+opt.splitbelow = true
+opt.splitright = true
+opt.ignorecase = true
+opt.smartcase = true
+opt.inccommand = "split"
+opt.hlsearch = true
+opt.breakindent = true
+
+-- Folding (nvim-ufo, see plugin list below)
+opt.foldcolumn = "0"
+opt.foldlevel = 99
+opt.foldlevelstart = 99
+opt.foldenable = true
+
+local map = vim.keymap.set
+
+-- ============================================================
+-- Keymaps
+-- ============================================================
+
+-- Disable Space in normal/visual (used as leader)
+map({ "n", "v" }, "<Space>", "<Nop>", { silent = true })
+
+-- Save
+map({ "n", "i" }, "<C-s>", "<cmd>w<CR>", { desc = "Save" })
+
+-- Clear search highlight
+map("n", "<Esc>", "<cmd>nohlsearch<CR>")
+
+-- Exit terminal mode
+map("t", "<Esc><Esc>", "<C-\\><C-n>", { desc = "Exit terminal" })
+
+-- Better up/down on wrapped lines
+map({ "n", "v" }, "j", "gj")
+map({ "n", "v" }, "k", "gk")
+
+-- Buffer navigation
+map("n", "<S-h>", "<cmd>bprevious<CR>", { desc = "Prev buffer" })
+map("n", "<S-l>", "<cmd>bnext<CR>", { desc = "Next buffer" })
+map("n", "<leader>bd", "<cmd>bdelete<CR>", { desc = "Delete buffer" })
+
+-- Splits
+map("n", "<leader>sv", "<C-w>v", { desc = "Split vertical" })
+map("n", "<leader>sh", "<C-w>s", { desc = "Split horizontal" })
+map("n", "<leader>se", "<C-w>=", { desc = "Equal splits" })
+map("n", "<leader>sx", "<cmd>close<CR>", { desc = "Close split" })
+
+-- Move lines
+map("n", "<C-S-Down>", "<cmd>m .+1<CR>==", { desc = "Move line down" })
+map("n", "<C-S-Up>", "<cmd>m .-2<CR>==", { desc = "Move line up" })
+map("v", "<C-S-Down>", ":m '>+1<CR>gv=gv", { desc = "Move selection down" })
+map("v", "<C-S-Up>", ":m '<-2<CR>gv=gv", { desc = "Move selection up" })
+
+-- Stay in visual after indent
+map("v", "<", "<gv")
+map("v", ">", ">gv")
+
+-- ============================================================
+-- Completion helper
+-- ============================================================
+
+local function expand_menu()
+ local cfg = require("blink.cmp.config").completion
+ cfg.menu.max_height = 10
+ cfg.documentation.auto_show = true
+ pcall(function()
+ require("blink.cmp.completion.windows.menu").update_position()
+ end)
+end
+
+vim.api.nvim_create_autocmd("User", {
+ pattern = "BlinkCmpMenuClose",
+ callback = function()
+ local ok, cfg = pcall(function()
+ return require("blink.cmp.config").completion
+ end)
+ if not ok then
+ return
+ end
+ cfg.menu.max_height = 5
+ cfg.documentation.auto_show = false
+ end,
+})
+--
+-- ============================================================
+-- Trim whitespace on save
+-- ============================================================
+
+vim.api.nvim_create_autocmd("BufWritePre", {
+ pattern = "*",
+ callback = function()
+ if vim.bo.filetype == "markdown" then
+ return
+ end
+ local view = vim.fn.winsaveview()
+ vim.cmd([[keeppatterns %s/\s\+$//e]])
+ vim.fn.winrestview(view)
+ end,
+})
+
+-- ============================================================
+-- Fold text helper
+-- ============================================================
+
+local function ufo_ascii_foldtext(virtText, lnum, endLnum, width, truncate)
+ local newVirtText = {}
+ local suffix = (" ... %d lines "):format(endLnum - lnum)
+ local sufWidth = vim.fn.strdisplaywidth(suffix)
+ local targetWidth = width - sufWidth
+ local curWidth = 0
+ for _, chunk in ipairs(virtText) do
+ local chunkText = chunk[1]
+ local chunkWidth = vim.fn.strdisplaywidth(chunkText)
+ if targetWidth > curWidth + chunkWidth then
+ table.insert(newVirtText, chunk)
+ else
+ chunkText = truncate(chunkText, targetWidth - curWidth)
+ local hlGroup = chunk[2]
+ table.insert(newVirtText, { chunkText, hlGroup })
+ chunkWidth = vim.fn.strdisplaywidth(chunkText)
+ if curWidth + chunkWidth < targetWidth then
+ suffix = suffix .. (" "):rep(targetWidth - curWidth - chunkWidth)
+ end
+ break
+ end
+ curWidth = curWidth + chunkWidth
+ end
+ table.insert(newVirtText, { suffix, "Comment" })
+ return newVirtText
+end
+
+-- ============================================================
+-- Plugins: leap, oil, treesitter, nvim-ufo, clangd, blink.cmp
+-- ============================================================
+
+require("lazy").setup({
+
+ -- Motion: s + two chars to jump anywhere
+ {
+ url = "https://codeberg.org/andyg/leap.nvim",
+ keys = {
+ { "s", "<Plug>(leap)", mode = { "n", "x", "o" }, desc = "Leap" },
+ { "S", "<Plug>(leap-from-window)", mode = { "n", "o" }, desc = "Leap from window" },
+ },
+ },
+
+ -- Buffer-based file explorer
+ {
+ "stevearc/oil.nvim",
+ lazy = false,
+ keys = {
+ { "<leader>e", "<cmd>Oil<CR>", desc = "File explorer" },
+ { "-", "<cmd>Oil<CR>", desc = "Open parent dir" },
+ },
+ opts = {
+ default_file_explorer = true,
+ view_options = { show_hidden = true },
+ constrain_cursor = false,
+ },
+ },
+
+ -- Treesitter (syntax highlighting + textobjects)
+ {
+ "nvim-treesitter/nvim-treesitter",
+ branch = "main",
+ lazy = false,
+ build = ":TSUpdate",
+ dependencies = {
+ { "nvim-treesitter/nvim-treesitter-textobjects", branch = "main" },
+ },
+ config = function()
+ require("nvim-treesitter").setup({})
+ require("nvim-treesitter").install({ "c" })
+
+ vim.api.nvim_create_autocmd("FileType", {
+ callback = function(args)
+ local lang = vim.treesitter.language.get_lang(vim.bo[args.buf].filetype)
+ if lang and vim.treesitter.language.add(lang) then
+ pcall(vim.treesitter.start, args.buf, lang)
+ vim.bo[args.buf].indentexpr = "v:lua.require'nvim-treesitter'.indentexpr()"
+ end
+ end,
+ })
+
+ local ok_to, to = pcall(require, "nvim-treesitter-textobjects")
+ if not ok_to then
+ return
+ end
+ to.setup({
+ select = { lookahead = true },
+ move = { set_jumps = true },
+ })
+ local sel = require("nvim-treesitter-textobjects.select")
+ local move = require("nvim-treesitter-textobjects.move")
+ local swap = require("nvim-treesitter-textobjects.swap")
+ local tmap = vim.keymap.set
+
+ local objs = {
+ { "af", "@function.outer", "around function" },
+ { "if", "@function.inner", "inside function" },
+ { "ac", "@class.outer", "around class" },
+ { "ic", "@class.inner", "inside class" },
+ { "aa", "@parameter.outer", "around argument" },
+ { "ia", "@parameter.inner", "inside argument" },
+ { "ab", "@block.outer", "around block" },
+ { "ib", "@block.inner", "inside block" },
+ { "ai", "@conditional.outer", "around conditional" },
+ { "ii", "@conditional.inner", "inside conditional" },
+ { "al", "@loop.outer", "around loop" },
+ { "il", "@loop.inner", "inside loop" },
+ }
+ for _, o in ipairs(objs) do
+ local lhs, q, d = o[1], o[2], o[3]
+ tmap({ "x", "o" }, lhs, function()
+ sel.select_textobject(q, "textobjects")
+ end, { desc = d })
+ end
+
+ local nmo = { "n", "x", "o" }
+ tmap(nmo, "]m", function()
+ move.goto_next_start("@function.outer", "textobjects")
+ end, { desc = "next func start" })
+ tmap(nmo, "[m", function()
+ move.goto_previous_start("@function.outer", "textobjects")
+ end, { desc = "prev func start" })
+ tmap(nmo, "]M", function()
+ move.goto_next_end("@function.outer", "textobjects")
+ end, { desc = "next func end" })
+ tmap(nmo, "[M", function()
+ move.goto_previous_end("@function.outer", "textobjects")
+ end, { desc = "prev func end" })
+ tmap(nmo, "]]", function()
+ move.goto_next_start("@class.outer", "textobjects")
+ end, { desc = "next class start" })
+ tmap(nmo, "[[", function()
+ move.goto_previous_start("@class.outer", "textobjects")
+ end, { desc = "prev class start" })
+ tmap(nmo, "][", function()
+ move.goto_next_end("@class.outer", "textobjects")
+ end, { desc = "next class end" })
+ tmap(nmo, "[]", function()
+ move.goto_previous_end("@class.outer", "textobjects")
+ end, { desc = "prev class end" })
+
+ tmap("n", "<leader>a", function()
+ swap.swap_next("@parameter.inner")
+ end, { desc = "Swap arg with next" })
+ tmap("n", "<leader>A", function()
+ swap.swap_previous("@parameter.inner")
+ end, { desc = "Swap arg with prev" })
+ end,
+ },
+ {
+ "christoomey/vim-tmux-navigator",
+ cmd = {
+ "TmuxNavigateLeft",
+ "TmuxNavigateDown",
+ "TmuxNavigateUp",
+ "TmuxNavigateRight",
+ },
+ keys = {
+ { "<C-Left>", "<cmd>TmuxNavigateLeft<CR>", desc = "Pane left", mode = { "n", "t" } },
+ { "<C-Down>", "<cmd>TmuxNavigateDown<CR>", desc = "Pane down", mode = { "n", "t" } },
+ { "<C-Up>", "<cmd>TmuxNavigateUp<CR>", desc = "Pane up", mode = { "n", "t" } },
+ { "<C-Right>", "<cmd>TmuxNavigateRight<CR>", desc = "Pane right", mode = { "n", "t" } },
+ },
+ init = function()
+ vim.g.tmux_navigator_no_mappings = 1
+ end,
+ },
+
+ -- Folding
+ {
+ "kevinhwang91/nvim-ufo",
+ dependencies = { "kevinhwang91/promise-async" },
+ event = "BufReadPost",
+ keys = {
+ {
+ "zR",
+ function()
+ require("ufo").openAllFolds()
+ end,
+ desc = "Open all folds",
+ },
+ {
+ "zM",
+ function()
+ require("ufo").closeAllFolds()
+ end,
+ desc = "Close all folds",
+ },
+ },
+ opts = {
+ provider_selector = function()
+ return { "treesitter", "indent" }
+ end,
+ fold_virt_text_handler = ufo_ascii_foldtext,
+ },
+ },
+ {
+ "windwp/nvim-autopairs",
+ event = "InsertEnter",
+ opts = { check_ts = true },
+ },
+
+ -- Completion engine
+ {
+ "saghen/blink.cmp",
+ version = "*",
+ dependencies = { "L3MON4D3/LuaSnip", "rafamadriz/friendly-snippets" },
+ opts = {
+ keymap = {
+ preset = "none",
+ ["<C-Space>"] = { "show", "show_documentation", "hide_documentation" },
+ ["<C-e>"] = { "hide" },
+ ["<CR>"] = { "accept", "fallback" },
+ ["<Tab>"] = { expand_menu, "select_next", "fallback" },
+ ["<S-Tab>"] = { "select_prev", "fallback" },
+ ["<C-b>"] = { "scroll_documentation_up", "fallback" },
+ ["<C-f>"] = { "scroll_documentation_down", "fallback" },
+ ["<C-n>"] = { "select_next", "fallback" },
+ ["<C-p>"] = { "select_prev", "fallback" },
+ ["<C-k>"] = { "snippet_forward", "fallback" },
+ ["<C-j>"] = { "snippet_backward", "fallback" },
+ },
+ sources = {
+ default = { "lsp", "path", "snippets", "buffer" },
+ },
+ snippets = { preset = "luasnip" },
+ completion = {
+ documentation = { auto_show = false, auto_show_delay_ms = 200 },
+ ghost_text = { enabled = false },
+ menu = {
+ auto_show = true,
+ max_height = 5,
+ draw = {
+ -- no kind_icon column -- plain text only, no nerd font glyphs
+ columns = { { "label", "label_description", gap = 1 } },
+ },
+ },
+ },
+ },
+ },
+ {
+ "L3MON4D3/LuaSnip",
+ event = "InsertEnter",
+ dependencies = { "rafamadriz/friendly-snippets" },
+ config = function()
+ require("luasnip.loaders.from_vscode").lazy_load()
+ end,
+ },
+
+ -- Base16 theme, auto-loaded from wallust and live-reloaded on change
+ {
+ "echasnovski/mini.base16",
+ version = false,
+ lazy = false,
+ priority = 1000,
+ config = function()
+ local palette_path = vim.fn.expand("~/.cache/wallust/nvim.lua")
+ local fallback = {
+ base00 = "#1e1e2e", base01 = "#181825", base02 = "#313244", base03 = "#45475a",
+ base04 = "#585b70", base05 = "#cdd6f4", base06 = "#f5c2e7", base07 = "#b4befe",
+ base08 = "#f38ba8", base09 = "#fab387", base0A = "#f9e2af", base0B = "#a6e3a1",
+ base0C = "#94e2d5", base0D = "#89b4fa", base0E = "#cba6f7", base0F = "#f2cdcd",
+ }
+ local function load_palette()
+ local ok, p = pcall(dofile, palette_path)
+ return ok and p or fallback
+ end
+
+ local transparent_groups = {
+ "Normal", "NormalNC", "NormalFloat", "SignColumn", "FoldColumn", "EndOfBuffer",
+ "LineNr", "LineNrAbove", "LineNrBelow", "CursorLineNr", "CursorLine", "StatusLine",
+ "StatusLineNC", "TabLine", "TabLineFill", "TabLineSel", "VertSplit", "WinSeparator", "Pmenu", "PmenuSbar",
+ "PmenuThumb", "FloatBorder", "FloatTitle", "CursorLineSign",
+ "DiagnosticSignError", "DiagnosticSignWarn", "DiagnosticSignInfo", "DiagnosticSignHint",
+ }
+ local function apply_transparent()
+ for _, grp in ipairs(transparent_groups) do
+ vim.cmd("hi " .. grp .. " guibg=NONE ctermbg=NONE")
+ end
+ end
+
+ local function apply(palette)
+ require("mini.base16").setup({ palette = palette })
+ vim.api.nvim_set_hl(0, "LineNr", { fg = palette.base05, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "LineNrAbove", { fg = palette.base05, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "LineNrBelow", { fg = palette.base05, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "CursorLineNr", { fg = palette.base03, bg = palette.base00, bold = true })
+ vim.api.nvim_set_hl(0, "FoldColumn", { fg = palette.base0C, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "SignColumn", { bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "CursorLineSign", { bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "DiagnosticSignError", { fg = palette.base08, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "DiagnosticSignWarn", { fg = palette.base0A, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "DiagnosticSignInfo", { fg = palette.base0D, bg = palette.base00 })
+ vim.api.nvim_set_hl(0, "DiagnosticSignHint", { fg = palette.base0C, bg = palette.base00 })
+ if vim.g.transparent_bg then
+ apply_transparent()
+ end
+ end
+
+ vim.g.transparent_bg = false
+ apply(load_palette())
+
+ local watcher = vim.uv.new_fs_event()
+ if watcher then
+ watcher:start(palette_path, {}, vim.schedule_wrap(function()
+ apply(load_palette())
+ end))
+ end
+
+ vim.keymap.set("n", "<leader>tt", function()
+ vim.g.transparent_bg = not vim.g.transparent_bg
+ if vim.g.transparent_bg then
+ apply_transparent()
+ else
+ apply(load_palette())
+ end
+ end, { desc = "Toggle transparent background" })
+ end,
+ },
+
+ -- LSP
+ {
+ "neovim/nvim-lspconfig",
+ event = { "BufReadPre", "BufNewFile" },
+ dependencies = { "saghen/blink.cmp" },
+ config = function()
+ vim.lsp.config("*", {
+ capabilities = require("blink.cmp").get_lsp_capabilities(),
+ })
+
+ vim.lsp.enable({ "clangd" })
+
+ vim.api.nvim_create_autocmd("LspAttach", {
+ callback = function(ev)
+ local m = function(keys, func, desc)
+ vim.keymap.set("n", keys, func, { buffer = ev.buf, desc = "LSP: " .. desc })
+ end
+ if vim.lsp.inlay_hint then
+ vim.lsp.inlay_hint.enable(true, { bufnr = ev.buf })
+ end
+ m("gd", vim.lsp.buf.definition, "Goto definition")
+ m("gD", vim.lsp.buf.declaration, "Goto declaration")
+ m("gr", vim.lsp.buf.references, "Goto references")
+ m("gI", vim.lsp.buf.implementation, "Goto implementation")
+ m("K", vim.lsp.buf.hover, "Hover docs")
+ m("<leader>rn", vim.lsp.buf.rename, "Rename")
+ m("[d", vim.diagnostic.goto_prev, "Prev diagnostic")
+ m("]d", vim.diagnostic.goto_next, "Next diagnostic")
+ m("<leader>e", vim.diagnostic.open_float, "Show diagnostic")
+ end,
+ })
+
+ vim.diagnostic.config({
+ virtual_text = true,
+ signs = {
+ text = {
+ [vim.diagnostic.severity.ERROR] = "E",
+ [vim.diagnostic.severity.WARN] = "W",
+ [vim.diagnostic.severity.INFO] = "I",
+ [vim.diagnostic.severity.HINT] = "H",
+ },
+ },
+ underline = true,
+ update_in_insert = false,
+ })
+ end,
+ },
+}, {
+ checker = { enabled = false },
+ change_detection = { notify = false },
+})
diff --git a/arch/bigvim/.config/bigvim/lazy-lock.json b/arch/bigvim/.config/bigvim/lazy-lock.json
index e2cdb07..a84a412 100644
--- a/arch/bigvim/.config/bigvim/lazy-lock.json
+++ b/arch/bigvim/.config/bigvim/lazy-lock.json
@@ -1,32 +1,32 @@
{
- "LuaSnip": { "branch": "master", "commit": "a62e1083a3cfe8b6b206e7d3d33a51091df25357" },
+ "LuaSnip": { "branch": "master", "commit": "0abc8f390b278c3b4aabc4c004ac8a088b65cf24" },
"actions-preview.nvim": { "branch": "master", "commit": "0ac9c2aa3cfc8c885321c0862b50b6b1c3392405" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
- "conform.nvim": { "branch": "master", "commit": "dca1a190aa85f9065979ef35802fb77131911106" },
- "fidget.nvim": { "branch": "main", "commit": "889e2e96edef4e144965571d46f7a77bcc4d0ddf" },
+ "conform.nvim": { "branch": "master", "commit": "016802de402556da54c36bd7359b441266b01cdd" },
+ "fidget.nvim": { "branch": "main", "commit": "6f793b2bcd2d35e201c09520f698bb763220908a" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
- "fzf-lua": { "branch": "main", "commit": "b437bafc981a180d609bb4092c56ce8999f7a2c4" },
- "gitsigns.nvim": { "branch": "main", "commit": "6d808f99bd63303646794406e270bd553ad7792e" },
- "lazy.nvim": { "branch": "main", "commit": "85c7ff3711b730b4030d03144f6db6375044ae82" },
+ "fzf-lua": { "branch": "main", "commit": "8671012a7b2a1648595952c655039d51fb301c14" },
+ "gitsigns.nvim": { "branch": "main", "commit": "5be654f2232c10ddcad19c1607a67b6b4b78fc29" },
+ "lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
- "leap.nvim": { "branch": "main", "commit": "156c71aabb68d520c6269db4103c8e5580e3ea67" },
- "lualine.nvim": { "branch": "master", "commit": "131a558e13f9f28b15cd235557150ccb23f89286" },
+ "leap.nvim": { "branch": "main", "commit": "0d0549b13428855c063468a6935c18e933599a18" },
+ "lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
- "mini.base16": { "branch": "main", "commit": "800f107b27a00978b0dadd672d6da21a5b12fa9a" },
+ "mini.base16": { "branch": "main", "commit": "d5f7b0db4559eb14c1c6c9e88aae95b9a79df408" },
"multicursor.nvim": { "branch": "main", "commit": "704b99f10a72cc05d370cfeb294ff83412a8ab55" },
- "nvim-autopairs": { "branch": "master", "commit": "59bce2eef357189c3305e25bc6dd2d138c1683f5" },
- "nvim-lint": { "branch": "master", "commit": "eab58b48eb11d7745c11c505e0f3057165902461" },
- "nvim-lspconfig": { "branch": "master", "commit": "31026a13eefb20681124706a79fc1df6bf11ab27" },
- "nvim-surround": { "branch": "main", "commit": "61319d4bd1c5e336e197defa15bd104c51f0fb29" },
- "nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
- "nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" },
+ "nvim-autopairs": { "branch": "master", "commit": "7b9923abad60b903ece7c52940e1321d39eccc79" },
+ "nvim-lint": { "branch": "master", "commit": "a219b2c9e5b4765e5c845aba119dad55806fcaf1" },
+ "nvim-lspconfig": { "branch": "master", "commit": "4267d26e60323a45e18f8e7a63a964cc8f53ca4e" },
+ "nvim-surround": { "branch": "main", "commit": "2e93e154de9ff326def6480a4358bfc149d5da2c" },
+ "nvim-treesitter": { "branch": "main", "commit": "c9f9ed6c1892f629ea399f4ee7905f2686fa13f2" },
+ "nvim-treesitter-textobjects": { "branch": "main", "commit": "898ee307df58f854d11cd7edd06472574d48014e" },
"nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" },
- "nvim-web-devicons": { "branch": "master", "commit": "4fc505ac7bd7692824a142e96e5f529c133862f8" },
- "oil.nvim": { "branch": "master", "commit": "0fcc83805ad11cf714a949c98c605ed717e0b83e" },
+ "nvim-web-devicons": { "branch": "master", "commit": "2ae6958df7ced50baac5035cec0c15799eedfbf7" },
+ "oil.nvim": { "branch": "master", "commit": "b73018b75affd13fa38e2fc94ef753b465f770d7" },
"promise-async": { "branch": "main", "commit": "119e8961014c9bfaf1487bf3c2a393d254f337e2" },
- "rustaceanvim": { "branch": "main", "commit": "a60811ae6054ba981cb4693aaecd715dea783327" },
- "snacks.nvim": { "branch": "main", "commit": "ad9ede6a9cddf16cedbd31b8932d6dcdee9b716e" },
+ "rustaceanvim": { "branch": "main", "commit": "f4051fb4662c43a568ce809a37e47c0f4e3d7a31" },
+ "snacks.nvim": { "branch": "main", "commit": "882c996cf28183f4d63640de0b4c02ec886d01f2" },
"undotree": { "branch": "master", "commit": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d" },
"vim-tmux-navigator": { "branch": "master", "commit": "e41c431a0c7b7388ae7ba341f01a0d217eb3a432" },
"which-key.nvim": { "branch": "main", "commit": "3aab2147e74890957785941f0c1ad87d0a44c15a" }