>_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.
~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.
| Path | Count | Role |
|---|---|---|
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 / Author | Count | Members / notes |
|---|---|---|
base16-* | 11 | The Atelier set (cave, dune, estuary, forest, heath, lakeside, plateau, savanna, seaside, sulphurpool) plus base16-railscasts. |
duotone-* | 12 | cave, desert, earth, forest, heath, lake, meadow, park, pool, sea, space — plus the base duotone-dark. |
colorsbox-* | 7 | faff, greenish, material, stblue, stbright, steighties, stnight. |
Tomorrow* | 5 | Tomorrow, Tomorrow-Night, Tomorrow-Night-Blue, Tomorrow-Night-Bright, Tomorrow-Night-Eighties. |
zpwr* (authored) | 7 | zpwrelise, zpwrelrond, zpwrguardian, zpwrmarklar, zpwrneverness, zpwrpride, zpwrsprinkles — MenkeTechnologies recolors of base decks. |
menketech* (authored) | 2 | menketechnologies and menketech-cyberpunk. |
| Community classics | — | Ports / 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).
| Dimension | Schemes | Meaning |
|---|---|---|
GUI colors (guifg) | 657 | Define truecolor hex for GUI Vim / termguicolors terminals. |
Terminal colors (ctermfg) | 485 | Define 256-color (or 16-color) cterm palettes for non-GUI terminal Vim. |
background=dark | 463 | Branch into / declare a dark palette. |
background=light | 161 | Branch into / declare a light palette. |
g:colors_name declared | 694 | Match 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 job | Script | Pins |
|---|---|---|
| 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-load | validate-colorschemes.sh | Installs 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-contract | repo-contract.sh | README schemes-N badge matches live count; no empty / sub-10-byte / spaced / shell-unsafe / duplicate filenames. |
| colors-name-pinned | colors-name-pinned.sh | The 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
- Disk: 732
colors/*.vimfiles, 125,715 lines, ~6.3 MB. No compiled artifacts. - Startup cost: zero beyond the
runtimepathentry — nothing is sourced until:colorschemeselects one file. - Runtime cost: one scheme file sourced per
:colorschemeinvocation. Largest single scheme isgryffin.vimat 1,305 lines; smallest ischarged-256.vimat 18. - Dependencies: none for the bundle itself. CI's vim-load job installs
vim-nox; the no-Vim gates run on a minimal image. - Compatibility: terminal Vim (256-color + truecolor), GUI Vim, Neovim. Any loader honouring
runtimepath/:colorscheme <name>— Pathogen, vim-plug, packer, lazy.nvim, native Vim 8 packages, bareset rtp+=. - License: MIT for the curation layer; individual schemes retain their upstream licenses where applicable.