# Awesome CLI Tools

*May 21, 2025*
 — by Flaviu Vlaicu

> Awesome CLI tools for productivity and more



Awesome CLI tools for productivity and more

[#linux](https://x.com/search?q=%23linux&src=hashtag_click)
[#linuxterminal](https://x.com/hashtag/linuxterminal?src=hashtag_click)
[#terminal](https://x.com/search?q=%23terminal&src=hashtag_click)
[#bash](https://x.com/search?q=%23bash&src=hashtag_click)
[#neovim](https://x.com/hashtag/neovim?src=hashtag_click)
[#vim](https://x.com/hashtag/vim?src=hashtag_click)
[#plugin](https://x.com/hashtag/plugin?src=hashtag_click)
[#cursor](https://x.com/hashtag/cursor?src=hashtag_click)
[#terminal](https://x.com/hashtag/terminal?src=hashtag_click)
[#commandline](https://x.com/hashtag/commandline?src=hashtag_click)
[#programmer](https://x.com/search?q=%23programmer&src=hashtag_click)

I have found the following tools to be very useful on a day-to-day basis when using the terminal. The combination of these tools is highly efficient. Please let me know your thoughts if you've tried them.

I will install the following tools on macOS using homebrew. If you are not familiar with homebrew you can check it out here : <https://brew.sh/>

### Homebrew

Install homebrew  using the following command:

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

For Apple Silicon run the following commands also:

```bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```

### 1: fzf (command line fuzzy finder)

[fzf](https://github.com/junegunn/fzf.git) is an amazing fuzzy finder for the command line.

```bash
brew install fzf
```

[![Image](https://pbs.twimg.com/media/GfW6ZYWXEAAzJgZ?format=jpg&name=medium)](https://x.com/flaviuvlaicu/article/1870747523020738983/media/1870606165438042112)

[![Image](https://pbs.twimg.com/media/GfVfQ_6WwAAWYuE?format=jpg&name=medium)](https://x.com/flaviuvlaicu/article/1870747523020738983/media/1870505965881049088)

### 2: bat (better cat)

[bat](https://github.com/sharkdp/bat) is a really nice alternative to cat to display file contents in the terminal with syntax highlighting.

[![Image](https://pbs.twimg.com/media/GfW56TuXsAAjXvj?format=png&name=small)](https://x.com/flaviuvlaicu/article/1870747523020738983/media/1870605631620624384)

```bash
brew install bat
```

### 3: zoxide (better cd)

[zoxide](https://github.com/ajeetdsouza/zoxide.git) is an amazing alternative to cd.

It will remember the directories you've visited in the past and make it really easy to navigate back to them by just typing out a portion of the name of the directory you want to visit.

[![Image](https://pbs.twimg.com/media/GfW3wjeW8AAkOim?format=png&name=medium)](https://x.com/flaviuvlaicu/article/1870747523020738983/media/1870603265026486272)

```bash
brew install zoxide
```
### 4: eza (better ls)

[eza](https://github.com/eza-community/eza.git) is a better version of ls with lots of different options.

[![Image](https://pbs.twimg.com/media/GfW4OToWUAALAIl?format=jpg&name=medium)](https://x.com/flaviuvlaicu/article/1870747523020738983/media/1870603776169496576)

```bash
brew install eza
```

### 5: thefuck

[thefuck](https://github.com/nvbn/thefuck) is a really nice tool to auto correct mistyped commands.

[![Image](https://pbs.twimg.com/media/GfZhvmGXkAAXqWM?format=jpg&name=medium)](https://x.com/flaviuvlaicu/article/1870747523020738983/media/1870790165528023040)

```bash
brew install thefuck
```

### 6: neovim

Neovim is a modern, enhanced fork of Vim, a popular text editor for programmers. It offers improved functionality, extensibility, and a better development experience while retaining compatibility with Vim's features. Neovim is especially suited for developers who want a highly customizable and performant editor.

```bash
brew install neovim
```
### 7: fd

For a better functionalityLet's replace fzf with [fd](https://github.com/sharkdp/fd)

```bash
brew install fd
```

Open ~/.zshrc file with your favorite editor and add the following. I personally use Neovim.

```
### ---- FZF -----

Set up fzf key bindings and fuzzy completion
eval "$(fzf --zsh)"
```

fzf by default uses the find command to look for files and directories.

Let's replace that with [fd](https://github.com/sharkdp/fd) for better functionality.

```bash
# -- Use fd instead of fzf --

export FZF_DEFAULT_COMMAND="fd --hidden --strip-cwd-prefix --exclude .git"
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
export FZF_ALT_C_COMMAND="fd --type=d --hidden --strip-cwd-prefix --exclude .git"

# Use fd (https://github.com/sharkdp/fd) for listing path candidates.
# - The first argument to the function ($1) is the base path to start traversal
# - See the source code (completion.{bash,zsh}) for the details.
_fzf_compgen_path() {
  fd --hidden --exclude .git . "$1"
}

# Use fd to generate the list for directory completion
_fzf_compgen_dir() {
  fd --type=d --hidden --exclude .git . "$1"
}
```
Setup a custom theme for fzf If you want to make your own check out the

[theme generator](https://vitormv.github.io/fzf-themes/)

```bash
# --- setup fzf theme ---
fg="#CBE0F0"
bg="#011628"
bg_highlight="#143652"
purple="#B388FF"
blue="#06BCE4"
cyan="#2CF9ED"

export FZF_DEFAULT_OPTS="--color=fg:${fg},bg:${bg},hl:${purple},fg+:${fg},bg+:${bg_highlight},hl+:${purple},info:${blue},prompt:${cyan},pointer:${cyan},marker:${cyan},spinner:${cyan},header:${cyan}"
```
Setup fzf previews

Combining eza with bat will result in some really nice previews for fzf.

```bash
show_file_or_dir_preview="if [ -d {} ]; then eza --tree --color=always {} | head -200; else bat -n --color=always --line-range :500 {}; fi"

export FZF_CTRL_T_OPTS="--preview '$show_file_or_dir_preview'"
export FZF_ALT_C_OPTS="--preview 'eza --tree --color=always {} | head -200'"

# Advanced customization of fzf options via _fzf_comprun function
# - The first argument to the function is the name of the command.
# - You should make sure to pass the rest of the arguments to fzf.
_fzf_comprun() {
  local command=$1
  shift

  case "$command" in
    cd)           fzf --preview 'eza --tree --color=always {} | head -200' "$@" ;;
    export|unset) fzf --preview "eval 'echo ${}'"         "$@" ;;
    ssh)          fzf --preview 'dig {}'                   "$@" ;;
    *)            fzf --preview "$show_file_or_dir_preview" "$@" ;;
  esac
}
```
Add thefuck to the .zshrch config

```
# thefuck alias
eval $(thefuck --alias)
```
Add the config for zoxide together with an alias for cd:

```bash
# ---- Zoxide (better cd) ----
eval "$(zoxide init zsh)"

alias cd="z"
```
Save the .zshrc config file and run the following command

```
source ~/.zshrc
```
To further improve your terminal you can add the following plugins:

### ZSH Autosuggestion

Install zsh-autosuggestions:

```
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
```
### ZSH Syntax Highlighting

Install zsh-syntax-highlighting:

```
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
```

Open the "~/.zshrc" file in your desired editor and modify the plugins line to what you see below.

```
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
```
Load these new plugins by running:

```bash
source ~/.zshrc
```

If the plugins fail to load with this method, simply add the following two lines in the .zshrc config file and reload.

```bash
source ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh

source ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
```



---
*Source: [https://vlaicu.io/posts/awesome-cli-tools/](https://vlaicu.io/posts/awesome-cli-tools/)*
