jjba23/ggg: Guile Glyph Generator: SVG images, handy useful glyphs, org/markdown badges - Codeberg.org
This website requires JavaScript.
jjba23/ggg
Watch
Star
21
Fork
Code
Issues
Pull requests
Activity
Guile Glyph Generator: SVG images, handy useful glyphs, org/markdown badges
badge
guile
guix
lisp
markdown
org
scheme
svg
185 commits
1 branch
65 tags
794 KiB
Scheme
91.4%
Shell
6.4%
HTML
2.2%
trunk
Find a file
HTTPS
Download ZIP<br>Download TAR.GZ<br>Download BUNDLE
Open with VS Code
Open with VSCodium
Open with Intellij IDEA
Repository files (latest commit first)
Filename<br>Latest commit message<br>Latest commit date
Josep Bigorra
9c3f869740
All checks were successful
ci/woodpecker/push/tag-bumper Pipeline was successful
Details
ci/woodpecker/push/byggsteg Pipeline was successful
Details
ci/woodpecker/tag/byggsteg Pipeline was successful
Details
feat: ✨ Coreutils to Coreutils minimal
2026-07-20 16:29:15 +02:00
.woodpecker
✨ feature: Add maak file and docker
2025-08-27 18:16:44 +02:00
dist
feat: ✨ Add new logos and glyphs
2026-07-20 10:03:26 +02:00
glyphs
feat: ✨ Add new logos and glyphs
2026-07-20 10:03:26 +02:00
resources
feat: ✨ Add new logos and glyphs
2026-07-20 10:03:26 +02:00
scripts
feat: ✨ Improve package definitions and make build more reproducible
2026-07-20 09:26:26 +02:00
src/ggg
feat: ✨ Add new logos and glyphs
2026-07-20 10:03:26 +02:00
test
added jointhefreeworld.org badge
2025-07-22 15:25:00 +02:00
.gitignore
✨ feature: Add maak file and docker
2025-08-27 18:16:44 +02:00
channels.scm
feat: ✨ Improve package definitions and make build more reproducible
2026-07-20 09:26:26 +02:00
COPYING
2025-05-20 11:51:26 +02:00
guix.scm
feat: ✨ Coreutils to Coreutils minimal
2026-07-20 16:29:15 +02:00
maak.scm
feat: ✨ Improve package definitions and make build more reproducible
2026-07-20 09:26:26 +02:00
manifest.scm
feat: ✨ Improve package definitions and make build more reproducible
2026-07-20 09:26:26 +02:00
README.org
feat: ✨ Add AI policy
2026-05-30 22:42:57 +02:00
README.org
GGG: Guile Glyph Generator
What is this black magic? 🪄
How to define a glyph?
Help
Installing
On Guix
On Podman/Docker
Licensing
AI Policy
REPL: Interactive workflow, developer power
Code of conduct
GGG Project
Generate SVG images for handy useful glyphs, Org/Markdown badges and more, leveraging the power of Lisp (Guile Scheme)
Be proud and appreciate technologies and techniques you use, distinguish clearly supported versions of things, etc.
With flexible support for badges between ONE and THREE parts.
If you like my work, please support me by buying me a cup of coffee ☕ so I can continue with a lot of motivation.
Tired of bland, static status badges for your projects?
Say hello to the Guile Glyph Generator (GGG) , a small but mighty tool crafted in the elegant λ Lisp (Guile Scheme) programming language.
Based on the provided Lisp configuration, GGG will produce something like the following badges (1-3 part) (as both SVG and PNG files).
What is this black magic? 🪄
Through SVG generation from Lisp (Guile Scheme) we leverage a beautiful DSL (Domain-Specific Language) and apply some mathematical knowledge to build pixel perfect badges.
The SVG (Scalable Vector Graphics) can then be easily converted without quality loss to any desired format. Create your badges programatically with a polished aesthetic!
Scheme Powered
Built with the expressive and functional Guile Scheme, ensuring a concise and maintainable codebase.
Vector Graphics (SVG)
Generates crisp and scalable SVG images, perfect for any screen resolution.
Raster Images (PNG)
Also produces PNG versions for broader compatibility.
Highly Customizable
Customize the text, background colors, text colors, logos, etc.
Simple Definition
Badge configurations are defined in an easy-to-understand data structure within the Scheme code.
ggg dynamically estimates text width for the elements, specially text, looking up a rough width per character based on the font size. Then, multiplies this by the number of characters and add some padding. Finally, we slightly adjust the width based on whether the text is very short, short, medium, or long to make the badge look better.
ggg tries to provide sensible defaults to every option, but allow customization. We construct the SVG structure using SXML (S-expressions representing XML). This makes it easy to define the SVG elements and their attributes programmatically.
We choose for geometricPrecision in SVG to allow highest quality and fidelity, to prioritize geometric accuracy over rendering speed. This is often desirable for crisp, clean vector graphics like badges. In essence, the "magic" lies in the combination of:
Data-driven generation
The badge is created based on the input data.
Precise calculations
The dimensions and positions of elements are precisely calculated to achieve the desired layout.
Using SVG...