export CONFIG_DIR="$HOME/.dotfiles"

# ╦═╗┌─┐┌─┐┬─┐┌─┐┌─┐┬ ┬
# ╠╦╝├┤ ├┤ ├┬┘├┤ └─┐├─┤
# ╩╚═└─┘└  ┴└─└─┘└─┘┴ ┴

if [ -z "${ZSH}" ]; then
  alias refresh=". $HOME/.bashrc"
else
  alias refresh=". $HOME/.zshrc"
fi

# ╦┌┐┌┌─┐┌┬┐┌─┐┬  ┬
# ║│││└─┐ │ ├─┤│  │
# ╩┘└┘└─┘ ┴ ┴ ┴┴─┘┴─┘

alias install_cli="$CONFIG_DIR/auto-config-cli.sh"
alias install_gui="$CONFIG_DIR/auto-config.sh"

# ╔╦╗╦╔═╗╔═╗
# ║║║║╚═╗║
# ╩ ╩╩╚═╝╚═╝

# Nautilus
alias open="nautilus ."

# Go to config directory
alias config="cd $CONFIG_DIR"

function config_update {
  cd $CONFIG_DIR
  git pull
  cd -
}

# Editor
alias c='code'
alias e='micro'

# Find
alias find='find . -name'

# Minicom serial
alias com='minicom -c on -D'

# Aliases de retour
alias b='cd ../'
alias bb='cd ../../'
alias bbb='cd ../../../'
alias bbbb='cd ../../../../'
alias bbbbb='cd ../../../../../'

# Folder size
alias sizes='du -h -d1 | sort -hr'
alias size='du -h -d0'

# Swap
alias s_off='sudo swapoff -a'
alias s_on='sudo swapon -a'

function s_clean {
  s_off
  s_on
}

# Make
alias mk='make -j5'
alias mec='make'
alias mecque='make'

# VPN
alias vpn="sudo openvpn --config $HOME/Nextcloud/#\ -\ Configs/rguiheneuf.ovpn"

# ╔═╗┬┌┬┐  ╔═╗┬  ┬┌─┐┌─┐┌─┐┌─┐
# ║ ╦│ │   ╠═╣│  │├─┤└─┐├┤ └─┐
# ╚═╝┴ ┴   ╩ ╩┴─┘┴┴ ┴└─┘└─┘└─┘

alias gs='git status'
alias gc='git checkout'
alias gpl='git pull'
alias gph='git push'
alias gsu='git submodule update --init'
alias gcp='git cherry-pick'

function gcm {
  ( git rev-parse --verify origin/master > /dev/null 2>&1 ) && git checkout master
  ( git rev-parse --verify origin/main   > /dev/null 2>&1 ) && git checkout main
}

alias add='git add'
alias commit='git commit -m "To fixup"'
alias cont='git rebase --continue'

# Git cleaners
alias branch_clean='git branch --merged | egrep -v "(^\*|master|main|dev)" | xargs git branch -d'
alias tag_clean='git tag -l | xargs git tag -d && git fetch -t'

function git_parent {
  git log --pretty=format:"%D"                | \
    grep -v "^$"                              | \
    sed "s/, /\n/g"                           | \
    grep -v "HEAD"                            | \
    grep -v `git rev-parse --abbrev-ref HEAD` | \
    grep -v "tag"                             | \
    head -n1                                  | \
    sed "s/origin\/\([^,]*\)/\1/"
}

function git_parent_tag {
  git log --pretty=format:"%D"                | \
    grep -v "^$"                              | \
    sed "s/, /\n/g"                           | \
    grep -v "HEAD"                            | \
    grep -v `git rev-parse --abbrev-ref HEAD` | \
    head -n1                                  | \
    sed "s/origin\/\([^,]*\)/\1/"             | \
    sed "s/tag: \([^,]*\)/\1/"
}

alias log='git log --graph --decorate --oneline'

# Branch
function branch_create {
  git checkout -b $1
  git push -u origin $1
}

# Tag helpers
function tag_create {
  git tag $1
  git push origin $1
}

function tag_replace {
  git tag --delete $1
  git push origin --delete $1
  git tag $1
  git push origin $1
}

function g_save {
  git add *
  git commit -m "[skip ci] Save: do not merge"
  git push -f
}

# ╔═╗┬┌┬┐  ╦═╗┌─┐┌┐ ┌─┐┌─┐┌─┐
# ║ ╦│ │   ╠╦╝├┤ ├┴┐├─┤└─┐├┤
# ╚═╝┴ ┴   ╩╚═└─┘└─┘┴ ┴└─┘└─┘

function grb {
  git rebase --interactive HEAD~$1
}

function grbm {
  # Save current branch
  BRANCH=$(git branch | grep \* | cut -d ' ' -f2)

  # Checkout master/main & pull
  gcm
  git pull

  # Save parent branch
  PARENT=$(git branch | grep \* | cut -d ' ' -f2)

  # Back to previous branch
  git checkout ${BRANCH}
  git rebase --interactive ${PARENT}
}

function grbi {
  # Save current branch
  BRANCH=$(git branch | grep \* | cut -d ' ' -f2)

  # Save parent branch
  PARENT=$(git_parent)

  # Checkout parent & pull
  git checkout ${PARENT}
  git pull

  echo "Rebasing on ${PARENT}"

  # Back to previous branch
  git checkout ${BRANCH}
  git rebase --interactive ${PARENT}
}

function grbroot {
  git rebase --interactive --autosquash --root
}

function ga {
  git autofixup HEAD~$1
  git rebase --interactive --autosquash HEAD~$1
}

function gam {
  # Checkout master/main & pull
  gcm

  # Save parent branch
  PARENT=$(git branch | grep \* | cut -d ' ' -f2)

  git checkout -

  git autofixup ${PARENT}
  git rebase --interactive --autosquash ${PARENT}
}

function gai {
  # Save parent branch
  PARENT=$(git_parent)

  echo "Rebasing with autofixup on ${PARENT}"

  git autofixup ${PARENT}
  git rebase --interactive --autosquash ${PARENT}
}

# ╔═╗┬┌┬┐  ╔═╗┬─┐┌─┐┌─┐┬┬  ┌─┐
# ║ ╦│ │   ╠═╝├┬┘│ │├┤ ││  ├┤
# ╚═╝┴ ┴   ╩  ┴└─└─┘└  ┴┴─┘└─┘

function git_config {
  echo "User: $(git config user.name)"
  echo "Mail: $(git config user.email)"
}

function git_pro {
  git config --global user.name "Robin-Charles GUIHENEUF"
  git config --global user.email rguiheneuf@netatmo.com
  git_config
}

function git_perso {
  git config --global user.name "Robin-Charles Guihéneuf"
  git config --global user.email robin-charles@hotmail.fr
  git_config
}

# ╔═╗┬┌┬┐  ╔═╗┌┬┐┌─┐┌┐┌┌┬┐
# ║ ╦│ │   ╠═╣│││├┤ │││ ││
# ╚═╝┴ ┴   ╩ ╩┴ ┴└─┘┘└┘─┴┘

alias amend_pro="GIT_EDITOR=true git rebase --rebase-merges --exec 'git commit --amend --author=\"Robin-Charles GUIHENEUF <rguiheneuf@netatmo.com>\"' $1"
alias amend_perso="GIT_EDITOR=true git rebase --rebase-merges --exec 'git commit --amend --author=\"Robin-Charles Guihéneuf <robin-charles@hotmail.fr>\"' $1"

# ╦═╗┌─┐┌─┐┌─┐┌─┐┬┌┬┐┌─┐┬─┐┬┌─┐┌─┐
# ╠╦╝├┤ ├─┘│ │└─┐│ │ │ │├┬┘│├┤ └─┐
# ╩╚═└─┘┴  └─┘└─┘┴ ┴ └─┘┴└─┴└─┘└─┘

alias mulot='cd $HOME/mulot'
alias moki='cd $HOME/mulot/moki'

# In editor
alias c_moki='c $HOME/mulot/moki.code-workspace'

# SSH keygen
function ssh_keygen {
  cd $HOME/.ssh
  ssh-keygen -t rsa -b 4096 -f "$1"
  cat "$1.pub"
  cd -
}

# ╔╗╔┌─┐┌┬┐┌─┐┌┬┐┌┬┐┌─┐
# ║║║├┤  │ ├─┤ │ ││││ │
# ╝╚╝└─┘ ┴ ┴ ┴ ┴ ┴ ┴└─┘

# Flash sniffer nRF52
function nrf52 {
  arm-none-eabi-objcopy -O ihex build/bin/$1 $1.hex
  nrfutil pkg generate --hw-version 52 --sd-req=0x00 --application $1.hex --application-version 1 $1.zip

  if [ -z "$2" ]
  then
    nrfutil dfu usb-serial -pkg $1.zip -p /dev/ttyACM0
  else
    nrfutil dfu usb-serial -pkg $1.zip -p $2
  fi
}

# app.S
function generate_objdump {
  arm-none-eabi-objdump -S $1.elf > app.S
}

# Netatmo specific
alias flasher='flasher'

# Skip USB mode
alias fpm='flasher -forceplugmode'

alias py_wireshark='$HOME/Netatmo/core/python-emb-tools/python/bin/zigbee/python_zigbee_interface.py -p '

alias stflash='sudo stm32_sbm -f app.bin -s 0x1000 -d'
alias stflash_dfu='stm32_dfu -f app-jtag.bin -b'

# ╔═╗┬┌┬┐  ╔═╗┬─┐┌─┐┌┬┐┌─┐┌┬┐
# ║ ╦│ │   ╠═╝├┬┘│ ││││├─┘ │
# ╚═╝┴ ┴   ╩  ┴└─└─┘┴ ┴┴   ┴

# Git prompt
if [ -z "${ZSH}" ]; then
  if [ -f "$HOME/.bash-git-prompt/gitprompt.sh" ]; then
    GIT_PROMPT_ONLY_IN_REPO=1
    source $HOME/.bash-git-prompt/gitprompt.sh
  fi
else
  if [ -f "$HOME/.zsh-git-prompt/zshrc.sh" ]; then
    source $HOME/.zsh-git-prompt/zshrc.sh
  fi
fi

# ╔═╗─┐ ┬┌─┐┌─┐┬─┐┌┬┐
# ║╣ ┌┴┬┘├─┘│ │├┬┘ │
# ╚═╝┴ └─┴  └─┘┴└─ ┴

# Autofixup
export PATH=$PATH:$HOME/.git-autofixup

# Cargo binaries (navi)
export PATH=$PATH:$HOME/.cargo/bin

# Python
export PATH=$PATH:$HOME/.local/bin

# User bin
export PATH=$HOME/bin:$PATH

# Navi
if [ -z "${ZSH}" ]; then
  source <(navi widget bash)
else
  source <(navi widget zsh)
fi

export ANDROID_HOME=~/Android/Sdk
export ANDROID_NDK_HOME=~/Android/Sdk/ndk-bundle