Welcome Everyone
All of us have seen customizable and feature-full terminals in linux and mac,
if you want to have a cool looking & powerful terminal in windows too, Follow me!
Today I will be sharing how to install Z Shell with oh-my-zsh and also customizing it with an Awesome Theme and Plugins to bring a pimp to your terminal
This is how the Final Setup will look like : 😎
This post is divided into 4 Parts
- Setting Up Windows for ZSH installation (Cygwin & Cmder)
- Installing Oh-my-zsh
- Customizing Terminal and ZSH with Color Schemes & Themes
- Some Extras to Refer to, Or some errors that might come.
You can refer to My Github Repo, to get the files and skip this process , to get the same terminal as mine & to get some useful resources instantly too.
So Let's Begin 😋
1. Setting Up Windows
-
For Windows we have to install
a. Cygwin = Brings Unix environment in windows
b. Cmder = One of the most Feature Full and customizable command prompt
a. Cygwin Setup
- Download Cygwin
- When Running The Installer, Follow the Instructions.
- Make Sure to Let the installer install at C:\cygwin64
- For Download site Select Any URL , Click Add
- Stop at packages screen, search wget expand All under Web select latest version of it under bin of wget no need to select Source. Then Continue.
- Finish Installing and launch the Terminal.
- We are going to use Cygwin to Install Some Packages that will help to use Linux System on Windows. We will install apt-cyg which will work like apt-get and also install many other packages too like vim
- Run The following to download apt-cyg with wget. Note you can prompt to install gdb, vim or dos2unix if you want to use them or just remove them, you can install even more packages of your choice if you wish !
> wget rawgit.com/transcode-open/apt-cyg/master/apt-cyg
> install apt-cyg /bin
> apt-cyg install zsh git gdb dos2unix openssh vim [or your favorite text editor]
- If you want your home folder to be your user's folder, you need to edit cygwin64/etc/nsswitch.conf. You can do this in the text editor you just downloaded, or type
explorer /etc
to open the root directory to edit the file.- Add this line to the bottom:
db_home: windows
- Add this line to the bottom:
That's it for Cygwin , you can close the Terminal. Now let's move to the terminal we are using in this guide.
b. CMDER setup
This Might Feel a lot, but just stick with me and I will guide you through every step 😊.
In case you dont want to go through these , you can go to My Github Repo and just paste the specific files
Download and install one font from the package of Powerline Font to use in the terminal for the custom Icons. For This Guide I will be using MesloGS NF patched for powerlevel10k theme, you can find it in my github.
Download Cmder (the full Version !) it's a portable package so to install it just extract it into a folder where it can stay permanently. (Don't Paste in Program Files)
Run cmder.exe
-
Right Click the Tab Bar and open Settings, We will be tweaking some of it. You can read and make changes as you wish 👍
i. Under General>Fonts. = Select Main Console Font MesloGS NF and remove check from Alternative Font
ii. Under General>Size & Pos. = Check Snap To desktop edges
iii. Under General>Appearance. =
- You can remove Check from Show Button In tab bar and Show Search Field
- Select Hide Scroll Bar
iv. Under General>Tab bar select auto show.
v. Under General>Confirm You can switch off confirmation of creating new tab if you don't need it (I Never wanted it).
vi. Under General>Taskbar
- check Don't show ConEmu Window on taskbar &
- Auto Minimize to TSA (to not interrupt in alt+tab)
vii. IMPORTANT : Under Startup>Tasks
- Click on
+
then Rename it fromGroup xx
tocygwin:ZSH
.- Check Default Task For New Console
- Under Task you can give Location of any Icon You Wish to have (.ico file), I have given one nice icon in my github ```cmd
-icon "C:\cygwin64\Cygwin.ico"
</li>
<li>Now In the Last Command Box paste this command```cmd
C:\cygwin64\bin\mintty.exe /usr/bin/zsh --login -i -new_console:d:%USERPROFILE%
</li>
<li>Last step is Click on **General** and choose startup task from the dropdown **{cygwin:ZSH}**</li>
<li>Do the same for Admin Privileges , rename it as **{cygwin:ZSH as Admin}** and replace command with```cmd
*C:\cygwin64\bin\mintty.exe /usr/bin/zsh --login -i -new_console:d:%USERPROFILE%
</li>
</ul>
</ul>
**viii.** Under **Features>Colors** choose **Monokai** Scheme
**ix.** For the setup of shortcuts, Click on **Keys & Macro** then change the shortcuts. Here is my setup :`
Win + Esc : Minimize/Restore
Win + Down : Create New Console
Win + T : Create new console (With Dialog)
Win + N : Split: Duplicate active ‘shell’ split to bottom
Win + Right : Switch Next Console
Win + Left : Switch Previous Console
Win + Q : Close active Console
Win + E : Close all Consoles
Win + Alt + P : Show Settings
Win + Alt + Space : Show ConEmu Menu`
- To make These Work go to **Keys & Macro>Keyboard** and check **Support Special Keys**
**x.** Under **Keys & Macro>Paste** make sure Multi Lines is Checked Everywhere.
**Finally.** After **Completing** the Settings Click On **Save Settings**.
5. You now Have setup to use Cygwin in Cmder, Close the terminal and open a new one
6. Tada! you will see some differences, There You Go Running Cygwin In Cmder Successfully.
7. If a Prompt Comes type **0** to exit, we can edit the specified files later manually.
---
# 2. Setting Up Oh-my-zsh
Now let's add a manager to handle plugins, updating and themes. It's Awesome that you have reached soo far, we are very close to completion. Great Work 🤘
- Install **oh-my-zsh** the manual way, Run the lines one by one
```cmd
> git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
> cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
- Now Close the Terminal with shortcut (Win+q) or normal way, then open a new one
- If it prompts , type 0 to exit
There You Go Running ZSH on WINDOWS !
Now we are going to install an awesom theme and edit all features of zsh and cygwin you can continue if you wish to make it look like mine.
You can also visit My Github Repo to instantly paste the files and you will be good to go !
3. Customizing Cygwin & Oh-my-zsh
-
Changing Color Scheme and other Mintty settings
- Right click your terminal
- Hit options
- Change font-size and Apply the settings , this creates .minttyrc file
- Browse to Root folder of the user , open .minttyrc file and paste my settings, to change the color scheme to mine ```cmd
BoldAsFont=no
RightClickAction=paste
Font=MesloLGS NF
FontHeight=12
Term=xterm-256color
BoldAsColour=yes
ConfirmExit=no
Scrollbar=none
Transparency=medium
OpaqueWhenFocused=yes
SelectionShowSize=1BackgroundColour=14,14,14
ForegroundColour=228,228,228
CursorColour=228,228,228
Black=40,40,40
BoldBlack=107,107,107
Red=255,43,28
BoldRed=243,91,80
Green=2,192,97
BoldGreen=0,253,127
Yellow=251,188,46
BoldYellow=253,197,86
Blue=0,126,180
BoldBlue=0,179,255
Magenta=255,0,194
BoldMagenta=239,133,214
Cyan=87,208,249
BoldCyan=141,219,245
White=207,207,207
BoldWhite=255,255,255
- <h3>Changing Zsh Themes and prompts</h3>
- To install the **Powerlevel10k** theme that I am using you can run
<pre><code>
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH_CUSTOM/themes/powerlevel10k
</code></pre>
- Set `ZSH_THEME="powerlevel10k/powerlevel10k"` in `~/.zshrc`.
- Close and Open a new terminal window
- Finally Go through the setup in the prompt as you wish
- I have edited the **p10k.zsh** file, manually to make it look even more clear, the file is available in [My Github Repo](https://github.com/zinox9/zsh-windows) 😉
---
- <h3>Adding Plugins</h3>
- To install plugins just go to your root user folder, open `.zshrc` and you
will find a variable plugins. Simply add the plugins you want to install with
spaces `plugins=(git z zsh-autosuggestions)`
- **Z** = saves the locations you visit the most, so that you can access it in one shot
- **git** = brings many aliases in the command line
- **npm Trash-cli** = it is an npm package, very useful to replace rm command
- **Auto suggestions** = automatically suggests the code to type and autocomplete, has to be installed manually not internally available
1. run `git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions`
2. add `zsh-autosuggestions` in plugins variable
---
## SETUP COMPLETE 🎉
![Final Setup](https://dev-to-uploads.s3.amazonaws.com/i/eew9751y4hagz4obv9zj.png)
### There you go your Terminal has now become very powerful and awesome, it was great to share this with you all. Have Fun ! Keep Coding and Keep Exploring ! 🤘
---
## Extras
- You can checkout about all the features of oh-my-zsh on the internet , go explore
- Errors :
- on some commands oh-my-zsh ` runs less ` command with ` -R ` (repaint). You can disable this behavior by adding the following line **at the end** of your `~/.zshrc`
```cmd
unset LESS;
This is set to
-R
in~/.oh-my-zsh/lib/misc.zsh
incase there is Insecure completion-dependent directories error : run this
chmod -R 755 ~/.oh-my-zsh
Top comments (40)
Working fine on Windows Terminal and VSCode, with some issues:
1) Flutter script only recognize MINGW, so you need to set an alias in your .zshrc:
alias dart="/cygdrive/c/flutter/bin/dart.bat"
andalias flutter="/cygdrive/c/flutter/bin/flutter.bat"
.2) Git from cygwin doesn't work on flutter, so either don't install it or install git for windows and then delete (or rename) \cygwin\bin\git.exe
3) For Windows Terminal, open settings and change your prompt settings to
"commandline": "zsh --login -i"
(the default profile is {0caa0dad-35be-5f56-a8ff-afceeeaa6101})4) For VSCode, configure your terminal to cygwin:
"terminal.integrated.shell.windows": "C:\\cygwin64\\Cygwin.bat",
, then edit that batch file to set zsh as the default shell:cd /d "%~dp0bin" && zsh --login -i
And that's it... zsh working fine on both Windows Terminal and VSCode, without that trashy WSL.
how did you do it?
That's Great ! Thanks for the extra tips.
I'm uncertain why you'd go through the trouble of using cygwin/cmder when you can use WSL2+Terminal and have a native experience.
Let me help you through this , I have specific reasons for not using WSL
Reason 1 - I will have to install Full linux shell in my windows
Reason 2 - The setup and usage of WSL was not easy to understand
Conclusion I simply preferred this way , cause I found it easier and I didn't have to install full linux shell in windows for just oh-my-zsh. Though If anyone does want a full native experience they can prefer WSL way too.
I don't know if English is your first language, but that phrase is extremely condescending.
You're already doing that with Cygwin.
It's a Windows feature and then you install a distro through the Store. You're doing way more work in your post than what it takes to get it set up otherwise.
I didn't mean the phrase that way, its all cool.
Ohkay so , with the help of Cygwin I am just installing apt-cyg , to install zsh & git that's all. The other packages are user's choice. But For WSL I have to go to windows store and install Full Ubuntu Shell Package .
Yes WSL is a windows feature, and some people might find it easier to set it up for their usage, I agree with that. It's just a matter of choice , for me it was easier to Find and Do it this way , and just shared it with others.
As I said Before, If anyone wants they can prefer going WSL way, this way isn't a compulsory.
Though thanks for listing this other way too here, it can help many more people 😊🤘
What do you mean by full Linux shell? You'd have to install zsh regardless, no?
By Full Linux Shell I mean that , for the WSL way I will have to install Full Ubuntu Package (or whichever distro you prefer) just to use ZSH, in this way I am just installing apt-cyg package and then zsh that's it.
It's as simple as that and a matter of choice for the user, not a compulsory to go my way only. Just sharing what I found.
Hey, it's giving no result for
wget
. what shall I do?Let me List some things that you might have missed :
Thanks bro. I just fixed it.
Awesome ! 🤘
r a sokha....
thanks for this great article. But sadly after doing the zsh install step and quiting the cygwin terminal. When I reopen, there is no difference. no ZSH !
Hey, Arjun! How I can implement this (zsh + cmder) Terminal as default PhpStorm Terminal? I'm trying to set up command:
"cmd.exe" /k ""C:\cmder\Cmder.exe""
but it opens in separate window (not inside the PhpStorm terminal)..
Hi.
After commands
install apt-cyg /bin
and
apt-cyg install zsh git gdb dos2unix openssh vim
maybe waiting for sometime would have made it work , or else you can try the next steps and see if the commands worked properly. If the commands didn't work then you will not see the screen in cmder as I did. Good luck
Ok, I got an issue. After this step: "Do the same for Admin Privileges , rename it as {cygwin:ZSH as Admin} and replace command with:...". I launch Cmder again, it's starting mintty.exe but after gave error: "/usr/bin/zsh: Exit 126.
Failed to run '/usr/bin/zsh': No such file or directory".
zsh folder was not in archive so I created one, but error still pop out. Any suggetions or info about it?
Yeah so now its confirmed that the commands
install apt-cyg /bin
and
apt-cyg install zsh git gdb dos2unix openssh vim
did not work properly , that's why zsh is not installed yet. I think you can try to remove everything and follow the steps again. Maybe you missed a step that would have caused this problem.
Thank you for this great article and even comments on this article are very helpful.
I have a question and its kinda not relevant to this article, I've got both git and WSL set up, but the big issue with WSL is, that its not able to access the reasources that i already have on my windows for example node, python, java and so on.
But i do wanted to experience the Z-Shell without hassle of WSL and this article helped me a lot,
My question is-:
Is there a way to set up an alias command for git-bash and invoke from any directory when needed via powershell so i can use zsh directly in that directory when needed?
Sounds dumb but i want powershell to be default but i also want to set up git in a way that it can access git-bash and Z-shell from anywhere like we can do with cmd (whenever we type cmd it start working directly into powershell).
basically what i want to achieve is when i type "gsh" git bash opens up in the way cmd does when used via pwsh.
UPDATE: I found the solution on stack overflow again thanks for this article.
how i change start directory when i open in contextmeu
tried my best , but could not find a working way 😅
How to set Cmder to default terminal of VSCode bro ?
You can do it in VSCode using these commands in settings.json
replace the path to cmder with yours ,
even if you set it , it wont run as inbuilt terminal in VSCode , it is only possible to launch it externally.
Thanks bro.
It is actually possible with those lines in settings.json in VScode:
I'm still confused at the step "Do the same for Admin Privileges , rename it as {cygwin:ZSH as Admin} and replace command with
*C:\cygwin64\bin\mintty.exe /usr/bin/zsh --login -i -new_console:d:%USERPROFILE%"
Please help me