diff --git a/home/packages-cli.nix b/home/packages-cli.nix index 37e34d8..c255d36 100644 --- a/home/packages-cli.nix +++ b/home/packages-cli.nix @@ -7,6 +7,7 @@ ./liquidprompt.nix ./neovim.nix ./newsboat.nix + ./taskwarrior.nix ./tmux.nix ./vifm.nix ]; @@ -50,8 +51,6 @@ sqlite syncthing tailscale - tasksh - taskwarrior tig timewarrior tmux-cssh @@ -62,7 +61,6 @@ unzip urlview vdirsyncer - vit wget zip ]; diff --git a/home/taskwarrior.nix b/home/taskwarrior.nix new file mode 100644 index 0000000..03e98c1 --- /dev/null +++ b/home/taskwarrior.nix @@ -0,0 +1,199 @@ +{ config, pkgs, ... }: +{ + home.packages = with pkgs; [ taskwarrior tasksh vit ]; + programs.taskwarrior = { + enable = true; + colorTheme = "dark-green-256"; + dataLocation = "~/.task"; + config = { + weekstart = "Monday"; + burndown = { + cumulative = 0; + }; + journal = { + info = "no"; + time = "yes"; + }; + default = { + project = "inbox"; + command = "nnext"; + width = 140; + }; + alias = { + burn = "burndown"; + cal = "calendar"; + copy = "duplicate"; + cp = "duplicate"; + tom = "tomorrow"; + }; + report = { + _reviewed = { + columns = "uuid"; + description = "Tasksh review report. Adjust the filter to your needs."; + filter = "( reviewed.none: or reviewed.before:now-4weeks ) and ( +PENDING or +WAITING ) and -someday and project.not:books"; + sort = "reviewed+,modified+"; + }; + mine = { + columns = "description.count,id"; + description = "strip"; + filter = "-COMPLETED -DELETED -PARENT"; + labels = "desc,ID"; + sort = "description "; + }; + next.filter = " status:pending limit:page -BLOCKED -someday -WAITING"; + inbox = { + columns = " id,start.age,entry.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + description = "list inbox items"; + filter = " status:pending limit:10 -BLOCKED -someday -WAITING proj:inbox"; + labels = " ID,Active,Age,Deps,P,Project,Tag,Recur,S,Due,Until,Description,Urg"; + sort = " urgency-"; + context = " 0"; + }; + waiting = { + columns = " id,start.age,entry.age,depends,priority,project,tags,recur,wait,due,until.remaining,description,urgency"; + description = "Waiting"; + filter = " status.not:deleted status.not:completed -BLOCKED -someday +WAITING"; + labels = " ID,Active,Age,Deps,P,Project,Tag,Recur,Wait til,Due,Until,Description,Urg"; + sort = " wait"; + }; + nnext = { + columns = " id,start.age,entry.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + description = "Next 10 list"; + filter = " status:pending limit:10 -BLOCKED -someday -WAITING"; + labels = " ID,Active,Age,Deps,P,Project,Tag,Recur,S,Due,Until,Description,Urg"; + sort = " urgency-"; + }; + title = { + columns = " id,project,description.count"; + description = "title only, please"; + filter = " status:pending limit:10 "; + #filter = " status:pending limit:10 -BLOCKED -WAITING"; + labels = " ID,Project,Description"; + sort = " description+"; + }; + anext = { + columns = " id,start.age,entry.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + description = "Next 10 list"; + filter = " status:pending limit:10 -BLOCKED -WAITING"; + labels = " ID,Active,Age,Deps,P,Project,Tag,Recur,S,Due,Until,Description,Urg"; + sort = " urgency-"; + }; + last = { + columns = " id,start.age,entry.age,depends,priority,project,tags,recur,scheduled.countdown,due.relative,until.remaining,description,urgency"; + description = "Oldest 10 list"; + filter = " status:pending limit:10 -BLOCKED -someday -WAITING"; + labels = " ID,Active,Age,Deps,P,Project,Tag,Recur,S,Due,Until,Description,Urg"; + sort = " entry+"; + }; + inboxdash = { + columns = " id,project,description.count"; + description = "Inbox for dashboards"; + filter = " status:pending limit:10 -BLOCKED -someday -WAITING proj:inbox"; + labels = " ID,Project,Description"; + sort = " urgency-"; + }; + dash = { + columns = " id,project,description.count"; + description = "For dashboards"; + filter = " status:pending limit:10 -BLOCKED -someday -WAITING"; + labels = " ID,Project,Description"; + sort = " urgency-"; + }; + mail = { + columns = " id,priority,project,due.relative,until.remaining,description.count,urgency"; + description = "Next 5 list"; + filter = " status:pending limit:5 -BLOCKED -someday -WAITING"; + labels = " ID,P,Project,Due,Until,Description,Urg"; + sort = " urgency-"; + }; + followup = { + columns = " id,start.age,entry.age,priority,project,description"; + description = "Someday list"; + filter = " status.not:completed status.not:deleted -BLOCKED +followup"; + labels = " ID,Active,Age,P,Project,Description"; + sort = " project,urgency-"; + context = " 0"; + }; + someday = { + columns = " id,start.age,entry.age,priority,project,description,urgency"; + description = "Someday list"; + filter = " status:pending -BLOCKED +someday limit:page -WAITING"; + labels = " ID,Active,Age,P,Project,Description,Urg"; + sort = " project,urgency-"; + context = " 0"; + }; + }; + + taskd = { + ca = "/home/don/.task/ca.cert.pem"; + certificate = "/home/don/.task/don_harper.cert.pem"; + credentials = "duckland.org/Don Harper/de27c234-6217-4e8b-83c1-2ea840bac55f"; + key = "/home/don/.task/don_harper.key.pem"; + server = "task.duckland.org:53589"; + recurrence = "on"; + }; + + uda = { + priority = { + label = "Priority"; + type = "string"; + values = "H,M,,L"; + }; + reviewed = { + label = "Reviewed"; + type = "date"; + }; + notes = { + type = "string"; + label = "Notes"; + }; + blocks = { + type = "string"; + label = "Blocks"; + }; + }; + + urgency = { + blocking.coefficient = 2; + uda = { + recur.coefficient = 4; + priority = { + H.coefficient = 5; + L.coefficient = -0.5; + M.coefficient = 3.9; + }; + }; + user = { + project = { + blogging.coefficient = 3; + books.coefficient = -0.5; + family.coefficient = 5; + fashion.coefficient = -0.5; + job.coefficient = 7; + photo.coefficient = 4; + selfhosted.fix.coefficient = 2; + }; + tag = { + next.coefficient = 1; + GTD.coefficient = 5; + }; + }; + }; + context = { + selfhost = "project:selfhosted"; + gtd.read = "+GTD"; + gtd.write = "+GTD"; + job.read = "proj:job"; + job.write = "proj:job"; + selfhosted.read = "proj:selfhosted"; + selfhosted.write = "proj:selfhosted"; + work.read = "proj:work"; + work.write = "proj:work"; + review.read = "-someday -WAITING project.not:books"; + review.write = "-someday -WAITING project.not:books"; + }; + color.project.weekly-review = "on rgb510"; + news.version = "2.6.0"; + }; + }; +}