Skip to content

Instantly share code, notes, and snippets.

@johanbove
Last active March 30, 2025 19:24
Show Gist options
  • Save johanbove/328506117db2edff7f5c99d05afde0ec to your computer and use it in GitHub Desktop.
Save johanbove/328506117db2edff7f5c99d05afde0ec to your computer and use it in GitHub Desktop.
TaskWarrior aliases and other stuff
# Inspired by Paul Fenwick (https://gist.github.com/pjf)
# See https://gist.github.com/pjf/051aa4ef326d493beec950823f7edfd8#file-bashrc
# Reset
Color_Off='\[\e[0m\]' # Text Reset
# Regular Colors
Black='\[\e[0;30m\]' # Black
Red='\[\e[0;31m\]' # Red
Green='\[\e[0;32m\]' # Green
Yellow='\[\e[0;33m\]' # Yellow
Blue='\[\e[0;34m\]' # Blue
Purple='\[\e[0;35m\]' # Purple
Cyan='\[\e[0;36m\]' # Cyan
White='\[\e[0;37m\]' # White
# Bold
BBlack='\[\e[1;30m\]' # Black
BRed='\[\e[1;31m\]' # Red
BGreen='\[\e[1;32m\]' # Green
BYellow='\[\e[1;33m\]' # Yellow
BBlue='\[\e[1;34m\]' # Blue
BPurple='\[\e[1;35m\]' # Purple
BCyan='\[\e[1;36m\]' # Cyan
BWhite='\[\e[1;37m\]' # White
# Underline
UBlack='\[\e[4;30m\]' # Black
URed='\[\e[4;31m\]' # Red
UGreen='\[\e[4;32m\]' # Green
UYellow='\[\e[4;33m\]' # Yellow
UBlue='\[\e[4;34m\]' # Blue
UPurple='\[\e[4;35m\]' # Purple
UCyan='\[\e[4;36m\]' # Cyan
UWhite='\[\e[4;37m\]' # White
# Background
On_Black='\[\e[40m\]' # Black
On_Red='\[\e[41m\]' # Red
On_Green='\[\e[42m\]' # Green
On_Yellow='\[\e[43m\]' # Yellow
On_Blue='\[\e[44m\]' # Blue
On_Purple='\[\e[45m\]' # Purple
On_Cyan='\[\e[46m\]' # Cyan
On_White='\[\e[47m\]' # White
# High Intensity
IBlack='\[\e[0;90m\]' # Black
IRed='\[\e[0;91m\]' # Red
IGreen='\[\e[0;92m\]' # Green
IYellow='\[\e[0;93m\]' # Yellow
IBlue='\[\e[0;94m\]' # Blue
IPurple='\[\e[0;95m\]' # Purple
ICyan='\[\e[0;96m\]' # Cyan
IWhite='\[\e[0;97m\]' # White
# Bold High Intensity
BIBlack='\[\e[1;90m\]' # Black
BIRed='\[\e[1;91m\]' # Red
BIGreen='\[\e[1;92m\]' # Green
BIYellow='\[\e[1;93m\]' # Yellow
BIBlue='\[\e[1;94m\]' # Blue
BIPurple='\[\e[1;95m\]' # Purple
BICyan='\[\e[1;96m\]' # Cyan
BIWhite='\[\e[1;97m\]' # White
# High Intensity backgrounds
On_IBlack='\[\e[0;100m\]' # Black
On_IRed='\[\e[0;101m\]' # Red
On_IGreen='\[\e[0;102m\]' # Green
On_IYellow='\[\e[0;103m\]' # Yellow
On_IBlue='\[\e[0;104m\]' # Blue
On_IPurple='\[\e[0;105m\]' # Purple
On_ICyan='\[\e[0;106m\]' # Cyan
On_IWhite='\[\e[0;107m\]' # White
# See https://gist.github.com/pjf/051aa4ef326d493beec950823f7edfd8#file-bashrc
# Make our prompt awesome. :)
source ~/.bash_colours
source ~/.git-prompt.sh
TICK="βœ“"
CROSS="βœ—"
DONE="πŸ––"
URGENT="πŸ”₯"
OVERDUE="πŸ‘Ž"
DUETODAY="πŸ””"
DUETOMORROW="⏰"
# TaskWarrior integration
# Inspired by Paul Fenwick (https://gist.github.com/pjf)
function task_indicator {
if [ `task +READY +OVERDUE count` -gt "0" ]; then
echo "$OVERDUE"
elif [ `task +READY +TODAY count` -gt "0" ]; then
echo "$DUETODAY"
elif [ `task +READY +TOMORROW count` -gt "0" ]; then
echo "$DUETOMORROW"
elif [ `task +READY urgency \> 10 count` -gt "0" ]; then
echo "$URGENT"
else
echo "$DONE"
fi
}
# Git Integration
function git_branch_status () {
BRANCH=`git rev-parse --abbrev-ref HEAD 2> /dev/null`;
if [ -n "$BRANCH" ]; then
DIRTY=`git status --porcelain --untracked-files=no 2> /dev/null`;
if [ -n "$DIRTY" ]; then
echo "$BRed $CROSS";
else
echo "$BGreen $TICK";
fi;
fi;
}
# Updates the Prompt correctly
function update_PS1 () {
#PS1='$()'"\W$BYellow$(__git_ps1) $(task_indicator) $Color_Off \$ "
PS1="$(git_branch_status) \W$BYellow$(__git_ps1) $(task_indicator) $Color_Off \$ "
}
shopt -u promptvars
PROMPT_COMMAND=update_PS1
## TaskWarrior
## <https://taskwarrior.org/docs/>
# Declares an array of projects in bash
# The position in the array counts for the id and starts counting at 1
declare -a projects=('ProjectX' 'ProjectY');
# http://stackoverflow.com/a/16553351
# get length of an array
nrOfProjects=${#projects[@]}
urgencyPrio=4
echo "Setting up TaskWarrior and TimeWarrior with ${nrOfProjects} projects..."
echo "DONE = $DONE / URGENT = $URGENT / OVERDUE = $OVERDUE / DUETODAY = $DUETODAY / DUETOMORROW = $DUETOMORROW"
# Loop will set up task next, task add, task log and timew start for all projects listed above
for (( i = 0; i < $nrOfProjects; i++ ));
do
echo "Project $i = ${projects[i]}"
alias tn$i="task next project:${projects[i]} +READY"
alias tnu$i="tn${i} urgency \> ${urgencyPrio}"
alias ta$i="task add project:${projects[i]}"
alias tl$i="task log project:${projects[i]}"
alias twst$i="timew start ${projects[i]}"
done;
# General TaskWarrior commands
alias t='task'
alias tn='task next +READY'
alias tnu="task next urgency \> ${urgencyPrio}"
alias ta='task add'
alias tan='task annotate'
alias tl='task log'
alias tac='task active'
alias tap='task add project:Personal'
alias taw='task add project:Work'
# TaskWarrior reports
# Tip: use `task timesheet` for a full report
alias tt='task modified:today completed'
alias ty='task modified:yesterday completed'
alias tey='task end.after:yesterday completed'
alias twork='task context work'
alias tpers='task context personal'
# Show task I completed in the last week
alias tclw='task end.after:today-1wk completed'
## TimeWarrior
alias twst='timew start'
alias twstop='timew stop'
alias tws='timew summary :week'
alias twlw='timew summary :lastweek'
alias twd='timew summary :day'
## Backups
#alias backupTasks='tar -czf ~/Documents/99_Zips/task.tar.gz ~/.task ~/.timewarrior'
alias backupTasks='sh -c ~/MyScripts/backupTasks.sh'
alias backupDotFiles='sh -c ~/MyScripts/backupDotFiles.sh'
# PGP
# Checks the git log for commits with a signature and very the found PGP keys with keys looked up
# in pgp.mit.edu
# See https://mikegerwitz.com/papers/git-horror-story
alias gitpgp='git log --show-signature | grep "RSA key" | grep -o "[A-Z0-9]\+$" | sort | uniq | xargs gpg --keyserver pgp.mit.edu --recv-keys $keys'
# GIT
alias gc='git checkout'
alias gf='git fetch'
alias gs='git status'
alias gl='git log --oneline'
alias gp='git pull'
alias gbl='git for-each-ref --sort=committerdate refs/heads/ --format="%(color: red)%(committerdate:short) %(color:cyan)%(refname:short)"'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment