# Setting up a decent looking Windows Terminal with Oh-my-Posh that works with WSL and integrate it in VSCode and IntelliJ
This is a briefly summary of what I did to set up my Windows Terminal for Powershell on the Windows side and Zsh on the WSL(Ubuntu) side and integrate it in VSCode and IntelliJ.
       
## Powershell and Windows Terminal
Let's begin by setting up powershell and the Windows Terminal.
### Installation of required packages
#### Optional: Upgrading PowerShellGet and PackageManagement
Fell free to skip this part. I just wanted to make sure everything is up to date.
1. Run Powershell as administrator
2. Install the newest **NuGet** version
```powershell
> Install-PackageProvider Nuget -Force
```
3. Install the newest version of **PowerShellGet** and **PackageManagement**
```powershell
> Install-Module -Name PowerShellGet -Force
> Install-Module -Name PackageManagement -Force
```
4. Remove the previous versions by deleting the respective folders in the installation path. The following command will show all available powershell packages with their version and their installation path:
```powershell
> Get-Module -ListAvailable
```
#### Install Terminal-Icons
Install **Terminal-Icons** via PowerShellGet to get some nice looking icons for the `ls` output:
```powershell
> Install-Module -Name Terminal-Icons
```
#### Install posh-git
Install **posh-git** via PowerShellGet for git command autocompletion:
```powershell
> Install-Module -Name posh-git
```
#### Install Oh-my-Posh
You can easily install **Oh-my-Posh** via winget:
```powershell
> winget install JanDeDobbeleer.OhMyPosh
```
For other installation methods check out the [docs](https://ohmyposh.dev/docs/windows#install).
#### Install a Powerline Font
Install a powerline font, so that glyphs used in oh-my-posh themes are rendered correctly. [Nerdfonts](https://www.nerdfonts.com/font-downloads) has a decent selection of fonts. I am using the [Caskaydia Cove Nerd Font](https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/CascadiaCode.zip) and [Meslo Font](https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Meslo.zip) but feel free to choose what suits your needs.
### Setup
Now that we have installed all required packages we can start with the setup.
#### Oh-my-Posh Theme
You can use one of the [default themes](https://ohmyposh.dev/docs/themes) that you can install with
```powershell
> Get-PoshThemes
```
create your own theme (take a look in the [documentation](https://ohmyposh.dev/docs/config-overview)) or use my [theme](https://gist.github.com/p4ceman/a892cc9260ad2be30e909dbcb4e77a7e). Make sure to provide the path to your theme in your powershell profile:
#### Powershell Profile
Open the Powershell Profile for the current user or create one under `~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1` if it does not exist and add the following:
```powershell
# Importing Powershell Packages to the current session
Import-Module PackageManagement
Import-Module PowerShellGet
Import-Module Terminal-Icons
Import-Module posh-git
# Oh-my-posh Setup
oh-my-posh --init --shell pwsh --config "path to oh-my-posh theme" | Invoke-Expression
# Tweaked PSReadLine Colors to fit my color scheme
# Feel free to change it :)
Set-PSReadLineOption -Colors @{
Command = 'Green'
Comment = 'DarkGray'
Variable = 'Magenta'
Keyword = 'Magenta'
}
```
#### Windows Terminal Settings
Add the following json snippets to the Windows Terminal settings to mimic my settings. Of course you can change everything to your needs.
**Hint:** Do not copy the comments, cause json don't support them. I just added them for explanation purposes 🙃
```javascript
// Set powershell as default shell
{
"defaultProfile": "Enter guid of Windows Powershell to set Powershell as default shell"
}
```
```javascript
// Set default appereance
{
"profiles": {
"defaults": {
"acrylicOpacity": 0.90000000000000002,
"colorScheme": "ColorOne",
"font": {
"face": "CaskaydiaCove NF",
"size": 12,
"weight": "normal"
},
"useAcrylic": false
}
}
}
```
```javascript
// Add color scheme
{
"schemes": [
{
"background": "#282C34",
"black": "#282C34",
"blue": "#0078FF",
"brightBlack": "#5A6374",
"brightBlue": "#0078FF",
"brightCyan": "#4FB2FF",
"brightGreen": "#39FA73",
"brightPurple": "#A140FC",
"brightRed": "#ED3E4E",
"brightWhite": "#F2F2F2",
"brightYellow": "#F1F139",
"cursorColor": "#FFFFFF",
"cyan": "#4FB2FF",
"foreground": "#F2F2F2",
"green": "#39FA73",
"name": "ColorOne",
"purple": "#A140FC",
"red": "#ED3E4E",
"selectionBackground": "#FFFFFF",
"white": "#F2F2F2",
"yellow": "#F1F139"
}
]
}
```
## WSL
Now that we have set up powershell and the Windows Terminal we can set up zsh and oh-my-posh for WSL.
PS: I am using Ubuntu, but the steps should be replicatible when using other distros.
### Installation of required packages
#### Install Zsh
```shell
> sudo apt install zsh
```
#### Install Zsh Syntax Highlighting
```shell
> git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlighting
```
#### Install Oh-my-Posh
Download **Oh-my-Posh** from github:
```shell
> wget https://github.com/JanDeDobbeleer/oh-my-posh/releases/latest/download/posh-linux-amd64 -O /usr/local/bin/oh-my-posh
```
and make it executable:
```shell
> chmod +x /usr/local/bin/oh-my-posh
```
### Setup
#### Zsh Config
Create a `.zshrc` file in your homediretory and add or append the following lines in order to clone my settings. Again fell free to change everything.
```.zshrc
# Enable colors for available commands
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias diff='diff --color=auto'
alias ip='ip --color=auto'
# Oh-my-posh Setup
eval "$(oh-my-posh init zsh --config "path to oh-my-posh theme")"
# Import Zsh Syntax Highlighting
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# Adjusted Zsh syntax highlighting colors
ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=007
ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg=006
ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg=006
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=fg=008
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=fg=008
ZSH_HIGHLIGHT_STYLES[comment]=fg=008
ZSH_HIGHLIGHT_STYLES[function]=fg=006
ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=005
ZSH_HIGHLIGHT_STYLES[commandseparator]=fg=005
ZSH_HIGHLIGHT_STYLES[redirection]=fg=005
```
#### Set Zsh as the default shell
Use the following command to set Zsh as the default shell:
```shell
sudo chsh -s $(which zsh)
```
## VSCode Integration
These are the json snippets I added to my VSCode settings, so that the integrated VSCode Terminal matches with the Windows Terminal:
```javascript
// Set font
{
"terminal.integrated.fontFamily": "MesloLGM NF",
"terminal.integrated.fontSize": 14
}
```
```javascript
// Add Color Scheme
{
"workbench.colorCustomizations": {
"terminal.foreground": "#F2F2F2",
"terminal.ansiBlack": "#282C34",
"terminal.ansiBlue": "#0078FF",
"terminal.ansiCyan": "#4FB2FF",
"terminal.ansiGreen": "#39FA73",
"terminal.ansiMagenta": "#A140FC",
"terminal.ansiRed": "#ED3E4E",
"terminal.ansiWhite": "#F2F2F2",
"terminal.ansiYellow": "#F1F139",
"terminal.ansiBrightBlack": "#5A6374",
"terminal.ansiBrightBlue": "#0078FF",
"terminal.ansiBrightCyan": "#4FB2FF",
"terminal.ansiBrightGreen": "#39FA73",
"terminal.ansiBrightMagenta": "#A140FC",
"terminal.ansiBrightRed": "#ED3E4E",
"terminal.ansiBrightWhite": "#F2F2F2",
"terminal.ansiBrightYellow": "#F1F139",
"terminal.selectionBackground": "#FFFFFF",
"terminalCursor.foreground": "#F2F2F2"
}
}
```
## IntelliJ Integration
Got to `Settings > Editor > Color Scheme > Console Font` to tweak the Console Font. My settings look like this:
Now go to `Settings > Editor > Color Scheme > Console Colors` and change the colors, so that they match with your color scheme.
### Ready
That's it. You should now have a decent looking Windows Terminal that matches with the integrated VSCode and IntelliJ terminal :smiley: