💾 Archived View for gemini.spam.works › users › emery › generate-gemini.dhall captured on 2022-01-08 at 23:12:43.

View Raw

More Information

⬅️ Previous capture (2021-12-03)

➡️ Next capture (2022-06-04)

🚧 View Differences

-=-=-=-=-=-=-

let Prelude =
      https://raw.githubusercontent.com/dhall-lang/dhall-lang/v20.2.0/Prelude/package.dhall

let XML = Prelude.XML

let Atom = /home/repo/dhall-atom/package.dhall

let Article = ./article.dhall

let gemlog = ./gemlog.dhall

let baseUrl = "gemini.spam.works/~emery"

let feed =
      Atom.Feed::{
      , title = Atom.text "~emery"
      , authors = [ Atom.Person::{ name = "Emery" } ]
      , links =
        [ Atom.Link::{
          , href = "gemini://${baseUrl}/"
          , hreflang = Some "en"
          , type = Some "text/gemini"
          }
        , Atom.Link::{
          , href = "https://${baseUrl}/"
          , hreflang = Some "en"
          , type = Some "text/html"
          }
        , (Atom.Link.self "gemini://${baseUrl}/feed.atom")
          with type = Some "application/atom+xml"
        , (Atom.Link.self "https://${baseUrl}/feed.atom")
          with type = Some "application/atom+xml"
        ]
      , id = "urn:uuid:1dfa135b-eca3-46dd-aae0-f4570c89565d"
      , updated = Atom.Date.raw env:ATOM_DATE as Text
      , generator = Some Atom.Generator::{
        , uri = Some "gemini://gemini.spam.works/~/emery/generate-gemini.dhall"
        , text = "custom Dhall generator"
        }
      , entries =
          Prelude.List.map
            Article.Type
            Atom.Entry.Type
            ( λ(article : Article.Type) →
                let gmiLink = "gemini://${baseUrl}/${article.file}"

                in  Atom.Entry::{
                    , title = Atom.text article.title
                    , updated = article.updated
                    , summary =
                        Prelude.Optional.map
                          Text
                          Atom.TextConstruct.Type
                          Atom.text
                          article.summary
                    , links =
                      [ Atom.Link::{ type = Some "text/gemini", href = gmiLink }
                      , Atom.Link::{
                        , href = "https://${baseUrl}/${article.file}"
                        , type = Some "text/html"
                        }
                      ]
                    , id = gmiLink
                    , contents =
                      [ Atom.Content::{
                        , type = "text/gemini"
                        , body = XML.text article.text
                        }
                      ]
                    }
            )
            gemlog
      }

in    Prelude.List.map
        Article.Type
        (Prelude.Map.Entry Text Text)
        ( λ(article : Article.Type) →
            { mapKey = article.file
            , mapValue =
                merge
                  { Some = λ(mimeType : Text) → article.text
                  , None =
                      ''
                      # ${article.title}

                      ${article.text}
                      ''
                  }
                  article.mimeType
            }
        )
        gemlog
    # toMap
        { `atom.feed` = Atom.Feed.render feed
        , `.molly` =
                ''
                [MimeOverrides]
                ".dhall$" = "text/x-dhall"
                ''
            ++  Prelude.Text.concatMap
                  Article.Type
                  ( λ(article : Article.Type) →
                      merge
                        { Some =
                            λ(mimeType : Text) →
                              ''
                              "${article.file}$" = "${mimeType}"
                              ''
                        , None = ""
                        }
                        article.mimeType
                  )
                  gemlog
        , `index.gmi` =
            ''
            # ~emery

            ## Code

            => https://git.sr.ht/~ehmry
            => https://github.com/ehmry

            ## Gemlog

            => atom.feed

            ${Prelude.Text.concatMap
                Article.Type
                ( λ(article : Article.Type) →
                        "=> ${article.file}"
                    ++  ''
                         ${Atom.Date.show article.updated} - ${article.title}
                        ''
                )
                gemlog}

            ## Contact
            => tox:DF0AC9107E0A30E7201C6832B017AC836FBD1EDAC390EE99B68625D73C3FD929FB47F1872CA4 Tox
            ''
        }