Journey into rust with books CLI tools

Posted on Mon 24 March 2025 in posts

Introduction

For a long while I have been a fan of replacing my macOS tooling with similar programs implemented in Rust. This is mostly due to the novelty and promise of speed that every developer adds to their Rust implementation.

The I realized that on the wave of so many new cool packages appearing re-written in this new language (at the time), maybe I should try to write something in it too?

Rust-based tools in question

Here are rust based tools I use in no particular order:

  • ruff - a great Python formatter, and linter. For LSP I use pyright!
  • uv - a must have for any Python developer, you'll never look back to any other package manager.
  • eza - a cool replacement for ls command.
  • bat - similarly cool replacement for the cat(1).
  • ripgrep - a grep tool, search things quickly.
  • zoxide - a great substitute for cd, I particularly like its partial matching (e.g. you don't need to enter full path).
  • starship - a cool customizable zsh prompt.
  • zellij - a tmux replacement.

Why Rust?

Other than reasons above? I think it's because I like learning new things especially when the thing I am about to learn was used to produce so many exciting programs I already take advantage of daily.

So what did I end up doing to start learning Rust?

I started by reading through The Book, the main Rust reference text. I found that for me it was not very useful at least now since it explained concepts I kind of understood as a transferred skill form my experience writing in C.

I had some interesting projects in grad school that involved C programming. I got inspired to write more C code by tsoding and his cool implementations of things, coding streams, and expertise worth aspiring to.

Going back to C via the learning-by-doing approach, I sought the same for Rust. I found Rust In Action, and I am still working through the book. It's great, hands on, and lets you play around with code and gives opportunity to enhance it.

The Task List Tool

I like to-do lists. I write them for work on paper, I've use various apps over the years to create such lists too.

I decided to try Rust in writing my own little clone of taskwarrior. I called it tasklist.

Help page of the tool

What The Tool Does Now

The tasklist codebase lives in a dedicated GitHub repo. The program is incomplete, but given my schedule right now, I decided to post about it in its current stage and not wait for some perfection.

Its capabilities are simple. You can add a task which automatically puts it into a to-do directory. You can update some aspects of the task (its status to become in-progress, or its description). You can delete a task. And you can show all your tasks.

This last part is what I think I like most. I do enjoy boards. When tasks are listed on the board, in my mind they present an easy to follow structure. So I decided to add a Kanban-like view to my app.

board

Additional cool item is that the app automatically detects when the task is in the current project file or otherwise is a global task.

What Remains to Be Done

Here is a list of items I need to work on in no particular order.

  1. The search for .tasklist file needs to be debugged. I experience some issues with error reporting when the task file is not initialized.
  2. I think the board view could be tweaked more.
  3. Would be cool to add a TUI
  4. Would also be cool to add project name to the calling sequence

The list is probably bigger but these items are the only ones so far that come to mind.

Hopefully in the future I will have more time to polish this work!


Thank you for reading!