Toast-It

- PLATFORM CLI Application
- STACK
- java, scheme, sqlite
- GITHUB https://github.com/dhickel/toast-it
What is Toast-It
Toast it is a simple terminal based “life” manager for lack of better wording. It is a lame pun on post-it as I was getting fed up with having post-its all over the place, and their effectiveness lacking. Toast it aims to provide a single, simple interface to access/store things like notes, project statuses, events and appointments. While there are many solutions for this, they all require clicking through multiple menus, and having multiple locations to access and set things. This gave me the idea that since I already use a drop-down terminal in my day-to-day computer use, it makes a lot of sense for me personally to have it also be a single, key-press away place to store things.
Overtime this developed into a more complex project with some scope creep as I also was messing around with kawa a jvm scheme implementation and had some experience with implementing it into projects, that it made sense to implement it into the project as a “DSL” to configure table layouts and display logic, as ascii tables are used as part of the interface.
Configuration
Configuration is handled via scheme scripts, which allows for easy customization of existing dashboards and the ability to add new tables and displays. An example of this can be seen in the pool table at the top right of the image above. This is added via the code below which which adds a table that is refreshed from a timed api called via scheme alone. The code that makes and caches the api data is initiated in an init.sch file and polls the api via a scheduled task.
(define dash-view-supplier
(KSupplier[JString]
(lambda ()
(let* ((todo-table (TableUtil:generateTable
(((App:instance):getTodoManager):getAllItems) dash-todo-table))
(event-table (TableUtil:generateTableWithHeader
"Upcoming Events" (((App:instance):getEventManager):getFutureEvents) dash-event-table))
(project-table (TableUtil:generateTableWithHeader
"Active Projects" (((App:instance):getProjectManager):getActiveProjects) dash-project-table))
(task-table (TableUtil:generateTableWithHeader
"Active Tasks" (((App:instance):getTaskManager):getActiveTasks) dash-task-table))
;; Pool table added here
(pool-table (sf-get-table sf-pool-info))
(row1 (TableUtil:mergeAndPadTable 1 todo-table event-table dash-calendar pool-table))
(row2 (TableUtil:mergeAndPadTable 1 project-table task-table)))
(JString (string-append row1 "\n" row2))))))