#
# Utility Functions and Options
#


#
# ls Colours
#

if (( ${+commands[dircolors]} )); then
  if [[ -s ${HOME}/.dir_colors ]]; then
    eval "$(dircolors --sh ${HOME}/.dir_colors)"
  else
    eval "$(dircolors --sh)"
  fi

  alias ls='ls --group-directories-first --color=auto'
  
else
  # if we can't call dircolors, use generic preset
  export LSCOLORS='exfxcxdxbxGxDxabagacad'
  export LS_COLORS='di=34:ln=35:so=32:pi=33:ex=31:bd=36;01:cd=33;01:su=31;40;07:sg=36;40;07:tw=32;40;07:ow=33;40;07:'

  alias ls='ls --group-directories-first -G'
fi


#
# grep Colours
#

export GREP_COLOR='37;45'             #BSD
export GREP_COLORS="mt=${GREP_COLOR}" #GNU
alias grep='grep --color=auto'


#
# ls Aliases
#

alias l='ls -lAh'         # all files, human-readable sizes
alias lm="l | ${PAGER}"   # all files, human-readable sizes, use pager
alias ll='ls -lh'         # human-readable sizes
alias lr='ll -R'          # human-readable sizes, recursive
alias lx='ll -XB'         # human-readable sizes, sort by extension (GNU only)
alias lk='ll -Sr'         # human-readable sizes, largest last
alias lt='ll -tr'         # human-readable sizes, most recent last
alias lc='lt -c'          # human-readable sizes, most recent last, change time


#
# File Downloads
#

# order of preference: aria2c, axel, wget, curl. This order is derrived from speed based on personal tests.
if (( ${+commands[aria2c]} )); then
  alias get='aria2c --max-connection-per-server=5 --continue'
elif (( ${+commands[axel]} )); then
  alias get='axel --num-connections=5 --alternate'
elif (( ${+commands[wget]} )); then
  alias get='wget --continue --progress=bar --timestamping'
elif (( ${+commands[curl]} )); then
  alias get='curl --continue-at - --location --progress-bar --remote-name --remote-time'
fi


#
# Resource Usage
#

alias df='df -kh'
alias du='du -kh'


#
# Always wear a condom
#

alias chmod='chmod --preserve-root -v'
alias chown='chown --preserve-root -v'

# not aliasing rm -i, but if safe-rm is available, use condom.
if (( ${+commands[safe-rm]} )); then
  alias rm='safe-rm'
fi


#
# Misc
#

mkcd() {
  [[ -n ${1} ]] && mkdir -p ${1} && builtin cd ${1}
}