| Crates.io | girvel_looper |
| lib.rs | girvel_looper |
| version | 1.0.4 |
| created_at | 2024-12-19 20:45:48.110666+00 |
| updated_at | 2025-02-27 10:12:20.911315+00 |
| description | personal task manager for reoccuring tasks |
| homepage | |
| repository | https://github.com/girvel/looper |
| max_upload_size | |
| id | 1489548 |
| size | 28,132 |
looper is a personal task manager for reoccuring tasks, aiming to be as minimal & undercomplicated as possible. Basically a single TOML schedule (with TOML itself doing most of the heavy lifting) and small CLI frontend. looper has these goals:
Displaying the schedule:
looper show
[5] 20-Dec-2024
#0f [today] advance alchemic knowledge
#00 [duty] journal tribe movements
#05 clean the staples
#0d wash my pants
#0c buy ritual paint (3), rags (3)
Upcoming:
#0a [today] practice swordcraft @20-Dec-2024 03:00
#06 clean the dungeon @22-Dec-2024
#04 send anonymous prank letters to the King @01-Jan-2025
#0b hunt @01-Jan-2025
#02 [!] change oil in lamps @03-Jan-2025
#07 sell toenails @15-Mar-2025
#09 [duty] fight hornets @15-Mar-2025
#08 buy sausages (1000 lb) @15-Mar-2025
#03 [!] feed the platypus bear @01-Apr-2025
Completing tasks:
looper done 1d 0e 0c
cargo install girvel_looper
Schedule is set in single TOML file. Use looper path schedule to get the path. The sections are cron expression strings, defining frequency of the following routines; each key-value pair is a single routine: the key is a globally unique ID (any string that would be comfortable to use; I prefer two-digit hexadecimal numbers), the value is a full description.
# today
["0 0 3 * * * *"]
0a = "[today] practice swordcraft"
0f = "[today] advance alchemic knowledge"
# sunday
["0 0 3 * * Sun *"]
00 = "[duty] journal tribe movements"
06 = "clean the dungeon"
See example. Note that state.toml is an autogenerated file.
looper show to show the upcoming routineslooper done ... to mark tasks as finished (even in advance)vi $(looper path state) and removing the entry with needed ID; it is a rare situation, so I deliberately chose not to add another CLI command to keep simplicityalias lp='looper'
alias lpe='e $(looper path schedule)'
function lps() {
old_path=$(pwd)
cd; cd dotfiles_private
git add && git commit -m "#" && git push
cd $old_path
}