Small CLI tools that I use every day

Small, invisible but anyway essetial

Published on

Last update on

Hi! It’s July ‘24, and finally I’m writing a list of tools for terminal that I’ve collected over the years.

I mostly live in the terminal, so I decided to clean my configuration and make it reliable and maintainable.

I hope this list will make you discover something new. Most of them are really—really—famous but hey, how knows! 😉

NB

zoxide

The king 👑 of tools for terminals. I think I just can’t make it without it. Maybe only with the next tool.

zoxide remembers which directories you use most frequently, so you can “jump” to them. You can also reorder the priority and add folders manually.

It stores everything in a local sqlite database.

Install zoxide

brew install zoxide

fzf

fzf is a general-purpose fuzzy finder and is just the best.

I started using it in my neovim config inside telescope. After a while I just thought about integrating it better in my workflow. This way I learned that can be used also to:

  • search through the commands’ history (CTRL-R)
  • search for a file name while typing a command in the shell and paste the path in the command (CTRL-R)
  • move in a directory by searching the name (CTRL-C)

Install fzf

brew install fzf

trak

As a freelance I need to keep track of things I do for my customers. Since I don’t want to write down manually all the session of work that I do or use a complicated tool I create trak.

It’s a small CLI that allow you to create sessions of work related to projects. You can also manage “sprints” if you want.

I think it can be useful also to those that wants to create a habit. For example to those who are trying to keep up with their blog.

Give it a try and let me know.

Install trak

brew install lcfd/trak/trak

eza (ex exa)

eza is fork and replacement for ls written in Rust.

I’ve used exa for quite some time, but lately I discovered that was unmaintained. It’s tricky to get it because the repository isn’t archived because, as they say:

(This repository isn’t archived because the only person with the rights to do so is unreachable).

https://github.com/ogham/exa

Install eza

brew install eza

bat

Bat is a replacement for cat. It supports syntax highlighting, it communicates with git and does automatic paging.

Install bat

brew install bat

zellij

Zellij isn’t for everyone. Unlike the other tools in this list, it radically modifies the workflow instead of integrating seamlessly.

Install zellij

brew install zellij

mise-en-place (or just mise)

Mise is a replacement for asdf. It’s simpler and faster. To install something with asdf I had always to refer to the documentation. As soon as I’ve tried it I haven’t look back.

It installs and manages dev tools/runtimes, manages environment variables, and is a task runner.

Install mise

brew install mise

yq

It’s a YAML, JSON and XML processor. It’s similar to jq, but it handles more file formats.

You can read, update, merge and convert the supported file formats. I prefer this over jq because it is more versatile.

Install yq

brew install yq

lazygit

That’s one of the latest tools added to my belt. It took me a while to finally give it a serious try.

My tools of choice, talking about git, were the standard CLI and the vscode integrated UI. In neovim I was using neogit, but it wasn’t enough.

I decided then to try with lazygit.nvim and after a few days of fatigue I managed to learn some combo. There are still certain things that I need to get accustomed to, like the comprehension of diff and the resolution of conflicts.

This addition has been a W, for sure.

Install lazygit

brew install lazygit

fd

It’s a simple alternative to the find command.

With fzf

In combination with fzf it makes searching files a lot faster.

For example:

# Generate input
export FZF_DEFAULT_COMMAND='fd --type file'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

Install fd

brew install fd

starship

https://github.com/starship/starship

antigen

In order to use all those tools at the best of their possibilities I needed to configure zsh also at the best. To do this I use antigen.

By using it you can install just what you need instead of tons of packages you’ll end up not using.

gh

The CLI for GitHub. I’m just experimenting with it. Sometimes I just want to avoid using the browser UI, so this can be a good alternative.

For example, I can list the issue in a repository by typing gh issue list --assignee "@me".

Install gh

brew install gh

xplr

xplr is a TUI file explorer.

I’m still trying to understand if it can fit in my workflow. It’s preferable than using the macOS Finder if I can make it work.

Install xplr

brew install xplr

toot

If you want to interact with Mastodon from the terminal this CLI is perfect.

Install toot

brew install toot

Other tools

I want to keep this list short, so those are other tools that I use less frequently.

Am I missing something?

I’m sure I’m missing something. If you have suggestions write me on Maston or X!

🆙 More points if it’s something about Neovim, Python or DevOps.

Suggestions from the readers

I’ve been trialing yazi for my terminal file browser. Bonus points, it also uses Lua for config.

Josh Thomas (@josh@joshthomas.dev)

Thanks for reading to the end! 🎉

If you’d like to stay in touch Follow me on X and Mastodon.

I'm active in many places on the internet, checkout the footer or the links page.