#!/bin/sh set -eu uuid() { # Taken from: # https://serverfault.com/a/799198 od -xN20 /dev/urandom | \ head -1 | \ awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' } insert_at_line() { N="$1" F="$2" TMP="$(mktemp)" printf '%s\n\n%s\n\n%s\n' \ "$(head "-n$N" "$F")" \ "$(cat -)" \ "$(tail "-n+$((N+1))" "$F")" \ > "$TMP" mv "$TMP" "$F" } SHORT= while getopts 'c' flag; do case "$flag" in c) SHORT=1 ;; *) ;; esac done TITLE="${1:-FIXME}" ID="#task-$(uuid)" TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$TITLE" "$ID" "$(date -I)")" if [ "$SHORT" = '1' ] && [ "$TITLE" != 'FIXME' ]; then echo "$TITLE_LINE" | insert_at_line 2 TODOs.md else printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line 2 TODOs.md fi git reset . git add TODOs.md git commit -m "TODOs.md: Add $ID"