annotate README.md @ 74:d8727551f403 draft

The Empress (III) * Change the way how versions are handled in version.go (to ease `go install`) * Upgrade yaml.v2 to yaml.v3 Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Mon, 04 Dec 2023 00:54:29 +0000
parents 4edfa07d5fe0
children 7b122b71fcfa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
1 # aya
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
2
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
3 aya is an extremely minimal static site generator written in Go.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
4
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
5 Named after [Aya Shameimaru](https://en.touhouwiki.net/wiki/Aya_Shameimaru) from [Touhou 9.5: Shoot the Bullet](https://en.touhouwiki.net/wiki/Shoot_the_Bullet)
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
6
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
7 ## Features
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
9 * Zero configuration (no configuration file needed)
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
10 * Cross-platform
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
11 * Highly extensible
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
12 * Works well for blogs and generic static websites (landing pages etc)
74
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
13 * Easy to learn (you literally don't need to)
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
14 * Fast (goes without saying)
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
15
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
16 ## Installation
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
17
67
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
18 Build it manually assuming you have Go (>=1.17) installed:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
19
60
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
20 $ go install marisa.chaotic.ninja/aya/cmd/aya@latest
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
21 --- or ---
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
22 $ git clone https://git.chaotic.ninja/yakumo.izuru/aya
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
23 $ cd aya
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
24 $ make
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
25 # make install
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
26
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
27 ## Ideology
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
28
47
0adadd497d23 Forked project
prologic
parents: 38
diff changeset
29 Keep your texts in markdown, or HTML format right in the main directory
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
30 of your blog/site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
31
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
32 Keep all service files (extensions, layout pages, deployment scripts etc)
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
33 in the `.aya` subdirectory.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
34
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
35 Define variables in the header of the content files using [YAML]:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
36
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
37 title: My web site
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
38 keywords: best website, hello, world
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
39 ---
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
40
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
41 Markdown text goes after a header *separator*
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
42
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
43 Use placeholders for variables and plugins in your markdown or html
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
44 files, e.g. `{{ title }}` or `{{ command arg1 arg2 }}.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
45
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
46 Write extensions in any language you like and put them into the `.aya`
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
47 subdiretory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
48
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
49 Everything the extensions prints to stdout becomes the value of the
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
50 placeholder.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
51
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
52 Every variable from the content header will be passed via environment variables like `title` becomes `$AYA_TITLE` and so on. There are some special variables:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
53
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
54 * `$AYA` - a path to the `aya` executable
74
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
55 * `$AYA\_OUTDIR` - a path to the directory with generated files
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
56 * `$AYA\_FILE` - a path to the currently processed markdown file
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
57 * `$AYA\_URL` - a URL for the currently generated page
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
58
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
59 ## Example of RSS generation
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
60
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
61 Extensions can be written in any language you know (Bash, Python, Lua, JavaScript, Go, even Assembler). Here's an example of how to scan all markdown blog posts and create RSS items:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
62
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
63 ``` bash
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
64 #!/bin/sh
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
65 echo "Generating RSS feed"
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
66
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
67 echo '<?xml version="1.0" encoding="utf-8"?>' > $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
68 echo '<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
69 echo '<channel>' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
70 for f in ./blog/*/*.md ; do
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
71 d=$($AYA var $f date)
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
72 if [ ! -z $d ] ; then
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
73 timestamp=`gdate --date "$d" +%s`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
74 url=`$AYA var $f url`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
75 title=`$AYA var $f title | tr A-Z a-z`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
76 descr=`$AYA var $f description`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
77 echo $timestamp "<item><title>$title</title><link>https://technicalmarisa.chaotic.ninja/blog/$url</link><description>$descr</description><pubDate>$(gdate --date @$timestamp -R)</pubDate><guid>http://technicalmarisa.chaotic.ninja/blog/$url</guid></item>"
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
78 fi
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
79 done | sort -r -n | cut -d' ' -f2- >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
80 echo '</channel>' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
81 echo '</rss>' >> $AYA_OUTDIR/blog/rss.xml
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
82 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
83
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
84 ## Hooks
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
85
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
86 There are two special plugin names that are executed every time the build
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
87 happens - `prehook` and `posthook`. You can define some global actions here like
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
88 content generation, or additional commands, like LESS to CSS conversion:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
89
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
90 # .aya/post
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
91
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
92 #!/bin/sh
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
93 lessc < $AYA_OUTDIR/styles.less > $AYA_OUTDIR/styles.css
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
94 rm -f $AYA_OUTDIR/styles.css
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
95
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
96 ## Extras
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
97
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
98 `aya` also supports generating `.html` and `.css` by means of using `.amber`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
99 and `.gcss` files. See more at [eknkc/amber](https://github.com/eknkc/amber) [yosssi/gcss](https://github.com/yosssi/gcss)
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
100
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
101 ## Command line usage
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
102
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
103 `aya build` re-builds your site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
104
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
105 `aya build <file>` re-builds one file and prints resulting content to stdout.
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
106
60
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
107 `aya serve` serves your site over HTTP.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
108
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
109 `aya var <filename> [var1 var2...]` prints a list of variables defined in the
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
110 header of a given markdown file, or the values of certain variables (even if
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
111 it's an empty string).
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
112
60
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
113 `aya watch` rebuilds your site every time you modify any file.
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
114
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
115 ## License
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
116
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
117 The software is distributed under the MIT license.
67
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
118
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
119 ---
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
120
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
121 Ayaya~