summaryrefslogtreecommitdiff
path: root/README.md
blob: 942577b8f906e0346b4d52ee3ed9e1640ba6447e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# 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/).
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback