zsh/.aliases.zsh

# ~/.aliases.zsh -- sourced from ~/.zshrc
# See mercemay.top/src/dotfiles/

# ---- ls / eza ---------------------------------------------------------
if command -v eza >/dev/null 2>&1; then
	alias ls='eza --group-directories-first'
	alias ll='eza -l --git --group-directories-first'
	alias la='eza -la --git --group-directories-first'
	alias tree='eza --tree --git-ignore'
else
	alias ll='ls -lh'
	alias la='ls -lah'
fi

# ---- cat / bat --------------------------------------------------------
if command -v bat >/dev/null 2>&1; then
	alias cat='bat --paging=never --style=plain'
fi

# ---- grep -------------------------------------------------------------
alias grep='grep --color=auto'
alias ip='ip -color=auto'

# ---- editor -----------------------------------------------------------
alias v='nvim'
alias vi='nvim'
alias vim='nvim'

# ---- git --------------------------------------------------------------
alias g='git'
alias gs='git status -sb'
alias gd='git diff'
alias gds='git diff --staged'
alias gl='git log --oneline --graph --decorate -20'
alias gll='git log --oneline --graph --decorate --all'
alias gco='git switch'
alias gcb='git switch -c'
alias ga='git add'
alias gap='git add -p'
alias gc='git commit'
alias gca='git commit --amend'
alias gp='git push'
alias gpu='git push -u origin HEAD'
alias gpl='git pull --ff-only'
alias grb='git rebase'
alias grbi='git rebase -i'
alias gst='git stash'

# ---- tmux -------------------------------------------------------------
alias ta='tmux attach -t'
alias tls='tmux ls'
alias tn='tmux new -s'

# ---- docker -----------------------------------------------------------
alias dc='docker compose'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'

# ---- shortcuts --------------------------------------------------------
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias mkd='mkdir -pv'
alias path='echo -e ${PATH//:/\\n}'
alias ports='sudo lsof -iTCP -sTCP:LISTEN -n -P'

# ---- mini functions ---------------------------------------------------
mkcd() { mkdir -p "$1" && cd "$1"; }
extract() {
	[[ -f "$1" ]] || { echo "no such file: $1" >&2; return 1; }
	case "$1" in
		*.tar.gz|*.tgz)   tar xzf "$1" ;;
		*.tar.bz2|*.tbz2) tar xjf "$1" ;;
		*.tar.xz)         tar xJf "$1" ;;
		*.tar.zst)        tar --zstd -xf "$1" ;;
		*.zip)            unzip "$1" ;;
		*.gz)             gunzip "$1" ;;
		*) echo "don't know how to extract $1" >&2; return 2 ;;
	esac
}