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

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 10 zum laufen bekommt. Die Beschreibungen basieren auf verschiedenen Dokumenationen, welche auch entsprechend verlinkt sind.

Voraussetzungen für WSL 2 checken

WSL 2 läuft erst ab Windows 10 Version 2004, Build 19041. Also sollte das zuerst gecheckt werden. Am einfachsten geht das wie folgt:

  1. STRG + R drücken
  2. Bei Öffnen winver eintippen
  3. OK drücken
Prüfen der Windows 10 Version

Ist euer Windows zu alt, könnt ihr es hier updaten.

WSL in Windows aktivieren

  1. START drücken
  2. mittels Suche nach „Windows-Features aktivieren oder deaktivieren“ suchen
  3. öffnen
  4. Nun nach folgenden Optionen suchen und aktivieren
    1. Plattform für virtuelle Computer
    2. Windows-Hypervisor-Plattform
    3. Windows-Subsystem für Linux
  5. Falls Windows als VM läuft zusätzlich folgendes aktivieren
    1. Container
    2. Hyper-V
  6. OK klicken
  7. Jetzt muss ggf. das System neu gestartet werden
Benötigte Windows 10 Features installieren

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.

WSL Version checken

Startet das Fluent Terminal, sollte sich direkt eine Powershell melden.

Dort könnt ihr nun mit dem folgenden Befehl checken, welche WSL umgebungen ihr habt und welche WSL Version die nutzen.

wsl -l -v

Auf WSL2 umstellen

Inzwischen sollte WSL 2 als Default Version eingerichtet werden. Falls nicht, kannst Du mit folgendem Befehl auf WSL 2 als umstellen:

wsl --set-default-version 2

Setzen der wsl Version auf wsl2

Nun die Ausgabe kontrollieren. Steht da „Informationen zu den wichtigsten Unterschieden zu WSL 2 finden Sie unter https://aka.ms/wsl2“, dann hat alles geklappt. Ansonsten ist schon hier etwas schiefgelaufen.

Linux installieren

Nun kann aus dem Microsoft Store die letzte Ubuntu LTS Version installiert werden. Auch hier könnt ihr natürlich auch andere Linux Distributionen oder Version verweden, wenn euch die mehr beliebt.

  1. Microsoft Store starten und nach „Ubuntu“ suchen. Falls ihr es nicht findet geht auch dieser Link.
  2. Installation ausführen
  3. Starten
  4. Nun werdet ihr aufgefordert einen UNIX username eingzugeben. Das wird euer Benutzer innerhalb des WSL Ubuntu sein.
  5. Im Anschluss wird nach einem Passwort gefragt, was ihr dann noch bestätigen müsst. Dieses Passwort werdet ihr oft brauchen, merkt es euch also gut.
  6. Schliesslich startet die Umgebung und ihr befindet euch in eurem neuen Home-Root des Ubuntu. Dieses ist auch aus eurem Windows Explorer erreichbar. Ihr findet es, indem ihr im in der Ubuntu bash jetzt folgendes eingebt.
  7. explorer.exe .

WSL Einstellungen prüfen

Zurück im Fluent Terminal könnt ihr nochmal mit wsl -l -v checken, ob das neu installierte Ubuntu auch die richtige WSL Version und Distribution standardmäßig verwendet. Falls ihr mehrere Versionen oder Distributionen installiert habt (oder bei euch einfach auch noch Docker läuft, wie bei mir), ist das eine mögliche Fehlerursache.

Einstellung der standard wsl Distribution

Sollte die falsche Distribution als Standard (*) ausgewählt sein, kann das mit folgendem Befehl geändert werden.

wsl --set-default [name der distro]

Nerdfonts installieren

Wenn ihr Wert auf ein paar schöne Icons 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 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 wie 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

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 Linx läuft, aber mit WSL die Funktion 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.

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.

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.