Hugo Environment Variable Magic


You can overwrite hugo configuration values with environment variables!

This is useful for things like setting the baseURL dynamically in CI.

export HUGO_BASEURL="$CI_ENVIRONMENT_URL"
hugo

It also supports setting indented values, for example imagine this hugo configuration:

params:
  some:
    value: hello

Which can be overwritten like this:

export HUGOxPARAMSxSOMExVALUE="bye"
hugo

But, more importantly, this can be used to inject dynamic values at hugo build time to be used later on in templates.

An example would be injecting information about the latest commit in the repository in addition to the normal git info available in hugo:

export HUGOxPARAMSxREPOxLAST_COMMITxSUBJECT=$(git log -1 --format=%s)
export HUGOxPARAMSxREPOxLAST_COMMITxDATE=$(git log -1 --format=%cs)
export HUGOxPARAMSxREPOxLAST_COMMITxHASH=$(git log -1 --format=%H)

Which can then be used in templates like this:

{{ with .Site.Params.repo.last_commit }}
  <a href="https://gitlab.com/mkamner/marco.ninja/-/commit/{{ .hash }}">{{ .subject }} ({{ .date }})</a>
{{ end }}
hugo  ssg 

See also