While I enjoy graphical user interfaces and use that every day - much of the time I still spend with the command-line. It can be development tasks, troubleshooting, trying out various things - I do a large portion via the command line.
In this issue, I want to include a few tips on command-line tools that I have found to be quite useful. They are all open source, so you can try them out for a bit - you only will commit a bit of time for it.
The first command-line tool I am covering in this issue is TaskWarrior. I find it an amazingly versatile to-do-list type of tool.
In the past, I have used GUI tools like Todoist for many years. I have also tried to use plugins in Obsidian to organise my tasks as well. I also have to deal with Jira boards for various customers, as well as GitHub issues.
I discovered TaskWarrior through a YouTube video that discussed making a user interface for the program. I got curious about what TaskWarrior was all about, and investigated.
The idea of a to-do-list tool on the command-line intrigued me, and I installed it (
brew install task) and tried it out. It is easy to get started with the basics of adding and completing tasks. Digging further into the documentation, I found it was quite rich in features.
TaskWarrior can handle simple tasks, recurring tasks, and tasks that should only appear after a certain time. It handles due dates; it handles dependencies between tasks. You can set priorities on tasks. You can annotate tasks with extra notes, and these are automatically time-stamped.
Projects can have associated tasks, and we can create a hierarchical structure. You can tag task with tags of your choice, and you have extensive filtering and reporting capabilities. You can define different contexts, so that you, for example, only see work-related tasks if you have a context defined for work.
TaskWarrior arranges tasks in an “urgency order” using information like priority, age, and due dates that you provide. You can also adjust the weights that are used to perform the urgency calculations.
As it has all these capabilities, it has a relatively simple interface and you can just use some bare basics. As any command-line tool, you can create scripts and aliases to help you perform more complex tasks or reduce typing.
I am a fan of the Getting Things Done (GTD) method, and I found this to work out well with TaskWarrior. For multi-step tasks, I use projects to keep the steps together. I can use dependencies to set which order they should be done, and I can use the wait feature to hide tasks until some future date/time.
By default, TaskWarrior sorts the tasks by urgency and shows the ones that can be performed next, and I rarely find it necessary to change their priority.
I can use the tagging feature to add extra information such as location, if there is a need. So far I think it works better than any other to-do-list tool I have used.
It is a very versatile tool, and also quite accessible.
There is also plugin and hook mechanism, which allows to extend the features of TaskWarrior. There is a list of various tools on the website, but I want to mention two of them which I think are quite nice: taskopen and bugwarrior, see below.
I can also include some YouTube videos here, which I found quite useful to get an idea of what you can do with TaskWarrior and how to use it:
- Manage all your tasks with TaskWarrior - Paul Fenwick | Craft 2018
- TaskWarrior is THE task management system you need
- A Dive into Taskwarrior Ecosystem with Tomas Babej
Taskopen is a simple and useful tool. If you add an annotation with a URL or a file path in it, you can reference the task with taskopen, and it will open the URL or file for you. You can also add a “Notes” entry in an annotation, and taskopen will open a text editor to put in more long-form text. I keep these notes in my Obsidian writing vault along with other notes, and I can also add references/links there.
Taskopen is written in nim, and you need to check out the GitHub repository and run the build script to get the executable. Plus, you need to install nim.
If you want to integrate TaskWarrior with other task tracking systems, chances are that bugwarrior is what you need. It supports various applications like Trello, Jira, Bitbucket, GitHub, GitLab, etc. Also, it integrates with Gmail.
So far I have used it to integrate with Jira, and can run bugwarrior-pull to sync the Jira issues with my task warrior tasks. It works well. They include the comment history from the Jira issues as annotations in the TaskWarrior tasks.
The integration is one-way though, so if I complete the task in TaskWarrior, it will not automatically be completed in Jira. It is still much better than to need to jump around in multiple systems just to check what tasks are there.
Bugwarrior is written in Python, so you need to have Python installed in your environment to use it.
All that task management sounds great you may say, but what about tracking the time I spend on these tasks?
Glad you asked!
TimeWarrior is a companion tool to TaskWarrior, which is developed by the same group of people. It focuses on being a quite nice tool for time tracking, and it can integrate with TaskWarrior - if you add a hook, any task you work on in TaskWarrior will automatically be tracked in TimeWarrior.
TimeWarrior has a quite simple user interface as well, and in its simplest form you just start and stop time tracking. You can add tags to each time interval tracked to categorize time in any way you want.
You can add missed time periods and edit times later.
You can adjust time periods absolutely or relatively, split or merge them, and remove them. You can track your time by setting specific periods, and the timer will skip non-working hours, weekends, and holidays if you configure that.
It also has nice filtering and reporting capabilities.
In the past, I used Toggl Track to track my time, and it worked well - but it was a GUI, and did not integrate with the systems I had to put in the time into. I still transfer the time manually right now, but the time summary and entries to copy have become simpler for me with TimeWarrior.
TimeWarrior is still relatively new for me, but it has been working well so far.
I have mentioned Git branchless in a previous issue of the newsletter, and it is something I have used more extensively in the past month.
As the name implies, it is a set of extensions to regular git which try to make trunk-based development nicer, and avoid feature branching and pull request type workflows. It does not stop you from using branches, but it allows you more freedom to work in parallel with stacks of associated commits. It allows for more experimentation, and better safety nets from messing up your main branch.
The git branchless tools took more effort to work with than I thought. The documentation could have been better in explaining good practices. Straightforward at the concept level, sometimes harder when you get into the nitty-gritty details.
However, I am happy to have started down this path, and now I run a
git branchless init on most of the repositories I work on.
You can find older newsletters and more at Tidy Cloud AWS. You will also find other useful articles around AWS automation and infrastructure-as-software.
Until next time,