In the past, I have found it hard to keep track of all the things that I need to get done, and when I need to get them done. I tried keeping a todo list in my note taking app. Since I needed to open up an app in order to check it, I did not update it often, and checked it even less.
Eventually, I decided that I should just write my own lightweight and purpose-built todo list program. I decided to write a CLI tool for the simplicity, potential for future automation and the ease of integration into my current desktop setup.
Because I keep each of my projects in its own folder I decided that it made sense to design the todo list to look for items across the file system. My tool looks for .todo files, each of which contains a tree of items. By default, the tool searches up through the file system, so it only shows the lists that are relevant to the directory that you are currently in.
Another feature of my todo list are its priority and date systems. Each item in the list has a priority which determines the order in which the items are displayed. Additionally, you can specify a due-date for the item. As the due date approaches, its priority will gradually increase, making sure that you see items that you need to do first at the top. I wanted the system to be able to parse a variety of different date formats and relative dates. You can set due dates to things like tomorrow, 12 jan, 4/8, march, 2027, in 3 weeks, and it will understand what you mean and put in the correct date.
I am currently working on a text user interface (TUI) for the program to make editing items easier.
The program is written in Rust. It uses the CLAP library for command line argument parsing, Chrono for handling dates (though not parsing the user input), and Ratatui for drawing the TUI.
I really enjoyed making this project, and I’ve also found it incredibly useful. I have a Waybar panel that allows me to view my todo list with a single hotkey, and I use the list to organize everything from personal projects to school work. Because I now check it regularly, it has served as a very good way to prevent deadlines from sneaking up on me.