DEV Community

Cover image for Beautify your Windows Terminal 🦄
Anup Aglawe
Anup Aglawe

Posted on • Edited on

Windows Terminal Themes Beautify your Windows Terminal 🦄

Edit - ⚠️ With the newer version of oh-my-posh, and significant changes from V2, this article is outdated. Note that this will still work perfectly fine with V2 of oh-my-posh.


The Windows Terminal is a modern, fast, efficient, powerful, and productive terminal application for users of command-line tools and shells like Command Prompt, PowerShell, and WSL.


Terminal

Lets start with windows Terminal installation -

  • Install the Windows Terminal from the Microsoft Store. This allows you to always be on the latest version when we release new builds with automatic upgrades.
    • Alternative Way (Via Chocolately) - choco install microsoft-windows-terminal

Next Step is to modify Windows Terminal settings.

Fire up your installed windows terminal, and open up its settings, which will open settings.json in your default editor.

  1. Under profiles list update the powershell profile to -


 {
       // Make changes here to the powershell.exe profile.
       "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
       "name": "Linnea",
       "commandline": "powershell.exe -NoLogo -NoExit",
       "hidden": false,
       "colorScheme": "Blue Matrix",
       "fontFace": "Cascadia Code PL",
       "fontSize": 10,
       "icon": "xxxxxxxxxxxxxxxxxxxxxx",
       "backgroundImage": "xxxxxxxxxxxxxxxxxxx",
       "backgroundImageOpacity": 0.2,
       "acrylicOpacity": 0.8,
       "useAcrylic": true,
       "startingDirectory": "Q:\\Development"
 },


Enter fullscreen mode Exit fullscreen mode

Properties - name-[ Appears as title in top bar ]
acrylicOpacity-[ its just the opacity of window ]
useAcrylic-[ to use acrylicOpacity it must be true]
icon-[ appears as favicon to window ]

(Note 1- make sure to update icon and background image to your personal liking)
(Note 2- make sure to that your defaultProfile has the guid of your powershell)

  1. Next step is to update our schemes list -

    
    
     "schemes": [
        {
            "name": "Blue Matrix",
            "black": "#101116",
            "red": "#ff5680",
            "green": "#00ff9c",
            "yellow": "#fffc58",
            "blue": "#00b0ff",
            "purple": "#d57bff",
            "cyan": "#76c1ff",
            "white": "#c7c7c7",
            "brightBlack": "#686868",
            "brightRed": "#ff6e67",
            "brightGreen": "#5ffa68",
            "brightYellow": "#fffc67",
            "brightBlue": "#6871ff",
            "brightPurple": "#d682ec",
            "brightCyan": "#60fdff",
            "brightWhite": "#ffffff",
            "background": "#1d2342",
            "foreground": "#b8ffe1"
        }
    ],
    
More themes at - [atomcorp.github.io/themes/](https://atomcorp.github.io/themes/)

That's pretty much for the windows Terminal Settings , lets move to add some cool plugins 🔥.

---

### PowerLine Setup ⚡
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/73e98cxinv28jywdxrhb.png)

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/8uejzmvkxrwkxevxohk4.png)

Edit - ⚠️ With the newer version of oh-my-posh, and significant changes from V2. this article needs update. Note that this will still work perfectly fine with V2 of oh-my-posh.

 Prerequisites - 
 - Install [Cascadia code PL](https://github.com/microsoft/cascadia-code/releases) font. (Otherwise you might some gibberish on your terminal )
 - [Git](https://git-scm.com/downloads) for windows
 - Install Posh-git and Oh-my-posh  ( use powershell )
Enter fullscreen mode Exit fullscreen mode

Install-Module posh-git -Scope CurrentUser
Install-Module oh-my-posh -Scope CurrentUser

---

####  Customize your PowerShell prompt 🔨
 - Open your PowerShell profile with `notepad $PROFILE` or the text editor of your choice. This is not your Windows Terminal profile. Your PowerShell profile is a script that runs every time PowerShell starts.
 -  If your powershell doesn't already have a profile, create one -> 
Enter fullscreen mode Exit fullscreen mode
if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path ROFILE -Force }
Enter fullscreen mode Exit fullscreen mode
- Now go ahead and add the following code to your powershell profile -
Enter fullscreen mode Exit fullscreen mode

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

More themes at - [ oh-my-posh themes](https://github.com/JanDeDobbeleer/oh-my-posh#themes)

( ⚠️  if your powershell gives module not found error ) add the following code with default module location, to the top of your Powershell Profile.
Enter fullscreen mode Exit fullscreen mode

$env:PSModulePath = $env:PSModulePath + "$([System.IO.Path]::PathSeparator)C:\Users\xxxx\Documents\WindowsPowerShell\Modules"

Still facing error - Visit [https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7)


---
### Modifying Oh-my-posh theme ( 🦄🔥🚀 Emojis )

![Emojis](https://dev-to-uploads.s3.amazonaws.com/i/eqttvii2l25877p2vytv.png)

---
Remember we set our default oh-my-posh theme to paradox, lets head over to customize it.

- Navigate to your PSmodules directory, then into oh-my-posh themes directory 
    - `Documents\WindowsPowerShell\Modules\oh-my-posh\2.0.412\Themes`

- Open Paradox file, scroll down to the bottom and update following lines -

Enter fullscreen mode Exit fullscreen mode

$sl.PromptSymbols.StartSymbol = [char]::ConvertFromUtf32(0x01F984) + [char]::ConvertFromUtf32(0x0001F525) + ' '
$sl.PromptSymbols.PromptIndicator = [char]::ConvertFromUtf32(0x01F680) +[char]::ConvertFromUtf32(0x276F)

*(This lines will add cool emojis just before your StartSymbol & PromptIndicator)*

---

### Adding custom banner to your Powershell 🏳️‍🌈

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/uwpi5z246kgy9ubu9i4a.png)
This is quite tedious task if you want to add complex images in the banner.
( There is easier way [Neofetch for windows](https://github.com/dylanaraps/neofetch), but it comes with its own lag overhead whenever you open your windows terminal )

- *Tedious but way less overhead* Method
    -  Change your powershell file to add your custom ascii art. 
    -  In my case, I changed my Profile Image to Ascii Art via [https://www.topster.net/ascii-generator/](https://www.topster.net/ascii-generator/).
    - Next problem is color support, by default powershell doesn't allow you to write multipler colored text on a single line.
    -  ( You could proceed without this ) If want the above function install Write color module.
    `Install-Module -Name PSWriteColor`
    - Now just below your $psenvmodule path add the following lines to display your customized banner .
Enter fullscreen mode Exit fullscreen mode

Write-Color -Text " /@ " -Color Cyan
Write-Color -Text " @(","@ " -Color Blue,Cyan
Write-Color -Text " @@/"," @* " -Color Blue, Cyan
Write-Color -Text " @#/"," @@* " -Color Blue, Cyan
Write-Color -Text " @@(/"," @@,, " -Color Blue, Cyan
Write-Color -Text " @%(/ @@","@@@@@@","@@@@ " -Color Blue, DarkCyan, Cyan
Write-Color -Text " @@#","#"," " -Color Blue, DarkCyan, Cyan
Write-Color -Text " @@##","#(((/","///",",,,,,@ " -Color Blue, DarkBlue, DarkCyan, Cyan
Write-Color -Text " @@%%#","##(((/","///
","****,,,,,,@ " -Color Blue, DarkBlue, DarkCyan, Cyan
Write-Color -Text "@@@@@W","@@@@@@","@@@@@@","@@@@@@@@@@@ " -Color Blue, DarkBlue, DarkCyan, Cyan
Write-Color -Text " "


*(Note - the number of colors you can choose from is somewhat limited: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta, DarkYellow, Gray, DarkGray, Blue, Green, Cyan, Red, Magenta, Yellow, and White )*

Edit 1. - Your Powershell Profile should look like this - [ pastebin.com/JAX3Ce23](pastebin.com/JAX3Ce23)

Edit 2. - Background Image source - [facets.la](facets.la)

Edit 3. - With the new version of oh-my-posh, few commands (ex- set-theme ) have been depreciated. I'm planning to update the article with the specifics, till then use their documentation for updated syntax - [Repo Link](https://github.com/JanDeDobbeleer/oh-my-posh)


----

## Credits

- [Windows Terminal Community ❤](https://github.com/microsoft/terminal) 
- [https://github.com/JanDeDobbeleer/oh-my-posh](https://github.com/JanDeDobbeleer/oh-my-posh)
- [https://github.com/dahlbyk/posh-git](https://github.com/dahlbyk/posh-git)
- [https://github.com/EvotecIT/PSWriteColor](https://github.com/EvotecIT/PSWriteColor)
- [https://github.com/atomcorp/themes](https://github.com/atomcorp/themes)
Enter fullscreen mode Exit fullscreen mode

Top comments (54)

Collapse
 
moopet profile image
Ben Sinclair

The Windows Terminal is a modern, fast, efficient, powerful, and productive terminal application

It's modern in the sense that it's relatively recent. It's not particularly modern in terms of features.

But as for fast... try to cat a long file in Windows Terminal or run a bunch of dir commands in a loop, and then try the same thing on a Mac or Linux machine. I tried a large file the other day, something that took 0.6 seconds on a Mac took 26 seconds on Windows. 26 seconds! That's not just slow, it's glacial. it's about 50 times slower. You can watch the screen scroll up like you're looking at a dir /w on a PC1512. It's not down to the individual machine's specs, or whether it's running WSL or anything, this is down to the way Terminal works.

I'm sure it'll get better. But it's definitely not fast.

Collapse
 
nikoheikkila profile image
Niko Heikkilä

I've opened a couple of large files in Windows Terminal and Vim. No performance issues on typing or scrolling whatsoever. iTerm2 on my MacBook Pro might be a bit faster.

Real benchmarks would be helpful here. Of course, the Terminal being open-source any lagging issues would be easy to verify.

Collapse
 
anupa profile image
Anup Aglawe

Agree with you ( that's the description microsoft gave ).
Let's hope it gets better.

Collapse
 
akhileshbalaji profile image
Akhilesh Balaji

Hey, this is really cool!

I have set it up, and it was working fine. However, there seems to be some issue with the PSWRITECOLOR module. If I add too many lines that haven't returned anything, the banner gets distorted:
Normal:

Too many lines:

Is there any way to fix this? Would really appreciate some help.

Thanks in advance.

Collapse
 
anupa profile image
Anup Aglawe

This is wierd. I'm not sure about it either.

I will tag you if I find the fix👍

Collapse
 
akhileshbalaji profile image
Akhilesh Balaji

It appears to be a problem with the newline character. That's what is compressing the lines above it. I disabled both of the extensions, and kept typing the command

echo "`n"

and the above characters got compressed, but this didn't happen when I didn't set a newline. Interesting...

Collapse
 
akhileshbalaji profile image
Akhilesh Balaji

I've finally figured it out. Just replace Set-Newline or any newline characters with Write-Color -Text " ". It works perfectly.

Collapse
 
gdariodh profile image
Gabriel Díaz

I love it the post but i couldn't set the emojis in the prompt, i have only themes :(

i have problem to set the paradox theme config emoji, because the file is a json and mark syntaxis error, is there someone that help me to set emoji in the prompt terminal?

Collapse
 
anupa profile image
Anup Aglawe • Edited

My guess would be that updated version of oh-my-posh is cause of the problem.
As someone reported, they have depreciated set-theme command in the latest version. You could read their docs for newer syntax - github.com/JanDeDobbeleer/oh-my-posh

Anyways, Were you able to locate and edit oh-my-posh theme configuration file to add emojis as start symbol?

Did you add the following lines in paradox theme file?
'
$sl.PromptSymbols.StartSymbol = [char]::ConvertFromUtf32(0x01F984) + [char]::ConvertFromUtf32(0x0001F525) + ' '
$sl.PromptSymbols.PromptIndicator = [char]::ConvertFromUtf32(0x01F680) +[char]::ConvertFromUtf32(0x276F)

'

Collapse
 
anupa profile image
Anup Aglawe

Looked at their documentation, transition from V2 to v3 of oh-my-posh is quite significant.

It would take some time for me to update the article.

Thread Thread
 
gdariodh profile image
Gabriel Díaz

i think same, i have the "3.147.0 oh-my-posh", i tried to follow lines in paradox theme file but the json gave me syntax error :(. Could be the file to set emojis have changed

Thread Thread
 
gdariodh profile image
Gabriel Díaz • Edited

That's paradox json screenshot

dev-to-uploads.s3.amazonaws.com/up...

Thread Thread
 
shivamchandra75 profile image
shivamchandra75

I am having the same error please share if you get the solution

Collapse
 
happytodev profile image
HappyToDev • Edited

Hello Anup, thanks for this post.
I have some trouble like on the screenshot here.
Could you telle me what's wrong ?
I precise, I already installed fonts asked in prerequisites.

dev-to-uploads.s3.amazonaws.com/i/...

Collapse
 
anupa profile image
Anup Aglawe
   "fontFace": "Cascadia Code PL",
Enter fullscreen mode Exit fullscreen mode

Did you add this in your settings.json?

Collapse
 
happytodev profile image
HappyToDev

I'm pretty sure ... not :D
Thanks, I forgot this.
It works now ! ;-)

Collapse
 
notblong profile image
Bao Long

Hi, for anyone have issue with "Set-Theme Paradox"
The term 'Set-Theme' is not recognized as a name of a cmdlet, function, script file, or executable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.

see it here: github.com/microsoft/terminal/issu...

Collapse
 
proagoa profile image
Harleq Dreamy

I do get the weird symbols on my themes. And also at the banner part I don't know where to put that in. You say $psenvmodule path is where I find it. But I don't known what that means and also you say in another comment it's in powershell profile. But I do the ctrl + , and I don't find anything of the sort.

So everything works, except I need to set theme every time I log in. I get strange symbols, I tried doing "git clone github.com/microsoft/cascadia-code..." in the powershell but nothing seems to come into effect, maybe I need to restard?
also I don't know what to do with the banner, where to find the file how to set it up.

Collapse
 
danielagiorgio profile image
Daniela Giorgio • Edited

If you want to install the font you have to download the first zip on this page and open it github.com/microsoft/cascadia-code... then open ttf folder, double click on CascadiaCodePL and click install.
The banner part is a bit confusing yep, my profile is at "C:\Users\YOURNAME\Documents\WindowsPowerShell"
I easily created it by typing "notepad $PROFILE" on Windows Powershell. Then I pasted OP's profile (pastebin.com/JAX3Ce23) inside it.

Collapse
 
emadsaber profile image
emadsaber

Thanks very much for your effort. I prefer something like Cmder

Collapse
 
sgdxa profile image
𝗗 𝗶 𝗸 𝗼

Now just below your $psenvmodule path add the following lines to display your customized banner.

where is the location?

Collapse
 
anupa profile image
Anup Aglawe

In powershell profile

Collapse
 
sgdxa profile image
𝗗 𝗶 𝗸 𝗼 • Edited

got it, thank you

Thread Thread
 
anupa profile image
Anup Aglawe

Here is link to my ps profile - pastebin.com/JAX3Ce23

Collapse
 
edarioq profile image
Edgar Quintero

FYI some of these commands are no longer supported, for example Set-Theme is deprecated

Collapse
 
shekhsaifuddin007 profile image
Shekh Saifuddin • Edited

How can get rid of this weird message?

dev-to-uploads.s3.amazonaws.com/i/...

Collapse
 
anupa profile image
Anup Aglawe

Make sure in your settings.json ...you have -noLogo flag.
"commandline": "powershell.exe -NoLogo -NoExit",

Collapse
 
shekhsaifuddin007 profile image
Shekh Saifuddin • Edited

Where are the settings.json located.? I can't find this, BTW I'm using PowerShell 7.1.0
not WindowsPowerShell

Thread Thread
 
anupa profile image
Anup Aglawe

I'm talking about windows terminal settings, which can be accessed from the terminal dropdown.

Thread Thread
 
shekhsaifuddin007 profile image
Shekh Saifuddin

yah.! it's gone from Windows Terminal 😊 but still, have on PowerShell and WindowsPowerShell 😢

Thread Thread
 
malviez profile image
malviez • Edited
  1. Right click powershell shortcut
  2. Hit property
  3. Open shortcut tab
  4. Add " -nologo" at the end of target address

The message will be gone in powershell.

Some comments may only be visible to logged-in visitors. Sign in to view all comments.