Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions core.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GENERATED by dotfiles-core sync-core.sh — vendored Core provenance (B1).
# Regenerate after a manual 'git subtree pull' with: make core-lock
core_version=3.8.0
core_sha=da1541206be1f7e0b36a1592a1a775ae6f2f0bf0
core_branch=da1541206be1f7e0b36a1592a1a775ae6f2f0bf0
core_tag=v3.8.0
core_version=3.9.0
core_sha=dcdeda541fdcc1c1a855f064bebaa2d1c56211af
core_branch=dcdeda541fdcc1c1a855f064bebaa2d1c56211af
core_tag=v3.9.0
55 changes: 55 additions & 0 deletions core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,61 @@ commit (`git tag -a vX.Y.Z -m vX.Y.Z`).

## [Unreleased]

## [v3.9.0] - 2026-07-19

### Added

- **Neovim: shared `utils/palette.lua`** — a single source of truth for the active tokyonight
palette. The `"storm"` style string and the `require("tokyonight.colors").setup{}` pcall dance
were duplicated across lualine, bufferline, and the cheatsheet; they now all resolve through this
one module (change the style once). It also exposes a NvChad-`base_30` semantic map (`black2`,
`statusline_bg`, `nord_blue`, `dark_purple`, …) so the block/pill styling is written in NvChad's
own vocabulary while still tracking the theme.
- **Neovim: scroll-percentage indicator** in the lualine statusline (right bubble, next to the
cursor location) so you can see how far through a file you are.
- **Neovim: NvChad-style inline LSP renamer** (`utils/renamer.lua`) — `<leader>rn` now opens a
small cursor-anchored, git-red-bordered prompt prefilled with the symbol (`<CR>` applies across
the workspace, `<Esc>`/`q` cancels) instead of the bare cmdline prompt.
- **Neovim: colorify-style colour highlighter** (`nvim-colorizer.lua`, catgoose fork) — inline
colour swatches over the visible viewport: CSS colour literals (`#rrggbb`, `rgb()/hsl()`) plus
Tailwind utility-class colours via the Tailwind LSP. ccc.nvim is kept for the interactive
`:CccPick` picker (its always-on highlighter is now off).

### Changed

- **Neovim: statusline & tabline go hybrid-NvChad.** The bufferline adopts NvChad's tabufline model
where buffer state is conveyed by BACKGROUND on a solid opaque bar — the active buffer lifts to a
lighter raised block, inactive buffers recede to the bar colour — while the editor stays
transparent. The blink.cmp menu gains NvChad's colored kind-icon column (via `BlinkCmpKind*`
highlights) with an icon-left / kind-text-right layout. The `<leader>?` cheatsheet renders as a
solid opaque card.
- **Neovim: signature help is owned by blink.cmp.** The manual `CursorHoldI`
`vim.lsp.buf.signature_help` autocmd was removed — blink's own signature window handled the same
case and the two floats could stack while idle. `<C-s>` stays as the manual trigger.
- **Neovim: the central Mason install manifest moved** out of conform.nvim (which is lazy on
`BufWritePre`, so `run_on_start` really meant "on first save") into its own `VeryLazy`-loaded
`plugins/mason-tool-installer.lua`, so a fresh box installs its toolchain near startup.

### Removed

- **Neovim: trimmed unused plugins** — the full in-editor **debugger stack** (nvim-dap,
nvim-dap-ui, nvim-dap-virtual-text, mason-nvim-dap, and every `<leader>d*` keymap), the **test
runner** (neotest + neotest-python/-golang), vim-dadbod (DB UI), incline.nvim (dropbar's winbar
covers split identity), aerial.nvim (Trouble + fzf-lua + dropbar cover symbols), nvim-spectre,
git-conflict.nvim, and mini.indentscope — along with their keymaps, which-key groups, and
cheatsheet sections. (16 entries removed from `lazy-lock.json`, including transitive dependencies.)

### Fixed

- **Neovim: heavy linters no longer run on `InsertLeave`.** golangci-lint / cpplint scan the whole
package per run; they are now restricted to `BufWritePost` (save-only) while fast per-file linters
keep the snappier cadence.
- **Neovim: bash-language-server no longer emits `SC1071` on zsh.** Its built-in shellcheck
integration is disabled (`bashIde.shellcheckPath = ""`) so zsh buffers keep completion/hover
without the "shellcheck only supports sh/bash/…" phantom diagnostic.
- **Neovim: `:w` can't be broken by a missing mini.nvim.** The format-on-save
`mini.trailspace.trim()` call is now pcall-guarded.

## [v3.8.0] - 2026-07-18

### Changed
Expand Down
2 changes: 1 addition & 1 deletion core/core.version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.8.0
3.9.0
25 changes: 5 additions & 20 deletions core/nvim/lazy-lock.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
{
"FixCursorHold.nvim": { "branch": "master", "commit": "1900f89dc17c603eec29960f57c00bd9ae696495" },
"LuaSnip": { "branch": "master", "commit": "642b0c595e11608b4c18219e93b88d7637af27bc" },
"aerial.nvim": { "branch": "master", "commit": "28fe6e822ae344544c379d60fcb13c9519a1f08a" },
"alpha-nvim": { "branch": "main", "commit": "6c6a89d5b068b5251c8bdf0dd57bb921bcfeeb09" },
"blink.cmp": { "branch": "main", "commit": "78336bc89ee5365633bcf754d93df01678b5c08f" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
Expand All @@ -14,37 +12,27 @@
"flash.nvim": { "branch": "main", "commit": "b6346946d10d07998efee029fb0f7a593806d0cd" },
"friendly-snippets": { "branch": "main", "commit": "6cd7280adead7f586db6fccbd15d2cac7e2188b9" },
"fzf-lua": { "branch": "main", "commit": "532d463f5c83595192fe740572d8fd6902b2217a" },
"git-conflict.nvim": { "branch": "main", "commit": "4bbfdd92d547d2862a75b4e80afaf30e73f7bbb4" },
"gitlinker.nvim": { "branch": "master", "commit": "a1b74070bbd5e50128190c85b09f1431ea5fbd83" },
"gitsigns.nvim": { "branch": "main", "commit": "31d6fb2d618bca1482b9f274751ead5f03461408" },
"harpoon": { "branch": "harpoon2", "commit": "87b1a3506211538f460786c23f98ec63ad9af4e5" },
"incline.nvim": { "branch": "main", "commit": "debd628e9395f7a9da57bdc31ce75ca6b40a880b" },
"lazy.nvim": { "branch": "main", "commit": "306a05526ada86a7b30af95c5cc81ffba93fef97" },
"lazydev.nvim": { "branch": "main", "commit": "ff2cbcba459b637ec3fd165a2be59b7bbaeedf0d" },
"lazygit.nvim": { "branch": "main", "commit": "a04ad0dbc725134edbee3a5eea29290976695357" },
"lualine.nvim": { "branch": "master", "commit": "221ce6b2d999187044529f49da6554a92f740a96" },
"luvit-meta": { "branch": "main", "commit": "cc9b2d412d2fbd30b94a70cfc214c2a3be27a0a2" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "9a10e096703966335bd5c46c8c875d5b0690dade" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "443f1ef8b5e6bf47045cb2217b6f748a223cf7dc" },
"mason.nvim": { "branch": "main", "commit": "2a6940af80375532e5e9e7c1f2fc6319a1b7a69d" },
"mini.nvim": { "branch": "main", "commit": "1345d191bb3da9c7b0e977f4387c5761f9bff68d" },
"neogen": { "branch": "main", "commit": "23e7e9f883d01289ebd90e98025acc860ea26366" },
"neotest": { "branch": "master", "commit": "4e2cd42c4252ee9d2435571d9adcdbc1d47931fe" },
"neotest-golang": { "branch": "main", "commit": "542cbaf37f1233a2723ccd64ce8ed7e3acbd192b" },
"neotest-python": { "branch": "master", "commit": "1b56ca4ba51c6014f986d6548ee629bdc95589d1" },
"nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"nvim-bqf": { "branch": "main", "commit": "c282a62bec6c0621a1ef5132aa3f4c9fc4dcc2c7" },
"nvim-dap": { "branch": "master", "commit": "9e848e09a697ee95302a3ef2dd43fd6eb709e570" },
"nvim-dap-ui": { "branch": "master", "commit": "cc9dd33aade7f20bae414d0cba163bc60d4d4b43" },
"nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
"nvim-colorizer.lua": { "branch": "master", "commit": "72a05f62c52241bc7441c820eb53946f92b2e6a4" },
"nvim-lint": { "branch": "master", "commit": "a219b2c9e5b4765e5c845aba119dad55806fcaf1" },
"nvim-lspconfig": { "branch": "master", "commit": "b386c50cd7816f8c8a2b13b298a218af1f5a75c6" },
"nvim-nio": { "branch": "master", "commit": "edcc181a875301dd21840189aa2f2f9ad69fc172" },
"nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
"nvim-lspconfig": { "branch": "master", "commit": "e7ca2c95ba316a8b846d3f3546d407908c5c4ccb" },
"nvim-tree.lua": { "branch": "master", "commit": "4213bd6eabac38b16dd6615002b6243b23cf3bf6" },
"nvim-treesitter": { "branch": "main", "commit": "4916d6592ede8c07973490d9322f187e07dfefac" },
"nvim-treesitter": { "branch": "main", "commit": "24977147550d53589e53b874ec75e14e4fbc304e" },
"nvim-treesitter-context": { "branch": "master", "commit": "b311b30818951d01f7b4bf650521b868b3fece16" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "851e865342e5a4cb1ae23d31caf6e991e1c99f1e" },
"nvim-treesitter-textobjects": { "branch": "main", "commit": "898ee307df58f854d11cd7edd06472574d48014e" },
"nvim-ufo": { "branch": "main", "commit": "ab3eb124062422d276fae49e0dd63b3ad1062cfc" },
"nvim-web-devicons": { "branch": "master", "commit": "0ca28b61a04fe7426cefbdd52c2647ef0e335b5f" },
"oil.nvim": { "branch": "master", "commit": "b73018b75affd13fa38e2fc94ef753b465f770d7" },
Expand All @@ -55,16 +43,13 @@
"rainbow-delimiters.nvim": { "branch": "master", "commit": "a798325b7f36acc62741d1029930a7b96d4dd4bf" },
"render-markdown.nvim": { "branch": "main", "commit": "f422cb5c6855f150e2ddcfaf44e7157b98b34f6a" },
"rustaceanvim": { "branch": "main", "commit": "88575b98bb9937fb9983ddec5e532b67e75ce677" },
"schemastore.nvim": { "branch": "main", "commit": "e954496f8ef22904e8a84f5078f4a110fdc7a0d3" },
"schemastore.nvim": { "branch": "main", "commit": "0df41ab13b54151fcb6ab023cc2a761482070f76" },
"todo-comments.nvim": { "branch": "main", "commit": "31e3c38ce9b29781e4422fc0322eb0a21f4e8668" },
"tokyonight.nvim": { "branch": "main", "commit": "cdc07ac78467a233fd62c493de29a17e0cf2b2b6" },
"treesj": { "branch": "main", "commit": "79aedb401bbdc7e4202f7881eab5f6feb2105b0a" },
"trouble.nvim": { "branch": "main", "commit": "bd67efe408d4816e25e8491cc5ad4088e708a69a" },
"twilight.nvim": { "branch": "main", "commit": "664e752f4a219801265cc3fc18782b457b58c1e1" },
"undotree": { "branch": "master", "commit": "6fa6b57cda8459e1e4b2ca34df702f55242f4e4d" },
"vim-dadbod": { "branch": "master", "commit": "6d1d41da4873a445c5605f2005ad2c68c99d8770" },
"vim-dadbod-completion": { "branch": "master", "commit": "a8dac0b3cf6132c80dc9b18bef36d4cf7a9e1fe6" },
"vim-dadbod-ui": { "branch": "master", "commit": "afd07819d8efcefc3317205b855ad4e3513b0011" },
"vim-fugitive": { "branch": "master", "commit": "3b753cf8c6a4dcde6edee8827d464ba9b8c4a6f0" },
"vim-sleuth": { "branch": "master", "commit": "be69bff86754b1aa5adcbb527d7fcd1635a84080" },
"vim-tmux-navigator": { "branch": "master", "commit": "e41c431a0c7b7388ae7ba341f01a0d217eb3a432" },
Expand Down
59 changes: 15 additions & 44 deletions core/nvim/lua/gerrrt/cheatsheet.lua
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ M.sections = {
{ "<C-s>", "Signature help (i)" },
{ "<leader>oi", "Organize imports" },
{ "<leader>cf", "Format buffer / range" },
{ "<leader>co", "Code outline (Aerial)" },
{ "<leader>cs", "Symbols (Trouble)" },
{ "<leader>cn", "Annotation (Neogen)" },
{ "<leader>;", "Breadcrumb pick (dropbar)" },
Expand Down Expand Up @@ -145,41 +144,6 @@ M.sections = {
{ "<leader>gH / gL", "History: file / repo" },
{ "<leader>gy / gY", "Permalink: yank / open" },
},
{
"Git — conflicts",
{ "]x / [x", "Next / prev conflict" },
{ "<leader>gxo / gxt", "Choose ours / theirs" },
{ "<leader>gxb / gx0", "Choose both / none" },
{ "<leader>gxl", "List conflicts (quickfix)" },
},
{
"Debug (DAP)",
{ "<leader>db / dB", "Breakpoint / conditional" },
{ "<leader>dc", "Continue / start" },
{ "<leader>do / di", "Step over / into" },
{ "<leader>du", "Step out" },
{ "<leader>dr", "Open REPL" },
{ "<leader>dl", "Run last" },
{ "<leader>dt", "Toggle UI" },
{ "<leader>de", "Evaluate expression" },
{ "<leader>dx", "Terminate" },
},
{
"Test (neotest)",
{ "<leader>tt", "Run nearest" },
{ "<leader>tf", "Run current file" },
{ "<leader>td", "Debug nearest (DAP)" },
{ "<leader>ts", "Summary panel" },
{ "<leader>to / tO", "Show output / panel" },
{ "<leader>tx", "Stop" },
},
{
"Search & Replace",
{ "<leader>Sp", "Spectre panel (toggle)" },
{ "<leader>Sw", "Search current word" },
{ "<leader>Sc", "Search current file" },
{ "<leader>Sr", "Search selection (v)" },
},
{
"Folds (ufo)",
{ "zR / zM", "Open / close all folds" },
Expand Down Expand Up @@ -209,7 +173,6 @@ M.sections = {
{ "<leader>z", "Zen mode" },
{ "<leader>U", "Undotree" },
{ "<leader>um", "Markdown render" },
{ "<leader>uD / uF", "Database UI / find buffer" },
},
{
"Packages",
Expand All @@ -229,6 +192,7 @@ local GUTTER = 3 -- blank cells between columns
local MARGIN = 2 -- blank cells inside the window border, left/right

local HL = {
normal = "GerrrtCheatNormal",
title = "GerrrtCheatTitle",
rule = "GerrrtCheatRule",
key = "GerrrtCheatKey",
Expand All @@ -243,19 +207,22 @@ local NPILL = 0

local function define_highlights()
local set = vim.api.nvim_set_hl
-- Prefer the tokyonight palette so the panel reads as NvChad's grid: heading bars in cycling
-- accents, blue keys, dim rules/footer. pcall so a fresh box (tokyonight not loaded) degrades to
-- the old semantic links instead of erroring — the cheatsheet is deps-free by design.
local ok, c = pcall(function()
return require("tokyonight.colors").setup({ style = "storm" }) -- mirror plugins/theme.lua
end)
if ok and type(c) == "table" then
-- Prefer the resolved tokyonight palette (one source of truth in utils/palette.lua) so the panel
-- reads as NvChad's grid: heading bars in cycling accents, blue keys, dim rules/footer. nil on a
-- fresh box (tokyonight not loaded) → degrade to the semantic links below instead of erroring —
-- the cheatsheet stays deps-free by design.
local c = require("gerrrt.utils.palette").colors()
if type(c) == "table" then
local accents = { c.blue, c.green, c.magenta, c.cyan, c.orange, c.yellow, c.red, c.teal, c.purple }
for i, accent in ipairs(accents) do
-- black (bg_dark) bold text on a vivid accent → the pill heading
set(0, "GerrrtCheatPill" .. i, { fg = c.bg_dark, bg = accent, bold = true })
end
NPILL = #accents
-- Solid panel background (NvChad's cheatsheet is an opaque card, not transparent) — the one
-- place the hybrid look goes solid inside a float. bg_dark is the darkest surface so the accent
-- pills and blue keys pop off it.
set(0, HL.normal, { bg = c.bg_dark })
set(0, HL.title, { fg = c.blue, bold = true }) -- heading fallback (unused when NPILL>0)
set(0, HL.key, { fg = c.blue, bold = true })
set(0, HL.rule, { fg = c.fg_gutter })
Expand All @@ -264,6 +231,7 @@ local function define_highlights()
else
-- bare-box fallback: link to semantic groups every colorscheme defines (previous behavior).
NPILL = 0
set(0, HL.normal, { link = "NormalFloat", default = true })
set(0, HL.title, { link = "Title", default = true })
set(0, HL.key, { link = "Constant", default = true })
set(0, HL.rule, { link = "Comment", default = true })
Expand Down Expand Up @@ -426,6 +394,9 @@ function M.open()
})
vim.wo[win].wrap = false
vim.wo[win].cursorline = false
-- Paint the panel as a solid card (NvChad's cheatsheet is opaque). Only NormalFloat is
-- remapped; the border/title keep the config-wide FloatBorder/FloatTitle tint.
vim.wo[win].winhighlight = "NormalFloat:" .. HL.normal

-- close keys — the buffer wipes on hide, so just close the window
for _, key in ipairs({ "q", "<Esc>" }) do
Expand Down
9 changes: 7 additions & 2 deletions core/nvim/lua/gerrrt/config/autocmds.lua
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,12 @@ local lsp_fmt_group = vim.api.nvim_create_augroup("FormatOnSaveGroup", { clear =
vim.api.nvim_create_autocmd("BufWritePre", {
group = lsp_fmt_group,
callback = function(args)
require("mini.trailspace").trim()
-- pcall-guarded: on a fresh box (or if mini failed to load) a bare require().trim() would
-- throw here and abort the whole BufWritePre before conform ever runs, breaking `:w`. mini
-- loads on VeryLazy so this is rare, but the rest of Core guards cross-plugin calls the same way.
pcall(function()
require("mini.trailspace").trim()
end)
-- Never auto-format zsh. shfmt (whether reached through conform OR through the
-- lsp_format="fallback" path via bash-language-server, which shells out to shfmt)
-- parses zsh as bash and silently corrupts zsh-only syntax. Skipping by FILETYPE
Expand All @@ -68,7 +73,7 @@ vim.api.nvim_create_autocmd("LspAttach", {
})

-- custom options for text/markdown files
local markdown_options = vim.api.nvim_create_augroup("MarkdownOptions", {})
local markdown_options = vim.api.nvim_create_augroup("MarkdownOptions", { clear = true })
vim.api.nvim_create_autocmd("FileType", {
group = markdown_options,
pattern = { "markdown", "text", "gitcommit" },
Expand Down
3 changes: 1 addition & 2 deletions core/nvim/lua/gerrrt/config/globals.lua
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ vim.g.loaded_netrwPlugin = 1
-- Fleet "offline" switch. When the environment exports DOTFILES_OFFLINE=1 (the offensive/Kali
-- layer sets it on engagement boxes), Neovim suppresses unattended/background network activity:
-- • lazy.nvim's update checker — config/lazy.lua
-- • mason-tool-installer run_on_start — plugins/conform.lua
-- • mason-nvim-dap automatic_installation — plugins/nvim-dap-ui.lua
-- • mason-tool-installer run_on_start — plugins/mason-tool-installer.lua
-- Read once here into a boolean so every consumer just checks `vim.g.dotfiles_offline`. globals
-- is required before lazy.setup, so this is set before any plugin spec/opts/config evaluates.
vim.g.dotfiles_offline = vim.env.DOTFILES_OFFLINE == "1"
31 changes: 0 additions & 31 deletions core/nvim/lua/gerrrt/plugins/aerial-nvim.lua

This file was deleted.

13 changes: 12 additions & 1 deletion core/nvim/lua/gerrrt/plugins/blink-cmp.lua
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,18 @@ return {
},
menu = {
border = "rounded",
draw = { treesitter = { "lsp" } }, -- syntax-highlight the LSP items in the menu
-- NvChad-style menu draw: a colored kind ICON on the left (colors via BlinkCmpKind*
-- in utils/ui-highlights.lua), the label in the middle, and the kind TEXT trailing on
-- the right — the same three-column rhythm as NvChad's cmp. treesitter still syntax-
-- highlights the LSP label text so identifiers read like code.
draw = {
treesitter = { "lsp" },
columns = {
{ "kind_icon" },
{ "label", "label_description", gap = 1 },
{ "kind", gap = 1 },
},
},
},
documentation = { auto_show = true, auto_show_delay_ms = 200, window = { border = "rounded" } },
ghost_text = { enabled = true },
Expand Down
Loading
Loading