2018-09-13 18:07:55 +02:00
# Hugo Book Theme
2019-05-22 09:23:16 +02:00
2020-05-17 13:18:34 +02:00
[![Hugo ](https://img.shields.io/badge/hugo-0.68-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)
2020-04-28 22:10:01 +02:00
![Build with Hugo ](https://github.com/alex-shpak/hugo-book/workflows/Build%20with%20Hugo/badge.svg )
2019-05-22 09:23:16 +02:00
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
2019-05-24 14:07:44 +02:00
- [Features ](#features )
2019-10-09 00:05:30 +02:00
- [Requirements ](#requirements )
2019-05-24 14:07:44 +02:00
- [Installation ](#installation )
- [Menu ](#menu )
2019-10-09 00:05:30 +02:00
- [Blog ](#blog )
2019-05-24 14:07:44 +02:00
- [Configuration ](#configuration )
- [Shortcodes ](#shortcodes )
2020-02-10 23:31:33 +01:00
- [Versioning ](#versioning )
2019-05-24 14:07:44 +02:00
- [Contributing ](#contributing )
2018-09-13 18:07:55 +02:00
## Features
2019-05-22 09:23:16 +02:00
- 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
2019-05-22 09:23:16 +02:00
- Customisable
- Zero initial configuration
2019-05-24 14:07:44 +02:00
- Handy shortcodes
2020-02-10 23:31:33 +01:00
- Comments support
- Simple blog and taxonomy
- Primary features work without JavaScript
2020-03-28 21:24:59 +01:00
- Dark Mode
2019-03-29 16:15:43 +01:00
2019-01-21 21:46:06 +01:00
## Requirements
2018-09-17 15:33:04 +02:00
2020-05-17 13:18:34 +02:00
- Hugo 0.68 or higher
2019-05-24 14:07:44 +02:00
- Hugo extended version, read more [here ](https://gohugo.io/news/0.48-relnotes/ )
2019-03-29 16:15:43 +01:00
2018-09-13 18:07:55 +02:00
## Installation
2019-05-22 09:23:16 +02:00
2019-03-29 16:15:43 +01:00
Navigate to your hugo project root and run:
2019-05-22 09:23:16 +02:00
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
```
2019-05-24 14:07:44 +02:00
Then run hugo (or set `theme = "book"` /`theme: book` in configuration file)
2019-05-22 09:23:16 +02:00
2018-09-17 15:09:51 +02:00
```
2019-04-22 19:17:39 +02:00
hugo server --minify --theme book
2018-09-17 15:09:51 +02:00
```
2018-09-13 18:07:55 +02:00
2019-03-29 16:15:43 +01:00
### Creating site from scratch
2019-05-22 09:23:16 +02:00
2020-07-29 13:37:55 +02:00
Below is an example on how to create a new site from scratch:
2019-05-22 09:23:16 +02:00
2019-03-29 16:15:43 +01:00
```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 .
```
2019-05-22 09:23:16 +02:00
2019-03-29 16:15:43 +01:00
```sh
2019-04-22 19:17:39 +02:00
hugo server --minify --theme book
2019-03-29 16:15:43 +01:00
```
2018-09-17 15:33:04 +02:00
## Menu
2019-05-22 09:23:16 +02:00
2018-09-17 15:09:51 +02:00
### File tree menu (default)
2019-05-22 09:23:16 +02:00
2020-07-29 13:37:55 +02:00
By default, the theme will render pages from the `content/docs` section as a menu in a tree structure.
You can set `title` and `weight` in the front matter of pages to adjust the order and titles in the menu.
2018-09-13 18:07:55 +02:00
2018-09-17 15:09:51 +02:00
### Leaf bundle menu
2019-05-22 09:23:16 +02:00
2020-07-29 13:37:55 +02:00
You can also use leaf bundle and the content of its `index.md` file as menu.
Given you have the following file structure:
2019-05-22 09:23:16 +02:00
2018-09-17 15:33:04 +02:00
```
├── content
2019-01-24 22:54:33 +01:00
│ ├── docs
│ │ ├── page-one.md
│ │ └── page-two.md
│ └── posts
│ ├── post-one.md
│ └── post-two.md
2018-09-17 15:33:04 +02:00
```
2020-07-29 13:37:55 +02:00
Create a file `content/menu/index.md` with the content:
2019-05-22 09:23:16 +02:00
2018-09-17 15:33:04 +02:00
```md
2019-05-22 09:23:16 +02:00
+++
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
```
2020-07-29 13:37:55 +02:00
And Enable it by setting `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 )
2019-05-22 10:23:34 +02:00
- [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
2019-01-24 22:54:33 +01:00
## Blog
2018-09-13 18:07:55 +02:00
2020-07-29 13:37:55 +02:00
A simple blog is supported in the section `posts` .
A blog is not the primary usecase of this theme, so it has only minimal features.
2019-03-29 16:15:43 +01:00
2018-09-17 15:33:04 +02:00
## Configuration
2019-05-22 09:23:16 +02:00
2018-09-17 15:33:04 +02:00
### Site Configuration
2019-05-22 09:23:16 +02:00
2020-07-29 13:37:55 +02:00
There are a few configuration options that you can add to your `config.toml` file.
You can also see the `yaml` example [here ](https://github.com/alex-shpak/hugo-book/blob/master/exampleSite/config.yaml ).
2019-05-22 09:23:16 +02:00
```toml
2019-10-04 09:52:51 +02:00
# (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"
2020-01-13 17:46:19 +01:00
# (Optional) If you provide a Disqus shortname, comments will be enabled on
# all pages.
disqusShortname = "my-site"
2019-05-01 02:10:42 +02:00
# (Optional) Set this to true if you use capital letters in file names
2019-05-22 09:23:16 +02:00
disablePathToLower = true
2018-09-13 18:07:55 +02:00
2018-12-15 04:57:21 +01:00
# (Optional) Set this to true to enable 'Last Modified by' date and git author
2018-12-15 04:55:48 +01:00
# information on 'doc' type pages.
2019-05-22 09:23:16 +02:00
enableGitInfo = true
2018-12-15 04:55:48 +01:00
2019-05-22 10:42:48 +02:00
# (Optional) Theme is intended for documentation use, therefore it doesn't render taxonomy.
# You can remove related files with config below
2019-05-22 09:26:46 +02:00
disableKinds = ['taxonomy', 'taxonomyTerm']
2019-10-08 17:03:40 +02:00
2019-05-22 09:23:16 +02:00
[params]
2020-01-24 00:36:26 +01:00
# (Optional, default true) Controls table of contents visibility on right side of pages.
# Start and end levels can be controlled with markup.tableOfContents setting.
# You can also specify this parameter per page in front matter.
BookToC = true
2019-10-08 17:03:40 +02:00
# (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.
2020-05-11 11:17:31 +02:00
# Path must point to the site directory.
BookEditPath = 'edit/master/exampleSite'
2019-10-08 17:03:40 +02:00
# (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,
2019-10-08 17:03:40 +02:00
# Index is built on fly, therefore it might slowdown your website.
2020-02-04 22:24:36 +01:00
# Configuration for indexing can be adjusted in i18n folder per language.
2019-10-08 17:03:40 +02:00
BookSearch = true
2020-01-13 17:55:24 +01:00
2020-01-17 21:44:25 +01:00
# (Optional, default true) Enables comments template on pages
2020-07-23 11:18:18 +02:00
# By default partials/docs/comments.html includes Disqus template
2020-01-13 17:55:24 +01:00
# See https://gohugo.io/content-management/comments/#configure-disqus
# Can be overwritten by same param in page frontmatter
2020-01-17 21:44:25 +01:00
BookComments = true
2020-03-07 18:47:16 +01:00
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables portable links and link checks in markdown pages.
# Portable links meant to work with text editors and let you write markdown without {{< relref > }} shortcode
# Theme will print warning if page referenced in markdown does not exists.
BookPortableLinks = true
2020-04-12 20:50:03 +02:00
# /!\ This is an experimental feature, might be removed or changed at any time
# (Optional, experimental, default false) Enables service worker that caches visited pages and resources for offline use.
BookServiceWorker = true
2018-09-13 18:07:55 +02:00
```
2019-11-16 21:48:35 +01:00
### Multi-Language Support
2020-07-29 13:37:55 +02:00
2019-11-16 21:48:35 +01:00
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
2019-05-22 09:23:16 +02:00
2020-07-29 13:37:55 +02:00
You can specify additional params in the front matter of individual pages:
2019-05-22 09:23:16 +02:00
2019-05-22 10:23:34 +02:00
```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'
2019-05-22 09:26:46 +02:00
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)
2019-05-22 09:23:16 +02:00
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)
2019-05-22 09:23:16 +02:00
bookFlatSection = true
2018-09-13 18:07:55 +02:00
2019-10-09 01:00:26 +02:00
# (Optional, Experimental) Set to hide nested sections or pages at that level. Works only with file-tree menu mode
bookCollapseSection = true
2019-04-30 22:16:02 +02:00
# (Optional) Set true to hide page or section from side menu (if BookMenuBundle not set)
2019-05-22 09:23:16 +02:00
bookHidden = true
2019-04-30 22:16:02 +02:00
2020-01-24 00:36:26 +01:00
# (Optional) Set 'false' to hide ToC from page
2020-01-24 00:07:47 +01:00
bookToC = true
2020-01-13 17:46:19 +01:00
2020-01-17 21:44:25 +01:00
# (Optional) If you have enabled BookComments for the site, you can disable it for specific pages.
bookComments = true
2019-05-22 09:23:16 +02:00
```
2019-03-29 16:15:43 +01:00
2018-09-17 15:09:51 +02:00
### Partials
2018-09-17 15:19:18 +02:00
2019-05-22 09:23:16 +02:00
There are few empty partials you can override in `layouts/partials/`
2018-09-17 15:09:51 +02:00
2020-02-23 13:29:58 +01: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 footer 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 |
| `layouts/partials/docs/inject/content-before.html` | Before page content |
| `layouts/partials/docs/inject/content-after.html` | After page content |
2018-09-17 15:09:51 +02:00
2019-05-14 03:57:03 +02:00
### Extra Customisation
2019-04-09 22:50:25 +02:00
2019-10-09 01:00:26 +02:00
| 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) |
2019-04-09 22:50:25 +02:00
2020-02-10 23:31:33 +01:00
### Plugins
2020-07-29 13:37:55 +02:00
There are a few features implemented as plugable `scss` styles. Usually these are features that don't make it to the core but can still be useful.
2020-02-10 23:31:33 +01:00
| Plugin | Description |
| --------------------------------- | ----------------------------------------------------------- |
| `assets/plugins/_dark.scss` | Switches site to dark mode |
| `assets/plugins/_numbered.scss` | Makes headings in markdown numbered, e.g. `1.1` , `1.2` |
| `assets/plugins/_scrollbars.scss` | Overrides scrollbar styles to look similar across platforms |
2020-07-29 13:37:55 +02:00
To enable plugins, add `@import "plugins/{name}";` to `assets/_custom.scss` in your website root. One exception is `_dark.scss` which contains variables only and should be added to `assets/_variables.scss` .
2020-02-10 23:31:33 +01:00
2019-10-03 14:10:03 +02:00
### Hugo Internal Templates
2020-07-29 13:37:55 +02:00
There are a few hugo templates inserted in `<head>`
2019-10-03 14:10:03 +02:00
- [Google Analytics ](https://gohugo.io/templates/internal/#google-analytics )
- [Open Graph ](https://gohugo.io/templates/internal/#open-graph )
2019-05-24 14:07:44 +02:00
## Shortcodes
2020-02-10 23:31:33 +01:00
- [Buttons ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/buttons/ )
- [Columns ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/columns/ )
- [Expand ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/expand/ )
- [Hints ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/hints/ )
- [KaTeX ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/katex/ )
- [Mermaid ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/mermaid/ )
- [Tabs ](https://themes.gohugo.io/theme/hugo-book/docs/shortcodes/tabs/ )
2020-05-22 10:35:31 +02:00
2020-07-29 13:37:55 +02:00
By default, Goldmark trims unsafe outputs which might prevent some shortcodes from rendering. It is recommended to set `markup.goldmark.renderer.unsafe=true` if you encounter problems.
2020-05-22 10:35:31 +02:00
```toml
[markup.goldmark.renderer]
unsafe = true
```
2020-07-29 13:37:55 +02:00
If you are using ```config.yaml``` or ```config.json```, consult the [configuration markup ](https://gohugo.io/getting-started/configuration-markup/ )
2019-08-22 23:59:51 +02:00
2020-01-24 00:07:47 +01:00
## Versioning
2020-07-29 13:37:55 +02:00
This theme follows a simple incremental versioning. e.g. `v1` , `v2` and so on. There might be breaking changes between versions.
2020-01-24 00:07:47 +01:00
2020-07-29 13:37:55 +02:00
If you want lower maintenance, use one of the released versions. If you want to live on the bleeding edge of changes, you can use the `master` branch and update your website when needed.
2020-01-24 00:07:47 +01:00
2018-09-17 15:09:51 +02:00
## Contributing
2019-05-22 09:23:16 +02:00
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:
2020-02-10 23:31:33 +01:00
- Keep it simple.
- Keep minimal (or zero) default configuration.
- Avoid interference with user-defined layouts.
- Avoid using JS if it can be solved by CSS.
2018-09-13 18:07:55 +02:00
2020-07-29 13:37:55 +02:00
Feel free to open issues if you find missing configuration or customisation options.