# shellcheck disable=SC1090,SC1091,SC2034,SC2154,SC2296 ### Language / Fonts export LANG="en_US" export LC_ALL="en_US.UTF-8" ### Misc. HISTFILE=~/.local/zsh_history HIST_STAMPS=mm/dd/yyyy HISTSIZE=5000 SAVEHIST=5000 ZLE_RPROMPT_INDENT=0 WORDCHARS=${WORDCHARS//\/} PROMPT_EOL_MARK= TIMEFMT=$'\nreal\t%E\nuser\t%U\nsys\t%S\ncpu\t%P' ### Antigen export ADOTDIR="$HOME/.local/antigen" ### Powerline 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 ### Fig [[ -f "$HOME/.fig/shell/zshrc.pre.zsh" ]] && . "$HOME/.fig/shell/zshrc.pre.zsh" ### ~/.profile [[ -f "$HOME/.profile" ]] && . "$HOME/.profile" # --------------------------------- SETTINGS ---------------------------------- setopt AUTO_CD setopt BEEP #setopt CORRECT setopt HIST_BEEP setopt HIST_EXPIRE_DUPS_FIRST setopt HIST_FIND_NO_DUPS setopt HIST_IGNORE_ALL_DUPS setopt HIST_IGNORE_DUPS setopt HIST_REDUCE_BLANKS setopt HIST_SAVE_NO_DUPS setopt HIST_VERIFY setopt INC_APPEND_HISTORY setopt INTERACTIVE_COMMENTS setopt MAGIC_EQUAL_SUBST setopt NO_NO_MATCH setopt NOTIFY setopt NUMERIC_GLOB_SORT setopt PROMPT_SUBST setopt SHARE_HISTORY # ZSH completion system autoload -Uz compinit compinit -d ~/.cache/zcompdump zstyle ':completion:*:*:*:*:*' menu select zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" zstyle ':completion:*' auto-description 'specify: %d' zstyle ':completion:*' completer _expand _complete zstyle ':completion:*' format 'Completing %d' zstyle ':completion:*' group-name '' zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s zstyle ':completion:*' rehash true zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s zstyle ':completion:*' use-compctl false zstyle ':completion:*' verbose true # shellcheck disable=SC2016 zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd' ### For Debugging (clears completion cache each time) zstyle ":completion:*:commands" rehash 1 # Key bindings bindkey -e bindkey '^U' backward-kill-line bindkey '^[[2~' overwrite-mode bindkey '^[[3~' delete-char bindkey '^[[H' beginning-of-line bindkey '^[[1~' beginning-of-line bindkey '^[[F' end-of-line bindkey '^[[4~' end-of-line bindkey '^[[1;5C' forward-word bindkey '^[[1;5D' backward-word bindkey '^[[3;5~' kill-word bindkey '^[[5~' beginning-of-buffer-or-history bindkey '^[[6~' end-of-buffer-or-history bindkey '^[[Z' undo bindkey ' ' magic-space # ------------------------------- ZSH PLUGINS --------------------------------- # Plugin source helper _source_plugin() { local plugin_name="$1" for basedir in "$HOME/.local/antigen/bundles/zsh-users"; do plugin="$basedir/$plugin_name/$plugin_name.zsh" [ -f "$plugin" ] && source "$plugin" && return 0 done echo "\033[33m[ ! ]\033[0m ZSH ${plugin_name#zsh-} not installed" return 1 } # ZSH Autosuggestions _source_plugin zsh-autosuggestions && ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=#999' # ZSH Syntax Highlighting if _source_plugin zsh-syntax-highlighting; then ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) ZSH_HIGHLIGHT_STYLES[default]=none ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=white,underline ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=cyan,bold ZSH_HIGHLIGHT_STYLES[suffix-alias]=fg=green,underline ZSH_HIGHLIGHT_STYLES[global-alias]=fg=green,bold ZSH_HIGHLIGHT_STYLES[precommand]=fg=green,underline ZSH_HIGHLIGHT_STYLES[commandseparator]=fg=blue,bold ZSH_HIGHLIGHT_STYLES[autodirectory]=fg=green,underline ZSH_HIGHLIGHT_STYLES[path]=bold ZSH_HIGHLIGHT_STYLES[path_pathseparator]= ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]= ZSH_HIGHLIGHT_STYLES[globbing]=fg=blue,bold ZSH_HIGHLIGHT_STYLES[history-expansion]=fg=blue,bold ZSH_HIGHLIGHT_STYLES[command-substitution]=none ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]=fg=magenta,bold ZSH_HIGHLIGHT_STYLES[process-substitution]=none ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]=fg=magenta,bold ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=fg=green ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=fg=green ZSH_HIGHLIGHT_STYLES[back-quoted-argument]=none ZSH_HIGHLIGHT_STYLES[back-quoted-argument-delimiter]=fg=blue,bold ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg=yellow ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg=yellow ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]=fg=yellow ZSH_HIGHLIGHT_STYLES[rc-quote]=fg=magenta ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]=fg=magenta,bold ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]=fg=magenta,bold ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]=fg=magenta,bold ZSH_HIGHLIGHT_STYLES[assign]=none ZSH_HIGHLIGHT_STYLES[redirection]=fg=blue,bold ZSH_HIGHLIGHT_STYLES[comment]=fg=black,bold ZSH_HIGHLIGHT_STYLES[named-fd]=none ZSH_HIGHLIGHT_STYLES[numeric-fd]=none ZSH_HIGHLIGHT_STYLES[arg0]=fg=cyan ZSH_HIGHLIGHT_STYLES[bracket-error]=fg=red,bold ZSH_HIGHLIGHT_STYLES[bracket-level-1]=fg=blue,bold ZSH_HIGHLIGHT_STYLES[bracket-level-2]=fg=green,bold ZSH_HIGHLIGHT_STYLES[bracket-level-3]=fg=magenta,bold ZSH_HIGHLIGHT_STYLES[bracket-level-4]=fg=yellow,bold ZSH_HIGHLIGHT_STYLES[bracket-level-5]=fg=cyan,bold ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]=standout fi unset -f _source_plugin # POWERLEVEL if ! [[ $(tty) = /dev/tty* ]]; then if source "$HOME/.local/antigen/bundles/romkatv/powerlevel10k/powerlevel10k.zsh-theme" 2> /dev/null; then s=' ' # fix too wide icons POWERLEVEL9K_MODE=nerdfont-complete POWERLEVEL9K_SHORTEN_STRATEGY=truncate_beginning POWERLEVEL9K_PROMPT_ADD_NEWLINE=false POWERLEVEL9K_PROMPT_ON_NEWLINE=true POWERLEVEL9K_RPROMPT_ON_NEWLINE=true POWERLEVEL9K_SHORTEN_DIR_LENGTH=2 # shellcheck disable=SC2016 POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='${P9K_CONTENT} $(whoami | grep -v "^root\$")' POWERLEVEL9K_OS_ICON_BACKGROUND=red POWERLEVEL9K_OS_ICON_FOREGROUND=white POWERLEVEL9K_ROOT_INDICATOR_BACKGROUND=black POWERLEVEL9K_ROOT_INDICATOR_FOREGROUND=red POWERLEVEL9K_SSH_BACKGROUND=white POWERLEVEL9K_SSH_FOREGROUND=blue POWERLEVEL9K_FOLDER_ICON= POWERLEVEL9K_DIR_BACKGROUND=blue POWERLEVEL9K_DIR_FOREGROUND=black POWERLEVEL9K_DIR_WRITABLE_BACKGROUND=black POWERLEVEL9K_DIR_WRITABLE_FOREGROUND=red POWERLEVEL9K_VCS_CLEAN_FOREGROUND=black POWERLEVEL9K_VCS_CLEAN_BACKGROUND=green POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=black POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=yellow POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=white POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=black POWERLEVEL9K_VCS_UNTRACKED_ICON=● POWERLEVEL9K_VCS_UNSTAGED_ICON=± POWERLEVEL9K_VCS_INCOMING_CHANGES_ICON=↓ POWERLEVEL9K_VCS_OUTGOING_CHANGES_ICON=↑ POWERLEVEL9K_VCS_COMMIT_ICON=$s POWERLEVEL9K_STATUS_VERBOSE=false POWERLEVEL9K_STATUS_VERBOSE=false POWERLEVEL9K_STATUS_OK_IN_NON_VERBOSE=true POWERLEVEL9K_EXECUTION_TIME_ICON=$s POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=0 POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=black POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=blue POWERLEVEL9K_COMMAND_BACKGROUND_JOBS_BACKGROUND=black POWERLEVEL9K_COMMAND_BACKGROUND_JOBS_FOREGROUND=cyan POWERLEVEL9K_TIME_ICON= POWERLEVEL9K_TIME_FORMAT='%D{%I:%M}' POWERLEVEL9K_TIME_BACKGROUND=black POWERLEVEL9K_TIME_FOREGROUND=white POWERLEVEL9K_RAM_ICON= POWERLEVEL9K_RAM_FOREGROUND=black POWERLEVEL9K_RAM_BACKGROUND=yellow POWERLEVEL9K_VI_MODE_FOREGROUND=black POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=green POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=blue POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=red POWERLEVEL9K_VI_INSERT_MODE_STRING= POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%F{blue}╭─' POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%F{blue}╰%f ' POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(os_icon root_indicator ssh dir dir_writable vcs) POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(vi_mode status command_execution_time background_jobs time ram) unset s else echo '\033[33m[ ! ]\033[0m ZSH powerlevel10k not installed' fi else clear echo echo fi switch_powerlevel_multiline_prompt(){ [ $POWERLEVEL9K_PROMPT_ON_NEWLINE = true ] \ && POWERLEVEL9K_PROMPT_ON_NEWLINE=false \ || POWERLEVEL9K_PROMPT_ON_NEWLINE=true zle && zle accept-line } zle -N switch_powerlevel_multiline_prompt bindkey ^P switch_powerlevel_multiline_prompt # ----------------------------------- MISC ----------------------------------- # If this is an xterm set the title to user@host:dir case "$TERM" in xterm*|rxvt*|Eterm|aterm|kterm|gnome*|alacritty) precmd() { print -Pnr -- $'\e]0;%n@%m: %~\a' } ;; esac # https://github.com/trapd00r/LS_COLORS #command -v gdircolors >/dev/null 2>&1 || alias gdircolors="dircolors" #if type gdircolors &> /dev/null && [ -f "$HOME/.config/dircolors" ]; then # eval "$(gdircolors -b "$HOME/.config/dircolors")" #fi ### Backup aliases (so oh-my-zsh does not apply any aliases) save_aliases=$(alias -L) ### Antigen if [ -f "$HOME/.local/antigen.zsh" ]; then source "$HOME/.local/antigen.zsh" fi if command -v antigen > /dev/null; then antigen use oh-my-zsh antigen bundle adb antigen bundle colored-man-pages antigen bundle command-not-found antigen bundle copyfile antigen bundle copybuffer antigen bundle cp antigen bundle deno antigen bundle docker antigen bundle docker-compose antigen bundle encode64 antigen bundle fd antigen bundle gem antigen bundle gh antigen bundle git-auto-fetch antigen bundle gradle antigen bundle gnu-utils antigen bundle helm antigen bundle heroku antigen bundle ionic # antigen bundle keychain antigen bundle kubectl antigen bundle kubectx antigen bundle macos antigen bundle magic-enter antigen bundle microk8s antigen bundle minikube antigen bundle multipass antigen bundle ng antigen bundle nomad antigen bundle npm antigen bundle pip antigen bundle pm2 antigen bundle poetry antigen bundle redis-cli antigen bundle ripgrep antigen bundle rust antigen bundle safe-paste antigen bundle salt # antigen bundle shell-proxy # antigen bundle ssh-agent antigen bundle sudo antigen bundle terraform antigen bundle ufw antigen bundle vagrant antigen bundle volta # antigen bundle web-search antigen bundle yarn antigen bundle zsh-interactive-cd # antigen bundle zsh-navigation-tools antigen bundle zsh-users/zsh-completions src antigen bundle zsh-users/zsh-autosuggestions antigen bundle zsh-users/zsh-syntax-highlighting antigen bundle marlonrichert/zsh-autocomplete@main antigen theme romkatv/powerlevel10k antigen apply fi ### Clear oh-my-zsh aliases eval $save_aliases unset save_aliases ### ZSH Autocomplete zstyle ':autocomplete:*' list-lines 14 zstyle ':autocomplete:history-search:*' list-lines 14 zstyle ':autocomplete:history-incremental-search-*:*' list-lines 14 if command -v fzf > /dev/null; then zstyle ':autocomplete:*' fzf-completion yes fi if command -v zoxide > /dev/null; then zstyle ':autocomplete:recent-dirs' backend zoxide fi # oh-my-zsh might be overwriting the ls command so placing it here as well as fix # command -v lsd > /dev/null && alias ls='lsd --group-dirs first' && \ # alias tree='lsd --tree' ### direnv if command -v direnv > /dev/null; then eval "$(direnv hook zsh)" fi ### Java (asdf) if [ -f "$HOME/.local/asdf/plugins/java/set-java-home.zsh" ]; then # . "$HOME/.local/asdf/plugins/java/set-java-home.zsh" fi ### mcfly if command -v mcfly > /dev/null; then eval "$(mcfly init zsh)" fi ### zoxide if command -v zoxide > /dev/null; then eval "$(zoxide init --cmd cd zsh)" fi ### Fig if [ -f "$HOME/.fig/shell/zshrc.post.zsh" ]; then source "$HOME/.fig/shell/zshrc.post.zsh" fi ### Powerline if [ -f ~/.local/p10k.zsh ]; then source ~/.local/p10k.zsh fi ### Bash Completions autoload -U +X bashcompinit && bashcompinit ### HashiCorp Vault if command -v vault > /dev/null; then complete -o nospace -C vault vault fi