From c99e83b0f69bd6ef97f3af6a39e4982220357cb5 Mon Sep 17 00:00:00 2001 From: Brian Zalewski Date: Tue, 22 Nov 2022 04:06:11 +0000 Subject: [PATCH] Update dotfiles/.local/share/chezmoi/dot_local/state/zsh/.gitkeep, dotfiles/.zshrc, dotfiles/.local/share/chezmoi/dot_zshrc.tmpl, dotfiles/.local/share/chezmoi/dot_bashrc.tmpl --- dotfiles/.local/share/chezmoi/dot_bashrc.tmpl | 1 + .../chezmoi/dot_local/state/zsh/.gitkeep | 0 dotfiles/.local/share/chezmoi/dot_zshrc.tmpl | 357 ++++++++++++++++++ dotfiles/.zshrc | 8 +- 4 files changed, 362 insertions(+), 4 deletions(-) create mode 100644 dotfiles/.local/share/chezmoi/dot_local/state/zsh/.gitkeep create mode 100644 dotfiles/.local/share/chezmoi/dot_zshrc.tmpl diff --git a/dotfiles/.local/share/chezmoi/dot_bashrc.tmpl b/dotfiles/.local/share/chezmoi/dot_bashrc.tmpl index e69de29b..8b137891 100644 --- a/dotfiles/.local/share/chezmoi/dot_bashrc.tmpl +++ b/dotfiles/.local/share/chezmoi/dot_bashrc.tmpl @@ -0,0 +1 @@ + diff --git a/dotfiles/.local/share/chezmoi/dot_local/state/zsh/.gitkeep b/dotfiles/.local/share/chezmoi/dot_local/state/zsh/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dotfiles/.local/share/chezmoi/dot_zshrc.tmpl b/dotfiles/.local/share/chezmoi/dot_zshrc.tmpl new file mode 100644 index 00000000..5f81df55 --- /dev/null +++ b/dotfiles/.local/share/chezmoi/dot_zshrc.tmpl @@ -0,0 +1,357 @@ +# shellcheck disable=SC1090,SC1091,SC2034,SC2154,SC2296 + +### Language / Fonts +export LANG="en_US" +export LC_ALL="en_US.UTF-8" + +### Advanced Bash-features are supported +export BASH_SUPPORT=true + +### ~/.profile +[[ -f "$HOME/.profile" ]] && . "$HOME/.profile" + +### 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 +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' + +# 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 + +### 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 encode64 + antigen bundle fd + antigen bundle git-auto-fetch + antigen bundle gnu-utils + antigen bundle heroku + # antigen bundle keychain + antigen bundle kubectx + antigen bundle macos + antigen bundle magic-enter + antigen bundle minikube + antigen bundle ng + antigen bundle nomad + 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 ufw + # antigen bundle web-search + + ### Disable plugin alias + # alias alias=true + antigen bundle docker + antigen bundle docker-compose + antigen bundle gem + antigen bundle ionic + antigen bundle microk8s + antigen bundle multipass + antigen bundle pip + antigen bundle pm2 + antigen bundle terraform + antigen bundle vagrant + antigen bundle yarn + # unalias alias + + # 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 bundle npm + 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 + +### 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 diff --git a/dotfiles/.zshrc b/dotfiles/.zshrc index 050bcf62..5f81df55 100644 --- a/dotfiles/.zshrc +++ b/dotfiles/.zshrc @@ -7,8 +7,11 @@ export LC_ALL="en_US.UTF-8" ### Advanced Bash-features are supported export BASH_SUPPORT=true +### ~/.profile +[[ -f "$HOME/.profile" ]] && . "$HOME/.profile" + ### Misc. -export HISTFILE=~/.local/zsh_history +export HISTFILE="$XDG_STATE_HOME/zsh/history" export ZLE_RPROMPT_INDENT=0 export WORDCHARS=${WORDCHARS//\/} export PROMPT_EOL_MARK= @@ -25,9 +28,6 @@ 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