about summary refs log tree commit diff
path: root/home/profiles/base/scripts/airport.nix
blob: cedb1d4e6fed13640532882ec8e5c56bdf972cf7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
''
  # airport.sh - shared file store
  #
  # # Environment variables
  # `AIRPORT_HOST` - host to rsync to
  # `AIRPORT_USER` - username to connect with
  # `AIRPORT_DIR`  - defaults to `~/airport`, directory to use

  set -euo pipefail

  die () {
      echo >&2 "$@"
      exit 1
  }

  confirm() {
      read -r -p "''${1:-Proceed?} [y/N] " response
      case "$response" in
          [yY][eE][sS]|[yY])
              true
              ;;
          *)
              false
              ;;
      esac
  }

  delay() {
      DELAY_SECONDS=''${2:-5}
      echo "''${1:-This script will perform some potentionally destructive actions.}"
      echo "Waiting $DELAY_SECONDS second(s) before proceeding..."
      sleep $DELAY_SECONDS
  }

  bin_exists() {
      [ -z $1 ] && die "FATAL: called bin_exists() without arguments (expected 1)"
      if command -v $1 &> /dev/null
      then
          true
      else
          false
      fi
  }

  [ -f $HOME/.airport-env ] && source $HOME/.airport-env

  HOST=''${AIRPORT_HOST:?"AIRPORT_HOST needs to be set"}
  USER=''${AIRPORT_USER:?"AIRPORT_USER needs to be set"}
  DIR=''${AIRPORT_DIR:-"$HOME/airport"}

  [ "$#" -eq 0 ] && die "FATAL: expected exactly 1 argument, $# provided"

  if [ ! -d $DIR ]
  then
      confirm "$DIR doesn't exist, create and proceed?" || die "FATAL: $DIR doesn't exist"
      mkdir -p $DIR
  fi

  bin_exists "rsync" || die "FATAL: couldn't find rsync"

  case "$1" in
      send)
          delay "Airport will run 'rsync -au' to $DIR to SEND"
          rsync -au --stats --info=progress2 --mkpath $DIR/ $USER@$HOST:airport
      ;;

      recv)
          delay "Airport will run 'rsync -au' to $DIR to RECV"
          rsync -au --stats --info=progress2 $USER@$HOST:airport/ $DIR
      ;;

      configure)
          delay "Will write configuration to $HOME/.airport-env"
          cat >$HOME/.airport-env <<EOF
AIRPORT_USER=$USER
AIRPORT_HOST=$HOST
AIRPORT_DIR=$DIR
EOF
      ;;

      *) printf "Unknown subcommand $1, supported subcommands:\n"
          printf '\tsend\n'
          printf '\trecv\n'
          printf '\tconfigure'
          die
      ;;
  esac

  exit 0
''