fpath=($HOME/.local/share/completions $fpath) eval "$(zoxide init zsh --cmd j)" eval "$(dircolors -b)" # history HISTSIZE=10000000 SAVEHIST=10000000 HISTFILE="${HOME}/.cache/zsh_history" alias history='history 1000000000000000' setopt hist_expire_dups_first setopt hist_ignore_dups setopt hist_ignore_all_dups setopt hist_ignore_space setopt hist_find_no_dups setopt hist_save_no_dups setopt inc_append_history # change word-style autoload -U select-word-style select-word-style b # options setopt auto_pushd # keybinds bindkey -e bindkey '^[[Z' reverse-menu-complete bindkey "^[[1;3C" forward-word bindkey "^[[1;5C" forward-word bindkey "^[[1;3D" backward-word bindkey "^[[1;5D" backward-word bindkey "^[[3~" delete-char bindkey "^[n" backward-word bindkey "^[m" forward-word # completions autoload -Uz compinit compinit zstyle ':completion:*' menu select zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' zstyle ':completion:*' list-colors "${(s.:.)LS_COLORS}:ma=48;5;8;38;5;15" # prompt autoload -U colors && colors PS1="%B%{$fg[red]%}[%{$fg[yellow]%}%n%{$fg[green]%}@%{$fg[blue]%}%M %{$fg[magenta]%}%~%{$fg[red]%}]%{$reset_color%}$%b " # ls aliases alias ls="/usr/bin/lsd --color=always --icon=always" alias lsd='/usr/bin/ls' alias l="ls -lh" alias la="ls -lah" alias ll="ls -lh" alias ltr='ls -lt' alias lt="ls -ltr" alias lss='ls -lS' alias lsr='ls -lSr' # set bat as help pager alias bathelp='bat --language=help --style=plain --theme Monokai\ Extended' alias -g -- --help='--help 2>&1 | bathelp' # useful cd aliases alias ..="cd ../" alias ...="cd ../../" alias ....="cd ../../../" alias .....="cd ../../../../" alias ......="cd ../../../../../" alias .......="cd ../../../../../../" alias ........="cd ../../../../../../../" alias .........="cd ../../../../../../../../" alias ..........="cd ../../../../../../../../../" alias ...........="cd ../../../../../../../../../../" alias ............="cd ../../../../../../../../../../../" alias .............="cd ../../../../../../../../../../../../" alias ..............="cd ../../../../../../../../../../../../../" alias ...............="cd ../../../../../../../../../../../../../../" # aliases alias sudo='sudo ' # allow aliases with sudo alias rz='exec zsh' alias venv='source src_venv' alias ex='source src_example' alias pa='source src_add_path' alias info='pinfo' alias bat='bat' alias img='nsxiv' alias xclip='xclip -selection clipboard' alias rgf='rg --files | rg' alias wt='watch --color -d -cn 0.1 ' alias .e='set -a && source .env && set +a' alias vimu='vim -n -u NONE -i NONE -N --noplugin' alias reswap="sudo bash -c 'echo Working...; swapoff /swapfile && sudo swapon /swapfile'" alias make="make -j$(nproc)" alias py='python3' alias q='qalc' alias neofetch='fastfetch' alias open='xdg-open' alias m.='if mount | grep -q "$(pwd)"; then umount -l .; cd .; else mount .; cd .; fi' alias rs='stow -R .' alias sst='ssh -t' alias rdj='rmdir --ignore-fail-on-non-empty ./* 2>/dev/null' alias rdr='rmdir --ignore-fail-on-non-empty ./**/* 2>/dev/null' alias qr='qrencode -t ansiutf8' alias rgi='rg -i' alias rgn='rg --no-ignore --hidden' alias rgni='rg --no-ignore --hidden -i' alias cal='cal -3' alias s='s ' alias c.='cloc --vcs=git .' alias yt='noglob yt-dlp' alias b64='base64' alias c='opencode' alias tar.='tar -cvf out.tar.xz .' # function aliases mkexe() { touch "${1?}"; chmod +x "$1"; }; compdef _files mkexe; bl() { brightnessctl set "$1"% > /dev/null; } nosw() { alacritty --class 'noswallow' -e "$@"; }; compdef _command nosw vims() { filepath="$(type "$1" | rev | cut -d ' ' -f 1 | rev)"; [ $? -eq 0 ] && vim "${filepath}"; }; compdef _command vims tl() { tree -C "$@" | bat; }; compdef _tree tl diff() { /usr/bin/diff --color -u "$@" | delta; }; compdef _files di; # compdef compdef '_files -g "*.md"' md compdef _command s # ansible alias ap='ansible-playbook' alias ag='ansible-galaxy' # git aliases compdef -a '_git; _git-commit' gdc # todo compdef -a '_git; _git-ls-files' gls # todo # compdef -a '_git; _git-reset' grt # todo alias grt='git reset' gl() { git log --decorate "$@" | bat }; compdef '_git; _git-log' gl gus() { git branch --set-upstream-to="${1:?}/${2:?}" "${2:?}" }; compdef '_git; _git-push' gus gpo() { git push --set-upstream origin "$(git rev-parse --abbrev-ref HEAD)" "$@" } gru() { git remote get-url "${1-origin}" }; compdef '_gor' gru gtr() { gls $1 | tree --fromfile . } gh() { vim -c "DiffviewFileHistory $*" } alias ga="git add" alias gb="git branch" alias gc="git commit" alias gca="git commit --allow-empty-message --amend --no-edit --date now" alias gcad='gca --no-gpg-sign' alias gcan="git commit --allow-empty-message --amend --no-edit --no-date" alias gcd='git commit --no-gpg-sign' alias gck="git checkout" alias gcl="git clone" alias gcln!='git clean -xfd' alias gcln='git clean -nxfd' alias gcls="git clone --depth=1" alias gcm="git commit --allow-empty-message -m ''" alias gcmd="git commit --allow-empty-message -m '' --no-gpg-sign" alias gcn!="git clean -fd" alias gcn="git clean -nfd" alias gcp="git cherry-pick" alias gct="gc -am 'Add files via upload :trollface:'" alias gd="git diff" alias gdj='DELTA_FEATURES="+side-by-side" gd' alias gds="gd --staged" alias 'gd?'="gd --stat" alias 'gds?'="gds --stat" alias gdsj='DELTA_FEATURES="+side-by-side" gds' alias gdv='git difftool --tool=vimdiff' alias gf="git fetch" alias gi="git init" alias gla="gl --all" alias glp='gl --pretty=fuller' alias gm="git merge" alias gp="git push" alias gpu="git pull" alias gr="git restore" alias grc='git rm --cached' alias grj="git rebase --committer-date-is-author-date" alias grjc="git rebase --continue" alias grjs="git rebase --cancel" alias grja="git rebase --abort" alias grm="git remote" alias grs="git restore --staged" alias grt!="grt --hard" alias gs="git status" alias gsc="git switch -C" alias gsh="git show" alias 'gsh?'="git show --stat" alias gshj='DELTA_FEATURES="+side-by-side" gsh' alias gsj="git stash" alias gsl="git stash list" alias gsm='git submodule' alias gsp="git stash pop" alias gt="git tag" alias gus="git fetch --unshallow" alias gpo='git push --set-upstream origin "$(git rev-parse --abbrev-ref HEAD)"' alias gj='vim -c DiffviewOpen' alias ghk='git config set core.hooksPath .githooks' # docker aliases alias d='docker' alias dc='docker compose' alias d!='/usr/bin/docker' alias dc!='d! compose' alias di='docker image' alias dru='docker run --rm -it' alias dv='docker volume' alias dj='docker compose up -d --force-recreate' alias djb='docker compose up -d --force-recreate --build' alias djn='docker compose up -d' alias dk='docker compose down' alias dl='docker compose logs -f' alias dp='docker compose ps' alias dpu='docker compose pull' alias dr='docker compose restart' alias ds='docker compose stop' alias de='docker compose exec -it' # TODO: make these functions alias djbl='docker compose up -d --force-recreate --build && dl' alias djl='docker compose up -d --force-recreate && dl' alias drsl='docker compose restart && dl' # tmux stuff tn() { tmux new-session -s "${1-"$(basename "$(pwd)")"}" } ta() { tmux a -t "$1" } # alias ta='tmux a -t' # disable xon control chars stty -ixon # print tasks on startup TODO_FILE="${HOME}/todo.md" [ -f "$TODO_FILE" ] && { cat "$TODO_FILE" | grep -v '>.*'; } unset TODO_FILE setopt extendedglob autoload add-zsh-hook for file in "$ZDOTDIR/cd_hooks/"^_*; do fname="cd_::$(basename "$file")" eval " $fname() { $(cat "$file")"' if [ -n "$DIRNAME" ]; then if [[ "$PWD/" = "$DIRNAME"*/ && ( "$OLDPWD/" != "$DIRNAME"*/ || "$PWD" = "$OLDPWD" ) ]]; then cd::enter elif [[ "$PWD/" != "$DIRNAME"*/ && "$OLDPWD/" = "$DIRNAME"*/ ]]; then cd::leave; fi elif [ -n "$BASE_DIR" ]; then : # TODO: handle fi } ' add-zsh-hook chpwd "$fname" "$fname" done unsetopt extendedglob CD_HOOKS_COMPLETED=1