#!/usr/bin/env bash

# When using zsh, see also
# $HOME/.oh-my-zsh/lib

export SCREENSHOT_DIR="$HOME/pictures/screenshots"

# ░█▀▀░█░█░▀█▀░░░█▀▀░█▀█░█▀▀░▀█▀░█░█░█▀█░█▀▄░█▀▀
# ░█▀▀░▄▀▄░░█░░░░▀▀█░█░█░█▀▀░░█░░█▄█░█▀█░█▀▄░█▀▀
# ░▀▀▀░▀░▀░░▀░░░░▀▀▀░▀▀▀░▀░░░░▀░░▀░▀░▀░▀░▀░▀░▀▀▀

# Music player
alias m="ncmpcpp"

# Text editor
if command -v nvim &> /dev/null; then
  alias vim="nvim"
  alias vi="nvim"
elif command -v vim &> /dev/null; then
  alias nvim="vim"
  alias vi="vim"
elif command -v vi &> /dev/null; then
  alias nvim="vi"
  alias vim="vi"
else
  echo -e "\033[31m[ERROR] No vim program found on the system! Couldn't bind aliases!\033[0m"
fi

alias openfile='$HOME/.scripts/rofi/config-selector.py | xargs nvim'
 
# IPython
if command -v ipython &> /dev/null; then
  alias p="ipython"
fi
 
# YouTube-dl
if command -v youtube-dl &> /dev/null; then
  alias youtube-dl-list='youtube-dl -f "bestvideo[ext=mp4]+bestaudio[ext=m4a]/bestvideo+bestaudio" -o "%(playlist_index)s-%(title)s.%(ext)s"'
  alias music-dl='youtube-dl --extract-audio -f "bestaudio[ext=m4a]/best"'
  alias music-dl-list='youtube-dl --extract-audio -f "bestaudio[ext=m4a]/best" -o "%(playlist_index)s-%(title)s.%(ext)s"'
fi

# Screenshots
if command -v maim &> /dev/null; then
  alias skusho='maim --hidecursor --nokeyboard $(echo $SCREENSHOT_DIR)/$(date +%s).png'

  if command -v xclip &> /dev/null; then
    alias skushoclip='maim --hidecursor --nokeyboard --select | xclip -selection clipboard -target image/png -in'
  fi
fi

# Scan listening ports
if command -v netstat &> /dev/null; then
  alias ports='sudo netstat -tulpn | grep LISTEN'
fi

# Latex Make
if command -v latexmk &> /dev/null; then
  alias view-latex='latexmk -pdf -pvc main.tex'
fi

# Tmux reload
if command -v tmux &> /dev/null; then
  alias reload-tmux='tmux source $HOME/.config/tmux/tmux.conf'
fi

# Ag replacement
if command -v rg &> /dev/null; then
  alias ag='rg'
fi

# Xmonad recompilation
if command -v xmonad &> /dev/null; then
  alias xr='xmonad --recompile'
  alias xmr='paru -S xmobar-git --noconfirm'
  alias xxmr='xr; xmr'
fi

if [[ -f $HOME/.scripts/dropbox.py ]]; then
  alias dp="python $HOME/.scripts/dropbox.py"
fi

# ------------------------ System tools ------------------------ #

# cp
if command -v z &> /dev/null; then
  alias cd='z'
fi

# cp
if command -v rsync &> /dev/null; then
  alias ccp='/usr/bin/cp'
  alias cp='rsync --progress --human-readable'
  alias cpr='rsync --progress --human-readable --recursive'
fi

# cat
if command -v bat &> /dev/null; then
  alias ccat='/usr/bin/cat'
  # TODO: use mdcat if the file is a markdown file
  alias cat='bat'
fi

# htop
if command -v bottom &> /dev/null; then
  alias htop='bottom'
fi

# ps
if command -v procs &> /dev/null; then
  alias ps='procs'
fi

# find
if command -v fd &> /dev/null; then
  # At the current time, fd does not support the -m flag, which I have
  # experienced that some software rely on. Therefore, it's gonna be aliased
  # to fin
  alias fin='fd'
fi

# xxd
if command -v hex &> /dev/null; then
  alias xxd='hex'
fi

# uniq
if command -v runiq &> /dev/null; then
  alias uniq='runiq'
fi

# cut
if command -v hck &> /dev/null; then
  alias cut='hck'
fi

# ------------------------ Reminders ------------------------ #

# compression decompression
if command -v ouch &> /dev/null; then
  alias zip='echo "Consider using ouch instead\n"; zip'
  alias unzip='echo "Consider using ouch instead\n"; unzip'
  alias tar='echo "Consider using ouch instead\n"; tar'
fi

# Make tool
if command -v just &> /dev/null; then
  alias make='echo "Consider using just instead\n"; make'
fi

# Disk usage viewer
if command -v diskonaut &> /dev/null; then
  alias ncdu='echo "Consider using diskonaut instead\n"; ncdu'
fi

# ░█▀▀░█▀█░█░░░█▀█░█▀▄
# ░█░░░█░█░█░░░█░█░█▀▄
# ░▀▀▀░▀▀▀░▀▀▀░▀▀▀░▀░▀

if command -v exa &> /dev/null; then
  alias lls='/usr/bin/ls'
  alias ls='exa'
  alias sl='ls'
  alias lsa='exa -lah --changed --time-style long-iso --git --group'
else
  alias ls='ls --group-directories-first --color=auto'
  alias ll='ls -alFh --group-directories-first  --color=auto'
  alias la='ls -A --group-directories-first --color=auto -F'
fi

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'

alias gpg-tui='gpg-tui --style colored'

# ░█▀▄░▀█▀░█▀▄░░░▀▀█░█░█░█▄█░█▀█░█▀▀
# ░█░█░░█░░█▀▄░░░░░█░█░█░█░█░█▀▀░▀▀█
# ░▀▀░░▀▀▀░▀░▀░░░▀▀░░▀▀▀░▀░▀░▀░░░▀▀▀

alias gt='cd $HOME/git'
alias tmp='cd /tmp'

alias cd..='cd ..'
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias ......='cd ../../../../..'

alias rrn='chmod 440'
alias wwn='chmod 660'
alias xxn='chmod 770'
alias rrx='chmod 445'
alias wwr='chmod 664'
alias x3='chmod 775'

# ░█▄█░▀█▀░█▀▀░█▀▀
# ░█░█░░█░░▀▀█░█░░
# ░▀░▀░▀▀▀░▀▀▀░▀▀▀

alias dush='du -sh'

alias realias='source $HOME/.aliases'

alias q='exit'

alias rmr='rmdir'

alias pagga='toilet -f pagga' 

# Supposed to be used as a pipe: "cat file | rainbow"
alias rainbow='toilet -f pagga | lolcat'

# ░█▀█░█▀█░█▀▀░█░░░▀█▀░█▀█░█▀▀░█▀▄░█▀▀
# ░█░█░█░█░█▀▀░█░░░░█░░█░█░█▀▀░█▀▄░▀▀█
# ░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀░▀░▀▀

alias killall-tmux="tmux ls | awk '{print $1}' | sed 's/://g' | xargs -I{} tmux kill-session -t {}"

# Get current Fcitx mode
alias get-fcitx-mode='qdbus "org.fcitx.Fcitx" "/inputmethod" "GetCurrentIM"'

alias wcd='find . -type f -exec cat {} + | wc -l'

# Make ftp server
alias makeftp='python -m pyftpdlib --directory=$HOME/ --port=2121'

alias echo-colors='for x in 0 1 4 5 7 8; do for i in {30..37}; do for a in {40..47}; do echo -ne "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "; done; echo; done; done; echo "";'

# ░█▀▀░█░█░█▀█░█▀▀░▀█▀░▀█▀░█▀█░█▀█░█▀▀
# ░█▀▀░█░█░█░█░█░░░░█░░░█░░█░█░█░█░▀▀█
# ░▀░░░▀▀▀░▀░▀░▀▀▀░░▀░░▀▀▀░▀▀▀░▀░▀░▀▀▀

gac(){
  git add $1 && git commit -a -m $2
}

c-file() {
  nvim $($HOME/.scripts/rofi/config-selector.py)
}

if command -v netstat &> /dev/null; then
  # Usage: $ conn-ips 80
  conn-ips() {
    netstat -tn 2>/dev/null | grep :$1 | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr | head
  }
fi


# ░█▀▀░█▀█░█░█░█▀▄░█▀▀░█▀▀░█▀▀
# ░▀▀█░█░█░█░█░█▀▄░█░░░█▀▀░▀▀█
# ░▀▀▀░▀▀▀░▀▀▀░▀░▀░▀▀▀░▀▀▀░▀▀▀

if [[ -f $HOME/.aliases.private ]]; then
  source $HOME/.aliases.private
fi

if [[ -f $HOME/.aliases.desktop ]]; then
  source $HOME/.aliases.desktop
fi

if [[ -f $HOME/.aliases.laptop ]]; then
  source $HOME/.aliases.laptop
fi

if [[ -d "$HOME/.project-template-aliases" ]]; then
  for f in $(find $HOME/.project-template-aliases/ -maxdepth 1 -type f)
  do
    source $f
  done
fi

