261 lines
9.8 KiB
Bash
261 lines
9.8 KiB
Bash
## 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
|