annotate README.md @ 89:744541fee713 draft

Ayaya, why did I do that again?
author yakumo.izuru
date Sun, 04 May 2025 02:19:10 +0000
parents 01ae2ad18ed1
children 82986500ae71
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
86
897d57a7ec95 Add support for disabling features at build time
yakumo.izuru
parents: 83
diff changeset
18 Build it manually provided you have Go (>=1.17) installed:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
19
88
01ae2ad18ed1 風神「嵐の日」
yakumo.izuru
parents: 86
diff changeset
20 $ go install mahou-no-mori.yakumo.dev/aya/cmd/aya@latest (1)
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
21 --- or ---
88
01ae2ad18ed1 風神「嵐の日」
yakumo.izuru
parents: 86
diff changeset
22 $ git clone https://git.yakumo.dev/yakumo.izuru/aya
64
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
86
897d57a7ec95 Add support for disabling features at build time
yakumo.izuru
parents: 83
diff changeset
30 You can also disable certain features at build time, with the `-tags` switch.
897d57a7ec95 Add support for disabling features at build time
yakumo.izuru
parents: 83
diff changeset
31 Currently, these tags are available: `noamber`, `nogcss`.
897d57a7ec95 Add support for disabling features at build time
yakumo.izuru
parents: 83
diff changeset
32 See `go help buildconstraint` for more details.
897d57a7ec95 Add support for disabling features at build time
yakumo.izuru
parents: 83
diff changeset
33
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
34 ## Ideology
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
35
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
36 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
37 of your blog/site.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
38
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
39 Keep all service files (extensions, layout pages, deployment scripts etc)
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
40 in the `.aya` subdirectory.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
41
86
897d57a7ec95 Add support for disabling features at build time
yakumo.izuru
parents: 83
diff changeset
42 Define variables in the header of the content files using [YAML](https://noyaml.com) :
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
43
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
44 ```markdown
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
45 title: My web site
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
46 keywords: best website, hello, world
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
47 ---
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
48
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
49 Markdown text goes after a header *separator*
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
50 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
51
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
52 Use placeholders for variables and plugins in your markdown or html
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
53 files, e.g. `{{ title }}` or `{{ command arg1 arg2 }}.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
54
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
55 Write extensions in any language you like and put them into the `.aya`
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
56 subdiretory.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
57
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
58 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
59 placeholder.
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
60
80
ab4829ba7a8a Update README
yakumo.izuru
parents: 79
diff changeset
61 Every variable from the content header will be passed via environment variables like `title` becomes `$AYA_TITLE` and so on.
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
62 There are some special variables:
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
63
55
c6785950280e The fastest, period.
yakumo.izuru
parents: 47
diff changeset
64 * `$AYA` - a path to the `aya` executable
80
ab4829ba7a8a Update README
yakumo.izuru
parents: 79
diff changeset
65 * `$AYA_OUTDIR` - a path to the directory with generated files
ab4829ba7a8a Update README
yakumo.izuru
parents: 79
diff changeset
66 * `$AYA_FILE` - a path to the currently processed markdown file
ab4829ba7a8a Update README
yakumo.izuru
parents: 79
diff changeset
67 * `$AYA_URL` - a URL for the currently generated page
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
68
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
69 ## Example of RSS generation
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
70
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
71 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
72
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
73 ``` bash
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
74 #!/bin/sh
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
75 echo "Generating RSS feed"
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
76
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
77 echo '<?xml version="1.0" encoding="utf-8"?>' > $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
78 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
79 echo '<channel>' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
80 for f in ./blog/*/*.md ; do
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
81 d=$($AYA var $f date)
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
82 if [ ! -z $d ] ; then
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
83 timestamp=`gdate --date "$d" +%s`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
84 url=`$AYA var $f url`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
85 title=`$AYA var $f title | tr A-Z a-z`
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
86 descr=`$AYA var $f description`
88
01ae2ad18ed1 風神「嵐の日」
yakumo.izuru
parents: 86
diff changeset
87 echo $timestamp "<item><title>$title</title><link>https://technicalmarisa.yakumo.dev/blog/$url</link><description>$descr</description><pubDate>$(gdate --date @$timestamp -R)</pubDate><guid>http://technicalmarisa.yakumo.dev/blog/$url</guid></item>"
64
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
88 fi
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
89 done | sort -r -n | cut -d' ' -f2- >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
90 echo '</channel>' >> $AYA_OUTDIR/blog/rss.xml
0716397c44e8 Update documentation
yakumo.izuru
parents: 60
diff changeset
91 echo '</rss>' >> $AYA_OUTDIR/blog/rss.xml
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
92 ```
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
93
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
94 ## Hooks
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
95 There are two special plugin names that are executed every time the build
38
ea1bcd29a195 updated README
zaitsev.serge
parents: 12
diff changeset
96 happens - `prehook` and `posthook`. You can define some global actions here like
83
d8c30f64e301 何をしていたか忘れてしまった
yakumo.izuru
parents: 80
diff changeset
97 content generation, or additional commands, like LESS to CSS conversion
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
98
79
7b122b71fcfa A good time to finally release a stable version
yakumo.izuru
parents: 74
diff changeset
99 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
100
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
101 ## Command line usage
83
d8c30f64e301 何をしていたか忘れてしまった
yakumo.izuru
parents: 80
diff changeset
102 Read `aya(1)`
60
cf7277e42ece Add serve function, update documentation accordingly
yakumo.izuru
parents: 55
diff changeset
103
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
104 ## License
83
d8c30f64e301 何をしていたか忘れてしまった
yakumo.izuru
parents: 80
diff changeset
105 The software is distributed under the [MIT/X11](LICENSE) license.
8
90f73028f891 added readme
zaitsev.serge
parents:
diff changeset
106
67
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
107 ---
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
108
4edfa07d5fe0 bfchroma turned out to be a hassle
yakumo.izuru
parents: 65
diff changeset
109 Ayaya~