This document serves as a guide for how I customize my terminal in macOS and Linux. It includes a variety of configurations, settings, and programs that I find helpful for my daily workflow. The document is divided into several sections, each focusing on a different aspect of terminal customization.
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 TPPM section features programs that can be installed using package managers like Homebrew, Pip, Cargo, Npm, Gem, or Git(1). For each program, I've included a brief description, the operating systems it supports, and the package managers available for installation.
While most of these programs can be installed via git, they will only be marked as such if recommended by the program's documentation or myself, or if it's the only available installation method.
The NPM section lists programs that can be installed using the system's default package manager. Since the primary Debian- and Arch-based Linux based distributions, all the programs in this section are confirmed to be installable via apt or pacman. For other Linux distributions, you can check Repology to see if the program is available in your distribution's package manager. Similar to the TPPM section, I've included additional information such as a brief description for each program and a link to its Repology page.
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.
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.
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.
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.
Yes magick
More info here. Recommended install method: Homebrew.
Not a command. Zsh must be installed. Recommended install method: Git.
Customizing ZSH
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 Starship as my shell theme. Starship is a fast, minimal, and highly customizable shell prompt that displays information about the current directory, git branch, and other relevant details. It is written in Rust, making it very fast and lightweight.
As a note, I previously used Powerlevel10k, which is another excellent shell theme. However, as of May 21, 2024, Powerlevel10k has entered a "life support" mode. In the maintainer's words, "The project has very limited support", with "no new features are in the works", "most bugs will go unfixed", and "help requests will be ignored". As such, I decided to switch to an actively maintained project and mature alternative, Starship.
ZSH Resource File
Below are the configurations for my .zshrc file, divided into two sections: one for macOS and one for Linux. Each section is tailored to its respective operating system.
You're welcome to use this resource however you like. 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.
# Path to your oh-my-zsh installation.exportZSH="$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=""# 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"# Disable audo updates for ohmyzsh. This is taken care of by chezmoi.DISABLE_AUTO_UPDATE="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.# MAYBE: Add `command-not-found` plugin.plugins=(colored-man-pagescopybuffercopypathcopyfilebgnotify)# 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-completionszsh_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.aliasic="cd ~/Library/Mobile\ Documents/com~apple~CloudDocs"aliasedisk="cd /Volumes && ll"aliaszls="eza"aliasrmdsstore="find . -name '*.DS_Store' -type f -delete"aliascode="open -a 'Visual Studio Code.app' ."aliasformatc="find . -name '*.cs' -type f -exec clang-format --style='file:$HOME/Programs/Mine/Formatter Configs/CSharp_clang-format/_clang-format' -i {} +"aliasupdatebrew="brew update && brew upgrade && brew autoremove && brew cleanup && brew doctor"###### [ 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.###aliaslt="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'.\""aliaslt_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.\""aliaslt_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 ]]######################################################## 1Password auth socket.exportSSH_AUTH_SOCK="$HOME/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"# 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.# /usr/local/opt/ruby/bin: Prefered ruby version.exportPATH="/usr/local/opt/curl/bin:/usr/local/sbin:/usr/local/opt/openjdk@17/bin:/usr/local/opt/node@18/bin:/usr/local/opt/ruby/bin:$PATH"# Modifies the colors of files and directories when using `ls`.exportLSCOLORS="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-327934559exportLS_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"## Set default editor.ifhashnvim2>/dev/null;thenexportEDITOR=nvim
exportVISUAL=$EDITORfi# Node Version Manager (NVM) configurations.exportNVM_DIR="$HOME/.nvm"####[[ Sourced Files ]]################################################################### Load NVM.[-s"$NVM_DIR/nvm.sh"]&&\."$NVM_DIR/nvm.sh"# This loads nvm[-s"$NVM_DIR/bash_completion"]&&\."$NVM_DIR/bash_completion"# This loads nvm bash_completion## 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-highlightingzsh_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-autosuggestionszsh_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-tabfzf_tab="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab/fzf-tab.plugin.zsh"[[-f$fzf_tab]]&&hashfzf2>/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:*'sortfalse# 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`.hasheza2>/dev/null\&&zstyle':fzf-tab:complete:cd:*'fzf-preview'eza -1 --color=always $realpath'# Switch group using `<` and `>`.zstyle':fzf-tab:*'switch-group'<''>'####[[ End of File Configurations ]]######################################################## These are configurations that are specified to be placed at the end of the file, by#### the developer/documentation.# Initialize Starship prompt, if it is installed and $ZSH_THEME is not set.hashstarship2>/dev/null\&&[[-z$ZSH_THEME]]\&&eval"$(starshipinitzsh)"####[[ Others ]]############################################################################ These are generally configurations set up by setup scripts or other programs.
# Path to your oh-my-zsh installation.exportZSH="$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=""# 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"# Disable audo updates for ohmyzsh. This is taken care of by chezmoi.DISABLE_AUTO_UPDATE="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=(colored-man-pages copybuffer copypath copyfile bgnotify command-not-found) # Desktopplugins=(colored-man-pagescommand-not-found)# 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-completionszsh_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.aliaszls="eza"aliasformatc="find . -name '*.cs' -type f -exec clang-format --style='file:$HOME/Programs/Mine/Formatter Configs/CSharp_clang-format/_clang-format' -i {} +"hashxdg-open2>/dev/null&&aliasopen="xdg-open"## Update based aliases.aliasupdateapt="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean"aliasupdatepacman="sudo pacman -Syu && yay && yay -Yc"###### [ 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.###aliaslt="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'.\""aliaslt_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.\""aliaslt_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 ]]######################################################## PATH value...exportPATH="$PATH:$HOME/.local/bin:/opt/nvim-linux64/bin"# Modifies the colors of files and directories in the terminal.exportLS_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"## Set default editor.ifhashnvim2>/dev/null;thenexportEDITOR=nvim
exportVISUAL=$EDITORfi# Node Version Manager (NVM) configurations.exportNVM_DIR="$HOME/.nvm"####[[ Sourced Files ]]################################################################### Load NVM.[-s"$NVM_DIR/nvm.sh"]&&\."$NVM_DIR/nvm.sh"# This loads nvm[-s"$NVM_DIR/bash_completion"]&&\."$NVM_DIR/bash_completion"# This loads nvm bash_completion## Source the plugins.sh file for the `op` command.[[-f$HOME/.config/op/plugins.sh]]\&&source"$HOME/.config/op/plugins.sh"# 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-highlightingzsh_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-autosuggestionszsh_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-tabfzf_tab="${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/fzf-tab/fzf-tab.plugin.zsh"[[-f$fzf_tab]]&&hashfzf2>/dev/null&&source"$fzf_tab"####[[ Zsh Style Configurations ]]####################################################### Disable sort when completing `git checkout`.zstyle':completion:*:git-checkout:*'sortfalse# 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`.hasheza2>/dev/null\&&zstyle':fzf-tab:complete:cd:*'fzf-preview'eza -1 --color=always $realpath'# Switch group using `<` and `>`.zstyle':fzf-tab:*'switch-group'<''>'####[[ End of File Configurations ]]######################################################## These are configurations that are specified to be placed at the end of the file, by#### the developer/documentation.# Initialize Starship prompt, if it is installed and $ZSH_THEME is not set.hashstarship2>/dev/null\&&[[-z$ZSH_THEME]]\&&eval"$(starshipinitzsh)"####[[ Others ]]############################################################################ These are generally configurations set up by setup scripts or other programs.
Oh-my-zsh Plugins
Below is a list of all the oh-my-zsh plugins that I use and find particularly useful.
This plugin uses the command-not-found package for zsh to provide suggested packages to be installed if a command cannot be found.
No
Custom Aliases
Below is a list of aliases from my .zshrc files, organized into two groups: Group 1 and Group 2. Group 1 contains general aliases, while Group 2 includes aliases for categorized commands. Many of these commands are programs mentioned in the Useful Programs section that I don't use frequently but still want quick access to.
####[[ Aliases ]]############################################################################# [ Group 1 ]##### General aliases.aliasic="cd ~/Library/Mobile\ Documents/com~apple~CloudDocs"aliasedisk="cd /Volumes && ll"aliaszls="eza"aliasrmdsstore="find . -name '*.DS_Store' -type f -delete"aliascode="open -a 'Visual Studio Code.app' ."aliasformatc="find . -name '*.cs' -type f -exec clang-format --style='file:$HOME/Programs/Mine/Formatter Configs/CSharp_clang-format/_clang-format' -i {} +"aliasupdatebrew="brew update && brew upgrade && brew autoremove && brew cleanup && brew doctor"###### [ 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.###aliaslt="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'.\""aliaslt_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.\""aliaslt_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.\""
####[[ Aliases ]]############################################################################# [ Group 1 ]##### General aliases.aliaszls="eza"aliasformatc="find . -name '*.cs' -type f -exec clang-format --style='file:$HOME/Programs/Mine/Formatter Configs/CSharp_clang-format/_clang-format' -i {} +"hashxdg-open2>/dev/null&&aliasopen="xdg-open"## Update based aliases.aliasupdateapt="sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt autoclean"aliasupdatepacman="sudo pacman -Syu && yay && yay -Yc"###### [ 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.###aliaslt="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'.\""aliaslt_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.\""aliaslt_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
You can customize the terminal colors for folders, files, and other items in the terminal by setting the LS_COLORS (Linux & macOS) or LSCOLORS (macOS) environment variables. To modify these colors, add the appropriate LS_COLORS or LSCOLORS variable to your .zshrc file.
LS_COLORS & LSCOLORS Explained
On macOS, both LSCOLORS and LS_COLORS are necessary for specifying terminal colors. The LSCOLORS environment variable is used by commands like ls to determine the colors displayed in the terminal, while LS_COLORS is used by zsh for similar purposes. In contrast, Linux only requires LS_COLORS, which is utilized by both commands like ls and zsh.
This difference arises from the distinct versions of the ls command on macOS and Linux. macOS employs the FreeBSD version of ls, which relies on LSCOLORS for color settings, whereas Linux uses the GNU version, which depends on LS_COLORS. Each variable has its own unique formatting. Additionally, since zsh recognizes only the LS_COLORS format, it's important to set this variable 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 add the following code to your ~/.zshrc file:
# Modifies the colors of files and directories when using `ls`.exportLSCOLORS="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-327934559exportLS_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"# Set list-colors to enable filename colorizing.zstyle':completion:*'list-colors${(s.:.)LS_COLORS}
# Modifies the colors of files and directories in the terminal.exportLS_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"# Set list-colors to enable filename colorizing.zstyle':completion:*'list-colors${(s.:.)LS_COLORS}
You can further modify the shading and appearance of 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 (specific to GNOME). Alternatively, you can use my custom profile schemes, which are detailed in the Terminal Profile section.
Neovim Resource File
Due to Neovim's extensibility and active community, I have chosen it as my primary text editor, preferring it over the traditional Vi or Vim. Below are the configurations for my init.vim file. The configurations are organized into two sections: one with plugins and one without.
With Plugins
The following configurations modify the behavior and appearance of Neovim. To use these settings, you'll first need to install vim-plug, a plugin manager for Vim. While other Vim package managers are available, these configurations are specifically tailored for vim-plug.
After installing vim-plug, copy the code below into your ~/.config/nvim/init.vim file. With init.vim open in Neovim, initiate the plugin installation by entering :source % followed by :PlugInstall.
Note
When using :source %, you can safely ignore any errors that may appear, as they are most likely caused by Neovim searching for plugins that have not yet been installed.
Vim Plugin Information
Below is a list of all the plugins included in my init.vim, each accompanied by a description of its functionality.
""""[ vim-plug Configurations ]"""""""""""""""""""""""""""""""""""""""""""""""""""""""""call plug#begin(stdpath('data') . '/plugged')" Make sure you use single quotes" Vim help for vim-plug itselfPlug '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'" A simple and lightweight Neovim plugin that brings syntax highlighting to generic log" patterns and provides straight-forward configuration to manage the filetype detection" rules over your preferred log files.Plug 'fei6409/log-highlight.nvim'" Initialize plugin systemcall 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""""[ General Configurations ]""""""""""""""""""""""""""""""""""""""""""""""""""" Overwrites specified default setting.""""" Overwrite for all file types.setexpandtab" Use spaces instead of tabs.settabstop=4" Number of spaces that a <Tab> in the file counts for.setshiftwidth=4" Number of spaces to use for each step of (auto)indent.setsofttabstop=4" Number of spaces that a <Tab> in the file counts for.setendofline" Keep the last line of a file if it has no newline.set fixendofline " Ensures a newline at the end of the file, if endofline is enabled.setcolorcolumn=88" Set a colored line at column 88 in every row."" Filetype-specific configurations.autocmd Filetype markdown,text,csv setlocalcolorcolumn=0autocmd Filetype java setlocalcolorcolumn=100autocmd Filetype cssetlocalcolorcolumn=120" As recommended by the luarocks Style Guide:" https://github.com/luarocks/lua-style-guide/blob/master/README.mdautocmd Filetype luasetlocaltabstop=3shiftwidth=3softtabstop=3autocmd Filetype html,css,vue,javascript,typescript setlocalcolorcolumn=100tabstop=2shiftwidth=2softtabstop=2""""[ vim-plug Plugin Configurations ]""""""""""""""""""""""""""""""""""""""""""""""""""" Font: Power Line Fontsetguifont=MesloLGS_NF:h12
"" Plugin: gruvbox-materialcolorscheme gruvbox-material
setbackground=darkletg:gruvbox_material_foreground ='original'letg:gruvbox_material_enable_bold =1letg:gruvbox_material_enable_italic =1"" Plugin: vim-airlineletg:airline#extensions#tabline#enabled =1letg:airline#extensions#tabline#left_sep =' 'letg:airline#extensions#tabline#left_alt_sep ='|'letg:airline#extensions#tabline#formatter ='default'letg:airline#extensions#ale#enabled =1letg:airline_powerline_fonts =1"" Plugin: better-whitespaceletg:better_whitespace_enabled =1letg:strip_whitespace_on_save =1"" Plugin: ale"let g:ale_use_neovim_diagnostics_api = 0""""[ Lua Configurations ]""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""lua dofile(vim.fn.stdpath('config') .. '/second_init.lua')""""[ 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 a simpler setup without all the features provided by plugins, you can add the configurations below to your init.vim file. These adjustments tweak Vim's default settings without changing its core functionality, offering a more streamlined experience while preserving Vim's essential behavior.
""""[ General Configurations ]""""""""""""""""""""""""""""""""""""""""""""""""""" Overwrites specified default setting.""""" Overwrite for all file types.setexpandtab" Use spaces instead of tabs.settabstop=4" Number of spaces that a <Tab> in the file counts for.setshiftwidth=4" Number of spaces to use for each step of (auto)indent.setsofttabstop=4" Number of spaces that a <Tab> in the file counts for.setendofline" Keep the last line of a file if it has no newline.set fixendofline " Ensures a newline at the end of the file, if endofline is enabled.setcolorcolumn=88" Set a colored line at column 88 in every row."" Filetype-specific configurations.autocmd Filetype markdown,text,csv setlocalcolorcolumn=0autocmd Filetype java setlocalcolorcolumn=100autocmd Filetype cssetlocalcolorcolumn=120" As recommended by the luarocks Style Guide:" https://github.com/luarocks/lua-style-guide/blob/master/README.mdautocmd Filetype luasetlocaltabstop=3shiftwidth=3softtabstop=3autocmd Filetype html,css,vue,javascript,typescript setlocalcolorcolumn=100tabstop=2shiftwidth=2softtabstop=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 these steps: