Gavinok / cl-site-gen

Finally You Can Write Your Next Blog In Lisp!
MIT License
3 stars 1 forks source link

cl-site-gen guix #3

Open jgarte opened 2 years ago

jgarte commented 2 years ago

Hi,

We currently have a website that generates a list of all the packages in the Guix 'R Us channel.

There are currently 837 Guix packages to date.

The website is generated with jinja templates and guile. We also generate the gemini site from jinja templates.

I'm looking to convert the website to using common lisp and the guile helper code.

What do you think cl-site-gen can offer over the our current approach?

I'd also like to package cl-site-gen for Guix 'R Us if you think it is ready to be made available as a library package.

We have other common lisp libraries package for Guix in the channel in this module.

Gavinok commented 2 years ago

Hmm the main goal of cl-site-gen was to basically write your websites as a program. At the moment the biggest advantage would be extensibility. The ./example directory contains a few examples but I still have yet to fully build out the project.

Main thing is determining how to restrict what shares the same environment so the user can have something similar to a template file in a directory that will be applied to other files.

For now the expectation is that the user will define your macros and functions used in their pages before you would call create-sites. Those macros will then be applied to all of the files during their evaluation. For example see example/template-example.lisp

This uses a macro defined in https://github.com/Gavinok/cl-site-gen/blob/01f958c35bac37e839290fddea2e3b654d51801d/src/main.lisp#L123-L133

So if you where to execute the function (demo) you would evaluate all the lisp files with that macro available to you.

I'd consider this project really only at a Beta/Alpha level right now though people are welcome to try it. It lacks tests as well as support for live browser reloading which would give this project a bit more of a Lispy workflow. I don't have much experience packaging for Guix but I'll look into it.

jgarte commented 2 years ago

Hmm the main goal of cl-site-gen was to basically write your websites as a program.

Very cool!

Do you see flute being interchangeable with other html generators?

I guess that can add to the extensibility.

as well as support for live browser reloading which would give this project a bit more of a Lispy workflow.

What do you think is missing for live browser reloading?

I don't have much experience packaging for Guix but I'll look into it.

I packaged cl-site-gen for Guix here in a community channel that I'm a part of: https://whereis.みんな/

Here's the cl-site-gen package:

https://git.sr.ht/~whereiseveryone/guixrus/tree/master/item/guixrus/packages/jam-stack.scm#L34

When/if ready in the future I can send it to GNU Guix upstream for inclusion in their package collection.

We accept patches at ~whereiseveryone/guixrus@lists.sr.ht.

Gavinok commented 2 years ago

Hmm the main goal of cl-site-gen was to basically write your websites as a program.

Very cool!

Do you see flute being interchangeable with other html generators?

I guess that can add to the extensibility.

as well as support for live browser reloading which would give this project a bit more of a Lispy workflow.

What do you think is missing for live browser reloading?

I don't have much experience packaging for Guix but I'll look into it.

I packaged cl-site-gen for Guix here in a community channel that I'm a part of: https://whereis.みんな/

Here's the cl-site-gen package:

https://git.sr.ht/~whereiseveryone/guixrus/tree/master/item/guixrus/packages/jam-stack.scm#L34

When/if ready in the future I can send it to GNU Guix upstream for inclusion in their package collection.

We accept patches at ~whereiseveryone/guixrus@lists.sr.ht.

Flute currently only mandatory for the cli version which is inherently not as powerful so I still need to come up with a better solution. The library it's self actually already supports replacing the function that converts the evaluated content to a string. I have a few commits that further abstracts this and show it off in the example project.

Gavinok commented 2 years ago

Also thanks for packaging this up I'm happy to see the project is already gaining users or at least interest.

Gavinok commented 2 years ago

For changing the html rendering function see https://github.com/Gavinok/cl-site-gen/blob/master/src/main.lisp#L92-L98