aae2906737
The `modes` need to be inside a function, apparently. |
||
---|---|---|
example | ||
src/Rib | ||
.gitignore | ||
default.nix | ||
ghcid | ||
README.md | ||
rib.cabal |
rib
Rib is a static site generator written in Haskell that reuses existing tools (Shake
, Lucid
and Clay
) and is thus non-monolithic. It is nearly done but still a work in progress and will soon be ready for general use.
Example
See ./example
(author's actual website in fact) to see how the Rib
library
can be used to write your own static site generator in a few lines of code which
includes the HTML and CSS of the site:
$ cloc --by-file example/Main.hs
[...]
-------------------------------------------------------------------------------
File blank comment code
-------------------------------------------------------------------------------
example/Main.hs 15 6 90
-------------------------------------------------------------------------------
(See Rib.Simple
if you need further customization.)
With Rib you do not have to deal with less powerful template engines or write raw HTML/CSS by hand. Do everything in Haskell, and concisely at that!
To get the example site up and running run:
cd ./example
../ghcid
This will:
- Drop into a nix-shell with needed Haskell dependencies
- Compile the
rib
library andexample/Main.hs
through ghcid- Whenever Haskell sources change ghcid reloads them
- Run
example/Main.hs:main
withserve -w
CLI arguments - This does the following:
- Generate ./content into ./content.generated using Shake
- Listens for changes to ./content, and re-generate them (the
-w
argument) - Start a HTTP server serving the ./content.generated directory (the
serve
part)
Thus, by running that one command you get a production-quality web server
serving your statically generated HTML files that automatically get regenerated
when the source content changes. What's more, you may change the Haskell sources
such as Main.hs
and ghcid will recompile and relaunch the whole thing. With
rib
you get hot reload for free.