+```
+blog --publish <bucket>
+```
+
+You can also publish the archive of posts as a gemlog, by passing a valid
+rsync target
+
+```
+blog --publish-archive <rsync_target>
+```
+
+Blog supports saving snapshots of the blog in git, and you can add and remove
+remotes with the following commands:
+
+```
+blog --add-remote <git_url>
+blog --remove-remote
+```
+
+If a remote is present, it will be pulled before adding or updating, and pushed
+after it finishes. You can manually trigger this by calling
+
+```
+blog --sync-up
+blog --sync-down
+```
+
+## Configuring
+
+### Overriding Number of Posts
+
+Updating the `BLOG_MAX_POSTS` environment variable sets the number of posts
+that will be kept.
+
+### Overriding Configuration Directory
+
+You can set the `BLOG_CONFIG_DIRECTORY` to any directory you want. This
+defaults to `$XDG_CONFIG_HOME/blog/` and is used to store the blog remote
+config, static files, and template
+
+The tool will expect a `feed.xml`, `index.html`, and `index.txt` files in the
+`templates` directory inside the config directory. If they're not found it will
+default to the included tepmlates.
+
+These templates are then parsed with [dot][dot] and exposes the following
+variables:
+
+```
+it.posts: <Array[Post]>
+
+Post
+ +id: String // The numerical timestamp when the blog post was added.
+ +createdOn: String // The UTC String of post creation date. (only feed.xml)
+ +title: String // The title of the post. (only feed.xml)
+ +raw: String // The raw gemini text of the template.
+ +html: String // The parsed html generated from the gemini.
+```
+
+### Overriding the location of posts.
+
+Setting `BLOG_DATA_DIRECTORY` will update where the posts and archive are saved
+when added. The default is the `$XDG_DATA_HOME/blog`.
+
+### Overriding the location of generated files.
+
+Setting `BLOG_OUTPUT_DIRECTORY` will update where generated files are placed.
+
+The default is `$XDG_CACHE_HOME/blog`.
+
+This directory should also contain files referenced in the templates, like
+`css`, `js` or `images`.