Created
November 12, 2020 11:30
-
-
Save illescasDaniel/570d63e21355ea26d76a4d158616d334 to your computer and use it in GitHub Desktop.
manjaro awesome zshrc
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
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc. | |
# Initialization code that may require console input (password prompts, [y/n] | |
# confirmations, etc.) must go above this block; everything else may go below. | |
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 | |
## Options section | |
# setopt correct # Auto correct mistakes | |
setopt extendedglob # Extended globbing. Allows using regular expressions with * | |
setopt nocaseglob # Case insensitive globbing | |
setopt rcexpandparam # Array expension with parameters | |
setopt nocheckjobs # Don't warn about running processes when exiting | |
setopt numericglobsort # Sort filenames numerically when it makes sense | |
setopt nobeep # No beep | |
setopt appendhistory # Immediately append history instead of overwriting | |
setopt histignorealldups # If a new command is a duplicate, remove the older one | |
setopt autocd # if only directory path is entered, cd there. | |
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 | |
HISTFILE=~/.zhistory | |
HISTSIZE=1000 | |
SAVEHIST=500 | |
#export EDITOR=/usr/bin/nano | |
#export VISUAL=/usr/bin/nano | |
WORDCHARS=${WORDCHARS//\/[&.;]} # Don't consider certain characters part of the word | |
## 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 '^H' backward-kill-word # delete previous word with ctrl+backspace | |
bindkey '^[[Z' undo # Shift+tab undo last action | |
## Alias 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 gitu='git add . && git commit && git push' | |
alias vim="nvim" | |
alias vi="nvim" | |
alias d-findPackage="apt list -a" | |
alias d-clangc="clang++ -Wall -std=c++17" | |
alias d-pm-install="sudo pacman -S" | |
alias d-pm-update="sudo pacman -Sy" | |
alias d-pm-clean="sudo pacman -Rns $(pacman -Qdtq)" | |
alias d-yay-install="yay -S" | |
alias d-pm-upgrade="sudo pacman -Syu" | |
alias d-yay-upgrade="yay -Syu" | |
alias d-pm-remove="sudo pacman -Rsc" | |
alias d-list="exa --long --all --header --git --classify" | |
alias d-listv="exa --long --header --git --classify" | |
alias d-list-trash="gio list -lh trash://" | |
alias d-open="gio open" | |
alias d-show="bat" | |
alias d-edit="nvim" | |
alias d-sedit="sudo nvim" | |
alias d-editT="nvim -p" | |
alias d-seditT="sudo nvim -p" | |
alias d-editV="nvim -O" | |
alias d-seditV="sudo nvim -O" | |
alias d-editH="nvim -o" | |
alias d-seditH="sudo nvim -o" | |
alias d-sshow="sudo batcat" | |
alias d-sedit="sudo micro" | |
alias d-copy="gio copy --progress --interactive" | |
alias d-copyb="d-copy --backup" | |
alias d-move="gio move --progress --interactive" | |
alias d-moveb="d-move --backup" | |
alias d-scopy="sudo gio copy --progress --interactive" | |
alias d-scopyr="sudo cp --recursive --interactive" | |
alias d-scopyb="sudo d-copy --backup" | |
alias d-smove="sudo gio move --progress --interactive" | |
alias d-smoveb="sudo d-move --backup" | |
alias d-rename="gio rename" | |
alias d-srename="sudo gio rename" | |
alias d-tree="gio tree" | |
alias d-trash="gio trash" | |
alias d-strash="sudo gio trash" | |
alias d-mkdir="gio mkdir --parent" | |
alias d-smkdir="sudo gio mkdir --parent" | |
alias d-man="tldr" | |
# Theming section | |
autoload -U compinit colors zcalc | |
compinit -d | |
colors | |
# enable substitution for prompt | |
setopt prompt_subst | |
# Prompt (on left side) similar to default bash prompt, or redhat zsh prompt with colors | |
#PROMPT="%(!.%{$fg[red]%}[%n@%m %1~]%{$reset_color%}# .%{$fg[green]%}[%n@%m %1~]%{$reset_color%}$ " | |
# Maia prompt | |
PROMPT="%B%{$fg[cyan]%}%(4~|%-1~/.../%2~|%~)%u%b >%{$fg[cyan]%}>%B%(?.%{$fg[cyan]%}.%{$fg[red]%})>%{$reset_color%}%b " # Print some system information when the shell is first started | |
# Print a greeting message when shell is started | |
echo $USER@$HOST $(uname -srm) $(lsb_release -rcs) | |
## 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%})" | |
# 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 | |
# Exports | |
export TERMINAL="kitty" | |
export EDITOR="nvim" | |
# setup node | |
source /usr/share/nvm/init-nvm.sh | |
# automatically run | |
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme | |
xrdb -merge ~/.Xresources | |
neofetch | |
## Plugins section: Enable fish style features | |
# Use syntax highlighting | |
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh | |
# 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 | |
# 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 | |
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. | |
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment