# shellcheck disable=SC1090,SC1091,SC2034,SC2154,SC2296 # If not running interactively, don't do anything case $- in *i*) ;; *) return;; esac ### Language / Fonts export LANG="en_US" export LC_ALL="en_US.UTF-8" ### Advanced Bash-features are supported export BASH_SUPPORT=true ### Import Common Settings export XDG_CONFIG_HOME="$HOME/.config" if [ -f "$HOME/.config/shell/profile.sh" ]; then . "$XDG_CONFIG_HOME/shell/profile.sh" fi ### Misc. export HISTFILE="$XDG_STATE_HOME/zsh/history" export ZLE_RPROMPT_INDENT=0 export WORDCHARS=${WORDCHARS//\/} export PROMPT_EOL_MARK= export 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" # --------------------------------- 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 if [ ! -d "$XDG_CACHE_HOME/zsh" ]; then mkdir -p "$XDG_CACHE_HOME/zsh" fi compinit -d "$XDG_CACHE_HOME/zsh/zcompdump-$ZSH_VERSION" autoload -Uz compinit zstyle ':completion:*:*:*:*:*' menu select zstyle ':completion:*' cache-path "$XDG_CACHE_HOME/zsh/zcompcache" 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' # 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 ### Homebrew ZSH Completions # Must be sourced before compinit / Oh-My-ZSH inclusion FPATH="$HOMEBREW_PREFIX/share/zsh/site-functions:${FPATH}" ### Antigen if [ -f "$HOME/.local/scripts/antigen.zsh" ]; then source "$HOME/.local/scripts/antigen.zsh" fi if command -v antigen > /dev/null; then # Fix for oh-my-zsh overriding exa aliases export DISABLE_LS_COLORS=true # Official Oh-My-ZSH plugins antigen use oh-my-zsh antigen bundle adb antigen bundle bazel antigen bundle codeclimate # antigen bundle colored-man-pages antigen bundle command-not-found antigen bundle copybuffer # TODO: Add as an alias available to Bash as well antigen bundle encode64 antigen bundle fd antigen bundle flutter antigen bundle fzf antigen bundle gcloud antigen bundle gem antigen bundle gh antigen bundle git-auto-fetch antigen bundle git-extras antigen bundle git-flow antigen bundle gitfast antigen bundle github # antigen bundle gnu-utils antigen bundle golang # antigen bundle gpg-agent antigen bundle gradle antigen bundle helm antigen bundle heroku antigen bundle httpie antigen bundle ionic antigen bundle ipfs antigen bundle isodate # antigen bundle keychain antigen bundle kn antigen bundle kubectl antigen bundle kubectx antigen bundle last-working-dir antigen bundle lxd antigen bundle macos antigen bundle macports antigen bundle magic-enter antigen bundle marktext antigen bundle microk8s antigen bundle minikube antigen bundle mongo-atlas antigen bundle mongocli antigen bundle mosh antigen bundle multipass antigen bundle ng antigen bundle node-docs antigen bundle nomad antigen bundle npm antigen bundle oc antigen bundle pass # antigen bundle pep8 antigen bundle pip # antigen bundle pipenv antigen bundle pm2 antigen bundle poetry antigen bundle qrcode antigen bundle react-native antigen bundle redis-cli antigen bundle ripgrep antigen bundle rust antigen bundle safe-paste antigen bundle sdk # antigen bundle skaffold antigen bundle spring # antigen bundle shell-proxy antigen bundle sprunge # antigen bundle ssh-agent antigen bundle sudo antigen bundle ufw antigen bundle web-search antigen bundle docker antigen bundle docker-compose antigen bundle ionic antigen bundle multipass antigen bundle pip antigen bundle pm2 antigen bundle terraform antigen bundle vagrant antigen bundle yarn # Third-party plugins antigen bundle jscutlery/nx-completion antigen bundle lukechilds/zsh-better-npm-completion antigen bundle zsh-interactive-cd # antigen bundle zsh-navigation-tools antigen bundle zsh-users/zsh-completions src antigen bundle zsh-users/zsh-syntax-highlighting antigen bundle zsh-users/zsh-autosuggestions antigen bundle marlonrichert/zsh-autocomplete@main antigen theme romkatv/powerlevel10k antigen apply fi ### 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 ### Cod if command -v cod > /dev/null; then source <(cod init $$ zsh) fi ### direnv if command -v direnv > /dev/null; then eval "$(direnv hook zsh)" fi ### Java (asdf) if [ -f "$ASDF_DATA_DIR/plugins/java/set-java-home.zsh" ]; then # . "$ASDF_DATA_DIR/plugins/java/set-java-home.zsh" fi ### mcfly if command -v mcfly > /dev/null; then eval "$(mcfly init zsh)" fi ### Fig if [ -f "$HOME/.fig/shell/zshrc.post.zsh" ]; then source "$HOME/.fig/shell/zshrc.post.zsh" fi ### Powerline if [ -f "$HOME/.local/scripts/p10k.zsh" ]; then source "$HOME/.local/scripts/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 ### zoxide if command -v zoxide > /dev/null; then eval "$(zoxide init --cmd cd zsh)" > /dev/null fi