:Author: Luis Osa :Date: Sun Nov 8 22:04:59 2020 :tags: meta ========== Blog Setup ========== Summary ------- I have just started to rewrite my blog using `Sphinx `_ and its extension `Ablog `_. As an extra, I have setup a part of the blog as a Zettelkasten -- which is more or less a glorified wiki --, and also I have configured Emacs to write posts in Org mode and export them to Restructured Text, which is what Sphinx expects. Initial setup ------------- .. code:: shell mkdir blog && cd blog python -m venv venv && source venv/bin/activate pip install ablog ablog start This will create an initial structure that looks like this: :: . ├── _static ├── _templates ├── about.rst ├── conf.py ├── first-post.rst └── index.rst The only customization that I have made is to have all posts in a dedicated subfolder. You need to specify a pattern for the post files in ``conf.py``. .. code:: python blog_post_pattern = "posts/*.rst" Now the directory structure can be something like this: :: . ├── _static ├── _templates ├── about.rst ├── conf.py ├── index.rst └── posts    ├── blog-setup.org    └── blog-setup.rst Adding pages that are not posts ------------------------------- I also wanted to have a part of this site that does not really need to be structured as a blog, i.e. pages that do not need a date, are not ordered chronologically and are related only via internal links. The main advantage of using Sphinx for this website is specifically for those pages, so that they get indexed and are searchable. The ``ablog start`` command already created an ``index.rst`` file with a section for “Recent posts”. In order to have more pages, you just need to create a subfolder, add ``.rst`` files there, and **list at least one of them in the index page** with the ``doc`` directive. .. code:: rst Zettelkasten ------------ - :doc:`Start page ` With a folder structure like this: .. code:: shell . ├── _static ├── _templates ├── about.rst ├── conf.py ├── index.rst └── zettelkasten └── start.rst Adding more zetteln ~~~~~~~~~~~~~~~~~~~ In order to have a Zettelkasten structure, pages inside the folder have to be able to reference each other and the start page. You can get into a recursion error if you list in a ``toctree`` directive a page that already references the current page in another ``toctree`` directive. Therefore, remember to use the ``doc`` directive in order to create links back to the start. For instance, with a first post that links to a second post, and both of them linking back to the start page, one would have these contents: .. code:: shell └── zettelkasten ├── first-zettel.rst ├── second-zettel.rst └── start.rst The start page is: .. code:: rst My own Zettelkasten =================== Which is just a fancy way of saying "my own wiki". .. toctree:: first-zettel The first zettel is: .. code:: rst A first zettel ============== This page is referenced from the Start page of the Zettelkasten. .. toctree:: second-zettel And the second zettel has this contents: .. code:: rst A second zettel =============== This second zettel references the start. Try not to reference the first one, or you will get into an error of recursion, since that zettel references this one. - :doc:`start` Writing posts with Org-mode --------------------------- This is probably only relevant if you are an Emacs user. Since the blog post pattern of ABlog (and in general, Sphinx) only picks up ``.rst`` files, I can write ``.org`` files in the same folders and export them to ``.rst`` with `ox-rst `_, a package availble in MELPA. The header of those files has to be something like this: .. code:: #+TITLE: Blog Setup #+AUTHOR: Luis Osa #+DATE: Sun Nov 8 22:04:59 2020 #+OPTIONS: toc:nil num:nil :tags: meta Notice that the ``:tags:`` line is actually raw RST. If you use a ``#+TAGS`` header line in Org, it will not be exported to the ``.rst`` file. Also, notice that the ``#+DATE`` is a full timestamp and not an Org datetime; those do not get correctly picked up by the Sphinx engine. After exporting the Org document to RST, the ``:Author:``, ``:Date:`` and ``:tags:`` lines are underneath the main title. Since ABlog expects to find them as front matter, you need to manually move them to the first lines of the file. There seems to be no way to define front matter with ``ox-rst``. I hope this can be fixed in later releases.