Make your Linux Terminal Productive & Beautiful.
Tags: webdev, terminal, productivity
Published: 2021-09-04 06:06:41

![1600947596-terminal](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sv0bzborsmlslls63704.gif)
 

In this article, we will configure the Linux terminal/shell, install the plugins/packages to boost up speed, increase productivity, and change the look and feel of your terminal.

First of all, check the active shell using this command.
```shell
echo $SHELL 
or 
echo $0
```
The below command will display all the available shell. 
```shell
cat /etc/shells
```

![](https://designdrastic.com/images/articles/terminal-setup/default-shells.png)

Follow the steps to setup & configure your **Terminal**
* [Install ZSH ](#install-zsh-shell)
* [Install & Configure Oh-my-zsh ](#install-oh-my-zsh)
* [Install Themes](#themes)
* [Install Plugins](#plugins)
* [Fonts & Colors](#terminal-preferences)
* [Setup Starship](#plugins)

The default terminal that comes with Linux(Ubuntu like OS) is Bash(Bourne Again Shell).
In this tutorial, we will first change the shell and configure it and then install/update the plugins & color preferences.

### **Install Zsh Shell** ()

First, check whether zsh is installed or not using this command:
```
< /etc/shells grep zsh
outout: 
/bin/zsh
/usr/bin/zsh
```

**Installation**

 - For Debian(ubuntu like distros)
```
sudo apt update
sudo apt install zsh
```

- For Redhat
```
sudo yum install zsh
```

- For OpenSuse
```
zypper install zsh
```

- For Arc Linux or Manjaro
```
pacman -S zsh
```

- For Fedora
```
dnf install zsh
```
- For free bsd
```
pkg install zsh
```
- For macOS
```
brew install zsh
```
or you can download it from source **http://zsh.sourceforge.net/Arc/source.html**

Official Installation Doc: **https://github.com/ohmyzsh/ohmyzsh/wiki/Installing-ZSH**

Check zsh version: ```zsh --version```

Zsh has been installed successfully. 

Now, make zsh your default terminal:
```
chsh -s $(which zsh)
```

If you want to switch back to the default bash or any other terminal, then run this command. 
```
chsh -s /bin/bash or exec bash
or
chsh -s /bin/zsh or exec zsh
```

then restart the terminal.

### **Install oh my zsh**
Oh-my-zsh is an open-source framework for managing Zsh configuration.

Install via **Curl**
```
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
```
Install via **wget**
```
sh -c "$(wget https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh -O -)"
```
Manual Installation
```
curl -Lo install.sh https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
```

Check the variable of the .zshrc file to confirm that zsh is activated.

Open zshrc file: > sudo nano ~/.zshrc
``export ZSH="$HOME/.oh-my-zsh"``

Make sure the above variable is set inside the .zshrc file.  If it's not there then edit the file and add the above line.

> To apply all the edited changes in the bashrc/zshrc file you must have to run ```source ~/.bashrc``` or ```source ~/.zshrc``` command.

Next, we will install the omz plugins and themes.

### **Themes**
The Theme(ZSH_THEME) is a  variable of the zshrc(omz) file. To add or update the theme, you've to first install(if theme is not installed) the theme and then update the theme(ZSH_THEME) variable.

The oh-my-zsh comes with predefined themes. You can set them by setting the ZSH_THEME variable. 

The default and popular themes of omzs are robbyrussell and agnoster that come with omz installation.

**Set the robbyrussell theme**
```
ZSH_THEME="robbyrussell"
```
![](https://designdrastic.com/images/articles/terminal-setup/robbyrussell.png)

**Agnoster theme**
```
ZSH_THEME="agnoster"
```
![](https://designdrastic.com/images/articles/terminal-setup/agnoster.png)

There are many more theme options available with Oh-my-zsh. 
For example Pure, Avit, Apple, Bira, etc...
>Check the full list of Oh-My-Zsh Themes: **https://github.com/ohmyzsh/ohmyzsh/wiki/Themes**

Apart from that, you can install external themes as well. Some of the popular themes are Powerlevel10k, Powerlevel9k, Spaceship, Bullet-Train, etc...

### **Powerlevel10k**
Powerlvel10k is a fully customizable and more advanced theme of zsh. 

**Installation**

For Oh my zsh
```
git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k
```
set the theme in ZSH_THME variable in the .zshrc file.
```
ZSH_THEME="powerlevel10k/powerlevel10k"
```
![](https://designdrastic.com/images/articles/terminal-setup/powerlevel10k.png)

Configure **Powerlevel10k**

Type command: ```p10 configure``` to start Powerlevel10k configuration.

Or else you can edit the configuration file: ~/.p10k.zsh

![](https://raw.githubusercontent.com/romkatv/powerlevel10k-media/master/configuration-wizard.gif)
>For more details: **https://github.com/romkatv/powerlevel10k**

### **Spaceship**

Another powerful theme is Spaceship. It comes with many features and an extremely customizable zsh prompt theme. 

**Installation**

For Oh My Zsh
```
git clone https://github.com/denysdovhan/spaceship-prompt.git "$ZSH_CUSTOM/themes/spaceship-prompt" --depth=1
```
Symlink spaceship. zsh-theme to your oh-my-zsh custom themes directory:
```
ln -s "$ZSH_CUSTOM/themes/spaceship-prompt/spaceship.zsh-theme" "$ZSH_CUSTOM/themes/spaceship.zsh-theme"
```
Then set the ZSH\_THEME variable in .zshrc
```
ZSH_THEME="spaceship"
```
![](/images/articles/terminal-setup/spaceship.png)
![](https://user-images.githubusercontent.com/10276208/36086434-5de52ace-0ff2-11e8-8299-c67f9ab4e9bd.gif)

>For more details: **https://denysdovhan.com/spaceship-prompt/**

### **Plugins**

The Plugins is an set of variable(array) that contains a list of activated plugin values in the zshrc(omz) file. To add or update the plugins, you've to first install(if not installed) the plugin and then update the plugins variable.
``` .zshrc
plugins=(git node autojump ... )
```
> The values of the plugins variable should be separated by space, not by a comma.
Now, install some of the useful plugins.
**Git**
Just add the word git in plugins var.
```
plugins=(git ...)
```

**zsh-autosuggestions**

For Oh-My-Zsh

First, clone the directory using git
```
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
```
and activate the plugin
```
plugins=(... zsh-autosuggestions)
```
Or Manual Installation
```
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
```
and add the following line to ~/.zshrc
```
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
```
and restart the terminal.

**zsh-syntax-highlighting**
**Installation**

For Zsh

Clone the git repo
```
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
```
Then enable the plugin
```
source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
```

For Oh-My-Zsh

Clone the repo
```
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
```
And add the zsh-syntax-highlighting value in plugins variable
```
plugins=(... zsh-syntax-highlighting)
```
And restart the terminal.

**Before**

![](https://designdrastic.com/images/articles/terminal-setup/hl3.png)

![](https://designdrastic.com/images/articles/terminal-setup/hl2.png)

**After**

![](https://designdrastic.com/images/articles/terminal-setup/hl4.png)

![](https://designdrastic.com/images/articles/terminal-setup/hl5.png)

**z or Zsh-z**

Z allows you to jump quickly to the directory that you visited most in the past. Z will remember the path you've entered frequently and helped you to jump around them with few keystrokes. 

Z uses regular expression.

To enable the z plugin, assing z to your plugin variable. 
```
plugins=(... z )
```
![Plugin:Z](https://designdrastic.com/images/articles/terminal-setup/z.gif)

> For more oh-my-zsh plugins: **https://github.com/ohmyzsh/ohmyzsh/wiki/Plugins**

### **Terminal Preferences**
Install the **Patched Fonts** for the terminal. The patched font will be used to display characters, glyph, icons, arrow effects, emojis. 

**Install Powerline fonts**
```
sudo apt-get install fonts-powerline
```
For more options: **https://github.com/powerline/fonts#quick-installation**

**Download and Install the Powerline/Nerd font**
* [Source Code Pro](https://github.com/powerline/fonts/tree/master/SourceCodePro)
* [Fura/Fira Mono Powerline](https://github.com/powerline/fonts/tree/master/FiraMono)
* [Hack](https://github.com/powerline/fonts/tree/master/Hack)
* [Other Poweline Fonts](https://github.com/powerline/fonts)
* [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts)

Then select the preferable front in custom font inside the text tab in Preferences.
[](https://designdrastic.com/images/articles/terminal-setup/preference-text.png)

**Change the colors(color scheme) of the Terminal**
Open the preferences and select the second tab=>  Colors. 

Available Buil-in Schemes are:
[](https://designdrastic.com/images/articles/terminal-setup/built-in-schemes.png)
Tango & Solarized are recommended.

You can also customize the colors according to your need in the custom tab.

Next, you can make the terminal productive and more customizable with **Starship**

### **Starship**
**Install and configure Starship**
The Starship is "The minimal, blazing-fast, and infinitely customizable prompt for any shell!"

**Installation**
Using curl
```
curl -fsSL https://starship.rs/install.sh | bash
```

With Brew
```
brew install starship
```

With Scoop
```
scoop install starship
```

After installation, add the below line to initialize the **Starship**

For Bash(~/.bashrc)
```
eval "$(starship init bash)"
```

For Zsh(~/.zshrc)
```
eval "$(starship init zsh)"
```

For Fish(~/.config/fish/config.fish)
```
starship init fish | source
```

**Configuration**
Starship uses a TOML file for configuration. 

TOML Doc: **https://github.com/toml-lang/toml**

To get started configuring starship, create the config file starship.toml inside .config directory. 

**starship.toml**
```
add_newline = false
symbol = "➜"
[language]
symbol='*'
.
.
.
```
For prompt configuration visit: **https://starship.rs/config/#prompt**
![](https://raw.githubusercontent.com/starship/starship/master/media/demo.gif)

### **Tmux/Tilix**
tmux is a program that runs in a terminal and allows multiple other terminal programs to be run inside it.

Tilix is similar to Tmux. It is a tiling terminal emulator. Tmux/Tilix can split your emulator window into multiple terminal panes. 
![](/images/articles/terminal-setup/tilix.png)

I hope you guys find the article helpful.