export DOTFILES_PATH=$HOME/.dotfiles

BASE16_SHELL="$DOTFILES_PATH/colors/shell"
[[ -s "$BASE16_SHELL" ]] && source "$BASE16_SHELL"

if [ -t 0 ]; then
	source "$DOTFILES_PATH/variables.bash"

	# disable ctrl-s terminal freeze
	[[ $- == *i* ]] && stty -ixon

	# filesystem aliases
	alias lx='ls -lXB' # order by filetype
	alias lk='ls -lSr' # order by filesize reversed
	alias lt='ls -ltr' # order by file modified time
	alias lc='ls -ltcr' # order by filectime
	alias lu='ls -ltur' # order by file access time
	alias ls='ls -h --color --group-directories-first' # flat view w/ directories first
	alias l='ls -h --color --group-directories-first' # same as above
	alias ll='ls -lv --group-directories-first' # non-flat view
	alias lm='ll | more'
	alias lr='ll -R' # please don't
	alias la='ll -A' # show all
	alias tree='tree -Csuh'

	# navigation aliases
	alias c="cd $HOME/.."
	alias cd..="cd .."
	alias cdd="cd \"$DOTFILES_PATH\""
	alias ..="cd .."
	alias ...="cd ../.."
	alias ....="cd ../../.."
	alias .....="cd ../../../.."
	alias ......="cd ../../../../.."
	alias todo="todo.sh"
	alias td="todo"

	# tmux aliases
	alias tmux='TERM=screen-256color-bce tmux' # syntax higlighting for vim in tmux
	alias tmnew="tmux new -s"
	alias tmls="tmux list-sessions"
	alias tmatt="tmux attach -t"

	# git aliases
	alias gs="git status"
	alias gl="git log"
	alias gpl="git pull"
	alias gp="git push"
	alias gac="git add -A && git commit -m"

	# browser aliases
	alias qutebrowser="qutebrowser --backend webengine"

	# networking aliases
	alias p="ping 8.8.8.8"
	alias wifi-menu="sudo wifi-menu"
	alias wifi="sudo systemctl start netctl-auto@$(for wli in /sys/class/net/wl*; do echo $(basename $wli); break; done)"

	# emacs aliases
	alias emacs="emacs -nw"

	# arch aliases
	alias archupdate="pacaur -Syyu --noconfirm --noedit"

	# misc aliases
	alias setbg="feh --bg-fill"

	# games aliases
	# alias steam="LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1 /usr/$LIB/libgpg-error.so' steam"

	stopbar() {
		if [[ -f "$BAR_PID_FILE" ]]; then
			echo 
			kill -SIGINT $(cat "$BAR_PID_FILE")
			rm -f "$BAR_PID_FILE"
		else
			echo "Bar is not running."
		fi
	}
	export -f stopbar

	# wm aliases
	startbar() {
		if [[ -f "$BAR_PID_FILE" ]]; then
			stopbar
		fi
		"$BAR_PATH/start.bash"
		echo $! > "$BAR_PID_FILE"
		bg
		disown
	}
	export -f startbar

	# misc aliases
	alias keyrepeat="xset r rate 250 80"

	export EDITOR="vim"
	if command -v nvim >/dev/null 2>&1; then
		alias vim="nvim"
		alias ovim="\\vim"
		export EDITOR="nvim"
	fi

	# prompt
	COLOR_RESET='\[\e[0m\]'
	PROMPT_SUCCESS_COLOR='\[\e[0;34m\]'
	PROMPT_FAILURE_COLOR='\[\e[0;31m\]'
	DIR_COLOR='\[\e[0;33m\]'
	# prompt rendering functions
	sps() {
		name="$PWD"
		[[ "$name" =~ ^"$HOME"(/|$) ]] && name="~${name#$HOME}"
		curdir=$(echo "$PWD" | sed -r 's|.*/(.+)$|\1|g')
		name=$(echo "$name" | sed -r 's|/(..)[^/]*|/\1|g' | sed -r 's|(.*/)(.+)$|\1|g')
		[[ "$name" == "~" ]] && curdir=""
		echo "$name$curdir"
	}
	prompt_command_func()
	{
		RET=$?
		if [ $RET -eq 0 ]; then
			STATUS_COLOR=$PROMPT_SUCCESS_COLOR
		else
			STATUS_COLOR=$PROMPT_FAILURE_COLOR
		fi;
		PS1="$STATUS_COLOR\u@\h$COLOR_RESET $DIR_COLOR$(eval "sps")$COLOR_RESET "
	}
	export PROMPT_COMMAND="prompt_command_func"

	# man pages with vim
	vman() {
		if command -v nvim >/dev/null 2>&1; then
			nvim -c "SuperMan $*"
		else
			vim -c "SuperMan $*"
		fi

		if [ "$?" != "0" ]; then
			echo "No manual entry for $*"
		fi
	}
	alias _man="\\man"
	alias man="vman"

	# save the current directory for later retrieval
	scwd() {
		addon=""
		if [[ -n $1 ]]; then
			addon="-$1"
		fi
		echo "$PWD" > "$DOTFILES_PATH/env/sh/cwd$addon.tmp"
	}
	export -f scwd
	bind '"\C-s"':"\"scwd\C-m\""
	
	# go to the saved current directory
	gcwd() {
		addon=""
		if [[ -n $1 ]]; then
			addon="-$1"
		fi
		cd $(cat "$DOTFILES_PATH/env/sh/cwd$addon.tmp")
	}
	export -f gcwd
	bind '"\C-g"':"\"gcwd\C-m\""

	complete -cf sudo
	complete -cf man

	# allow a per-device script that is pulled in
	if [ -a "$HOME/.bashrc_env" ]; then
		. "$HOME/.bashrc_env"
	fi

	if [ "$PWD" = "$HOME" ]; then
		cd "$HOME/.."
	fi

	# vi modes in the terminal prompt
	set -o vi

	# except we still want some things to work the old fashioned way
	bind -f "$HOME/.inputrc"
fi