packages feed

gemoire-0.1.0: README.md

# gemoire - yet another static gemlog generator

gemoire is just a basic flexible gemini blog generator, that can:

- be configured using Haskell code,
- use custom templates written in an authentic syntax,
- set additional and overriding variables for formatting,
- and generate Atom and Gemini feeds.

See the [example](https://codeberg.org/sena/gemoire/src/branch/main/example)
directory in the repository to see how it looks like in "production".

## Getting Started

Intended way for using gemoire is through Cabal scripts. To get started, you should
organize your gemlog sources like so:

```
gemlog
├── content
│   ├── post1.gmi
│   └── post2.gmi
└── gemlog.hs
```

The contents directory can be as deep as you want, all posts will end up in a
flat directory in the end. After setting up your files, you can start configuring
your `gemlog.hs`, here is a simple template for you using the defaults:

```hs
#!/usr/bin/env cabal
{- cabal:
build-depends: base
             , gemoire
-}
{-# LANGUAGE OverloadedStrings #-}

import Gemoire

main :: IO ()
main = do
    let gemlog =
            Gemlog
                { title = "my gemlog"
                , author = "me"
                , sourceDir = "content"
                , baseURL = "gemini://my.website.com/path/to/gemlog"
                , postTemplate = defPost
                , gemfeedTemplates =
                      ( defGemfeed
                      , defGemfeedEntry
                      )
                , atomTemplates =
                      ( defAtom
                      , defAtomEntry
                      )
                , overrides = vempty
                }

    generatePosts gemlog "~/public_gemini/path/to/gemlog"
    generateGemfeed gemlog "~/public_gemini/path/to/gemlog/index.gmi"
    generateAtom gemlog "~/public_gemini/path/to/gemlog/atom.xml"
```

After setting up your configuration, you can just cd into the `gemlog` directory
and run the generator:

```bash
$ cabal run gemlog.hs
```

If Cabal is causing problems, you can just install the library and use `runghc`
instead, like so:

```bash
$ cabal install --lib gemoire
$ runghc gemlog.hs
```

## Customizing

You can then customize your gemlog to your liking. To do that, you might want
to start with changing the templates, like so:

```hs
#!/usr/bin/env cabal
{- cabal:
build-depends: base
             , text
             , gemoire
-}
{-# LANGUAGE OverloadedStrings #-}

-- gemoire uses Data.Text underhood.
import Data.Text (unlines)
import Prelude hiding (unlines)
import Gemoire

-- The line endings will be taken care of by gemoire.
-- ...
                , postTemplate = template . unlines $
                      [ "By {$author$}."
                      , ""
                      , "{$post$}"
                      ]
-- ...
```

There are various variables and different useful compounds you can use in the
templates. A detailed list can be found in the documentation of
[`Gemoire.Template`](https://hackage.haskell.org/package/gemoire/docs/Gemoire-Template.html).
Also check the default templates in the source for some inspiration!

Different special variables are available to the formatters for feeds and posts.
You can see a list of those and how you can set overrides per post in the page for
[`Gemoire.Gemlog`](https://hackage.haskell.org/package/gemoire/docs/Gemoire-Gemlog.html).

Additionally, you can set overriding variables globally using the `overrides`
variable, like so:

```hs
-- ...
                , overrides = vlist
                      [ ("variable", "new value")
                      , ("another", "overridden")
                      ]
-- ...
```

## See also

- [Project Gemini](https://geminiprotocol.net)
  for more about the Gemini protocol itself.
- [Awesome Gemini](https://github.com/kr1sp1n/awesome-gemini)
  to discover more projects about Gemini.