diff options
Diffstat (limited to 'status')
-rwxr-xr-x | status | 192 |
1 files changed, 192 insertions, 0 deletions
@@ -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 |