annotate README.md @ 79:7b122b71fcfa draft

A good time to finally release a stable version Signed-off-by: Izuru Yakumo <yakumo.izuru@chaotic.ninja>
author yakumo.izuru
date Tue, 12 Dec 2023 14:09:17 +0000
parents d8727551f403
children ab4829ba7a8a
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
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
20 $ go install marisa.chaotic.ninja/aya/cmd/aya@latest (1)
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
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
26
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
27 (1) If you use this method, the `aya version` subcommand may print the wrong string,
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
28 but it should not be a problem unless you use it on a page.
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
29
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
30 ## Ideology
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
31
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
32 Keep your texts in markdown, [amber](https://github.com/eknkc/amber), or html format right in the main directory
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
33 of your blog/site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
34
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
35 Keep all service files (extensions, layout pages, deployment scripts etc)
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
36 in the `.aya` subdirectory.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
37
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
38 Define variables in the header of the content files using [YAML](https://www.yaml.io) :
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
39
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
40 ```markdown
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
41 title: My web site
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
42 keywords: best website, hello, world
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
43 ---
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
44
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
45 Markdown text goes after a header *separator*
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
46 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
47
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
48 Use placeholders for variables and plugins in your markdown or html
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
49 files, e.g. `{{ title }}` or `{{ command arg1 arg2 }}.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
50
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
51 Write extensions in any language you like and put them into the `.aya`
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
52 subdiretory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
53
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
54 Everything the extensions prints to [stdout](https://man.freebsd.org/cgi/man.cgi?fd) becomes the value of the
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
55 placeholder.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
56
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
57 Every variable from the content header will be passed via environment variables like `title` becomes `$AYA\_TITLE` and so on.
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
58 There are some special variables:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
59
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
60 * `$AYA` - a path to the `aya` executable
74
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
61 * `$AYA\_OUTDIR` - a path to the directory with generated files
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
62 * `$AYA\_FILE` - a path to the currently processed markdown file
d8727551f403 The Empress (III)
yakumo.izuru
parents: 67
diff changeset
63 * `$AYA\_URL` - a URL for the currently generated page
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
64
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
65 ## Example of RSS generation
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
66
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
67 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
68
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
69 ``` bash
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
70 #!/bin/sh
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
71 echo "Generating RSS feed"
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
72
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
73 echo '<?xml version="1.0" encoding="utf-8"?>' > $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
74 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
75 echo '<channel>' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
76 for f in ./blog/*/*.md ; do
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
77 d=$($AYA var $f date)
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
78 if [ ! -z $d ] ; then
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
79 timestamp=`gdate --date "$d" +%s`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
80 url=`$AYA var $f url`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
81 title=`$AYA var $f title | tr A-Z a-z`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
82 descr=`$AYA var $f description`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
83 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
84 fi
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
85 done | sort -r -n | cut -d' ' -f2- >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
86 echo '</channel>' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
87 echo '</rss>' >> $AYA_OUTDIR/blog/rss.xml
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
88 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
89
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
90 ## Hooks
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
91
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
92 There are two special plugin names that are executed every time the build
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
93 happens - `prehook` and `posthook`. You can define some global actions here like
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
94 content generation, or additional commands, like LESS to CSS conversion:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
95
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
96 # .aya/post
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
97
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
98 #!/bin/sh
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
99 lessc < $AYA_OUTDIR/styles.less > $AYA_OUTDIR/styles.css
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
100 rm -f $AYA_OUTDIR/styles.css
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
101
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
102 Note, you can also place `.gcss` files for [gcss](https://github.com/yosssi/gcss) to process instead
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
103
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
104 ## Command line usage
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
105
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
106 `aya build` re-builds your site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
107
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
108 `aya build <file>` re-builds one file and prints resulting content to stdout.
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
109
60
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
110 `aya serve` serves your site over HTTP.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
111
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
112 `aya var <filename> [var1 var2...]` prints a list of variables defined in the
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
113 header of a given markdown file, or the values of certain variables (even if
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
114 it's an empty string).
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
115
60
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
116 `aya watch` rebuilds your site every time you modify any file.
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
117
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
118 ## License
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
119
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
120 The software is distributed under the MIT license.
67
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
121
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
122 ---
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
123
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
124 Ayaya~