Skip to main content

A minimalistic Static Site Generator

Project description

Grimoire SSG

Grimoire is a minimalistic Static Site Generator (SSG) designed to simplify the process of creating static websites. With Grimoire, most use cases can be addressed without the need for programming knowledge — simply modify YAML files to generate your site.

Features

  • YAML Configuration: Define your content and structure using simple YAML files.
  • Template Rendering: Utilize Jinja2 templates for dynamic content generation.
  • Markdown Support: Write content in Markdown, which is automatically converted to HTML.
  • Tagging System: Organize your content with tags for easy referencing in templates.
  • File Inclusion: Include other YAML files to create a modular content structure.

Getting Started

Installation

To get started with Grimoire, clone the repository and install the required dependencies:

git clone https://github.com/sigmasternchen/grimoire-ssg.git
cd grimoire-ssg
poetry install

Usage

To generate your static site, run the Grimoire command with your input YAML files. You can specify an output directory using the -o or --output flag.

poetry run python -m grimoire-ssg -o output_directory input_file.yml

Example YAML File

Here is an example of a YAML file that defines a content structure:

# (optional) Included files will also be considered for generation.
# If this attribute is missing or empty, no other files will be included.
include:
  - pages/*.yml
  - blog/*.yml

# (optional) List of tags for this file.
# These can be used in templates later to reference this content.
# If this attribute is missing or empty, this file will not be accessible 
# via any tags.
tags:
  - page

# (optional) The file that should be generated from this .yml file.
# If this attribute is missing, no output file will be generated.
output: index.html

# (optional) Path to the template for this .yml file.
# If this attribute is missing, no output will be generated.
# It's also possible to just use `template` without `output`. In that case
# the rendered template can still be accessed by other templates.
template: ../templates/homepage.html

# (optional) The markdown content for this output file.
# If this attribute is missing, the markdown content can not be 
# referenced by the template.
markdown: |
  # Hello, World!

# All other defined attributes are not interpreted by the program, but 
# can still be referenced by a template.
# The following are some examples:
Date: 2025-01-06
Author: Sigma

Template Example

Grimoire uses Jinja2 templates for rendering. Below is an example of a template that extends a layout and includes dynamic content:

{% extends template_dir + "/layout.templ.html" %}
{% block title %}Homepage{% endblock %}
{% block content %}
    {{ current.markdown_compiled | safe }}

    <h2>My latest blog articles:</h2>
    <ul>
    {% for entry in tags["blog"] %}
        <li><a href="{{ entry.output }}">{{ entry.title }}</a> ({{ entry.date }})</li>
    {% endfor %}
    </ul>
{% endblock %}

Template Parameters

The following parameters are available in your templates:

  • current: The current content file being rendered.
  • all: A list of all content files.
  • tags: A dictionary of tags with corresponding content files.
  • template_dir: The absolute path to the parent directory of the current template.

The content file objects in the template contain all fields from the corresponding YAML file. Additionally, the following fields are defined:

  • filename is the absolute filename of the yml file.
  • relative_filename is the filename of the yml file relative to the working directory.
  • markdown_compiled is the compiled markdown content in HTML form. In combination with the safe filter in Jinja2 the markdown content can be output.
  • rendered is the rendered template of that file. This can be useful for including other pages in a template.

Output Structure

The output files will be generated in the specified output directory, with paths defined in the output attribute of your YAML files.

Contributing

Contributions are welcome! If you have suggestions or improvements, feel free to open an issue or submit a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Acknowledgments


For more information, please refer to the documentation or the source code.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

grimoire_ssg-0.1.0.tar.gz (4.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

grimoire_ssg-0.1.0-py3-none-any.whl (5.0 kB view details)

Uploaded Python 3

File details

Details for the file grimoire_ssg-0.1.0.tar.gz.

File metadata

  • Download URL: grimoire_ssg-0.1.0.tar.gz
  • Upload date:
  • Size: 4.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: poetry/2.0.0 CPython/3.11.11 Linux/6.5.0-1025-azure

File hashes

Hashes for grimoire_ssg-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0224238ed0af546fccc4c46f7d99095f249df8f054906b1c60903b465a10b584
MD5 9698ee1b1dff9a787b338e77af9de977
BLAKE2b-256 7f4adf2d2a7691aedeb6b46395fecd53e750d5b782a3fb5fb2d1fc53f14cd507

See more details on using hashes here.

File details

Details for the file grimoire_ssg-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: grimoire_ssg-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: poetry/2.0.0 CPython/3.11.11 Linux/6.5.0-1025-azure

File hashes

Hashes for grimoire_ssg-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b08e9e2155094672e82741ef731d7940ea22801c1b41e35dbb6f1ef296ed57c0
MD5 4078275533fb2e5e8843690abb2b133b
BLAKE2b-256 c3565006d3ac83bb451bec6c07bdd7fff95ae8d4e2e5e941ce4d6a52fc260fcd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page