zsh als default shell auf remote server
Vielleicht kennst du das. Du musst dich auf einem Remote Server anmelden, und dort ist nur die standardisierte bash
eingestellt. Auf dem Server selber hast du, da bei einem Service wie Active Directory meist rudimentäre Account Services nicht verfügbar sind, nicht die Möglichkeit deine Default Shell zu verändern. Mit etwas Glück ist allerdings zsh
vorinstalliert. Ich zeige dir, wie du die zsh als default setzen kannst.
Unter normalen Umständen meldest du dich meistens mit dem folgenden Befehl an:
$ ssh -p 443 utietze@hopper.hs-bremerhaven.de
Du kannst die mithilfe der ssh-config einen Alias setzen sowie einige andere Paramter und damit den Befehl abkürzen. Schreibe in die Datei ~/.ssh/config
Host hopper
hostname hopper.hs-bremerhaven.de
user utietze
port 443
RequestTTY yes
RemoteCommand zsh -l
Du kannst dich jetzt wunderbar einfach einloggen, sparst dir die Parametrisierung des ssh
Befehls und hast zusätzlich deine Liebslingsbash gesetzt.
$ ssh hopper
done.
Die zsh einrichten
Schön, wenn dein Remote Server die zsh
standardmäßig installiert und nutzbar hat. Nur bringt es dir ja nichts, diese im Standart Design ausgespielt wird. Da fehlen ja die besten Tools wie beispielsweise Syntax Highlighting, die Anzeige, wielange ein Befehl gedauert hat und noch viel mehr.
Befolge die anschließenden Kommandos und deine Bash sieht wie folgt aus:
Installation oh-my-zsh
mit cUrl
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
mit wget
$ sh -c "$(wget -O- https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
mit fetch
$ sh -c "$(fetch -o - https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Installation powerlevel10k
ACHTUNG: Stelle sicher, das du vorher eine entsprechende Schriftart installiert hast.
Schriften wie Nerd Fonts, Source Code Pro, Font Awesome, Powerline und manchmal auch die voreingestellte Schriftart der Konsole sollten super funktionieren.
mehr über Schriften erfahren
Wir als Entwickler sind grundsätzlich ja eher faul. Stell dir mal vor, du müsstest die gesamte zsh eigentständig konfigurieren. Das würde ja Tage dauern. Glücklicherweise gibt es die p10k. Dieses Tool bietet dir einen Autoinstaller und du kannst dir die bash wie sie dir gefallen soll zurechtkonfigurieren.
$ git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/.powerlevel10k
$ echo 'source ~/.powerlevel10k/powerlevel10k.zsh-theme' >> ~/.zshrc
$ source ~/.zshrc
Nun sollte die Konfiguration direkt starten. Sollte die Konfiguration nicht automatisch gestartet sein, starte deine Shell neu oder logge dich ein und wieder aus. Im Anschluss sollte die Konfiguration des Tools p10k
automatisch starten.
Installation zsh-plugins
Für das vollständige Bild fehlt jetzt nurnoch das ein oder anderen Plugin. Meine all time favorites hier sind: zsh-autosuggestions
und zsh-syntax-highlighting
.
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
$ git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
In deiner ~/.zshrc
für nun die beiden Plugins hinzu.
plugins=( [plugins...] zsh-syntax-highlighting zsh-autosuggestions)
Starte eine neue Terminalsession, und die Plugins sollten installiert sein.
Manchmal sind die Voreinstellungen der Farben der autosuggestion etwas merkwürdig und irreführend. Probiere hier mal folgende Farbe.
$ echo 'ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=60"' >> ~/.zshrc
Starte daraufhin unbedingt die Terminal Session neu. Wenn diese Farbe für dich nicht die passende sein, dann schau mal hier vorbei: zsh autosuggestions
Done.
GIT Config
GIT ist toll, aber manchmal etwas langwierig zu nutzen. Erweitere deine ~/.gitconfig
um die folgende Liste:
[core]
editor = vim
quotepath = false
[alias]
co = checkout
p = pull
s = status -suno
sa = status -s
b = branch
l = log --pretty=oneline -n 20 --graph --abbrev-commit
la = log --oneline --graph --decorate --branches --remotes --tags
ll = log --oneline --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %an: %s %Cgreen(%cr)%Creset' --decorate --all
lf = diff-tree --no-commit-id --name-only -r --diff-filter=ACMRT
dc = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
bc = branch --contains
conflicts = diff --name-only --diff-filter=U
d = difftool
c = commit
ds = diff --staged
a = add
u = remote update --prune
drb = push origin --delete
[push]
default = current
[merge]
tool = vimdiff
conflictstyle = diff3