mwxcol
Eine Farbpalette und die Themes, die sie auf die benutzten Werkzeuge übertragen.
Quelle der Wahrheit ist mwxcol.go — alles andere ist davon abgeleitet.
go run mwxcol.go druckt die Palette zur Sichtprüfung ins Terminal.
Palette
| Name | Hex | Dezimal | Rolle |
|---|---|---|---|
| white | #F0F0EA |
240,240,234 | normaler Text, Vordergrund |
| yellow | #F9E2AF |
249,226,175 | Änderung, Warnung, Build-Dateien |
| orange | #FAB387 |
250,179,135 | Archive, Präprozessor |
| red | #F38BA8 |
243,139,168 | Fehler, Löschung, Strings |
| green | #94E2D5 |
148,226,213 | ausführbar, neu, ok (eigentlich ein Mint/Teal) |
| blue | #B4BEFE |
180,190,254 | Verzeichnisse, Quelltext, Datum |
| pink | #F5B2F7 |
245,178,247 | Symlinks, Keywords, Treffer |
| violet | #CBA6F7 |
203,166,247 | Typen, Bilder, Sonderdateien |
| grey | #AAAABB |
170,170,187 | Sekundärtext, Kommentare |
| dark | #777788 |
119,119,136 | Attribute, deaktiviert |
| darker | #444455 |
68,68,85 | Trenner, Rahmen, Hintergrundakzent |
Die Palette enthält keine Hintergrundfarbe. Als Terminal-Hintergrund dient
#252528 (iTerm2-Profil „Default"); wo ein Theme einen Hintergrund braucht,
steht dieser Wert oder darker.
Installation auf einem neuen Rechner
git clone <repo> ~/src/mwxcol
cd ~/src/mwxcol
./install.sh --check # zeigt erst, was passieren würde
./install.sh # kopiert, sichert Vorhandenes nach .bak
exec zsh
./install.sh --link symlinkt statt zu kopieren. Das ist die bessere Variante,
wenn das Repo dauerhaft an seinem Platz bleibt: dann können installierte Datei
und Repo-Kopie nicht mehr auseinanderlaufen. --check sagt jederzeit, ob sie
es doch getan haben.
Nova muss nach der Installation einmal neu gestartet werden; das Theme steht dann unter Einstellungen > Themes > mwx.
Was wo landet
| Werkzeug | Repo | Ziel | Wie es geladen wird |
|---|---|---|---|
| eza | themes/eza/theme.yml |
~/.config/eza/theme.yml |
automatisch aus dem Config-Verzeichnis |
| joe | themes/joe/default.jcf |
~/.joe/colors/default.jcf |
Schema default, verdeckt die System-Version |
| fzf | themes/fzf/colors.zsh |
~/.config/mwxcol/fzf-colors.zsh |
source in ~/.zshrc → FZF_DEFAULT_OPTS |
| iTerm2 | themes/iterm/mwxcol.itermcolors |
~/.config/mwxcol/mwxcol.itermcolors |
einmalig importieren, siehe unten |
| Nova | themes/nova/mwx.novaextension |
~/Library/.../Nova/Extensions/org.mwx |
Nova-Extension, Theme mwx |
| Xcode | themes/xcode/mwxcol.xccolortheme |
~/Library/Developer/Xcode/UserData/FontAndColorThemes/ |
Theme mwxcol, einmal auswählen, siehe unten |
| Claude Code | themes/claude-code/mwxcol.json |
~/.claude/themes/mwxcol.json |
"theme": "custom:mwxcol" in settings.json |
Getestet mit eza 0.23.5, joe 4.6, fzf 0.70.0 (und 0.58.0), iTerm2 3.6.11, Nova, Xcode 26.6 und Claude Code 2.1.220 auf macOS.
iTerm2
Die Palette deckt die 16 ANSI-Slots nicht von sich aus ab: ein Cyan fehlt, und eigene bright-Varianten gibt es auch nicht. Die fehlenden sechs Werte sind nicht neu erfunden, sondern wörtlich aus dem Nova-Theme übernommen, das dieselbe Lücke bereits geschlossen hatte — dadurch sehen Novas Terminal und iTerm2 identisch aus. Abgeleitete Werte sind unten mit * markiert.
| Slot | Farbe | Slot | Farbe | ||
|---|---|---|---|---|---|
| 0 black | #444455 |
darker | 8 br-black | #777788 |
dark |
| 1 red | #F38BA8 |
red | 9 br-red | #F7B5C8 |
* |
| 2 green | #94E2D5 |
green | 10 br-green | #B8EAE1 |
* |
| 3 yellow | #F9E2AF |
yellow | 11 br-yellow | #FCEECB |
* |
| 4 blue | #B4BEFE |
blue | 12 br-blue | #CDD4FE |
* |
| 5 magenta | #CBA6F7 |
violet | 13 br-magenta | #F5B2F7 |
pink |
| 6 cyan | #94DAE0 |
* | 14 br-cyan | #B8E7EB |
* |
| 7 white | #AAAABB |
grey | 15 br-white | #F0F0EA |
white |
Dazu Vordergrund white, Hintergrund #252528 (unverändert), Cursor red mit
dunklem Cursor-Text, Auswahl darker, Links blue.
Import — iTerm2 hält seine Einstellungen im Speicher und schreibt sie beim Beenden zurück. Eine direkt bearbeitete Plist wäre also wieder weg; der Import muss durch die Oberfläche:
Einstellungen > Profiles > Colors > Color Presets… > Import…
~/.config/mwxcol/mwxcol.itermcolors
Danach im selben Menü mwxcol auswählen. Der Preset-Name kommt aus dem
Dateinamen. Die älteren Presets mwx und mwxdark bleiben unangetastet — sie
tragen noch die grellen Standard-ANSI-Töne und sind nicht diese Palette.
themes/iterm/preview.sh setzt die Palette per Escape-Sequenz in der laufenden
Session, ohne etwas zu speichern — zum Ansehen vor dem Import. Ein neuer Tab
hat wieder die alten Farben.
Xcode
Xcode liest jede .xccolortheme aus dem Ordner oben und zeigt sie unter dem
Dateinamen an — das Theme heißt also mwxcol, wie das iTerm2-Preset. Die
älteren Themes mwx und mwxdark bleiben unangetastet.
Auswählen: Einstellungen > Themes > mwxcol. Xcode führt hell und dunkel
getrennt (XCFontAndColorCurrentTheme bzw. …CurrentDarkTheme), das Theme
also in beiden Erscheinungsbildern wählen, wenn es überall gelten soll.
./install.sh --check liest beide Werte und sagt, was gerade aktiv ist.
Ein laufendes Xcode sieht die neue Datei erst nach einem Neustart.
Die Zuordnung folgt dem Nova-Theme, damit beide Editoren gleich aussehen:
| Xcode-Element | Farbe | Xcode-Element | Farbe | |
|---|---|---|---|---|
| Plain Text, Variablen | white | Keywords | violet | |
| Kommentare, Doc-Kommentare | dark | Strings | green | |
Doc-Schlüsselwörter, MARK: |
grey | Attribute (@State) |
green | |
| Typen und Klassen | yellow | Zahlen, Zeichen | orange | |
| Typ-Deklaration | yellow | Präprozessor, Makros | orange | |
| Funktionen, andere Deklarationen | blue | Konstanten | orange | |
| URLs | blue | Reguläre Ausdrücke | pink |
Unsichtbare Zeichen sind darker, der Cursor ist red wie im iTerm2-Preset,
die Zeile mit dem Debugger green mit 25 % Deckkraft. Marker im Scrollbalken
folgen der Palette: Fehler red, Warnung yellow, Laufzeitproblem orange,
Analyzer violet, Breakpoint blue, Diff grey.
Die Flächen sind die einzigen Werte außerhalb der Palette. Der Editor ist
#15151C — dunkler als der Terminal-Hintergrund und anders als überall sonst
hier, weil er in Xcode so eingestellt wurde; Auswahl und aktuelle Zeile sind
#20202B, die Konsole behält #252528 aus dem iTerm2-Profil und der
Quick-Help-Kasten #2E2E35 (darker mit 30 % über #252528).
Drei Dinge, die man beim Anpassen wissen muss:
Xcode unterscheidet eigene und fremde Symbole, dieses Theme nicht. Für
Klassen, Typen, Funktionen, Variablen, Konstanten und Makros gibt es jeweils
einen Schlüssel für Projekt-Symbole und einen mit .system für Symbole aus
Frameworks. Beide tragen hier denselben Wert, weil die Palette keine freien
Farbtöne mehr hat, mit denen die Unterscheidung nicht wie eine zweite Bedeutung
aussähe. Wer sie doch will, setzt die sechs .system-Schlüssel auf violet
#CBA6F7 — dann sind Framework-Symbole durchgehend violett wie in Xcodes
eigenem Dark-Theme, kollidieren aber mit den Keywords.
Schriften stehen mit im Theme, nicht nur Farben. Alle Syntax-Schlüssel
tragen HackNFM-Regular - 15.0 (Hack Nerd Font Mono), der Quick-Help-Text
.SFNS-Regular - 14.0. Andere Schrift gewünscht: die Werte in
DVTSourceTextSyntaxFonts ersetzen — Xcode erwartet den PostScript-Namen
(HackNFM-Regular), nicht den Anzeigenamen („Hack Nerd Font Mono"). Fette
Schnitte für Keywords und Deklarationen hat das Theme absichtlich nicht mehr:
Xcode ebnet sie beim nächsten Zurückschreiben ohnehin ein, siehe unten.
Wer das Theme in den Einstellungen anfasst, schreibt die Datei um. Xcode speichert dann seine eigene Fassung, und die ist nicht nur ohne Kommentare — beobachtet an Xcode 26.6 nach einer Größenänderung in der Oberfläche:
DVTFontSizeModifierverschwindet und wird in die Schriftgrößen eingerechnet,- die Schnitte werden eingeebnet,
HackNFM-Boldwird überall zu-Regular, - Schlüssel, die Xcodes eigenes Theme-Modell nicht führt, fallen heraus —
hier
xcode.syntax.markup.aside.kindundDVTDebuggerInstructionPointerColor(letzterer steht nur im Theme derSourceEditor.framework).
--check meldet die installierte Datei danach als „WEICHT AB"; wer die
Änderung behalten will, überträgt sie von Hand ins Repo, sonst überschreibt der
nächste ./install.sh sie kommentarlos (das Backup liegt als .bak daneben).
Bei --link ersetzt Xcode womöglich den Symlink durch eine echte Datei, dann
ist die Verbindung ganz aufgehoben.
Claude Code
Ab Version 2.1.220 liest Claude Code eigene Themes aus ~/.claude/themes/*.json
(mit CLAUDE_CONFIG_DIR verschiebt sich das Verzeichnis mit). Aufbau:
{ "name": "mwxcol", "base": "dark", "overrides": { "text": "#F0F0EA", … } }
base ist eines der eingebauten Themes, overrides überschreibt einzelne
Farbschlüssel davon. Erlaubt sind #RRGGBB, #RGB, rgb(r,g,b), ansi256(n)
und ansi:<name>; unbekannte Schlüssel und ungültige Werte werden still
verworfen. Ausgewählt wird das Theme über /theme oder direkt mit
"theme": "custom:mwxcol" in ~/.claude/settings.json — der Dateiname ist der
Slug. Claude Code beobachtet das Verzeichnis, Änderungen greifen sofort.
Dieses Theme setzt alle 72 Schlüssel des dark-Themes, damit keine Farbe
aus dem Original durchschlägt:
| Element | Farbe | Element | Farbe | |
|---|---|---|---|---|
| Fließtext | white | Erfolg, Plan-Modus | green | |
| Sekundärtext, inaktiv | grey | Fehler | red | |
| Prompt-Rahmen | dark | Warnung | yellow | |
| Auswahl, Flächen | darker | Claude selbst, Fast Mode | orange | |
| Rechte, Vorschläge, IDE | blue | Bash-Rahmen | pink | |
| Auto-Accept, Skills | violet |
Die Shimmer-Varianten (die hellere Farbe der Laufanimation) nehmen, wo es sie
gibt, die abgeleiteten Hellwerte aus der iTerm2-Tabelle oben — blue schimmert
also nach #CDD4FE, violet nach pink.
Die Diff-Hintergründe sind die einzigen gemischten Werte: green bzw. red
mit 30 % Deckkraft über #252528 (#465E5C / #63444E), auf Wortebene mit
50 %, für die gedimmte Fassung mit 15 %. Nachrichtenflächen sind darker mit
30 % über #252528 (#2E2E35).
Ein einfacherer Weg, der die Palette nicht braucht: das eingebaute Theme
dark-ansi nimmt die 16 ANSI-Farben des Terminals — nach dem iTerm2-Import
sind das ohnehin die Farben von hier, dann aber gerundet auf die 16 Slots.
custom:mwxcol ist genauer und gilt auch in Terminals ohne das Preset.
Fallstricke
Vier Dinge, die beim Übertragen Zeit gekostet haben und beim nächsten Mal Zeit sparen:
eza mergt über sein eingebautes Theme, es ersetzt es nicht. Wer nur
foreground setzt, erbt is_bold und is_underline aus eza's Default. Genau
so entstand die Unterstreichung bei README.md und Makefile — die stecken in
file_type: build, und dessen Default ist bold + underline. Deshalb steht im
Theme an mehreren Stellen ein explizites is_underline: false, das sonst
überflüssig aussähe. Beim Ergänzen neuer Klassen daran denken.
joes Statuszeile bleibt invers, egal was -status sagt. Das kommt aus dem
\i (= Inverse, joe(1)) am Anfang von -lmsg in ~/.joerc. Wer dort die
Palette sehen will, muss das \i entfernen — nicht am Theme drehen.
FZF_DEFAULT_OPTS hängt an, es überschreibt nicht. Die Zeile lautet
FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS'…'. Zweimal sourcen hängt den Block zweimal
an; funktional gewinnt zwar das letzte --color, sauber ist es nicht. Nach
Änderungen exec zsh statt source ~/.zshrc.
joe -term 0..15 reicht auf die Terminal-Palette durch. Das Theme lässt die
16 nummerierten Farben absichtlich auf der Identität (-term 0 0 …), damit alte
Syntax-Dateien, die Farben per Nummer angeben, die Terminal-Palette benutzen.
Das ist erst korrekt, nachdem das iTerm2-Preset importiert ist — vorher landen
solche Dateien auf den grellen Standard-ANSI-Tönen. Auf einem Rechner mit einem
anderen, nicht angepassten Terminal gilt dasselbe: dann entweder dort die
Palette setzen oder im joe-Theme -term 1 $F38BA8, -term 2 $94E2D5 usw. auf
Hex ziehen. Betroffen sind wenige Dateitypen — die mitgelieferten Syntax-Dateien
von joe 4.6 benutzen überwiegend Klassennamen statt Nummern.