Helper to keep me on track with self-care through my day
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Milo Fultz 0f5f63f203 Strike out completed todo 3 weeks ago
.bonzo Use bonzo file, add skip count 5 months ago
.gitignore Initial commit 5 months ago
Makefile Use curses for display 5 months ago
README.md Strike out completed todo 3 weeks ago
bonzo.c Small refactor of code in queueing 3 weeks ago
bonzo.h Properly parse start time from bonzo file 3 weeks ago
plan.md Add roadmap 4 months ago

README.md

Bonzo Buddy ✍(◔◡◔)

I'm just trying to rip off nowify.

What It Does

Bonzo prompts you at various points in your day with routines, tasks, and check-ins to help keep you healthy and sane. Using a gentle sound from sox, it shows you the task and asks if you have done it yet, if it idn't done yet, or if you want to skip it.

Usage

Once you've created your .bonzo file, you can run Bonzo Buddy by running the makefile on your machine (make) and then running ./bonzo. If you want to use different lists, you can add each one as an argument following the initial ./bonzo call. e.g. ./bonzo work @home will show tasks from always, work, and @home.

Spec

.bonzo File

Make .bonzo file in your HOME directory.

Each list is delimited by three equals preceding and succeeding the list name, e.g. ===work===. The list ===always=== is a reserved list that will always be invoked. Each task must be part of a list. If you always want everything to be run, they must go inside of the ===always=== list.

Each task is on a separate line. On each line, the following parameters are separated by a tab:

  • Task name: prefaced by a ! if "priority" or !! if "starting".
  • Regularity: minutes after completion for task to show up again. Use 0 if not a recurring task.
  • Starting time: 24-hour time of when the task will be first run, written as HHMM.

Empty lines are ignored.

Example

An example .bonzo file:

===always===
!Drink a glass of water <tab> 120
Take a deep breath <tab> 60

===@home===
Brush your teeth <tab> <tab> 1300

===work===
!!Get to inbox zero
Complete TPS report <tab> 15 <tab> 1530
  • The tasks in the always list will always run.
    • "Drink a glass of water" is a priority task that will repeat every 2 hours
    • "Take a deep breath" is a normal task that will repeat every hour
  • The tasks in the @home list will only run if that list name is specified.
    • "Brush your teeth" is a normal task that will first run at 1300 hours and will go away once it is marked "done"
  • The tasks in the work list will only run if that list name is specified.
    • "Get to inbox zero" is a starting task that will go away once it is marked as "done"
    • "Complete TPS report" is a normal task that will first run at 1530 and then repeat every 15 minutes

Task Types and Recurrence/Delay Behavior

There are three task types:

  • Normal - These tasks will be prompted normally.
  • Priority (! prefix) - These tasks will be prompted normally with different recurrence/delay behavior.
  • Starting (!! prefix) - These tasks will be prompted on application start and share Priority recurrence and delay behavior.
Task Type Option Delay
Starting/Priority Done Repeat after N minutes of "regularity" or never if regularity is 0
" Not Done 10 minutes
" Skip Prompt again after N minutes of "regularity" or 10 minutes if regularity is 0
Normal Done Repeat after N minutes of "regularity" or never if regularity is 0
" Not Done 40 minutes
" Skip Prompt again after N minutes of "regularity" or 40 minutes if regularity is 0
All Wait Delay for time specified by user in minutes (e.g. 120 will wait for 2 hours)

Roadmap

  • Keep a log of activity as the session continues. Timestamps in a logfile would work.
  • Make animation on the "running" line
  • Make one-time task for review and update your todo list.
  • Multiple lists that can be invoked via command line. A default which is none, others by name, and maybe an 'all' which go into every list.
  • Add a "wait" or "pause" option to say to try again in X minutes. Still think maybe an initial delay might be even better, but whatever.
  • Start time. I want to have something only start prompting after a certain time of day. Maybe a third value signifying hour of day in 24 hour time? (Note: I added "starting tasks" so now I can ensure things prompt on startup, that's good!)
  • Organize the file better. Make it more logical in it's progression. Separate functions. Update 20220415: Partly done. Still a bit to do.
  • Keep track between instances? e.g. could stop and start it and it would save all data for the day of what has been done or not
    • if first line matches current strftime, continue appending
    • else, open for writing (make clean slate)
  • Break for work pomodoros using threads? Maybe as an exercise to figure out threading, but I don't know. If I did this, I would probably also want to implement a time spreader for when tasks back up, so they don't just keep piling up at the same time.
  • Add a test suite. Would love to implement TDD with this, never done it in C. (http://eradman.com/posts/tdd-in-c.html)