Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

The five upgrades worth knowing about are fish (a friendlier interactive shell), Starship (a prompt that shows useful context), fzf (fuzzy selection for files and command history), eza (a modern replacement for ls), and kitty (a terminal emulator with strong display and scrollback features). Each one sits in a different layer of the terminal experience, so you can adopt any of them without replacing the rest. The safest approach is to add one change at a time and keep a working path back to your previous setup.

Before you change anything

Most people who abandon a new shell or prompt do so because a small incompatibility broke something they relied on. A few precautions prevent that.

  1. Back up your existing configuration files. For Bash, that is usually ~/.bashrc and ~/.bash_profile; for zsh, ~/.zshrc. A simple copy works: cp ~/.bashrc ~/.bashrc.bak.
  2. Try each tool from your current shell first. Type the program name in a terminal and confirm that it starts before you configure it to load automatically.
  3. Check the version your distribution packages. Repository versions can lag behind upstream releases, and the installation instructions on each project’s site are the authority for current install steps.
  4. Keep your original shell available. Before changing your login shell, confirm that the new shell’s path (shown by command -v fish, for example) is listed in /etc/shells, and remember that your default shell can be changed back with chsh.

The five upgrades

1. fish: a friendlier interactive shell

fish describes itself in its official tutorial as “a fully-equipped command line shell (like bash or zsh) that is smart and user-friendly.” Its interactive features, including syntax highlighting, autosuggestions from your history, and tab completions, are built in rather than added through plugins.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The trade-off is compatibility. fish is not a drop-in replacement for Bash or zsh. Its syntax differs in places, so a line such as export EDITOR=vim becomes set -x EDITOR vim in fish, and Bash scripts with a #!/bin/bash line will still run under Bash, not fish. Test fish by running it from your existing shell, and use it as your login shell only after your everyday commands and dotfiles work in it.

2. Starship: a prompt that shows context

Starship is a prompt rather than a shell, and it works with several shells. Its project guide describes it as “the minimal, blazing-fast, and infinitely customizable prompt for any shell!” The “blazing-fast” wording is the project’s own description, not an independent benchmark.

Starship runs small commands to gather context, such as the current Git branch and status, and displays the results in the prompt. To enable it, add the initialization line for your shell to its startup file:

  • Bash: eval "$(starship init bash)" at the end of ~/.bashrc
  • zsh: eval "$(starship init zsh)" at the end of ~/.zshrc
  • fish: starship init fish | source at the end of ~/.config/fish/config.fish

Starship’s guide notes that icon glyphs require a Nerd Font. Treat that as optional visual polish: without one, the prompt still works, but some symbols may appear as boxes or missing characters. Configuration lives in ~/.config/starship.toml, and modules can be turned on or off there.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. fzf: fuzzy selection for files and history

fzf is a general-purpose fuzzy finder. It reads lines of text from any source and lets you narrow them interactively, which is why it is useful well beyond file picking. Its README documents shell integration for Bash, zsh, and fish, which typically adds key bindings for searching command history and selecting files and directories. In the default bindings, Ctrl-R searches history, Ctrl-T inserts a selected file path, and Alt-C changes into a selected directory.

fzf also supports preview windows, for example fzf --preview 'head -n 50 {}'. Previews are meant for files, so pair them with file-oriented commands. A general-purpose selector can receive non-file input, and a preview command that assumes a file path will misbehave on such lines.

4. eza: a readable ls replacement

eza is a maintained replacement for ls that adds color, a long listing format, and Git status in directory views. Common forms include eza -l for a long listing and eza -l --git to show Git status for each entry.

Availability depends on your distribution. Look for an eza package in your package manager first, and follow the installation documentation on the eza project site if your release does not carry it or carries an old version. Do not assume one install command works on every system. If you alias ls to eza, keep the original available under another name so scripts that expect ls output are not affected.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

5. kitty: terminal display and scrollback

A terminal emulator is the window that hosts your shell, and changing it is optional. kitty’s overview documentation says it is “designed from the ground up to support all modern terminal features, such as Unicode, true color, bold/italic fonts, text formatting, etc.” Its documented features include configurable fonts, keyboard controls, sessions, and scrollback that you can search.

For many people the practical gains are modest and specific: a font size that suits your screen, a monospace typeface you can read for hours, and the ability to search earlier output. Font size is set in kitty.conf with a line such as font_size 11.0. kitty is one example, not the only choice. Your existing terminal may already offer the same settings under its preferences menu.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Choosing the layers that fit your setup

The five upgrades do different jobs, and they can be combined or skipped independently. The table compares them on the criteria that usually decide whether a change is worth keeping.

Upgrade Layer Compatibility with existing scripts and dotfiles Font or glyph needs Reversing the change
fish Shell Syntax differs from Bash and zsh; existing scripts and dotfiles may need changes None stated in the official tutorial Restore your previous login shell with chsh
Starship Prompt, works with Bash, fish, and zsh Runs alongside your shell; no syntax changes Nerd Font recommended for icons, not required to function Remove the init line from your startup file
fzf Key bindings and selection tool Adds shell integration; existing commands are unchanged None stated in its README Remove the integration line from your startup file
eza Command replacing ls Output format differs from ls; scripts parsing ls output may break Not stated in its documentation Remove the alias or call ls directly
kitty Terminal emulator Independent of your shell and scripts Font choice affects display; glyph coverage depends on the font Reopen your previous terminal application

When something feels slow or broken

  • A prompt segment shows “Executing command … timed out.” Starship stops commands that exceed its configurable time limit and reports them as timed out. Run starship timings to see which module is slow, then disable or adjust that module in starship.toml.
  • Icons appear as boxes. Install a Nerd Font and select it in your terminal’s font settings, or remove the icon symbols from your Starship configuration.
  • A script fails after switching shells. Run it explicitly with its interpreter, such as bash script.sh, and compare the fish syntax differences before editing it.
  • Starship will not run on an older Linux distribution. The Starship FAQ addresses older versions of glibc, so check it before troubleshooting your configuration.
  • A new program fails to start after an install. Confirm the package version your distribution provides and compare it with the project’s installation instructions.

Start with the change that addresses your most frequent frustration. For many readers that is either the prompt or history search, and each can be tested in minutes without touching your login shell.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.