DEV Community

Cover image for Essential terminal packages in 2020
James G. Best for Salted Bytes

Posted on • Originally published at

Essential terminal packages in 2020

This is the start of a new series about maximising your terminal experience. I will write about what I think are essential packages for the CLI, a simple but super effective Vim setup and setting some sane Tmux defaults.

In this first article, I am going to list some of what I think are essential CLI packages. These are ones I use every day and could not live without. I am leaving Vim and Tmux off this list as they will get there own articles.

I spend all my time in a terminal. This is where I do all my development, hacking and note-taking. Spending so much time there I want it to work for me, providing a buttery smooth experience.

Here is a list of my top CLI packages.

1. ZSH and oh-my-zsh:

This is my chosen shell. It has way too many features to list here but here are a choice few:

  • automatic cd: Just type the name of the directory
  • recursive path expansion: For example “/u/lo/b” expands to “/usr/local/bin”. This is not one I use much because I lead on the tools mentioned below.
  • spelling correction and approximate completion: If you make a small mistake typing a directory name, ZSH will fix it for you
  • plugin and theme support: ZSH includes many different plugin frameworks. This is where oh-my-zsh comings in. Its a community drive framework for managing your ZSH configuration.

Alt Text

2. FZF

FZF is a command-line fuzzy finder. It is super fast, light and works so well with all my other tools.


3. RipGrep (rg)

RipGrep is a stupid fast replacement for grep. It does away with lots of the hard to remember flags that grep requires. By default, it respects your .gitignore, and skips hidden files.

4. Autojump

Autojump is a super-fast way to navigate your filesystem. It learns the directories you visit most and remembers them for next time.

Alt Text

5. HTTPie

HTTPie is a user-friendly command line HTTP client. It has JSON support, syntax highlighting and lots more.

Alt Text

6. Bat

Bat is a drop-in replacement for cat but with superpowers. It's highly configurable and supports syntax highlighting.


7. exa

exa is a modern replacement for ls. It is highly configurable, provides better defaults.


8. twf

twf is a tree view explorer inspired by fzf.


You can find my dotfiles here. This is how I use them, how will you?

Thanks for reading 🙏

If there is anything I have missed, or if there is a better way to do something then please let me know.

Check out our software focused podcast - Salted Bytes

Top comments (2)

moopet profile image
Ben Sinclair

This is always going to be opinionated, especially when people use words like, "essential"...

I use zsh on Macs, but only because of Apple's bundling it to get around the GPL on bash. I think oh-my-zsh is a waste of time, because I haven't found any features in it that I want and that I can't do, easily, without it. As far as I'm concerned, it's bloat.

fzf is great. I'm not sure it's essential but I do use it a lot, wrapped in something so it's not a hard dependency:

if command -v fzf >/dev/null; then
  # progressive enhancement here

ripgrep is great. I've used ack and the-silver-searcher too, and they're all good, but rg is the winner as far as I'm concerned. It's worth it to learn grep though :)

I'm sure autojump is cool, and I know people use some things that are similar, like z or the old CDPATH, but they're not how my brain works and I don't like using them.

httpie looks alright, maybe the curl version of the grep -> ripgrep progressive enhancement. I don't use it, personally, but I can see the appeal.

I use bat quite a lot, but I have a problem with it being used as a drop-in replacement for cat. It's more a drop-in replacement for less -F, otherwise it's one of them Useless Uses of Cat, but with wings.

exa doesn't offer me more than ls except maybe for colourising the file permissions. I don't need another full program for that!

twf looks cool. I'll check it out, because I make my own mashups of commands with fzf quite frequently.

jimatjibba profile image
James G. Best

Thanks for your feedback. Maybe Essential is loaded. They are essential to me as they are part of my everyday toolkit.