My Configs for a Fancy-Looking Terminal (starship, exa, fonts)

My starship and exa configs for a fancy command prompt in bash and pwsh (PowerShell). How to make it work with Windows Terminal having nerd fonts and a nice background.

My Configs for a Fancy-Looking Terminal (starship, exa, fonts)

My terminal environments are usually customized as follows:

  1. starship for a nice command-line prompt,
  2. exa for nice directory listing instead of original ls,
  3. nerdfonts for beautiful glyphs in the terminal application,
  4. Windows Terminal, as a terminal application for setting up all the beauty.

bash is the main shell I usually work in.

It is worth mentioning that I use Windows Terminal as a terminal application for simultaneous access to different terminal environments and shells in different tabs, mainly two ones:

  1. Ubuntu in Windows Subsystem for Linux (WSL2) with bash shell.
  2. Windows environment enabled with pwsh (PowerShell).

Windows Terminal allows rendering custom fonts and backgrounds and also supports working with WSL2 and PowerShell simultaneously in different tabs. Meanwhile, customization of the command prompt happens inside of the shell configurations.


🚀 Starship

Starship is used for a nice command prompt.

How to Install

sudo apt install gcc cmake

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"

cargo install starship
eval "$(starship init bash)"

Add the next line into .bashrc:

 eval "$(starship init bash)"

Don't forget to apply.

source .bashrc

How the command prompt finally looks:

Starship shows information about git repository instead of a long local path (you have to cd into the Git repo directory): cocoon Git repo, main branch, rust v1.67.0, Ubuntu , bash

👮‍♂️ Additionally, set up starship for the root user.

Change a user to be a root.

sudo su

vi ~/.bashrc

Add the following line into /root/.bashrc (it's literally ~/.bashrc for the root... and don't forget to change the <user>).

eval "$(/home/<user>/.cargo/bin/starship init bash)"

Run the command above in the command line or apply the config:

source .bashrc

How it finally looks for the root:

🌎 You can install starship on the remote node, then after logging in with ssh you can see something like this:

Setting up starship on different hosts helps to distinguish a remote and a local hosts

🔧 Starship bash config

cat ~/.config/starship.toml
[shlvl]
disabled = false
threshold = 1
symbol = "↕️ "

[shell]
disabled = false
bash_indicator = ""

[os]
disabled = false
format = "$symbol "
symbols.Ubuntu = ""
  • shlvl config makes it show the number of a shell level, e.g. it shows "↕️ 1" when running under mc (Midnight Commander).
  • shell module helps identify a shell that is currently in use (bash, fish, pwsh).
  • os module shows the operating system.

The last 2 options are needed because I can open another tab with PowerShell, and, with properly configured Starship there, it allows me to quickly recognize shells between each other.

🔧 Starship PowerShell pwsh config

cat ~\.config\starship.toml
[shell]
disabled = false
powershell_indicator = ""
cmd_indicator = ""

[os]
disabled = false
format = "$symbol "
symbols.Windows = ""

How It Looks in the Tabs

Tab #1 can be a WSL2 Ubuntu/Linux bash terminal:

Ubuntu , bash , shell level 1 under mc, path ~/.config

Tab #2 can be a PowerShell pwsh terminal:

Windows , PowerShell , path ~\.config

🦀 =exa=

exa is a modern replacement for ls written in Rust.

How to install:

sudo apt install exa

Modify ~/.bashrc config. If the ls alias is already defined there, then substitute it with the following line:

alias ls='exa --icons -F -H --group-directories-first --git -1'
  • --icons shows the icons (I want a fancy look!)
  • -F type indicators
  • -H hard links
  • --group-directories-first list directories before other files
  • --git list each file's Git status
  • -1 show a table listing, 1 entry by line

And ll is usually already defined like this:

alias ll='ls -alF'

📺 Windows Terminal

Finally, a proper setup of the Windows Terminal is needed to fully enable starship and exa showing fancy fonts (e.g. "nerd" glyphs , ) on a custom background (💡) with support of different terminal environments (e.g. bash, pwsh).

  1. Install the Windows Terminal from the Microsoft Store: https://apps.microsoft.com/store/detail/windows-terminal/9N0DX20HK701

  2. Install Nerd Fonts. Download a "FiraCode Nerd Font": https://github.com/ryanoasis/nerd-fonts/releases/download/v2.3.3/FiraCode.zip

    Find the Fira Code Retina Nerd Font Complete Mono Windows Compatible.ttf inside of the archive and install it (double click).

    💡 You can find more nerd fonts at nerdfonts.com.

    firacode_nerd_font_donwload

  3. Set the Campbell color theme and FiraCode NFR Retina font, installed in the previous step:
    windows_terminal_config

  4. Download my bulbs background:
    light-bulb-minimalism-wallpaper-c26162b00db69e6bba0822c520f849d2
    And set it in the Windows Terminal:
    windows_terminal_config_background


Voila!

My final setup is shown in the initial screenshot at the beginning of the article: