Last active
August 13, 2021 16:26
-
-
Save LukeHuckman/7dd925fc97c72eaed1de969065e616bf to your computer and use it in GitHub Desktop.
Custom .zshrc created from combining defaults from several distros
This file contains 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
# Lines configured by zsh-newuser-install | |
HISTFILE=~/.histfile | |
HISTSIZE=1000 | |
SAVEHIST=1000 | |
# End of lines configured by zsh-newuser-install | |
# The following lines were added by compinstall | |
zstyle :compinstall filename '/home/milo/.zshrc' | |
autoload -Uz compinit | |
compinit | |
# End of lines added by compinstall | |
# Options | |
setopt prompt_subst | |
setopt nobeep | |
setopt autocd | |
setopt nocaseglob | |
setopt nocheckjobs | |
setopt correct | |
setopt extendedglob | |
setopt histignorealldups | |
setopt interactive | |
setopt monitor | |
setopt numericglobsort | |
setopt rcexpandparam | |
setopt zle | |
zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive tab completion | |
zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc) | |
zstyle ':completion:*' rehash true # automatically find new executables in path | |
# Speed up completions | |
zstyle ':completion:*' accept-exact '*(N)' | |
zstyle ':completion:*' use-cache on | |
zstyle ':completion:*' cache-path ~/.zsh_cache | |
WORDCHARS=${WORDCHARS//\/[&.;]} # Don't consider certain characters part of the word | |
autoload -Uz add-zsh-hook | |
function xterm_title_precmd () { | |
print -Pn -- '\e]2;%n@%m: %c\a' | |
[[ "$TERM" == 'screen'* ]] && print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%c\005{-}\e\\' | |
} | |
function xterm_title_preexec () { | |
#print -Pn -- '\e]2;%n@%m %~ $ ' && print -n -- "${(q)1}\a" | |
print -Pn -- '\e]2;' && print -n -- "${(q)1}\a" | |
#[[ "$TERM" == 'screen'* ]] && { print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-} $ ' && print -n -- "${(q)1}\e\\"; } | |
[[ "$TERM" == 'screen'* ]] && { print -Pn -- '\e_\005{g}' && print -n -- "${(q)1}\e\\"; } | |
} | |
if [[ "$TERM" == (alacritty*|gnome*|konsole*|putty*|rxvt*|screen*|tmux*|xterm*) ]]; then | |
add-zsh-hook -Uz precmd xterm_title_precmd | |
add-zsh-hook -Uz preexec xterm_title_preexec | |
fi | |
## Keybindings section | |
bindkey -e | |
bindkey '^[[7~' beginning-of-line # Home key | |
bindkey '^[[H' beginning-of-line # Home key | |
if [[ "${terminfo[khome]}" != "" ]]; then | |
bindkey "${terminfo[khome]}" beginning-of-line # [Home] - Go to beginning of line | |
fi | |
bindkey '^[[8~' end-of-line # End key | |
bindkey '^[[F' end-of-line # End key | |
if [[ "${terminfo[kend]}" != "" ]]; then | |
bindkey "${terminfo[kend]}" end-of-line # [End] - Go to end of line | |
fi | |
bindkey '^[[2~' overwrite-mode # Insert key | |
bindkey '^[[3~' delete-char # Delete key | |
bindkey '^[[C' forward-char # Right key | |
bindkey '^[[D' backward-char # Left key | |
bindkey '^[[5~' history-beginning-search-backward # Page up key | |
bindkey '^[[6~' history-beginning-search-forward # Page down key | |
# Navigate words with ctrl+arrow keys | |
bindkey '^[Oc' forward-word # | |
bindkey '^[Od' backward-word # | |
bindkey '^[[1;5D' backward-word # | |
bindkey '^[[1;5C' forward-word # | |
#bindkey '^?' backward-delete-char | |
bindkey '^H' backward-delete-char | |
#bindkey '^H' backward-kill-word # delete previous word with ctrl+backspace | |
bindkey '^[[Z' undo # Shift+tab undo last action | |
## Aliases and commands section | |
alias cp="cp -i" # Confirm before overwriting something | |
alias df='df -h' # Human-readable sizes | |
alias free='free -m' # Show sizes in MB | |
alias ls='ls --color=auto' | |
alias ll='ls -l' | |
alias grep='grep --color=auto' | |
alias fgrep='fgrep --color=auto' | |
alias egrep='egrep --color=auto' | |
alias diff='diff --color=auto' | |
command -v lsd > /dev/null && alias ls='lsd --group-dirs first --size short' | |
#command -v lsd > /dev/null && alias tree='lsd --tree' | |
alias bat='bat --theme=ansi' | |
command -v bat > /dev/null && alias cat='bat --pager=never' | |
command -v bat > /dev/null && alias less='bat' | |
alias prime=DRI_PRIME=1 | |
alias rgb="msi-perkeyrgb --model GE63" | |
alias ayy="sudo pacman -Syu; yay -Syua; echo -e '\e[1;33m:: \e[0m\e[1mChecking Flatpak packages...\e[0m' && sudo flatpak update" | |
alias wine32="WINEPREFIX=~/.wine32 wine" | |
alias winecfg32="WINEPREFIX=~/.wine32 winecfg" | |
alias radeontop="radeontop -c" | |
alias sscs="sudo systemctl start" | |
alias sscr="sudo systemctl restart" | |
alias plasma-restart="killall kwin_x11 && kquitapp5 plasmashell && kstart5 plasmashell && kstart5 kwin_x11" | |
# Theming section | |
autoload -U compinit colors zcalc | |
compinit -d | |
colors | |
# Color man pages | |
export LESS_TERMCAP_mb=$'\E[01;32m' | |
export LESS_TERMCAP_md=$'\E[01;32m' | |
export LESS_TERMCAP_me=$'\E[0m' | |
export LESS_TERMCAP_se=$'\E[0m' | |
export LESS_TERMCAP_so=$'\E[01;47;34m' | |
export LESS_TERMCAP_ue=$'\E[0m' | |
export LESS_TERMCAP_us=$'\E[01;36m' | |
export LESS=-r | |
# Enable gpg signing over SSH | |
export GPG_TTY=$(tty) | |
## Plugins section: Enable fish style features | |
# Use syntax highlighting | |
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh | |
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern) | |
ZSH_HIGHLIGHT_STYLES[default]=none | |
ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=red,bold | |
ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=blue,bold | |
ZSH_HIGHLIGHT_STYLES[suffix-alias]=fg=green,underline | |
ZSH_HIGHLIGHT_STYLES[global-alias]=fg=magenta | |
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]=underline | |
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 | |
ZSH_HIGHLIGHT_STYLES[process-substitution]=none | |
ZSH_HIGHLIGHT_STYLES[process-substitution-delimiter]=fg=magenta | |
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]=fg=magenta | |
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]=fg=magenta | |
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 | |
ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]=fg=magenta | |
ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]=fg=magenta | |
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=green | |
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 | |
# Use history substring search | |
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh | |
# bind UP and DOWN arrow keys to history substring search | |
zmodload zsh/terminfo | |
bindkey "$terminfo[kcuu1]" history-substring-search-up | |
bindkey "$terminfo[kcud1]" history-substring-search-down | |
bindkey '^[[A' history-substring-search-up | |
bindkey '^[[B' history-substring-search-down | |
# Offer to install missing package if command is not found | |
if [[ -r /usr/share/zsh/functions/command-not-found.zsh ]]; then | |
source /usr/share/zsh/functions/command-not-found.zsh | |
export PKGFILE_PROMPT_INSTALL_MISSING=1 | |
fi | |
# Prompt (on left side) similar to default bash prompt, or redhat zsh prompt with colors | |
PROMPT="%B[%(!.%{$fg[red]%}%n%{$reset_color%}.%{$fg[cyan]%}%n%{$reset_color%})%B@%(!.%{$fg[red]%}%m%{$reset_color%}.%{$fg[cyan]%}%m%{$reset_color%}) %{$fg[green]%}%c%{$reset_color%}%B]―[%(!.%{$fg[red]%}%y%{$reset_color%}.%{$fg[cyan]%}%y%{$reset_color%})%B] | |
>> %(!.%{$fg[red]%}%(!.#.$)%{$reset_color%}.%{$fg[cyan]%}%(!.#.$)%{$reset_color%}) " | |
## Prompt on right side: | |
# - shows status of git when in git repository (code adapted from https://techanic.net/2012/12/30/my_git_prompt_for_zsh.html) | |
# - shows exit status of previous command (if previous command finished with an error) | |
# - is invisible, if neither is the case | |
# Modify the colors and symbols in these variables as desired. | |
GIT_PROMPT_SYMBOL="%{$fg[blue]%}±" # plus/minus - clean repo | |
GIT_PROMPT_PREFIX="%{$fg[green]%}[%{$reset_color%}" | |
GIT_PROMPT_SUFFIX="%{$fg[green]%}]%{$reset_color%}" | |
GIT_PROMPT_AHEAD="%{$fg[red]%}ANUM%{$reset_color%}" # A"NUM" - ahead by "NUM" commits | |
GIT_PROMPT_BEHIND="%{$fg[cyan]%}BNUM%{$reset_color%}" # B"NUM" - behind by "NUM" commits | |
GIT_PROMPT_MERGING="%{$fg_bold[magenta]%}⚡︎%{$reset_color%}" # lightning bolt - merge conflict | |
GIT_PROMPT_UNTRACKED="%{$fg_bold[red]%}●%{$reset_color%}" # red circle - untracked files | |
GIT_PROMPT_MODIFIED="%{$fg_bold[yellow]%}●%{$reset_color%}" # yellow circle - tracked files modified | |
GIT_PROMPT_STAGED="%{$fg_bold[green]%}●%{$reset_color%}" # green circle - staged changes present = ready for "git push" | |
parse_git_branch() { | |
# Show Git branch/tag, or name-rev if on detached head | |
( git symbolic-ref -q HEAD || git name-rev --name-only --no-undefined --always HEAD ) 2> /dev/null | |
} | |
parse_git_state() { | |
# Show different symbols as appropriate for various Git repository states | |
# Compose this value via multiple conditional appends. | |
local GIT_STATE="" | |
local NUM_AHEAD="$(git log --oneline @{u}.. 2> /dev/null | wc -l | tr -d ' ')" | |
if [ "$NUM_AHEAD" -gt 0 ]; then | |
GIT_STATE=$GIT_STATE${GIT_PROMPT_AHEAD//NUM/$NUM_AHEAD} | |
fi | |
local NUM_BEHIND="$(git log --oneline ..@{u} 2> /dev/null | wc -l | tr -d ' ')" | |
if [ "$NUM_BEHIND" -gt 0 ]; then | |
GIT_STATE=$GIT_STATE${GIT_PROMPT_BEHIND//NUM/$NUM_BEHIND} | |
fi | |
local GIT_DIR="$(git rev-parse --git-dir 2> /dev/null)" | |
if [ -n $GIT_DIR ] && test -r $GIT_DIR/MERGE_HEAD; then | |
GIT_STATE=$GIT_STATE$GIT_PROMPT_MERGING | |
fi | |
if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then | |
GIT_STATE=$GIT_STATE$GIT_PROMPT_UNTRACKED | |
fi | |
if ! git diff --quiet 2> /dev/null; then | |
GIT_STATE=$GIT_STATE$GIT_PROMPT_MODIFIED | |
fi | |
if ! git diff --cached --quiet 2> /dev/null; then | |
GIT_STATE=$GIT_STATE$GIT_PROMPT_STAGED | |
fi | |
if [[ -n $GIT_STATE ]]; then | |
echo "$GIT_PROMPT_PREFIX$GIT_STATE$GIT_PROMPT_SUFFIX" | |
fi | |
} | |
git_prompt_string() { | |
local git_where="$(parse_git_branch)" | |
# If inside a Git repository, print its branch and state | |
[ -n "$git_where" ] && echo "$GIT_PROMPT_SYMBOL$(parse_git_state)$GIT_PROMPT_PREFIX%{$fg[yellow]%}${git_where#(refs/heads/|tags/)}$GIT_PROMPT_SUFFIX" | |
# If not inside the Git repo, print exit codes of last command (only if it failed) | |
[ ! -n "$git_where" ] && echo "%{$fg[red]%} %(?..[%?])" | |
} | |
# Right prompt with exit status of previous command if not successful | |
#RPROMPT="%{$fg[red]%} %(?..[%?])" | |
# Right prompt with exit status of previous command marked with ✓ or ✗ | |
#RPROMPT="%(?.%{$fg[green]%}✓ %{$reset_color%}.%{$fg[red]%}✗ %{$reset_color%})" | |
# Apply different settigns for different terminals | |
case $(basename "$(cat "/proc/$PPID/comm")") in | |
login) | |
RPROMPT="%{$fg[red]%} %(?..[%?])" | |
alias x='startx ~/.xinitrc' # Type name of desired desktop after x, xinitrc is configured for it | |
;; | |
# 'tmux: server') | |
# RPROMPT='$(git_prompt_string)' | |
# ## Base16 Shell color themes. | |
# #possible themes: 3024, apathy, ashes, atelierdune, atelierforest, atelierhearth, | |
# #atelierseaside, bespin, brewer, chalk, codeschool, colors, default, eighties, | |
# #embers, flat, google, grayscale, greenscreen, harmonic16, isotope, londontube, | |
# #marrakesh, mocha, monokai, ocean, paraiso, pop (dark only), railscasts, shapesifter, | |
# #solarized, summerfruit, tomorrow, twilight | |
# #theme="eighties" | |
# #Possible variants: dark and light | |
# #shade="dark" | |
# #BASE16_SHELL="/usr/share/zsh/scripts/base16-shell/base16-$theme.$shade.sh" | |
# #[[ -s $BASE16_SHELL ]] && source $BASE16_SHELL | |
# # Use autosuggestion | |
# source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh | |
# ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20 | |
# ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' | |
# ;; | |
*) | |
RPROMPT='$(git_prompt_string)' | |
# Use autosuggestion | |
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh | |
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=20 | |
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8' | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment