Updated: 2026-07-06 Branch: main
Personal Neovim PDE config. Lua-first, 83 active .lua files, ~4.4k LOC. Uses vim.pack (Neovim's built-in packer, since 0.10) β no third-party plugin managers.
lua/pack.lua is a post-install hook (not a plugin) that runs build commands after PackChanged events for telescope-fzf-native, LuaSnip, and nvim-treesitter.
nvim/
βββ init.lua # Entry: ui2 β options β keymaps β pack setup β autocmd β plugins
βββ lua/
β βββ pack.lua # Post-install hooks (PackChanged autocmd)
β βββ plugins.lua # Recursive scanner: 6 category dirs β auto-requires each .lua file
β βββ gl00ria/
β βββ config/ # options, keymaps, autocmds, icons, neovide, lazy-load helper
β βββ plugins/ # Plugin configs organized by category (auto-loaded)
β βββ 1st_load/ # Must load before others (alphabetical-loading workaround)
β βββ ai/ # opencode, avante
β βββ coding/ # LSP, treesitter, DAP, conform, lint, trouble
β βββ editor/ # blink-cmp, lualine, neo-tree, barbar, flash, yazi
β βββ ui/ # themes, alpha, todo-comments, diagnostics
β βββ utils/ # snacks, tmux, mini-*, git plugins
βββ .stylua.toml # StyLua: column=160, indent=2, spaces, AutoPreferSingle
βββ .neoconf.json # neodev/Lua LS library routing
βββ ginit.vim # Neovide GUI init
βββ nvim-pack-lock.json # vim.pack lockfile
βββ .archived/ # Old lazy.nvim config (read-only history)
| Task | Location |
|---|---|
| Add/modify option | lua/gl00ria/config/options.lua |
| Add keymap | lua/gl00ria/config/keymaps.lua |
| Add autocmd | lua/gl00ria/config/autocmd.lua |
| Lazy-load a plugin | lua/gl00ria/config/lazy.lua |
| Configure LSP for a language | lua/gl00ria/plugins/coding/lsp/langs/<lang>.lua |
| Add new plugin | New .lua file in appropriate plugins/*/ subdir |
| Add formatter | lua/gl00ria/plugins/coding/conform.lua |
| Add linter | lua/gl00ria/plugins/coding/lint.lua |
- Plugin spec:
vim.pack.add { { src = 'https://github.com/...', version = ... } }at top of each plugin file - Guard pattern:
local ok, mod = pcall(require, 'mod'); if ok then mod.setup { ... } end - Lazy-load:
require 'gl00ria.config.lazy'βlazy.on_ui_enter(fn, 'id')orlazy.on_event(event, fn, 'id') - Keymaps:
vim.keymap.setonly. Always{ desc = '...' }.'n'mode unless multi-mode - Autocmds: Named augroup with
{ clear = true }. Each inautocmd.lua - Modeline:
vim: ts=2 sts=2 sw=2 etat end of config files - LSP keymaps: Defined in
lspconfig.luainsideLspAttachcallback, desc prefixed with'LSP: '
- DO NOT use
vim.api.nvim_set_keymapβ usevim.keymap.set - DO NOT use
:setβ usevim.o/vim.opt - DO NOT add plugin specs in global files β each plugin gets its own file
- DO NOT add to
.archived/β read-only history - DO NOT use
on_attachin LSP lang configs β use the globalLspAttachinlspconfig.lua - DO NOT put language-specific keymaps in
langs/files β shared keymaps go inlspconfig.lua - AVOID
vim.cmdwhere Lua API exists
1st_load/dir β forces plugins to load before alphabetically-sorted ones (solves dependency ordering with vim.pack)vim._core.ui2experimental UI β enabled in init.lua (doesn't play well with noice.nvim)cmdheight=0with CmdlineEnter/Leave autocmd toggling it to 1 β minimal UI, restored viaredrawstatus().neoconf.jsonfor neodev/Lua LS library routing- 22 per-language LSP configs in
coding/lsp/langs/β usevim.lsp.config()+vim.lsp.enable(), notlspconfig.setup()
# Validate Lua syntax:
find . -name '*.lua' -not -path '*/.archived/*' -exec luac -p {} \;
# Format with StyLua:
stylua lua/
# Update plugins:
:lua vim.pack.update()- Plugin load order is deterministic:
1st_loadβaiβcodingβeditorβuiβutils(defined inplugins.lua) vim.packis Neovim's built-in packer β see:help vim.pack- Sub-directories have their own
AGENTS.mdwith deeper conventions:lua/gl00ria/config/AGENTS.md,lua/gl00ria/plugins/coding/lsp/AGENTS.md