// VIMCOLORSCHEMES — ENGINEERING REPORT

732 curated Vim colorschemes · pure colors/*.vim · Pathogen / vim-plug / native packages / lazy.nvim · terminal + GUI + Neovim

>_EXECUTIVE SUMMARY

VimColorSchemes is a single hand-curated bundle of 732 Vim colorschemes. Every file under colors/ is a self-contained .vim highlight script — a working :colorscheme target as soon as the directory is on runtimepath. There is no runtime, no autoload, no compiled artifact: the entire plugin is 125,715 lines of .vim across the 732 files (~6.3 MB on disk, avg 172 lines/scheme). It loads under Pathogen, vim-plug, packer, lazy.nvim, native Vim 8 packages, or a bare set rtp+=, in terminal Vim (256-color + truecolor), GUI Vim, and Neovim. The repo ships 4 CI test scripts that pin scheme count, file integrity, name hygiene, and headless load.

732
Colorschemes (colors/*.vim)
125,715
Total .vim Lines
6.3 MB
Bundle Size on Disk
172
Avg Lines / Scheme
657
Schemes with GUI Colors (guifg)
485
Schemes with Term Colors (ctermfg)
463
Declare background=dark
161
Declare background=light
4
CI Test Scripts

~STRUCTURE

The repo is data, not code: a flat colors/ directory of self-contained schemes plus a thin test/CI layer. Nothing is sourced at startup except the one scheme the user selects with :colorscheme.

PathCountRole
colors/*.vim 732 The bundle. Each file is a standalone Vim highlight script — hi clear / syntax reset preamble, let g:colors_name='…', then a block of :highlight definitions (most branch on has('gui_running') / &t_Co / &background). 125,715 lines total, ~6.3 MB.
tests/repo-contract.sh 1 No-Vim repo gate. Pins the README schemes-N badge against the live colors/ count; rejects empty / sub-10-byte files; rejects filenames with spaces or shell-unsafe characters; rejects duplicate basenames; reports g:colors_name-vs-filename mismatches as INFO.
tests/validate-colorschemes.sh 1 Headless Vim loader. Sources every scheme under try/catch (so E411 "highlight group not found" does not abort), verifies no script-level error, and checks g:colors_name matches the basename. Schemes without g:colors_name are counted as INFO, not failed.
tests/colors-name-pinned.sh 1 Pins that the repo's OWN authored schemes (menketech-cyberpunk, zpwr*) declare let g:colors_name = '<basename>' — vendored upstream mismatches are tolerated, but authored schemes must complete correctly.
tests/colors-name-vendored-walk.sh 1 Walks the vendored schemes and audits their g:colors_name declarations.
license.md 1 MIT for the curation layer. Individual schemes retain their upstream licenses where applicable (see per-file headers).
.github/workflows/ci.yml 1 CI: static audit (non-empty files, count floor at 600, g:colors_name coverage), headless vim-load over every scheme, repo-contract, and the authored-scheme name pins.
Bundle total 732 colors/*.vim · 125,715 lines · pure Vimscript · zero runtime

$SCHEME FAMILIES

The 732 decks include several named families plus the MenkeTechnologies-authored set. Counts below are exact filename-prefix tallies from colors/.

Family / AuthorCountMembers / notes
base16-*11The Atelier set (cave, dune, estuary, forest, heath, lakeside, plateau, savanna, seaside, sulphurpool) plus base16-railscasts.
duotone-*12cave, desert, earth, forest, heath, lake, meadow, park, pool, sea, space — plus the base duotone-dark.
colorsbox-*7faff, greenish, material, stblue, stbright, steighties, stnight.
Tomorrow*5Tomorrow, Tomorrow-Night, Tomorrow-Night-Blue, Tomorrow-Night-Bright, Tomorrow-Night-Eighties.
zpwr* (authored)7zpwrelise, zpwrelrond, zpwrguardian, zpwrmarklar, zpwrneverness, zpwrpride, zpwrsprinkles — MenkeTechnologies recolors of base decks.
menketech* (authored)2menketechnologies and menketech-cyberpunk.
Community classicsPorts / forks of gruvbox, solarized, molokai, jellybeans, onedark, zenburn, wombat, railscasts, PaperColor, OceanicNext, iceberg, badwolf, and many more.

=COLOR COVERAGE

Each scheme is highlight-group data. The split below is grep-derived from colors/ — the same file can appear in multiple rows (most define both GUI and terminal colors, and many branch on &background).

DimensionSchemesMeaning
GUI colors (guifg)657Define truecolor hex for GUI Vim / termguicolors terminals.
Terminal colors (ctermfg)485Define 256-color (or 16-color) cterm palettes for non-GUI terminal Vim.
background=dark463Branch into / declare a dark palette.
background=light161Branch into / declare a light palette.
g:colors_name declared694Match colors_name in some form — these surface in :colorscheme <Tab> completion. The remainder (~38 per CI) load fine but do not autocomplete.

#TEST & CI

Four shell test scripts under tests/, wired into a four-job GitHub Actions workflow. No live editor needed for three of them; the fourth installs vim-nox and sources every scheme headless.

CI jobScriptPins
static-checks(inline)Every colors/*.vim is non-empty; total count must stay above a catastrophic-shrink floor of 600; g:colors_name coverage audit fails only if more than 60 schemes lack a name declaration.
vim-loadvalidate-colorschemes.shInstalls vim-nox, sources every scheme under try/catch, verifies no script-level error and that g:colors_name matches the basename. 30-minute timeout for the full walk.
repo-contractrepo-contract.shREADME schemes-N badge matches live count; no empty / sub-10-byte / spaced / shell-unsafe / duplicate filenames.
colors-name-pinnedcolors-name-pinned.shThe repo's authored schemes (menketech-cyberpunk, zpwr*) declare g:colors_name == basename so they complete correctly.

/DESIGN DECISIONS

Bundle, not a plugin manager

Rather than installing 732 schemes through a manager one at a time, the entire curated set is one git clone. Cost: a larger repo (~6.3 MB). Gain: every palette is available with no per-scheme bookkeeping, and the set is reproducible across machines.

Zero runtime

No autoload/, no plugin/, no startup hook. Only the single scheme the user selects via :colorscheme is ever sourced — cold startup cost of the bundle is effectively zero, just the runtimepath entry.

Filename = scheme name

Vim's :colorscheme <name> resolves against the file basename. The repo-contract test rejects spaces, shell-unsafe characters, and duplicate basenames precisely because Vim silently shadows duplicates and cannot tab-complete names with spaces.

Tolerate vendored mismatches, pin own schemes

~38 vendored schemes pre-date the g:colors_name convention or declare a mismatched name; they load fine and are tolerated as INFO. The repo's OWN authored schemes (zpwr*, menketech-cyberpunk) are hard-pinned to name == basename so completion works.

Headless validation under try/catch

The CI validator sources each scheme in vim-nox wrapped in try/catch so a missing-plugin highlight group (E411) does not register as a failure — only true script-level parse errors fail the build.

Shrink guard, not exact pin

CI floors the count at 600 rather than pinning exactly 732 — adding schemes never breaks the build, but a catastrophic deletion (bad merge, accidental rm) does. The README badge, by contrast, is pinned exactly by repo-contract.sh.


@FOOTPRINT