hugo-book-theme/README.md

330 lines
9.9 KiB
Markdown
Raw Normal View History

2018-09-13 18:07:55 +02:00
# Hugo Book Theme
2019-12-01 14:54:37 +01:00
[![Hugo](https://img.shields.io/badge/hugo-0.60-blue.svg)](https://gohugo.io)
2019-05-24 15:08:25 +02:00
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
2018-09-17 15:09:51 +02:00
### [Hugo](https://gohugo.io) documentation theme as simple as plain book
2018-09-13 18:07:55 +02:00
2018-10-30 16:37:38 +01:00
![Screenshot](https://github.com/alex-shpak/hugo-book/blob/master/images/screenshot.png)
2018-09-13 18:07:55 +02:00
- [Features](#features)
2019-10-09 00:05:30 +02:00
- [Requirements](#requirements)
- [Installation](#installation)
- [Menu](#menu)
2019-10-09 00:05:30 +02:00
- [Blog](#blog)
- [Configuration](#configuration)
- [Shortcodes](#shortcodes)
- [Contributing](#contributing)
2018-09-13 18:07:55 +02:00
## Features
- Clean simple design
2019-10-09 00:05:30 +02:00
- Light and Mobile-Friendly
2019-11-14 00:48:11 +01:00
- Multi-language support
- Customisable
- Zero initial configuration
- Handy shortcodes
## Requirements
2018-09-17 15:33:04 +02:00
2019-12-01 19:31:27 +01:00
- Hugo 0.60 or higher
- Hugo extended version, read more [here](https://gohugo.io/news/0.48-relnotes/)
2018-09-13 18:07:55 +02:00
## Installation
Navigate to your hugo project root and run:
2018-09-13 18:07:55 +02:00
```
2018-11-08 16:03:48 +01:00
git submodule add https://github.com/alex-shpak/hugo-book themes/book
2018-09-13 18:07:55 +02:00
```
Then run hugo (or set `theme = "book"`/`theme: book` in configuration file)
2018-09-17 15:09:51 +02:00
```
hugo server --minify --theme book
2018-09-17 15:09:51 +02:00
```
2018-09-13 18:07:55 +02:00
### Creating site from scratch
Below is example how to create new site from scratch
```sh
hugo new site mydocs; cd mydocs
git init
git submodule add https://github.com/alex-shpak/hugo-book themes/book
cp -R themes/book/exampleSite/content .
```
```sh
hugo server --minify --theme book
```
2018-09-17 15:33:04 +02:00
## Menu
2018-09-17 15:09:51 +02:00
### File tree menu (default)
2018-09-17 15:09:51 +02:00
By default theme will render pages from `content/docs` section as menu in a tree structure.
You can set `title` and `weight` in front matter of pages to adjust order and titles in menu.
2018-09-13 18:07:55 +02:00
2018-09-17 15:09:51 +02:00
### Leaf bundle menu
You can also use leaf bundle and content of it's `index.md` as menu.
2018-09-17 15:33:04 +02:00
Given you have this file structure
2018-09-17 15:33:04 +02:00
```
├── content
│ ├── docs
│ │ ├── page-one.md
│ │ └── page-two.md
│ └── posts
│ ├── post-one.md
│ └── post-two.md
2018-09-17 15:33:04 +02:00
```
Create file `content/docs/menu/index.md` with content
2018-09-17 15:33:04 +02:00
```md
+++
headless = true
+++
2018-09-18 01:35:54 +02:00
2019-10-09 00:05:30 +02:00
- [Book Example]({{< relref "/docs/" >}})
- [Page One]({{< relref "/docs/page-one" >}})
- [Page Two]({{< relref "/docs/page-two" >}})
- [Blog]({{< relref "/posts" >}})
2018-09-17 15:33:04 +02:00
```
And Enable it by settings `BookMenuBundle: /menu` in Site configuration
2018-09-17 15:33:04 +02:00
2018-10-31 13:12:01 +01:00
- [Example menu](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/content/menu/index.md)
- [Example config file](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml)
2018-09-17 15:09:51 +02:00
- [Leaf bundles](https://gohugo.io/content-management/page-bundles/)
2018-09-13 18:07:55 +02:00
## Blog
2018-09-13 18:07:55 +02:00
Simple blog supported for section `posts`.
Blog is not primary use case so book theme so it has only minimal features
2018-09-17 15:33:04 +02:00
## Configuration
2018-09-17 15:33:04 +02:00
### Site Configuration
There are few configuration options you can add to your `config.toml` file.
You can also see `yaml` example [here](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml).
```toml
# (Optional) Set Google Analytics if you use it to track your website.
# Always put it on the top of the configuration file, otherwise it won't work
googleAnalytics = "UA-XXXXXXXXX-X"
2019-05-01 02:10:42 +02:00
# (Optional) Set this to true if you use capital letters in file names
disablePathToLower = true
2018-09-13 18:07:55 +02:00
# (Optional) Set this to true to enable 'Last Modified by' date and git author
# information on 'doc' type pages.
enableGitInfo = true
# (Optional) Theme is intended for documentation use, therefore it doesn't render taxonomy.
# You can remove related files with config below
disableKinds = ['taxonomy', 'taxonomyTerm']
[params]
# (Optional, default 6) Set how many table of contents levels to be showed on page.
# Use false to hide ToC, note that 0 will default to 6 (https://gohugo.io/functions/default/)
# You can also specify this parameter per page in front matter
BookToC = 3
# (Optional, default none) Set the path to a logo for the book. If the logo is
# /static/logo.png then the path would be 'logo.png'
BookLogo = 'logo.png'
# (Optional, default none) Set leaf bundle to render as side menu
# When not specified file structure and weights will be used
BookMenuBundle = '/menu'
# (Optional, default docs) Specify section of content to render as menu
# You can also set value to "*" to render all sections to menu
BookSection = 'docs'
# Set source repository location.
# Used for 'Last Modified' and 'Edit this page' links.
BookRepo = 'https://github.com/alex-shpak/hugo-book'
# Enable 'Edit this page' links for 'doc' page type.
# Disabled by default. Uncomment to enable. Requires 'BookRepo' param.
# Path must point to 'content' directory of repo.
BookEditPath = 'edit/master/exampleSite/content'
# (Optional, default January 2, 2006) Configure the date format used on the pages
# - In git information
# - In blog posts
BookDateFormat = 'Jan 2, 2006'
2019-11-14 00:23:01 +01:00
# (Optional, default true) Enables search function with flexsearch,
# Index is built on fly, therefore it might slowdown your website.
BookSearch = true
2018-09-13 18:07:55 +02:00
```
2019-11-16 21:48:35 +01:00
### Multi-Language Support
Theme supports Hugo's [multilingual mode](https://gohugo.io/content-management/multilingual/), just follow configuration guide there. You can also tweak search indexing configuration per language in `i18n` folder.
2018-09-17 15:33:04 +02:00
### Page Configuration
2018-09-17 15:33:04 +02:00
You can specify additional params per page in front matter
```toml
2018-09-17 15:33:04 +02:00
# Set type to 'docs' if you want to render page outside of configured section or if you render section other than 'docs'
type = 'docs'
2018-09-13 18:07:55 +02:00
# Set page weight to re-arrange items in file-tree menu (if BookMenuBundle not set)
weight = 10
2018-09-13 18:07:55 +02:00
2018-09-28 01:12:07 +02:00
# (Optional) Set to mark page as flat section in file-tree menu (if BookMenuBundle not set)
bookFlatSection = true
2018-09-13 18:07:55 +02:00
# (Optional, Experimental) Set to hide nested sections or pages at that level. Works only with file-tree menu mode
bookCollapseSection = true
# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set)
bookHidden = true
# (Optional) Set how many levels of ToC to show. use 'false' to hide ToC completely
bookToC = 3
```
2018-09-17 15:09:51 +02:00
### Partials
2018-09-17 15:19:18 +02:00
There are few empty partials you can override in `layouts/partials/`
2018-09-17 15:09:51 +02:00
| Partial | Placement |
| ----------------------------------------------- | -------------------------------------- |
| `layouts/partials/docs/inject/head.html` | Before closing `<head>` tag |
| `layouts/partials/docs/inject/body.html` | Before closing `<body>` tag |
| `layouts/partials/docs/inject/footer.html` | After page content |
| `layouts/partials/docs/inject/menu-before.html` | At the beginning of `<nav>` menu block |
| `layouts/partials/docs/inject/menu-after.html` | At the end of `<nav>` menu block |
2018-09-17 15:09:51 +02:00
### Extra Customisation
| File | Description |
| ------------------------ | ------------------------------------------------------------------------------------- |
| `static/favicon.png` | Override default favicon |
| `assets/_custom.scss` | Customise or override scss styles |
| `assets/_variables.scss` | Override default SCSS variables |
| `assets/_fonts.scss` | Replace default font with custom fonts (e.g. local files or remote like google fonts) |
### Hugo Internal Templates
There are few hugo tempaltes inserted in `<head>`
- [Google Analytics](https://gohugo.io/templates/internal/#google-analytics)
- [Open Graph](https://gohugo.io/templates/internal/#open-graph)
## Shortcodes
2019-10-03 18:15:24 +02:00
### Hint
2019-10-03 18:15:24 +02:00
Hint shortcode can be used as hint/alerts/notification block. There are 3 colors to choose: `info`, `warning` and `danger`.
2019-10-03 18:15:24 +02:00
```tpl
{{< hint [info|warning|danger] >}}
**Markdown content**
Lorem markdownum insigne. Olympo signis Delphis! Retexi Nereius nova develat
stringit, frustra Saturnius uteroque inter! Oculis non ritibus Telethusa
{{< /hint >}}
```
2019-10-03 18:15:24 +02:00
### Buttons
Buttons are styled links to internal of external pages
```
2019-10-03 18:15:24 +02:00
{{< button relref="/" >}}Get Home{{< /button >}}
{{< button href="https://github.com/alex-shpak/hugo-book" >}}Contribute{{< /button >}}
```
### Tabs
Useful if you want to show alternative information per platform or setting.
```
{{< tabs "uniqueid" >}}
{{< tab "MacOS" >}} # MacOS Content {{< /tab >}}
{{< tab "Linux" >}} # Linux Content {{< /tab >}}
{{< tab "Windows" >}} # Windows Content {{< /tab >}}
{{< /tabs >}}
```
### Multi column text
Organize text in 2 or more columns to use space efficiently.
```html
{{< columns >}} <!-- begin columns block -->
# Left Content Lorem markdownum insigne...
2019-06-03 22:54:02 +02:00
<---> <!-- magic sparator, between columns -->
# Mid Content Lorem markdownum insigne...
<---> <!-- magic sparator, between columns -->
# Right Content Lorem markdownum insigne...
{{< /columns >}}
```
2019-10-03 18:15:24 +02:00
### Expand
Provides clickable panel that show extra hidden content.
```
{{< expand >}}
## Markdown content
{{< /expand >}}
```
2019-09-26 15:42:09 +02:00
### Mermaid Charts
Render various charts with [mermaidjs](https://mermaidjs.github.io/)
```
{{< mermaid >}}
sequenceDiagram
Alice->>Bob: Hello Bob, how are you?
alt is sick
Bob->>Alice: Not so good :(
else is well
Bob->>Alice: Feeling fresh like a daisy
end
opt Extra response
Bob->>Alice: Thanks for asking
end
{{< /mermaid >}}
```
2019-08-22 23:59:51 +02:00
### KaTeX Syntax
Render math formulas with [KaTeX](https://katex.org/)
```
{{< katex >}}
x = \begin{cases}
2019-08-22 23:59:51 +02:00
a &\text{if } b \\
c &\text{if } d
\end{cases}
2019-08-22 23:59:51 +02:00
{{< /katex >}}
```
2018-09-17 15:09:51 +02:00
## Contributing
2019-04-23 22:30:24 +02:00
### [Extra credits to contributors](https://github.com/alex-shpak/hugo-book/graphs/contributors)
2019-04-09 23:04:52 +02:00
2018-09-17 15:09:51 +02:00
Contributions are welcome and I will review and consider pull requests.
Primary goals are:
- Keep it simple
- Keep minimal (or zero) default configuration
- Avoid interference with user-defined layouts
2018-09-13 18:07:55 +02:00
Feel free to open issue if you missing some configuration or customisation option.