Skip to content

Customized Unix Terminal

Project Tracker

This document serves as a guide for how I customize my macOS and Linux terminals. It includes a variety of configurations, settings, and programs that I find useful for my daily workflow. The document is divided into several sections, each focusing on a different aspect of terminal customization.

NOTICE

If you view this document on GitHub or as a standard markdown file, you will not see the interactive elements, such as the details and tabs. To view the document in its entirety, please visit the website.

Useful Programs

The following table contains a list of terminal programs that I find particularly useful. These programs are separated into two categories: Third Party Package Managers (TPPM) and Native Package Managers (NPM).

The Third Party Package Managers section includes programs not installed using the system's default package manager. These programs are typically installed using tools like Homebrew, Pip, Cargo, Npm, Gem, or Git. I've included a brief description of each program and the relevant package manager(s) that can install it.

Git Installations

While most of these programs can be installed via git, they will not be marked as such unless recommended by the program's documentation or myself, or if it's the only other way to install the program.

The Native Package Managers section includes programs that can be installed using the system's default package manager. Since the primary Linux distributions I use are Debian based, all of the programs in this section are confirmed installable via apt. For other Linux distributions, you can check Repology to see if the program is available in your distribution's package manager. Like with TPPM, I've included a brief description for each program and a link with the number of repository families featuring the package.

Programs Description Applicable OS's Available Package Managers Is a Command Other Info
.tmux Oh my tmux! My self-contained, pretty & versatile tmux configuration made with. macOS
Linux
Github No Requires tmux to be installed.
bandwhich Terminal bandwidth utilization tool. macOS
Linux
homebrew version
Crates.io
Yes
bat A cat(1) clone with wings. macOS
Linux
homebrew version
Crates.io
Yes
black The uncompromising Python code formatter. macOS
Linux
homebrew version
PyPI
Yes
cheat Cheat allows you to create and view interactive cheatsheets on the command-line. macOS
Linux
homebrew version Yes
codespell Check code for common misspellings. macOS
Linux
homebrew version
PyPI
Yes
coreutils These are the GNU core utilities. This package is the union of the GNU fileutils, sh-utils, and textutils packages. macOS homebrew version Collection All GNU commands installed via coreutils, are the same as they are on Linux, but prefixed with a g (i.e. gcp for cp).
duf Disk Usage/Free Utility - a better 'df' alternative. macOS
Linux
homebrew version Yes
eza A modern, maintained replacement for ls. macOS
Linux
homebrew version
Crates.io
Yes
ffmpeg FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata. macOS
Linux
homebrew version Yes
fzf A command-line fuzzy finder. macOS
Linux
homebrew version Yes
fzf-tab Replace zsh's default completion selection menu with fzf! macOS
Linux
homebrew version
Github
No
gallery-dl Command-line program to download image galleries and collections from several image hosting sites. macOS
Linux
homebrew version
PyPI
Yes
git Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals. macOS
Linux
homebrew version Yes
git-delta A syntax-highlighting pager for git, diff, and grep output macOS
Linux
homebrew version
Crates.io
No
git-open Type git open to open the GitHub page or website for a repository in your browser. macOS
Linux
homebrew version Yes
git open
gnupg The GNU Privacy Guard macOS
Linux
homebrew version Yes
gpg or gpg2
htop Improved top (interactive process viewer). macOS
Linux
homebrew version Yes
imagemagick Use ImageMagick® to create, edit, compose, or convert digital images. It can read and write images in a variety of formats (over 200) including PNG, JPEG, GIF, WebP, HEIC, SVG, PDF, DPX, EXR and TIFF. macOS
Linux
homebrew version Yes
magick
More info here.
isort A Python utility / library to sort imports. macOS
Linux
homebrew version
PyPI
Yes
lazygit Simple terminal UI for git commands. macOS
Linux
homebrew version Yes
lynis Security and system auditing tool to harden systems. macOS
Linux
homebrew version
Github
Yes Recommended install method: Git.
ncdu ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du'. macOS
Linux
homebrew version Yes
neovim Vim-fork focused on extensibility and usability. macOS
Linux
homebrew version No
nvim
prettier Code formatter for JavaScript, CSS, JSON, GraphQL, Markdown, YAML. macOS
Linux
homebrew version
npm
Yes
pstree List processes as a tree. macOS
Linux
homebrew version Yes
pipenv Python dependency management tool. macOS
Linux
homebrew version
PyPI
Yes
pipx Install and Run Python Applications in Isolated Environments. macOS
Linux
homebrew version
PyPI
Yes
pyenv Simple Python version management. macOS
Linux
homebrew version Yes
pylint It's not just a linter that annoys you! macOS
Linux
homebrew version
PyPI
Yes
shellcheck Shell script analysis tool. macOS
Linux
homebrew version Yes
shellharden Shellharden is a syntax highlighter and a tool to semi-automate the rewriting of scripts to ShellCheck conformance, mainly focused on quoting. macOS
Linux
homebrew version
Crates.io
Yes
terminal-notifier Send macOS User Notifications from the command-line. macOS
Linux
homebrew version
Gem
No Also see the bgnotify plugin.
tmux tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. macOS
Linux
homebrew version
trash-cli Command line interface to the freedesktop.org trashcan. macOS
Linux
homebrew version
PyPI
Collection
tree Display directories as trees (with optional color/HTML output). macOS
Linux
homebrew version Yes
tree-sitter Tree-sitter is a parser generator tool and an incremental parsing library. macOS
Linux
homebrew version
Crates.io
No
wget Wget is a free utility for non-interactive download of files from the Web. macOS
Linux
homebrew version Yes
yt-dlp A feature-rich command-line audio/video downloader. macOS
Linux
homebrew version
PyPI
Yes
zip Compression and file packaging/archive utility. macOS
Linux
homebrew version Yes
zsh UNIX shell (command interpreter). macOS
Linux
homebrew version No
zsh-autosuggestions Fish-like autosuggestions for zsh. macOS
Linux
homebrew version
Github
No Zsh must be installed.
Install instructions.
zsh-completions Additional completion definitions for Zsh. macOS
Linux
homebrew version
Github
No Zsh must be installed.
zsh-syntax-highlighting Fish shell like syntax highlighting for Zsh. macOS
Linux
homebrew version
Github
No Zsh must be installed.
Install instructions.

Applicable Operating Systems: Linux

Programs Description Number of Repository Families Featuring this Package Is a Command Other Info
apt-listchanges Package change history notification tool. Packaging status Yes Specific to Debian based distributions.
Rarely used as a command.
bandwhich Terminal bandwidth utilization tool. Packaging status Yes
bat-cat A cat(1) clone with wings. Packaging status Yes
bat or batcat or bat-cat
black The uncompromising Python code formatter. Packaging status Yes Recommended install method: Homebrew OR Pip.
codespell Check code for common misspellings. Packaging status Yes
deborphan Program that can find unused packages, e.g. libraries. Packaging status Yes Specific to Debian based distributions.
duf Disk Usage/Free Utility - a better 'df' alternative. Packaging status Yes
eza A modern, maintained replacement for ls. Packaging status Yes For the apt package installation, see here.
ffmpeg FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata. Packaging status ???
fzf A command-line fuzzy finder. Packaging status Yes Recommended install method: Git OR Oh My Zsh
gallery-dl Command-line program to download image galleries and collections from several image hosting sites. Packaging status Yes
git Git is a fast, scalable, distributed revision control system with an unusually rich command set that provides both high-level operations and full access to internals. Packaging status Yes
git-delta A syntax-highlighting pager for git, diff, and grep output Packaging status No
gnupg The GNU Privacy Guard Packaging status Yes
gpg or gpg2
htop A cross-platform interactive process viewer. Packaging status Yes
imagemagick Use ImageMagick® to create, edit, compose, or convert digital images. It can read and write images in a variety of formats (over 200) including PNG, JPEG, GIF, WebP, HEIC, SVG, PDF, DPX, EXR and TIFF. Packaging status Yes
magick

More info here.
Recommended install method: Homebrew.
lazygit Simple terminal UI for git commands. Packaging status Yes
lynis Security and system auditing tool to harden systems. Packaging status Yes Recommended install method: Git.
ncdu ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du'. Packaging status Yes
neovim Vim-fork focused on extensibility and usability. Packaging status Yes
nvim
pstree List processes as a tree. Packaging status Yes
pipenv Python dependency management tool. Packaging status Yes
pipx Install and Run Python Applications in Isolated Environments. Packaging status Yes Recommended install method: Homebrew OR Pip.
python-is-python3 symlinks /usr/bin/python to python3. nan No
shellcheck Shell script analysis tool. Packaging status Yes
tmux tmux is a terminal multiplexer: it enables a number of terminals to be created, accessed, and controlled from a single screen. Packaging status Yes
trash-cli Command line interface to the freedesktop.org trashcan. Packaging status Collection Recommended install method: Homebrew OR Pip.
tree Display directories as trees (with optional color/HTML output). nan Yes
yt-dlp A feature-rich command-line audio/video downloader. Packaging status Yes
zip Compression and file packaging/archive utility. Packaging status Yes
zsh UNIX shell (command interpreter). Packaging status No
zsh-autosuggestions Fish-like autosuggestions for zsh. Packaging status No Not a command.
Zsh must be installed.
Recommended install method: Git.
zsh-completions Additional completion definitions for Zsh. Packaging status No Not a command.
Zsh must be installed.
Recommended install method: Git.
zsh-syntax-highlighting Fish shell like syntax highlighting for Zsh. Packaging status No Not a command.
Zsh must be installed.
Recommended install method: Git.

Customizing ZSH Shell

Framework

Oh-my-zsh is my preferred framework due to its popularity, reliability, and consistent updates. As one of the leading zsh frameworks, it made its initial commit on August 23, 2009, allowing it enough time to develop and refine its features.

Below is a list of oh-my-zsh plugins that I use and find to provide useful functionality.

Shell Theme

In combination with oh-my-zsh, I use Powerlevel10k as my shell theme. It's highly configurable and very appealing to the eyes.

ZSH Resource File

Below are tshe configurations for my .zshrc file, divided into two sections: macOS and Linux. The macOS configurations are tailored for macOS, while the other is designed for Linux.

You are welcome to use this resource in any manner you prefer. My intention is to offer it as a guide for structuring your own .zshrc file and to present additional configurations not detailed elsewhere in this document.

My ZSH Resource File
.zshrc
# CodeWhisperer pre block. Keep at the top of this file.
[[ -f "${HOME}/Library/Application Support/codewhisperer/shell/zshrc.pre.zsh" ]] && builtin source "${HOME}/Library/Application Support/codewhisperer/shell/zshrc.pre.zsh"
# If PowerLevel10K's Instant Prompt is enabled, `export GPG_TTY=$(tty)` needs to be
# placed at the top of this file. Find more information here:
# https://unix.stackexchange.com/questions/608842/zshrc-export-gpg-tty-tty-says-not-a-tty/608921#608921
export GPG_TTY=$(tty)

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
    source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS=true

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
HIST_STAMPS="yyyy-mm-dd"

# Which plugins would you like to load?
# Standard plugins can be found in ~/.oh-my-zsh/plugins/*
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
plugins=(colored-man-pages copybuffer copypath copyfile bgnotify)

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
zsh_completion="${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src"
[[ -d $zsh_completion ]] && fpath+=${zsh_completion}

source "$ZSH/oh-my-zsh.sh"


####[ Personal Configurations ]#########################################################
####[[ Aliases ]]#######################################################################
####[[[ Group 1 ]]]#####################################################################


## General aliases.
alias ic="cd ~/Library/Mobile\ Documents/com~apple~CloudDocs"
alias edisk="cd /Volumes && ll"
alias zls="eza"
alias rmdsstore="find . -name '*.DS_Store' -type f -delete"
alias code="open -a 'Visual Studio Code.app' ."
alias formatc="find . -name '*.cs' -type f -exec clang-format --style=file:~/Programs/Mine/Formatter\ Configs/CSharp_clang-format/_clang-format -i {} +"

## Update based aliases.
alias updatezshplugins="bash ~/Programs/mass-git/mass-git -p ~/.oh-my-zsh/custom/plugins/ -r"
alias updatecopilot="bash ~/Programs/mass-git/mass-git -p ~/.config/nvim/pack/github/ -r"
alias updatebrew="brew update && brew upgrade && brew autoremove && brew cleanup && brew doctor"
alias updateomz="omz update"
alias updateall="updatebrew; updateomz; updatecopilot; updatezshplugins"

## GNU command aliases.
alias cp="gcp"
alias mv="gmv"


####[[[ Group 2 ]]]#####################################################################
#### Due to the number of commands that I find to be useful, I've created aliases
#### containing some of these commands. They are specifically commands that I don't
#### often use, but are useful to have on hand. Having these aliases allows me to see
#### a list of these commands, without having to commit them to memeory.

alias lt="echo -e \"
####[ Package Manager installed commands ]##############################################

bandwhich  - Terminal bandwidth utilization tool.
bat        - A cat(1) clone with wings.
codespell  - Check code for common misspellings.
duf        - Disk Usage/Free Utility - a better 'df' alternative.
fzf        - A command-line fuzzy finder.
ncdu       - ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du'.
pstree     - List processes as a tree.
tmux       - Terminal multiplexer.

####[[ Grouped commands ]]##############################################################

lt_conversion - List of programs used for converting the formats of videos, images, etc.
lt_git        - List of programs used for git related commands.


####[ Keyboard combinations ]###########################################################

Ctrl + O - Allows you to copy what you are currently typing, via 'Ctrl' + 'O'.
\""
alias lt_conversion="echo -e \"
########################################################################################
#### [ Image and video formatters ]

ffmpeg - FFmpeg is a collection of libraries and tools to process multimedia content.
magick - Convert between image formats as well as resize an image, blur, crop,
         despeckle, dither, draw on, flip, join, re-sample, and much more.
\""
alias lt_git="echo -e \"
####[ Git Related Commands ]###########################################################

lazygit  - Simple terminal UI for git commands.
git open - Opens the GitHub page for a repo/branch in your browser.
ugit     - ugit helps you undo git commands without much effort.
\""


####[[[ SSH related commands ]]]########################################################


alias hthompson="ssh -p 16449 [email protected]"
alias voidtech="ssh [email protected]"


####[[ Environmental Variables ]]#######################################################


# 1Password auth socket.
export SSH_AUTH_SOCK="$HOME/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

## NVM setup...
export NVM_DIR="$HOME/.nvm"
[ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh"  # This loads nvm
[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/usr/local/opt/nvm/etc/bash_completion.d/nvm"  # This loads nvm bash_completion

# Path purpose:
#   /usr/local/opt/curl/bin:       ...
#   /usr/local/sbin:               ???
#   /usr/local/opt/openjdk@17/bin: Prefered java version.
#   /usr/local/opt/node@18/bin:    Prefered node version.
export PATH="/usr/local/opt/curl/bin:/usr/local/sbin:/usr/local/opt/openjdk@17/bin:/usr/local/opt/node@18/bin:$PATH"

# Modifies colors of files and directories when using `ls`.
export LSCOLORS="exgxfxDxcxegDaabagacaD"
## Version of LSCOLORS compatible with zsh and GNU based commands.
## You can find more information about LS_COLORS and why it's needed in addition to LSCOLORS,
## here: https://github.com/ohmyzsh/ohmyzsh/issues/6060#issuecomment-327934559
export LS_COLORS="di=34:ln=36:so=35:pi=1;33:ex=32:bd=34;46:cd=1;33;40:su=30;41:sg=30;46:tw=30;42:ow=30;1;43"

## Editor configurations.
export EDITOR=nvim
export VISUAL=$EDITOR


####[[ Sourced Files ]]#################################################################


# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
zsh_syntax_highlighting="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
[[ -f $zsh_syntax_highlighting ]] && source "$zsh_syntax_highlighting"

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
zsh_autosuggestions="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
[[ -f $zsh_autosuggestions ]] && source "$zsh_autosuggestions"

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/Aloxaf/fzf-tab ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab
fzf_tab="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab/fzf-tab.plugin.zsh"
[[ -f $fzf_tab ]] && hash fzf 2>/dev/null && source "$fzf_tab"

# Enable the use of '1password-cli' plugins.
source "$HOME/.config/op/plugins.sh"


####[[ Zsh Style Configurations ]]######################################################


# Disable sort when completing `git checkout`.
zstyle ':completion:*:git-checkout:*' sort false
# Set descriptions format to enable group support.
# NOTE: Don't use escape sequences here, fzf-tab will ignore them.
zstyle ':completion:*:descriptions' format '[%d]'
# Set list-colors to enable filename colorizing.
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
## Preview directory's content with `eza` when completing `cd`.
hash eza 2>/dev/null \
&& zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always $realpath'
# Switch group using `<` and `>`.
zstyle ':fzf-tab:*' switch-group '<' '>'


####[[ Others ]]########################################################################
#### These are generally configurations set up by setup scripts or other programs.


# CodeWhisperer post block. Keep at the bottom of this file.
[[ -f "${HOME}/Library/Application Support/codewhisperer/shell/zshrc.post.zsh" ]] && builtin source "${HOME}/Library/Application Support/codewhisperer/shell/zshrc.post.zsh"
.zshrc
# If PowerLevel10K's Instant Prompt is enabled, `export GPG_TTY=$(tty)` needs to be
# placed at the top of this file. Find more information here:
# https://unix.stackexchange.com/questions/608842/zshrc-export-gpg-tty-tty-says-not-a-tty/608921#608921
export GPG_TTY=$(tty)

# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
    source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi

# Path to your oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"

# Set name of the theme to load --- if set to "random", it will
# load a random theme each time oh-my-zsh is loaded, in which case,
# to know which specific one was loaded, run: echo $RANDOM_THEME
# See https://github.com/ohmyzsh/ohmyzsh/wiki/Themes
ZSH_THEME="powerlevel10k/powerlevel10k"

# Uncomment the following line to use case-sensitive completion.
# CASE_SENSITIVE="true"

# Uncomment the following line to use hyphen-insensitive completion.
# Case-sensitive completion must be off. _ and - will be interchangeable.
# HYPHEN_INSENSITIVE="true"

# Uncomment the following line if pasting URLs and other text is messed up.
# DISABLE_MAGIC_FUNCTIONS=true

# Uncomment the following line to enable command auto-correction.
# ENABLE_CORRECTION="true"

# Uncomment the following line if you want to change the command execution time
# stamp shown in the history command output.
# You can set one of the optional three formats:
# "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
# or set a custom format using the strftime function format specifications,
# see 'man strftime' for details.
HIST_STAMPS="yyyy-mm-dd"

# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)
# Add wisely, as too many plugins slow down shell startup.
#plugins=(git colored-man-pages copybuffer copypath copyfile bgnotify)  # Desktop
plugins=(git colored-man-pages)  # Server

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/zsh-users/zsh-completions ${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions
zsh_completion="${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src"
[[ -d $zsh_completion ]] && fpath+=${zsh_completion}

source "$ZSH/oh-my-zsh.sh"


####[ Personal Configurations ]#########################################################
####[[ Aliases ]]#######################################################################
####[[[ Group 1 ]]]#####################################################################


## General aliases.
alias zls="eza"

## Update based aliases.
alias updatezshplugins="bash ~/Programs/mass-git/mass-git -p ~/.oh-my-zsh/custom/plugins/ -r"
alias updatecopilot="bash ~/Programs/mass-git/mass-git -p ~/.config/nvim/pack/github/ -r"
alias updateapt="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y"
alias updateomz="omz update"
alias updateall="updateapt; updateomz; updatecopilot; updatezshplugins"


####[[[ Group 2 ]]]#####################################################################
#### Due to the number of commands that I find to be useful, I've created aliases
#### containing some of these commands. They are specifically commands that I don't
#### often use, but are useful to have on hand. Having these aliases allows me to see
#### a list of these commands, without having to commit them to memeory.

alias lt="echo -e \"
####[ Package Manager installed commands ]##############################################

bandwhich  - Terminal bandwidth utilization tool.
bat        - A cat(1) clone with wings.
cheat      - Allows you to create and view interactive cheatsheets on the command-line.
codespell  - Check code for common misspellings.
duf        - Disk Usage/Free Utility - a better 'df' alternative.
fzf        - A command-line fuzzy finder.
ncdu       - ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du'.
pstree     - List processes as a tree.
tmux       - Terminal multiplexer.

####[[ Grouped commands ]]##############################################################

lt_conversion - List of programs used for converting the formats of videos, images, etc.
lt_git        - List of programs used for git related commands.


####[ Keyboard combinations ]###########################################################

Ctrl + O - Allows you to copy what you are currently typing, via 'Ctrl' + 'O'.
\""
alias lt_conversion="echo -e \"
########################################################################################
#### [ Image and video formatters ]

ffmpeg - FFmpeg is a collection of libraries and tools to process multimedia content.
magick - Convert between image formats as well as resize an image, blur, crop,
         despeckle, dither, draw on, flip, join, re-sample, and much more.
\""
alias lt_git="echo -e \"
####[ Git Related Commands ]###########################################################

lazygit  - Simple terminal UI for git commands.
git open - Opens the GitHub page for a repo/branch in your browser.
ugit     - ugit helps you undo git commands without much effort.
\""


####[[ Environmental Variables ]]#######################################################


## Modifies the colors of files and directories in the terminal.
export LS_COLORS="di=34:ln=36:so=35:pi=1;33:ex=32:bd=34;46:cd=1;33;40:su=30;41:sg=30;46:tw=30;42:ow=30;1;43"
# This is set in the Zsh Style Configurations section.
#zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}

# PATH value...
export PATH="$PATH:$HOME/.local/bin"


####[[ Sourced Files ]]#################################################################


# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
zsh_syntax_highlighting="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"
[[ -f $zsh_syntax_highlighting ]] && source "$zsh_syntax_highlighting"

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
zsh_autosuggestions="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh"
[[ -f $zsh_autosuggestions ]] && source "$zsh_autosuggestions"

# Zsh "plugin" installed via git and the following command:
# git clone https://github.com/Aloxaf/fzf-tab ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab
fzf_tab="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab/fzf-tab.plugin.zsh"
[[ -f $fzf_tab ]] && hash fzf 2>/dev/null && source "$fzf_tab"


####[[ Zsh Style Configurations ]]######################################################


# Disable sort when completing `git checkout`.
zstyle ':completion:*:git-checkout:*' sort false
# Set descriptions format to enable group support.
# NOTE: Don't use escape sequences here, fzf-tab will ignore them.
zstyle ':completion:*:descriptions' format '[%d]'
# Set list-colors to enable filename colorizing.
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
## Preview directory's content with `eza` when completing `cd`.
hash eza 2>/dev/null \
&& zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --color=always $realpath'
# Wwitch group using `<` and `>`.
zstyle ':fzf-tab:*' switch-group '<' '>'


####[[ Others ]]########################################################################
#### These are generally configurations set up by setup scripts or other programs.

Oh-my-zsh Plugins

This is a list of all the oh-my-zsh plugins that I use and find to provide useful functionality.

Plugins Description Is a Command Other Info
git The git plugin provides many aliases and a few useful functions Collection
colored-man-pages Adds colors to man pages No
copybuffer Allows you to copy what you are currently typing, via Ctrl+O Yes Key Combination: Ctrl+O
copypath Copies the path of your working directory Yes
copyfile Copies the contents of a file Yes
bgnotify cross-platform background notifications for long running commands No Extra install instructions

Custom Aliases

Below is a list of aliases that are in my .zshrc files. They are broken up into two groups: Group 1 and Group 2. Group 1 contains general aliases, while Group 2 contains aliases listing categorized commands. Most of these commands are programs mentioned in Useful Programs, that I don't frequently use, but still want to have quick access to.

.zshrc
####[[ Aliases ]]#######################################################################
####[[[ Group 1 ]]]#####################################################################


## General aliases.
alias ic="cd ~/Library/Mobile\ Documents/com~apple~CloudDocs"
alias edisk="cd /Volumes && ll"
alias zls="eza"
alias rmdsstore="find . -name '*.DS_Store' -type f -delete"
alias code="open -a 'Visual Studio Code.app' ."
alias formatc="find . -name '*.cs' -type f -exec clang-format --style=file:~/Programs/Mine/Formatter\ Configs/CSharp_clang-format/_clang-format -i {} +"

## Update based aliases.
alias updatezshplugins="bash ~/Programs/mass-git/mass-git -p ~/.oh-my-zsh/custom/plugins/ -r"
alias updatecopilot="bash ~/Programs/mass-git/mass-git -p ~/.config/nvim/pack/github/ -r"
alias updatebrew="brew update && brew upgrade && brew autoremove && brew cleanup && brew doctor"
alias updateomz="omz update"
alias updateall="updatebrew; updateomz; updatecopilot; updatezshplugins"

## GNU command aliases.
alias cp="gcp"
alias mv="gmv"


####[[[ Group 2 ]]]#####################################################################
#### Due to the number of commands that I find to be useful, I've created aliases
#### containing some of these commands. They are specifically commands that I don't
#### often use, but are useful to have on hand. Having these aliases allows me to see
#### a list of these commands, without having to commit them to memeory.

alias lt="echo -e \"
####[ Package Manager installed commands ]##############################################

bandwhich  - Terminal bandwidth utilization tool.
bat        - A cat(1) clone with wings.
codespell  - Check code for common misspellings.
duf        - Disk Usage/Free Utility - a better 'df' alternative.
fzf        - A command-line fuzzy finder.
ncdu       - ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du'.
pstree     - List processes as a tree.
tmux       - Terminal multiplexer.

####[[ Grouped commands ]]##############################################################

lt_conversion - List of programs used for converting the formats of videos, images, etc.
lt_git        - List of programs used for git related commands.


####[ Keyboard combinations ]###########################################################

Ctrl + O - Allows you to copy what you are currently typing, via 'Ctrl' + 'O'.
\""
alias lt_conversion="echo -e \"
########################################################################################
#### [ Image and video formatters ]

ffmpeg - FFmpeg is a collection of libraries and tools to process multimedia content.
magick - Convert between image formats as well as resize an image, blur, crop,
         despeckle, dither, draw on, flip, join, re-sample, and much more.
\""
alias lt_git="echo -e \"
####[ Git Related Commands ]###########################################################

lazygit  - Simple terminal UI for git commands.
git open - Opens the GitHub page for a repo/branch in your browser.
ugit     - ugit helps you undo git commands without much effort.
\""
.zshrc
####[[ Aliases ]]#######################################################################
####[[[ Group 1 ]]]#####################################################################


## General aliases.
alias zls="eza"

## Update based aliases.
alias updatezshplugins="bash ~/Programs/mass-git/mass-git -p ~/.oh-my-zsh/custom/plugins/ -r"
alias updatecopilot="bash ~/Programs/mass-git/mass-git -p ~/.config/nvim/pack/github/ -r"
alias updateapt="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y"
alias updateomz="omz update"
alias updateall="updateapt; updateomz; updatecopilot; updatezshplugins"


####[[[ Group 2 ]]]#####################################################################
#### Due to the number of commands that I find to be useful, I've created aliases
#### containing some of these commands. They are specifically commands that I don't
#### often use, but are useful to have on hand. Having these aliases allows me to see
#### a list of these commands, without having to commit them to memeory.

alias lt="echo -e \"
####[ Package Manager installed commands ]##############################################

bandwhich  - Terminal bandwidth utilization tool.
bat        - A cat(1) clone with wings.
cheat      - Allows you to create and view interactive cheatsheets on the command-line.
codespell  - Check code for common misspellings.
duf        - Disk Usage/Free Utility - a better 'df' alternative.
fzf        - A command-line fuzzy finder.
ncdu       - ncdu (NCurses Disk Usage) is a curses-based version of the well-known 'du'.
pstree     - List processes as a tree.
tmux       - Terminal multiplexer.

####[[ Grouped commands ]]##############################################################

lt_conversion - List of programs used for converting the formats of videos, images, etc.
lt_git        - List of programs used for git related commands.


####[ Keyboard combinations ]###########################################################

Ctrl + O - Allows you to copy what you are currently typing, via 'Ctrl' + 'O'.
\""
alias lt_conversion="echo -e \"
########################################################################################
#### [ Image and video formatters ]

ffmpeg - FFmpeg is a collection of libraries and tools to process multimedia content.
magick - Convert between image formats as well as resize an image, blur, crop,
         despeckle, dither, draw on, flip, join, re-sample, and much more.
\""
alias lt_git="echo -e \"
####[ Git Related Commands ]###########################################################

lazygit  - Simple terminal UI for git commands.
git open - Opens the GitHub page for a repo/branch in your browser.
ugit     - ugit helps you undo git commands without much effort.
\""

Modifying CLI Colors

The terminal colors that are used for folders, files, and other items in the command line interface can be customized using the LS_COLORS (macOS & Linux) and LSCOLORS (macOS) environment variables. If you want to modify these colors, you can do so by setting the LS_COLORS or LSCOLORS variable in your .zshrc file.

LS_COLORS & LSCOLORS Explained

On macOS, both LSCOLORS and LS_COLORS are necessary for specifying terminal colors. LSCOLORS is used for commands like ls, determining the colors in the command line interface, whereas LS_COLORS is used by zsh for similar purposes. In contrast, Linux only requires LS_COLORS, which is employed by both the ls command and zsh.

The underlying reason for this difference lies in the distinct versions of the ls command on macOS (FreeBSD version) and Linux (GNU version). macOS's ls command relies on LSCOLORS for color settings, while Linux uses LS_COLORS, each with its unique formatting. Moreover, since zsh recognizes only the LS_COLORS format, it's imperative to use it on macOS to ensure proper display and functionality of CLI colors.

Included below is a key that explains the values of LSCOLORS and LS_COLORS in my configurations:

LSCOLORS LS_COLORS Type Text Color Foreground/Background Color
ex di=34 Directories blue default
gx ln=36 Symbolic link cyan default
fx so=35 Socket magenta default
Dx pi=1;33 Pipe bold yellow default
cx ex=32 Executable green default
eg bd=34;46 Block special green cyan
Da cd=1;33;40 Character special bold yellow black
ab su=30;41 Executable with setuid bit set black red
ag sg=30;46 Executable with setgid bit set black cyan
ac tw=30;42 Directory writeable to others (with a sticky bit) black green
aD ow=30;1;43 Directory writeable to others (without sticky bit) black bold yellow

For an in-depth understanding of LS_COLORS and LSCOLORS, I recommend visiting this gist.

Below are my configurations for both macOS and Linux systems. To apply these settings, simply insert the following code into your ~/.zshrc file:

CLI Color Configuration
1
2
3
4
5
6
7
# Modifies colors of files and directories when using `ls`.
export LSCOLORS="exgxfxDxcxegDaabagacaD"
## Version of LSCOLORS compatible with zsh and GNU based commands.
## You can find more information about LS_COLORS and why it's needed in addition to LSCOLORS,
## here: https://github.com/ohmyzsh/ohmyzsh/issues/6060#issuecomment-327934559
export LS_COLORS="di=34:ln=36:so=35:pi=1;33:ex=32:bd=34;46:cd=1;33;40:su=30;41:sg=30;46:tw=30;42:ow=30;1;43"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
CLI Color Configuration
1
2
3
## Modifies the colors of files and directories in the terminal.
export LS_COLORS="di=34:ln=36:so=35:pi=1;33:ex=32:bd=34;46:cd=1;33;40:su=30;41:sg=30;46:tw=30;42:ow=30;1;43"
zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}

You can additionally modify the shading and appearance of the CLI colors by adjusting the ANSI-color scheme in your terminal profile. This can be done manually, with guides available for both macOS and Linux (gnome specific instructions). Alternatively, you can use my custom profile schemes, which are detailed in the Terminal Profile section.

Neovim Resource File

Due to the extensibility and community of Neovim, I have chosen it as my primary text editor, favoring it over the traditional Vi or Vim. Below are the configurations for my init.vim file, which is located in the ~/.config/nvim/ directory. The configurations are divided into two sections: with and without vim-plug plugins.

With Vim-Plug Plugins

The following configurations modify the behavior and appearance of vim. To use these settings, you'll first need to install vim-plug, a plugin manager for vim. While other vim package managers can be used, the configurations are tailored specifically for vim-plug.

After installing vim-plug, copy the code below into your ~/.config/nvim/init.vim file. With init.vim open in nvim, initiate the plugin installation by entering :source % and :PlugInstall as separate commands. This will prompt vim-plug to begin the installation of the plugins outlined in the configurations below.

Note

When using :source %, you can ignore any errors that might occur, as they are (most likely) a result of nvim looking for the plugins that have yet to be installed.

Vim Plugin Information

Here is a list of all the plugins listed in init.vim, along with a description of what they do.

Plugins Description
HiPhish/rainbow-delimiters.nvim Rainbow delimiters for Neovim with Tree-sitter.
vim-airline/vim-airline Lean & mean status/tabline for vim that's light as air.
vim-airline/vim-airline-themes A collection of themes for vim-airline.
morhetz/gruvbox Retro groove color scheme for Vim.
dense-analysis/ale Check syntax in Vim asynchronously and fix files, with Language Server Protocol (LSP) support.
ntpeters/vim-better-whitespace Better whitespace highlighting for Vim.
nvim-treesitter/nvim-treesitter Nvim Treesitter configurations and abstraction layer.
mechatroner/rainbow_csv Highlight columns in CSV and TSV files and run queries in SQL-like language.
init.vim
""""[ vim-plug Configurations ]"""""""""""""""""""""""""""""""""""""""""""""""""""""""""


call plug#begin(stdpath('data') . '/plugged')
" Make sure you use single quotes

" Vim help for vim-plug itself
Plug 'junegunn/vim-plug'

" Rainbow delimiters for Neovim with Tree-sitter.
Plug 'HiPhish/rainbow-delimiters.nvim'
" Lean & mean status/tabline for vim that's light as air.
Plug 'vim-airline/vim-airline'
" A collection of themes for vim-airline.
Plug 'vim-airline/vim-airline-themes'
" Retro groove color scheme for Vim.
Plug 'sainnhe/gruvbox-material'
" Check syntax in Vim asynchronously and fix files, with Language Server Protocol (LSP)
" support.
Plug 'dense-analysis/ale'
" Better whitespace highlighting for Vim.
Plug 'ntpeters/vim-better-whitespace'
" An incremental parsing system for programming tools.
Plug 'nvim-treesitter/nvim-treesitter', {'do': ':TSUpdate'}
" Highlight columns in CSV and TSV files and run queries in SQL-like language.
Plug 'mechatroner/rainbow_csv'

" Initialize plugin system
call plug#end()
"
" Brief help:
"   PlugInstall  - Install plugins
"   PlugUpdate   - Install or update plugins
"   PlugClean    - Remove unlisted plugins (bang version will clean without prompt)
"   PlugUpgrade  - Upgrade vim-plug itself
"   PlugStatus   - Check the status of plugins
"   PlugDiff     - Examine changes from the previous update and the pending changes
"   PlugSnapshot - Generate script for restoring the current snapshot of the plugins


""""[ Non-vim-plug Related Configurations ]"""""""""""""""""""""""""""""""""""""""""""""


"" Overwrites specified default setting.
set tabstop=4       " Tells vim how many columns a tab counts for.
set shiftwidth=4    " 'Levels of indentation', where a level of indentation is
                    " shiftwidth columns of whitespace.
set expandtab       " Ensure that when you hit tab it will actually use spaces.
set colorcolumn=88  " Set a colored line at column 88 in every row.

"" Markdown files
autocmd Filetype markdown setlocal colorcolumn=0
"" TXT files
autocmd Filetype text setlocal colorcolumn=0
"" Java
autocmd Filetype java setlocal colorcolumn=94
"" C#
autocmd Filetype cs setlocal colorcolumn=120
"" HTML
autocmd Filetype html setlocal colorcolumn=100 tabstop=2 shiftwidth=2 nowrap
"" CSS
autocmd Filetype css setlocal colorcolumn=100 tabstop=2 shiftwidth=2 nowrap
"" Vue
autocmd Filetype vue setlocal colorcolumn=100 tabstop=2 shiftwidth=2


""""[ vim-plug Plugin Configurations ]""""""""""""""""""""""""""""""""""""""""""""""""""


" Font: Power Line Font
set guifont=MesloLGS_NF:h12

"" Plugin: gruvbox-material
colorscheme gruvbox-material
set background=dark
let g:gruvbox_material_foreground = 'original'
let g:gruvbox_material_enable_bold = 1
let g:gruvbox_material_enable_italic = 1

"" Plugin: vim-airline
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#ale#enabled = 1
let g:airline_powerline_fonts = 1

"" Plugin: better-whitespace
let g:better_whitespace_enabled = 1
let g:strip_whitespace_on_save = 1

"" Plugin: ale
"let g:ale_use_neovim_diagnostics_api = 0


""""[ Useful Commands ]"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""


" :NERDTree        - Opens NERDTree file system explorer.
" :StripWhitespace - Clean extra whitespace.
" :ALEInfo         - Show ALE information.
" :ALEToggle       - Toggle ALE on/off.
" :TSInstall       - Install treesitter parsers.
" :TSUpdate        - Update treesitter parsers.
" :TSInstallInfo   - Show treesitter information.

Without Vim-Plug Plugins

If you prefer not to use all the features offered by vim-plug, you can opt for a more basic setup by incorporating the configurations listed below into your .vimrc file. These adjustments modify certain default settings of vim without altering the core functionality, providing a simpler, more streamlined experience while maintaining the essence of vim's default behavior.

init.vim
"" Overwrites specified default setting.
set tabstop=4       " Tells vim how many columns a tab counts for.
set shiftwidth=4    " 'Levels of indentation', where a level of indentation is
                    " shiftwidth columns of whitespace.
set expandtab       " Ensure that when you hit tab it will actually use spaces.
set colorcolumn=88  " Set a colored line at column 88 in every row.

"" Markdown files
autocmd Filetype markdown setlocal colorcolumn=0
"" TXT files
autocmd Filetype text setlocal colorcolumn=0
"" Java
autocmd Filetype java setlocal colorcolumn=94
"" C#
autocmd Filetype cs setlocal colorcolumn=120
"" HTML
autocmd Filetype html setlocal colorcolumn=100 tabstop=2 shiftwidth=2 nowrap
"" CSS
autocmd Filetype css setlocal colorcolumn=100 tabstop=2 shiftwidth=2 nowrap
"" Vue
autocmd Filetype vue setlocal colorcolumn=100 tabstop=2 shiftwidth=2

Neovim GitHub Copilot

...coming soon...

Installed TreeSitter Parsers

...coming soon...

Terminal Profile

My custom terminal profile is a modified version of the Basic profile that comes pre-installed on macOS. To add it to your list of profiles, follow the instructions below:

  1. Download the terminal profile using the following link: Terminal Profile
  2. Open a terminal window.
  3. Click on Preferences... ==> Profiles ==> the gear icon at the bottom left of the window ==> Import... ==> locate and click on the 'Basic (Modified).terminal' tab
  4. Click on the new terminal profile, then press the "Default" button located at the bottom of the window.

My custom terminal profile is a based on the Terminal Profile that I use on macOS. To add it to your list of profiles, follow the instructions below:

  1. Download the terminal profile using the following link: Terminal Profile
  2. Open a terminal window.
  3. Enter the following command to import the profiles: dconf load /org/gnome/terminal/legacy/profiles:/ < LOCATION_OF_DOWNLOADED_FILE

Warning

Using the above dconf command will overwrite all existing profiles


Last update: April 25, 2024