readme (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
vite
----
A fast (this time, actually) and minimal static site generator.
INSTALLING
go install git.icyphox.sh/vite@latest
USAGE
usage: vite [options]
A simple and minimal static site generator.
options:
init PATH create vite project at PATH
build builds the current project
new PATH create a new markdown post
serve [HOST:PORT] serves the 'build' directory
CONFIG
The configuration is unmarshalled from a config.yaml file, into the
below struct:
type ConfigYaml struct {
Title string `yaml:"title"`
Desc string `yaml:"description"`
DefaultTemplate string `yaml:"-"`
Author struct {
Name string `yaml:"name"`
Email string `yaml:"email"`
} `yaml:"author"`
URL string `yaml:"url"`
PreBuild []string `yaml:"preBuild"`
PostBuild []string `yaml:"postBuild"`
}
Example config: https://git.icyphox.sh/site/tree/config.yaml
SYNTAX HIGHLIGHTING
vite uses chroma (https://github.com/alecthomas/chroma) for syntax
highlighting. Note that CSS is not provided, and will have to be
included by the user in the templates. A sample style can be generated
by running:
go run contrib/style.go > syntax.css
TEMPLATING
Non-index templates have access to the below objects:
• Cfg: object of ConfigYaml
• Meta: map[string]string of the page's frontmatter metadata
• Body: Contains the HTML
Index templates have access to everything above, and a Posts object,
which is a slice containing HTML and Meta. This is useful for iterating
through to generate an index page.
Example: https://git.icyphox.sh/site/tree/templates/index.html
Templates are written as standard Go templates (ref:
https://godocs.io/text/template), and can be loaded recursively.
Consider the below template structure:
templates/
|-- blog.html
|-- index.html
|-- project/
|-- index.html
`-- project.html
The templates under project/ are referenced as project/index.html.
This deserves mention because Go templates don't recurse into
subdirectories by default (template.ParseGlob uses filepath.Glob, and
doesn't support deep-matching, i.e. **).
vite also supports templating generic YAML files. Take for instance,
pages/reading.yaml (https://git.icyphox.sh/site/blob/master/pages/reading.yaml):
meta:
template: reading.html
title: reading
subtitle: Tracking my reading.
description: I use this page to track my reading.
books:
- 2024:
- name: Dune Messiah
link: https://en.wikipedia.org/wiki/Dune_Messiah
author: Frank Herbert
status: now reading
- 2023:
- name: Dune
link: https://en.wikipedia.org/wiki/Dune_(novel)
author: Frank Herbert
status: finished
vite will look for a 'meta' key in the YAML file, and use the 'template'
specified to render the page. The rest of the YAML file is available to
you in the template as a map[string]interface{} called Yaml.
More templating examples can be found at:
https://git.icyphox.sh/site/tree/templates
FEEDS
Atom feeds are generated for all directories under pages/. So
pages/foo will have a Atom feed at build/foo/feed.xml.
FILE TREE
.
|-- build/
|-- config.yaml
|-- pages/
|-- static/
|-- templates/
The entire static/ directory gets copied over to build/, and can be
used to reference static assets -- css, images, etc. pages/ supports
only nesting one directory deep; for example: pages/blog/*.md will
render, but pages/blog/foo/*.md will not.
|