Files
hyprland/misc/.zshrc
T
2026-07-20 22:12:19 +05:45

367 lines
11 KiB
Bash

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
# ┬ ┬┌─┐┬─┐┌─┐
# └┐┌┘├─┤├┬┘└─┐
# └┘ ┴ ┴┴└─└─┘
export VISUAL="${EDITOR}"
export EDITOR='nvim'
export BROWSER='zen-browser'
export HISTORY_IGNORE="(ls|cd|pwd|exit|sudo reboot|history|cd -|cd ..)"
export SUDO_PROMPT="Deploying root access for %u. Password pls: "
export BAT_THEME="base16"
export ANDROID_HOME="$HOME/Android/Sdk"
export ANDROID_SDK_ROOT="$ANDROID_HOME"
export PNPM_HOME="$HOME/.local/share/pnpm"
export PATH="$PNPM_HOME:$PATH"
typeset -U path PATH
path=(
"$HOME/.local/bin"
"$ANDROID_HOME/emulator"
"$ANDROID_HOME/platform-tools"
"$ANDROID_HOME/tools"
"$ANDROID_HOME/tools/bin"
$path
)
export PATH
# ┬ ┌─┐┌─┐┌┬┐ ┌─┐┌┐┌┌─┐┬┌┐┌┌─┐
# │ │ │├─┤ ││ ├┤ ││││ ┬││││├┤
# ┴─┘└─┘┴ ┴─┴┘ └─┘┘└┘└─┘┴┘└┘└─┘
autoload -Uz compinit
mkdir -p "$HOME/.cache/zsh"
local zcompdump="$HOME/.config/zsh/zcompdump"
if [[ -n "$zcompdump"(#qN.mh+24) ]]; then
compinit -i -d "$zcompdump"
else
compinit -C -d "$zcompdump"
fi
if [[ ! -f "${zcompdump}.zwc" || "$zcompdump" -nt "${zcompdump}.zwc" ]]; then
zcompile -U "$zcompdump"
fi
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
precmd () { vcs_info }
_comp_options+=(globdots)
zstyle ':completion:*' menu select
zstyle ':completion:*:descriptions' format '[%d]'
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
zstyle ':completion:*' matcher-list \
'm:{a-zA-Z}={A-Za-z}' \
'+r:|[._-]=* r:|=*' \
'+l:|=*'
zstyle ':vcs_info:*' formats ' %B%s-[%F{magenta}%f %F{yellow}%b%f]-'
zstyle ':fzf-tab:*' fzf-flags --style=full --height=90% --pointer '>' --gutter ' ' \
--color 'pointer:green:bold,bg+:-1:,fg+:green:bold,info:blue:bold,marker:yellow:bold,hl:gray:bold,hl+:gray:bold' \
--input-label ' Search ' --color 'input-border:blue,input-label:blue:bold' \
--list-label ' Results ' --color 'list-border:green,list-label:green:bold' \
--preview-label ' Preview ' --preview-label-pos '27:bottom' --color 'preview-border:magenta,preview-label:magenta:bold'
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'eza -1 --icons=always --color=always -a $realpath'
zstyle ':fzf-tab:complete:eza:*' fzf-preview 'eza -1 --icons=always --color=always -a $realpath'
zstyle ':fzf-tab:complete:bat:*' fzf-preview 'bat --color=always --theme=base16 $realpath'
zstyle ':fzf-tab:*' fzf-bindings 'space:accept'
zstyle ':fzf-tab:*' accept-line enter
# ┬ ┬┌─┐┬┌┬┐┬┌┐┌┌─┐ ┌┬┐┌─┐┌┬┐┌─┐
# │││├─┤│ │ │││││ ┬ │││ │ │ └─┐
# └┴┘┴ ┴┴ ┴ ┴┘└┘└─┘ ─┴┘└─┘ ┴ └─┘
expand-or-complete-with-dots() {
echo -n "\e[31m…\e[0m"
zle expand-or-complete
zle redisplay
}
zle -N expand-or-complete-with-dots
bindkey "^I" expand-or-complete-with-dots
# ┬ ┬┬┌─┐┌┬┐┌─┐┬─┐┬ ┬
# ├─┤│└─┐ │ │ │├┬┘└┬┘
# ┴ ┴┴└─┘ ┴ └─┘┴└─ ┴
HISTFILE=~/.config/zsh/zhistory
HISTSIZE=5000
SAVEHIST=5000
HISTDUP=erase
setopt appendhistory
setopt sharehistory
setopt hist_ignore_space
setopt hist_ignore_all_dups
setopt hist_save_no_dups
setopt hist_ignore_dups
setopt hist_find_no_dups
# ┌─┐┌─┐┬ ┬ ┌─┐┌─┐┌─┐┬ ┌─┐┌─┐┌┬┐┬┌─┐┌┐┌┌─┐
# ┌─┘└─┐├─┤ │ │ ││ ││ │ │├─┘ │ ││ ││││└─┐
# └─┘└─┘┴ ┴ └─┘└─┘└─┘┴─┘ └─┘┴ ┴ ┴└─┘┘└┘└─┘
setopt AUTOCD # change directory just by typing its name
setopt PROMPT_SUBST # enable command substitution in prompt
setopt MENU_COMPLETE # Automatically highlight first element of completion menu
setopt LIST_PACKED # The completion menu takes less space.
setopt AUTO_LIST # Automatically list choices on ambiguous completion.
setopt COMPLETE_IN_WORD # Complete from both ends of a word.
# ┌┬┐┬ ┬┌─┐ ┌─┐┬─┐┌─┐┌┬┐┌─┐┌┬┐
# │ ├─┤├┤ ├─┘├┬┘│ ││││├─┘ │
# ┴ ┴ ┴└─┘ ┴ ┴└─└─┘┴ ┴┴ ┴
export STARSHIP_CONFIG="$HOME/.config/starship.toml"
if [[ $- == *i* ]] && command -v starship >/dev/null 2>&1; then
eval "$(starship init zsh)"
fi
if [[ $- == *i* ]] && command -v zoxide >/dev/null 2>&1; then
eval "$(zoxide init zsh)"
fi
# ┌─┐┬ ┬ ┬┌─┐┬┌┐┌┌─┐
# ├─┘│ │ ││ ┬││││└─┐
# ┴ ┴─┘└─┘└─┘┴┘└┘└─┘
source /usr/share/zsh/plugins/fzf-tab-git/fzf-tab.zsh
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/share/zsh/plugins/zsh-history-substring-search/zsh-history-substring-search.zsh
bindkey '^[[A' history-substring-search-up
bindkey '^[[B' history-substring-search-down
bindkey '^[[3~' delete-char
bindkey "^[[H" beginning-of-line
bindkey "^[[F" end-of-line
# ┌─┐┬ ┬┌─┐┌┐┌┌─┐┌─┐ ┌┬┐┌─┐┬─┐┌┬┐┬┌┐┌┌─┐┬ ┌─┐ ┌┬┐┬┌┬┐┬ ┌─┐
# │ ├─┤├─┤││││ ┬├┤ │ ├┤ ├┬┘│││││││├─┤│ └─┐ │ │ │ │ ├┤
# └─┘┴ ┴┴ ┴┘└┘└─┘└─┘ ┴ └─┘┴└─┴ ┴┴┘└┘┴ ┴┴─┘└─┘ ┴ ┴ ┴ ┴─┘└─┘
function xterm_title_precmd () {
print -Pn -- '\e]2;%n@%m %~\a'
[[ "$TERM" == 'screen'* ]] && print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-}\e\\'
}
function xterm_title_preexec () {
print -Pn -- '\e]2;%n@%m %~ %# ' && 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\\"; }
}
if [[ "$TERM" == (kitty*|alacritty*|tmux*|screen*|xterm*) ]]; then
add-zsh-hook -Uz precmd xterm_title_precmd
add-zsh-hook -Uz preexec xterm_title_preexec
fi
# ┌─┐┬ ┬┌─┐┌─┐
# ├─┤│ │├─┤└─┐
# ┴ ┴┴─┘┴┴ ┴└─┘
if command -v trash-put > /dev/null 2>&1; then
alias rm='trash-put'
elif command -v trash > /dev/null 2>&1; then
alias rm='trash -v'
elif command -v gio > /dev/null 2>&1; then
alias rm='gio trash'
else
alias rm='rm -i'
fi
# Navigation
alias home='cd ~'
alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
# Clear / Exit
alias c="clear"
alias cls='clear'
alias q="exit"
alias :q="exit"
# File management
alias ls='eza --icons --group-directories-first'
alias l='ls -lh'
alias la='ls -lah'
alias ll='ls -lah --git'
alias lla='ls -lah'
alias lls='ls -lh'
alias las='ls -a'
alias lt='eza --tree --icons --group-directories-first'
alias ltr='eza --tree --level=2 --icons --group-directories-first'
alias lx='eza -lh --sort=extension --group-directories-first --icons'
alias lk='eza -lh --sort=size --group-directories-first --icons'
alias lc='eza -lh --sort=changed --group-directories-first --icons'
alias lu='eza -lh --sort=accessed --group-directories-first --icons'
alias labc='eza -lh --sort=name --group-directories-first --icons'
alias ltime='eza -lh --sort=modified --group-directories-first --icons'
alias lr='eza -lh -R --icons'
alias lf='eza -lh --only-files --icons'
alias ldir='eza -lh --only-dirs --icons'
alias lw='eza -1 --icons --group-directories-first'
# Chmod
alias mx='chmod a+x'
alias 000='chmod -R 000'
alias 644='chmod -R 644'
alias 666='chmod -R 666'
alias 755='chmod -R 755'
alias 777='chmod -R 777'
# Overrides
alias cp='cp -i'
alias mv='mv -i'
alias mkdir='mkdir -p'
alias ps='ps auxf'
alias ping='ping -c 10'
alias less='less -R'
# alias cat="bat --paging=never --style=plain"
alias grep="grep --color=auto"
alias tree='eza --tree --icons'
# Archives
alias mktar='tar -cvf'
alias mkbz2='tar -cvjf'
alias mkgz='tar -cvzf'
alias untar='tar -xvf'
alias unbz2='tar -xvjf'
ungz() {
tar -xvzf "$@"
}
# Docker
docker-clean() {
command -v docker >/dev/null || {
echo "docker is not installed."
return 1
}
docker system prune -af --volumes
}
alias dockerstart="sudo systemctl start docker"
alias dockerstop="sudo systemctl stop docker"
alias dockerrestart='sudo systemctl restart docker'
alias dockerstatus='systemctl --no-pager status docker'
alias dockerenable='sudo systemctl enable --now docker'
# Extract
extract() {
if (( $# == 0 )); then
echo "Usage: extract <archive> [archive...]"
return 1
fi
for archive in "$@"; do
if [ -f "$archive" ]; then
case $archive in
*.tar.bz2) tar xvjf "$archive" ;;
*.tar.gz) tar xvzf "$archive" ;;
*.bz2) bunzip2 "$archive" ;;
*.rar) rar x "$archive" ;;
*.gz) gunzip "$archive" ;;
*.tar) tar xvf "$archive" ;;
*.tbz2) tar xvjf "$archive" ;;
*.tgz) tar xvzf "$archive" ;;
*.zip) unzip "$archive" ;;
*.Z) uncompress "$archive" ;;
*.7z) 7z x "$archive" ;;
*.tar.xz) tar xvJf "$archive" ;;
*.xz) unxz "$archive" ;;
*) echo "don't know how to extract '$archive'..." ;;
esac
else
echo "'$archive' is not a valid file!"
fi
done
}
# System
cd() {
builtin cd "${1:-$HOME}" || return
eza --icons --group-directories-first
}
update() {
if command -v paru >/dev/null 2>&1; then
paru -Syu "$@"
elif command -v yay >/dev/null 2>&1; then
yay -Syu "$@"
else
sudo pacman -Syu "$@"
fi
}
clean() {
if command -v paru >/dev/null; then
paru -Scc
paru -c
elif command -v yay >/dev/null; then
yay -Scc
yay -c
else
sudo pacman -Scc
fi
}
# Network
alias whatismyip="whatsmyip"
function whatsmyip () {
# Internal IP Lookup.
echo -n "Internal IP: "
if command -v ip >/dev/null 2>&1; then
ip -o -4 route get 1.1.1.1 2>/dev/null | awk '{for (i=1; i<=NF; i++) if ($i == "src") {print $(i+1); exit}}'
elif command -v ifconfig >/dev/null 2>&1; then
ifconfig | awk '/inet / && $2 != "127.0.0.1" {print $2; exit}'
else
echo "unknown"
fi
# External IP Lookup
echo -n "External IP: "
if command -v curl >/dev/null 2>&1; then
curl -4fsS --max-time 5 https://icanhazip.com || echo "unknown"
else
echo "curl not installed"
fi
}
# PYTHON / VENV
venv() {
local env_dir=".venv"
if [[ ! -d "$env_dir" ]]; then
python -m venv "$env_dir"
echo "Created virtual environment"
fi
source "$env_dir/bin/activate"
echo "Activated: $env_dir"
}
act() {
local dir="$PWD"
while [[ "$dir" != "/" ]]; do
for env in ".venv" "venv"; do
if [[ -f "$dir/$env/bin/activate" ]]; then
source "$dir/$env/bin/activate"
echo "Activated: $dir/$env"
return
fi
done
dir="$(dirname "$dir")"
done
echo "No virtual environment found"
}
# Package Manager
alias yayf='yay -Slq | fzf --multi --preview "yay -Sii {1}" --preview-window=down:75% | xargs -r yay -S'
alias paruf='paru -Slq | fzf --multi --preview "paru -Sii {1}" --preview-window=down:75% | xargs -r paru -S'
alias pacf='pacman -Slq | fzf --multi --preview "pacman -Si {1}" --preview-window=down:75% | xargs -r sudo pacman -S'