Comparing iTerm2 and Neovim Theme Similarity
Color palette distance analysis across hundreds of themes
Methods
I compared iTerm2 and Neovim color themes by extracting their palettes from theme files and computing a similarity score:
iTerm2 palettes were parsed from
.itermcolorsplist files.
Neovim palettes were extracted from Lua/Vim files in their repositories.
Colors were standardized and converted to the CIELAB (Lab) color space,
which is designed to be more perceptually uniform and closer to human visual differences than raw sRGB distances.
I compare each color in one palette to its closest match in the other, then average those distances in both directions. For Neovim themes with multiple sub-palettes (like Catppuccin), the method naturally highlights whichever sub-theme matches best.
This distance was then normalized into a similarity index (0–1), where higher values indicate more similar palettes.
Duplicate theme pairs were collapsed by keeping the maximum similarity score.
The similarity values reported here reflect perceptual similarity between palettes rather than raw channel differences.
This heatmap visualizes global similarity patterns. The y-axis has iTerm2 themes, and the x-axis has Neovim themes. On the left you see a cluster of Neovim themes that are less compatible with most iTerm2 themes (lower similarity scores). At the top you see iTerm2 themes that are least compatible with most Neovim themes.
Results
Top Tables
| Most Compatible Neovim Themes (mean similarity) | |
|---|---|
| Neovim Theme | Mean Similarity |
| zenbones.nvim | 0.919 |
| neopywal.nvim | 0.917 |
| nvim-highlite | 0.917 |
| nvim | 0.916 |
| ef-themes.nvim | 0.913 |
| Base2Tone-nvim | 0.913 |
| Base4Tone-nvim | 0.912 |
| monokai-nightasty.nvim | 0.912 |
| noctis.nvim | 0.911 |
| nox.nvim | 0.909 |
| edelweiss | 0.908 |
| neovim-ayu | 0.908 |
| auto-theme.nvim | 0.907 |
| nightfall.nvim | 0.907 |
| habamax.nvim | 0.906 |
| gruv-vsassist.nvim | 0.906 |
| candyland.nvim | 0.906 |
| pink-as-fox.nvim | 0.906 |
| astrotheme | 0.906 |
| vim-color-export | 0.905 |
| Most Compatible iTerm Themes (mean similarity) | |
|---|---|
| iTerm Theme | Mean Similarity |
| Spacegray Bright | 0.903 |
| Spacegray Eighties Dull | 0.903 |
| Peppermint | 0.901 |
| Later This Evening | 0.901 |
| Nord | 0.901 |
| Cursor Dark | 0.900 |
| Spacegray Eighties | 0.900 |
| Sonokai | 0.900 |
| Havn Daggry | 0.900 |
| Pale Night Hc | 0.900 |
| Tomorrow Night Eighties | 0.899 |
| Ghostty Default Style Dark | 0.899 |
| Tomorrow Night | 0.899 |
| Mariana | 0.899 |
| Relaxed | 0.899 |
| Teerb | 0.899 |
| Elegant | 0.899 |
| Moonfly | 0.898 |
| One Half Dark | 0.898 |
| Pnevma | 0.897 |
| Least Compatible Neovim Themes (mean similarity) | |
|---|---|
| Neovim Theme | Mean Similarity |
| pastelnight.nvim | 0.696 |
| nvim-conf-2024 | 0.696 |
| simplevim | 0.745 |
| pywal-lush | 0.791 |
| nortia.nvim | 0.796 |
| Antares | 0.797 |
| evening_vim | 0.797 |
| nimda.vim | 0.802 |
| dracula-mini.nvim | 0.818 |
| lsp-colors.nvim | 0.819 |
| Least Compatible iTerm Themes (mean similarity) | |
|---|---|
| iTerm Theme | Mean Similarity |
| HaX0R Gr33N | 0.832 |
| Gruvbox Material Light | 0.840 |
| Sugarplum | 0.842 |
| Darkermatrix | 0.843 |
| Alien Blood | 0.843 |
| Retro | 0.847 |
| HaX0R R3D | 0.848 |
| Matrix | 0.848 |
| Neobones Light | 0.849 |
| Darkmatrix | 0.852 |
Recommended Theme Pairings
The following theme pairs represent the closest visual matches between iTerm2 and Neovim themes based on visual similarity index. Obvious matches have been mostly filtered out.
These pairings are recommended for users who want a consistent look across their terminal and editor, since their palettes are perceptually similar according to CIELAB-based distance metrics.
A higher similarity value (closer to 1.0) indicates a stronger match.
| Top 50 Mostly Non-Obvious Matches (iTerm ↔︎ Neovim) | |||
|---|---|---|---|
| iTerm Theme | Neovim Theme | Neovim Repo URL | Similarity |
| One Half Light | onehalf | github.com/ClearAspect/onehalf | 0.987 |
| Everblush | nightly.nvim | github.com/Alexis12119/nightly.nvim | 0.986 |
| Tomorrow Night | rusty | github.com/armannikoyan/rusty | 0.974 |
| Snazzy Soft | camila | github.com/jlobos/camila | 0.970 |
| Rose Pine Moon | Sakura.nvim | github.com/numToStr/Sakura.nvim | 0.968 |
| TokyoNight | kyotonight.vim | github.com/shrikecode/kyotonight.vim | 0.966 |
| TokyoNight Storm | kyotonight.vim | github.com/shrikecode/kyotonight.vim | 0.966 |
| Tomorrow Night | hybrid.nvim | github.com/HoNamDuong/hybrid.nvim | 0.966 |
| Rose Pine | Sakura.nvim | github.com/numToStr/Sakura.nvim | 0.965 |
| One Half Dark | onehalf | github.com/ClearAspect/onehalf | 0.965 |
| Challenger Deep | DarkScene.vim | github.com/aswathkk/DarkScene.vim | 0.963 |
| TokyoNight Night | kyotonight.vim | github.com/shrikecode/kyotonight.vim | 0.963 |
| CGA | templeos.nvim | github.com/LunarVim/templeos.nvim | 0.961 |
| Atom One Dark | onepro | github.com/rafamadriz/onepro | 0.961 |
| Challenger Deep | embark-lua.nvim | github.com/rishitxyz/embark-lua.nvim | 0.960 |
| Black Metal (Marduk) | nolife.nvim | github.com/csgn/nolife.nvim | 0.959 |
| Mellow | oldtale.nvim | github.com/topazape/oldtale.nvim | 0.959 |
| Nvim Dark | monoglow.nvim | github.com/wnkz/monoglow.nvim | 0.959 |
| Gruvbox Dark | gruvsquirrel.nvim | github.com/mikesmithgh/gruvsquirrel.nvim | 0.958 |
| Gruvbox Dark Hard | gruvsquirrel.nvim | github.com/mikesmithgh/gruvsquirrel.nvim | 0.957 |
| Cursor Dark | nordic.nvim | github.com/AlexvZyl/nordic.nvim | 0.957 |
| Mellow | obscure.nvim | github.com/killitar/obscure.nvim | 0.957 |
| Popping And Locking | gruvbox-baby | github.com/luisiacc/gruvbox-baby | 0.956 |
| Tomorrow Night Bright | hybrid.nvim | github.com/HoNamDuong/hybrid.nvim | 0.956 |
| One Half Light | auto-theme.nvim | github.com/Silzinc/auto-theme.nvim | 0.956 |
| One Half Dark | neopywal.nvim | github.com/RedsXDD/neopywal.nvim | 0.956 |
| N0Tch2K | nolife.nvim | github.com/csgn/nolife.nvim | 0.956 |
| Carbonfox | oxocarbon-lua.nvim | github.com/Dich0tomy/oxocarbon-lua.nvim | 0.956 |
| Monokai Pro | 0x96f.nvim | github.com/filipjanevski/0x96f.nvim | 0.955 |
| Sonokai | neopywal.nvim | github.com/RedsXDD/neopywal.nvim | 0.955 |
| Cursor Dark | nord.nvim | github.com/gbprod/nord.nvim | 0.954 |
| Nord | neopywal.nvim | github.com/RedsXDD/neopywal.nvim | 0.954 |
| Nord Wave | neopywal.nvim | github.com/RedsXDD/neopywal.nvim | 0.954 |
| Gruvbox Material Dark | concoctis.nvim | github.com/gwh-dev/concoctis.nvim | 0.954 |
| One Half Dark | onepro | github.com/rafamadriz/onepro | 0.954 |
| Gruvbox Light Hard | gruvsquirrel.nvim | github.com/mikesmithgh/gruvsquirrel.nvim | 0.954 |
| Gruvbox Light | gruvsquirrel.nvim | github.com/mikesmithgh/gruvsquirrel.nvim | 0.954 |
| Rose Pine Dawn | Sakura.nvim | github.com/numToStr/Sakura.nvim | 0.954 |
| Black Metal (Venom) | nolife.nvim | github.com/csgn/nolife.nvim | 0.953 |
| Everblush | radium.nvim | github.com/Sly-Harvey/radium.nvim | 0.953 |
| Gruvbox Dark | custom16 | github.com/grecodavide/custom16 | 0.953 |
| Nord | nebulae.nvim | github.com/Ureakim/nebulae.nvim | 0.953 |
| Doom One | nightly.nvim | github.com/Alexis12119/nightly.nvim | 0.953 |
| Nord Light | nebulae.nvim | github.com/Ureakim/nebulae.nvim | 0.953 |
| CGA | palette.vim | github.com/watcol/palette.vim | 0.953 |
| Black Metal (Gorgoroth) | nolife.nvim | github.com/csgn/nolife.nvim | 0.952 |
| Atom One Dark | nightly.nvim | github.com/Alexis12119/nightly.nvim | 0.952 |
| Black Metal (Marduk) | cgrey | github.com/aranggitoar/cgrey | 0.952 |
| Atom One Dark | auto-theme.nvim | github.com/Silzinc/auto-theme.nvim | 0.952 |
| N0Tch2K | lackluster.nvim | github.com/slugbyte/lackluster.nvim | 0.952 |
| Similarity index is scaled 0–1 (higher = better). | |||