VHS's catalog of 348 schemes is embedded (MIT, see NOTICE) plus a 1-2-3 Classic scheme; user themes load from Ghostty, kitty or VHS JSON files. Roles stay defined on the ANSI slots and are drawn in the scheme's colors with contrast correction adapted from puzzletea. New roles fill the menu bar, formula bar, context line, column header row and status line as bands, and the screen with the scheme background.
- commit
- 13d59e829144a9235215c01963c1eb315d28485a
- parent
- 3605d716fe42da84fbfea814371197bac1ae002b
- author
- Dami <dami.etoile@gmail.com>
| A | NOTICE | 30 | + |
| A | internal/ | 115 | + |
| A | internal/ | 103 | + |
| A | internal/ | 396 | + |
| A | internal/ | 148 | + |
| A | internal/ | 207 | + |
| M | internal/ | 32 | +- |
| A | internal/ | 10689 | ++++++++++++++++++++++++++++++ |
@@ -0,0 +1,30 @@
1+012 includes third-party material, used under the licenses below.2+3+-------------------------------------------------------------------------------4+internal/ui/theme/themes.json5+6+The built-in terminal color schemes, copied unchanged from VHS7+(https://github.com/charmbracelet/vhs, themes.json, v0.12.1). Each scheme's8+original authors are credited in its "meta.credits" entry.9+10+MIT License11+12+Copyright (c) 2022-2023 Charmbracelet, Inc13+14+Permission is hereby granted, free of charge, to any person obtaining a copy15+of this software and associated documentation files (the "Software"), to deal16+in the Software without restriction, including without limitation the rights17+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell18+copies of the Software, and to permit persons to whom the Software is19+furnished to do so, subject to the following conditions:20+21+The above copyright notice and this permission notice shall be included in all22+copies or substantial portions of the Software.23+24+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR25+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,26+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE27+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER28+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,29+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE30+SOFTWARE.@@ -0,0 +1,115 @@
1+package theme2+3+import (4+ "image/color"5+ "math"6+)7+8+// Contrast correction for color schemes, adapted from puzzletea's theme9+// package (same author): WCAG 2 contrast, and a readable replacement for10+// a foreground that falls short, taken from the scheme's own colors when11+// one qualifies.12+13+// Contrast minimums.14+const (15+ minText = 4.5 // text: WCAG AA16+ minSecondary = 3.0 // hints, muted text, borders, chart axes17+ minDisabled = 2.0 // unavailable items stay visible but recede18+ minDistinct = 1.2 // a background role against the screen, so bars and highlights show19+)20+21+func luminance(c color.Color) float64 {22+ r, g, b, _ := c.RGBA()23+ lin := func(v uint32) float64 {24+ f := float64(v) / 0xffff25+ if f <= 0.04045 {26+ return f / 12.9227+ }28+ return math.Pow((f+0.055)/1.055, 2.4)29+ }30+ return 0.2126*lin(r) + 0.7152*lin(g) + 0.0722*lin(b)31+}32+33+// contrast is the WCAG contrast ratio of two colors, from 1 to 21.34+func contrast(a, b color.Color) float64 {35+ la, lb := luminance(a), luminance(b)36+ if la < lb {37+ la, lb = lb, la38+ }39+ return (la + 0.05) / (lb + 0.05)40+}41+42+// readable returns fg, or when it has less than min contrast with bg,43+// the scheme color closest to it in lightness that has enough, or failing44+// that the nearest color toward black or white that does.45+func readable(fg, bg color.Color, p *Palette, min float64) color.Color {46+ if contrast(fg, bg) >= min {47+ return fg48+ }49+ target := luminance(fg)50+ var best color.Color51+ bestDist := math.Inf(1)52+ for _, c := range append(p.ANSI[:], p.Foreground, p.Background) {53+ if d := math.Abs(luminance(c) - target); contrast(c, bg) >= min && d < bestDist {54+ best, bestDist = c, d55+ }56+ }57+ if best != nil {58+ return best59+ }60+ return nudge(fg, bg, min)61+}62+63+// nudge blends fg toward white or black, whichever moves it away from64+// bg, just far enough to reach min contrast.65+func nudge(fg, bg color.Color, min float64) color.Color {66+ var end color.Color = color.White67+ if luminance(fg) <= luminance(bg) {68+ end = color.Black69+ }70+ if contrast(end, bg) < min {71+ if end == color.White {72+ end = color.Black73+ } else {74+ end = color.White75+ }76+ }77+ lo, hi := 0.0, 1.078+ for range 24 {79+ mid := (lo + hi) / 280+ if contrast(blend(fg, end, mid), bg) >= min {81+ hi = mid82+ } else {83+ lo = mid84+ }85+ }86+ return blend(fg, end, hi)87+}88+89+// distinct returns bg, or when it's too close to the screen to show, bg90+// moved toward toward until it stands apart.91+func distinct(bg, screen, toward color.Color) color.Color {92+ if contrast(bg, screen) >= minDistinct {93+ return bg94+ }95+ lo, hi := 0.0, 1.096+ for range 24 {97+ mid := (lo + hi) / 298+ if contrast(blend(bg, toward, mid), screen) >= minDistinct {99+ hi = mid100+ } else {101+ lo = mid102+ }103+ }104+ return blend(bg, toward, hi)105+}106+107+// blend is t of the way from a to b.108+func blend(a, b color.Color, t float64) color.Color {109+ ar, ag, ab, _ := a.RGBA()110+ br, bg, bb, _ := b.RGBA()111+ mix := func(x, y uint32) uint8 {112+ return uint8(float64(x>>8)*(1-t) + float64(y>>8)*t + 0.5)113+ }114+ return color.RGBA{R: mix(ar, br), G: mix(ag, bg), B: mix(ab, bb), A: 0xff}115+}@@ -0,0 +1,103 @@
1+package theme2+3+import (4+ "image/color"5+ "strings"6+7+ "charm.land/lipgloss/v2"8+ "github.com/charmbracelet/x/ansi"9+)10+11+// Fill draws a rendered line on a band's colors out to width columns:12+// every cell without a background of its own gets the band's background,13+// and every cell without a text color its foreground. Styled parts (key14+// chips, the mode indicator) keep their colors. A band with no colors15+// returns the line unchanged.16+//17+// It works on the escape sequences, so it costs one pass over the line:18+// the band's colors are set at the start and again after every SGR that19+// resets them.20+func Fill(line string, width int, band lipgloss.Style) string {21+ bg, fg := band.GetBackground(), band.GetForeground()22+ hasBg, hasFg := !isNoColor(bg), !isNoColor(fg)23+ if !hasBg && !hasFg {24+ return line25+ }26+ set := func(needBg, needFg bool) string {27+ st := ansi.NewStyle()28+ if needBg && hasBg {29+ st = st.BackgroundColor(bg)30+ }31+ if needFg && hasFg {32+ st = st.ForegroundColor(fg)33+ }34+ if len(st) == 0 {35+ return ""36+ }37+ return st.String()38+ }39+ var b strings.Builder40+ b.Grow(len(line) + 64)41+ b.WriteString(set(true, true))42+ p := ansi.NewParser()43+ var state byte44+ w := 045+ for s := line; len(s) > 0; {46+ seq, sw, n, newState := ansi.DecodeSequence(s, state, p)47+ state, s = newState, s[n:]48+ b.WriteString(seq)49+ w += sw50+ if sw == 0 && isSGR(seq, p) {51+ resetBg, resetFg := sgrResets(p.Params())52+ b.WriteString(set(resetBg, resetFg))53+ }54+ }55+ if w < width {56+ b.WriteString("\x1b[m" + set(true, true) + strings.Repeat(" ", width-w))57+ }58+ b.WriteString("\x1b[m")59+ return b.String()60+}61+62+// isSGR reports whether seq, just decoded by p, is Select Graphic63+// Rendition (ESC [ ... m).64+func isSGR(seq string, p *ansi.Parser) bool {65+ if !ansi.HasCsiPrefix(seq) {66+ return false67+ }68+ c := ansi.Cmd(p.Command())69+ return c.Final() == 'm' && c.Prefix() == 0 && c.Intermediate() == 070+}71+72+// sgrResets reports whether an SGR's parameters leave the background and73+// the foreground at the terminal's default, so the band's must be set74+// again.75+func sgrResets(params ansi.Params) (bg, fg bool) {76+ if len(params) == 0 {77+ return true, true78+ }79+ for i := 0; i < len(params); i++ {80+ switch v := params[i].Param(0); {81+ case v == 0:82+ bg, fg = true, true83+ case v == 39:84+ fg = true85+ case v == 49:86+ bg = true87+ case v >= 30 && v <= 37, v >= 90 && v <= 97:88+ fg = false89+ case v >= 40 && v <= 47, v >= 100 && v <= 107:90+ bg = false91+ case v == 38 || v == 48 || v == 58:92+ var c color.Color93+ n := ansi.ReadStyleColor(params[i:], &c)94+ if v == 38 {95+ fg = false96+ } else if v == 48 {97+ bg = false98+ }99+ i += max(n, 1) - 1100+ }101+ }102+ return bg, fg103+}@@ -0,0 +1,396 @@
1+package theme2+3+import (4+ _ "embed"5+ "encoding/json"6+ "errors"7+ "fmt"8+ "image/color"9+ "os"10+ "path/filepath"11+ "slices"12+ "strconv"13+ "strings"14+ "sync"15+ "unicode"16+)17+18+// A Palette is a terminal color scheme, the kind every terminal ships19+// and Ghostty, kitty, iTerm2 and VHS share: the 16 ANSI colors, the20+// background and foreground, and optionally the selection color. 012's21+// roles are defined on these slots (see New), so any scheme works.22+type Palette struct {23+ Name string24+ ANSI [16]color.Color25+ Background color.Color26+ Foreground color.Color27+ Selection color.Color // may be nil28+ Dark bool29+ File string // the file it came from; empty for built-ins30+}31+32+// Terminal is the theme name that keeps the terminal's own palette.33+const Terminal = "terminal"34+35+// themesJSON is VHS's theme catalog (MIT, Charmbracelet; see NOTICE),36+// so names match VHS's Set Theme.37+//38+//go:embed themes.json39+var themesJSON []byte40+41+// classic is 1-2-3's DOS look: CGA colors on blue.42+const classic = `# 1-2-3 Classic: CGA colors on a blue screen.43+background = #0000aa44+foreground = #ffffff45+selection-background = #00aaaa46+palette = 0=#00000047+palette = 1=#aa000048+palette = 2=#00aa0049+palette = 3=#aa550050+palette = 4=#0000aa51+palette = 5=#aa00aa52+palette = 6=#00aaaa53+palette = 7=#aaaaaa54+palette = 8=#55555555+palette = 9=#ff555556+palette = 10=#55ff5557+palette = 11=#ffff5558+palette = 12=#5555ff59+palette = 13=#ff55ff60+palette = 14=#55ffff61+palette = 15=#ffffff62+`63+64+// ClassicName is the built-in 1-2-3 scheme.65+const ClassicName = "1-2-3 Classic"66+67+var builtins = sync.OnceValue(func() []Palette {68+ ps, err := parseJSON(themesJSON)69+ if err != nil {70+ panic("theme: embedded themes.json: " + err.Error())71+ }72+ c, _, err := parseText(classic)73+ if err != nil {74+ panic("theme: classic: " + err.Error())75+ }76+ c.Name = ClassicName77+ return append([]Palette{c}, ps...)78+})79+80+// Builtins returns the built-in schemes.81+func Builtins() []Palette { return builtins() }82+83+// Entry is a theme a picker can offer.84+type Entry struct {85+ Name string86+ Dark bool87+ User bool // a file in the themes directory88+}89+90+// List returns the themes available: terminal first, then the files in91+// dir (the user's themes directory, may be ""), then the built-ins, each92+// group sorted by name case-insensitively. A file with a built-in's name93+// hides the built-in.94+func List(dir string) []Entry {95+ out := []Entry{{Name: Terminal, Dark: true}}96+ seen := map[string]bool{}97+ var user []Entry98+ for _, p := range userPalettes(dir) {99+ if key := strings.ToLower(p.Name); !seen[key] {100+ seen[key] = true101+ user = append(user, Entry{Name: p.Name, Dark: p.Dark, User: true})102+ }103+ }104+ sortEntries(user)105+ var bi []Entry106+ for _, p := range Builtins() {107+ if !seen[strings.ToLower(p.Name)] {108+ bi = append(bi, Entry{Name: p.Name, Dark: p.Dark})109+ }110+ }111+ sortEntries(bi)112+ return append(append(out, user...), bi...)113+}114+115+func sortEntries(es []Entry) {116+ slices.SortStableFunc(es, func(a, b Entry) int {117+ return strings.Compare(strings.ToLower(a.Name), strings.ToLower(b.Name))118+ })119+}120+121+// userPalettes reads every theme file in dir, skipping ones that don't122+// parse.123+func userPalettes(dir string) []Palette {124+ if dir == "" {125+ return nil126+ }127+ files, err := os.ReadDir(dir)128+ if err != nil {129+ return nil130+ }131+ var out []Palette132+ for _, f := range files {133+ if f.IsDir() || strings.HasPrefix(f.Name(), ".") {134+ continue135+ }136+ ps, err := ReadFile(filepath.Join(dir, f.Name()))137+ if err == nil {138+ out = append(out, ps...)139+ }140+ }141+ return out142+}143+144+// Lookup finds a scheme by name: a file in dir first (named exactly, or145+// with .json or .conf), then a built-in. Names match case-insensitively,146+// and then ignoring spaces, hyphens and underscores, so "tokyo-night"147+// finds "TokyoNight".148+func Lookup(name, dir string) (Palette, error) {149+ if dir != "" && !strings.ContainsAny(name, `/\`) && name != "." && name != ".." {150+ for _, file := range []string{name, name + ".json", name + ".conf"} {151+ if ps, err := ReadFile(filepath.Join(dir, file)); err == nil {152+ return pick(ps, name), nil153+ } else if !errors.Is(err, os.ErrNotExist) {154+ return Palette{}, err155+ }156+ }157+ }158+ all := append(userPalettes(dir), Builtins()...)159+ for _, match := range []func(string) string{strings.ToLower, squash} {160+ for _, p := range all {161+ if match(p.Name) == match(name) {162+ return p, nil163+ }164+ }165+ }166+ return Palette{}, fmt.Errorf("no theme %q (012 config themes lists them)", name)167+}168+169+// pick returns the scheme called name from a file's schemes, or the170+// first.171+func pick(ps []Palette, name string) Palette {172+ for _, p := range ps {173+ if strings.EqualFold(p.Name, name) {174+ return p175+ }176+ }177+ return ps[0]178+}179+180+func squash(s string) string {181+ return strings.Map(func(r rune) rune {182+ if r == ' ' || r == '-' || r == '_' {183+ return -1184+ }185+ return unicode.ToLower(r)186+ }, s)187+}188+189+// ReadFile reads a theme file: Ghostty's format (palette = N=#rrggbb,190+// background, foreground, selection-background), kitty's (color0 ...191+// color15, background, foreground, selection_background), or VHS's JSON192+// (one scheme or a list). A scheme without a name is named after the193+// file.194+func ReadFile(path string) ([]Palette, error) {195+ data, err := os.ReadFile(path)196+ if err != nil {197+ return nil, err198+ }199+ var ps []Palette200+ if t := strings.TrimSpace(string(data)); strings.HasPrefix(t, "{") || strings.HasPrefix(t, "[") {201+ ps, err = parseJSON(data)202+ } else {203+ var p Palette204+ p, _, err = parseText(string(data))205+ ps = []Palette{p}206+ }207+ if err != nil {208+ return nil, fmt.Errorf("%s: %w", path, err)209+ }210+ for i := range ps {211+ ps[i].File = path212+ if ps[i].Name == "" {213+ ps[i].Name = strings.TrimSuffix(strings.TrimSuffix(filepath.Base(path), ".json"), ".conf")214+ }215+ }216+ return ps, nil217+}218+219+// vhsTheme is a scheme in VHS's themes.json. Puzzletea's spellings220+// (purple, cursorColor, selectionBackground) are accepted too.221+type vhsTheme struct {222+ Name string223+ Black, Red, Green, Yellow, Blue, Magenta, Cyan, White string224+ BrightBlack, BrightRed, BrightGreen, BrightYellow string225+ BrightBlue, BrightMagenta, BrightCyan, BrightWhite string226+ Purple, BrightPurple string227+ Background, Foreground, Selection string228+ SelectionBackground string229+ Meta struct {230+ IsDark *bool `json:"isDark"`231+ }232+}233+234+func parseJSON(data []byte) ([]Palette, error) {235+ var list []vhsTheme236+ if strings.HasPrefix(strings.TrimSpace(string(data)), "{") {237+ var one vhsTheme238+ if err := json.Unmarshal(data, &one); err != nil {239+ return nil, err240+ }241+ list = []vhsTheme{one}242+ } else if err := json.Unmarshal(data, &list); err != nil {243+ return nil, err244+ }245+ out := make([]Palette, 0, len(list))246+ for _, t := range list {247+ p, err := t.palette()248+ if err != nil {249+ return nil, fmt.Errorf("%s: %w", t.Name, err)250+ }251+ out = append(out, p)252+ }253+ if len(out) == 0 {254+ return nil, errors.New("no themes")255+ }256+ return out, nil257+}258+259+func (t vhsTheme) palette() (Palette, error) {260+ or := func(a, b string) string {261+ if a != "" {262+ return a263+ }264+ return b265+ }266+ slots := [16]string{t.Black, t.Red, t.Green, t.Yellow, t.Blue, or(t.Magenta, t.Purple), t.Cyan, t.White,267+ t.BrightBlack, t.BrightRed, t.BrightGreen, t.BrightYellow, t.BrightBlue, or(t.BrightMagenta, t.BrightPurple), t.BrightCyan, t.BrightWhite}268+ p := Palette{Name: t.Name}269+ var err error270+ for i, s := range slots {271+ if p.ANSI[i], err = parseHex(s); err != nil {272+ return p, fmt.Errorf("color %d: %w", i, err)273+ }274+ }275+ if p.Background, err = parseHex(t.Background); err != nil {276+ return p, fmt.Errorf("background: %w", err)277+ }278+ if p.Foreground, err = parseHex(t.Foreground); err != nil {279+ return p, fmt.Errorf("foreground: %w", err)280+ }281+ if sel := or(t.Selection, t.SelectionBackground); sel != "" {282+ p.Selection, _ = parseHex(sel)283+ }284+ p.Dark = isDark(p.Background)285+ if t.Meta.IsDark != nil {286+ p.Dark = *t.Meta.IsDark287+ }288+ return p, nil289+}290+291+// parseText parses Ghostty's or kitty's format. Unknown keys (cursor292+// colors, fonts) are ignored; they're reported in the warnings.293+func parseText(s string) (Palette, []string, error) {294+ var p Palette295+ var warnings []string296+ set := map[string]bool{}297+ for n, line := range strings.Split(s, "\n") {298+ line = strings.TrimSpace(line)299+ if line == "" || strings.HasPrefix(line, "#") {300+ continue301+ }302+ key, val, ok := strings.Cut(line, "=")303+ if !ok || strings.ContainsAny(strings.TrimSpace(key), " \t") {304+ key, val, ok = strings.Cut(line, " ") // kitty: "color0 #000000"305+ }306+ key, val = strings.TrimSpace(key), strings.TrimSpace(val)307+ if !ok {308+ warnings = append(warnings, fmt.Sprintf("line %d: expected key = value", n+1))309+ continue310+ }311+ if err := p.setKey(key, val, set); err != nil {312+ warnings = append(warnings, fmt.Sprintf("line %d: %v", n+1, err))313+ }314+ }315+ if !set["background"] || !set["foreground"] {316+ return p, warnings, errors.New("a theme needs background and foreground")317+ }318+ for i := range p.ANSI {319+ if p.ANSI[i] == nil {320+ p.ANSI[i] = xterm[i]321+ }322+ }323+ p.Dark = isDark(p.Background)324+ return p, warnings, nil325+}326+327+// setKey applies one line of a Ghostty or kitty theme.328+func (p *Palette) setKey(key, val string, set map[string]bool) error {329+ slot := -1330+ switch {331+ case key == "palette": // Ghostty: palette = 4=#81a2be332+ i, c, ok := strings.Cut(val, "=")333+ if !ok {334+ return fmt.Errorf("palette %q: expected N=#rrggbb", val)335+ }336+ slot, val = atoiOr(strings.TrimSpace(i), -1), strings.TrimSpace(c)337+ case strings.HasPrefix(key, "color"): // kitty: color4 #81a2be338+ if slot = atoiOr(strings.TrimPrefix(key, "color"), -1); slot < 0 {339+ return nil340+ }341+ case key != "background" && key != "foreground" && key != "selection-background" && key != "selection_background":342+ return nil // cursor, selection-foreground and the like: not used343+ }344+ if slot >= 16 {345+ return nil // the 256-color cube isn't used346+ }347+ c, err := parseHex(val)348+ if err != nil {349+ return fmt.Errorf("%s: %w", key, err)350+ }351+ switch {352+ case slot >= 0:353+ p.ANSI[slot] = c354+ case key == "background":355+ p.Background = c356+ case key == "foreground":357+ p.Foreground = c358+ default:359+ p.Selection = c360+ }361+ set[key] = true362+ return nil363+}364+365+func atoiOr(s string, def int) int {366+ n, err := strconv.Atoi(s)367+ if err != nil || n < 0 {368+ return def369+ }370+ return n371+}372+373+// parseHex reads #rrggbb, rrggbb or #rgb.374+func parseHex(s string) (color.Color, error) {375+ h := strings.TrimPrefix(strings.TrimSpace(s), "#")376+ if len(h) == 3 {377+ h = string([]byte{h[0], h[0], h[1], h[1], h[2], h[2]})378+ }379+ v, err := strconv.ParseUint(h, 16, 32)380+ if len(h) != 6 || err != nil {381+ return nil, fmt.Errorf("%q isn't a #rrggbb color", s)382+ }383+ return color.RGBA{R: uint8(v >> 16), G: uint8(v >> 8), B: uint8(v), A: 0xff}, nil384+}385+386+// xterm is the palette used for slots a theme file leaves out.387+var xterm = [16]color.Color{388+ color.RGBA{0, 0, 0, 255}, color.RGBA{205, 0, 0, 255}, color.RGBA{0, 205, 0, 255}, color.RGBA{205, 205, 0, 255},389+ color.RGBA{0, 0, 238, 255}, color.RGBA{205, 0, 205, 255}, color.RGBA{0, 205, 205, 255}, color.RGBA{229, 229, 229, 255},390+ color.RGBA{127, 127, 127, 255}, color.RGBA{255, 0, 0, 255}, color.RGBA{0, 255, 0, 255}, color.RGBA{255, 255, 0, 255},391+ color.RGBA{92, 92, 255, 255}, color.RGBA{255, 0, 255, 255}, color.RGBA{0, 255, 255, 255}, color.RGBA{255, 255, 255, 255},392+}393+394+func isDark(bg color.Color) bool {395+ return contrast(bg, color.White) > contrast(bg, color.Black)396+}@@ -0,0 +1,148 @@
1+package theme2+3+import (4+ "image/color"5+ "reflect"6+7+ "charm.land/lipgloss/v2"8+ "github.com/charmbracelet/x/ansi"9+)10+11+// barBlend is how far the menu and status bars move from the background12+// toward the text color: enough to read as a band on any scheme, little13+// enough that text on them keeps its contrast.14+const barBlend = 0.1215+16+// FromPalette draws the roles in a color scheme's colors. The roles are17+// New's, on the ANSI slots; each slot becomes the scheme's color. Then,18+// so every scheme reads well:19+//20+// - the selection uses the scheme's selection color when it has one;21+// - the menu and status bars are bands of the background moved toward22+// the text color, and the column header row is filled with the23+// header color;24+// - a background role too close to the screen's is moved apart;25+// - text that falls short of its contrast minimum (4.5:1 for text, 3:126+// for hints and lines, 2:1 for unavailable items) against its27+// background is replaced by the scheme color nearest it in lightness28+// that meets it, or nudged toward black or white.29+func FromPalette(p Palette) Theme {30+ t := New(p.Dark)31+ t.Name, t.Palette = p.Name, &p32+ text := readable(p.Foreground, p.Background, &p, minText)33+ t.Screen = lipgloss.NewStyle().Background(p.Background).Foreground(text)34+ eachRole(&t, func(_ string, s *lipgloss.Style) { *s = mapStyle(*s, &p) })35+ if p.Selection != nil && contrast(p.Selection, p.Background) >= minDistinct {36+ on := text37+ if contrast(p.Background, p.Selection) > contrast(text, p.Selection) {38+ on = p.Background39+ }40+ sel := lipgloss.NewStyle().Background(p.Selection).Foreground(on)41+ t.Selection, t.HeaderSel = sel, sel42+ }43+ bar := lipgloss.NewStyle().Background(blend(p.Background, text, barBlend)).Foreground(text)44+ t.MenuBarRow, t.StatusBarRow = bar, bar45+ eachRole(&t, func(name string, s *lipgloss.Style) { *s = fixContrast(name, *s, text, &p) })46+ t.ColumnHeaderRow = lipgloss.NewStyle().Background(t.Header.GetBackground()).Foreground(t.Header.GetForeground())47+ return t48+}49+50+// eachRole calls fn with every style role of t and its field name,51+// including the chart series.52+func eachRole(t *Theme, fn func(name string, s *lipgloss.Style)) {53+ v := reflect.ValueOf(t).Elem()54+ styleType := reflect.TypeOf(lipgloss.Style{})55+ for i := range v.NumField() {56+ f, name := v.Field(i), v.Type().Field(i).Name57+ switch {58+ case f.Type() == styleType:59+ fn(name, f.Addr().Interface().(*lipgloss.Style))60+ case f.Kind() == reflect.Array && f.Type().Elem() == styleType:61+ for j := range f.Len() {62+ fn(name, f.Index(j).Addr().Interface().(*lipgloss.Style))63+ }64+ }65+ }66+}67+68+// mapStyle replaces ANSI colors with the scheme's.69+func mapStyle(s lipgloss.Style, p *Palette) lipgloss.Style {70+ if c, ok := slot(s.GetForeground(), p); ok {71+ s = s.Foreground(c)72+ }73+ if c, ok := slot(s.GetBackground(), p); ok {74+ s = s.Background(c)75+ }76+ if c, ok := slot(s.GetUnderlineColor(), p); ok {77+ s = s.UnderlineColor(c)78+ }79+ return s80+}81+82+// slot returns the scheme's color for an ANSI color.83+func slot(c color.Color, p *Palette) (color.Color, bool) {84+ switch c := c.(type) {85+ case ansi.BasicColor:86+ return p.ANSI[c%16], true87+ case ansi.IndexedColor:88+ if c < 16 {89+ return p.ANSI[c], true90+ }91+ }92+ return nil, false93+}94+95+// minContrast is the contrast minimum for a role's text.96+func minContrast(role string) float64 {97+ switch role {98+ case "Disabled":99+ return minDisabled100+ case "Hint", "Muted", "Border", "FrozenLine", "ChartFrame", "ChartAxis", "ChartLabel",101+ "Progress", "ProgressTodo", "Copied", "Series", "Match":102+ return minSecondary103+ }104+ return minText105+}106+107+// fixContrast keeps a role's background apart from the screen and its108+// text readable on it.109+func fixContrast(role string, s lipgloss.Style, text color.Color, p *Palette) lipgloss.Style {110+ if role == "Screen" {111+ return s112+ }113+ bg := p.Background114+ if c := s.GetBackground(); !isNoColor(c) {115+ bg = c116+ if role != "SeriesBg" {117+ bg = distinct(c, p.Background, text)118+ s = s.Background(bg)119+ }120+ }121+ if c := s.GetForeground(); !isNoColor(c) && role != "SeriesBg" {122+ s = s.Foreground(readable(c, bg, p, minContrast(role)))123+ } else if !isNoColor(s.GetBackground()) && role != "SeriesBg" {124+ // Text on a background role with no color of its own is drawn in125+ // the screen's text color.126+ s = s.Foreground(readable(text, bg, p, minContrast(role)))127+ }128+ return s129+}130+131+func isNoColor(c color.Color) bool {132+ _, none := c.(lipgloss.NoColor)133+ return c == nil || none134+}135+136+// Resolve returns the theme called name: the terminal theme's variant137+// for a dark or light terminal, or a scheme found by Lookup in dir. An138+// unknown scheme gives the terminal theme and the error.139+func Resolve(name string, dark bool, dir string) (Theme, error) {140+ if name == "" || name == Terminal {141+ return New(dark), nil142+ }143+ p, err := Lookup(name, dir)144+ if err != nil {145+ return New(dark), err146+ }147+ return FromPalette(p), nil148+}@@ -0,0 +1,207 @@
1+package theme2+3+import (4+ "fmt"5+ "image/color"6+ "os"7+ "path/filepath"8+ "strings"9+ "testing"10+11+ "charm.land/lipgloss/v2"12+ "github.com/charmbracelet/x/ansi"13+)14+15+func TestBuiltins(t *testing.T) {16+ bs := Builtins()17+ if len(bs) < 300 {18+ t.Fatalf("only %d built-in themes", len(bs))19+ }20+ if bs[0].Name != ClassicName {21+ t.Errorf("first is %q", bs[0].Name)22+ }23+ for _, name := range []string{"Dracula", "Catppuccin Mocha", "Builtin Solarized Light", "nord", "GruvboxDark", "TokyoNight"} {24+ if _, err := Lookup(name, ""); err != nil {25+ t.Error(err)26+ }27+ }28+ p, err := Lookup("tokyo-night", "")29+ if err != nil || p.Name != "TokyoNight" {30+ t.Errorf("loose match: %q %v", p.Name, err)31+ }32+ if _, err := Lookup("No Such Theme", ""); err == nil || !strings.Contains(err.Error(), "012 config themes") {33+ t.Errorf("unknown: %v", err)34+ }35+}36+37+// requireContrast fails when fg on bg is below min.38+func requireContrast(t *testing.T, theme, what string, fg, bg color.Color, min float64) {39+ t.Helper()40+ if isNoColor(fg) || isNoColor(bg) {41+ t.Errorf("%s: %s has no color (fg %v, bg %v)", theme, what, fg, bg)42+ return43+ }44+ if r := contrast(fg, bg); r < min-0.01 {45+ t.Errorf("%s: %s contrast %.2f < %.1f", theme, what, r, min)46+ }47+}48+49+// Every built-in scheme, run through the role derivation, keeps text50+// readable: on cells, on the bars, in the selection and the headers, and51+// every other role at its minimum.52+func TestEveryThemeReadable(t *testing.T) {53+ for _, p := range Builtins() {54+ th := FromPalette(p)55+ screenBg, text := th.Screen.GetBackground(), th.Screen.GetForeground()56+ requireContrast(t, p.Name, "cell text", text, screenBg, minText)57+ for _, bar := range []struct {58+ name string59+ s lipgloss.Style60+ }{{"menu bar", th.MenuBarRow}, {"status bar", th.StatusBarRow}, {"column header row", th.ColumnHeaderRow}} {61+ requireContrast(t, p.Name, bar.name+" text", bar.s.GetForeground(), bar.s.GetBackground(), minText)62+ if c := contrast(bar.s.GetBackground(), screenBg); c < minDistinct-0.01 {63+ t.Errorf("%s: %s doesn't stand out from the screen (%.2f)", p.Name, bar.name, c)64+ }65+ }66+ for _, r := range []struct {67+ name string68+ s lipgloss.Style69+ }{70+ {"selection", th.Selection}, {"header", th.Header}, {"row header", th.RowHeader},71+ {"active header", th.HeaderActive}, {"selected header", th.HeaderSel}, {"pointer", th.Pointer},72+ {"key chip", th.KeyChip}, {"menu selection", th.MenuSelected}, {"indicator", th.Indicator},73+ } {74+ requireContrast(t, p.Name, r.name, r.s.GetForeground(), r.s.GetBackground(), minText)75+ }76+ // Muted text and hints on the bars, where the status line shows them.77+ requireContrast(t, p.Name, "muted text", th.Muted.GetForeground(), screenBg, minSecondary)78+ eachRole(&th, func(role string, s *lipgloss.Style) {79+ fg, bg := s.GetForeground(), s.GetBackground()80+ if role == "SeriesBg" || isNoColor(fg) {81+ return82+ }83+ if isNoColor(bg) {84+ bg = screenBg85+ }86+ requireContrast(t, p.Name, role, fg, bg, minContrast(role))87+ })88+ }89+}90+91+func TestSchemeUsesPaletteColors(t *testing.T) {92+ p, _ := Lookup("Dracula", "")93+ th := FromPalette(p)94+ if !th.Palette.Dark || th.Name != "Dracula" {95+ t.Errorf("%+v", th.Name)96+ }97+ // Every role is in true color: no ANSI index is left to the terminal.98+ eachRole(&th, func(role string, s *lipgloss.Style) {99+ for _, c := range []color.Color{s.GetForeground(), s.GetBackground(), s.GetUnderlineColor()} {100+ switch c.(type) {101+ case ansi.BasicColor, ansi.IndexedColor:102+ t.Errorf("%s keeps ANSI color %v", role, c)103+ }104+ }105+ })106+ if bg := th.Selection.GetBackground(); fmt.Sprint(bg) != fmt.Sprint(p.Selection) {107+ t.Errorf("selection %v, scheme's %v", bg, p.Selection)108+ }109+ // The terminal theme keeps ANSI colors and no bands.110+ term := New(true)111+ if _, ok := term.Pointer.GetBackground().(ansi.BasicColor); !ok {112+ t.Error("terminal theme lost its ANSI colors")113+ }114+ if !isNoColor(term.MenuBarRow.GetBackground()) || !isNoColor(term.Screen.GetBackground()) {115+ t.Error("terminal theme has bands")116+ }117+}118+119+func TestReadThemeFiles(t *testing.T) {120+ dir := t.TempDir()121+ ghostty := "# Ghostty\npalette = 0=#1d1f21\npalette = 4=81a2be\npalette = 200=#ffffff\nbackground = #fafafa\nforeground = #333\ncursor-color = #000000\nselection-background = #cccccc\nfont-family = x\n"122+ kitty := "# kitty\ncolor0 #000000\ncolor12 #5c5cff\nbackground #101010\nforeground #e0e0e0\nselection_background #444444\ncursor_text_color background\n"123+ vhs := `{"name": "Mine", "black": "#000000", "red": "#ff0000", "green": "#00ff00", "yellow": "#ffff00", "blue": "#0000ff",124+"purple": "#ff00ff", "cyan": "#00ffff", "white": "#eeeeee", "brightBlack": "#555555", "brightRed": "#ff5555",125+"brightGreen": "#55ff55", "brightYellow": "#ffff55", "brightBlue": "#5555ff", "brightPurple": "#ff55ff",126+"brightCyan": "#55ffff", "brightWhite": "#ffffff", "background": "#202020", "foreground": "#dddddd",127+"selectionBackground": "#333333", "meta": {"isDark": true}}`128+ os.WriteFile(filepath.Join(dir, "My Light"), []byte(ghostty), 0o644)129+ os.WriteFile(filepath.Join(dir, "kitty.conf"), []byte(kitty), 0o644)130+ os.WriteFile(filepath.Join(dir, "mine.json"), []byte(vhs), 0o644)131+ os.WriteFile(filepath.Join(dir, "broken"), []byte("palette = 1=#ff0000\n"), 0o644)132+ os.WriteFile(filepath.Join(dir, "Dracula"), []byte(ghostty), 0o644)133+134+ p, err := Lookup("My Light", dir)135+ if err != nil || p.Dark || fmt.Sprint(p.ANSI[4]) != fmt.Sprint(color.RGBA{0x81, 0xa2, 0xbe, 0xff}) ||136+ fmt.Sprint(p.Foreground) != fmt.Sprint(color.RGBA{0x33, 0x33, 0x33, 0xff}) || p.Selection == nil {137+ t.Errorf("ghostty: %+v %v", p, err)138+ }139+ if fmt.Sprint(p.ANSI[1]) != fmt.Sprint(xterm[1]) {140+ t.Error("slots left out should be xterm's")141+ }142+ p, err = Lookup("kitty", dir)143+ if err != nil || !p.Dark || fmt.Sprint(p.ANSI[12]) != fmt.Sprint(color.RGBA{0x5c, 0x5c, 0xff, 0xff}) {144+ t.Errorf("kitty: %+v %v", p, err)145+ }146+ p, err = Lookup("mine", dir)147+ if err != nil || p.Name != "Mine" || fmt.Sprint(p.ANSI[5]) != fmt.Sprint(color.RGBA{0xff, 0, 0xff, 0xff}) || p.Selection == nil {148+ t.Errorf("json: %+v %v", p, err)149+ }150+ if _, err := Lookup("broken", dir); err == nil || !strings.Contains(err.Error(), "background and foreground") {151+ t.Errorf("broken: %v", err)152+ }153+ p, _ = Lookup("dracula", dir)154+ if p.File == "" {155+ t.Error("a user file should hide the built-in of the same name")156+ }157+ names := map[string]Entry{}158+ list := List(dir)159+ for _, e := range list {160+ names[e.Name] = e161+ }162+ if list[0].Name != Terminal || !names["My Light"].User || names["My Light"].Dark || !names["Mine"].User || !names["Nord"].Dark && names["nord"].Name == "" {163+ t.Errorf("list: %v", list[:6])164+ }165+ if _, ok := names["broken"]; ok {166+ t.Error("a file that doesn't parse is listed")167+ }168+ if _, err := Lookup("../etc", dir); err == nil {169+ t.Error("path in a name")170+ }171+}172+173+func TestFill(t *testing.T) {174+ band := lipgloss.NewStyle().Background(lipgloss.Color("#102030")).Foreground(lipgloss.Color("#eeeeee"))175+ chip := lipgloss.NewStyle().Background(lipgloss.Color("#ff0000")).Render("F1")176+ line := "File " + chip + " x" + lipgloss.NewStyle().Foreground(lipgloss.Red).Render("warn") + " end"177+ got := Fill(line, 30, band)178+ if w := ansi.StringWidth(got); w != 30 {179+ t.Errorf("width %d", w)180+ }181+ if ansi.Strip(got) != ansi.Strip(line)+strings.Repeat(" ", 30-ansi.StringWidth(line)) {182+ t.Errorf("text changed: %q", ansi.Strip(got))183+ }184+ // The band's background comes back after the chip's reset.185+ after := got[strings.Index(got, "F1"):]186+ if !strings.Contains(after, "48;2;16;32;48") {187+ t.Errorf("band not restored after a reset: %q", got)188+ }189+ if Fill(line, 30, lipgloss.NewStyle()) != line {190+ t.Error("an empty band changed the line")191+ }192+ // Params of 38;2;r;g;b aren't mistaken for resets.193+ bg, fg := sgrResets(params(t, "\x1b[38;2;0;39;49m"))194+ if bg || fg {195+ t.Errorf("true color read as reset: bg %v fg %v", bg, fg)196+ }197+ bg, fg = sgrResets(params(t, "\x1b[0;31m"))198+ if !bg || fg {199+ t.Errorf("0;31: bg %v fg %v", bg, fg)200+ }201+}202+203+func params(t *testing.T, seq string) ansi.Params {204+ p := ansi.NewParser()205+ _, _, _, _ = ansi.DecodeSequence(seq, 0, p)206+ return append(ansi.Params(nil), p.Params()...)207+}@@ -16,9 +16,11 @@ import (
1616 // instead of creating styles inline, so the look stays consistent and a1717 // new theme only has to be defined here.1818 //19-// Colors are the 16 ANSI colors, so the sheet follows the user's terminal20-// palette; dark and light variants only differ where ANSI colors would21-// lose contrast.19+// Roles are defined on the 16 ANSI colors (New). The terminal theme draws20+// them as ANSI indexes, so the sheet follows the user's terminal palette,21+// with dark and light variants that only differ where ANSI colors would22+// lose contrast. A color scheme (FromPalette) draws the same roles in the23+// scheme's colors, corrected for contrast, on its own background.2224 type Theme struct {2325 Indicator lipgloss.Style // mode indicator, top right2426 Header lipgloss.Style // column letters, row numbers and the name box@@ -75,6 +77,25 @@ type Theme struct {
7577 MatchSelected lipgloss.Style // matched characters in the highlighted row7678 Cell lipgloss.Style // an ordinary cell: the base for bold, italic and underline7779 80+ // Bars: full-width bands behind the menu bar, formula bar, context81+ // line, column headers and status line. Each line is drawn on its82+ // role's background, with its foreground for text that has none, out83+ // to the terminal's edge; an empty role leaves the line as it is.84+ MenuBarRow lipgloss.Style85+ FormulaBarRow lipgloss.Style86+ ContextRow lipgloss.Style87+ ColumnHeaderRow lipgloss.Style88+ StatusBarRow lipgloss.Style89+ RowHeader lipgloss.Style // row numbers not focused, selected or hovered90+ // Screen is the background and default text color of the whole91+ // screen. Empty in the terminal theme, so the terminal's own show.92+ Screen lipgloss.Style93+94+ // Name is the theme's name, and Palette its colors: nil for the95+ // terminal theme, whose colors only the terminal knows.96+ Name string97+ Palette *Palette98+7899 // Charts: see charts.go in package ui.79100 ChartFrame lipgloss.Style // a chart's border80101 ChartSelected lipgloss.Style // the border of the selected chart and its resize handle@@ -115,7 +136,7 @@ func (t *Theme) Text(base lipgloss.Style, st sheet.Style) lipgloss.Style {
115136 return base116137 }117138 118-// New returns the dark or light variant.139+// New returns the terminal theme's dark or light variant.119140 func New(dark bool) Theme {120141 // Contrast was checked against the reference palettes in e2e: text on121142 // colored backgrounds stays at or above roughly 4.5:1.@@ -182,6 +203,9 @@ func New(dark bool) Theme {
182203 MatchSelected: accent.Bold(true).Underline(true),183204 Cell: lipgloss.NewStyle(),184205 206+ RowHeader: lipgloss.NewStyle().Background(headerBg).Foreground(headerFg),207+ Name: Terminal,208+185209 ChartFrame: lipgloss.NewStyle().Foreground(lipgloss.BrightBlack),186210 ChartSelected: lipgloss.NewStyle().Foreground(lipgloss.Cyan).Bold(true),187211 ChartAxis: lipgloss.NewStyle().Foreground(lipgloss.BrightBlack),@@ -0,0 +1,10689 @@
1+[2+ {3+ "name": "3024 Day",4+ "black": "#090300",5+ "red": "#db2d20",6+ "green": "#01a252",7+ "yellow": "#fded02",8+ "blue": "#01a0e4",9+ "magenta": "#a16a94",10+ "cyan": "#b5e4f4",11+ "white": "#a5a2a2",12+ "brightBlack": "#5c5855",13+ "brightRed": "#e8bbd0",14+ "brightGreen": "#3a3432",15+ "brightYellow": "#4a4543",16+ "brightBlue": "#807d7c",17+ "brightMagenta": "#d6d5d4",18+ "brightCyan": "#cdab53",19+ "brightWhite": "#f7f7f7",20+ "background": "#f7f7f7",21+ "foreground": "#4a4543",22+ "cursor": "#4a4543",23+ "selection": "#a5a2a2",24+ "meta": {25+ "isDark": false,26+ "credits": [27+ {28+ "name": "0x3024",29+ "link": "https://github.com/0x3024"30+ }31+ ]32+ }33+ },34+ {35+ "name": "3024 Night",36+ "black": "#090300",37+ "red": "#db2d20",38+ "green": "#01a252",39+ "yellow": "#fded02",40+ "blue": "#01a0e4",41+ "magenta": "#a16a94",42+ "cyan": "#b5e4f4",43+ "white": "#a5a2a2",44+ "brightBlack": "#5c5855",45+ "brightRed": "#e8bbd0",46+ "brightGreen": "#3a3432",47+ "brightYellow": "#4a4543",48+ "brightBlue": "#807d7c",49+ "brightMagenta": "#d6d5d4",50+ "brightCyan": "#cdab53",51+ "brightWhite": "#f7f7f7",52+ "background": "#090300",53+ "foreground": "#a5a2a2",54+ "cursor": "#a5a2a2",55+ "selection": "#4a4543",56+ "meta": {57+ "isDark": true,58+ "credits": [59+ {60+ "name": "0x3024",61+ "link": "https://github.com/0x3024"62+ }63+ ]64+ }65+ },66+ {67+ "name": "Aardvark Blue",68+ "black": "#191919",69+ "red": "#aa342e",70+ "green": "#4b8c0f",71+ "yellow": "#dbba00",72+ "blue": "#1370d3",73+ "magenta": "#c43ac3",74+ "cyan": "#008eb0",75+ "white": "#bebebe",76+ "brightBlack": "#454545",77+ "brightRed": "#f05b50",78+ "brightGreen": "#95dc55",79+ "brightYellow": "#ffe763",80+ "brightBlue": "#60a4ec",81+ "brightMagenta": "#e26be2",82+ "brightCyan": "#60b6cb",83+ "brightWhite": "#f7f7f7",84+ "background": "#102040",85+ "foreground": "#dddddd",86+ "cursor": "#007acc",87+ "selection": "#bfdbfe",88+ "meta": {89+ "isDark": true,90+ "credits": null91+ }92+ },93+ {94+ "name": "Abernathy",95+ "black": "#000000",96+ "red": "#cd0000",97+ "green": "#00cd00",98+ "yellow": "#cdcd00",99+ "blue": "#1093f5",100+ "magenta": "#cd00cd",101+ "cyan": "#00cdcd",102+ "white": "#faebd7",103+ "brightBlack": "#404040",104+ "brightRed": "#ff0000",105+ "brightGreen": "#00ff00",106+ "brightYellow": "#ffff00",107+ "brightBlue": "#11b5f6",108+ "brightMagenta": "#ff00ff",109+ "brightCyan": "#00ffff",110+ "brightWhite": "#ffffff",111+ "background": "#111416",112+ "foreground": "#eeeeec",113+ "cursor": "#bbbbbb",114+ "selection": "#eeeeec",115+ "meta": {116+ "isDark": true,117+ "credits": null118+ }119+ },120+ {121+ "name": "Adventure",122+ "black": "#040404",123+ "red": "#d84a33",124+ "green": "#5da602",125+ "yellow": "#eebb6e",126+ "blue": "#417ab3",127+ "magenta": "#e5c499",128+ "cyan": "#bdcfe5",129+ "white": "#dbded8",130+ "brightBlack": "#685656",131+ "brightRed": "#d76b42",132+ "brightGreen": "#99b52c",133+ "brightYellow": "#ffb670",134+ "brightBlue": "#97d7ef",135+ "brightMagenta": "#aa7900",136+ "brightCyan": "#bdcfe5",137+ "brightWhite": "#e4d5c7",138+ "background": "#040404",139+ "foreground": "#feffff",140+ "cursor": "#feffff",141+ "selection": "#606060",142+ "meta": {143+ "isDark": true,144+ "credits": [145+ {146+ "name": "hongzimao",147+ "link": "https://github.com/hongzimao/iTerm2-Color-Schemes"148+ }149+ ]150+ }151+ },152+ {153+ "name": "AdventureTime",154+ "black": "#050404",155+ "red": "#bd0013",156+ "green": "#4ab118",157+ "yellow": "#e7741e",158+ "blue": "#0f4ac6",159+ "magenta": "#665993",160+ "cyan": "#70a598",161+ "white": "#f8dcc0",162+ "brightBlack": "#4e7cbf",163+ "brightRed": "#fc5f5a",164+ "brightGreen": "#9eff6e",165+ "brightYellow": "#efc11a",166+ "brightBlue": "#1997c6",167+ "brightMagenta": "#9b5953",168+ "brightCyan": "#c8faf4",169+ "brightWhite": "#f6f5fb",170+ "background": "#1f1d45",171+ "foreground": "#f8dcc0",172+ "cursor": "#efbf38",173+ "selection": "#706b4e",174+ "meta": {175+ "isDark": true,176+ "credits": [177+ {178+ "name": "zdj",179+ "link": "https://github.com/zdj/themes/tree/master/iterm2"180+ }181+ ]182+ }183+ },184+ {185+ "name": "Afterglow",186+ "black": "#151515",187+ "red": "#ac4142",188+ "green": "#7e8e50",189+ "yellow": "#e5b567",190+ "blue": "#6c99bb",191+ "magenta": "#9f4e85",192+ "cyan": "#7dd6cf",193+ "white": "#d0d0d0",194+ "brightBlack": "#505050",195+ "brightRed": "#ac4142",196+ "brightGreen": "#7e8e50",197+ "brightYellow": "#e5b567",198+ "brightBlue": "#6c99bb",199+ "brightMagenta": "#9f4e85",200+ "brightCyan": "#7dd6cf",201+ "brightWhite": "#f5f5f5",202+ "background": "#212121",203+ "foreground": "#d0d0d0",204+ "cursor": "#d0d0d0",205+ "selection": "#303030",206+ "meta": {207+ "isDark": true,208+ "credits": [209+ {210+ "name": "yabatadesign",211+ "link": "https://github.com/YabataDesign/afterglow-itermcolors"212+ }213+ ]214+ }215+ },216+ {217+ "name": "Alabaster",218+ "black": "#000000",219+ "red": "#aa3731",220+ "green": "#448c27",221+ "yellow": "#cb9000",222+ "blue": "#325cc0",223+ "magenta": "#7a3e9d",224+ "cyan": "#0083b2",225+ "white": "#f7f7f7",226+ "brightBlack": "#777777",227+ "brightRed": "#f05050",228+ "brightGreen": "#60cb00",229+ "brightYellow": "#ffbc5d",230+ "brightBlue": "#007acc",231+ "brightMagenta": "#e64ce6",232+ "brightCyan": "#00aacb",233+ "brightWhite": "#f7f7f7",234+ "background": "#f7f7f7",235+ "foreground": "#000000",236+ "cursor": "#007acc",237+ "selection": "#bfdbfe",238+ "meta": {239+ "isDark": false,240+ "credits": null241+ }242+ },243+ {244+ "name": "AlienBlood",245+ "black": "#112616",246+ "red": "#7f2b27",247+ "green": "#2f7e25",248+ "yellow": "#717f24",249+ "blue": "#2f6a7f",250+ "magenta": "#47587f",251+ "cyan": "#327f77",252+ "white": "#647d75",253+ "brightBlack": "#3c4812",254+ "brightRed": "#e08009",255+ "brightGreen": "#18e000",256+ "brightYellow": "#bde000",257+ "brightBlue": "#00aae0",258+ "brightMagenta": "#0058e0",259+ "brightCyan": "#00e0c4",260+ "brightWhite": "#73fa91",261+ "background": "#0f1610",262+ "foreground": "#637d75",263+ "cursor": "#73fa91",264+ "selection": "#1d4125",265+ "meta": {266+ "isDark": true,267+ "credits": [268+ {269+ "name": "zdj",270+ "link": "https://github.com/zdj/themes/tree/master/iterm2"271+ }272+ ]273+ }274+ },275+ {276+ "name": "Andromeda",277+ "black": "#000000",278+ "red": "#cd3131",279+ "green": "#05bc79",280+ "yellow": "#e5e512",281+ "blue": "#2472c8",282+ "magenta": "#bc3fbc",283+ "cyan": "#0fa8cd",284+ "white": "#e5e5e5",285+ "brightBlack": "#666666",286+ "brightRed": "#cd3131",287+ "brightGreen": "#05bc79",288+ "brightYellow": "#e5e512",289+ "brightBlue": "#2472c8",290+ "brightMagenta": "#bc3fbc",291+ "brightCyan": "#0fa8cd",292+ "brightWhite": "#e5e5e5",293+ "background": "#262a33",294+ "foreground": "#e5e5e5",295+ "cursor": "#f8f8f0",296+ "selection": "#5a5c62",297+ "meta": {298+ "isDark": true,299+ "credits": [300+ {301+ "name": "memije",302+ "link": "https://github.com/memije"303+ },304+ {305+ "name": "EliverLara",306+ "link": "https://github.com/EliverLara/"307+ }308+ ]309+ }310+ },311+ {312+ "name": "Apple Classic",313+ "black": "#000000",314+ "red": "#c91b00",315+ "green": "#00c200",316+ "yellow": "#c7c400",317+ "blue": "#0225c7",318+ "magenta": "#ca30c7",319+ "cyan": "#00c5c7",320+ "white": "#c7c7c7",321+ "brightBlack": "#686868",322+ "brightRed": "#ff6e67",323+ "brightGreen": "#5ffa68",324+ "brightYellow": "#fffc67",325+ "brightBlue": "#6871ff",326+ "brightMagenta": "#ff77ff",327+ "brightCyan": "#60fdff",328+ "brightWhite": "#ffffff",329+ "background": "#2c2b2b",330+ "foreground": "#d5a200",331+ "cursor": "#c7c7c7",332+ "selection": "#6b5b02",333+ "meta": {334+ "isDark": true,335+ "credits": null336+ }337+ },338+ {339+ "name": "arcoiris",340+ "black": "#333333",341+ "red": "#da2700",342+ "green": "#12c258",343+ "yellow": "#ffc656",344+ "blue": "#518bfc",345+ "magenta": "#e37bd9",346+ "cyan": "#63fad5",347+ "white": "#bab2b2",348+ "brightBlack": "#777777",349+ "brightRed": "#ffb9b9",350+ "brightGreen": "#e3f6aa",351+ "brightYellow": "#ffddaa",352+ "brightBlue": "#b3e8f3",353+ "brightMagenta": "#cbbaf9",354+ "brightCyan": "#bcffc7",355+ "brightWhite": "#efefef",356+ "background": "#201f1e",357+ "foreground": "#eee4d9",358+ "cursor": "#7a1c1c",359+ "selection": "#25524a",360+ "meta": {361+ "isDark": true,362+ "credits": null363+ }364+ },365+ {366+ "name": "Argonaut",367+ "black": "#232323",368+ "red": "#ff000f",369+ "green": "#8ce10b",370+ "yellow": "#ffb900",371+ "blue": "#008df8",372+ "magenta": "#6d43a6",373+ "cyan": "#00d8eb",374+ "white": "#ffffff",375+ "brightBlack": "#444444",376+ "brightRed": "#ff2740",377+ "brightGreen": "#abe15b",378+ "brightYellow": "#ffd242",379+ "brightBlue": "#0092ff",380+ "brightMagenta": "#9a5feb",381+ "brightCyan": "#67fff0",382+ "brightWhite": "#ffffff",383+ "background": "#0e1019",384+ "foreground": "#fffaf4",385+ "cursor": "#ff0018",386+ "selection": "#002a3b",387+ "meta": {388+ "isDark": true,389+ "credits": [390+ {391+ "name": "effkay",392+ "link": "https://github.com/effkay/iTerm-argonaut"393+ }394+ ]395+ }396+ },397+ {398+ "name": "Arthur",399+ "black": "#3d352a",400+ "red": "#cd5c5c",401+ "green": "#86af80",402+ "yellow": "#e8ae5b",403+ "blue": "#6495ed",404+ "magenta": "#deb887",405+ "cyan": "#b0c4de",406+ "white": "#bbaa99",407+ "brightBlack": "#554444",408+ "brightRed": "#cc5533",409+ "brightGreen": "#88aa22",410+ "brightYellow": "#ffa75d",411+ "brightBlue": "#87ceeb",412+ "brightMagenta": "#996600",413+ "brightCyan": "#b0c4de",414+ "brightWhite": "#ddccbb",415+ "background": "#1c1c1c",416+ "foreground": "#ddeedd",417+ "cursor": "#e2bbef",418+ "selection": "#4d4d4d",419+ "meta": {420+ "isDark": true,421+ "credits": [422+ {423+ "name": "baskerville",424+ "link": "https://github.com/baskerville/iTerm-2-Color-Themes"425+ }426+ ]427+ }428+ },429+ {430+ "name": "AtelierSulphurpool",431+ "black": "#202746",432+ "red": "#c94922",433+ "green": "#ac9739",434+ "yellow": "#c08b30",435+ "blue": "#3d8fd1",436+ "magenta": "#6679cc",437+ "cyan": "#22a2c9",438+ "white": "#979db4",439+ "brightBlack": "#6b7394",440+ "brightRed": "#c76b29",441+ "brightGreen": "#293256",442+ "brightYellow": "#5e6687",443+ "brightBlue": "#898ea4",444+ "brightMagenta": "#dfe2f1",445+ "brightCyan": "#9c637a",446+ "brightWhite": "#f5f7ff",447+ "background": "#202746",448+ "foreground": "#979db4",449+ "cursor": "#979db4",450+ "selection": "#5e6687",451+ "meta": {452+ "isDark": true,453+ "credits": [454+ {455+ "name": "atelierbram",456+ "link": "http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool/"457+ }458+ ]459+ }460+ },461+ {462+ "name": "Atom",463+ "black": "#000000",464+ "red": "#fd5ff1",465+ "green": "#87c38a",466+ "yellow": "#ffd7b1",467+ "blue": "#85befd",468+ "magenta": "#b9b6fc",469+ "cyan": "#85befd",470+ "white": "#e0e0e0",471+ "brightBlack": "#000000",472+ "brightRed": "#fd5ff1",473+ "brightGreen": "#94fa36",474+ "brightYellow": "#f5ffa8",475+ "brightBlue": "#96cbfe",476+ "brightMagenta": "#b9b6fc",477+ "brightCyan": "#85befd",478+ "brightWhite": "#e0e0e0",479+ "background": "#161719",480+ "foreground": "#c5c8c6",481+ "cursor": "#d0d0d0",482+ "selection": "#444444",483+ "meta": {484+ "isDark": true,485+ "credits": [486+ {487+ "name": "bahlo",488+ "link": "https://github.com/bahlo/iterm-colors"489+ }490+ ]491+ }492+ },493+ {494+ "name": "AtomOneLight",495+ "black": "#000000",496+ "red": "#de3e35",497+ "green": "#3f953a",498+ "yellow": "#d2b67c",499+ "blue": "#2f5af3",500+ "magenta": "#950095",501+ "cyan": "#3f953a",502+ "white": "#bbbbbb",503+ "brightBlack": "#000000",504+ "brightRed": "#de3e35",505+ "brightGreen": "#3f953a",506+ "brightYellow": "#d2b67c",507+ "brightBlue": "#2f5af3",508+ "brightMagenta": "#a00095",509+ "brightCyan": "#3f953a",510+ "brightWhite": "#ffffff",511+ "background": "#f9f9f9",512+ "foreground": "#2a2c33",513+ "cursor": "#bbbbbb",514+ "selection": "#ededed",515+ "meta": {516+ "isDark": false,517+ "credits": [518+ {519+ "name": "iamstarkov",520+ "link": "https://github.com/iamstarkov"521+ }522+ ]523+ }524+ },525+ {526+ "name": "Aurora",527+ "black": "#23262e",528+ "red": "#f0266f",529+ "green": "#8fd46d",530+ "yellow": "#ffe66d",531+ "blue": "#0321d7",532+ "magenta": "#ee5d43",533+ "cyan": "#03d6b8",534+ "white": "#c74ded",535+ "brightBlack": "#292e38",536+ "brightRed": "#f92672",537+ "brightGreen": "#8fd46d",538+ "brightYellow": "#ffe66d",539+ "brightBlue": "#03d6b8",540+ "brightMagenta": "#ee5d43",541+ "brightCyan": "#03d6b8",542+ "brightWhite": "#c74ded",543+ "background": "#23262e",544+ "foreground": "#ffca28",545+ "cursor": "#ee5d43",546+ "selection": "#292e38",547+ "meta": {548+ "isDark": true,549+ "credits": [550+ {551+ "name": "fcsmJS",552+ "link": "https://github.com/fcsmJS/iTerm2-Color-Schemes"553+ }554+ ]555+ }556+ },557+ {558+ "name": "ayu",559+ "black": "#000000",560+ "red": "#ff3333",561+ "green": "#b8cc52",562+ "yellow": "#e7c547",563+ "blue": "#36a3d9",564+ "magenta": "#f07178",565+ "cyan": "#95e6cb",566+ "white": "#ffffff",567+ "brightBlack": "#323232",568+ "brightRed": "#ff6565",569+ "brightGreen": "#eafe84",570+ "brightYellow": "#fff779",571+ "brightBlue": "#68d5ff",572+ "brightMagenta": "#ffa3aa",573+ "brightCyan": "#c7fffd",574+ "brightWhite": "#ffffff",575+ "background": "#0f1419",576+ "foreground": "#e6e1cf",577+ "cursor": "#f29718",578+ "selection": "#253340",579+ "meta": {580+ "isDark": true,581+ "credits": [582+ {583+ "name": "alebcay",584+ "link": "https://github.com/alebcay"585+ }586+ ]587+ }588+ },589+ {590+ "name": "Ayu Mirage",591+ "black": "#191e2a",592+ "red": "#ed8274",593+ "green": "#a6cc70",594+ "yellow": "#fad07b",595+ "blue": "#6dcbfa",596+ "magenta": "#cfbafa",597+ "cyan": "#90e1c6",598+ "white": "#c7c7c7",599+ "brightBlack": "#686868",600+ "brightRed": "#f28779",601+ "brightGreen": "#bae67e",602+ "brightYellow": "#ffd580",603+ "brightBlue": "#73d0ff",604+ "brightMagenta": "#d4bfff",605+ "brightCyan": "#95e6cb",606+ "brightWhite": "#ffffff",607+ "background": "#1f2430",608+ "foreground": "#cbccc6",609+ "cursor": "#ffcc66",610+ "selection": "#33415e",611+ "meta": {612+ "isDark": true,613+ "credits": null614+ }615+ },616+ {617+ "name": "ayu_light",618+ "black": "#000000",619+ "red": "#ff3333",620+ "green": "#86b300",621+ "yellow": "#f29718",622+ "blue": "#41a6d9",623+ "magenta": "#f07178",624+ "cyan": "#4dbf99",625+ "white": "#ffffff",626+ "brightBlack": "#323232",627+ "brightRed": "#ff6565",628+ "brightGreen": "#b8e532",629+ "brightYellow": "#ffc94a",630+ "brightBlue": "#73d8ff",631+ "brightMagenta": "#ffa3aa",632+ "brightCyan": "#7ff1cb",633+ "brightWhite": "#ffffff",634+ "background": "#fafafa",635+ "foreground": "#5c6773",636+ "cursor": "#ff6a00",637+ "selection": "#f0eee4",638+ "meta": {639+ "isDark": false,640+ "credits": [641+ {642+ "name": "alebcay",643+ "link": "https://github.com/alebcay"644+ }645+ ]646+ }647+ },648+ {649+ "name": "Banana Blueberry",650+ "black": "#17141f",651+ "red": "#ff6b7f",652+ "green": "#00bd9c",653+ "yellow": "#e6c62f",654+ "blue": "#22e8df",655+ "magenta": "#dc396a",656+ "cyan": "#56b6c2",657+ "white": "#f1f1f1",658+ "brightBlack": "#495162",659+ "brightRed": "#fe9ea1",660+ "brightGreen": "#98c379",661+ "brightYellow": "#f9e46b",662+ "brightBlue": "#91fff4",663+ "brightMagenta": "#da70d6",664+ "brightCyan": "#bcf3ff",665+ "brightWhite": "#ffffff",666+ "background": "#191323",667+ "foreground": "#cccccc",668+ "cursor": "#e07d13",669+ "selection": "#220525",670+ "meta": {671+ "isDark": true,672+ "credits": [673+ {674+ "name": "ReagentX",675+ "link": "https://github.com/ReagentX"676+ }677+ ]678+ }679+ },680+ {681+ "name": "Batman",682+ "black": "#1b1d1e",683+ "red": "#e6dc44",684+ "green": "#c8be46",685+ "yellow": "#f4fd22",686+ "blue": "#737174",687+ "magenta": "#747271",688+ "cyan": "#62605f",689+ "white": "#c6c5bf",690+ "brightBlack": "#505354",691+ "brightRed": "#fff78e",692+ "brightGreen": "#fff27d",693+ "brightYellow": "#feed6c",694+ "brightBlue": "#919495",695+ "brightMagenta": "#9a9a9d",696+ "brightCyan": "#a3a3a6",697+ "brightWhite": "#dadbd6",698+ "background": "#1b1d1e",699+ "foreground": "#6f6f6f",700+ "cursor": "#fcef0c",701+ "selection": "#4d504c",702+ "meta": {703+ "isDark": true,704+ "credits": [705+ {706+ "name": "pyrophos",707+ "link": "https://github.com/pyrophos"708+ }709+ ]710+ }711+ },712+ {713+ "name": "Belafonte Day",714+ "black": "#20111b",715+ "red": "#be100e",716+ "green": "#858162",717+ "yellow": "#eaa549",718+ "blue": "#426a79",719+ "magenta": "#97522c",720+ "cyan": "#989a9c",721+ "white": "#968c83",722+ "brightBlack": "#5e5252",723+ "brightRed": "#be100e",724+ "brightGreen": "#858162",725+ "brightYellow": "#eaa549",726+ "brightBlue": "#426a79",727+ "brightMagenta": "#97522c",728+ "brightCyan": "#989a9c",729+ "brightWhite": "#d5ccba",730+ "background": "#d5ccba",731+ "foreground": "#45373c",732+ "cursor": "#45373c",733+ "selection": "#968c83",734+ "meta": {735+ "isDark": false,736+ "credits": [737+ {738+ "name": "idleberg",739+ "link": "https://github.com/idleberg"740+ }741+ ]742+ }743+ },744+ {745+ "name": "Belafonte Night",746+ "black": "#20111b",747+ "red": "#be100e",748+ "green": "#858162",749+ "yellow": "#eaa549",750+ "blue": "#426a79",751+ "magenta": "#97522c",752+ "cyan": "#989a9c",753+ "white": "#968c83",754+ "brightBlack": "#5e5252",755+ "brightRed": "#be100e",756+ "brightGreen": "#858162",757+ "brightYellow": "#eaa549",758+ "brightBlue": "#426a79",759+ "brightMagenta": "#97522c",760+ "brightCyan": "#989a9c",761+ "brightWhite": "#d5ccba",762+ "background": "#20111b",763+ "foreground": "#968c83",764+ "cursor": "#968c83",765+ "selection": "#45373c",766+ "meta": {767+ "isDark": true,768+ "credits": [769+ {770+ "name": "idleberg",771+ "link": "https://github.com/idleberg"772+ }773+ ]774+ }775+ },776+ {777+ "name": "BirdsOfParadise",778+ "black": "#573d26",779+ "red": "#be2d26",780+ "green": "#6ba18a",781+ "yellow": "#e99d2a",782+ "blue": "#5a86ad",783+ "magenta": "#ac80a6",784+ "cyan": "#74a6ad",785+ "white": "#e0dbb7",786+ "brightBlack": "#9b6c4a",787+ "brightRed": "#e84627",788+ "brightGreen": "#95d8ba",789+ "brightYellow": "#d0d150",790+ "brightBlue": "#b8d3ed",791+ "brightMagenta": "#d19ecb",792+ "brightCyan": "#93cfd7",793+ "brightWhite": "#fff9d5",794+ "background": "#2a1f1d",795+ "foreground": "#e0dbb7",796+ "cursor": "#573d26",797+ "selection": "#563c27",798+ "meta": {799+ "isDark": true,800+ "credits": [801+ {802+ "name": "zdj",803+ "link": "https://github.com/zdj/themes/tree/master/iterm2"804+ }805+ ]806+ }807+ },808+ {809+ "name": "Blazer",810+ "black": "#000000",811+ "red": "#b87a7a",812+ "green": "#7ab87a",813+ "yellow": "#b8b87a",814+ "blue": "#7a7ab8",815+ "magenta": "#b87ab8",816+ "cyan": "#7ab8b8",817+ "white": "#d9d9d9",818+ "brightBlack": "#262626",819+ "brightRed": "#dbbdbd",820+ "brightGreen": "#bddbbd",821+ "brightYellow": "#dbdbbd",822+ "brightBlue": "#bdbddb",823+ "brightMagenta": "#dbbddb",824+ "brightCyan": "#bddbdb",825+ "brightWhite": "#ffffff",826+ "background": "#0d1926",827+ "foreground": "#d9e6f2",828+ "cursor": "#d9e6f2",829+ "selection": "#c1ddff",830+ "meta": {831+ "isDark": true,832+ "credits": null833+ }834+ },835+ {836+ "name": "Blue Matrix",837+ "black": "#101116",838+ "red": "#ff5680",839+ "green": "#00ff9c",840+ "yellow": "#fffc58",841+ "blue": "#00b0ff",842+ "magenta": "#d57bff",843+ "cyan": "#76c1ff",844+ "white": "#c7c7c7",845+ "brightBlack": "#686868",846+ "brightRed": "#ff6e67",847+ "brightGreen": "#5ffa68",848+ "brightYellow": "#fffc67",849+ "brightBlue": "#6871ff",850+ "brightMagenta": "#d682ec",851+ "brightCyan": "#60fdff",852+ "brightWhite": "#ffffff",853+ "background": "#101116",854+ "foreground": "#00a2ff",855+ "cursor": "#76ff9f",856+ "selection": "#c1deff",857+ "meta": {858+ "isDark": true,859+ "credits": [860+ {861+ "name": "ReagentX",862+ "link": "https://github.com/ReagentX"863+ }864+ ]865+ }866+ },867+ {868+ "name": "BlueBerryPie",869+ "black": "#0a4c62",870+ "red": "#99246e",871+ "green": "#5cb1b3",872+ "yellow": "#eab9a8",873+ "blue": "#90a5bd",874+ "magenta": "#9d54a7",875+ "cyan": "#7e83cc",876+ "white": "#f0e8d6",877+ "brightBlack": "#201637",878+ "brightRed": "#c87272",879+ "brightGreen": "#0a6c7e",880+ "brightYellow": "#7a3188",881+ "brightBlue": "#39173d",882+ "brightMagenta": "#bc94b7",883+ "brightCyan": "#5e6071",884+ "brightWhite": "#0a6c7e",885+ "background": "#1c0c28",886+ "foreground": "#babab9",887+ "cursor": "#fcfad6",888+ "selection": "#606060",889+ "meta": {890+ "isDark": true,891+ "credits": [892+ {893+ "name": "murmurlilia",894+ "link": "https://www.instagram.com/the.julias"895+ },896+ {897+ "name": "fitz123",898+ "link": "https://github.com/fitz123"899+ }900+ ]901+ }902+ },903+ {904+ "name": "BlueDolphin",905+ "black": "#292d3e",906+ "red": "#ff8288",907+ "green": "#b4e88d",908+ "yellow": "#f4d69f",909+ "blue": "#82aaff",910+ "magenta": "#e9c1ff",911+ "cyan": "#89ebff",912+ "white": "#d0d0d0",913+ "brightBlack": "#434758",914+ "brightRed": "#ff8b92",915+ "brightGreen": "#ddffa7",916+ "brightYellow": "#ffe585",917+ "brightBlue": "#9cc4ff",918+ "brightMagenta": "#ddb0f6",919+ "brightCyan": "#a3f7ff",920+ "brightWhite": "#ffffff",921+ "background": "#006984",922+ "foreground": "#c5f2ff",923+ "cursor": "#ffcc00",924+ "selection": "#2baeca",925+ "meta": {926+ "isDark": true,927+ "credits": null928+ }929+ },930+ {931+ "name": "BlulocoDark",932+ "black": "#41444d",933+ "red": "#fc2f52",934+ "green": "#25a45c",935+ "yellow": "#ff936a",936+ "blue": "#3476ff",937+ "magenta": "#7a82da",938+ "cyan": "#4483aa",939+ "white": "#cdd4e0",940+ "brightBlack": "#8f9aae",941+ "brightRed": "#ff6480",942+ "brightGreen": "#3fc56b",943+ "brightYellow": "#f9c859",944+ "brightBlue": "#10b1fe",945+ "brightMagenta": "#ff78f8",946+ "brightCyan": "#5fb9bc",947+ "brightWhite": "#ffffff",948+ "background": "#282c34",949+ "foreground": "#b9c0cb",950+ "cursor": "#ffcc00",951+ "selection": "#b9c0ca",952+ "meta": {953+ "isDark": true,954+ "credits": null955+ }956+ },957+ {958+ "name": "BlulocoLight",959+ "black": "#373a41",960+ "red": "#d52753",961+ "green": "#23974a",962+ "yellow": "#df631c",963+ "blue": "#275fe4",964+ "magenta": "#823ff1",965+ "cyan": "#27618d",966+ "white": "#babbc2",967+ "brightBlack": "#676a77",968+ "brightRed": "#ff6480",969+ "brightGreen": "#3cbc66",970+ "brightYellow": "#c5a332",971+ "brightBlue": "#0099e1",972+ "brightMagenta": "#ce33c0",973+ "brightCyan": "#6d93bb",974+ "brightWhite": "#d3d3d3",975+ "background": "#f9f9f9",976+ "foreground": "#373a41",977+ "cursor": "#f32759",978+ "selection": "#daf0ff",979+ "meta": {980+ "isDark": false,981+ "credits": null982+ }983+ },984+ {985+ "name": "Borland",986+ "black": "#4f4f4f",987+ "red": "#ff6c60",988+ "green": "#a8ff60",989+ "yellow": "#ffffb6",990+ "blue": "#96cbfe",991+ "magenta": "#ff73fd",992+ "cyan": "#c6c5fe",993+ "white": "#eeeeee",994+ "brightBlack": "#7c7c7c",995+ "brightRed": "#ffb6b0",996+ "brightGreen": "#ceffac",997+ "brightYellow": "#ffffcc",998+ "brightBlue": "#b5dcff",999+ "brightMagenta": "#ff9cfe",1000+ "brightCyan": "#dfdffe",1001+ "brightWhite": "#ffffff",1002+ "background": "#0000a4",1003+ "foreground": "#ffff4e",1004+ "cursor": "#ffa560",1005+ "selection": "#a4a4a4",1006+ "meta": {1007+ "isDark": true,1008+ "credits": [1009+ {1010+ "name": "delip",1011+ "link": "https://gist.github.com/delip/9e16c606d9331d69d681"1012+ }1013+ ]1014+ }1015+ },1016+ {1017+ "name": "Breeze",1018+ "black": "#31363b",1019+ "red": "#ed1515",1020+ "green": "#11d116",1021+ "yellow": "#f67400",1022+ "blue": "#1d99f3",1023+ "magenta": "#9b59b6",1024+ "cyan": "#1abc9c",1025+ "white": "#eff0f1",1026+ "brightBlack": "#7f8c8d",1027+ "brightRed": "#c0392b",1028+ "brightGreen": "#1cdc9a",1029+ "brightYellow": "#fdbc4b",1030+ "brightBlue": "#3daee9",1031+ "brightMagenta": "#8e44ad",1032+ "brightCyan": "#16a085",1033+ "brightWhite": "#fcfcfc",1034+ "background": "#31363b",1035+ "foreground": "#eff0f1",1036+ "cursor": "#eff0f1",1037+ "selection": "#eff0f1",1038+ "meta": {1039+ "isDark": true,1040+ "credits": [1041+ {1042+ "name": "KDE",1043+ "link": "https://kde.org"1044+ },1045+ {1046+ "name": "nieltg",1047+ "link": "https://github.com/nieltg"1048+ }1049+ ]1050+ }1051+ },1052+ {1053+ "name": "Bright Lights",1054+ "black": "#191919",1055+ "red": "#ff355b",1056+ "green": "#b7e876",1057+ "yellow": "#ffc251",1058+ "blue": "#76d4ff",1059+ "magenta": "#ba76e7",1060+ "cyan": "#6cbfb5",1061+ "white": "#c2c8d7",1062+ "brightBlack": "#191919",1063+ "brightRed": "#ff355b",1064+ "brightGreen": "#b7e876",1065+ "brightYellow": "#ffc251",1066+ "brightBlue": "#76d5ff",1067+ "brightMagenta": "#ba76e7",1068+ "brightCyan": "#6cbfb5",1069+ "brightWhite": "#c2c8d7",1070+ "background": "#191919",1071+ "foreground": "#b3c9d7",1072+ "cursor": "#f34b00",1073+ "selection": "#b3c9d7",1074+ "meta": {1075+ "isDark": true,1076+ "credits": [1077+ {1078+ "name": "tw15egan",1079+ "link": "https://github.com/tw15egan"1080+ }1081+ ]1082+ }1083+ },1084+ {1085+ "name": "Broadcast",1086+ "black": "#000000",1087+ "red": "#da4939",1088+ "green": "#519f50",1089+ "yellow": "#ffd24a",1090+ "blue": "#6d9cbe",1091+ "magenta": "#d0d0ff",1092+ "cyan": "#6e9cbe",1093+ "white": "#ffffff",1094+ "brightBlack": "#323232",1095+ "brightRed": "#ff7b6b",1096+ "brightGreen": "#83d182",1097+ "brightYellow": "#ffff7c",1098+ "brightBlue": "#9fcef0",1099+ "brightMagenta": "#ffffff",1100+ "brightCyan": "#a0cef0",1101+ "brightWhite": "#ffffff",1102+ "background": "#2b2b2b",1103+ "foreground": "#e6e1dc",1104+ "cursor": "#ffffff",1105+ "selection": "#5a647e",1106+ "meta": {1107+ "isDark": true,1108+ "credits": [1109+ {1110+ "name": "vinkla",1111+ "link": "https://github.com/vinkla/broadcast-theme"1112+ }1113+ ]1114+ }1115+ },1116+ {1117+ "name": "Brogrammer",1118+ "black": "#1f1f1f",1119+ "red": "#f81118",1120+ "green": "#2dc55e",1121+ "yellow": "#ecba0f",1122+ "blue": "#2a84d2",1123+ "magenta": "#4e5ab7",1124+ "cyan": "#1081d6",1125+ "white": "#d6dbe5",1126+ "brightBlack": "#d6dbe5",1127+ "brightRed": "#de352e",1128+ "brightGreen": "#1dd361",1129+ "brightYellow": "#f3bd09",1130+ "brightBlue": "#1081d6",1131+ "brightMagenta": "#5350b9",1132+ "brightCyan": "#0f7ddb",1133+ "brightWhite": "#ffffff",1134+ "background": "#131313",1135+ "foreground": "#d6dbe5",1136+ "cursor": "#b9b9b9",1137+ "selection": "#1f1f1f",1138+ "meta": {1139+ "isDark": true,1140+ "credits": [1141+ {1142+ "name": "bahlo",1143+ "link": "https://github.com/bahlo/iterm-colors"1144+ }1145+ ]1146+ }1147+ },1148+ {1149+ "name": "Bubbles",1150+ "background": "#161D38",1151+ "black": "#000000",1152+ "blue": "#589DF6",1153+ "brightBlack": "#555555",1154+ "brightBlue": "#589DF6",1155+ "brightCyan": "#3979BC",1156+ "brightGreen": "#35BB9A",1157+ "brightMagenta": "#E75699",1158+ "brightRed": "#FA8C8F",1159+ "brightWhite": "#FFFFFF",1160+ "brightYellow": "#FFFF55",1161+ "cursor": "#BBBBBB",1162+ "cyan": "#1F9EE7",1163+ "foreground": "#FFFFFF",1164+ "green": "#21B089",1165+ "magenta": "#944D95",1166+ "red": "#F9555F",1167+ "selection": "#B5D5FF",1168+ "white": "#BBBBBB",1169+ "yellow": "#FEF02A",1170+ "meta": {1171+ "isDark": true,1172+ "credits": [1173+ {1174+ "name": "jos3s",1175+ "link": "https://github.com/jos3s"1176+ }1177+ ]1178+ }1179+ },1180+ {1181+ "name": "Builtin Dark",1182+ "black": "#000000",1183+ "red": "#bb0000",1184+ "green": "#00bb00",1185+ "yellow": "#bbbb00",1186+ "blue": "#0000bb",1187+ "magenta": "#bb00bb",1188+ "cyan": "#00bbbb",1189+ "white": "#bbbbbb",1190+ "brightBlack": "#555555",1191+ "brightRed": "#ff5555",1192+ "brightGreen": "#55ff55",1193+ "brightYellow": "#ffff55",1194+ "brightBlue": "#5555ff",1195+ "brightMagenta": "#ff55ff",1196+ "brightCyan": "#55ffff",1197+ "brightWhite": "#ffffff",1198+ "background": "#000000",1199+ "foreground": "#bbbbbb",1200+ "cursor": "#bbbbbb",1201+ "selection": "#b5d5ff",1202+ "meta": {1203+ "isDark": true,1204+ "credits": null1205+ }1206+ },1207+ {1208+ "name": "Builtin Light",1209+ "black": "#000000",1210+ "red": "#bb0000",1211+ "green": "#00bb00",1212+ "yellow": "#bbbb00",1213+ "blue": "#0000bb",1214+ "magenta": "#bb00bb",1215+ "cyan": "#00bbbb",1216+ "white": "#bbbbbb",1217+ "brightBlack": "#555555",1218+ "brightRed": "#ff5555",1219+ "brightGreen": "#55ff55",1220+ "brightYellow": "#ffff55",1221+ "brightBlue": "#5555ff",1222+ "brightMagenta": "#ff55ff",1223+ "brightCyan": "#55ffff",1224+ "brightWhite": "#ffffff",1225+ "background": "#ffffff",1226+ "foreground": "#000000",1227+ "cursor": "#000000",1228+ "selection": "#b5d5ff",1229+ "meta": {1230+ "isDark": false,1231+ "credits": null1232+ }1233+ },1234+ {1235+ "name": "Builtin Pastel Dark",1236+ "black": "#4f4f4f",1237+ "red": "#ff6c60",1238+ "green": "#a8ff60",1239+ "yellow": "#ffffb6",1240+ "blue": "#96cbfe",1241+ "magenta": "#ff73fd",1242+ "cyan": "#c6c5fe",1243+ "white": "#eeeeee",1244+ "brightBlack": "#7c7c7c",1245+ "brightRed": "#ffb6b0",1246+ "brightGreen": "#ceffac",1247+ "brightYellow": "#ffffcc",1248+ "brightBlue": "#b5dcff",1249+ "brightMagenta": "#ff9cfe",1250+ "brightCyan": "#dfdffe",1251+ "brightWhite": "#ffffff",1252+ "background": "#000000",1253+ "foreground": "#bbbbbb",1254+ "cursor": "#ffa560",1255+ "selection": "#363983",1256+ "meta": {1257+ "isDark": true,1258+ "credits": null1259+ }1260+ },1261+ {1262+ "name": "Builtin Solarized Dark",1263+ "black": "#073642",1264+ "red": "#dc322f",1265+ "green": "#859900",1266+ "yellow": "#b58900",1267+ "blue": "#268bd2",1268+ "magenta": "#d33682",1269+ "cyan": "#2aa198",1270+ "white": "#eee8d5",1271+ "brightBlack": "#002b36",1272+ "brightRed": "#cb4b16",1273+ "brightGreen": "#586e75",1274+ "brightYellow": "#657b83",1275+ "brightBlue": "#839496",1276+ "brightMagenta": "#6c71c4",1277+ "brightCyan": "#93a1a1",1278+ "brightWhite": "#fdf6e3",1279+ "background": "#002b36",1280+ "foreground": "#839496",1281+ "cursor": "#839496",1282+ "selection": "#073642",1283+ "meta": {1284+ "isDark": true,1285+ "credits": [1286+ {1287+ "name": "Solarized web site",1288+ "link": "http://ethanschoonover.com/solarized"1289+ }1290+ ]1291+ }1292+ },1293+ {1294+ "name": "Builtin Solarized Light",1295+ "black": "#073642",1296+ "red": "#dc322f",1297+ "green": "#859900",1298+ "yellow": "#b58900",1299+ "blue": "#268bd2",1300+ "magenta": "#d33682",1301+ "cyan": "#2aa198",1302+ "white": "#eee8d5",1303+ "brightBlack": "#002b36",1304+ "brightRed": "#cb4b16",1305+ "brightGreen": "#586e75",1306+ "brightYellow": "#657b83",1307+ "brightBlue": "#839496",1308+ "brightMagenta": "#6c71c4",1309+ "brightCyan": "#93a1a1",1310+ "brightWhite": "#fdf6e3",1311+ "background": "#fdf6e3",1312+ "foreground": "#657b83",1313+ "cursor": "#657b83",1314+ "selection": "#eee8d5",1315+ "meta": {1316+ "isDark": false,1317+ "credits": [1318+ {1319+ "name": "Solarized web site",1320+ "link": "http://ethanschoonover.com/solarized"1321+ }1322+ ]1323+ }1324+ },1325+ {1326+ "name": "Builtin Tango Dark",1327+ "black": "#000000",1328+ "red": "#cc0000",1329+ "green": "#4e9a06",1330+ "yellow": "#c4a000",1331+ "blue": "#3465a4",1332+ "magenta": "#75507b",1333+ "cyan": "#06989a",1334+ "white": "#d3d7cf",1335+ "brightBlack": "#555753",1336+ "brightRed": "#ef2929",1337+ "brightGreen": "#8ae234",1338+ "brightYellow": "#fce94f",1339+ "brightBlue": "#729fcf",1340+ "brightMagenta": "#ad7fa8",1341+ "brightCyan": "#34e2e2",1342+ "brightWhite": "#eeeeec",1343+ "background": "#000000",1344+ "foreground": "#ffffff",1345+ "cursor": "#ffffff",1346+ "selection": "#b5d5ff",1347+ "meta": {1348+ "isDark": true,1349+ "credits": null1350+ }1351+ },1352+ {1353+ "name": "Builtin Tango Light",1354+ "black": "#000000",1355+ "red": "#cc0000",1356+ "green": "#4e9a06",1357+ "yellow": "#c4a000",1358+ "blue": "#3465a4",1359+ "magenta": "#75507b",1360+ "cyan": "#06989a",1361+ "white": "#d3d7cf",1362+ "brightBlack": "#555753",1363+ "brightRed": "#ef2929",1364+ "brightGreen": "#8ae234",1365+ "brightYellow": "#fce94f",1366+ "brightBlue": "#729fcf",1367+ "brightMagenta": "#ad7fa8",1368+ "brightCyan": "#34e2e2",1369+ "brightWhite": "#eeeeec",1370+ "background": "#ffffff",1371+ "foreground": "#000000",1372+ "cursor": "#000000",1373+ "selection": "#b5d5ff",1374+ "meta": {1375+ "isDark": false,1376+ "credits": null1377+ }1378+ },1379+ {1380+ "name": "C64",1381+ "black": "#090300",1382+ "red": "#883932",1383+ "green": "#55a049",1384+ "yellow": "#bfce72",1385+ "blue": "#40318d",1386+ "magenta": "#8b3f96",1387+ "cyan": "#67b6bd",1388+ "white": "#ffffff",1389+ "brightBlack": "#000000",1390+ "brightRed": "#883932",1391+ "brightGreen": "#55a049",1392+ "brightYellow": "#bfce72",1393+ "brightBlue": "#40318d",1394+ "brightMagenta": "#8b3f96",1395+ "brightCyan": "#67b6bd",1396+ "brightWhite": "#f7f7f7",1397+ "background": "#40318d",1398+ "foreground": "#7869c4",1399+ "cursor": "#7869c4",1400+ "selection": "#7869c4",1401+ "meta": {1402+ "isDark": true,1403+ "credits": [1404+ {1405+ "name": "idleberg",1406+ "link": "https://github.com/idleberg"1407+ }1408+ ]1409+ }1410+ },1411+ {1412+ "name": "Calamity",1413+ "black": "#2f2833",1414+ "red": "#fc644d",1415+ "green": "#a5f69c",1416+ "yellow": "#e9d7a5",1417+ "blue": "#3b79c7",1418+ "magenta": "#f92672",1419+ "cyan": "#74d3de",1420+ "white": "#d5ced9",1421+ "brightBlack": "#7e6c88",1422+ "brightRed": "#fc644d",1423+ "brightGreen": "#a5f69c",1424+ "brightYellow": "#e9d7a5",1425+ "brightBlue": "#3b79c7",1426+ "brightMagenta": "#f92672",1427+ "brightCyan": "#74d3de",1428+ "brightWhite": "#ffffff",1429+ "background": "#2f2833",1430+ "foreground": "#d5ced9",1431+ "cursor": "#d5ced9",1432+ "selection": "#7e6c88",1433+ "meta": {1434+ "isDark": true,1435+ "credits": [1436+ {1437+ "name": "Pustur",1438+ "link": "https://github.com/Pustur"1439+ }1440+ ]1441+ }1442+ },1443+ {1444+ "name": "Catppuccin Frappe",1445+ "black": "#51576d",1446+ "red": "#e78284",1447+ "green": "#a6d189",1448+ "yellow": "#e5c890",1449+ "blue": "#8caaee",1450+ "magenta": "#f4b8e4",1451+ "cyan": "#81c8be",1452+ "white": "#b5bfe2",1453+ "brightBlack": "#626880",1454+ "brightRed": "#e78284",1455+ "brightGreen": "#a6d189",1456+ "brightYellow": "#e5c890",1457+ "brightBlue": "#8caaee",1458+ "brightMagenta": "#f4b8e4",1459+ "brightCyan": "#81c8be",1460+ "brightWhite": "#a5adce",1461+ "background": "#303446",1462+ "foreground": "#c6d0f5",1463+ "selection": "#626880",1464+ "cursor": "#f2d5cf",1465+ "meta": {1466+ "isDark": true,1467+ "credits": null1468+ }1469+ },1470+ {1471+ "name": "Catppuccin Latte",1472+ "black": "#5c5f77",1473+ "red": "#d20f39",1474+ "green": "#40a02b",1475+ "yellow": "#df8e1d",1476+ "blue": "#1e66f5",1477+ "magenta": "#ea76cb",1478+ "cyan": "#179299",1479+ "white": "#acb0be",1480+ "brightBlack": "#6c6f85",1481+ "brightRed": "#d20f39",1482+ "brightGreen": "#40a02b",1483+ "brightYellow": "#df8e1d",1484+ "brightBlue": "#1e66f5",1485+ "brightMagenta": "#ea76cb",1486+ "brightCyan": "#179299",1487+ "brightWhite": "#bcc0cc",1488+ "background": "#eff1f5",1489+ "foreground": "#4c4f69",1490+ "selection": "#acb0be",1491+ "cursor": "#dc8a78",1492+ "meta": {1493+ "isDark": false,1494+ "credits": null1495+ }1496+ },1497+ {1498+ "name": "Catppuccin Macchiato",1499+ "black": "#494d64",1500+ "red": "#ed8796",1501+ "green": "#a6da95",1502+ "yellow": "#eed49f",1503+ "blue": "#8aadf4",1504+ "magenta": "#f5bde6",1505+ "cyan": "#8bd5ca",1506+ "white": "#b8c0e0",1507+ "brightBlack": "#5b6078",1508+ "brightRed": "#ed8796",1509+ "brightGreen": "#a6da95",1510+ "brightYellow": "#eed49f",1511+ "brightBlue": "#8aadf4",1512+ "brightMagenta": "#f5bde6",1513+ "brightCyan": "#8bd5ca",1514+ "brightWhite": "#b8c0e0",1515+ "background": "#24273a",1516+ "foreground": "#cad3f5",1517+ "selection": "#5b6078",1518+ "cursor": "#f4dbd6",1519+ "meta": {1520+ "isDark": true,1521+ "credits": null1522+ }1523+ },1524+ {1525+ "name": "Catppuccin Mocha",1526+ "black": "#45475a",1527+ "red": "#f38ba8",1528+ "green": "#a6e3a1",1529+ "yellow": "#f9e2af",1530+ "blue": "#89b4fa",1531+ "magenta": "#f5c2e7",1532+ "cyan": "#94e2d5",1533+ "white": "#bac2de",1534+ "brightBlack": "#585b70",1535+ "brightRed": "#f38ba8",1536+ "brightGreen": "#a6e3a1",1537+ "brightYellow": "#f9e2af",1538+ "brightBlue": "#89b4fa",1539+ "brightMagenta": "#f5c2e7",1540+ "brightCyan": "#94e2d5",1541+ "brightWhite": "#a6adc8",1542+ "background": "#1e1e2e",1543+ "foreground": "#cdd6f4",1544+ "selection": "#585b70",1545+ "cursor": "#f5e0dc",1546+ "meta": {1547+ "isDark": true,1548+ "credits": null1549+ }1550+ },1551+ {1552+ "name": "catppuccin-frappe",1553+ "black": "#51576d",1554+ "red": "#e78284",1555+ "green": "#a6d189",1556+ "yellow": "#e5c890",1557+ "blue": "#8caaee",1558+ "magenta": "#f4b8e4",1559+ "cyan": "#81c8be",1560+ "white": "#b5bfe2",1561+ "brightBlack": "#626880",1562+ "brightRed": "#e78284",1563+ "brightGreen": "#a6d189",1564+ "brightYellow": "#e5c890",1565+ "brightBlue": "#8caaee",1566+ "brightMagenta": "#f4b8e4",1567+ "brightCyan": "#81c8be",1568+ "brightWhite": "#a5adce",1569+ "background": "#303446",1570+ "foreground": "#c6d0f5",1571+ "cursor": "#f2d5cf",1572+ "selection": "#626880",1573+ "meta": {1574+ "isDark": true,1575+ "credits": null1576+ }1577+ },1578+ {1579+ "name": "catppuccin-latte",1580+ "black": "#5c5f77",1581+ "red": "#d20f39",1582+ "green": "#40a02b",1583+ "yellow": "#df8e1d",1584+ "blue": "#1e66f5",1585+ "magenta": "#ea76cb",1586+ "cyan": "#179299",1587+ "white": "#acb0be",1588+ "brightBlack": "#6c6f85",1589+ "brightRed": "#d20f39",1590+ "brightGreen": "#40a02b",1591+ "brightYellow": "#df8e1d",1592+ "brightBlue": "#1e66f5",1593+ "brightMagenta": "#ea76cb",1594+ "brightCyan": "#179299",1595+ "brightWhite": "#bcc0cc",1596+ "background": "#eff1f5",1597+ "foreground": "#4c4f69",1598+ "cursor": "#dc8a78",1599+ "selection": "#acb0be",1600+ "meta": {1601+ "isDark": false,1602+ "credits": null1603+ }1604+ },1605+ {1606+ "name": "catppuccin-macchiato",1607+ "black": "#494d64",1608+ "red": "#ed8796",1609+ "green": "#a6da95",1610+ "yellow": "#eed49f",1611+ "blue": "#8aadf4",1612+ "magenta": "#f5bde6",1613+ "cyan": "#8bd5ca",1614+ "white": "#b8c0e0",1615+ "brightBlack": "#5b6078",1616+ "brightRed": "#ed8796",1617+ "brightGreen": "#a6da95",1618+ "brightYellow": "#eed49f",1619+ "brightBlue": "#8aadf4",1620+ "brightMagenta": "#f5bde6",1621+ "brightCyan": "#8bd5ca",1622+ "brightWhite": "#a5adcb",1623+ "background": "#24273a",1624+ "foreground": "#cad3f5",1625+ "cursor": "#f4dbd6",1626+ "selection": "#5b6078",1627+ "meta": {1628+ "isDark": true,1629+ "credits": null1630+ }1631+ },1632+ {1633+ "name": "catppuccin-mocha",1634+ "black": "#45475a",1635+ "red": "#f38ba8",1636+ "green": "#a6e3a1",1637+ "yellow": "#f9e2af",1638+ "blue": "#89b4fa",1639+ "magenta": "#f5c2e7",1640+ "cyan": "#94e2d5",1641+ "white": "#bac2de",1642+ "brightBlack": "#585b70",1643+ "brightRed": "#f38ba8",1644+ "brightGreen": "#a6e3a1",1645+ "brightYellow": "#f9e2af",1646+ "brightBlue": "#89b4fa",1647+ "brightMagenta": "#f5c2e7",1648+ "brightCyan": "#94e2d5",1649+ "brightWhite": "#a6adc8",1650+ "background": "#1e1e2e",1651+ "foreground": "#cdd6f4",1652+ "cursor": "#f5e0dc",1653+ "selection": "#585b70",1654+ "meta": {1655+ "isDark": true,1656+ "credits": null1657+ }1658+ },1659+ {1660+ "name": "CGA",1661+ "black": "#000000",1662+ "red": "#aa0000",1663+ "green": "#00aa00",1664+ "yellow": "#aa5500",1665+ "blue": "#0000aa",1666+ "magenta": "#aa00aa",1667+ "cyan": "#00aaaa",1668+ "white": "#aaaaaa",1669+ "brightBlack": "#555555",1670+ "brightRed": "#ff5555",1671+ "brightGreen": "#55ff55",1672+ "brightYellow": "#ffff55",1673+ "brightBlue": "#5555ff",1674+ "brightMagenta": "#ff55ff",1675+ "brightCyan": "#55ffff",1676+ "brightWhite": "#ffffff",1677+ "background": "#000000",1678+ "foreground": "#aaaaaa",1679+ "cursor": "#b8b8b8",1680+ "selection": "#c1deff",1681+ "meta": {1682+ "isDark": true,1683+ "credits": null1684+ }1685+ },1686+ {1687+ "name": "Chalk",1688+ "black": "#7d8b8f",1689+ "red": "#b23a52",1690+ "green": "#789b6a",1691+ "yellow": "#b9ac4a",1692+ "blue": "#2a7fac",1693+ "magenta": "#bd4f5a",1694+ "cyan": "#44a799",1695+ "white": "#d2d8d9",1696+ "brightBlack": "#888888",1697+ "brightRed": "#f24840",1698+ "brightGreen": "#80c470",1699+ "brightYellow": "#ffeb62",1700+ "brightBlue": "#4196ff",1701+ "brightMagenta": "#fc5275",1702+ "brightCyan": "#53cdbd",1703+ "brightWhite": "#d2d8d9",1704+ "background": "#2b2d2e",1705+ "foreground": "#d2d8d9",1706+ "cursor": "#708284",1707+ "selection": "#e4e8ed",1708+ "meta": {1709+ "isDark": true,1710+ "credits": [1711+ {1712+ "name": "achalv",1713+ "link": "https://github.com/achalv/chalk"1714+ }1715+ ]1716+ }1717+ },1718+ {1719+ "name": "Chalkboard",1720+ "black": "#000000",1721+ "red": "#c37372",1722+ "green": "#72c373",1723+ "yellow": "#c2c372",1724+ "blue": "#7372c3",1725+ "magenta": "#c372c2",1726+ "cyan": "#72c2c3",1727+ "white": "#d9d9d9",1728+ "brightBlack": "#323232",1729+ "brightRed": "#dbaaaa",1730+ "brightGreen": "#aadbaa",1731+ "brightYellow": "#dadbaa",1732+ "brightBlue": "#aaaadb",1733+ "brightMagenta": "#dbaada",1734+ "brightCyan": "#aadadb",1735+ "brightWhite": "#ffffff",1736+ "background": "#29262f",1737+ "foreground": "#d9e6f2",1738+ "cursor": "#d9e6f2",1739+ "selection": "#073642",1740+ "meta": {1741+ "isDark": true,1742+ "credits": null1743+ }1744+ },1745+ {1746+ "name": "ChallengerDeep",1747+ "black": "#141228",1748+ "red": "#ff5458",1749+ "green": "#62d196",1750+ "yellow": "#ffb378",1751+ "blue": "#65b2ff",1752+ "magenta": "#906cff",1753+ "cyan": "#63f2f1",1754+ "white": "#a6b3cc",1755+ "brightBlack": "#565575",1756+ "brightRed": "#ff8080",1757+ "brightGreen": "#95ffa4",1758+ "brightYellow": "#ffe9aa",1759+ "brightBlue": "#91ddff",1760+ "brightMagenta": "#c991e1",1761+ "brightCyan": "#aaffe4",1762+ "brightWhite": "#cbe3e7",1763+ "background": "#1e1c31",1764+ "foreground": "#cbe1e7",1765+ "cursor": "#fbfcfc",1766+ "selection": "#cbe1e7",1767+ "meta": {1768+ "isDark": true,1769+ "credits": [1770+ {1771+ "name": "challenger-deep-theme",1772+ "link": "https://github.com/challenger-deep-theme/vim"1773+ },1774+ {1775+ "name": "eendroroy",1776+ "link": "https://github.com/eendroroy"1777+ }1778+ ]1779+ }1780+ },1781+ {1782+ "name": "Chester",1783+ "black": "#080200",1784+ "red": "#fa5e5b",1785+ "green": "#16c98d",1786+ "yellow": "#ffc83f",1787+ "blue": "#288ad6",1788+ "magenta": "#d34590",1789+ "cyan": "#28ddde",1790+ "white": "#e7e7e7",1791+ "brightBlack": "#6f6b68",1792+ "brightRed": "#fa5e5b",1793+ "brightGreen": "#16c98d",1794+ "brightYellow": "#feef6d",1795+ "brightBlue": "#278ad6",1796+ "brightMagenta": "#d34590",1797+ "brightCyan": "#27dede",1798+ "brightWhite": "#ffffff",1799+ "background": "#2c3643",1800+ "foreground": "#ffffff",1801+ "cursor": "#b4b1b1",1802+ "selection": "#67747c",1803+ "meta": {1804+ "isDark": true,1805+ "credits": [1806+ {1807+ "name": "KH",1808+ "link": "https://github.com/spectralkh"1809+ }1810+ ]1811+ }1812+ },1813+ {1814+ "name": "Ciapre",1815+ "black": "#181818",1816+ "red": "#810009",1817+ "green": "#48513b",1818+ "yellow": "#cc8b3f",1819+ "blue": "#576d8c",1820+ "magenta": "#724d7c",1821+ "cyan": "#5c4f4b",1822+ "white": "#aea47f",1823+ "brightBlack": "#555555",1824+ "brightRed": "#ac3835",1825+ "brightGreen": "#a6a75d",1826+ "brightYellow": "#dcdf7c",1827+ "brightBlue": "#3097c6",1828+ "brightMagenta": "#d33061",1829+ "brightCyan": "#f3dbb2",1830+ "brightWhite": "#f4f4f4",1831+ "background": "#191c27",1832+ "foreground": "#aea47a",1833+ "cursor": "#92805b",1834+ "selection": "#172539",1835+ "meta": {1836+ "isDark": true,1837+ "credits": [1838+ {1839+ "name": "zdj",1840+ "link": "https://github.com/zdj/themes/tree/master/iterm2"1841+ }1842+ ]1843+ }1844+ },1845+ {1846+ "name": "CLRS",1847+ "black": "#000000",1848+ "red": "#f8282a",1849+ "green": "#328a5d",1850+ "yellow": "#fa701d",1851+ "blue": "#135cd0",1852+ "magenta": "#9f00bd",1853+ "cyan": "#33c3c1",1854+ "white": "#b3b3b3",1855+ "brightBlack": "#555753",1856+ "brightRed": "#fb0416",1857+ "brightGreen": "#2cc631",1858+ "brightYellow": "#fdd727",1859+ "brightBlue": "#1670ff",1860+ "brightMagenta": "#e900b0",1861+ "brightCyan": "#3ad5ce",1862+ "brightWhite": "#eeeeec",1863+ "background": "#ffffff",1864+ "foreground": "#262626",1865+ "cursor": "#6fd3fc",1866+ "selection": "#6fd3fc",1867+ "meta": {1868+ "isDark": false,1869+ "credits": [1870+ {1871+ "name": "jasonlong",1872+ "link": "https://github.com/jasonlong/iterm-clrs"1873+ }1874+ ]1875+ }1876+ },1877+ {1878+ "name": "Cobalt Neon",1879+ "black": "#142631",1880+ "red": "#ff2320",1881+ "green": "#3ba5ff",1882+ "yellow": "#e9e75c",1883+ "blue": "#8ff586",1884+ "magenta": "#781aa0",1885+ "cyan": "#8ff586",1886+ "white": "#ba46b2",1887+ "brightBlack": "#fff688",1888+ "brightRed": "#d4312e",1889+ "brightGreen": "#8ff586",1890+ "brightYellow": "#e9f06d",1891+ "brightBlue": "#3c7dd2",1892+ "brightMagenta": "#8230a7",1893+ "brightCyan": "#6cbc67",1894+ "brightWhite": "#8ff586",1895+ "background": "#142838",1896+ "foreground": "#8ff586",1897+ "cursor": "#c4206f",1898+ "selection": "#094fb1",1899+ "meta": {1900+ "isDark": true,1901+ "credits": [1902+ {1903+ "name": "vazquez",1904+ "link": "https://github.com/vazquez/cobalt-neon-iterm"1905+ }1906+ ]1907+ }1908+ },1909+ {1910+ "name": "Cobalt2",1911+ "black": "#000000",1912+ "red": "#ff0000",1913+ "green": "#38de21",1914+ "yellow": "#ffe50a",1915+ "blue": "#1460d2",1916+ "magenta": "#ff005d",1917+ "cyan": "#00bbbb",1918+ "white": "#bbbbbb",1919+ "brightBlack": "#555555",1920+ "brightRed": "#f40e17",1921+ "brightGreen": "#3bd01d",1922+ "brightYellow": "#edc809",1923+ "brightBlue": "#5555ff",1924+ "brightMagenta": "#ff55ff",1925+ "brightCyan": "#6ae3fa",1926+ "brightWhite": "#ffffff",1927+ "background": "#132738",1928+ "foreground": "#ffffff",1929+ "cursor": "#f0cc09",1930+ "selection": "#18354f",1931+ "meta": {1932+ "isDark": true,1933+ "credits": [1934+ {1935+ "name": "wesbos",1936+ "link": "https://github.com/wesbos/Cobalt2-iterm"1937+ }1938+ ]1939+ }1940+ },1941+ {1942+ "name": "coffee_theme",1943+ "black": "#000000",1944+ "red": "#c91b00",1945+ "green": "#00c200",1946+ "yellow": "#c7c400",1947+ "blue": "#0225c7",1948+ "magenta": "#ca30c7",1949+ "cyan": "#00c5c7",1950+ "white": "#c7c7c7",1951+ "brightBlack": "#686868",1952+ "brightRed": "#ff6e67",1953+ "brightGreen": "#5ffa68",1954+ "brightYellow": "#fffc67",1955+ "brightBlue": "#6871ff",1956+ "brightMagenta": "#ff77ff",1957+ "brightCyan": "#60fdff",1958+ "brightWhite": "#ffffff",1959+ "background": "#f5deb3",1960+ "foreground": "#000000",1961+ "cursor": "#c7c7c7",1962+ "selection": "#c1deff",1963+ "meta": {1964+ "isDark": false,1965+ "credits": [1966+ {1967+ "name": "cbitterfield",1968+ "link": "https://github.com/cbitterfield"1969+ }1970+ ]1971+ }1972+ },1973+ {1974+ "background": "#FFFFFF",1975+ "black": "#2E1742",1976+ "blue": "#0D6BAD",1977+ "brightBlack": "#462366",1978+ "brightBlue": "#008CCC",1979+ "brightCyan": "#46D1E0",1980+ "brightGreen": "#99C252",1981+ "brightMagenta": "#AF87FF",1982+ "brightRed": "#FF0000",1983+ "brightWhite": "#FFFFFF",1984+ "brightYellow": "#A39B46",1985+ "cursor": "#000000",1986+ "cyan": "#41C2D0",1987+ "foreground": "#051840",1988+ "green": "#77B01B",1989+ "name": "Contrast Light",1990+ "magenta": "#8700FF",1991+ "red": "#BF0000",1992+ "selection": "#B5D5FF",1993+ "white": "#E6E6E6",1994+ "yellow": "#857E39",1995+ "meta": {1996+ "isDark": false,1997+ "credits": null1998+ }1999+ },2000+ {2001+ "background": "#010C18",2002+ "black": "#0B3B61",2003+ "blue": "#1376F9",2004+ "brightBlack": "#63686D",2005+ "brightBlue": "#388EFF",2006+ "brightCyan": "#FF6AD7",2007+ "brightGreen": "#74FFD8",2008+ "brightMagenta": "#AE81FF",2009+ "brightRed": "#FF54B0",2010+ "brightWhite": "#60FBBF",2011+ "brightYellow": "#FCF5AE",2012+ "cursor": "#38FF9D",2013+ "cyan": "#FF5ED4",2014+ "foreground": "#ECDEF4",2015+ "green": "#52FFD0",2016+ "name": "coolnight",2017+ "magenta": "#C792EA",2018+ "red": "#FF3A3A",2019+ "selection": "#38FF9C",2020+ "white": "#16FDA2",2021+ "yellow": "#FFF383",2022+ "meta": {2023+ "isDark": true,2024+ "credits": null2025+ }2026+ },2027+ {2028+ "name": "CrayonPonyFish",2029+ "black": "#2b1b1d",2030+ "red": "#91002b",2031+ "green": "#579524",2032+ "yellow": "#ab311b",2033+ "blue": "#8c87b0",2034+ "magenta": "#692f50",2035+ "cyan": "#e8a866",2036+ "white": "#68525a",2037+ "brightBlack": "#3d2b2e",2038+ "brightRed": "#c5255d",2039+ "brightGreen": "#8dff57",2040+ "brightYellow": "#c8381d",2041+ "brightBlue": "#cfc9ff",2042+ "brightMagenta": "#fc6cba",2043+ "brightCyan": "#ffceaf",2044+ "brightWhite": "#b0949d",2045+ "background": "#150707",2046+ "foreground": "#68525a",2047+ "cursor": "#68525a",2048+ "selection": "#2b1b1d",2049+ "meta": {2050+ "isDark": true,2051+ "credits": [2052+ {2053+ "name": "zdj",2054+ "link": "https://github.com/zdj/themes/tree/master/iterm2"2055+ }2056+ ]2057+ }2058+ },2059+ {2060+ "background": "#1E1423",2061+ "black": "#0A0A14",2062+ "blue": "#5050E6",2063+ "brightBlack": "#363B54",2064+ "brightBlue": "#7AA2F7",2065+ "brightCyan": "#7DCFFF",2066+ "brightGreen": "#41A6B5",2067+ "brightMagenta": "#BB9AF7",2068+ "brightRed": "#F7768E",2069+ "brightWhite": "#ACB0D0",2070+ "brightYellow": "#E0AF68",2071+ "cursor": "#2DB9E6",2072+ "cyan": "#2DB9E6",2073+ "foreground": "#737DA0",2074+ "green": "#32CD87",2075+ "name": "Crystal Violet",2076+ "magenta": "#6E14EB",2077+ "red": "#E63232",2078+ "selection": "#5050E6",2079+ "white": "#D2D2D2",2080+ "yellow": "#EBA041",2081+ "meta": {2082+ "isDark": true,2083+ "credits": null2084+ }2085+ },2086+ {2087+ "background": "#161C2B",2088+ "black": "#141D2B",2089+ "blue": "#2E6CFF",2090+ "brightBlack": "#767676",2091+ "brightBlue": "#5CB2FF",2092+ "brightCyan": "#5CECC6",2093+ "brightGreen": "#C5F467",2094+ "brightMagenta": "#CF8DFB",2095+ "brightRed": "#FF8484",2096+ "brightWhite": "#D5DAFF",2097+ "brightYellow": "#FFCC5C",2098+ "cursor": "#C5D1EB",2099+ "cyan": "#2DE2B2",2100+ "foreground": "#A4B1CD",2101+ "green": "#9FEF00",2102+ "name": "Cyber Cube",2103+ "magenta": "#9F00FF",2104+ "red": "#FF3E3E",2105+ "selection": "#C5D1EB",2106+ "white": "#D5E0FF",2107+ "yellow": "#FFAF00",2108+ "meta": {2109+ "isDark": true,2110+ "credits": null2111+ }2112+ },2113+ {2114+ "name": "Cyberdyne",2115+ "black": "#080808",2116+ "red": "#ff8373",2117+ "green": "#00c172",2118+ "yellow": "#d2a700",2119+ "blue": "#0071cf",2120+ "magenta": "#ff90fe",2121+ "cyan": "#6bffdd",2122+ "white": "#f1f1f1",2123+ "brightBlack": "#2e2e2e",2124+ "brightRed": "#ffc4be",2125+ "brightGreen": "#d6fcba",2126+ "brightYellow": "#fffed5",2127+ "brightBlue": "#c2e3ff",2128+ "brightMagenta": "#ffb2fe",2129+ "brightCyan": "#e6e7fe",2130+ "brightWhite": "#ffffff",2131+ "background": "#151144",2132+ "foreground": "#00ff92",2133+ "cursor": "#00ff9c",2134+ "selection": "#454d96",2135+ "meta": {2136+ "isDark": true,2137+ "credits": [2138+ {2139+ "name": "ReagentX",2140+ "link": "https://github.com/ReagentX"2141+ }2142+ ]2143+ }2144+ },2145+ {2146+ "name": "cyberpunk",2147+ "black": "#000000",2148+ "red": "#ff7092",2149+ "green": "#00fbac",2150+ "yellow": "#fffa6a",2151+ "blue": "#00bfff",2152+ "magenta": "#df95ff",2153+ "cyan": "#86cbfe",2154+ "white": "#ffffff",2155+ "brightBlack": "#000000",2156+ "brightRed": "#ff8aa4",2157+ "brightGreen": "#21f6bc",2158+ "brightYellow": "#fff787",2159+ "brightBlue": "#1bccfd",2160+ "brightMagenta": "#e6aefe",2161+ "brightCyan": "#99d6fc",2162+ "brightWhite": "#ffffff",2163+ "background": "#332a57",2164+ "foreground": "#e5e5e5",2165+ "cursor": "#21f6bc",2166+ "selection": "#c1deff",2167+ "meta": {2168+ "isDark": true,2169+ "credits": [2170+ {2171+ "name": "Murderlon",2172+ "link": "https://github.com/Murderlon/cyberpunk-iterm"2173+ }2174+ ]2175+ }2176+ },2177+ {2178+ "name": "CyberPunk2077",2179+ "background": "#272932",2180+ "black": "#272932",2181+ "blue": "#9381FF",2182+ "brightBlack": "#7b8097",2183+ "brightBlue": "#37EBF3",2184+ "brightCyan": "#37EBF3",2185+ "brightGreen": "#40FFE9",2186+ "brightMagenta": "#CB1DCD",2187+ "brightRed": "#C71515",2188+ "brightWhite": "#C1DEFF",2189+ "brightYellow": "#fff955",2190+ "cursor": "#FDF500",2191+ "cyan": "#00D0DB",2192+ "foreground": "#E455AE",2193+ "green": "#1AC5B0",2194+ "magenta": "#742D8B",2195+ "red": "#710000",2196+ "selection": "#742D8B",2197+ "white": "#D1C5C0",2198+ "yellow": "#FDF500",2199+ "meta": {2200+ "isDark": true,2201+ "credits": null2202+ }2203+ },2204+ {2205+ "name": "Dark Pastel",2206+ "black": "#000000",2207+ "red": "#ff5555",2208+ "green": "#55ff55",2209+ "yellow": "#ffff55",2210+ "blue": "#5555ff",2211+ "magenta": "#ff55ff",2212+ "cyan": "#55ffff",2213+ "white": "#bbbbbb",2214+ "brightBlack": "#555555",2215+ "brightRed": "#ff5555",2216+ "brightGreen": "#55ff55",2217+ "brightYellow": "#ffff55",2218+ "brightBlue": "#5555ff",2219+ "brightMagenta": "#ff55ff",2220+ "brightCyan": "#55ffff",2221+ "brightWhite": "#ffffff",2222+ "background": "#000000",2223+ "foreground": "#ffffff",2224+ "cursor": "#bbbbbb",2225+ "selection": "#b5d5ff",2226+ "meta": {2227+ "isDark": true,2228+ "credits": null2229+ }2230+ },2231+ {2232+ "name": "Dark+",2233+ "black": "#000000",2234+ "red": "#cd3131",2235+ "green": "#0dbc79",2236+ "yellow": "#e5e510",2237+ "blue": "#2472c8",2238+ "magenta": "#bc3fbc",2239+ "cyan": "#11a8cd",2240+ "white": "#e5e5e5",2241+ "brightBlack": "#666666",2242+ "brightRed": "#f14c4c",2243+ "brightGreen": "#23d18b",2244+ "brightYellow": "#f5f543",2245+ "brightBlue": "#3b8eea",2246+ "brightMagenta": "#d670d6",2247+ "brightCyan": "#29b8db",2248+ "brightWhite": "#e5e5e5",2249+ "background": "#1e1e1e",2250+ "foreground": "#cccccc",2251+ "cursor": "#ffffff",2252+ "selection": "#3a3d41",2253+ "meta": {2254+ "isDark": true,2255+ "credits": null2256+ }2257+ },2258+ {2259+ "name": "darkermatrix",2260+ "black": "#091013",2261+ "red": "#002e18",2262+ "green": "#6fa64c",2263+ "yellow": "#595900",2264+ "blue": "#00cb6b",2265+ "magenta": "#412a4d",2266+ "cyan": "#125459",2267+ "white": "#002e19",2268+ "brightBlack": "#333333",2269+ "brightRed": "#00381d",2270+ "brightGreen": "#90d762",2271+ "brightYellow": "#e2e500",2272+ "brightBlue": "#00ff87",2273+ "brightMagenta": "#412a4d",2274+ "brightCyan": "#176c73",2275+ "brightWhite": "#00381e",2276+ "background": "#070c0e",2277+ "foreground": "#28380d",2278+ "cursor": "#373a26",2279+ "selection": "#0f191c",2280+ "meta": {2281+ "isDark": true,2282+ "credits": null2283+ }2284+ },2285+ {2286+ "name": "darkmatrix",2287+ "black": "#091013",2288+ "red": "#006536",2289+ "green": "#6fa64c",2290+ "yellow": "#7e8000",2291+ "blue": "#2c9a84",2292+ "magenta": "#452d53",2293+ "cyan": "#114d53",2294+ "white": "#006536",2295+ "brightBlack": "#333333",2296+ "brightRed": "#00733d",2297+ "brightGreen": "#90d762",2298+ "brightYellow": "#e2e500",2299+ "brightBlue": "#46d8b8",2300+ "brightMagenta": "#4a3059",2301+ "brightCyan": "#12545a",2302+ "brightWhite": "#006536",2303+ "background": "#070c0e",2304+ "foreground": "#3e5715",2305+ "cursor": "#9fa86e",2306+ "selection": "#0f191c",2307+ "meta": {2308+ "isDark": true,2309+ "credits": null2310+ }2311+ },2312+ {2313+ "name": "Darkside",2314+ "black": "#000000",2315+ "red": "#e8341c",2316+ "green": "#68c256",2317+ "yellow": "#f2d42c",2318+ "blue": "#1c98e8",2319+ "magenta": "#8e69c9",2320+ "cyan": "#1c98e8",2321+ "white": "#bababa",2322+ "brightBlack": "#000000",2323+ "brightRed": "#e05a4f",2324+ "brightGreen": "#77b869",2325+ "brightYellow": "#efd64b",2326+ "brightBlue": "#387cd3",2327+ "brightMagenta": "#957bbe",2328+ "brightCyan": "#3d97e2",2329+ "brightWhite": "#bababa",2330+ "background": "#222324",2331+ "foreground": "#bababa",2332+ "cursor": "#bbbbbb",2333+ "selection": "#303333",2334+ "meta": {2335+ "isDark": true,2336+ "credits": [2337+ {2338+ "name": "bahlo",2339+ "link": "https://github.com/bahlo/iterm-colors"2340+ }2341+ ]2342+ }2343+ },2344+ {2345+ "name": "deep",2346+ "black": "#000000",2347+ "red": "#d70005",2348+ "green": "#1cd915",2349+ "yellow": "#d9bd26",2350+ "blue": "#5665ff",2351+ "magenta": "#b052da",2352+ "cyan": "#50d2da",2353+ "white": "#e0e0e0",2354+ "brightBlack": "#535353",2355+ "brightRed": "#fb0007",2356+ "brightGreen": "#22ff18",2357+ "brightYellow": "#fedc2b",2358+ "brightBlue": "#9fa9ff",2359+ "brightMagenta": "#e09aff",2360+ "brightCyan": "#8df9ff",2361+ "brightWhite": "#ffffff",2362+ "background": "#090909",2363+ "foreground": "#cdcdcd",2364+ "cursor": "#d0d0d0",2365+ "selection": "#780002",2366+ "meta": {2367+ "isDark": true,2368+ "credits": [2369+ {2370+ "name": "ADoyle",2371+ "link": "https://github.com/adoyle-h"2372+ }2373+ ]2374+ }2375+ },2376+ {2377+ "name": "Desert",2378+ "black": "#4d4d4d",2379+ "red": "#ff2b2b",2380+ "green": "#98fb98",2381+ "yellow": "#f0e68c",2382+ "blue": "#cd853f",2383+ "magenta": "#ffdead",2384+ "cyan": "#ffa0a0",2385+ "white": "#f5deb3",2386+ "brightBlack": "#555555",2387+ "brightRed": "#ff5555",2388+ "brightGreen": "#55ff55",2389+ "brightYellow": "#ffff55",2390+ "brightBlue": "#87ceff",2391+ "brightMagenta": "#ff55ff",2392+ "brightCyan": "#ffd700",2393+ "brightWhite": "#ffffff",2394+ "background": "#333333",2395+ "foreground": "#ffffff",2396+ "cursor": "#00ff00",2397+ "selection": "#b5d5ff",2398+ "meta": {2399+ "isDark": true,2400+ "credits": null2401+ }2402+ },2403+ {2404+ "name": "DimmedMonokai",2405+ "black": "#3a3d43",2406+ "red": "#be3f48",2407+ "green": "#879a3b",2408+ "yellow": "#c5a635",2409+ "blue": "#4f76a1",2410+ "magenta": "#855c8d",2411+ "cyan": "#578fa4",2412+ "white": "#b9bcba",2413+ "brightBlack": "#888987",2414+ "brightRed": "#fb001f",2415+ "brightGreen": "#0f722f",2416+ "brightYellow": "#c47033",2417+ "brightBlue": "#186de3",2418+ "brightMagenta": "#fb0067",2419+ "brightCyan": "#2e706d",2420+ "brightWhite": "#fdffb9",2421+ "background": "#1f1f1f",2422+ "foreground": "#b9bcba",2423+ "cursor": "#f83e19",2424+ "selection": "#2a2d32",2425+ "meta": {2426+ "isDark": true,2427+ "credits": [2428+ {2429+ "name": "zdj",2430+ "link": "https://github.com/zdj/themes/tree/master/iterm2"2431+ }2432+ ]2433+ }2434+ },2435+ {2436+ "name": "Django",2437+ "black": "#000000",2438+ "red": "#fd6209",2439+ "green": "#41a83e",2440+ "yellow": "#ffe862",2441+ "blue": "#245032",2442+ "magenta": "#f8f8f8",2443+ "cyan": "#9df39f",2444+ "white": "#ffffff",2445+ "brightBlack": "#323232",2446+ "brightRed": "#ff943b",2447+ "brightGreen": "#73da70",2448+ "brightYellow": "#ffff94",2449+ "brightBlue": "#568264",2450+ "brightMagenta": "#ffffff",2451+ "brightCyan": "#cfffd1",2452+ "brightWhite": "#ffffff",2453+ "background": "#0b2f20",2454+ "foreground": "#f8f8f8",2455+ "cursor": "#336442",2456+ "selection": "#245032",2457+ "meta": {2458+ "isDark": true,2459+ "credits": [2460+ {2461+ "name": "Jannis Leidel",2462+ "link": "https://code.djangoproject.com/wiki/TextMate"2463+ },2464+ {2465+ "name": "threespot.com",2466+ "link": "https://threespot.com"2467+ }2468+ ]2469+ }2470+ },2471+ {2472+ "name": "DjangoRebornAgain",2473+ "black": "#000000",2474+ "red": "#fd6209",2475+ "green": "#41a83e",2476+ "yellow": "#ffe862",2477+ "blue": "#245032",2478+ "magenta": "#f8f8f8",2479+ "cyan": "#9df39f",2480+ "white": "#ffffff",2481+ "brightBlack": "#323232",2482+ "brightRed": "#ff943b",2483+ "brightGreen": "#73da70",2484+ "brightYellow": "#ffff94",2485+ "brightBlue": "#568264",2486+ "brightMagenta": "#ffffff",2487+ "brightCyan": "#cfffd1",2488+ "brightWhite": "#ffffff",2489+ "background": "#051f14",2490+ "foreground": "#dadedc",2491+ "cursor": "#ffcc00",2492+ "selection": "#203727",2493+ "meta": {2494+ "isDark": true,2495+ "credits": [2496+ {2497+ "name": "christopherscott",2498+ "link": "https://github.com/christopherscott/django-reborn"2499+ },2500+ {2501+ "name": "Jannis Leidel",2502+ "link": "https://code.djangoproject.com/wiki/TextMate"2503+ }2504+ ]2505+ }2506+ },2507+ {2508+ "name": "DjangoSmooth",2509+ "black": "#000000",2510+ "red": "#fd6209",2511+ "green": "#41a83e",2512+ "yellow": "#ffe862",2513+ "blue": "#989898",2514+ "magenta": "#f8f8f8",2515+ "cyan": "#9df39f",2516+ "white": "#e8e8e7",2517+ "brightBlack": "#323232",2518+ "brightRed": "#ff943b",2519+ "brightGreen": "#73da70",2520+ "brightYellow": "#ffff94",2521+ "brightBlue": "#cacaca",2522+ "brightMagenta": "#ffffff",2523+ "brightCyan": "#cfffd1",2524+ "brightWhite": "#ffffff",2525+ "background": "#245032",2526+ "foreground": "#f8f8f8",2527+ "cursor": "#336442",2528+ "selection": "#336442",2529+ "meta": {2530+ "isDark": true,2531+ "credits": [2532+ {2533+ "name": "Jannis Leidel",2534+ "link": "https://code.djangoproject.com/wiki/TextMate"2535+ },2536+ {2537+ "name": "threespot.com",2538+ "link": "https://threespot.com"2539+ }2540+ ]2541+ }2542+ },2543+ {2544+ "name": "Doom Peacock",2545+ "black": "#1c1f24",2546+ "red": "#cb4b16",2547+ "green": "#26a6a6",2548+ "yellow": "#bcd42a",2549+ "blue": "#2a6cc6",2550+ "magenta": "#a9a1e1",2551+ "cyan": "#5699af",2552+ "white": "#ede0ce",2553+ "brightBlack": "#2b2a27",2554+ "brightRed": "#ff5d38",2555+ "brightGreen": "#98be65",2556+ "brightYellow": "#e6f972",2557+ "brightBlue": "#51afef",2558+ "brightMagenta": "#c678dd",2559+ "brightCyan": "#46d9ff",2560+ "brightWhite": "#dfdfdf",2561+ "background": "#2b2a27",2562+ "foreground": "#ede0ce",2563+ "cursor": "#9c9c9d",2564+ "selection": "#a60033",2565+ "meta": {2566+ "isDark": true,2567+ "credits": [2568+ {2569+ "name": "Emacs Doom Peacock theme",2570+ "link": "https://github.com/hlissner/emacs-doom-themes"2571+ }2572+ ]2573+ }2574+ },2575+ {2576+ "name": "DoomOne",2577+ "black": "#000000",2578+ "red": "#ff6c6b",2579+ "green": "#98be65",2580+ "yellow": "#ecbe7b",2581+ "blue": "#a9a1e1",2582+ "magenta": "#c678dd",2583+ "cyan": "#51afef",2584+ "white": "#bbc2cf",2585+ "brightBlack": "#000000",2586+ "brightRed": "#ff6655",2587+ "brightGreen": "#99bb66",2588+ "brightYellow": "#ecbe7b",2589+ "brightBlue": "#a9a1e1",2590+ "brightMagenta": "#c678dd",2591+ "brightCyan": "#51afef",2592+ "brightWhite": "#bfbfbf",2593+ "background": "#282c34",2594+ "foreground": "#bbc2cf",2595+ "cursor": "#51afef",2596+ "selection": "#42444b",2597+ "meta": {2598+ "isDark": true,2599+ "credits": [2600+ {2601+ "name": "Emacs Doom default theme",2602+ "link": "https://github.com/hlissner/emacs-doom-themes"2603+ }2604+ ]2605+ }2606+ },2607+ {2608+ "name": "DotGov",2609+ "black": "#191919",2610+ "red": "#bf091d",2611+ "green": "#3d9751",2612+ "yellow": "#f6bb34",2613+ "blue": "#17b2e0",2614+ "magenta": "#7830b0",2615+ "cyan": "#8bd2ed",2616+ "white": "#ffffff",2617+ "brightBlack": "#191919",2618+ "brightRed": "#bf091d",2619+ "brightGreen": "#3d9751",2620+ "brightYellow": "#f6bb34",2621+ "brightBlue": "#17b2e0",2622+ "brightMagenta": "#7830b0",2623+ "brightCyan": "#8bd2ed",2624+ "brightWhite": "#ffffff",2625+ "background": "#262c35",2626+ "foreground": "#ebebeb",2627+ "cursor": "#d9002f",2628+ "selection": "#1a4080",2629+ "meta": {2630+ "isDark": true,2631+ "credits": [2632+ {2633+ "name": "U.S. Web Design Standards",2634+ "link": "https://standards.usa.gov/visual-style/"2635+ }2636+ ]2637+ }2638+ },2639+ {2640+ "name": "Dracula",2641+ "black": "#000000",2642+ "red": "#ff5555",2643+ "green": "#50fa7b",2644+ "yellow": "#f1fa8c",2645+ "blue": "#bd93f9",2646+ "magenta": "#ff79c6",2647+ "cyan": "#8be9fd",2648+ "white": "#bbbbbb",2649+ "brightBlack": "#555555",2650+ "brightRed": "#ff5555",2651+ "brightGreen": "#50fa7b",2652+ "brightYellow": "#f1fa8c",2653+ "brightBlue": "#bd93f9",2654+ "brightMagenta": "#ff79c6",2655+ "brightCyan": "#8be9fd",2656+ "brightWhite": "#ffffff",2657+ "background": "#1e1f29",2658+ "foreground": "#f8f8f2",2659+ "cursor": "#bbbbbb",2660+ "selection": "#44475a",2661+ "meta": {2662+ "isDark": true,2663+ "credits": [2664+ {2665+ "name": "zenorocha",2666+ "link": "https://github.com/zenorocha/dracula-theme"2667+ }2668+ ]2669+ }2670+ },2671+ {2672+ "name": "Dracula+",2673+ "black": "#21222c",2674+ "red": "#ff5555",2675+ "green": "#50fa7b",2676+ "yellow": "#ffcb6b",2677+ "blue": "#82aaff",2678+ "magenta": "#c792ea",2679+ "cyan": "#8be9fd",2680+ "white": "#f8f8f2",2681+ "brightBlack": "#545454",2682+ "brightRed": "#ff6e6e",2683+ "brightGreen": "#69ff94",2684+ "brightYellow": "#ffcb6b",2685+ "brightBlue": "#d6acff",2686+ "brightMagenta": "#ff92df",2687+ "brightCyan": "#a4ffff",2688+ "brightWhite": "#f8f8f2",2689+ "background": "#212121",2690+ "foreground": "#f8f8f2",2691+ "cursor": "#eceff4",2692+ "selection": "#f8f8f2",2693+ "meta": {2694+ "isDark": true,2695+ "credits": [2696+ {2697+ "name": "zenorocha",2698+ "link": "https://github.com/zenorocha/dracula-theme"2699+ }2700+ ]2701+ }2702+ },2703+ {2704+ "name": "DraculaPlus",2705+ "background": "#212121",2706+ "black": "#21222C",2707+ "blue": "#82aaff",2708+ "cyan": "#8BE9FD",2709+ "foreground": "#F8F8F2",2710+ "green": "#50FA7B",2711+ "magenta": "#c792ea",2712+ "red": "#FF5555",2713+ "white": "#F8F8F2",2714+ "yellow": "#ffcb6b",2715+ "brightBlack": "#545454",2716+ "brightBlue": "#D6ACFF",2717+ "brightCyan": "#A4FFFF",2718+ "brightGreen": "#69FF94",2719+ "brightMagenta": "#FF92DF",2720+ "brightRed": "#FF6E6E",2721+ "brightWhite": "#F8F8F2",2722+ "brightYellow": "#ffcb6b",2723+ "meta": {2724+ "isDark": true,2725+ "credits": [2726+ {2727+ "name": "jos3s",2728+ "link": "https://github.com/jos3s"2729+ }2730+ ]2731+ }2732+ },2733+ {2734+ "name": "duckbones",2735+ "black": "#0e101a",2736+ "red": "#e03600",2737+ "green": "#5dcd97",2738+ "yellow": "#e39500",2739+ "blue": "#00a3cb",2740+ "magenta": "#795ccc",2741+ "cyan": "#00a3cb",2742+ "white": "#ebefc0",2743+ "brightBlack": "#2b2f46",2744+ "brightRed": "#ff4821",2745+ "brightGreen": "#58db9e",2746+ "brightYellow": "#f6a100",2747+ "brightBlue": "#00b4e0",2748+ "brightMagenta": "#b3a1e6",2749+ "brightCyan": "#00b4e0",2750+ "brightWhite": "#b3b692",2751+ "background": "#0e101a",2752+ "foreground": "#ebefc0",2753+ "cursor": "#edf2c2",2754+ "selection": "#37382d",2755+ "meta": {2756+ "isDark": true,2757+ "credits": null2758+ }2759+ },2760+ {2761+ "name": "Duotone Dark",2762+ "black": "#1f1d27",2763+ "red": "#d9393e",2764+ "green": "#2dcd73",2765+ "yellow": "#d9b76e",2766+ "blue": "#ffc284",2767+ "magenta": "#de8d40",2768+ "cyan": "#2488ff",2769+ "white": "#b7a1ff",2770+ "brightBlack": "#353147",2771+ "brightRed": "#d9393e",2772+ "brightGreen": "#2dcd73",2773+ "brightYellow": "#d9b76e",2774+ "brightBlue": "#ffc284",2775+ "brightMagenta": "#de8d40",2776+ "brightCyan": "#2488ff",2777+ "brightWhite": "#eae5ff",2778+ "background": "#1f1d27",2779+ "foreground": "#b7a1ff",2780+ "cursor": "#ff9839",2781+ "selection": "#353147",2782+ "meta": {2783+ "isDark": true,2784+ "credits": [2785+ {2786+ "name": "chibicode",2787+ "link": "http://chibicode.com"2788+ },2789+ {2790+ "name": "simurai",2791+ "link": "https://github.com/simurai"2792+ }2793+ ]2794+ }2795+ },2796+ {2797+ "name": "Earthsong",2798+ "black": "#121418",2799+ "red": "#c94234",2800+ "green": "#85c54c",2801+ "yellow": "#f5ae2e",2802+ "blue": "#1398b9",2803+ "magenta": "#d0633d",2804+ "cyan": "#509552",2805+ "white": "#e5c6aa",2806+ "brightBlack": "#675f54",2807+ "brightRed": "#ff645a",2808+ "brightGreen": "#98e036",2809+ "brightYellow": "#e0d561",2810+ "brightBlue": "#5fdaff",2811+ "brightMagenta": "#ff9269",2812+ "brightCyan": "#84f088",2813+ "brightWhite": "#f6f7ec",2814+ "background": "#292520",2815+ "foreground": "#e5c7a9",2816+ "cursor": "#f6f7ec",2817+ "selection": "#121418",2818+ "meta": {2819+ "isDark": true,2820+ "credits": [2821+ {2822+ "name": "zdj",2823+ "link": "https://github.com/zdj/themes/tree/master/iterm2"2824+ }2825+ ]2826+ }2827+ },2828+ {2829+ "name": "Elemental",2830+ "black": "#3c3c30",2831+ "red": "#98290f",2832+ "green": "#479a43",2833+ "yellow": "#7f7111",2834+ "blue": "#497f7d",2835+ "magenta": "#7f4e2f",2836+ "cyan": "#387f58",2837+ "white": "#807974",2838+ "brightBlack": "#555445",2839+ "brightRed": "#e0502a",2840+ "brightGreen": "#61e070",2841+ "brightYellow": "#d69927",2842+ "brightBlue": "#79d9d9",2843+ "brightMagenta": "#cd7c54",2844+ "brightCyan": "#59d599",2845+ "brightWhite": "#fff1e9",2846+ "background": "#22211d",2847+ "foreground": "#807a74",2848+ "cursor": "#facb80",2849+ "selection": "#413829",2850+ "meta": {2851+ "isDark": true,2852+ "credits": [2853+ {2854+ "name": "zdj",2855+ "link": "https://github.com/zdj/themes/tree/master/iterm2"2856+ }2857+ ]2858+ }2859+ },2860+ {2861+ "name": "Elementary",2862+ "black": "#242424",2863+ "red": "#d71c15",2864+ "green": "#5aa513",2865+ "yellow": "#fdb40c",2866+ "blue": "#063b8c",2867+ "magenta": "#e40038",2868+ "cyan": "#2595e1",2869+ "white": "#efefef",2870+ "brightBlack": "#4b4b4b",2871+ "brightRed": "#fc1c18",2872+ "brightGreen": "#6bc219",2873+ "brightYellow": "#fec80e",2874+ "brightBlue": "#0955ff",2875+ "brightMagenta": "#fb0050",2876+ "brightCyan": "#3ea8fc",2877+ "brightWhite": "#8c00ec",2878+ "background": "#181818",2879+ "foreground": "#efefef",2880+ "cursor": "#bbbbbb",2881+ "selection": "#b5d5ff",2882+ "meta": {2883+ "isDark": true,2884+ "credits": [2885+ {2886+ "name": "elementary.io",2887+ "link": "https://elementary.io/"2888+ },2889+ {2890+ "name": "987poiuytrewq",2891+ "link": "https://github.com/987poiuytrewq"2892+ }2893+ ]2894+ }2895+ },2896+ {2897+ "name": "ENCOM",2898+ "black": "#000000",2899+ "red": "#9f0000",2900+ "green": "#008b00",2901+ "yellow": "#ffd000",2902+ "blue": "#0081ff",2903+ "magenta": "#bc00ca",2904+ "cyan": "#008b8b",2905+ "white": "#bbbbbb",2906+ "brightBlack": "#555555",2907+ "brightRed": "#ff0000",2908+ "brightGreen": "#00ee00",2909+ "brightYellow": "#ffff00",2910+ "brightBlue": "#0000ff",2911+ "brightMagenta": "#ff00ff",2912+ "brightCyan": "#00cdcd",2913+ "brightWhite": "#ffffff",2914+ "background": "#000000",2915+ "foreground": "#00a595",2916+ "cursor": "#bbbbbb",2917+ "selection": "#00a48c",2918+ "meta": {2919+ "isDark": true,2920+ "credits": [2921+ {2922+ "name": "Josh Braun",2923+ "link": "http://wideaperture.net"2924+ }2925+ ]2926+ }2927+ },2928+ {2929+ "name": "Espresso",2930+ "black": "#353535",2931+ "red": "#d25252",2932+ "green": "#a5c261",2933+ "yellow": "#ffc66d",2934+ "blue": "#6c99bb",2935+ "magenta": "#d197d9",2936+ "cyan": "#bed6ff",2937+ "white": "#eeeeec",2938+ "brightBlack": "#535353",2939+ "brightRed": "#f00c0c",2940+ "brightGreen": "#c2e075",2941+ "brightYellow": "#e1e48b",2942+ "brightBlue": "#8ab7d9",2943+ "brightMagenta": "#efb5f7",2944+ "brightCyan": "#dcf4ff",2945+ "brightWhite": "#ffffff",2946+ "background": "#323232",2947+ "foreground": "#ffffff",2948+ "cursor": "#d6d6d6",2949+ "selection": "#5b5b5b",2950+ "meta": {2951+ "isDark": true,2952+ "credits": null2953+ }2954+ },2955+ {2956+ "name": "Espresso Libre",2957+ "black": "#000000",2958+ "red": "#cc0000",2959+ "green": "#1a921c",2960+ "yellow": "#f0e53a",2961+ "blue": "#0066ff",2962+ "magenta": "#c5656b",2963+ "cyan": "#06989a",2964+ "white": "#d3d7cf",2965+ "brightBlack": "#555753",2966+ "brightRed": "#ef2929",2967+ "brightGreen": "#9aff87",2968+ "brightYellow": "#fffb5c",2969+ "brightBlue": "#43a8ed",2970+ "brightMagenta": "#ff818a",2971+ "brightCyan": "#34e2e2",2972+ "brightWhite": "#eeeeec",2973+ "background": "#2a211c",2974+ "foreground": "#b8a898",2975+ "cursor": "#ffffff",2976+ "selection": "#c3dcff",2977+ "meta": {2978+ "isDark": true,2979+ "credits": [2980+ {2981+ "name": "jurgemaister",2982+ "link": "https://github.com/jurgemaister/Espresso-Libre"2983+ }2984+ ]2985+ }2986+ },2987+ {2988+ "name": "Everblush",2989+ "black": "#232a2d",2990+ "red": "#e57474",2991+ "green": "#8ccf7e",2992+ "yellow": "#e5c76b",2993+ "blue": "#67b0e8",2994+ "magenta": "#c47fd5",2995+ "cyan": "#6cbfbf",2996+ "white": "#b3b9b8",2997+ "brightBlack": "#2d3437",2998+ "brightRed": "#ef7e7e",2999+ "brightGreen": "#96d988",3000+ "brightYellow": "#f4d67a",diff truncated