Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/karlicoss/beepb00p

My blog!
https://github.com/karlicoss/beepb00p

blog hakyll ipython org-babel org-mode

Last synced: 4 months ago
JSON representation

My blog!

Awesome Lists containing this project

README

        

Compiler for my blog.

NOTE: readme is a little outdated, I've moved away from Hakyll to a custom generation [[file:src/build.py][script]].
You can fild retired Hakyll stuff [[file:hakyll][here]].

Features:
- formats:
- [[https://beepb00p.xyz/sandbox/test.html][org-mode]]
- [[https://beepb00p.xyz/sandbox/Test.html][ipython notebooks]]
- markdown (useful to link READMEs as blog posts)
- tags
- feeds (rss/atom)
- comments support using Isso
- math support via Mathjax
- drafts
- custom metadata attributes (e.g. tags, special uuid attribute for linking comments, pingback)
- symlink support

There are some comments in ~site.hs~, feel free to email me or open an issue if you want me to explain how something works!
I'll write down about it properly at some point later!

* Post compilers

** Org-mode
See my [[https://beepb00p.xyz/sandbox/test.html][org-mode sandbox]].

Org related stuff is in ~Org.hs~ and ~src/compile_org.py~.
To compile Org into HTML, I'm invoking Emacs in batch mode in ~compile_org.py~ script.
Your can try it with ~src/compile_org.py --test src/test.org~.

Reason I'm not using Pandoc for rendering is that it only supports a subset of Org-mode.
If you are a heavy user of Org-mode features, e.g. doesn't support literate programming via org-babel.

Using custom script lets me configure (and hack a little) Emacs to bend it into doing what I want.
I also process the resulting HTML with BeautifulSoup to add some things org-mode isn't capable of like sidenotes.

** Ipython
See my [[https://beepb00p.xyz/sandbox/test.html][org-mode sandbox]].

Ipython related things are in ~Ipynb.hs~ and ~src/compile-ipynb~.

I'm compiling with ~jupyter~, that executes the code and does few extra tweaks in ~src/ipynbconfig.py~, in particular:

- hidden cell support (e.g. when you have lots of boilerlate that don't need to be in the post body)
- details/summary support, so you can collapse boilerplate or long outputs in a collapsible section.

* Misc things

** ~css/generate-links.py~ for generating CSS for certain links (e.g. wikipedia/reddit/github)
** symlink support: see [[file:src/poke-symlinks.py]] and [[file:preview]].

Very useful when the target post (e.g. ipython notebook is in a different repository). Without this, detecting changes wouldn't work (see [[https://github.com/haskell-fswatch/hfsnotify/issues/87][issue]]).

** screenshot comparisons via [[https://github.com/ewanmellor/git-diff-image][git-diff-image]]

Helpful for testing css changes.

In addition I'm using [[https://github.com/yahoo/blink-diff][blink-diff]] since =compare= can't handle pages that are too long :(

* Running & building
I guess best place to start would be [[https://jaspervdj.be/hakyll/tutorials/02-basics.html][hakyll tutorial]].

* Compiling the site
When I want to release new version of site, I'm basically doing a clean rebuild and copying the resulting ~_site~ directory.

In reality it's a little more elaborate, I'm keeping the whole website (HTMLs) under git, so I can easily track changes and rollback in case of issues.
I'll explain it and share some workflows later.

* TODOs
** TODO [2019-11-09 Sat 16:52] explain about using ~.metadata~ files