# wellington Wellington is a lightweight static blog generator written in Rust. You can see it in action at https://emanuelgeromin.com/blog/ Wellington allows you to write blog posts in markdown and then automatically - renders them as HTML - updates the table of contents - updates the RSS feed. From the root directory of your website, create a new blog: ```bash mkdir my-amazing-blog cd my-amazing-blog wellington init --title "My Blog" \ --home_url "https://mysite.com \ --desc "My blog about clogs" \ --author "It's Me" ``` Then write a blog post: ```bash mkdir post-1 touch post-1/index.md # edit this file wellington sync ``` This last command, `wellington sync`, automatically - renders the post as HTML at post-1/index.html - creates/updates the table of contents at index.html - creates/updates the rss feed at rss.xml ## Installation Installation is via cargo: ```bash cargo install wellington ``` ## Markdown with Footnotes/Sidenotes Wellington supports an extended markdown syntax. In addition to the usual markdown, you can also mark footnotes/sidenotes directly in the HTML using curly braces: ```markdown # Here is an article Here is some text with sidenotes/footnotes{this text will render as a footnote/sidenote} ``` **Sidenotes** are like footnotes except that they display to the right of the article instead of the bottom. See [this blogpost](https://emanuelgeromin.com/blog/intro-reinforcement-learning-tic-tac-toe/) as an example. To work, they require proper CSS. See the 'CSS' section below. ## Why Wellington There are plenty of blogging engines out there, many designed for use with static hosting services like GitHub pages. One great example is [Jekyll](https://jekyllrb.com/). I wrote wellington because I wanted support for sidenotes and require only a very simple set of features. ## Relative links Relative links in the post markdown files are automatically changed to point to the directory they're in. So for example, if `my-amazing-blog/post-1/index.md` contains the following: ```markdown ![an image](image.png) ``` Then this is rendered as: ```html ``` This makes embedding images in the blog post easier. ## CSS Wellington's sidenotes were designed for use with [tufte-css](https://github.com/edwardtufte/tufte-css). I use a modified version on [my blog](https://emanuelgeromin.com/blog/tufte.css). This modified version is more mobile friendly and on narrow screens, instead of displaying sidenotes, displays footnotes. You're very welcome to copy my CSS. Alternatively, as a more minimal solution, you can just hide the sidenotes if you don't require them and render only the footnotes: ```css .sidenote { display: none; } ``` To display the blog posts in a mobile friendly way, by using sidenotes for desktop and footnotes for mobile, as I've done, please check the [modified version of tufte-css](https://emanuelgeromin.com/blog/tufte.css). ## Templates To render the posts and the table of contents, wellington uses [Handlebars](https://github.com/sunng87/handlebars-rust), a templating engine. This allows for customisability of the posts and of the table of contents. There are default templates in the source code in the `templates` directory. These are used by default and do not require installation. To override them, provide your own templates in your blog home directory: - `.index_template.html` for the table of contents - `.post_template.html` for the posts Take a look at the default templates and adapt them to suit your needs! ## MathJax (Latex) support Using mathjax (latex) in the blog posts requires a hack. To prevent the latex to be rendered by the markdown parser, it has to be marked as code in markdown, for example ```markdown # a markdown file Here is some text with an equation: `\(E = mc^2\)` ``` By default, mathjax does not render anything wrapped in `
`
or `` tags. To override this behaviour, 
in addition to the `
```

This overrides the default `skipTags`, allowing also latex in `
` and
`` tags to be rendered.

If you require both rendered latex and latex code in your blog posts, then
unfortunately at the moment you're out of luck. A more long term solution would
be to parse latex properly in the markdown document. However, this is a more
long term project as it requires modifying `pulldown-cmark`, the library I use
for rendering markdown. Contributions are welcome!


## Known Bugs

- Footnotes are not rendered properly as all inline markdown formatting is lost
  (#3)


## Roadmap

There is still much to do. The current codebase grew organically without much
advance planning. This shows: the codebase is quite messy and in need of a
refactor!

Feature wise, soon I hope to support 

- syntax highlighting (#1)
- make the template variables `post_url` and `index_url` available in the
  markdown as well (#5). This is useful when embedding external code or demos in the
  blog post.