Thanks! We'll be in touch in the next 12 hours
Oops! Something went wrong while submitting the form.

How to Make Your Terminal More Productive with Z-Shell (ZSH)

Basant Soni

Cloud & DevOps

When working with servers or command-line-based applications, we spend most of our time on the command line. A good-looking and productive terminal is better in many aspects than a GUI (Graphical User Interface) environment since the command line takes less time for most use cases. Today, we'll look at some of the features that make a terminal cool and productive.

You can use the following steps on Ubuntu 20.04. if you are using a different operating system, your commands will likely differ. If you’re using Windows, you can choose between Cygwin, WSL, and Git Bash.

Prerequisites

Let’s upgrade the system and install some basic tools needed.

CODE: https://gist.github.com/velotiotech/a54bf6d18e85023ee94132a8ed207f30.js

Z-Shell (ZSH)

Zsh is an extended Bourne shell with many improvements, including some features of Bash and other shells.

Let’s install Z-Shell:

CODE: https://gist.github.com/velotiotech/7090fd09635bbba79fd975a24522f34d.js

Make it our default shell for our terminal:

CODE: https://gist.github.com/velotiotech/84cfd75a623c4498b2a0fbc1bc8986c7.js

Now restart the system and open the terminal again to be welcomed by ZSH. Unlike other shells like Bash, ZSH requires some initial configuration, so it asks for some configuration options the first time we start it and saves them in a file called .zshrc in the home directory (/home/user) where the user is the current system user.

For now, we’ll skip the manual work and get a head start with the default configuration. Press 2, and ZSH will populate the .zshrc file with some default options. We can change these later.  

The initial configuration setup can be run again as shown in the below image

Oh-My-ZSH

Oh-My-ZSH is a community-driven, open-source framework to manage your ZSH configuration. It comes with many plugins and helpers. It can be installed with one single command as below.

Installation

CODE: https://gist.github.com/velotiotech/875efd80ef464414ec01ac0156a7da3e.js

It’d take a backup of our existing .zshrc in a file zshrc.pre-oh-my-zsh, so whenever you uninstall it, the backup would be restored automatically.

Font

A good terminal needs some good fonts, we’d use Terminess nerd font to make our terminal look awesome, which can be downloaded here. Once downloaded, extract and move them to ~/.local/share/fonts to make them available for the current user or to /usr/share/fonts to be available for all the users.

CODE: https://gist.github.com/velotiotech/8a0a8aa97cea1d43d1ffe5bd178bd573.js

Once the font is installed, it will look like:

Among all the things Oh-My-ZSH provides, 2 things are community favorites, plugins, and themes.

Theme

My go-to ZSH theme is powerlevel10k because it’s flexible, provides everything out of the box, and is easy to install with one command as shown below:

CODE: https://gist.github.com/velotiotech/ed2d3e5cf41fd9230e5cfe9ec6adf284.js

To set this theme in .zshrc:

Close the terminal and start it again. Powerlevel10k will welcome you with the initial setup, go through the setup with the options you want. You can run this setup again by executing the below command:

CODE: https://gist.github.com/velotiotech/f9d84f6383bae1068a4c0a9a1bff7b9c.js

Tools and plugins we can’t live without

Plugins can be added to the plugins array in the .zshrc file. For all the plugins you want to use from the below list, add those to the plugins array in the .zshrc file like so:

ZSH-Syntax-Highlighting

This enables the highlighting of commands as you type and helps you catch syntax errors before you execute them:

As you can see, “ls” is in green but “lss” is in red.

Execute below command to install it:

CODE: https://gist.github.com/velotiotech/ba10afee976d6a4701cc07c82834759d.js

ZSH Autosuggestions

This suggests commands as you type based on your history:

The below command is how you can install it by cloning the git repo:

CODE: https://gist.github.com/velotiotech/858f0927e1372d83f60d833f2df25335.js

ZSH Completions

For some extra ZSH completion scripts, execute below command

CODE: https://gist.github.com/velotiotech/a7ef43066ce256030e388a5647cdbbff.js

autojump

It’s a faster way of navigating the file system; it works by maintaining a database of directories you visit the most. More details can be found here.

CODE: https://gist.github.com/velotiotech/c5b2bfcdcfa23af32e3eef1ad7b3f869.js

You can also use the plugin Z as an alternative if you’re not able to install autojump or for any other reason.

Internal Plugins

Some plugins come installed with oh-my-zsh, and they can be included directly in .zshrc file without any installation.

copyfile

It copies the content of a file to the clipboard.

CODE: https://gist.github.com/velotiotech/f272c9cf8733d70e446ba7756759f495.js

copypath

It copies the absolute path of the current directory to the clipboard.

copybuffer

This plugin copies the command that is currently typed in the command prompt to the clipboard. It works with the keyboard shortcut CTRL + o.

sudo

Sometimes, we forget to prefix a command with sudo, but that can be done in just a second with this plugin. When you hit the ESC key twice, it will prefix the command you’ve typed in the terminal with sudo.

web-search

This adds some aliases for searching with Google, Wikipedia, etc. For example, if you want to web-search with Google, you can execute the below command:

CODE: https://gist.github.com/velotiotech/df19bee020eafb2eb043ab13acd5faa0.js

Doing so will open this search in Google:

More details can be found here.

Remember, you’d have to add each of these plugins in the .zshrc file as well. So, in the end, this is how the plugins array in .zshrc file should look like:

CODE: https://gist.github.com/velotiotech/5ebecb5bb52f8a56f44db3f4aa89a6b5.js

You can add more plugins, like docker, heroku, kubectl, npm, jsontools, etc., if you’re a developer. There are plugins for system admins as well or for anything else you need. You can explore them here.

Enhancd

Enhancd is the next-gen method to navigate file system with cli. It works with a fuzzy finder, we’ll install it fzf for this purpose.

CODE: https://gist.github.com/velotiotech/f0f02e34f56879db90a50469ba725e22.js

Enhancd can be installed with the zplug plugin manager for ZSH, so first we’ll install zplug with the below command:

CODE: https://gist.github.com/velotiotech/ccad5106e9020eff683e53a2c5cfe5db.js

Append the following to .zshrc:

CODE: https://gist.github.com/velotiotech/75d4eeace76103da4634c50cf65104f5.js

Now close your terminal, open it again, and use zplug to install enhanced

CODE: https://gist.github.com/velotiotech/46b8a57ca736e2ae08b14e58d44eb192.js

Aliases

As a developer, I need to execute git commands many times a day, typing each command every time is too cumbersome, so we can use aliases for them. Aliases need to be added .zshrc, and here’s how we can add them.

CODE: https://gist.github.com/velotiotech/ac4239c8e970fa6727d29598d39b605b.js

You can add these anywhere in the .zshrc file.

Colorls

Another tool that makes you say wow is Colorls. This tool colorizes the output of the ls command. This is how it looks once you install it:

It works with ruby, below is how you can install both ruby and colors:

CODE: https://gist.github.com/velotiotech/a0f5ad371db9431e9687383166abeaf8.js

Now, restart your terminal and execute the command colors in your terminal to see the magic!

Bonus - We can add some aliases as well if we want the same output of Colorls when we execute the command ls. Note that we’re adding another alias for ls to make it available as well.

CODE: https://gist.github.com/velotiotech/8a720c662348b1927b048f381c12f633.js

These are the tools and plugins I can’t live without now, Let me know if I’ve missed anything.

Automation

Do you wanna repeat this process again, if let’s say, you’ve bought a new laptop and want the same setup?

You can automate all of this if your answer is no, and that’s why I’ve created Project Automator. This project does a lot more than just setting up a terminal: it works with Arch Linux as of now but you can take the parts you need and make it work with almost any *nix system you like.

Explaining how it works is beyond the scope of this article, so I’ll have to leave you guys here to explore it on your own.

Conclusion

We need to perform many tasks on our systems, and using a GUI(Graphical User Interface) tool for a task can consume a lot of your time, especially if you repeat the same task on a daily basis like converting a media stream, setting up tools on a system, etc.

Using a command-line tool can save you a lot of time and you can automate repetitive tasks with scripting. It can be a great tool for your arsenal.

Get the latest engineering blogs delivered straight to your inbox.
No spam. Only expert insights.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

Did you like the blog? If yes, we're sure you'll also like to work with the people who write them - our best-in-class engineering team.

We're looking for talented developers who are passionate about new emerging technologies. If that's you, get in touch with us.

Explore current openings

How to Make Your Terminal More Productive with Z-Shell (ZSH)

When working with servers or command-line-based applications, we spend most of our time on the command line. A good-looking and productive terminal is better in many aspects than a GUI (Graphical User Interface) environment since the command line takes less time for most use cases. Today, we'll look at some of the features that make a terminal cool and productive.

You can use the following steps on Ubuntu 20.04. if you are using a different operating system, your commands will likely differ. If you’re using Windows, you can choose between Cygwin, WSL, and Git Bash.

Prerequisites

Let’s upgrade the system and install some basic tools needed.

CODE: https://gist.github.com/velotiotech/a54bf6d18e85023ee94132a8ed207f30.js

Z-Shell (ZSH)

Zsh is an extended Bourne shell with many improvements, including some features of Bash and other shells.

Let’s install Z-Shell:

CODE: https://gist.github.com/velotiotech/7090fd09635bbba79fd975a24522f34d.js

Make it our default shell for our terminal:

CODE: https://gist.github.com/velotiotech/84cfd75a623c4498b2a0fbc1bc8986c7.js

Now restart the system and open the terminal again to be welcomed by ZSH. Unlike other shells like Bash, ZSH requires some initial configuration, so it asks for some configuration options the first time we start it and saves them in a file called .zshrc in the home directory (/home/user) where the user is the current system user.

For now, we’ll skip the manual work and get a head start with the default configuration. Press 2, and ZSH will populate the .zshrc file with some default options. We can change these later.  

The initial configuration setup can be run again as shown in the below image

Oh-My-ZSH

Oh-My-ZSH is a community-driven, open-source framework to manage your ZSH configuration. It comes with many plugins and helpers. It can be installed with one single command as below.

Installation

CODE: https://gist.github.com/velotiotech/875efd80ef464414ec01ac0156a7da3e.js

It’d take a backup of our existing .zshrc in a file zshrc.pre-oh-my-zsh, so whenever you uninstall it, the backup would be restored automatically.

Font

A good terminal needs some good fonts, we’d use Terminess nerd font to make our terminal look awesome, which can be downloaded here. Once downloaded, extract and move them to ~/.local/share/fonts to make them available for the current user or to /usr/share/fonts to be available for all the users.

CODE: https://gist.github.com/velotiotech/8a0a8aa97cea1d43d1ffe5bd178bd573.js

Once the font is installed, it will look like:

Among all the things Oh-My-ZSH provides, 2 things are community favorites, plugins, and themes.

Theme

My go-to ZSH theme is powerlevel10k because it’s flexible, provides everything out of the box, and is easy to install with one command as shown below:

CODE: https://gist.github.com/velotiotech/ed2d3e5cf41fd9230e5cfe9ec6adf284.js

To set this theme in .zshrc:

Close the terminal and start it again. Powerlevel10k will welcome you with the initial setup, go through the setup with the options you want. You can run this setup again by executing the below command:

CODE: https://gist.github.com/velotiotech/f9d84f6383bae1068a4c0a9a1bff7b9c.js

Tools and plugins we can’t live without

Plugins can be added to the plugins array in the .zshrc file. For all the plugins you want to use from the below list, add those to the plugins array in the .zshrc file like so:

ZSH-Syntax-Highlighting

This enables the highlighting of commands as you type and helps you catch syntax errors before you execute them:

As you can see, “ls” is in green but “lss” is in red.

Execute below command to install it:

CODE: https://gist.github.com/velotiotech/ba10afee976d6a4701cc07c82834759d.js

ZSH Autosuggestions

This suggests commands as you type based on your history:

The below command is how you can install it by cloning the git repo:

CODE: https://gist.github.com/velotiotech/858f0927e1372d83f60d833f2df25335.js

ZSH Completions

For some extra ZSH completion scripts, execute below command

CODE: https://gist.github.com/velotiotech/a7ef43066ce256030e388a5647cdbbff.js

autojump

It’s a faster way of navigating the file system; it works by maintaining a database of directories you visit the most. More details can be found here.

CODE: https://gist.github.com/velotiotech/c5b2bfcdcfa23af32e3eef1ad7b3f869.js

You can also use the plugin Z as an alternative if you’re not able to install autojump or for any other reason.

Internal Plugins

Some plugins come installed with oh-my-zsh, and they can be included directly in .zshrc file without any installation.

copyfile

It copies the content of a file to the clipboard.

CODE: https://gist.github.com/velotiotech/f272c9cf8733d70e446ba7756759f495.js

copypath

It copies the absolute path of the current directory to the clipboard.

copybuffer

This plugin copies the command that is currently typed in the command prompt to the clipboard. It works with the keyboard shortcut CTRL + o.

sudo

Sometimes, we forget to prefix a command with sudo, but that can be done in just a second with this plugin. When you hit the ESC key twice, it will prefix the command you’ve typed in the terminal with sudo.

web-search

This adds some aliases for searching with Google, Wikipedia, etc. For example, if you want to web-search with Google, you can execute the below command:

CODE: https://gist.github.com/velotiotech/df19bee020eafb2eb043ab13acd5faa0.js

Doing so will open this search in Google:

More details can be found here.

Remember, you’d have to add each of these plugins in the .zshrc file as well. So, in the end, this is how the plugins array in .zshrc file should look like:

CODE: https://gist.github.com/velotiotech/5ebecb5bb52f8a56f44db3f4aa89a6b5.js

You can add more plugins, like docker, heroku, kubectl, npm, jsontools, etc., if you’re a developer. There are plugins for system admins as well or for anything else you need. You can explore them here.

Enhancd

Enhancd is the next-gen method to navigate file system with cli. It works with a fuzzy finder, we’ll install it fzf for this purpose.

CODE: https://gist.github.com/velotiotech/f0f02e34f56879db90a50469ba725e22.js

Enhancd can be installed with the zplug plugin manager for ZSH, so first we’ll install zplug with the below command:

CODE: https://gist.github.com/velotiotech/ccad5106e9020eff683e53a2c5cfe5db.js

Append the following to .zshrc:

CODE: https://gist.github.com/velotiotech/75d4eeace76103da4634c50cf65104f5.js

Now close your terminal, open it again, and use zplug to install enhanced

CODE: https://gist.github.com/velotiotech/46b8a57ca736e2ae08b14e58d44eb192.js

Aliases

As a developer, I need to execute git commands many times a day, typing each command every time is too cumbersome, so we can use aliases for them. Aliases need to be added .zshrc, and here’s how we can add them.

CODE: https://gist.github.com/velotiotech/ac4239c8e970fa6727d29598d39b605b.js

You can add these anywhere in the .zshrc file.

Colorls

Another tool that makes you say wow is Colorls. This tool colorizes the output of the ls command. This is how it looks once you install it:

It works with ruby, below is how you can install both ruby and colors:

CODE: https://gist.github.com/velotiotech/a0f5ad371db9431e9687383166abeaf8.js

Now, restart your terminal and execute the command colors in your terminal to see the magic!

Bonus - We can add some aliases as well if we want the same output of Colorls when we execute the command ls. Note that we’re adding another alias for ls to make it available as well.

CODE: https://gist.github.com/velotiotech/8a720c662348b1927b048f381c12f633.js

These are the tools and plugins I can’t live without now, Let me know if I’ve missed anything.

Automation

Do you wanna repeat this process again, if let’s say, you’ve bought a new laptop and want the same setup?

You can automate all of this if your answer is no, and that’s why I’ve created Project Automator. This project does a lot more than just setting up a terminal: it works with Arch Linux as of now but you can take the parts you need and make it work with almost any *nix system you like.

Explaining how it works is beyond the scope of this article, so I’ll have to leave you guys here to explore it on your own.

Conclusion

We need to perform many tasks on our systems, and using a GUI(Graphical User Interface) tool for a task can consume a lot of your time, especially if you repeat the same task on a daily basis like converting a media stream, setting up tools on a system, etc.

Using a command-line tool can save you a lot of time and you can automate repetitive tasks with scripting. It can be a great tool for your arsenal.

Did you like the blog? If yes, we're sure you'll also like to work with the people who write them - our best-in-class engineering team.

We're looking for talented developers who are passionate about new emerging technologies. If that's you, get in touch with us.

Explore current openings