Die kurze Antwort: Ja. Und zwar deutlich. Dabei gibt es jede Menge alte Gewohnheiten über Bord zu werfen. Meine Lösung besteht aus einem radikalen Schnitt. Zurück zu einer minimalen .zshrc und Starship als Prompt. Das ist ein in Rust geschriebener, extrem flotter Prompt. Er liefert mir Kontext zum Git-Status, Ausführungszeiten oder aktiven Environments (wie uv), ohne dass das Terminal beim Rendern blockiert.
Auf die ganzen Aliases für Git, die mir Oh-my-Zsh (OMZ) installiert hat, wollte ich indes nicht verzichten. Aber die kann ich mir auch separat holen:
source .oh-my-zsh/plugins/git/git.plugin.zshDas sudo-Plugin von OMZ ist schnell nachgebaut:
sudo-command-line() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != sudo\ * ]] && LBUFFER="sudo $LBUFFER"
}
zle -N sudo-command-line
bindkey '\e\e' sudo-command-lineMit einem zweimaligen Druck auf ESC wird die letzte Befehlszeile wiederholt und sudo vorangestellt.
Shell Agenten
Ein weiterer Skriptverhau, den ich mir über die Jahre eingebrockt hatte, betraf den SSH-Agenten. Früher musste ich nach jedem Login manuell einen Alias sshagent aufrufen, um den Agenten zu starten und meine Session zu entsperren. Glücklicherweise ist das heutzutage nicht mehr nötig.
Der moderne Weg überlässt das Management einfach systemd und der nativen SSH-Konfiguration. Das Setup ist in drei kurzen Schritten erledigt:
Socket starten
systemctl --user enable --now ssh-agent.socketSocket verbinden
Damit die Konsole und alle Tools (wie Git) wissen, wo sie anklopfen müssen, reicht eine einzige Zeile in der neuen, aufgeräumten .zshrc:
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"Schlüssel beim ersten Benutzen automatisch laden
Der eleganteste Teil passiert in der ~/.ssh/config. Anstatt Skripte zu schreiben, die beim Terminal-Start nach Passwörtern fragen, lassen wir den SSH-Client die Arbeit machen:
Host *
AddKeysToAgent yesBaust du das erste Mal in deiner Session eine SSH-Verbindung auf (z. B. ein git pull), fragt dich das System genau einmal nach deinem Key-Passwort. Danach liegt der entschlüsselte Key im Agenten und ist für alle weiteren Terminals transparent nutzbar.
Kleine Helfer
Um die alte Funktionalität noch aufzuwerten, nutze ich drei moderne Helfer. Sie sind ressourcenschonend, kommen meist als kompakte Binaries (oft in Go oder Rust geschrieben) daher und klinken sich nahtlos in die reine Zsh ein:
- fzf: Der Kommandozeilen-Fuzzy-Finder. Einmal installiert, übernimmt
fzfdie Tastenkombination CTRL+R und macht die Suche in der Befehlshistorie interaktiv und blitzschnell. Selbst bei zehntausenden Einträgen gibt es keine Verzögerung, und du sparst dir schwerfällige History-Plugins. - zoxide: Ein smarter Ersatz für das klassische
cd(und der moderne Nachfolger von Tools wieautojumpoderz). Zoxide lernt deine Verzeichnisgewohnheiten. Ein simplesz blogreicht aus, um von überall aus dem Dateisystem direkt in dein Hugo-Verzeichnis zu katapultieren. - direnv: Der unsichtbare Manager für projektbezogene Umgebungen. Sobald du in ein Verzeichnis wechselst, lädt
direnvautomatisch Umgebungsvariablen aus einer.envrc-Datei und entlädt sie beim Verlassen wieder. So kannst du zusätzliche Pfade oder Environment-Variablen setzen:
# .envrc
PATH_add $HOME/go/bin
export API_KEY=I5a/LU7CJeaPF1SD12Hl75nyMhnX2QuUFazit
Mit diesem Setup, das ich auch auf Github nochmal zusammengestellt habe, bin ich jetzt mit deutlich weniger Dateien deutliche schneller auf der Shell unterwegs.
Kommentare