-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathreadme
145 lines (101 loc) · 4 KB
/
readme
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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
SPECIAL META DIRECTIVES
• draft: sets a post to draft (boolean) and will only be rendered if
the build command is run with the --drafts flag.
• atroot: sets a post to be also rendered at the root of the site.
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 an Extra object,
which is a slice of types.Post containing Body 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.
BUGS
Or rather, (undocumented) features. There's probably a couple. If you are
actually using this, feel free to reach out and I can try to help.