Manage tasks and projects on Fedora with Taskwarrior

There are a multitude of applications to manage your todo list. One of these apps is Taskwarrior, it allows you to manage your task in the terminal without a GUI. This article will show you how to get started using it.

What is Taskwarrior?

Taskwarrior is CLI task manager and organizer. It is flexible, fast, and unobtrusive. It does its job then gets out of your way.

Taskwarrior uses $HOME/.taskrc and $HOME/.task to store your settings and tasks respectively.

Getting started with Taskwarrior

It’s easy to use the Taskwarrior to add your daily missions. These are some simple commands. To add tasks:

$ task add buy milk 
Created task 1. 
$ task add buy eggs
 Created task 2. 
$ task add bake cake 
Created task 3.

To list your tasks, you can use the task command on its own for the simplest listing:

$ task 

ID Age Description    Urg
  1 17s buy milk       0
  2 14s buy eggs       0
  3 11s bake cake      0

3 tasks.

To mark a task as complete, use the done keyword:

$ task 1 done
 Completed task 1 'buy milk'.
 Completed 1 task.
$ task 2 done
 Completed task 2 'buy eggs'.
 Completed 1 task.
$ task
 [task next]
 ID Age Description Urg
  1 57s bake cake      0
 1 task

Diving deeper into Taskwarrior

Priority management

Taskwarrior (task) is designed to help prioritize your tasks. To do this, task has multiple implicit and explicit variables it can use to determine an “Urgency” value.

Consider the following list.

$ task
 [task next]
 ID Age  Description    Urg
  1 2min buy eggs          0
  2 2min buy flour         0
  3 2min bake cake         0
  4 2min pay rent          0
  5 3s   install fedora    0
 5 tasks

One could argue that paying your rent and installing Fedora have a higher priority than baking a cake. You can tell task about this by using the pri modifier.

$ task 4 mod pri:H
 Modifying task 4 'pay rent'.
 Modified 1 task.
$ task 5 mod pri:M
 Modifying task 5 'install fedora'.
 Modified 1 task.
$ task
 [task next]
 ID Age  P Description    Urg
  4 4min H pay rent          6
  5 2min M install fedora  3.9
  1 4min   buy eggs          0
  2 4min   buy flour         0
  3 4min   bake cake         0
 5 tasks

Rent is very important, it has a due date that we need to pay it by, such as within 3 days from the 1st of the month. You can tell task this by using the due modifier.

$ task 4 mod due:3rd
 Modifying task 4 'pay rent'.
 Modified 1 task.
$ task
 [task next]
 ID Age   P Due Description    Urg
  4 12min H 2d  pay rent       13.7
  5 10min M     install fedora  3.9
  1 12min       buy eggs          0
  2 12min       buy flour         0
  3 12min       bake cake         0
 5 tasks
$ date
 Sat Feb 29 11:59:29 STD 2020

Because the 3rd of next month is nearby, the urgency value of rent has skyrocketed, and will continue to do so once we have reached and passed the due date.

However, not all tasks need to be done right away. Say for example you don’t want to worry about paying your rent until it is posted on the first of the month. You can tell taskwarrior about this using the wait modifier. (Hint: in the following example, som is short for “start of month,” one of the shortcuts taskwarrior understands.)

$ task 4 mod wait:som
 Modifying task 4 'pay rent'.
 Modified 1 task.
$ task
 [task next]
 ID Age   P Description    Urg
  5 14min M install fedora  3.9
  1 16min   buy eggs          0
  2 16min   buy flour         0
  3 16min   bake cake         0
 4 tasks

You will no longer be able to see the pay rent task until the start of the month. You can view waiting tasks by using task waiting:

$ task waiting
 ID Age   P Wait       Remaining Due        Description
  4 18min H 2020-03-01       11h 2020-03-03 pay rent
 1 task

There are a few other modifiers you can define. Schedule and until will place a “start” date and remove a task after a date respectfully.

You may have tasks that require other tasks to be completed. To add a dependency for other tasks, use the dep modifier:

$ task
 [task next]
 ID Age   P Description    Urg
  5 30min M install fedora  3.9
  1 33min   buy eggs          0
  2 33min   buy flour         0
  3 33min   bake cake         0
 4 tasks
$ task 3 mod dep:1,2
 Modifying task 3 'bake cake'.
 Modified 1 task.
 $ task
 [task next]
 ID Age   Deps P Description    Urg
  1 33min        buy eggs          8
  2 33min        buy flour         8
  5 31min      M install fedora  3.9
  3 33min 1 2    bake cake        -5
 4 tasks

This will modify the priorities of any tasks that is blocking a task. Now buying eggs and flour is more urgent because it is preventing you from performing a task.

Annotations

You can add notes to a task using task <number> annotate:

$ task 3 anno No blueberries  
Annotating task 3 'bake cake'.  
Annotated 1 task. 
$ task  [task next]  
ID Age Deps P Description                 Urg   
1 1h         buy eggs                       8   
2 1h         buy flour                      8   
5 1h       M install fedora               3.9   
3 1h  1 2    bake cake                   -4.2                        2020-02-29 No blueberries  4 tasks

Organizing tasks

Tasks can be assigned to projects and tagged by using the project modifier and adding a tag using the + sign followed by the tag name, such as +problem.

Putting it all together

You can combine everything you learned to create a task in one line with all the required options.

$ task add Write Taskwarrior post \
pri:M due:1m wait:som until:due+2w sche:15th \
project:magazine +taskwarrior +community +linux

 Created task 6.
 The project 'magazine' has changed.  Project 'magazine' is 0% complete (1 task remaining).
$ task 6
 No command specified - assuming 'information'.
 Name          Value
 ID            6
 Description   Write Taskwarrior post
 Status        Waiting
 Project       magazine
 Entered       2020-02-29 13:50:27 (6s)
 Waiting until 2020-03-01 00:00:00
 Scheduled     2020-03-15 00:00:00
 Due           2020-03-30 14:50:27
 Until         2020-04-13 14:50:27
 Last modified 2020-02-29 13:50:27 (6s)
 Tags          taskwarrior community linux
 Virtual tags  SCHEDULED TAGGED UDA UNBLOCKED UNTIL WAITING YEAR LATEST PROJECT PRIORITY
 UUID          27768737-f6a2-4515-af9d-4f58773c76a5
 Urgency        5.3
 Priority      M

Installing Taskwarrior on Fedora

Taskwarrior is available in the default Fedora repository. To install it use this command with sudo:

$ sudo dnf install task

For rpm-ostree based distributions like Fedora Silverblue:

$ sudo rpm-ostree install task 

Tips and tricks

  • Taskwarrior has a hook system, meaning that there are many tools you can plug in, such as bugwarrior!
  • Taskwarrior can connect to a taskserver for server/client setups. (This is left as an exercise for the reader for now.)

Photo by Bogdan Kupriets on Unsplash.

FAQs and Guides Using Software

29 Comments

  1. Guus

    Thanks! Good cli applications are not that easy to find, especially non-system-utility apps. Thank your for showing this one.

  2. as

    Over-engineered and missing the point – what if I have a task made of subtasks, or want to add a huge text as an anchor?
    CLI doesn’t lend itself well for this imo.

    • I would recommend a project manager like for those type of situations. https://www.projectlibre.com/

      Personally, I would create more tasks and apply dependencies on tasks for your subtasks example.

      For the large text anchor, I am not sure what you mean. If you mean Annotations, I would add a reference to my notebook or journal if that text was overly large. but In my personal Task I have some tasks with 5 different annotations, each about 2 sentences long.

  3. Leslie Satenstein

    Task to me is a kiss application. I am a consultant, and I manage myself. It is perfect for my needs.

    Does it handle re-occuring tasks? Currently I use Gnome Calendar for that purpose. I would like to just focus on having one application on my laptop for task management

  4. fs

    Nice to know about this command line tool, I will give it a try. Thanks.

    I guess, in the annotation section, the given example is not well formatted. btw

  5. shashikanth

    how to make cli applications?

  6. WD83

    A great tool that works great to capture those random todos that don’t fit into a larger project gantt chart. As an engineer, I use taskwarrior to track my action items for specific projects, especially those that don’t have a public bug-tracking site (eg, PCB designs in KiCad), or to track issues I don’t want released publicly (needed phone calls, meeting actions, etc).

    You can change taskwarrior’s working directory by setting the TASKDATA environmental variable. In my bashrc file, I’ve added the following line:

    alias ptask=’TASKDATA=$(git rev-parse –show-toplevel)/task task’

    Now when I run the command ptask (for project task), it creates and works in a folder “task” at the top level of whichever git repository I happen to be in. Add the task folder to my .gitignore folder, and voila!

  7. baoboa

    Work well on gnome desktop with taskwhisperer

    https://extensions.gnome.org/extension/1039/taskwhisperer/

  8. evgeniusx

    Taskwarrior very good application.
    P.S.
    Homeland Mother! Nice)).

  9. reyge

    No localisation for my language
    ;(
    not for me

  10. This is great, until my wife discovers it 😉 Thanks!

  11. why?

    Would you use nazis symbols in your article? If not, why are you using this soviet symbol?
    I understand that other nations are not so loud in US as jews, but soviets occupied multiple countries, killed, imprisoned or deported everyone who were against being occupied and ruled by alcoholics from russia.

    • stan

      “alcoholics from Russia”, nice racism there. I hope your comment gets deleted if the mods have any backbone here.

      • aten

        “russian” is not a race, but nationality, therefore the term you’re looking for is probably “chauvinism”. Assuming previous coment is left by someone from one of the countries of xUSSR, where people have rather solid reasons to talk that way about soviets. 🤷🏻‍♂️

    • Stalin

      Oh, please! They had their own alcoholics.

  12. Maci

    #Covid19 How download all packages source fedora and binary.
    I need all packages localy offline if the internet dont work

  13. David

    Why is the emblem of the Soviet Union on that statute’s shield? I’m just curious.

    • aten

      It’s a giant statue in Kyiv, Ukraine, dedicated to the soviet victory in WWII, so naturally it’s got a soviet coat of arms on its shield.

      https://en.wikipedia.org/wiki/Motherland_Monument

      Because the parliament of Ukraine outlawed Soviet and Communist symbols back in 2015, that soviet emblem should have been peeled off from that statue’s shield, but at the moment they just occasionally cover it with a giant flag of Ukraine.

      I really don’t know why they decided to use it for this article for Taskwarrior. Kinda poor choice, if you ask me.

      I have no opinion on the software tho.

    • Anarchean

      It’s the motherland monument in Kyiv. As much as I’d like to think otherwise, the author probably didn’t even notice, just googled, or better yet, duckduckgoed “warrior” (with the right license restrictions, I think they have to use CC) and ended up with that image.

    • e3

      You’re right. People don’t understand how criminal the communist system was

  14. David

    Honestly I don’t get it, this is the type of functionality that is best delivered via a graphical app. It is sort of like trying to use a command line text editor in a generation where graphical editors are dime a dozen.

    • Earl Ramirez

      It’s a personal preference, I rather CLI for anything even though there are beautiful UI, I still use VIM for writing code and documentation with LaTeX.

    • aten

      If you are unlucky to have only one hand, with only one finger on it, and even that one is permanently attached to a mouse, then any functionality for you “is best delivered via a graphical app”. Software “generation” has nothing to do with it

    • Matthew Bunt

      One of the strengths of the Linux ecosystem is that there are many tools available that suite the needs of how people work. A graphical task manager may be best for you, but it doesn’t mean that its best for everyone. Best is subjective and context dependent. Many people like using the command line and vim or emacs may be the best text editor available for them. Just like many people prefer graphical applications and they may love VSCode. Neither is wrong and both are using the best tools for their work.

  15. Artem

    Fedora is a supporter of communism?

    • No, this was a statue of a warrior that came up in a freely licensed image search, and the symbol didn’t register. Thanks for pointing it out politely, and we will be careful to examine the images more closely in the future.

Comments are Closed

The opinions expressed on this website are those of each author, not of the author's employer or of Red Hat. Fedora Magazine aspires to publish all content under a Creative Commons license but may not be able to do so in all cases. You are responsible for ensuring that you have the necessary permission to reuse any work on this site. The Fedora logo is a trademark of Red Hat, Inc. Terms and Conditions