241 lines
12 KiB
Markdown
241 lines
12 KiB
Markdown
# 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
|
|
|
|
```sh
|
|
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:
|
|
|
|
* `DVTFontSizeModifier` verschwindet und wird in die Schriftgrößen eingerechnet,
|
|
* die Schnitte werden eingeebnet, `HackNFM-Bold` wird überall zu `-Regular`,
|
|
* Schlüssel, die Xcodes eigenes Theme-Modell nicht führt, fallen heraus —
|
|
hier `xcode.syntax.markup.aside.kind` und `DVTDebuggerInstructionPointerColor`
|
|
(letzterer steht nur im Theme der `SourceEditor.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:
|
|
|
|
```json
|
|
{ "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.
|