function myfacl {
  FUNCTION_PRELUDE

  if [[ ( -z $1 ) || ( -z $2 ) ]]; then
    echo ':('
    return 1
  fi

  setfacl -Rb                           "${@:2}"
  setfacl -Rm  "u:$1:rwX,g:$1:rwX,o::0" "${@:2}"
  setfacl -Rdm "u:$1:rwX,g:$1:rwX,o::0" "${@:2}"
}

function is_local {
  local HOSTNAME="$(hostname)"

  [[ "$HOSTNAME" =~ '^abra0' || "$HOSTNAME" == "svxf2-osx" ]]
}

function mount_sshfs {
  FUNCTION_PRELUDE

  if [[ ( -z $1 ) || ( -z $2 ) ]]; then
    echo ':('
    return 1
  fi

  local MOUNT_PATH="/Users/$USER/mount/$1"

  mkdir -p "$MOUNT_PATH"

  if mount | grep "$MOUNT_PATH"; then
    umount "$MOUNT_PATH";
  fi

  sshfs \
    -o allow_other \
    -o kernel_cache \
    -o direct_io \
    -o auto_cache \
    -o defer_permissions \
    -o noappledouble \
    -o cache=yes \
    -o Compression=yes \
    -o reconnect \
    -o workaround=rename \
    "$1:$2" "$MOUNT_PATH"

  local REMOTE_COMMAND_PIPE_PATH="/projects/subl_remote/fifo"
  local LOCAL_COMMAND_PIPE_PATH="/Users/$USER/mount/$1/$REMOTE_COMMAND_PIPE_PATH"

  if [[ ! -e "$LOCAL_COMMAND_PIPE_PATH" ]]; then
    echo "Can't find the command pipe"
    return
  fi

  echo "Starting remote command pipe..."
  ssh $1 -- tail -f "$REMOTE_COMMAND_PIPE_PATH" | zsh
}

function sublr {
  FUNCTION_PRELUDE

  local HOSTNAME=$(hostname)
  local FULL_PATH=$(realpath $1)

  echo "subl /Users/abra/mount/$HOSTNAME/$FULL_PATH" > /projects/subl_remote/fifo
}

function mkcd {
  FUNCTION_PRELUDE_NO_XTRACE

  if [[ -z $1 ]]; then
    echo ':('
    return 1
  fi

  if [[ -e $1 ]]; then
    echo "file exists"
    return 1
  fi

  mkdir $1

  cd $1
}

function publish {
  FUNCTION_PRELUDE

  rsync2 "$@" "dedi:/var/www/abra.me/list/"
}

function twitch {
  FUNCTION_PRELUDE

  livestreamer "http://www.twitch.tv/${1}" "${${@:2}:-best}"
}

function save_stream {
  FUNCTION_PRELUDE

  local NAME=$1

  if [[ ! -d $NAME ]]; then
    echo ':('
    return 1
  fi

  while true; do
    local CURDATE=$(date +"%Y-%m-%d-%H:%M:%S")
    livestreamer "https://twitch.tv/$NAME" -o "$NAME/$CURDATE.mp4" || true
    sleep 30
  done
}


function dcp {
  FUNCTION_PRELUDE

  git add --all :/

  git commit -m "${*:-$(whoami) at $(date)}"

  git push
}


function .dcp {
  FUNCTION_PRELUDE

  .g add -u

  .g commit -m "${*:-$(whoami) at $(date)}"

  .g push
}

function strip-tags {
  FUNCTION_PRELUDE

  find . -type f -name '*.mp3' \
    | tr '\n' '\0' \
    | xargs -0 -n1 mid3v2 --delete-frames=TXXX,USLT,TIPL,UFID,APIC,TBPM,TCMP,TDOR,TDRC,TLAN,TMED,TPOS,TPUB,TRCK,TCON
}

function levi_beet {
  FUNCTION_PRELUDE

  ssh levi -- sudo BEETSDIR=/projects/config/beets -u torrent beet "$@"
}

function beet_comments {
  FUNCTION_PRELUDE

  : "${1:?who?}"
  : "${2:?what?}"

  levi_beet modify \'"comments=$2"\' \'"albumartist::$1"\'
}

function rsync2 {
  rsync \
    --info=PROGRESS2 \
    --progress \
    --recursive \
    --compress \
    --human-readable \
    --update \
    --times \
    --no-whole-file \
    --itemize-changes \
    --stats \
    --verbose \
    --links \
    "${(@)@}"
}

function sync-music {
  FUNCTION_PRELUDE

  # if ! is_local; then
  #   echo "Should be local"
  #   return 1
  # fi

  local MUSIC_DIR="$HOME/music/library"

  mkdir -p "$MUSIC_DIR"

  rsync2 \
    --delete \
    "levi:/projects/music/" \
    "$MUSIC_DIR/"
}

# function .g-init() {
#   git init --bare $HOME/.dotgit
#   .g config --local status.showUntrackedFiles no
#   .g remote add origin ssh://dedi/root/.dotgit
#   git config --global user.name "Your Name"
#   git config --global user.email you@example.com
#   .g remote add origin ssh://dedi/var/www/git.abra.me/dot.git
# }


# make_user() {
#   FUNCTION_PRELUDE

#   if is_local; then
#     echo "You're local"
#     return 1
#   fi

#   adduser --system --shell /bin/zsh --disabled-password $1 || return 1

#   # wget abra.me/.dotfiles.tar.gz -O /home/$1/.dotfiles.tar.gz
#   # tar xf /home/$1/.dotfiles.tar.gz -C /home/$1
#   # chown $1:nogroup -R /home/$1/
# }

# function latest() {
#   echo -n ("${(@f)$(ls *(om[1,$1]))}")
# }

function testo {
  local A="${@[2,3]}"
  ./t.py ${(t)A} "$A" ${A[@]}
  unset A

  local A=("$@[2,3]")
  ./t.py ${(t)A} "$A" ${A[@]}
  unset A

  ./t.py "$@[2,3]"
}
# testo 1 "2 3" 4

# shit shit shit s hist h is htisthsi 2018-06-30
function ffmpeg_timelapse {
  FUNCTION_PRELUDE

  local DATE="$1"

  ls "/mnt/a/snaps/$DATE" | wc -l

  ffmpeg \
    -framerate 60 \
    -pattern_type glob -i "/mnt/a/snaps/$DATE/*.jpg" \
    "${@:2}" \
    -y "/mnt/a/tmp/$DATE.mp4"

  mv "/mnt/a/tmp/$DATE.mp4" "/mnt/a/$DATE.mp4"

  rm -rf "/mnt/a/snaps/$DATE"
}

function ffmpeg_timelapse_today {
  local TODAY="$(date '+%Y-%m-%d')"

  ffmpeg_timelapse "$TODAY" -preset ultrafast -crf 20
}

function update_.g {
  if [[ ! -d "$HOME/.dotgit" ]]; then
    # no git to update
    return
  fi

  # force updating origin to new server
  .g remote set-url origin https://gitea.abra.me/svxf/dotfiles.git

  local RES="$(.g pull --no-stat 2>&1)"

  if [[ $? != 0 ]]; then
    # something went wrong
    return
  fi

  # no verbose :(
  # if [[ ! $RES =~ "Already up.to.date" ]]; then
  #   echo "Updated .g"
  #   echo $RES
  #   echo "======"
  #   echo
  #   zshreload
  # fi
}

function .sh_setup {
  echo 'wget abra.me/.sh && chmod +x .sh && ./.sh'
}