aboutsummaryrefslogtreecommitdiff
path: root/status
diff options
context:
space:
mode:
Diffstat (limited to 'status')
-rwxr-xr-xstatus192
1 files changed, 192 insertions, 0 deletions
diff --git a/status b/status
new file mode 100755
index 0000000..51f9874
--- /dev/null
+++ b/status
@@ -0,0 +1,192 @@
+#!/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
+}
+
+# Calculate timestamp delta from a file
+function status_file_changed_delta {
+ local file="$1"
+
+ if [ -z "$file" ] || [ ! -e "$file" ]; then
+ echo 0
+ fi
+
+ local file_timestamp="`stat -c '%Z' $file`"
+ local timestamp="`date +%s`"
+
+ echo $(( timestamp - file_timestamp ))
+}
+
+# Run command if a file is older than a given number of seconds
+function status_run_if_file_older_than {
+ local file="$1"
+ local interval="$2"
+ local run="0"
+
+ shift 2
+
+ # Run command if there's still no file to test
+ if [ ! -e "$file" ]; then
+ run="1"
+ else
+ local age="`status_file_changed_delta $file`"
+ local interval="3600"
+
+ # Run command only when file is older or equal the interval
+ if (( $age >= $interval )); then
+ run="1"
+ fi
+ fi
+
+ # Run if criteria matches
+ if [ "$run" == "1" ]; then
+ $*
+ 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 -iv '^no reminders.$' # | tr '[:upper:]' '[:lower:]'
+ fi
+
+ # Update your mrconfig and check all registered repositories
+ if which mr &> /dev/null; then
+ local mrconfig="$HOME/.custom/mrconfig-automatic"
+
+ status_run_if_file_older_than $mrconfig 3600 mrconfig-updater
+
+ # Pipe through cat so we don't have to deal with mr's dynamic output weirdness
+ #mr -m status | cat
+
+ # Replace eventual "/mnt/crypt/home/$USER" with "~/" from output
+ # Piping through sed also handles mr's dynamic output weirdness
+ mr -m status | sed -e "s|/mnt/crypt/home/$USER/|~/|" -e "s|$HOME|~|"
+ fi
+
+ # Use this as an opportunity to save our configs
+ if which git-config-save &> /dev/null; then
+ git config-save --sometimes &> /dev/null
+ fi
+
+ # Check your TODO lists, filtering only important tasks
+ # Convention here is to use uppercase "IMPORTANT", to be explicit and avoid false positives
+ todo list IMPORTANT
+
+ # Collected items that need to be moved somewhere else
+ #collector count
+ collector list
+
+ # Check if you have mails to send
+ postponed
+
+ # Check unread mails
+ unread-mails
+
+ # Alarms set
+ #xalarm list
+
+ # Check for spool files
+ if [ -e "$HOME/temp/log/spool.md" ] && [ "`wc -l $HOME/temp/log/spool.md | cut -d ' ' -f 1`" != "0" ]; then
+ echo "Spool file not empty: $HOME/temp/log/spool.md"
+ fi
+
+ # Check if are dangling downloaded files
+ if [ -e "$HOME/load" ] && [ ! -z "`ls -1 ~/load/`" ]; then
+ # Print a newline if needed depending of the output of the previous commands
+ if [ ! -z "`postponed`" ] || [ ! -z "`unread-mails`" ] || [ ! -z "`collector list`" ]; then
+ echo ""
+ fi
+
+ 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