Last active
July 8, 2025 02:00
-
-
Save jbenner-radham/3065190acbe905b40714ac2201af594b to your computer and use it in GitHub Desktop.
Zsh Config Based Off of a Thinned Down Oh-My-Zsh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
eval "$(/opt/homebrew/bin/brew shellenv)" | |
# Added by Toolbox App | |
export PATH="$PATH:/Users/jamesbenner/Library/Application Support/JetBrains/Toolbox/scripts" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Used by eza for time formatting. Format spec: https://docs.rs/chrono/latest/chrono/format/strftime/index.html | |
export TIME_STYLE="+%b %d %Y %r" | |
export XDG_CACHE_HOME="$HOME/.cache" | |
export XDG_CONFIG_HOME="$HOME/.config" | |
export XDG_DATA_HOME="$HOME/.local/share" | |
export XDG_STATE_HOME="$HOME/.local/state" | |
export ZSH_CACHE_DIR="$XDG_CACHE_HOME/zsh" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Input/Output Options <https://zsh.sourceforge.io/Doc/Release/Options.html#Input_002fOutput> | |
setopt SHORT_LOOPS # Allow the short forms of for, repeat, select, if, and function constructs. | |
# Reference: <https://stackoverflow.com/questions/28599346/how-to-loop-through-all-the-files-located-under-a-certain-path-in-zsh#answer-28604257> | |
for file in $XDG_CONFIG_HOME/zsh/*.zsh(N.); source $file | |
# Reference: <https://thevaluable.dev/zsh-completion-guide-examples/#enabling-the-zsh-completion-system> | |
autoload -Uz compinit && compinit | |
# Setup | |
eval "$(starship init zsh)" | |
eval "$(direnv hook zsh)" | |
# Plugins | |
source "$(brew --prefix)/share/zsh-autopair/autopair.zsh" | |
source "$(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh" | |
source "$(brew --prefix)/share/zsh-you-should-use/you-should-use.plugin.zsh" | |
source "$(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" | |
source "$(brew --prefix)/share/zsh-history-substring-search/zsh-history-substring-search.zsh" | |
bindkey '^[[A' history-substring-search-up | |
bindkey '^[[B' history-substring-search-down |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Should be called before compinit(?) | |
zmodload zsh/complist | |
WORDCHARS='' | |
# Input/Output Options <https://zsh.sourceforge.io/Doc/Release/Options.html#Input_002fOutput> | |
unsetopt FLOW_CONTROL # If this option is unset, output flow control via start/stop characters is disabled in the shell’s editor. | |
# Completion Options <https://zsh.sourceforge.io/Doc/Release/Options.html#Completion-4> | |
unsetopt MENU_COMPLETE # Do not autoselect the first completion entry. | |
setopt ALWAYS_TO_END # If a completion is performed with the cursor within a word, and a full completion is inserted, the cursor is moved to the end of the word. | |
setopt AUTO_MENU # Show completion menu on successive tab press. | |
setopt COMPLETE_IN_WORD # If unset, the cursor is set to the end of the word if completion is started. Otherwise it stays there and completion is done from both ends. | |
# Should this be in keybindings? | |
bindkey -M menuselect '^o' accept-and-infer-next-history | |
zstyle ':completion:*:*:*:*:*' menu select | |
zstyle ':completion:*' matcher-list 'r:|=*' 'l:|=* r:|=*' | |
# Complete . and .. special directories | |
zstyle ':completion:*' special-dirs true | |
zstyle ':completion:*' list-colors '' | |
zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#) ([0-9a-z-]#)*=01;34=0=01' | |
zstyle ':completion:*:*:*:*:processes' command "ps -u $USERNAME -o pid,user,comm -w -w" | |
# Disable named-directories autocompletion. | |
zstyle ':completion:*:cd:*' tag-order local-directories directory-stack path-directories | |
# Use caching so that commands like apt and dpkg complete are useable. | |
zstyle ':completion:*' use-cache yes | |
zstyle ':completion:*' cache-path $ZSH_CACHE_DIR | |
# Don't complete uninteresting users. (Do I want this?) | |
zstyle ':completion:*:*:*:users' ignored-patterns \ | |
adm amanda apache at avahi avahi-autoipd beaglidx bin cacti canna \ | |
clamav daemon dbus distcache dnsmasq dovecot fax ftp games gdm \ | |
gkrellmd gopher hacluster haldaemon halt hsqldb ident junkbust kdm \ | |
ldap lp mail mailman mailnull man messagebus mldonkey mysql nagios \ | |
named netdump news nfsnobody nobody nscd ntp nut nx obsrun openvpn \ | |
operator pcap polkitd postfix postgres privoxy pulse pvm quagga radvd \ | |
rpc rpcuser rpm rtkit scard shutdown squid sshd statd svn sync tftp \ | |
usbmux uucp vcsa wwwrun xfs '_*' | |
# ...unless we really want to. | |
zstyle '*' single-ignored show | |
# Automatically load bash completion functions. | |
autoload -U +X bashcompinit && bashcompinit |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Directory Options <https://zsh.sourceforge.io/Doc/Release/Options.html#Changing-Directories> | |
setopt AUTO_CD # If a command is issued that can’t be executed as a normal command, and the command is the name of a directory, perform the cd command to that directory. | |
setopt AUTO_PUSHD # Make cd push the old directory onto the directory stack. | |
setopt PUSHD_IGNORE_DUPS # Don’t push multiple copies of the same directory onto the directory stack. | |
# Directory Navigation Aliases | |
alias -g ...='../..' | |
alias -g ....='../../..' | |
alias -g .....='../../../..' | |
alias -g ......='../../../../..' | |
alias -- -='cd -' | |
# List Directory Aliases | |
if (( $+commands[eza] )); then | |
alias la="eza --almost-all --git --icons --long" | |
alias ll="eza --git --icons --long" | |
alias ls="eza --icons" | |
else | |
alias la='ls --color=auto -lAh' | |
alias ll='ls --color=auto -lh' | |
alias ls='ls --color=auto' | |
fi |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[ "$HISTSIZE" -lt 50000 ] && HISTSIZE=50000 | |
[ "$SAVEHIST" -lt 10000 ] && SAVEHIST=10000 | |
# History Options <https://zsh.sourceforge.io/Doc/Release/Options.html#History> | |
setopt EXTENDED_HISTORY # Save each command’s beginning timestamp (in seconds since the epoch) and the duration (in seconds) to the history file. | |
setopt HIST_EXPIRE_DUPS_FIRST # If the internal history needs to be trimmed to add the current command line, setting this option will cause the oldest history event that has a duplicate to be lost before losing a unique event from the list. | |
setopt HIST_IGNORE_ALL_DUPS # If a new command line being added to the history list duplicates an older one, the older command is removed from the list (even if it is not the previous event). | |
setopt HIST_IGNORE_SPACE # Remove command lines from the history list when the first character on the line is a space, or when one of the expanded aliases contains a leading space. | |
setopt HIST_VERIFY # Whenever the user enters a line with history expansion, don’t execute the line directly; instead, perform history expansion and reload the line into the editing buffer. | |
setopt SHARE_HISTORY # This option both imports new commands from the history file, and also causes your typed commands to be appended to the history file. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html | |
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Builtins | |
# http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Standard-Widgets | |
# Make sure that the terminal is in application mode when zle is active, since | |
# only then values from $terminfo are valid | |
if (( ${+terminfo[smkx]} )) && (( ${+terminfo[rmkx]} )); then | |
function zle-line-init() { | |
echoti smkx | |
} | |
function zle-line-finish() { | |
echoti rmkx | |
} | |
zle -N zle-line-init | |
zle -N zle-line-finish | |
fi | |
# Use emacs key bindings | |
bindkey -e | |
# [PageUp] - Up a line of history | |
if [[ -n "${terminfo[kpp]}" ]]; then | |
bindkey -M emacs "${terminfo[kpp]}" up-line-or-history | |
bindkey -M viins "${terminfo[kpp]}" up-line-or-history | |
bindkey -M vicmd "${terminfo[kpp]}" up-line-or-history | |
fi | |
# [PageDown] - Down a line of history | |
if [[ -n "${terminfo[knp]}" ]]; then | |
bindkey -M emacs "${terminfo[knp]}" down-line-or-history | |
bindkey -M viins "${terminfo[knp]}" down-line-or-history | |
bindkey -M vicmd "${terminfo[knp]}" down-line-or-history | |
fi | |
# Start typing + [Up-Arrow] - fuzzy find history forward | |
autoload -U up-line-or-beginning-search | |
zle -N up-line-or-beginning-search | |
bindkey -M emacs "^[[A" up-line-or-beginning-search | |
bindkey -M viins "^[[A" up-line-or-beginning-search | |
bindkey -M vicmd "^[[A" up-line-or-beginning-search | |
if [[ -n "${terminfo[kcuu1]}" ]]; then | |
bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search | |
bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search | |
bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search | |
fi | |
# Start typing + [Down-Arrow] - fuzzy find history backward | |
autoload -U down-line-or-beginning-search | |
zle -N down-line-or-beginning-search | |
bindkey -M emacs "^[[B" down-line-or-beginning-search | |
bindkey -M viins "^[[B" down-line-or-beginning-search | |
bindkey -M vicmd "^[[B" down-line-or-beginning-search | |
if [[ -n "${terminfo[kcud1]}" ]]; then | |
bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search | |
bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search | |
bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search | |
fi | |
# [Home] - Go to beginning of line | |
if [[ -n "${terminfo[khome]}" ]]; then | |
bindkey -M emacs "${terminfo[khome]}" beginning-of-line | |
bindkey -M viins "${terminfo[khome]}" beginning-of-line | |
bindkey -M vicmd "${terminfo[khome]}" beginning-of-line | |
fi | |
# [End] - Go to end of line | |
if [[ -n "${terminfo[kend]}" ]]; then | |
bindkey -M emacs "${terminfo[kend]}" end-of-line | |
bindkey -M viins "${terminfo[kend]}" end-of-line | |
bindkey -M vicmd "${terminfo[kend]}" end-of-line | |
fi | |
# [Shift-Tab] - move through the completion menu backwards | |
if [[ -n "${terminfo[kcbt]}" ]]; then | |
bindkey -M emacs "${terminfo[kcbt]}" reverse-menu-complete | |
bindkey -M viins "${terminfo[kcbt]}" reverse-menu-complete | |
bindkey -M vicmd "${terminfo[kcbt]}" reverse-menu-complete | |
fi | |
# [Backspace] - delete backward | |
bindkey -M emacs '^?' backward-delete-char | |
bindkey -M viins '^?' backward-delete-char | |
bindkey -M vicmd '^?' backward-delete-char | |
# [Delete] - delete forward | |
if [[ -n "${terminfo[kdch1]}" ]]; then | |
bindkey -M emacs "${terminfo[kdch1]}" delete-char | |
bindkey -M viins "${terminfo[kdch1]}" delete-char | |
bindkey -M vicmd "${terminfo[kdch1]}" delete-char | |
else | |
bindkey -M emacs "^[[3~" delete-char | |
bindkey -M viins "^[[3~" delete-char | |
bindkey -M vicmd "^[[3~" delete-char | |
bindkey -M emacs "^[3;5~" delete-char | |
bindkey -M viins "^[3;5~" delete-char | |
bindkey -M vicmd "^[3;5~" delete-char | |
fi | |
# [Ctrl-Delete] - delete whole forward-word | |
bindkey -M emacs '^[[3;5~' kill-word | |
bindkey -M viins '^[[3;5~' kill-word | |
bindkey -M vicmd '^[[3;5~' kill-word | |
# [Ctrl-RightArrow] - move forward one word | |
bindkey -M emacs '^[[1;5C' forward-word | |
bindkey -M viins '^[[1;5C' forward-word | |
bindkey -M vicmd '^[[1;5C' forward-word | |
# [Ctrl-LeftArrow] - move backward one word | |
bindkey -M emacs '^[[1;5D' backward-word | |
bindkey -M viins '^[[1;5D' backward-word | |
bindkey -M vicmd '^[[1;5D' backward-word | |
bindkey '\ew' kill-region # [Esc-w] - Kill from the cursor to the mark | |
bindkey -s '\el' 'ls\n' # [Esc-l] - run command: ls | |
bindkey '^r' history-incremental-search-backward # [Ctrl-r] - Search backward incrementally for a specified string. The string may begin with ^ to anchor the search to the beginning of the line. | |
bindkey ' ' magic-space # [Space] - don't do history expansion | |
# Edit the current command line in $EDITOR | |
autoload -U edit-command-line | |
zle -N edit-command-line | |
bindkey '\C-x\C-e' edit-command-line | |
# file rename magick | |
bindkey "^[m" copy-prev-shell-word | |
# consider emacs keybindings: | |
#bindkey -e ## emacs key bindings | |
# | |
#bindkey '^[[A' up-line-or-search | |
#bindkey '^[[B' down-line-or-search | |
#bindkey '^[^[[C' emacs-forward-word | |
#bindkey '^[^[[D' emacs-backward-word | |
# | |
#bindkey -s '^X^Z' '%-^M' | |
#bindkey '^[e' expand-cmd-path | |
#bindkey '^[^I' reverse-menu-complete | |
#bindkey '^X^N' accept-and-infer-next-history | |
#bindkey '^W' kill-region | |
#bindkey '^I' complete-word | |
## Fix weird sequence that rxvt produces | |
#bindkey -s '^[[Z' '\t' | |
# |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment