aboutsummaryrefslogtreecommitdiff
path: root/status
blob: 458937e9d244b8d61d17b53fbb2d5c919c68679c (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#!/bin/bash
#
# Check the overall status of your work.
#

# Parameters
BASENAME="`basename $0`"

# Usage
function status_usage {
  echo "usage: $BASENAME [-l|--long] [-d|--delay N] [project]"

  if [ -z "$1" ]; then
    exit 1
  else
    exit $1
  fi
}

# See https://stackoverflow.com/questions/2721946/cross-platform-getopt-for-a-shell-script#4300224
function status_options {
  getopt -T > /dev/null
  if [ $? -eq 4 ]; then
    # GNU enhanced getopt is available
    ARGS=`getopt --name "$BASENAME" --long loop,delay: --options ld: -- "$@"`
  else
    # Original getopt is available (no long option names, no whitespace, no sorting)
    ARGS=`getopt ld: "$@"`
  fi

  if [ $? -ne 0 ]; then
    echo "$BASENAME: usage error" >&2
    status_usage 2
  fi

  eval set -- $ARGS

  while [ $# -gt 0 ]; do
    case "$1" in
      l|--loop)
        LOOP="yes";;
      d|--delay)
        DELAY="$2"
        shift;;
      --)
        shift
        break;;
      *)
        status_usage
        ;;
    esac
    shift
  done

  if [ $# -gt 0 ]; then
    PROJECT="$1"
    shift
  fi
}

# Run status
function status_run {
  if [ ! -z "$PROJECT" ]; then
    # Check the status of the given project
    cd $PROJECT &> /dev/null && git status
  elif git status &> /dev/null; then
    # Check the status of the current project
    mr status
  else
    # Ensure we are in the home folder
    cd

    # Check your reminders
    if which remind &> /dev/null && [ -e "$HOME/.reminders" ]; then
      remind ~/.reminders | grep -v '^No reminders.$'
    fi

    # Update your mrconfig and check all registered repositories
    if which mr &> /dev/null; then
      # Pipe through cat so we don't have to deal with mr's dynamic output weirdness
      #mrconfig-updater && mr -m status | cat

      # Replace eventual "/mnt/crypt/home/$USER" with "~/" from output
      # Piping through sed also handles mr's dynamic output weirdness
      mrconfig-updater && mr -m status | sed -e "s|/mnt/crypt/home/$USER/|~/|" -e "s|$HOME|~|"
    fi

    # Check your TODO lists, filtering only important tasks
    todo list important

    # Check if you have mails to send
    postponed

    # Check unread mails
    unread-mails

    # Check if are dangling downloaded files
    if [ -e "$HOME/load" ] && [ ! -z "`ls -1 ~/load/`" ]; then
      echo "Dangling files at ~/load:"
      echo ""
      ls -lh ~/load/
    fi
  fi
}

# Options
status_options $@

# Dispatch
if [ "$LOOP" == "yes" ]; then
  PROJECT=""

  if [ -z "$DELAY" ]; then
    DELAY="60"
  fi

  while true; do
    clear
    status_run
    sleep $DELAY
  done
else
  status_run
fi