The terminal emulator or simply the terminal is an integral part of any Linux distribution.
When you change the theme of your distribution, the terminal often gets a makeover automatically. But that doesn’t mean you cannot customize the terminal further.
Many It’s FOSS readers have asked us how come the terminal in our screenshots or videos look so cool, what fonts do we use, etc.
To answer this frequent question, I’ll show you some simple and some complex tweaks to change the appearance of the terminal. You can compare the visual difference in the image below:
Customizing Linux Terminal
For most elements like color, transparency, and fonts, you can utilize the GUI to tweak it without requiring you to enter any special commands.
Open your terminal. In the top right corner, look for the hamburger menu. Here, click on “Preferences” as shown in the screenshot below:
This is where you’ll find all the settings to change the appearance of the terminal.
Tip 0: Use separate terminal profiles for your customization
I would advise you to create a new profile for your customization. Why? Because this way, your changes won’t impact the main terminal profile. Suppose you make some weird changes and cannot recall the default value. Profiles help separate the customization.
As you can see, Abhishek has separate profiles for taking screenshots and making videos.
You can easily change the terminal profiles and open a new terminal window with the new profile.
That was the suggestion I wanted to put forward. Now, let’s see those tweaks.
Tip 1: Use a dark/light terminal theme
You may change the system theme and the terminal theme gets changed. Apart from that, you may switch between the dark or light theme, if you do not want to change the system theme.
Once you head into the preferences, you will notice the General options to change the theme and other settings.
Tip 2: Change the font and size
Select the profile that you want to customize. Now you’ll get the option to customize the text appearance, font size, font style, spacing, cursor shape, and toggle the terminal bell sound as well.
For changing the terminal font, you can only change to what’s available on your system. If you want something different, download and install the font on your Linux system first.
Under the Text tab, select Custom font and then change the font and size (if required).
Tip 3: Change the color pallet and transparency
Apart from the text and spacing, you can access the “Colors” tab and change the color of the text and background of your terminal. You can also adjust the transparency to make it look even cooler.
As you can notice, you can change the color palette from a set of pre-configured options or tweak it yourself.
If you want to enable transparency just like I did, you click on “Use transparent background” option.
You can also choose to use colors from your system theme if you want a similar color setting to your theme.
Tip 4: Tweaking the bash prompt variables
Usually, you will see your username and hostname (your distribution) as the bash prompt when launching the terminal without any changes.
For instance, it would be “ankushdas@pop-os:~$” in my case. However, I permanently changed the hostname to “itsfoss“, so now it looks like this:
To change the hostname, you can type in the following:
hostname CUSTOM_NAME
However, this will be applicable only to the current sessions. So, when you restart, it will revert to the default. To permanently change the hostname, you need to type in the following:
sudo hostnamectl set-hostname CUSTOM_NAME
Similarly, you can also change your username, but it requires some additional configuration that includes killing all the current processes associated with the active username, so we’ll avoid it to change the look/feel of the terminal.
Tip 5: Changing the font and color of the bash prompt (for advanced users)
You can tweak the font and color of the bash prompt (ankushdas@itsfoss:~$) using commands.
You will need to utilize the PS1 environment variable which controls what is being displayed as the prompt. You can learn more about it on the man page.
For instance, when you type in:
echo $PS1
The output in my case is:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$
We need to focus on the first part of the output:
\[\e]0;\u@\h: \w\a\]$
Here, you need to know the following:
- \e is a special character that denotes the start of a color sequence
- \u indicates the username followed by the @ symbol
- \h denotes the hostname of the system
- \w denotes the base directory
- \a indicates the active directory
- $ indicates non-root user
The output in your case can be different, but the variables will be the same, so you need to play with the commands mentioned below depending on your output.
Before you do that, keep these in mind:
- Codes for text format: 0 for normal text, 1 for bold, 3 for italic and 4 for underline text
- Color range for background colors: 40-47
- Color range for text color: 30-37
You just need to type in the following to change the color and font:
PS1="\e[41;3;32m[\u@\h:\w\a\$]"
This is how your bash prompt will look like after typing the command:
If you notice the command properly, as mentioned above, \e helps us assign a color sequence.
In the command above, I’ve assigned a background color first, then the text style, and then the font color followed by “m“.
Here, “m” indicates the end of the color sequence.
So, all you have to do is, play around with this part:
41;3;32
The rest of the command should remain the same, you just need to assign different numbers to change the background color, text style, and text color.
Do note that this is in no particular order; you can assign the text style first, background color next, and the text color at the end as “3;41;32“, where the command becomes:
PS1="\e[3;41;32m[\u@\h:\w\a\$]"
As you can notice, the color customization is the same no matter the order. So, keep the codes for customization in mind and play around with it until you’re sure you want this as a permanent change.
The above command that I mentioned temporarily customizes the bash prompt for the current session. If you close the session, you will lose the customization.
So, to make this a permanent change, you need to add it to .bashrc file (this is a configuration file that loads up every time you load up a session).
You can access the file by simply typing:
nano ~/.bashrc
Unless you’re sure what you’re doing, do not change anything. And, just for the sake of restoring the settings back, you should keep a backup of the PS1 environment variable (copy-paste what’s in it by default) to a text file.
So, even if you need the default font and color, you can again edit the .bashrc file and paste the PS1 environment variable.
Bonus Tip: Change the terminal color pallet based on your wallpaper
If you want to change the terminal's background and text color but are unsure which colors to pick, you can use a Python-based tool, Pywal. It automatically changes the color of the terminal based on your wallpaper or the image you provide to it.
If you are interested in using this tool, I have written about it in detail.
Wrapping Up
Of course, it is easy to customize using the GUI while getting better control of what you can change. But, knowing the commands is also necessary in case you start using WSL or access a remote server using SSH; you can customize your experience no matter what.
If you are not much into customizing, you can try using other Linux terminals like Tilix or Terminator.
How do you customize the Linux terminal? Share your secret ricing recipe with us in the comments.