website/themes/serene/USAGE.md

379 lines
14 KiB
Markdown
Raw Normal View History

If you haven't created a zola site yet, create a new zola site with the following command (assuming your site is called `myblog`):
```sh
zola init myblog
```
Enter the directory:
```sh
cd myblog
```
Add the serene theme:
```sh
git submodule add -b latest https://github.com/isunjn/serene.git themes/serene
```
Copy the content of `myblog/themes/serene/config.example.toml` to `myblog/config.toml`, refer to the comments in the file and Zola's [documentation](https://www.getzola.org/documentation/getting-started/overview/) to modify accordingly
## Sections and pages
There is a `sections` config item in your `config.toml`, which enumerates the sections your website has. You should have at least one `blog` section. The name and path can be changed, be noticed that if you changed the blog section path (e.g. from `/blog` to `/posts`), then you should also change `blog_section_path` config item.
The myblog directory now looks like this:
```
├── config.toml
├── content/
├── sass/
├── static/
├── templates/
└── themes/
└── serene/
```
Create `myblog/content/_index.md` and `myblog/content/blog/_index.md` with the following content:
`myblog/content/_index.md`:
```
+++
template = 'home.html'
[extra]
lang = 'en'
+++
Words about you
```
`myblog/content/blog/_index.md`:
```
+++
title = "My Blog"
description = "My blog site."
sort_by = "date"
template = "blog.html"
page_template = "post.html"
insert_anchor_links = "right"
generate_feed = true
[extra]
lang = 'en'
+++
```
The path and the directory should match. If you changed the blog section path to `/posts`, then you create `myblog/content/posts/_index.md`, rather than `myblog/content/blog/_index.md`. The same goes for the others.
If you want to display a projects page (as you see in the demo site), also create `myblog/content/projects/_index.md`:
```
+++
title = "My Projects"
description = "My projects page."
template = "projects.html"
[extra]
lang = 'en'
+++
```
The `blog` and `projects` are two sections that serene supports by default, they have specific structures and styles, defined in template `blog.html` and `projects.html`.
Serene also support a special template called `prose.html`, it applies the same styles of blog post page and you can use it as a section template for a custom section page, for example if you want a separate `about` page, you can add a `{ name = "about", path = "/about", is_external = false }` to the `sections` config item and create a `myblog/content/about/_index.md` with the following content:
```
+++
title = "About me"
description = "A about page of ..."
template = "prose.html"
[extra]
lang = 'en'
math = false
mermaid = false
copy = false
comment = false
+++
Hi, My name is ....
(more markdown content goes here)
```
You may also create a `friends` page to list all your friends on the internet, a `collections/bookmarks` page to list your considered valuable bookmarks, a `cat` page to post a few pics of your lovely cat... In the future, serene may add more specific templates.
Now the myblog directory may looks like this:
```
├── config.toml
├── content/
│ ├── blog/
│ │ └── _index.md
│ ├── projects/
│ │ └── _index.md
│ ├── about/
│ │ └── _index.md
│ └── _index.md
├── sass/
├── static/
├── templates/
└── themes/
└── serene/
```
## Configuration
### Favicons
- Create a new directory `img` under `myblog/static`, put favicon related files here, you can use tools like [favicon.io](https://favicon.io/favicon-converter/) to generate those files
- Also put your avatar picture file `avatar.webp` here, webp format is recommended
```
...
├── static/
│ └── img/
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── apple-touch-icon.png
│ └── avatar. webp
...
```
### Icon
- Copy `myblog/themes/serene/static/icon` directory to `myblog/static/icon`, the icon value in `links` is the file name of the svg file in it, without the `.svg` suffix
- Find the svg file of the icon you want, modify its width and height to 24, and the color to currentColor:
`... width="24" height="24" ... fill="currentColor" ...`
- The default icons came from [Remix Icon](https://remixicon.com/)
### Code highlight
- Copy `myblog/themes/serene/highlight_themes` directory to `myblog/highlight_themes`.
- If you set `highlight_theme` in `config.toml` to one of zola's [built-in highlight themes](https://www.getzola.org/documentation/getting-started/configuration/#syntax-highlighting), you will get that theme used in both light and dark mode.
- By default serene use different themes for light/dark modes, configured by `highlight_theme`, `extra_syntaxes_and_themes` and `highlight_themes_css`. The default highlight theme `serene-light` `serene-dark` is a modified version of [Tomorrow](https://github.com/ChrisKempson/Tomorrow-Theme) theme.
- If you want a different theme, find the `.tmTheme` TextMate file of your theme, put it in `myblog/static/highlight_themes`, and then modify the `theme` value of `highlight_themes_css` to that file's name, without `.tmTheme` extension. This will generate a `hl-light.css` and a `hl-dark.css` file in `myblog/static/`, you may have to delete them first before you change the `theme` value, so zola can re-generate.
- You can find some TextMate themes on [this website](https://tmtheme-editor.glitch.me/).
### RSS
- You can add rss to your site, Zola's default feed file is located in the root directory of the site, set `generate_feed = true` in `config.toml`, `feed_filename` can be set to `atom.xml` or `rss.xml ` , corresponding to two different rss file standards, you should also set `generate_feed = false` in `myblog/content/blog/_index.md`
- The serene theme looks more like a personal website, the posts are in the `/blog` directory, you may want the feed file to be in the `/blog` directory instead of the root directory, this requires you to set `generate_feed = false ` `feed_filename = "feed.xml"` in `config.toml`, and set `generate_feed = true` in `myblog/content/blog/_index.md`
- `feed.xml` uses `title` and `description` from `myblog/content/blog/_index.md`, the other two use `config.toml`'s
### Projects page
- Serene has a projects page where you can showcase your projects, products, etc.
- Create a new `data.toml` under `myblog/content/projects/`, add projects information in it, the format is as follows:
```toml
[[project]]
name = ""
desc = ""
tags = ["", ""]
links = [
{ name = "", url = "" },
{ name = "", url = "" },
]
[[project]]
name = ""
desc = ""
tags = ["", ""]
links = [
{ name = "", url = "" },
{ name = "", url = "" },
]
```
### Outdated alert
- If one of your posts has strong timeliness, you can set an outdated alert to be displayed on the page after certain days
- `outdate_alert` and `outdate_alert_days` in `config.toml` set the default whether to be outdated and how many days to be outdated. These two can also be configured on a separate post, you can set `outdate_alert` in `config.toml` to `false`, and then enable it separately in the front matter of time-sensitive posts
- `outdate_alert_text_before` and `outdate_alert_text_after` are the specific content of the alert, before and after the number of days respectively
### Comments
- Serene supports using [giscus](https://giscus.app) as the comment system
- To enable it, you need to create `myblog/templates/_giscus_script.html` and put the script configured on the giscus website into it, then change the value of `data-theme` to `https://<your-domain-name>/giscus_light.css`, replace `<your-domain-name>` with you domain name, same as `base_url` in `config.toml`
- `comment = true` in `config.toml` sets all posts to enable comments, you can set `comment = false` under `[extra]` in the front matter of the post to control whether a specific post displays comments
### Analytics
- To place scripts for analytics tools (such as Google Anayltics, Umami, etc.), you can create a new `myblog/templates/_head_extend.html` and put the corresponding content in it. The content of this file will be added to the html head of each page
### Fonts
- Serene uses the Signika font of [Google Fonts](https://fonts.google.com/) by default. If you want a different font, create a new `myblog/templates/_custom_font.html` and put the font link tags you copied from google fonts website into it, and then modify `--main-font` or `--code-font` in `myblog/sass/main.scss`.
- For performance reason, you may want to self-host font files (optional):
1. Open [google-webfonts-helper](https://gwfh.mranftl.com) and choose your font
2. Modify `Customize folder prefix` of step 3 to `/font/` and then copy the css
3. Replace the content of `myblog/templates/_custom_font.html` with a `<style> </style>` tag, with the css you just copied in it.
4. Download step 4 font files and put them in `myblog/static/font/` folder
### Custom CSS
- Copy `myblog/themes/serene/templates/_custom_css.html` to `myblog/templates/_custom_css.html`, variables in this file are used to control styles, such as the theme color `--primary-color`, you can modify them as you want
- If you want to customize more, you only need to copy that file under the `templates`, `static`, `sass` directory in the corresponding `themes/serene` to the same name directory of `myblog`, and modify it. Be careful not to directly modify the files under the serene directory, because these modifications may cause conflicts if the theme is updated
### Homepage layout
- By default, homepage displays markdown content of your `myblog/content/_index.md`
- You can change `homepage_layout` in `config.toml` from `about` to `list`, then the blog post list will be displayed directly in the homepage
## Writing
### front matter
- The content inside the two `+++` at the top of the post markdown file is called front matter, and the supported configuration items are as follows:
```md
+++
title = ""
date = 2022-01-01
draft = true
[taxonomies]
categories = ["one"]
tags = ["one", "two", "three"]
[extra]
lang = "en"
toc = true
comment = true
copy = true
math = false
mermaid = false
outdate_alert = true
outdate_alert_days = 120
display_tags = true
truncate_summary = false
+++
new post about somthing...
<!-- more -->
more post content...
```
- You can add a `<!-- more -->` line, the content before it will become the summary/description of the post. You can set `truncate_summary = true` to remove the summary from the post webpage.
- Post files are created under `myblog/content/blog`, after done writing, change `draft` to false
### Shortcodes
- Zola supports 'shortcodes', which can be used to add some extra styles or templates in addition to the standard markdown format
- Zola support some [annotations for code blocks](https://www.getzola.org/documentation/content/syntax-highlighting/#annotations). Serene add another one to display the file name: `codeblock`, use it like this:
```md
{% codeblock(name="path/to/file") %}
// a markdown code block ...
{% end %}
```
- In addition to `![img](/path/to/img)` of standard markdown, serene also supports a `figure` shortcode to add some explanatory text to the image:
```md
{{ figure(src="/path/to/img", alt="alt text", caption="caption text") }}
```
This will be displayed as `<figure></figure>` in HTML on the web page instead of `<img>`, and the content of the caption will be centered below the image. The alt attribute is optional but recommended to help enhance accessibility
Adding attribution information to a image is very common, you can directly use the `via` attribute, which will display a link named via below the image:
```md
{{ figure(src="/path/to/img", alt="some alt text", via="https://example.com") }}
```
### Callout
- Serene also uses shortcodes to implement callouts, the effect is shown in [this page](https://serene-demo-site.vercel.app/blog/callouts) of the demo site, there are currently 6 types: `note` `important ` `warning` `alert` `question` `tip`, the format is as follows, the header attribute is optional:
```md
{% note(header="Note") %}
note text
{% end %}
```
- If people read your posts via rss reader, these callouts will appear as normal `<blockquote>`
### KaTeX
- Set `math = true` in the front matter to enable [KaTeX](https://katex.org/) support
- Inline formula `$...$`, block-level formula `$$...$$`
### Mermaid
- Set `mermaid = true` in the front matter to enable [Mermaid](https://github.com/mermaid-js/mermaid) support, and then insert a chart in the following format:
```md
{% mermaid() %}
flowchart LR
A[Hard] -->|Text| B(Round)
B --> C{Decision}
C -->|One| D[Result 1]
C -->|Two| E[Result 2]
{% end %}
```
## Build & Deploy
Local preview:
```sh
zola serve
```
Build the site:
```sh
zola build
```
To deploy a static site, please refer to zola's [documentation about deployment](https://www.getzola.org/documentation/deployment/overview/)
## Update
- Please check the [CHANGELOG.md](https://github.com/isunjn/serene/blob/main/CHANGELOG.md) on github for breaking changes before updating the theme
- If you copied some files from `myblog/themes/serene` to `myblog/` for customization, such as `_custom_css.html` or `main.scss`, then you should record what you have modified before you update, re-copy those files and re-apply your modification after updating. The `config.toml` should be re-copied too.
- You can watch (`watch > custom > releases > apply`) this project on github to be reminded of a new release
```sh
git submodule update --remote themes/serene
```
<br />
*Happy blogging :)*
<br />