Neovim 0.11+, lazy.nvim, no Mason — every external tool is a system package.
Arrows point at what a layer is allowed to require.
init.lua
├── core/ ─────────────────┐
└── lazy.nvim │
└── plugins/ ────────┤ specs; no logic
├── features/ ─┤ the code specs call into
├── theme/ ────┤ roles → highlights, on a ColorScheme hook
└── toolchain/ ┤ one tool inventory, read by conform + nvim-lint
scaffold/┘
└──> lib/ generic, knows no plugin
| Directory | Holds |
|---|---|
lua/core/ |
options, filetypes, autocmds, keymaps |
lua/lib/ |
root detection, lazy-require, cursor state |
lua/features/ |
refactoring engine, lsp, lualine, edgy |
lua/plugins/ |
lazy specs, and the lazy-loading rules |
lua/theme/ |
colorscheme switching, :Theme |
lua/toolchain/ |
:Toolchain*, the JSON store |
lua/scaffold/ |
:ProjectScaffold, :ProjectDoctor |
ansible/ |
provisioning the tools |
tests/ |
regression tests — just test |
- A plugin's spec lives in
lua/plugins/, its code inlua/features/. - Formatters, linters and LSP servers are declared once, in
lua/toolchain/registry.lua. conform and nvim-lint derive their filetype maps from it. - Refactorings build a plan and apply none of it, so preview, conflict gating and
cross-file undo are shared — see
lua/features/refactor/. - Language actions are keyed by question, not by language:
<leader>bbuilds and runs,<leader>ttests,<leader>ddebugs and<leader>vinspects in Rust, C, Zig, Go, Python and Lua alike — seelua/features/lang/. - The binary is a source of truth too:
<leader>xshows struct holes, the linked machine code, sanitizer frames, rr record/replay, and the kernel-tree workflow (b4, checkpatch, Kconfig, QEMU) — seelua/features/sys/. - Crashes open like files:
<leader>dcpicks a core dump,:CrashDecoderesolves vmlinux and module.koframes, and<CR>jumps to the faulting line — seelua/features/crash/. - Windows have names, and transient views borrow a pane instead of opening their own —
see
lua/features/workspace/.
| Lazy loading | Debugging |
|---|---|
![]() |
![]() |
- very inspired by LazyVim
- thank you tony btw for ts queries TonyBtw/nvim


