# wtd The goal is to manage tasks, events, etc. in plaintext (vimwiki/markdown), then spit out a publicly-viewable version. # basic usage First, create a `wtd.md` file of the following format: ``` # 12/27/21 ## Monday - [X] Some task... @10AM+1h +self - [ ] Another task... @3PM--4:45PM +busy ## Tuesday - [ ] Etc. @9:30AM+30m +busy +public +join-me # 1/2/22 ## Monday - [ ] Group meeting @12PM+1h +busy ``` Top-level headings should be used to indicate weeks, second-level headings days. Tasks/events start with either `- [ ]` or `- [X]`. Times of the form `@S--E` or `@S+D` as well as tags of the form `+tag` are pulled out of the task description automatically. By default, event descriptions are private. Adding the `public` tag prints the event description on the calendar page. Other tags are ignored by default, unless they are mentioned in the `public_tags` hashmap in `src/main.rs`, in which case they are printed out to the public calendar along with a short description. Events on the public calendar can also be styled according to these `public_tags`, see `calendar_style.css`. To generate the HTML calendars, run: ``` $ cargo run html ``` You should now see `public.html` and `private.html` in the current directory. The calendar does not require Javascript and should work very well in, e.g., `w3m`. # advanced usage (WIP) there are a few major annoyances with the basic usage. these include: 1. No serious support for repeating (e.g., weekly) events, so it's easy to accidentally double-schedule over those when scheduling far in the future. 2. Scheduling for the future at all is annoying --- sometimes you want to see things in desc vs asc view. To solve this, `wtd` supports a "week-based" mode. In this mode, `wtd` will search for events in the following locations: - A `wtd.md` file, as above; - A file of the form `mmm_dd_yyyy.md`, which contains no `# Week-Start` headers (they are instead implied by the filename); and - A file of the form `weekly.md`, which contains events that should repeat every week. The `weekly.md` file is only used when the week does not have a corresponding `mmm_dd_yyyy.md` file. The idea is to use `wtd.md` to record events far into the future, `weekly.md` to record recurring evets, then `[week].md` as the 'live' copy that you work off during the week itself. The following binary options are available to make this a bit simpler: - `describe [week]` will print a `wtd`-formatted version corresponding to the week starting on `week`. - `generate [week]` does the same as `describe [week]`, except it prints directly to a file `mmm_dd_yyyy.md` (overwriting if it exists), **and** it removes any blocks from `wtd.md` that are now duplicated in `mmm_dd_yyyy.md`. - `validate` prints any events that overlap each other. #### Rust Warning This is my first time writing a project in Rust; it's very likely there are major issues. Proceed with caution. Feedback appreciated. #### Acks I think the first time I came across the idea of sharing a calendar publicly on the Web was via [Prof. Walker's website](https://www.cs.princeton.edu/~dpw/). I've seen the notion of a large text file with tags to pull out some amount of structure done well in [ledger](https://www.ledger-cli.org/) and [ideaflow](https://www.ideaflow.io/).