function aws-profile {
  if [ $# -eq 0 ]; then
    echo Current AWS Profile: $AWS_DEFAULT_PROFILE
  else
    export AWS_DEFAULT_PROFILE=$1
    export AWS_PROFILE=$1
  fi
}

function aet-bin-exec {
  local readonly script=$1; shift

  ./aet-bin/$script $@
}

function fix-permissions {
  find . -type d -print0 | xargs -0 chmod 0755
  find . -type f -print0 | xargs -0 chmod 0644
}

function g {
  if [[ $# > 0 ]]; then
    git $@
  else
    git status
  fi
}

function insert-sudo {
  zle beginning-of-line
  zle -U "sudo "
}

function true-colors {
  awk 'BEGIN{
    s="/\\/\\/\\/\\/\\"; s=s s s s s s s s;
    for (colnum = 0; colnum<77; colnum++) {
        r = 255-(colnum*255/76);
        g = (colnum*510/76);
        b = (colnum*255/76);
        if (g>255) g = 510-g;
        printf "\033[48;2;%d;%d;%dm", r,g,b;
        printf "\033[38;2;%d;%d;%dm", 255-r,255-g,255-b;
        printf "%s\033[0m", substr(s,colnum+1,1);
    }
    printf "\n";
  }'
}

function port-forward {
  if [ $# -lt 2 ]; then
    echo Usage: port-forward HOST LOCAL_PORT \[REMOTE_PORT\]
  else
    ssh $1 -R ${3:-$2}":localhost:"$2 -g
  fi
}

function gitignore-io {
  curl https://www.gitignore.io/api/$@
}

function git-date-added {
  if [ $# -eq 0 ]; then
    echo Usage: git-date-added FILENAME
  else
    git log --format=%aD $1 | tail -1
  fi
}

function run {
  if [ $# -lt 2 ]; then
    echo Usage: run NUMBER COMMAND
  else
    number=$1; shift

    for i in `seq $number`; do
      eval "$@"
    done
  fi
}

function npm-exec {
  (PATH=$(npm bin):$PATH; eval $@;)
}

function password-generator {
  if [ -x "$(command -v openssl)" ]; then
    password=$(
      openssl rand -base64 32 \
        | head -c 32
    )
  else
    password=$(
      date +%s \
        | sha256sum \
        | base64 \
        | head -c 32
    )
  fi

  echo $password
}

function stopwatch {
  date1=`date +%s`
   while true; do
    echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r"
    sleep 0.1
   done
}

function test-rails {
  if bundle exec rspec --help > /dev/null 2>&1; then
    bundle exec rspec $@
  else
    bundle exec rails test $@
  fi
}

function yarn-exec {
  (PATH=$(yarn bin):$PATH; eval $@;)
}

function yarn-install-like-bundle {
  if [ -f yarn.lock ]; then
    yarn install --pure-lockfile
  else
    yarn install
  fi
}

function ag-count {
  if [ $# -lt 1 ]; then
    echo Usage: ag-count SEARCHTERM
  else
    searchterm=$1; shift

    ag --stats $searchterm | tail -n5
  fi
}