Custom hugo theme
hugo linuxTop level folder layout
The available themes for a Hugo CMS instance are located in the theme folder. Picking a theme is
done by
The name of the directory containing the theme is also the theme name, if you want to use it in your hugo instance,
you have to configure it as theme: <theme name> in hugo’s configuration file,
which is usually config.yaml or config.toml in hugo’s top level directory.
You can run a hugo instance without a theme by hosting the theme folder content in hugos top level directory.
A theme folder has the following content:
theme_name
archtypes
assets
layouts
statics
theme.tomlThe easy parts
Most of subdirectories host static content or templates:
archtype
home of the templates, when usinghugo new posts/2020-05-02somethingsomething.adocthe content of this directory is used to create a new fileassets
contains input for hugo’s asset pipelines, e.g. css files that will be minified or svg files for including as partialslayouts
contains the layouts for rendering the site or parts of single or list pagesstatics
static content like JavaScript, css or webfonts to be included in the final version of the sitetheme.yaml
the main config file for the theme
The layout folder
This folder contains the fragments and page rendering templates that are used to render different parts of the site.
layouts
_default
baseof.html
list.htnl
single.html
partials
footer.html
head.html
main.html
row.html
404.html
index.htmlThe top level entry point for rendering is the baseof.html file, it includes partials and the main block.
<!DOCTYPE html>
<html lang="en-US">
{{ partial "head.html" . }}
<body>
{{ partial "header.html" . }}
{{ block "main" . }}{{ end }}
{{- partial "footer.html" . -}}
</body>
</html>The partials head, header and footer are inserted from the partials directory. The source for the main block can be another layout file, the simplest version is the single.html which renders the content of a single post:
{{ define "main" }}
<main>
<div class="container">
<!-- single.html -->
<h1 id="title">{{ .Title }}</h1>
{{ .Content }}
</div>....
</main>
{{ end }}the content is included at the {{ block "main" . }} position in the baseof.html template.
URL to file mapping
The following table is giving an overview which main block is used for which URL.
| URL | file used as {{ block "main" . }} |
|---|---|
/ | theme/layouts/index.html |
/some/unknown/url.html | theme/layouts/404.html |
/posts/2020-05-02-existing-article/ | theme/layouts/_default/single.html |
/posts/ | theme/layouts/posts/list.html |
/tags/ | theme/layouts/tags/list.html |
For more details of the lookup hierarchy see: https://gohugo.io/templates/lookup-order/
File dependencies
