My website

Hi there

Welcome to the homepage.

I hope you enjoy my website.

By the way, here are my most recent blog posts:

  1. My third blog post (2026-03-15 02:13)
  2. My second post (2026-03-15 02:13)
  3. My first blog entry (2026-03-15 02:13)

The inclusion above is an autogenerated list of blog posts (see content/blog/mkblog.sh, which is invoked by make). When including files using {{##filename##}}, cyc looks for filename in

  1. … the folder of the source file,
  2. meta/,
  3. template/,
  4. static/,
  5. … in the present working directory of cyc.

The latter allows you include any file using absolute paths.

You can also run commands with {{^^command^^}}. However, this feature is quite limited: For reasons of simplicity and safety, cyc only allows a single command with at most one argument. If you need more complex tasks, you should write your own shell script. The name of the calling page in content/ is supplied via the environment variable CYC_FILE. If you provide an argument like {{^^command argument^^}}, it will be available as CYC_ARG. For example, the reversed title of this page is ereht iH. This is accomplished by the script bin/reverse_title.sh, which you should check out.

In this example setup, the default value for the "Last updated" field can be overriden by writing to file.html.utime. The value is obtained from running the script bin/last_updated.sh using the above methodology. See this page for an example (1337-02-28 16:20). If the value is not overriden, the script defaults to the modification time. Inside the script, there is also an example on how to obtain this time from git commits. Of course, it is not at all mandatory to use the "Last updated" field. Feel free to just remove {{^^bin/last_updated.sh^^}} from your templates or to customize bin/last_updated.sh utterly so that it fits your needs.

Fields like {{!!title!!}} are replaced with the content of file.html.title, which can be in meta/ or content/. It is recommended to put field data into meta/ to prevent cluttering content/.

For blog entries, the "Last updated" field might be more important. When no custom template is specified in file.html.template and multiple default templates are available, cyc tries to match the source file with a template in template/. For example, content/blog/first.html will use the template in template/blog/default.html. However, if only template/default.html existed, that template would be used instead. Try it out yourself! Note how content/blog/index.html has a custom .template file to ensure that it uses the non-blog default.