A curated collection of modern command-line tools and shell configurations for productive terminal-based development. Works on any Linux or macOS machine — whether you're on a remote server without root access or setting up a local development environment.
The toolbox includes a set of tools I find essential for daily development (see CLI Tools Included below), along with their configurations. For more local desktop setup recommendations, see my dotfile repo.
The install.sh script handles everything. It backs up any existing configs before installing.
git clone https://github.com/aik2mlj/cli-toolbox.git && cd cli-toolboxThis downloads all binaries to ~/.local/bin/ (no root needed) and installs configs:
./install.sh # install binaries + essential configs (with backup)
./install.sh --overwrite # same, without backing up existing config filesTo just install the binaries or to upgrade them:
# these are equivalent
./install.sh --binary-only
./install.sh --upgradeUse your package manager (apt, dnf, pacman, brew, etc.) for the binaries, and only apply the configs:
brew install <packages> # change it to your package manager
./install.sh --config-only # install essential configs only
./install.sh --config-only --overwrite # install essential configs, overwrite existing-
If you prefer a shell other than
fish, add~/.local/binto your PATH. Withfish, this is already configured. -
Some tools require a Nerd Font to display icons correctly — install one locally and set it in your terminal emulator's settings.
-
You may want to set the default shell to
fish.- If this is a local setup, change the login shell with
chsh -s $(which fish). - If this is a remote server without a system-wide
fishinstalled, you may want to check this setup guide.- If you always launch
tmux, you are already covered — the default shell intmuxhas been set tofish.
- If you always launch
- If this is a local setup, change the login shell with
-
If you want to install additional binaries to
~/.local/bin/, trygah helpfor usage. Consult the gah documentation for more details.# e.g., install lazydocker gah install jesseduffield/lazydocker
Here is a brief overview. I recommend browsing the quick start guide of each tool following the link, but only when you need it. Most of them are self-explanatory and intuitive to get started.
- fish - A smart and user-friendly command line shell. Smarter tabs, autocompletion and syntax highlighting built-in.
- Recommended reading: The fish shell tutorial and interactive guide.
- btop - A cool monitoring tool for system resources.
htopalternative. - difftastic: A structural diff tool that understands syntax.
- It provides a more intuitive and readable diff output compared to
difforgit diff, especially for code changes.
- It provides a more intuitive and readable diff output compared to
- dust - A more intuitive version of
duin rust, handy to inspect disk usage. - eza - A modern alternative to
lswith colors and icons. - fd - A simple, fast and user-friendly alternative to
find. - 7z - A file archiver with a high compression ratio.
- fzf - A blazingly fast command-line fuzzy finder.
- lazygit - An intuitive terminal UI for
git.- With usually just a few keystrokes to perform pull, fetch, push, or commit, I found it much easier to use than git commands and all the GUI git tools. It also includes advanced git cherry-picking, rebasing, and stash management features at hand.
- mcat - A versatile viewer that renders many file types (markdown, image/video, pdf, docx, pptx, xlsx, html, etc.) directly in terminal. Very useful for
yazipreview. - mediainfo - Displays technical and tag information about media files. Useful for
yazipreview. - neovim - A hyperextensible Vim-based text editor. My choice of text editor.
- ripgrep - A modern (and much faster) alternative to
grep. Recursively searches directories for a regex pattern. - starship - A minimal, blazing-fast, and infinitely customizable prompt for any shell.
- uv - An extremely fast Python package and project manager, written in Rust.
- I truly recommend this over
condaorvenvfor managing Python environments in most cases. It's a single tool that replacespip,pip-tools,pipx,poetry,pyenv,twine,virtualenv, and more. Plus it's 10-100x faster thanpip.
- I truly recommend this over
- yazi - A blazing fast terminal file manager written in Rust.
- A must have for terminal browsing. Stop
cding around and usinglsto browse files. It has built-in fuzzy search, code highlighting, decompression, and image previews. Please see the quick start docs.
- A must have for terminal browsing. Stop
- zoxide - A smarter
cdcommand that remembers your most used directories and allows you to jump to them quickly.
-
tmux- I usetmuxas my terminal multiplexer. This configuration uses oh my tmux. It includes a status bar with system information, battery status, and more. Some things to note:- Please see the original repository for keybindings and smart usages.
- It adds a more handy prefix
ctrl + a(compared to the defaultctrl + b). - It includes some useful keybindings, such as
<prefix> + h/j/k/lto switch between panes, and<prefix> Ctrl + h/j/k/lto switch between windows.
- It adds a more handy prefix
- My personal tweaks are under the user customizations section in the
~/.tmux.conf.localfile.- The default shell in
tmuxis set tofish. You can change it to your preferred shell by modifying thedefault-shellline. - A fix that enable ssh agent forwarding to work after re-attaching to
tmuxis included. See this blog for more details.
- The default shell in
- Please see the original repository for keybindings and smart usages.
-
fish- I usefishas my shell. The configuration includes some useful functions, abbreviations and aliases. Please see the main configuration file at~/.config/fish/config.fishfor details. Some things to note:zis an alias forzoxide. Try simplyz <partial name of a directory you've been to>to jump to that directory.- The default prompt is set to use
starship, which provides a nice and informative prompt. - The default editor is set to
neovim.vimwill becomenvim. You can comment out the line if you don't want this behavior. ctrl + rto search through your command history withfzf.ctrl + fto search through your files under the current directory withfzf.ctrl + oto open the file manageryaziand will change the current working directory when exiting (the wrapper is configured infunctions/yazi-cd.fish).ls,ll, etc. are mapped toezathat shows colors and icons.- To speed up the shell startup,
conda initis lazy-loaded only after you runcondacommand for the first time.
-
yazi- The configuration files are located at~/.config/yazi/. I basically installed some plugins to enhance the functionality and the look.shift + j/kto navigate 5 times faster in the file list.opt/alt + j/kto seek 5 units up/down in the preview (e.g., see the next page of the previewed text file, or see the next frame of the previewed video).- smart-enter.yazi to open files or enter directories in one key (since I like vim keybindings,
l). - piper.yazi to pipe any shell command as a previewer.
- full-border.yazi to make it look fancier.
- git.yazi to show the status of git file changes in the file list.
- compress.yazi to compress selected files to an archive (shortcut:
ca). - mediainfo.yazi to show thumbnail using
ffmpegand media metadata usingmediainfo(toggle showing metadata:<f9>).
-
lazygit- The configuration file is located at~/.config/lazygit/config.yml. The default diff tool is set todifftastic, which provides a more intuitive diff output.
-
Neovim configuration: Only if you want to go hard-core using Neovim as your main editor in the terminal. I recommend LazyVim as a base setup. It saves a tone of time providing a full-fledged IDE experience out of the box. But still be prepared to spend a fare amount of time to go through all the tools and configure your own version. Check my configuration if you want to take some reference.
-
Zellij: Tired of remembering all the
tmuxshortcuts?zellijis a modern Rust alternative totmuxwith a more intuitive UI, keybindings, and many great features. -
Lazydocker: Similar to
lazygit, but for Docker. It provides a terminal UI for managing Docker containers, images, and volumes. -
nvtop or nvitop for GPU monitoring: If you are working with GPUs, these tools provide a nice terminal UI to monitor GPU usage, memory, and processes.
-
Wanna manage your configuration files gracefully? Check out dotfiles for tutorials and tools. My choice is chezmoi.
If you choose to use this script to install the binaries (instead of using your package manager if you are on a local machine), they are downloaded at install time from their official GitHub releases using gah (vendored and modified in tools/gah). It will automatically detect your system architecture and download the appropriate binaries. All tools, including jq (required by gah) if not already present, are installed to ~/.local/bin/ without root.