teesloane/firn

Org Mode Static Site Generator

Rust

332

171 commits

updated Aug 2, 2022

See the code

README

#+html: <h2 align="center">Firn</h2>
#+html: <p align="center">A Static Site Generator for Org Mode</p>
#+html: <p align="center"><a href="https://github.com/theiceshelf/firn/releases"><img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/theiceshelf/firn?color=%2316a085&include_prereleases&style=flat-square"><a/>&nbsp;<img src="https://img.shields.io/badge/Status-Alpha-%23f39c12?style=flat-square">&nbsp;<a href="https://discord.gg/TbgKxYb"><img alt="Discord" src="https://img.shields.io/discord/707754224871669770?color=%233498db&label=Discord%20Chat%20&style=flat-square"></a>&nbsp;<a href="https://github.com/sponsors/teesloane"><img src="https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub"></a></p>


* What's Firn?
Firn generates a static site from org-mode files. It is a bit different from other static site generators, in that it intends to be a drop in solution for creating sites from already existing folders of org-files. Further, because org-mode has great capacity for collecting and displaying different kinds of data (links, logbooks, drawers, task keywords, tags, etc) we can make this data available when org-content is parsed into a data structure.

Currently, running the firn binary on a directory of org files performs the following:

- Reads all .org files in the directory recursively.
- Parses org-files into data structures with the lovely [[https://github.com/PoiScript/orgize][Orgize]].
- Collects all file links, tags and logbooks across all files.
- Passes files through a template system called [[https://github.com/Keats/tera][Tera]], and renders to HTML.

* How do I use it?

- Download the latest binary from the Github Releases page.
- Add the binary to your path, or use the =-d= flag to pass a directory to Firn

#+begin_src

# navigate to a directory that has some org-files in it, then
# scaffold out a site:
firn new

# go explore what was generated:
ls -la _firn

# start a server and go looking for your files:
# if you have an org file called 'foo.org' it will become 'foo.html' etc.
firn serve

# ready to build the output?
firn build
#+end_src


Read the full usage documentation [[https://theiceshelf.com/firn.html][here]].

* Development & Contributing

- Rust version =1.58.0=
- see =Makefile= commands.
- You'll need a folder of Org files to test on.

A small roadmap can be found [[https://theiceshelf.com/firn.html#Roadmap][here.]]

* Limitations
** Development Server

The development server is quite naive. There is no caching or diffing in the replacement of changed assets in the /static or /data folder.
** Footnotes
Due to how the parser parses footnotes, they must look like so:
#+begin_src
[fn:1]

<My footnote>
#+end_src

*Not* like this:

#+begin_src

[fn:1] <My Footnote>

#+end_src

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

emacs
org-mode
rust
static-site-generator

Contributors

teesloane

154 commits

holtzermann17

6 commits

tranzystorekk

3 commits

teesloane/firn

Org Mode Static Site Generator

Rust

332

171 commits

updated Aug 2, 2022

See the code

README

#+html: <h2 align="center">Firn</h2>
#+html: <p align="center">A Static Site Generator for Org Mode</p>
#+html: <p align="center"><a href="https://github.com/theiceshelf/firn/releases"><img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/theiceshelf/firn?color=%2316a085&include_prereleases&style=flat-square"><a/>&nbsp;<img src="https://img.shields.io/badge/Status-Alpha-%23f39c12?style=flat-square">&nbsp;<a href="https://discord.gg/TbgKxYb"><img alt="Discord" src="https://img.shields.io/discord/707754224871669770?color=%233498db&label=Discord%20Chat%20&style=flat-square"></a>&nbsp;<a href="https://github.com/sponsors/teesloane"><img src="https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub"></a></p>


* What's Firn?
Firn generates a static site from org-mode files. It is a bit different from other static site generators, in that it intends to be a drop in solution for creating sites from already existing folders of org-files. Further, because org-mode has great capacity for collecting and displaying different kinds of data (links, logbooks, drawers, task keywords, tags, etc) we can make this data available when org-content is parsed into a data structure.

Currently, running the firn binary on a directory of org files performs the following:

- Reads all .org files in the directory recursively.
- Parses org-files into data structures with the lovely [[https://github.com/PoiScript/orgize][Orgize]].
- Collects all file links, tags and logbooks across all files.
- Passes files through a template system called [[https://github.com/Keats/tera][Tera]], and renders to HTML.

* How do I use it?

- Download the latest binary from the Github Releases page.
- Add the binary to your path, or use the =-d= flag to pass a directory to Firn

#+begin_src

# navigate to a directory that has some org-files in it, then
# scaffold out a site:
firn new

# go explore what was generated:
ls -la _firn

# start a server and go looking for your files:
# if you have an org file called 'foo.org' it will become 'foo.html' etc.
firn serve

# ready to build the output?
firn build
#+end_src


Read the full usage documentation [[https://theiceshelf.com/firn.html][here]].

* Development & Contributing

- Rust version =1.58.0=
- see =Makefile= commands.
- You'll need a folder of Org files to test on.

A small roadmap can be found [[https://theiceshelf.com/firn.html#Roadmap][here.]]

* Limitations
** Development Server

The development server is quite naive. There is no caching or diffing in the replacement of changed assets in the /static or /data folder.
** Footnotes
Due to how the parser parses footnotes, they must look like so:
#+begin_src
[fn:1]

<My footnote>
#+end_src

*Not* like this:

#+begin_src

[fn:1] <My Footnote>

#+end_src

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

emacs
org-mode
rust
static-site-generator

Contributors

teesloane

154 commits

holtzermann17

6 commits

tranzystorekk

3 commits

Languages

Rust

98.8%

Makefile

1.2%