The Colorful Dodecagon: yet another color scheme.
After searching for a while for a terminal color scheme with certain properties, I gave up and made my own. Here are the coveted goals:
While this sounds pretty easy, it’s made more difficult by the fact that the RGB color space maps very poorly to what our eyes actually see. For instance, pure green on black is too bright, while pure blue on black is too dark.
The LAB color space largely solves this problem by being designed around perceived color: distances in LAB space approximate perceived color distance. It measured colors by a lightness axis (L) ranging from 0% (black) to 100% (white), a red-green axis (A) ranging from 128 (red) to -128 (green), and a blue-yellow axis (B) ranging from 128 (blue) to -128 (yellow). Interestingly, not all LAB colors can be converted to RGB; monitors that just display three colors can’t represent every color we can see.
The Colorful Dodecagon has 12 bright colors equally spaced in LAB space. They have a brightness of 74%, which maximizes how saturated the colors can be and still fit in RGB space. Its white has a brightness of 90%, and its black has a brightness of 10%. In the terminal, I use every other color from the Dodecagon, making all of the colors equidistant from white and from their neighbors (at a distance of 40 in LAB space).
The main color contenders for color schemes I found on the internet were Solarized and Base16. Solarized has an absurdly low contrast of like 40%: its zoomed-in screenshot looks pretty, but when you actually start coding in it it’s hard to read. Base16 is much better. My only complaints are that blue and teal are hard to distinguish (only 16 distance away in LAB space), and that the red is garish (it has a LAB brightness of ~40%, while the other colors have a brightness around ~70%).
COLOR_NAME L A B HEX TERMINAL
black 10 0 0 #1b1b1b black
white 90 0 0 #e2e2e2 white
pink 74 40 0 #fa99b7
red 74 35 20 #fc9c93 red
orange 74 20 35 #eba676
yellow 74 0 40 #cdb36b yellow
pear 74 -20 35 #a7be74
green 74 -35 20 #7ac68f green
teal 74 -40 0 #48c9b4
cyan 74 -35 -20 #01c8d9 cyan
blue 74 -20 -35 #3ac3f5
indigo 74 0 -40 #80b9fe blue
lavender 74 20 -35 #b9acf6
magenta 74 35 -20 #e49fdb magenta
If we allow colors to be brighter in exchange for some of the colors not being representable, and thus getting rounded, we get this next circle. Note that “pink” is a bit off, and “red” is quite off:
COLOR_NAME L A B HEX TERMINAL
black 10 0 0 #1b1b1b black
white 90 0 0 #e2e2e2 white
pink 78 40 0 #ffa4c2
red 78 35 20 #ffa79e! red
orange 78 20 35 #f8b281
yellow 78 0 40 #dabf76 yellow
pear 78 -20 35 #b3ca7f
green 78 -35 20 #86d19a green
teal 78 -40 0 #56d5c0
cyan 78 -35 -20 #29d4e5 cyan
blue 78 -20 -35 #4bceff
indigo 78 0 -40 #80b9fe blue
lavender 78 20 -35 #c5b7ff
magenta 78 35 -20 #f0aae7 magenta
For an extremely in-depth overview of color, check out handprint.com.