## Path section # Set $PATH if ~/.local/bin exist if [ -d "$HOME/.local/bin" ]; then export PATH=$HOME/.local/bin:$PATH fi eval "$(starship init zsh)" function set_win_title(){ echo -ne "\033]0; $USER@$HOST:${PWD/$HOME/~} \007" } precmd_functions+=(set_win_title) ## Plugins section: Enable fish style features # Use syntax highlighting source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # Use autosuggestion source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh # Use history substring search source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh # Use fzf source /usr/share/fzf/key-bindings.zsh source /usr/share/fzf/completion.zsh # Arch Linux command-not-found support, you must have package pkgfile installed # https://wiki.archlinux.org/index.php/Pkgfile#.22Command_not_found.22_hook [[ -e /usr/share/doc/pkgfile/command-not-found.zsh ]] && source /usr/share/doc/pkgfile/command-not-found.zsh # Advanced command-not-found hook [[ -e /usr/share/doc/find-the-command/ftc.zsh ]] && source /usr/share/doc/find-the-command/ftc.zsh ## 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. setopt auto_pushd setopt pushd_ignore_dups setopt pushdminus # Completion. autoload -Uz compinit compinit zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # Case insensitive tab completion zstyle ':completion:*' rehash true # automatically find new executables in path zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}" # Colored completion (different colors for dirs/files/etc) zstyle ':completion:*' completer _expand _complete _ignored _approximate zstyle ':completion:*' menu select zstyle ':completion:*' select-prompt '%SScrolling active: current selection at %p%s' zstyle ':completion:*:descriptions' format '%U%F{cyan}%d%f%u' # Speed up completions zstyle ':completion:*' accept-exact '*(N)' zstyle ':completion:*' use-cache on zstyle ':completion:*' cache-path ~/.cache/zcache # automatically load bash completion functions autoload -U +X bashcompinit && bashcompinit HISTFILE=~/.zhistory HISTSIZE=50000 SAVEHIST=10000 ## Keys # Use emacs key bindings bindkey -e # [PageUp] - Up a line of history if [[ -n "${terminfo[kpp]}" ]]; then bindkey -M emacs "${terminfo[kpp]}" up-line-or-history bindkey -M viins "${terminfo[kpp]}" up-line-or-history bindkey -M vicmd "${terminfo[kpp]}" up-line-or-history fi # [PageDown] - Down a line of history if [[ -n "${terminfo[knp]}" ]]; then bindkey -M emacs "${terminfo[knp]}" down-line-or-history bindkey -M viins "${terminfo[knp]}" down-line-or-history bindkey -M vicmd "${terminfo[knp]}" down-line-or-history fi # Start typing + [Up-Arrow] - fuzzy find history forward if [[ -n "${terminfo[kcuu1]}" ]]; then autoload -U up-line-or-beginning-search zle -N up-line-or-beginning-search bindkey -M emacs "${terminfo[kcuu1]}" up-line-or-beginning-search bindkey -M viins "${terminfo[kcuu1]}" up-line-or-beginning-search bindkey -M vicmd "${terminfo[kcuu1]}" up-line-or-beginning-search fi # Start typing + [Down-Arrow] - fuzzy find history backward if [[ -n "${terminfo[kcud1]}" ]]; then autoload -U down-line-or-beginning-search zle -N down-line-or-beginning-search bindkey -M emacs "${terminfo[kcud1]}" down-line-or-beginning-search bindkey -M viins "${terminfo[kcud1]}" down-line-or-beginning-search bindkey -M vicmd "${terminfo[kcud1]}" down-line-or-beginning-search fi # [Home] - Go to beginning of line if [[ -n "${terminfo[khome]}" ]]; then bindkey -M emacs "${terminfo[khome]}" beginning-of-line bindkey -M viins "${terminfo[khome]}" beginning-of-line bindkey -M vicmd "${terminfo[khome]}" beginning-of-line fi # [End] - Go to end of line if [[ -n "${terminfo[kend]}" ]]; then bindkey -M emacs "${terminfo[kend]}" end-of-line bindkey -M viins "${terminfo[kend]}" end-of-line bindkey -M vicmd "${terminfo[kend]}" end-of-line fi # [Shift-Tab] - move through the completion menu backwards if [[ -n "${terminfo[kcbt]}" ]]; then bindkey -M emacs "${terminfo[kcbt]}" reverse-menu-complete bindkey -M viins "${terminfo[kcbt]}" reverse-menu-complete bindkey -M vicmd "${terminfo[kcbt]}" reverse-menu-complete fi # [Backspace] - delete backward bindkey -M emacs '^?' backward-delete-char bindkey -M viins '^?' backward-delete-char bindkey -M vicmd '^?' backward-delete-char # [Delete] - delete forward if [[ -n "${terminfo[kdch1]}" ]]; then bindkey -M emacs "${terminfo[kdch1]}" delete-char bindkey -M viins "${terminfo[kdch1]}" delete-char bindkey -M vicmd "${terminfo[kdch1]}" delete-char else bindkey -M emacs "^[[3~" delete-char bindkey -M viins "^[[3~" delete-char bindkey -M vicmd "^[[3~" delete-char bindkey -M emacs "^[3;5~" delete-char bindkey -M viins "^[3;5~" delete-char bindkey -M vicmd "^[3;5~" delete-char fi typeset -g -A key if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then autoload -Uz add-zle-hook-widget function zle_application_mode_start { echoti smkx } function zle_application_mode_stop { echoti rmkx } add-zle-hook-widget -Uz zle-line-init zle_application_mode_start add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop fi # Control Left - go back a word key[Control-Left]="${terminfo[kLFT5]}" if [[ -n "${key[Control-Left]}" ]]; then bindkey -M emacs "${key[Control-Left]}" backward-word bindkey -M viins "${key[Control-Left]}" backward-word bindkey -M vicmd "${key[Control-Left]}" backward-word fi # Control Left - go forward a word key[Control-Right]="${terminfo[kRIT5]}" if [[ -n "${key[Control-Right]}" ]]; then bindkey -M emacs "${key[Control-Right]}" forward-word bindkey -M viins "${key[Control-Right]}" forward-word bindkey -M vicmd "${key[Control-Right]}" forward-word fi # Alt Left - go back a word key[Alt-Left]="${terminfo[kLFT3]}" if [[ -n "${key[Alt-Left]}" ]]; then bindkey -M emacs "${key[Alt-Left]}" backward-word bindkey -M viins "${key[Alt-Left]}" backward-word bindkey -M vicmd "${key[Alt-Left]}" backward-word fi # Control Right - go forward a word key[Alt-Right]="${terminfo[kRIT3]}" if [[ -n "${key[Alt-Right]}" ]]; then bindkey -M emacs "${key[Alt-Right]}" forward-word bindkey -M viins "${key[Alt-Right]}" forward-word bindkey -M vicmd "${key[Alt-Right]}" forward-word fi ## Useful aliases # Replace ls with exa alias ls='exa -al --color=always --group-directories-first --icons' # preferred listing alias la='exa -a --color=always --group-directories-first --icons' # all files and dirs alias ll='exa -l --color=always --group-directories-first --icons' # long format alias lt='exa -aT --color=always --group-directories-first --icons' # tree listing alias l.='exa -ald --color=always --group-directories-first --icons .*' # show only dotfiles # Replace some more things with better alternatives alias cat='bat --style header --style snip --style changes --style header' [ ! -x /usr/bin/yay ] && [ -x /usr/bin/paru ] && alias yay='paru' # Common use alias grubup="sudo update-grub" alias fixpacman="sudo rm /var/lib/pacman/db.lck" alias tarnow='tar -acf ' alias untar='tar -zxvf ' alias wget='wget -c ' alias rmpkg="sudo pacman -Rdd" alias psmem='ps auxf | sort -nr -k 4' alias psmem10='ps auxf | sort -nr -k 4 | head -10' alias upd='/usr/bin/garuda-update' alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' alias ......='cd ../../../../..' alias dir='dir --color=auto' alias vdir='vdir --color=auto' alias grep='ugrep --color=auto' alias fgrep='ugrep -F --color=auto' alias egrep='ugrep -E --color=auto' alias hw='hwinfo --short' # Hardware Info alias big="expac -H M '%m\t%n' | sort -h | nl" # Sort installed packages according to size in MB (expac must be installed) alias gitpkg='pacman -Q | grep -i "\-git" | wc -l' # List amount of -git packages alias ip='ip -color' # Get fastest mirrors alias mirror="sudo reflector -f 30 -l 30 --number 10 --verbose --save /etc/pacman.d/mirrorlist" alias mirrord="sudo reflector --latest 50 --number 20 --sort delay --save /etc/pacman.d/mirrorlist" alias mirrors="sudo reflector --latest 50 --number 20 --sort score --save /etc/pacman.d/mirrorlist" alias mirrora="sudo reflector --latest 50 --number 20 --sort age --save /etc/pacman.d/mirrorlist" # Help people new to Arch alias apt='man pacman' alias apt-get='man pacman' alias please='sudo' alias tb='nc termbin.com 9999' alias helpme='cht.sh --shell' alias pacdiff='sudo -H DIFFPROG=meld pacdiff' # Cleanup orphaned packages alias cleanup='sudo pacman -Rns $(pacman -Qtdq)' # Get the error messages from journalctl alias jctl="journalctl -p 3 -xb" # Recent installed packages alias rip="expac --timefmt='%Y-%m-%d %T' '%l\t%n %v' | sort | tail -200 | nl" # Load Mcfly export MCFLY_FUZZY=true export MCFLY_RESULTS=20 export MCFLY_INTERFACE_VIEW=BOTTOM export MCFLY_RESULTS_SORT=LAST_RUN eval "$(mcfly init zsh)" ## Run neofetch neofetch