Hugo ============================================================================== (2017, 2018) ``` $ hugo new site devilghost $ cd devilghost $ git init $ git submodule add https://github.com/…/the-theme.git themes/the-theme $ echo 'theme = "the-theme"' >> config.toml $ hugo new posts/my-cool-post.md $ vim content/posts/my-cool-post.md $ hugo server -D --verbose ``` Hugo is a static site generator/blogging platform. It's written in Go. Hugo support authoring posts in Markdown, and adding TOML, YAML or JSON metadata as frontmatter. ``` # apt-get install hugo $ hugo help ``` Create a site: ``` $ mkdir -p ~/Documents/hugo $ cd ~/Documents/hugo $ hugo new site example $ tree -a example/ example/ ├── archetypes ├── config.toml ├── content ├── data ├── layouts ├── static └── themes 6 directories, 1 file ``` - `archtypes/` holds custom post types that get used by `hugo new` for pre-populating frontmatter - `config.toml` sets basic site configuration - `content/` holds user created content; we can create subdirectories here for site sections (e.g. howto, reviews, etc.) - `data/` includes configuration used during site generation - `layouts/` specified how to convert content to static site output - `static/` holds static content like CSS and JavaScript files - `themes/` layout and templates for content rendering (how does this differ from `layouts/`?) ``` $ cd example $ cat config.toml baseurl = "http://example.org/" languageCode = "en-us" title = "My New Hugo Site" ``` Create a new post: ``` $ hugo new my-first-post.md $ hugo new mysection/my-post.md $ hugo server --buildDrafts ``` Theme ------------------------------------------------------------------------------ A Hugo site needs a theme to work, but simply doing `hugo new site mysite` will not create a theme. Either import an existing community theme or create a new custom theme. ``` $ cd mysite/ $ hugo new theme mytheme $ tree mysite/themes/mytheme/ mysite/themes/mytheme/ ├── archetypes │   └── default.md ├── layouts │   ├── 404.html │   ├── _default │   │   ├── baseof.html │   │   ├── list.html │   │   └── single.html │   ├── index.html │   └── partials │   ├── footer.html │   ├── header.html │   └── head.html ├── LICENSE ├── static │   ├── css │   └── js └── theme.toml 7 directories, 11 files ``` We can create a bare-bones theme like: ``` $ hugo new theme mytheme ``` Look in `mytheme/layouts/`. The files `index.html`, `list.html`, and `single.html` are required, but `hugo new theme` only creates empty stubs for these. Until we populate at least these files with some content, Hugo serves blank pages. Links ------------------------------------------------------------------------------ - https://gohugo.io/ - https://gohugo.io/overview/quickstart/ - https://themes.gohugo.io//theme/arabica/post/creating-a-new-theme/ - https://gohugo.io/templates/template-debugging/ - https://gohugo.io/variables/