summaryrefslogtreecommitdiff
path: root/config/essentials/shell
diff options
context:
space:
mode:
authorRaymaekers Luca <raymaekers.luca@gmail.com>2023-12-12 17:21:11 +0100
committerRaymaekers Luca <raymaekers.luca@gmail.com>2023-12-12 17:21:11 +0100
commitf09fce4ff51ff3e26a4d77b23ca34950c9162fc0 (patch)
treeec18b3c02cab7f17574d1168f7a40693ae610cc6 /config/essentials/shell
parentffc2a7d3cee6385508601374bdd34db253b70c65 (diff)
use seperate shell folder that works cross shells
Diffstat (limited to 'config/essentials/shell')
-rw-r--r--config/essentials/shell/aliases.sh500
-rw-r--r--config/essentials/shell/functions.sh306
2 files changed, 806 insertions, 0 deletions
diff --git a/config/essentials/shell/aliases.sh b/config/essentials/shell/aliases.sh
new file mode 100644
index 0000000..157e7aa
--- /dev/null
+++ b/config/essentials/shell/aliases.sh
@@ -0,0 +1,500 @@
+#!/bin/sh
+# s/alias \([^-]\)/alias -g \1
+
+# The most important one
+alias vi='emacsclient -nw'
+
+# Zsh specific aliases
+if [ $SHELL = "/bin/zsh" ]
+then
+ # googoo aliases
+ alias o~='o $HOME'
+ alias o/='o /'
+ alias o/s='o /srv'
+ alias go~='go $HOME'
+ alias go/='go /'
+ alias go/s='go /srv'
+ alias ogo~='ogo $HOME'
+ alias ogo/='ogo /'
+ alias ogo/s='ogo /srv'
+
+ alias calc='bc <<<'
+
+ if [ -z "$WAYLAND_DISPLAY" ]
+ then
+ if which devour > /dev/null 2>&1
+ then
+ alias mpv='devour mpv'
+ alias zathura='devour zathura'
+ fi
+ fi
+ alias clipic='clipo > /tmp/pic.png'
+
+ alias -g '...'='../..'
+ alias -g '....'='../../..'
+ alias -g bg='&; disown'
+ alias -g hl='--help |& less -r'
+fi
+
+
+if grep -qi "debian\|ubuntu" /etc/os-release 2> /dev/null
+then
+ alias aptup='apt update && apt upgrade -y'
+ alias ufwd='while echo y | ufw delete "$(ufw status numbered | tail -n +5 | fzf | cut -f2 -d'\''['\'' | cut -f1 -d'\'']'\'')" > /dev/null 2>&1 && >&2 echo "deleted."; do :; done'
+fi
+
+# Programs
+alias nb='newsboat'
+alias sr='surfraw'
+alias ccu='calcurse'
+alias pf='profanity'
+
+alias gurk='pgrep gurk > /dev/null && printf "Already Running.\n" || gurk'
+
+alias arduino-cli='arduino-cli --config-file $XDG_CONFIG_HOME/arduino15/arduino-cli.yaml'
+
+if [ -x /usr/bin/dircolors ] || [ -x $HOME/../usr/bin/dircolors ]
+then
+ test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
+ # alias ls='ls -h --color --group-directories-first'
+ #alias dir='dir --color=auto'
+ #alias vdir='vdir --color=auto'
+
+ alias grep='grep --color=auto'
+ alias fgrep='fgrep --color=auto'
+ alias egrep='egrep --color=auto'
+ alias ip='ip -color=auto'
+ alias ipa='ip -br a'
+fi
+
+alias l='ls -l'
+alias l1='ls -1'
+alias ll='ls -la'
+alias la='ls -aF'
+alias lst='ls --tree'
+alias lst1='ls --tree -L1'
+alias lst2='ls --tree -L2'
+alias lst3='ls --tree -L3'
+alias ls.='ls -dl .*'
+which exa >/dev/null 2>&1 &&
+ alias ls='exa --sort extension --group-directories-first' ||
+ alias ls='ls --color --group-directories-first --sort=extension'
+
+# pacman aliases
+alias pac='pacman'
+alias pacsi='pac -Si'
+alias pacs='pac -Ss'
+alias pacq='pac -Q'
+alias pacql='pac -Ql'
+alias pacqs='pac -Qs'
+alias paci='pac -Qi'
+
+alias pacup='dopac -Syu'
+alias dopac='doas pacman'
+alias orpac='pacman -Qtdq | dopac -Rns - 2> /dev/null || echo "No orphans."'
+alias dopacs='dopac -S'
+alias dopacc='dopac -Sc'
+alias doprm='dopac -Rns'
+
+alias mpkg='makepkg -si'
+
+which pikaur > /dev/null 2>&1 &&
+ alias yay='pikaur'
+alias yup='yay -Syu'
+alias ysi='yay -Si'
+alias yss='yay -Ss'
+alias yqs='yay -Qs'
+alias yql='yay -Ql'
+alias yays='yay -S'
+alias yrm='yay -Rns'
+
+alias pkb='pkgfile -b'
+
+# transmission
+alias trr='transmission-remote debuc.com'
+alias trls='transmission-remote debuc.com -t all -l'
+alias tradd='transmission-remote debuc.com -a'
+alias trclipo='transmission-remote debuc.com -a "$(clipo)"'
+
+alias grub-update='doas grub-mkconfig -o /boot/grub/grub.cfg'
+
+# vim
+alias vimp="vim '+PlugInstall'"
+alias nvimp="nvim '+PackerSync'"
+alias nvg='git status > /dev/null 2>&1 && nvim "+Git"'
+alias nvn='nvim "+Telekasten panel"'
+
+alias xrandr-rpgmaker='xrandr --auto --output VGA-1 --mode 1024x768 --left-of HDMI-1 && ~/.fehbg'
+alias xrandr-default='xrandr --auto --output VGA-1 --mode 1920x1080 --left-of HDMI-1 --output HDMI-1 --mode 1920x1080 && ~/.fehbg'
+
+alias d='du -d 0 -h'
+alias dud='du .* * -d 0 -h 2>/dev/null | sort -h'
+alias df='df -h'
+alias diff='diff -u --color'
+alias shred='shred -uz'
+alias lsblk='lsblk -o name,type,fsused,fsavail,size,fstype,label,mountpoint'
+alias sxt='sxiv -t'
+alias wgsh='wget --quiet --show-progress'
+alias wgc='wgsh "$(clipo)"'
+alias ss4='ss -tln4p'
+alias mdb='mariadb -u admin -ppass admindb'
+alias mdbw='mariadb -h 0.0.0.0 -u padmin -pbulbizarre padmindb'
+alias mdbwa='mariadb -h 10.3.50.5 -u padmin -pbulbizarre padmindb'
+alias tmux='tmux a || tmux'
+
+# ssh
+alias sha='ssh-add'
+alias sshs='eval "$(ssh-agent)" && ssh-add'
+alias vidlen='ffprobe -show_entries format=duration -v quiet -of csv="p=0" -i'
+alias whatsmyip='curl -s "ifconfig.co"'
+alias icognito='unset HISTFILE'
+alias webcam='v4l2-ctl --set-fmt-video=width=1280,height=720; mpv --demuxer-lavf-format=video4linux2 --demuxer-lavf-o-set=input_format=mjpeg av://v4l2:/dev/video0 --profile=low-latency --untimed --no-resume-playback'
+alias capture='echo "Y" | wf-recorder -o "$(hyprctl -j monitors | jq -r '\''.[].name'\'' | fzf)" --codec=vp8_vaapi --device=/dev/dri/renderD128 -f output.webm -D'
+alias qrclipo='qrencode -s 16 "$(clipo)" -o - | imv -w "imv - $(clipo)" -'
+alias airpods='bluetoothctl connect 60:93:16:24:00:10'
+alias hotpsot='nmcli dev wifi hotspot ifname wlan0 ssid wiefie password "peepeepoopoo"'
+alias wtip='wt ip -c -brief addr'
+alias fusephone='sshfs myphone: /media/phone'
+alias ttyper='ttyper -l english1000 -w 100'
+
+alias wgup='doas wg-quick up wg0'
+alias wgdown='doas wg-quick down wg0'
+
+# NPM
+alias npi="npm init --yes"
+
+# Python
+alias penv='python3 -m venv env'
+alias phttp='python3 -m http.server'
+alias pipreq='pip install -r requirements.txt'
+
+alias ch='chown ${USER}:${USER} -R'
+alias kll='killall'
+alias pi='ping 9.9.9.9 -c4'
+alias sba='source env/bin/activate || source bin/activate'
+
+alias zsr='source ${ZDOTDIR:-~}/.zshrc && rehash'
+alias rh='rehash'
+alias wf='doas wipefs -a'
+alias dmci="doas make clean install"
+alias rmd='rm -f *.{orig,rej}'
+alias cdzot='mkdir -p /tmp/zottesite && cd /tmp/zottesite'
+alias gdate='date +%y_%m_%d-%T'
+alias tpid='tail -f /dev/null --pid'
+alias pwdcp='pwd | clipp'
+alias gw="grep -ri"
+alias srcsupd='echo ~/src/{installdrier,dotfiles,password-store} ~/.config/emacs | supd'
+
+# systemctl aliases
+alias smc='systemctl'
+alias smcs='systemctl status'
+alias smcst='systemctl start'
+alias smcS='systemctl stop'
+alias smcr='systemctl restart'
+alias smcrl='systemctl reload'
+alias smcd='systemctl daemon-reload'
+alias smce='systemctl edit'
+alias smcen='systemctl enable'
+#user
+alias smcu='systemctl --user'
+alias smcus='systemctl --user status'
+alias smcust='systemctl --user start'
+alias smcuS='systemctl --user stop'
+alias smcur='systemctl --user restart'
+alias smcurl='systemctl --user reload'
+alias smcud='systemctl --user daemon-reload'
+alias smcue='systemctl --user edit'
+alias smcuen='systemctl --user enable'
+#doas
+alias dsmc='doas systemctl'
+alias dsmcs='doas systemctl status'
+alias dsmcst='doas systemctl start'
+alias dsmcS='doas systemctl stop'
+alias dsmcr='doas systemctl restart'
+alias dsmcrl='doas systemctl reload'
+alias dsmcd='doas systemctl daemon-reload'
+alias dsmce='doas systemctl edit'
+alias dsmcen='doas systemctl enable'
+
+# virtualbox aliases
+alias vbm='vboxmanage'
+alias vbls='vbm list vms'
+alias vblsr='vbm list runningvms'
+alias vb='vbm startvm'
+
+# quick config
+alias ez='$EDITOR ${ZDOTDIR:-~}/.zshrc'
+alias eza='$EDITOR $HOME/.config/shell/aliases.sh'
+alias ezf='$EDITOR $HOME/.config/shell/functions.sh'
+alias eto='$EDITOR ~/sync/TODO'
+alias edw='$EDITOR ~/proj/suckless/dwm/config.def.h'
+alias edm='$EDITOR ~/proj/suckless/dmenu/config.def.h'
+alias ehst='$EDITOR $ZDOTDIR/histfile'
+alias ezh=' $EDITOR $HISTFILE'
+alias est='$EDITOR ~/proj/suckless/st/config.def.h'
+alias esl='$EDITOR ~/proj/suckless/slock/config.def.h'
+alias esls='$EDITOR ~/proj/suckless/slstatus/config.def.h'
+alias ehy='$EDITOR ~/.config/hypr/hyprland.conf'
+alias ehyb='$EDITOR ~/.config/hypr/binds.conf'
+alias ewbj='$EDITOR ~/.config/waybar/config.jsonc'
+alias ewbs='$EDITOR ~/.config/waybar/style.css'
+alias cfd='$EDITOR config.def.h'
+# /# quick cd jV}k:!sort -t "'" -k 2
+alias cdl='cd ~/dl'
+alias cdoc='cd ~/docs'
+alias czk='cd ~/docs/zk'
+alias cda='cd ~/docs/android/projects'
+alias csv='cd ~/docs/school/Vakken'
+alias cdm='cd ~/music'
+alias cdp='cd ~/pics'
+alias cdpa='cd ~/pics/ai-outputs/'
+alias cdpp='cd ~/proj/personal/'
+alias chom='cd ~/proj/personal/homepage'
+alias lov='cd ~/proj/personal/lola'
+alias cdsh='~/proj/personal/scheduler'
+alias cdsw='cd ~/proj/personal/WheelAdvisor'
+alias cddm='cd ~/proj/suckless/dmenu'
+alias cdw='cd ~/proj/suckless/dwm'
+alias cdslo='cd ~/proj/suckless/slock'
+alias cdsl='cd ~/proj/suckless/slstatus'
+alias cdst='cd ~/proj/suckless/st'
+alias cdsta='cd ~/proj/suckless/stable-diffusion-webui'
+alias cdsu='cd ~/proj/suckless/surf'
+alias cds='cd ~/src/'
+alias cdsb='cd ~/src/build'
+alias cdsc='cd ~/src/comfyui/'
+alias cdo='cd ~/src/dotfiles'
+alias cdi='cd ~/src/installdrier'
+alias cdia='cd ~/src/installdrier/arch'
+alias cdib='cd ~/src/installdrier/deb'
+alias czo='cd ~/zot/'
+alias cdpw='cd ${PASSWORD_STORE_DIR:-~/.password-store}'
+alias cdng='cd /etc/nginx'
+alias cdrs='cd /srv/'
+alias cdv='cd ~/vids'
+alias god='cd "$(find . -mindepth 1 -maxdepth 1 -type d | fzf)"'
+alias gov='go ~/vids d'
+
+# fzf aliases
+alias ppj='cd ~/proj/personal/"$(find ~/proj/personal -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | fzf)"'
+alias ppjs='cd ~/proj/personal/scripts/"$(find ~/proj/personal/scripts -mindepth 1 -maxdepth 1 -type d -printf "%f\n" | fzf)"'
+alias scr='edit_in_dir ~/proj/personal/scripts/'
+alias fil='edit_in_dir ~/docs/filios/'
+alias fzps='ps aux | tail +2 | fzf | tee /dev/stderr | awk '\''{print $2}'\'' | clipp'
+alias asf='alias | fzf'
+alias fzh="fzf --tac < $HISTFILE | tee /dev/stderr | clipp"
+alias ffwin='hyprctl clients -j | jq '\''.[].pid'\'' | fzf --preview "hyprctl clients -j | jq '\''.[] | select(.pid == {}) | {class, title, workspace, xwayland}'\''"'
+alias pff='find ${PASSWORD_STORE_DIR:=~/src/password-store/} -name "*.gpg" | sed -e "s@$PASSWORD_STORE_DIR/@@" -e '\''s/\.gpg$//'\'' | fzf | xargs pass show -c'
+alias fzps='fzf --print0 | xargs -0I{}'
+alias ytdl='yt-dlp --restrict-filenames --embed-chapters -f "b" -S "res:1080" -P "$HOME/vids/youtube/" -o "%(channel)s/%(title)s.%(ext)s"'
+alias ytplay='mpv "$(ytlink)"'
+
+# emacs aliases
+alias emacsd='emacs --daemon'
+alias emacsdbg='emacs --debug-init'
+alias e='emacsclient -c -a "emacs"'
+
+# docker aliases
+alias dcb='docker build'
+alias dcbt='docker build -t'
+alias dce='docker exec'
+alias dcet='docker exec -it'
+alias dcmp='docker compose up -d'
+
+# dotnet aliases
+alias dncns='dotnet new console --use-program-main -o'
+
+# debuc aliases
+alias dbadd='ssh db dladd "'\''$(clipo)'\''"'
+alias dbcons='ssh -t db dlcons'
+alias dbinf='ssh db dlinfo'
+alias sshdb='ssh -t db "tmux a || tmux"'
+alias dbsmu='rsync -aPz db:/media/basilisk/music/ /media/kilimanjaro/music'
+
+# oh-my-zsh git aliases
+alias config='GIT_WORK_TREE=~/src/dotfiles/ GIT_DIR=~/src/dotfiles/.git'
+alias cfg='$EDITOR ~/src/dotfiles/"$(config git ls-files | fzf || exit)"'
+alias gmod='git status --short | sed '\''/^\s*M/!d;s/^\s*M\s*//'\'' | fzf | xargs $EDITOR'
+alias g='git'
+alias ga='git add'
+alias gaa='git add --all'
+alias gapa='git add --patch'
+alias gau='git add --update'
+alias gav='git add --verbose'
+alias gap='git apply'
+alias gapt='git apply --3way'
+alias gb='git branch'
+alias gba='git branch --all'
+alias gbd='git branch --delete'
+alias gbda='git branch --no-color --merged | command grep -vE "^([+*]|\s*($(git_main_branch)|$(git_develop_branch))\s*$)" | command xargs git branch --delete 2>/dev/null'
+alias gbD='git branch --delete --force'
+alias gbg='git branch -vv | grep ": gone\]"'
+alias gbgd='local res=$(gbg | awk '"'"'{print $1}'"'"') && [[ $res ]] && echo $res | xargs git branch -d'
+alias gbgD='local res=$(gbg | awk '"'"'{print $1}'"'"') && [[ $res ]] && echo $res | xargs git branch -D'
+alias gbl='git blame -b -w'
+alias gbnm='git branch --no-merged'
+alias gbr='git branch --remote'
+alias gbs='git bisect'
+alias gbsb='git bisect bad'
+alias gbsg='git bisect good'
+alias gbsr='git bisect reset'
+alias gbss='git bisect start'
+alias gc='git commit --verbose'
+alias gc!='git commit --verbose --amend'
+alias gcn!='git commit --verbose --no-edit --amend'
+alias gca='git commit --verbose --all'
+alias gca!='git commit --verbose --all --amend'
+alias gcan!='git commit --verbose --all --no-edit --amend'
+alias gcans!='git commit --verbose --all --signoff --no-edit --amend'
+alias gcam='git commit --all --message'
+alias gcsm='git commit --signoff --message'
+alias gcas='git commit --all --signoff'
+alias gcasm='git commit --all --signoff --message'
+alias gcb='git checkout -b'
+alias gcf='git config --list'
+alias gcl='git clone'
+alias gclc='git clone "$(clipo)"'
+alias gclr='git clone --recurse-submodules'
+alias gc1='git clone --depth 1'
+alias gclean='git clean --interactive -d'
+alias gpristine='git reset --hard && git clean --force -dfx'
+alias grsf='git reset --soft HEAD~'
+alias gcm='git checkout $(git_main_branch)'
+alias gcd='git checkout $(git_develop_branch)'
+alias gcmsg='git commit --message'
+alias gco='git checkout'
+alias gcor='git checkout --recurse-submodules'
+alias gcount='git shortlog --summary --numbered'
+alias gcp='git cherry-pick'
+alias gcpa='git cherry-pick --abort'
+alias gcpc='git cherry-pick --continue'
+alias gcs='git commit --gpg-sign'
+alias gcss='git commit --gpg-sign --signoff'
+alias gcssm='git commit --gpg-sign --signoff --message'
+alias gd='git diff'
+alias gdca='git diff --cached'
+alias gdcw='git diff --cached --word-diff'
+alias gdct='git describe --tags $(git rev-list --tags --max-count=1)'
+alias gds='git diff --staged'
+alias gdt='git diff-tree --no-commit-id --name-only -r'
+alias gdup='git diff @{upstream}'
+alias gdw='git diff --word-diff'
+alias gdl='git diff HEAD^ HEAD'
+alias gf='git fetch'
+alias gfo='git fetch origin'
+alias gfg='git ls-files | grep'
+alias gg='git gui citool'
+alias gga='git gui citool --amend'
+alias ggpur='ggu'
+alias ggpull='git pull origin "$(git_current_branch)"'
+alias ggpush='git push origin "$(git_current_branch)"'
+alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'
+alias gpsup='git push --set-upstream origin $(git_current_branch)'
+alias ghh='git help'
+alias gignore='git update-index --assume-unchanged'
+alias gignored='git ls-files -v | grep "^[[:lower:]]"'
+alias git-svn-dcommit-push='git svn dcommit && git push github $(git_main_branch):svntrunk'
+alias gk='\gitk --all --branches &!'
+alias gke='\gitk --all $(git log --walk-reflogs --pretty=%h) &!'
+alias gl='git pull'
+alias glg='git log --stat'
+alias glgp='git log --stat --patch'
+alias glgg='git log --graph'
+alias glgga='git log --graph --decorate --all'
+alias glgm='git log --graph --max-count=10'
+alias glo='git log --oneline --decorate'
+alias glol="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset'"
+alias glols="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --stat"
+alias glod="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset'"
+alias glods="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short"
+alias glola="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ar) %C(bold blue)<%an>%Creset' --all"
+alias glog='git log --oneline --decorate --graph'
+alias gloga='git log --oneline --decorate --graph --all'
+alias glp="_git_log_prettily"
+alias gm='git merge'
+alias gmom='git merge origin/$(git_main_branch)'
+alias gmtl='git mergetool --no-prompt'
+alias gmtlvim='git mergetool --no-prompt --tool=vimdiff'
+alias gmum='git merge upstream/$(git_main_branch)'
+alias gma='git merge --abort'
+alias gp='git push'
+alias gpd='git push --dry-run'
+alias gpf!='git push --force'
+alias gpoat='git push origin --all && git push origin --tags'
+alias gpod='git push origin --delete'
+alias gpr='git pull --rebase'
+alias gpu='git push upstream'
+alias gpv='git push --verbose'
+alias gr='git remote'
+alias gra='git remote add'
+alias grb='git rebase'
+alias grba='git rebase --abort'
+alias grbc='git rebase --continue'
+alias grbd='git rebase $(git_develop_branch)'
+alias grbi='git rebase --interactive'
+alias grbm='git rebase $(git_main_branch)'
+alias grbom='git rebase origin/$(git_main_branch)'
+alias grbo='git rebase --onto'
+alias grbs='git rebase --skip'
+alias grev='git revert'
+alias grh='git reset'
+alias grhh='git reset --hard'
+alias groh='git reset origin/$(git_current_branch) --hard'
+alias grm='git rm'
+alias grmc='git rm --cached'
+alias grmv='git remote rename'
+alias grrm='git remote remove'
+alias grs='git restore'
+alias grset='git remote set-url'
+alias grss='git restore --source'
+alias grst='git restore --staged'
+alias grt='cd "$(git rev-parse --show-toplevel || echo .)"'
+alias gru='git reset --'
+alias grup='git remote update'
+alias grv='git remote --verbose'
+alias gsb='git status --short --branch'
+alias gsd='git svn dcommit'
+alias gsh='git show'
+alias gsi='git submodule init'
+alias gsps='git show --pretty=short --show-signature'
+alias gsr='git svn rebase'
+alias gss='git status --short'
+alias gst='git status'
+alias gstaa='git stash apply'
+alias gstc='git stash clear'
+alias gstd='git stash drop'
+alias gstl='git stash list'
+alias gstp='git stash pop'
+alias gsts='git stash show --text'
+alias gstu='gsta --include-untracked'
+alias gstall='git stash --all'
+alias gsu='git submodule update'
+alias gsw='git switch'
+alias gswc='git switch --create'
+alias gswm='git switch $(git_main_branch)'
+alias gswd='git switch $(git_develop_branch)'
+alias gts='git tag --sign'
+alias gtv='git tag | sort -V'
+alias gtl='gtl(){ git tag --sort=-v:refname -n --list "${1}*" }; noglob gtl'
+alias gunignore='git update-index --no-assume-unchanged'
+alias gunwip='git log --max-count=1 | grep -q -c "\--wip--" && git reset HEAD~1'
+alias gup='git pull --rebase'
+alias gupv='git pull --rebase --verbose'
+alias gupa='git pull --rebase --autostash'
+alias gupav='git pull --rebase --autostash --verbose'
+alias gupom='git pull --rebase origin $(git_main_branch)'
+alias gupomi='git pull --rebase=interactive origin $(git_main_branch)'
+alias glum='git pull upstream $(git_main_branch)'
+alias gluc='git pull upstream $(git_current_branch)'
+alias gwch='git whatchanged -p --abbrev-commit --pretty=medium'
+alias gwip='git add -A; git rm $(git ls-files --deleted) 2> /dev/null; git commit --no-verify --no-gpg-sign --message "--wip-- [skip ci]"'
+alias gwt='git worktree'
+alias gwta='git worktree add'
+alias gwtls='git worktree list'
+alias gwtmv='git worktree move'
+alias gwtrm='git worktree remove'
+alias gam='git am'
+alias gamc='git am --continue'
+alias gams='git am --skip'
+alias gama='git am --abort'
+alias gamscp='git am --show-current-patch'
diff --git a/config/essentials/shell/functions.sh b/config/essentials/shell/functions.sh
new file mode 100644
index 0000000..37e471c
--- /dev/null
+++ b/config/essentials/shell/functions.sh
@@ -0,0 +1,306 @@
+#!/bin/sh
+
+log() { >&2 printf '%s' "$@"; }
+logn() { >&2 printf '%s\n' "$@"; }
+
+vmp() {
+ col -b | \
+ vim -MR \
+ -c 'set ft=man nolist nonu nornu'
+}
+nvf() {
+ cache="$HOME/.cache/nvf"
+ match="$(grep -m1 "$1$" "$cache" 2> /dev/null)"
+ if test ! -f "$match"
+ then
+ logn "resetting cache..."
+ match="$(goo f "$HOME" | tee "$cache" | grep -m 1 "$1$" 2> /dev/null)"
+ # # Alternative:
+ # match="$(goo | grep -m 1 "$1" 2> /dev/null | tee -a | "$cache")"
+ fi
+ if test -f "$match"
+ then
+ $EDITOR "$match" && return
+ else
+ logn "no match." && return 1
+ fi
+}
+
+nnn() { test -z "$NNNLVL" && /usr/bin/nnn "$@" || exit; }
+ranger() { test -z "$RANGER_LEVEL" && /usr/bin/ranger "$@" || exit; }
+
+# googoo aliases
+_googoo_fzf_opt()
+{
+ unset dest opt
+ if [ "$1" ]
+ then
+ [ -d "$1" ] && dest="$1" || opt="-q $1"
+ fi
+}
+o()
+{
+ _googoo_fzf_opt "$1"
+ f="$(goo f "$dest" | fzf $opt)"
+ test "$1" && shift
+ test -f "$f" && $EDITOR $@ "$f"
+}
+go()
+{
+ _googoo_fzf_opt "$1"
+ cd "$(goo d "$dest" | fzf $opt)"
+}
+ogo()
+{
+ _googoo_fzf_opt "$1"
+ cd "$(dirname "$(goo f "$dest" | fzf $opt)")"
+}
+
+# Onelineres
+awnk() { awk "{print \$$1}"; }
+vimh() { vi -c "help $1" -c 'call feedkeys("\<c-w>o")'; }
+dgo() { cd "$(goo d ~ | fzf --filter "$@" | head -n 1)"; }
+open() { $EDITOR "$(goo f ~ | fzf --filter "$@" | head -n 1)"; }
+pkbs() { doas pacman -Sy "$(pkgfile -b "$1" | tee /dev/stderr)"; }
+oclip() { printf "\033]52;c;$(printf '%s' "$@" | base64)\a"; }
+sms() { ssh -t phone sendmsg "$1" "'$2'"; }
+trcp() { scp "$1" db:/media/basilisk/downloads/transmission/torrents/; }
+rln() { ln -s "$(readlink -f "$1")" "$2"; }
+getgit() { git clone git@db:"$1"; }
+
+ipc()
+{
+ if [ "$(ip link show eno1 | awk -F, 'NR=1 {print $3}')" = "UP" ]
+ then
+ doas ip link set eno1 down
+ else
+ doas ip link set eno1 up
+ fi
+}
+
+psgrep()
+{
+ [ $# -eq 0 ] && return 1
+ pgrep "$@" | xargs ps
+}
+
+unique() {
+ f="$(mktemp)"
+ awk '!x[$0]++' "$1" > "$f"
+ mv "$f" "$1"
+}
+
+clip() {
+ if [ "$WAYLAND_DISPLAY" ]
+ then
+ echo -n "$@" | wl-copy
+ else
+ echo -n "$@" | xclip -selection clipboard -rmlastnl
+ fi
+}
+
+unzipp() {
+ unzip -- "$(readlink -f -- "$1")" || return 1
+ rm -- "$1"
+}
+
+# fix long waiting time
+__git_files() {
+ _wanted files expl 'local files' _files
+}
+
+esc() {
+ $EDITOR "$(which $1)"
+}
+
+delfile() {
+ curl "${2:-https://upfast.cronyakatsuki.xyz/delete/$1}"
+}
+upfile() {
+ curl -F "file=@\"$1\"" ${2:-https://0x0.st}
+}
+
+# git
+sgd() {
+ d="$PWD"
+ find $HOME/src -maxdepth 1 -mindepth 1 -type d |
+ while read -r dir
+ do
+ cd "$dir"
+ git status > /dev/null 2>&1 || continue
+ git fetch > /dev/null 2>&1
+ printf "$PWD"
+ test "$(git status --short 2>/dev/null | grep -v "??" | head -1)" &&
+ printf " \e[1;31m*changes\e[0m" | sed "s#$HOME#~#" >&2
+ test "$(parse_git_remote)" &&
+ printf " \e[0;32m*push/pull\e[0m" | sed "s#$HOME#~#" >&2
+ printf "\n"
+ done
+ cd "$d"
+ unset d
+}
+
+ginit()
+{
+ [ "$1" ] || return 1
+ ssh db /var/git/initdir.sh "$1"
+ git remote add origin git@db:"$1.git"
+ git push --set-upstream origin $(git_current_branch)
+}
+
+# Returns current branch
+git_current_branch()
+{
+ command git rev-parse --git-dir > /dev/null 2>&1 || return
+ git branch --show-current
+}
+
+# Check if main exists and use instead of master
+git_main_branch()
+{
+ command git rev-parse --git-dir > /dev/null 2>&1 || return
+ for ref in refs/{heads,remotes/{origin,upstream}}/{main,trunk,mainline,default}
+ do
+ if command git show-ref -q --verify $ref; then
+ echo ${ref:t}
+ return
+ fi
+ done
+ echo master
+}
+
+# Check for develop and similarly named branches
+function git_develop_branch() {
+ command git rev-parse --git-dir > /dev/null 2>&1 || return
+ for branch in dev devel development
+ do
+ if command git show-ref -q --verify refs/heads/$branch
+ then
+ echo $branch
+ return
+ fi
+ done
+ echo develop
+}
+
+# gpg backup
+gpg_backup()
+{
+ # $1: option
+ # $2: output file (without .asc)
+ gpg_command() { gpg "$1" --armor > "$2".asc; }
+ gpg_command --export-secret-keys "private"
+ gpg_command --export "public"
+ gpg_command --export-ownertrust "trust"
+ tar -czvf gpg_backup.tar.gz public.asc private.asc trust.asc
+ shred -uz public.asc private.asc trust.asc
+}
+
+gpg_import()
+{
+ tar xf $1
+ shred -uz $1
+ gpg --import public.asc
+ gpg --import-ownertrust trust.asc
+ gpg --import private.asc
+ shred -uz public.asc private.asc trust.asc
+}
+
+ngenable()
+{
+ ln -sf /etc/nginx/sites-available/$1 /etc/nginx/sites-enabled/
+}
+
+vbsr()
+{
+ vboxmanage snapshot "$1" restore "$2" &&
+ vboxmanage startvm "$1" ||
+ vboxmanage controlvm "$1" poweroff
+}
+vbsrr()
+{
+ vbsr "$1" "$2"
+ sleep 3
+ vbsr "$1" "$2"
+}
+vbst()
+{
+ vboxmanage snapshot "$1" take "$2"
+}
+
+pacsize()
+{
+ if test -n "$1"; then
+ packages="$@"
+ elif test ! -t 0; then
+ packages="$(cat)"
+ else
+ echo "No data provided..."
+ return 1
+ fi
+ echo $packages |
+ expac '%m %n' - |
+ numfmt --to=iec-i --suffix=B --format="%.2f"
+}
+
+mime-default ()
+{
+ [ "${mime:=$1}" ] ||
+ mime="$(find /usr/share/applications/ -iname '*.desktop' -printf '%f\n' |
+ sed 's/\.desktop$//' |
+ fzf)"
+
+ logn "Setting '$mime' as default for its mimetypes"
+ [ "$mime" ] || exit 1
+ grep "MimeType=" /usr/share/applications/"$mime".desktop |
+ cut -d '=' -f 2- | tr ';' '\0' |
+ xargs -0I{} xdg-mime default "$mime".desktop "{}"
+ logn "Done."
+}
+
+addedkeys() {
+ find ~/.ssh -iname "*.pub" | while read key
+ do
+ fingerprint="$(ssh-keygen -lf "$key" 2>/dev/null)"
+ if ssh-add -l | grep -q "$fingerprint"
+ then
+ echo "$key"
+ fi
+ done | sed "s,$HOME/.ssh/,,"
+}
+
+fpass() {
+ find $HOME/.password-store -type f -not -path ".git" |
+ grep "\.gpg$" |
+ sed "s,$HOME/.password-store/,,;s,\.gpg$,," |
+ fzf |
+ xargs pass show -c
+}
+
+muttmail()
+{
+ config="$HOME/.config/mutt"
+ mail="$(find "$config"/configs -type f -printf '%f\n' | fzf)"
+ [ "$mail" ] || return 1
+ ln -sf "$config/configs/$mail" "$config"/muttrc
+ mutt
+}
+
+resize()
+{
+ test $# -lt 2 &&
+ printf "usage: %s <format> <file> [out]\n" "$0" >&2 &&
+ return 1
+ convert -resize $1^ -gravity center -crop $1+0+0 -- "$2" "${3:-$1}"
+}
+
+edit_in_dir() {
+ file="$1/$(goo f "$1" | sed "s@^$1@@" | fzf)"
+ [ -f "$file" ] || return 1
+ $EDITOR "$file"
+}
+
+to_webm()
+{
+ ffmpeg -y -i "$1" -vcodec libvpx -cpu-used -12 -deadline realtime "${1%.*}".webm
+}