#!/bin/bash

# $- meaning see https://stackoverflow.com/questions/42757236/what-does-mean-in-bash
# If not running interactively, don't do anything
#[[ $- != *i* ]] && return
# https://github.com/westscz/.dotfiles/blob/master/system/bashrc
case $- in
	*i*) ;;
	*) return;;
esac

. /usr/share/fzf/completion.bash
. /usr/share/fzf/key-bindings.bash
. /usr/share/bash-complete-alias/complete_alias

# default PS1
#PS1='[\u@\h \W]\$ '

# depreciated
# 0: not bold, 91: bright red
# \e[m act like \e[0m, means reset so commands after it will not be colored 
# https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit
# need \[ and \] around color codes so bash ignore color codes when calculating line wraps?
# https://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/#:~:text=you%20also%20need%20to%20put%20%5C%5B%20and%20%5C%5D%20around%20any%20color%20codes%20so%20that%20bash%20does%20not%20take%20them%20into%20account%20when%20calculating%20line%20wraps.
#PS1='\[\e[0;91m\][\u@\h \W]\$ \[\e[0m\]'
# \033 can be used for dash printf, but \e can't? not sure why
#PS1='\[\033[0;91m\][\u@\h \W]\$ \[\033[0m\]'

# tput is better for different terminals? 
# but also need \[ and \] around color code for PS1! but seems no need for printf in script? why?
# setaf and sgr0 see `man terminfo`
PS1="\[$(tput setaf 1)\][\u@\h \W]\$ \[$(tput sgr0)\]"

# https://github.com/LukeSmithxyz/voidrice/blob/master/.config/shell/aliasrc
for cmd in hardcode-fixer ventoy units_cur fbgrab powertop nft rpi-imager fdisk dmesg; do
	alias $cmd="sudo $cmd"
done
for cmd in pacdiff visudo; do
	alias $cmd="sudo -E $cmd"
done
for cmd in loop o 'watch -c'; do
	alias ${cmd%% *}="$cmd "
done
unset cmd

# different name
alias a=alarm
# /dev/ttyACM0 can be in config file, or as environmantal variable, see /usr/share/doc/adafruit-ampy/README.md
#alias ap='ampy -p /dev/ttyACM0'
alias b='lsblk -o NAME,FSTYPE,FSVER,LABEL,UUID,FSAVAIL,FSUSED,FSUSE%,MOUNTPOINTS'
alias c=cfg
# for cherry pick
alias ccp='ssh-add -l >/dev/null || ssh-add; o alacritty -e ssh ka; o alacritty -e ssh studio; o alacritty -e ssh pp; o alacritty -e "$EDITOR" +/"last checked commit" "$XDG_DOCUMENTS_DIR/notes/others/recurring_maintenance.md"; cfg -l log -p; cfg -s log -p'
#alias cr=curl
alias cri='curl -Is'
alias crig='curl -Is www.google.com'
alias d='sdcv --color'
alias e='"$PAGER"'
# https://superuser.com/a/1202867
alias fdu="find . -maxdepth 1 -execdir du -sh '{}' \+ | sort -h"
alias g=git
alias gcd='git clone --depth=1'
alias gr='grep --color=auto -i'
alias grr='grep --color=auto -iIR'
alias h=htop
alias i=nsxiv
alias j=journalctl
alias l='ls --color=auto -A --group-directories-first'
alias ll='ls --color=auto -lAh --group-directories-first'
#alias lo=loop
alias lop='loop ping'
alias lopd='loop ping 9.9.9.9'
alias m=man
alias p=pacman
alias pt=pactree
alias pu=paru
alias qre='qrencode -t utf8i -m 1'
alias r='rem -cu+2 -@'
# https://askubuntu.com/a/22043
alias s='sudo '
alias se='sudo -E '
alias ska='ssh ka'
alias sp='ssh pp'
alias spd='speedtest; librespeed-cli'
alias sst='ssh studio'
alias sv=sudoedit
alias y=systemctl
alias yd='systemctl list-dependencies --all'
alias ydr='systemctl list-dependencies --all --reverse'
alias ye='systemctl list-unit-files --state=enabled'
alias ys='systemctl status'
alias yu='systemctl --user'
alias yue='systemctl --user list-unit-files --state=enabled'
alias yus='systemctl --user status'
alias u='ssh-add -l >/dev/null || ssh-add; o alacritty -e ssh ka; o alacritty -e ssh studio; o alacritty -e ssh pp; upd'
alias v='"$EDITOR"'
alias va='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/computer/arch_install.md"'
alias vc='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/computer/cli_notes.md"'
alias vd='vidir2 --linktargets'
alias vq='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/others/questions_ideas_tips.md"'
alias vn='"$EDITOR" "$(find "$XDG_DOCUMENTS_DIR/notes" -mindepth 1 -path "*/\.git" -prune -o -type f -print | fzf)"'
alias vr='"$EDITOR" "$DOTREMINDERS"'
alias vrc='"$EDITOR" +e\ \$MYVIMRC'
alias vrm='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/others/recurring_maintenance.md"'
alias vt='"$EDITOR" "$XDG_DOCUMENTS_DIR/notes/others/tmp_mobile_notes.md"'
alias xmr='monero-wallet-cli --config-file="$HOME/.bitmonero/monero-wallet-cli.conf"'
alias xmrds='monerod status; monerod print_net_stats'
alias za='zoxide add'
#alias zq='zoxide query'
#alias zqi='zoxide query -i'

# same name
alias absolutely-proprietary='echo n | absolutely-proprietary -f'
alias alsamixer='alsamixer -V all'
# I can't find a quick and easy way to temperory disable cloc config file except to change config file. Using an alias can disable --vcs with just \cloc.
alias cloc='cloc --vcs auto'
alias diff='diff --color=auto'
alias glmark2='glmark2 --fullscreen --annotate'
alias grep='grep --color=auto'
#alias info='info --vi-keys'
alias ls='ls --color=auto'
alias radeontop='radeontop -c'
alias rem='rem -@'
alias remind='remind -@'
alias rm='rm -I'
alias sdcv='sdcv --color'
alias shellcheck='shellcheck -x'
alias tree='tree -aC | "$PAGER"'
alias uname='uname -a'
alias vkmark='vkmark --fullscreen'

# depreciated
# all green color, no auto turn off color when pipe to nvim
#alias pactree='pactree -c'

#eval "$(zoxide init posix --hook prompt --no-aliases)"
# if no --no-aliases, when tab complete a dir name contain spaces, bash will not escape spaces, don't know why, maybe bug?
eval "$(zoxide init bash --no-aliases)"

z () {
	if  __zoxide_z "$@"; then
		l
		echo "$PWD"
	fi
}

zi () {
	if __zoxide_zi "$@"; then
		l
		echo "$PWD"
	fi
}

# steal from fzf: https://github.com/junegunn/fzf/blob/master/shell/key-bindings.bash
# READLINE_LINE and READLINE_POINT see `man bash`
zqi_key () {
	# fzf uses printf '%q' to escape output, but attention %q is not POSIX
	# well we use bash here so whatever
	selected="$(printf '%q' "$(zoxide query -i)")"
	# if don't want to use bash builtin printf:
	#selected=$(/usr/bin/printf '%q' "$(zoxide query -i)")
	# no "''" if select nothing
	if ! [ "$selected" = "''" ]; then
	# another way:
	#selected=$(zoxide query -i | tr '\n' '\0' | xargs -0 printf '%q')
	#if [ "$selected" ]; then
		READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected ${READLINE_LINE:$READLINE_POINT}"
		READLINE_POINT=$((READLINE_POINT+${#selected}+1))
	fi
}
bind -m vi-command -x '"\C-o":zqi_key'
bind -m vi-insert -x '"\C-o":zqi_key'

# more about bash completion see https://unix.stackexchange.com/a/529357/459013
complete -c wh
# tldr-sh-client readme 
complete -W "$(tldr 2>/dev/null -l -p all)" tldr
# https://unix.stackexchange.com/questions/216748/how-to-re-use-existing-completion-with-recent-bash-completion
_completion_loader info
eval "$(complete -p info | sed 's/\(.*\)info$/\1vinfo/')"
_completion_loader git
eval "$(complete -p git | sed 's/\(.*\)git$/\1cfg/')"
# complete-alias readme
complete -F _complete_alias "${!BASH_ALIASES[@]}"