Stilvoll auf Windows 11 arbeiten mit Oh-my-Zsh in WSL2

Update: Da sich Windows 11 mehr und mehr durchsetzt und auch einige Hints nicht mehr ganz aktuell sind, hab ich diesen Artikel mal für Windows 11 aktualisiert.

Um die Vorzüge einer bash auf Windows nutzen zu können griff ich früher gern auf die Git BASH und ConsoleZ, oder zeitweise auch cmder zurück. Versuche mit Cygwin und MinGW führten mich nach anfänglicher Euphorie wegen der Filesystem-Pfad Madness am Ende immer wieder zurück zur guten alten Git BASH. Insbesondere mit Vagrant und später Docker kam es dabei unter Windows immer über kurz oder lang zu Schwierigkeiten, wenn Pfade ins Spiel kamen, sobald z.B. Daten vom lokalen Filesystem verwendet wurden, welche wiederum Pfade enthielten und nicht richtig aufgelöst wurden.

Beispiel für eine wsl2-basiertes oh-my-zshell im Fluent Terminal

Doch dann gab es diesen Lichtschimmer am Horizont. Microsoft hat angekündigt mit WSL Linux als first class citizen in Windows 10 nutzbar machen zu wollen. Meine ersten Versuche damit zeigten, dass das hier und da noch etwas holprig lief, aber schon mal grundsätzlich in die richtige Richtung weist.

Inzwischen sind wir bei WSL 2 angekommen und Windows hat zusätzlich ein neues Terminal spendiert bekommen welches u.a. Tabs unterstützt. Zeit für einen neuen Anlauf: vielleicht kommt jetzt endlich das inzwischen doch etwas in die Tage gekommene ConsoleZ weg? Spoilerwarnung: Die Antwort wird „ja“ sein.

Daher beschreibe ich im Folgenden Schritt für Schritt, wie ihr Oh My Zshell unter WSL2 im Fluent Terminal auf Windows 11 zum laufen bekommt. Die Beschreibungen basieren auf verschiedenen Dokumentationen, welche auch entsprechend verlinkt sind.

Wichtig: Falls ihr noch auf einer älteren Windows 10 Version unterwegs sein solltet, checkt bitte erst, dass die Windows-Features Microsoft-Windows-Subsystem-Linux und VirtualMachinePlatform aktiviert und WSL Standardmäßig auf WSL2 eingestellt ist. Möglicherweise braucht ihr dafür ein WSL2 Kernel Update. Wie das alles eingerichtet und installiert wird, könnt ihr hier erfahren. Danach könnt ihr hier ganz normal weiter machen.

Linux installieren

Nun kann eine Linux-Distribution installiert werden. Öffnet ein Powershell oder Commandline Fenster mit Admin-Rechten.

Nun könnt ihr die Installation mit wsl --install starten.

Auch hier könnt ihr natürlich auch andere Linux Distributionen oder Version verwenden, wenn euch die mehr beliebt. Für Einsteiger empfehle ich die letzte Ubuntu LTS Version. Diese wird auch installiert, wenn ihr keine Distribution explizit angebt. Eine Übersicht über alle verfügbaren Distributionen bekommt ihr mit:

wsl -l -o

Zugangsdaten merken

Ihr werdet im Rahmen er Installation nach einem Benutzernamen und einem Passwort gefragt, Der Benutzer den ihr hier angebt, wird euer Benutzer für euer Linux sein. Das Passwort wird das Admin-Passwort (sudo Passwort) werden. Daher unbedingt merken!

Wenn alles geklappt hat. solltet ihr euch in eurem WSL-Linux wiederfinden nach der Installation. Ihr könnt hier teilweise auch Windows-Executables aufrufen. So öffnet ihr mit explorer.exe . ein Explorer-Fenster im aktuellen Ordner. Sehr praktisch.

Alternativ können Linux-Distributionen auch über den Microsoft-Store installiert werden.

Nerdfonts installieren

Wenn ihr Wert auf ein paar schöne Icons (Ligatures) auf der Shell legt und generell gut lesbare Monofonts haben wollt, solltet ihr euch einige der nerdfonts installieren. Ich z.B. verwende die FuraMono Nerd Font.

Fluent Terminal installieren

Als nächstes im Windows Store das Fluent Terminal suchen und installieren oder direkt über die GitHub Seite gehen. Da steht auch, wie ihr via chocolatey oder scoop installieren könnt.

Natürlich könnt ihr auch einfach Windows Terminal oder eben was anderes verwenden, wenn euch das lieber ist.

Fluent Terminal konfigurieren

Nun kann man sich an die Konfiguration des Fluent Terminals machen. Auch hier stehen diverse vorinstallierte Themes zur Auswahl und weitere zum Download bereit. itermncolors und flutemcolors Dateien können dabei importiert oder auch einfach eigene Styles erstellt werden.

Auswahl und Installation von Themes

Hat man eine der Nerdfonts installiert, so müssen sie hier noch für das Terminal eingestellt werden, ansonsten kann es auch mit oh-my-zsh später zu Darstellungsproblemen mit den Icons kommen.

Konfiguration des Fonts

Im Bereich Profile kann man jetzt verschiedene Shells einrichten, die man in Verbindung mit Fluent Terminal verwenden möchte. Für unseren Fall ist insbesondere WSL wichtig und daher hier auch als Standard eingerichtet.

Konfiguration der Shells

Die Standard-Shell wird auch die sein, die beim Starten des Terminals zu erst kommt oder beim Klicken des „+“ Icons oben rechts neben dem letzten Tab kommt (Siehe unten in rot). Die anderen Shells oder eingerichtete SSH-Profile können hier via Burger-Menü (Siehe unten in gelb) gestartet werden.

Öffnen von Shells oder SSH Verbindungen

Das wsl2 Fluent Terminal ist nun bereit. Kümmern wir uns nun um oh-my-zshell.

oh-my-zsh installieren

In unserer WSL Terminal Shell lässt sich oh-my-zshell nun mit folgenden Befehlen runterladen und installieren.

sudo apt install zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Alternativ könnt ihr andere euch bekannte Wege verwenden. Ihr seid ab hier auf einem Linux! Alles was ihr Keine Scheu…

Nützliche Plugins und Themes für oh-my-zshell installieren

Eure neue Shell wird durch Plugins wie docker, Syntaxhighlighting oder Autosuggestions usw erst so richtig mächtig. Auch einige Themes bringen deutlich mehr übersicht rein, als andere. Beispielhaft demonstriere ich hier mal die Installation von zwei Plugins und dem von mir bevorzugten powerlevel10k Theme.

git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/themes/powerlevel10k

Um das neuinstallierte Theme jetzt noch zu installieren, muss es in der ~/.zshrc als Theme eingestellt werden. Dafür ersetzt ihr den Wert von ZSH_THEME wie folgt.

Die plugins müssen dann noch im plugins Bereich in der Klammer mit eingetragen werden wie im Folgenden, bevor sie funktionieren.

# Use Powerlevel10k theme
ZSH_THEME="powerlevel10k/powerlevel10k"

# Use plugins
plugins=(docker zsh-autosuggestions zsh-syntax-highlighting)

Nun die Shell am besten nochmal neu starten, dann kommt ihr in die Einrichtung des powerlevel10k Konfigurators, der euch eure Shell ganz nach Belieben einstellen lässt. Folgt dem Assistenten. Solltet ihr die Änderungen später ändern wollen, könnt ihr den Assistenten mit p10k configure einfach wieder starten.

Der powerlevel10k Installationsassistent

Im Netz gibt es allerlei weitere oh-my-zshell Plugins. Weitere vom Installationsassistenten nicht abgedeckte Optionen für powerlevel10k gibt es auf der github-Seite des Projekts.

Docker und VS Code

Als wäre die Shell jetzt nicht bereits mächtig genug, integriert sie sich auch noch gut mit Docker (seit Windows Version 2004) und VS Code. Nach der Installation von Docker Desktop sollte dieses von sich aus automatisch die WSL2 Installation erkennen und verwenden. Falls nicht ist in der Docker Doku beschrieben, wie das eingerichtet werden kann.

Docker verwendet wsl2

Selbstverständlich könnt ihr euch auch ohne Docker Desktop manuell eine docker Umgebung für eure Linux Distribution einrichten. Gute Anleitungen dafür findet ihr von Sung Kim auf medium oder Paul Knulst in seinem Blog.

Auch VS Code bietet eine starke Unterstützung für WSL2 mit der zugehörigen Remote WSL Erweiterung. Die zugehörige README hilft da bei der Installation.

VS Code läuft direkt in WSL2

Danach kann man seine Lieblings Dev-Tools im Endeffekt alle aus wsl heraus verwenden als würde man nativ auf einem Linux arbeiten. Bisher ist mir kein Tool untergekommen, dass auf Linux läuft, aber mit WSL den Dienst verweigert hätte.

Auch lässt sich die entsprechende wsl2-Shell in IntelliJ oder VS Code als Terminal einrichten (siehe oben). Hier muss ggf. nochmals eine nerdfont oder ein Theme separat eingestellt werden, damit die Darstellung passt.

Nützliche weitere Tools

Der Midnight Commander auf im Fluent Terminal

Um noch etwas nerdiger unterwegs zu sein, könnt ihr euch jetzt gerne noch den Midnight Commander als Pendant zum früher sehr populären Norton Commander installieren. Das macht das navigieren auf dem Dateisystem noch etwas bequemer.

sudo apt-get install mc

Auch können dank WSLg inzwischen auch Fensteranwendungen in ihren Ubuntu Versionen verwendet werden. Aufgrund der Pfad Problematiken (siehe weiter unten) empfiehlt sich das auch. Zum Beispiel gibt es eine spezielle WSL Version von gitkraken. Die könnt ihr mit folgendem Befehl installieren.

wget https://release.gitkraken.com/linux/gitkraken-amd64.deb
sudo apt install ./gitkraken-amd64.deb

Performance Problem mit WSL2

Ein Wort der Warnung muss ich jedoch noch hinzufügen, wenn es um die Verwendung der WSL2 Umgebung mit eurem Windows Host Dateisystem geht. Grundsätzlich habt ihr natürlich Zugriff auf euer gesamtes Windows Dateisystem aus WSL2 heraus – wie auch umgekehrt.

Eure Windows-Laufwerke sind unter /mnt/<Laufwerksbuchstabe> gemountet und können da zugegriffen werden.

Da Windows allerdings ein anderen Dateisystem zu Grunde liegt, kann es bei Mischverwendung von WSL2 und Windows zu Performanzproblemen kommen. Das passiert z.B. wenn ihr eure Codebase aus dem Windows Filesystem (z.B. aus C:\workspace\acme-prod) heraus in WSL2 (entspricht /mnt/c/workspace/acme-prod) mit VS Code bearbeitet. Für einzelne Dateien oder Executables gar kein Problem – aber bei größeren Codebases mit vielen Zugriffen durchaus wahrnehmbar.

Ich habe das Problem dadurch gelöst, das ich meinen Code auf dem Dateisystem primär halte, wo er am auch ausgeführt wird. In meinem Fall liegt er also unter ~/workspace/acme-prod unter meinem Linux-Home. Das schafft Abhilfe.

Quellen und Weiterführendes

Robert Károly Verfasst von:

Schreibe den ersten Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert