Kalina CI in der Shell: Prompt-Modul und Installer #3

Merged
mm merged 2 commits from feat/shell-prompt-ci into main 2026-11-02 17:34:21 +00:00
6 changed files with 76 additions and 16 deletions
Showing only changes of commit 9e594e2f76 - Show all commits

No files matched your search

+5 -3
View File
@@ -9,11 +9,13 @@ versioniert.
- **Die CI reicht bis in die Shell.** `shell/prompt.zsh` rendert einen zweizeiligen Prompt
(`┌─ kalina ~/kalina-ci · main ✚1 ✎2 · 4.2s` / `└─ ❯`) aus denselben Werten wie
`themes/kalina-ci-dark.json`: Tinte `#0B0F14`, Knochenweiß `#F5F5EF`, Markenrot `#C1121F`
nur als Grafik, Text-Rot `#E0454F` (4,70:1), Salbei `#7FA88C` nur an Git. Ausgerollt auf
kalina, ROG, imac und Kalini 1 (Gast-VM); die Pixelprobe zeigt auf jedem Host `#0B0F14`.
nur als Grafik, Text-Rot `#E0454F` (4,70:1), Salbei `#7FA88C` nur an Git. Ausgerollt auf vier
Maschinen (Arbeitsplatz, Laptop, iMac, Gast-VM); die Pixelprobe zeigt auf jeder `#0B0F14`.
- **`shell/install.sh` richtet weitere Maschinen ohne meinen Zugriff ein.** Idempotent, sichert
jede Datei nach `.vor-kalina-ci-<stempel>`, erkennt foot, qterminal, xfce4-terminal und xterm
und prüft anschließend mit `zsh -n`, `foot --check-config` und `xrdb`-Query.
und prüft anschließend mit `zsh -n`, `foot --check-config` und `xrdb`-Query. Aufruf per
`curl … | bash` funktioniert: fehlt `prompt.zsh` neben dem Skript, holt es das Modul über die
Raw-Adresse des Repos (`KALINA_CI_RAW` überschreibt sie).
- **Vier Erkenntnisse, die das Ausrollen gekostet hat:** p10k lässt sich nicht umfärben, nur
ablösen (der dreizeilige Instant-Prompt hinterlässt beim Auskommentieren ein `fi`, danach
startet keine Shell mehr); `${PWD/#$HOME/~}` ersetzt in zsh 5.9 nichts; `COLORTERM` wird per
+31 -3
View File
@@ -1,15 +1,18 @@
# KALINA CI
Corporate Identity der KALINA als versioniertes Artefakt: eine Satzvorlage (CSS),
drei Dokumentvorlagen, die Marke als SVG, ein Stempel-Skript für fremde PDFs und eine
CLI, die alle drei Wege bedient. **Ein Dokument, das nach KALINA aussehen soll, nimmt
diese Dateien — keine nachgebauten Farben, kein selbst gezeichnetes Logo.**
drei Dokumentvorlagen, die Marke als SVG, ein Stempel-Skript für fremde PDFs, eine CLI,
die alle drei Wege bedient — und seit 1.3.0 dieselbe Farbwelt für Shell und Terminal.
**Ein Dokument, das nach KALINA aussehen soll, nimmt diese Dateien — keine nachgebauten
Farben, kein selbst gezeichnetes Logo.**
```
css/kalina-ci.css Satzvorlage: @page A4, Kopfleiste, Tabellen, Plakette, Fußlinie
templates/ report.html · page.html · bild-mit-prompt.html
assets/ kalina-mark.svg · kalina-wordmark.svg · kalina-logo-combined.svg · favicon/
scripts/stamp_existing_pdf.py fremdes PDF mit Deckblatt/Marke/Fußzeile versehen
shell/install.sh Shell-Prompt und Terminal-Palette auf einer Maschine einrichten
shell/prompt.zsh zsh-Prompt als eigenständiges Modul (kein oh-my-zsh, kein p10k)
tools/kalina-pdf CLI: build · stamp · check · tokens
tokens.json Farben, Schriften, Geometrie, Zonen (maschinenlesbar)
SKILL.md Einstiegspunkt für Agenten (Frontmatter + Regeln + Fallen)
@@ -35,6 +38,31 @@ Voraussetzungen: `weasyprint` (Layout), `pymupdf` (Messung/Raster),
Ink `#0B0F14` · Bone `#F5F5EF` · Kalina-Rot `#C1121F` · Steel `#3A4250` · Muted `#8A94A2`
Kalina-Rot hat auf Ink nur 3,09:1 Kontrast und ist deshalb **Grafik**, nicht Text. Für Text auf
Ink gilt `#E0454F` (4,70:1) — dieselbe Entscheidung wie im VS-Code-Theme und im Prompt.
## Shell und Terminal
Die CI endet nicht am Papier. `shell/` bringt denselben Satz in die Shell: zweizeiliger
Prompt, Terminal-Palette, ein Skript für beides.
```
┌─ kalina ~/kalina-ci · main ✚1 ✎2 · 4.2s
└─ ❯
```
```bash
curl -fsSLo install.sh https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell/install.sh
bash install.sh --dry-run # zeigt, was passieren würde
bash install.sh # führt es aus
```
Kein Token nötig — das Repo ist öffentlich lesbar. Das Skript ist idempotent, sichert jede
Datei nach `.vor-kalina-ci-<stempel>` und erkennt **foot**, **qterminal**, **xfce4-terminal**
und **xterm**; zsh installiert es über den vorhandenen Paketmanager. Schalter:
`--shell-only`, `--terminal-only`, `--no-chsh`. Details und die Fallen beim Ausrollen stehen in
[`shell/README.md`](shell/README.md).
## Wie Agenten das nutzen
Zwei Wege, gleicher Inhalt:
+20 -2
View File
@@ -2,8 +2,8 @@
name: kalina-ci
description: Use when a PDF, page or slide must carry the KALINA corporate identity. One CSS, one CLI, one source.
metadata:
version: "1.2.0"
stand: "2026-10-23"
version: "1.3.0"
stand: "2026-11-02"
---
# KALINA CI — Corporate Identity für Dokumente und Seiten
@@ -151,6 +151,24 @@ Bildprüfung läuft **lokal auf dem ROG**, nie in der Cloud — gleiches Ergebni
Ink `#0B0F14` · Bone `#F5F5EF` · Kalina-Rot `#C1121F` · Steel `#3A4250` · Muted `#8A94A2`
Kalina-Rot trägt auf Ink nur 3,09:1 und ist **Grafik** (Marke, Cursor, Regel), nie Text.
Text auf Ink ist `#E0454F` (4,70:1). Dieselbe Regel gilt im CSS, im VS-Code-Theme und im
Shell-Prompt — wer sie bricht, bricht die Lesbarkeit, nicht den Geschmack.
## Shell und Terminal (seit 1.3.0)
Wer eine Maschine in die CI holen soll: nicht von Hand nachbauen, sondern
```bash
curl -fsSLo install.sh https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell/install.sh
bash install.sh --dry-run && bash install.sh
```
Das Skript ist idempotent, sichert jede Datei und erkennt foot, qterminal, xfce4-terminal
sowie xterm. Die Paletten sind gemessen, nicht geraten — die drei Fallen (qtermwidget6
kennt kein Benutzerverzeichnis, xfconf überstimmt `terminalrc`, foot will `[colors-dark]`)
stehen in `shell/README.md`.
## Wenn ein anderer Agent das Design macht
Werkzeuge und Agenten, die eine Seite bauen (Bildgeneratoren, externe Design-Dienste),
+2
View File
@@ -24,6 +24,8 @@ Die CI ist eine Vorlage mit vielen Nutzern (Menschen, Hermes, Paperclip-Agenten)
`ref` und `trackingRef`, ein Update ist damit nachvollziehbar statt „irgendwann".
- **Bereits ausgelieferte PDFs** werden nicht rückwirkend geändert. Ein Neubau braucht
die Quelle (HTML) oder ein `kalina-pdf stamp` auf das alte PDF.
- **Maschinen mit Shell-Prompt:** `shell/install.sh` erneut ausführen (idempotent, sichert
jede Datei) — nicht die Dateien einzeln nachziehen, sonst laufen die Fassungen auseinander.
## Was NICHT über die CI läuft
+3 -1
View File
@@ -22,7 +22,9 @@ kein oh-my-zsh und kein powerlevel10k noetig.
## Installation auf einer neuen Maschine
```sh
git clone http://192.168.188.161:3000/mm/kalina-ci.git
# oder direkt, ohne Klon (Repo ist oeffentlich lesbar):
# curl -fsSLo install.sh https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell/install.sh
git clone https://gitea.m-m.bio/mm/kalina-ci.git
cd kalina-ci/shell
./install.sh --dry-run # zeigen, was passieren wuerde
./install.sh # ausfuehren
+15 -7
View File
@@ -22,6 +22,8 @@ TS="$(date +%Y%m%d-%H%M%S)"
CONF_DIR="$HOME/.config/kalina-ci"
PROMPT="$CONF_DIR/prompt.zsh"
SRC_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Wo das Prompt-Modul herkommt, wenn es nicht neben dem Skript liegt
RAW="${KALINA_CI_RAW:-https://gitea.m-m.bio/mm/kalina-ci/raw/branch/main/shell}"
DRY=0; DO_SHELL=1; DO_TERM=1; DO_CHSH=1
for arg in "$@"; do
@@ -102,18 +104,24 @@ do_shell() {
install_zsh || true
run mkdir -p "$CONF_DIR"
if [ -f "$PROMPT" ] && [ -f "$SRC_DIR/prompt.zsh" ]; then
backup "$PROMPT"
if [ -f "$SRC_DIR/prompt.zsh" ]; then
[ -f "$PROMPT" ] && backup "$PROMPT"
run cp -f "$SRC_DIR/prompt.zsh" "$PROMPT"
ok "prompt.zsh aus $SRC_DIR uebernommen"
elif [ -f "$SRC_DIR/prompt.zsh" ]; then
run cp -f "$SRC_DIR/prompt.zsh" "$PROMPT"
ok "prompt.zsh installiert"
elif [ -f "$PROMPT" ]; then
ok "prompt.zsh liegt bereits in $CONF_DIR"
else
warn "prompt.zsh weder neben dem Skript noch in $CONF_DIR — Shell-Teil uebersprungen"
return 1
# Aufruf per Pipe oder aus /tmp: Modul aus dem Repo holen (Repo ist oeffentlich)
if [ "$DRY" = 1 ]; then
printf ' [dry] %s/prompt.zsh nach %s laden\n' "$RAW" "$PROMPT"
elif command -v curl >/dev/null && curl -fsSL "$RAW/prompt.zsh" -o "$PROMPT.tmp"; then
mv "$PROMPT.tmp" "$PROMPT"; ok "prompt.zsh von $RAW geholt"
elif command -v wget >/dev/null && wget -qO "$PROMPT.tmp" "$RAW/prompt.zsh"; then
mv "$PROMPT.tmp" "$PROMPT"; ok "prompt.zsh von $RAW geholt"
else
warn "prompt.zsh nicht erreichbar ($RAW) — Shell-Teil uebersprungen"
return 1
fi
fi
local zshrc="$HOME/.zshrc"