├── Getting_Things_Done.jpg ├── README.md ├── gtd-book.jpg ├── gtd-flow.jpg ├── gtd-logo-footer.png ├── gtd.pdf ├── gtdbook.jpg ├── projects_without_next_action.sh ├── script-from-CS-Syd ├── task.jpg ├── task_aliases ├── task_aliases snippets └── taskrc /Getting_Things_Done.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/Getting_Things_Done.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 3 | - GTD with Taskwarrior 4 | author: 5 | - Thomas Willis 6 | theme: 7 | - Warsaw 8 | colortheme: 9 | - dolphin 10 | --- 11 | # **Slide presentation for a talk I gave to the Western North Carolina Linux Users Group** 12 | # **GTD** 13 | 14 | ![](gtd-book.jpg) 15 | 16 | Getting Things Done (abbreviated to G.T.D.) is a time management method, described in the book of the same title by productivity consultant David Allen. 17 | The GTD method rests on the idea of moving planned tasks and projects out of the mind 18 | by recording them externally and then breaking them into actionable 19 | work items. This allows attention to be focused on taking action on 20 | tasks, instead of recalling them. [^1] 21 | 22 | # **Taskwarrior** 23 | 24 | ![](task.jpg) 25 | 26 | Taskwarrior is an open-source, cross platform time and task management tool. It has a command-line interface rather than a graphical user interface. 27 | Taskwarrior uses concepts and techniques described in Getting Things Done by David Allen, but is paradigm-agnostic in that it does not require users to adhere to any given life-management philosophy. According to its author, Taskwarrior was created "to address layout and feature issues" in the Todo.txt applications popularized by Gina Trapani [^2] 28 | 29 | # **This Project:** 30 | 31 | This projects uses templates produced by Tom Sydney Kerckhove in a series of blog posts (https://cs-syd.eu/tags/Taskwarrior) about integrating taskwarrior into a specific GTD workflow, modifying reports and creating scripts that are built upon the GTD concepts of: 32 | 33 | * Capture 34 | * Clarifying 35 | * Organize 36 | * Reflect 37 | * Engage 38 | 39 | # **How it Works** 40 | ![GTD Flow Chart](gtd-flow.jpg) 41 | 42 | # **Taskwarrior Definitions:** 43 | There are several components included in Taskwarrior to allow for granular organization. 44 | 45 | These are: 46 | 47 | * Filters 48 | * Tags 49 | * Reports 50 | * Contexts 51 | * UDA's 52 | 53 | **Located in .taskrc and .task_aliases** 54 | 55 | # **Work flow** 56 | 57 | **Taskwarrior is NOT a Calendar** 58 | 59 | * Capture- Throughout the day collect stuff with the 'IN' command 60 | * Clarify- Decide if tasks in IN are actionable. Assign Contexts, Tags, Estimate Time, and Brainpower. 61 | * Organize- Create Projects and next actions, Delegate, Defer, Do It. 62 | * Reflect- Decide What to do next. Assess if projects are moving forward. Follow up Delegated tasks. 63 | * Engage- DO IT. 64 | 65 | # **Syncing** 66 | The free online cloud Service **Freecinc** offers an interface and setup for syncing Taskwarrior data between devices. 67 | 68 | # **Mobile Life** 69 | I use this same setup for collection and reflection on the go with my **Android** phone running **Termux**. 70 | 71 | # **Questions?** 72 | 73 | * https://taskwarrior.org 74 | * https://gettingthingsdone.com 75 | * https://freecinc.com 76 | * email hamlinux@gmail.com 77 | * github https://github.com/hamlinux/taskwarrior-GTD 78 | 79 | [^1]:https://en.wikipedia.org/wiki/Getting_Things_Done 80 | [^2]:https://en.wikipedia.org/wiki/Taskwarrior 81 | 82 | -------------------------------------------------------------------------------- /gtd-book.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/gtd-book.jpg -------------------------------------------------------------------------------- /gtd-flow.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/gtd-flow.jpg -------------------------------------------------------------------------------- /gtd-logo-footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/gtd-logo-footer.png -------------------------------------------------------------------------------- /gtd.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/gtd.pdf -------------------------------------------------------------------------------- /gtdbook.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/gtdbook.jpg -------------------------------------------------------------------------------- /projects_without_next_action.sh: -------------------------------------------------------------------------------- 1 | fun() { 2 | import tasklib 3 | tw = tasklib.TaskWarrior () 4 | result = set (tw.execute_command(["+PROJECT", "+PENDING", "+READY", "-waiting", "_projects"])) 5 | - set (tw.execute_command(["+PENDING", "+next", "_projects"])) 6 | for i in result: 7 | print(i) 8 | EOF 9 | } 10 | 11 | python - c "$(fun)" 12 | -------------------------------------------------------------------------------- /script-from-CS-Syd: -------------------------------------------------------------------------------- 1 | fun () { 2 | cat << EOF 3 | import tasklib 4 | tw = tasklib.TaskWarrior() 5 | result = set(tw.execute_command(["+PROJECT", "+PENDING", "+READY", "-waiting", "_projects"])) 6 | - set(tw.execute_command(["+PENDING", "+next", "_projects"])) 7 | for i in result: 8 | print(i) 9 | EOF 10 | } 11 | 12 | python -c "$(fun)" 13 | -------------------------------------------------------------------------------- /task.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hamlinux/taskwarrior-GTD/3995b6acdc7e2a8503aa09dff7ac035d654ebde0/task.jpg -------------------------------------------------------------------------------- /task_aliases: -------------------------------------------------------------------------------- 1 | #Aliases 2 | 3 | #Taskwarrior Command Aliases 4 | alias t='task' 5 | alias ta='task add' 6 | alias tc='clear & task' 7 | alias tin='clear & task in' 8 | alias dn='tc done' 9 | alias ts='tc sync' 10 | 11 | #Reports Aliases 12 | alias nxt='tc +next list' 13 | alias nnr='tc nnr' 14 | alias sdm='tc +sdm list' 15 | alias ol='tc +@ol' 16 | alias rw='tc +@rw list' 17 | alias lc='tc +@lc' 18 | alias so='tc +@so' 19 | alias store='tc +@store' 20 | alias mh='tc +@mh' 21 | 22 | #Collection 23 | export PS1='$(task +in +PENDING count) '$PS1 24 | alias in='tc add +in' 25 | 26 | #Tickle Folder 27 | tickle () { 28 | deadline=$1 29 | shift 30 | in +tickle wait:$deadline $@ 31 | } 32 | alias tick=tickle 33 | 34 | #Think 35 | alias think='tickle +1d' 36 | 37 | #Processing 38 | alias rnd='task add +rnd +next +@computer +@online' 39 | 40 | webpage_title (){ 41 | wget -qO- "$*" | hxselect -s '\n' -c 'title' 2>/dev/null 42 | } 43 | 44 | read_and_review (){ 45 | link="$1" 46 | title=$(webpage_title $link) 47 | echo $title 48 | descr="\"Read and review: $title\"" 49 | id=$(task add +in +rnr "$descr" | sed -n 's/Created task \(.*\)./\1/p') 50 | task "$id" annotate "$link" 51 | } 52 | 53 | alias rnr=read_and_review 54 | 55 | #Notes 56 | note_ () { 57 | local id="$1" 58 | local dir="$HOME/workflow/projects" 59 | local file="$dir/$id.org" 60 | 61 | mkdir -p $dir 62 | e "$file" 63 | } 64 | 65 | alias n=note_ 66 | 67 | #Project needs next action 68 | 69 | #projects=$(task nna) 70 | #if [ "$projects" != "" ] 71 | #then 72 | # print_colored_text RED "Attention: The following projects don't currently have a next action:\n" 73 | # echo $projects echo 74 | #fi 75 | 76 | #Waiting for 77 | 78 | waiting=$(task waiting count) 79 | if [ "$waiting" != "0" ] 80 | then 81 | echo "Any progress on these waiting-fors?" 82 | task waiting 83 | fi 84 | -------------------------------------------------------------------------------- /task_aliases snippets: -------------------------------------------------------------------------------- 1 | projects=$(projects_without_next_action.sh) 2 | if [ "$projects" != "" ] 3 | then 4 | print_colored_text RED "Attention: The following projects don't currently have a next action:\n" 5 | echo $projects 6 | echo 7 | fi 8 | 9 | - 10 | 11 | waiting=$(task +waiting +PENDING count) 12 | if [ "$waiting" != "0" ] 13 | then 14 | echo "Any progress on these waiting-fors?" 15 | task +waiting +PENDING ls 16 | fi 17 | -------------------------------------------------------------------------------- /taskrc: -------------------------------------------------------------------------------- 1 | # 2 | # [Created by task 2.5.1 3/21/2019 19:09:57] 3 | # Taskwarrior program configuration file. 4 | # For more documentation, see http://taskwarrior.org or try 'man task', 'man task-color', 5 | # 'man task-sync' or 'man taskrc' 6 | 7 | # Here is an example of entries that use the default, override and blank values 8 | # variable=foo -- By specifying a value, this overrides the default 9 | # variable= -- By specifying no value, this means no default 10 | # #variable=foo -- By commenting out the line, or deleting it, this uses the default 11 | 12 | # Use the command 'task show' to see all defaults and overrides 13 | 14 | # Files 15 | data.location=~/.task 16 | 17 | # Color theme (uncomment one to use) 18 | #include /usr/share/taskwarrior/light-16.theme 19 | #include /usr/share/taskwarrior/light-256.theme 20 | #include /usr/share/taskwarrior/dark-16.theme 21 | #include /usr/share/taskwarrior/dark-256.theme 22 | #include /usr/share/taskwarrior/dark-red-256.theme 23 | #include /usr/share/taskwarrior/dark-green-256.theme 24 | #include /usr/share/taskwarrior/dark-blue-256.theme 25 | #include /usr/share/taskwarrior/dark-violets-256.theme 26 | #include /usr/share/taskwarrior/dark-yellow-green.theme 27 | #include /usr/share/taskwarrior/dark-gray-256.theme 28 | #include /usr/share/taskwarrior/dark-gray-blue-256.theme 29 | #include /usr/share/taskwarrior/solarized-dark-256.theme 30 | #include /usr/share/taskwarrior/solarized-light-256.theme 31 | #include /usr/share/taskwarrior/no-color.theme 32 | 33 | #GTD 34 | # 35 | #Collection 36 | report.in.columns = id,description 37 | report.in.description = Inbox 38 | report.in.filter = status:pending limit:page (+in) 39 | report.in.labels = ID,Description 40 | 41 | #Brain Power 42 | 43 | uda.brainpower.type=string 44 | uda.brainpower.label=Brainpower 45 | uda.brainpower.values=H,M,L 46 | uda.brainpower.default=M 47 | 48 | #Reports 49 | 50 | #Next 51 | report.next.description = Most urgent tasks 52 | report.next.columns = id,urgency,depends,priority,project,tags,recur,scheduled.countdown,due.remaining,until.remaining,description,brainpower 53 | report.next.filter = status:pending -sdm 54 | report.next.labels = ID,Urgency,Depends,Priority,Project,Tag,Recur,Scheduled,Due,Until,Description,Brainpower 55 | report.next.sort = project-,brainpower+,priority-,urgency- 56 | 57 | #Someday/Maybe 58 | report.sdm.description = Someday/Maybe 59 | report.sdm.columns = id,urgency,depends,priority,project,tags,recur,scheduled.countdown,due.remaining,until.remaining,description,brainpower 60 | report.sdm.filter = status:pending +sdm 61 | report.sdm.labels = ID,Urgency,Depends,Priority,Project,Tag,Recur,Scheduled,Due,Until,Description,Brainpower 62 | 63 | #No Next action 64 | report.nna.description = No Next Action 65 | report.nna.columns = project 66 | report.nna.filter = +PENDING +READY -next -waiting -sdm 67 | report.nna.labels = Project 68 | 69 | #Estimate 70 | 71 | uda.estimate.type=numeric 72 | uda.estimate.label=Estimate 73 | 74 | context.car=+@car or +@online or +@phone 75 | context.online=+@ol 76 | context.farm=+@farm or +@phone or +@online or +@pc or +@shop 77 | 78 | tasksh.autoclear=1 79 | uda.reviewed.type=date 80 | uda.reviewed.label=Reviewed 81 | report._reviewed.description=Tasksh review report. Adjust the filter to your needs. 82 | report._reviewed.columns=uuid 83 | report._reviewed.sort=reviewed+,modified+ 84 | report._reviewed.filter=( reviewed.none: or reviewed.before:now-6days ) and ( +PENDING or +WAITING ) 85 | --------------------------------------------------------------------------------