This release brings several configuration fixes and improvements that will be especially useful for themes.
Deep merge of theme Params
One of the most common complaint from Hugo theme owners/users has been about the configuration handling. Hugo has up until now only performed a shallow merge of theme params
into the configuration.
With that, given this example from a theme configuration:
[params]
[params.colours]
blue="#337DFF"
green="#68FF33"
red="#FF3358"
If you would like to use the above theme, but want a different shade of red, you earlier had to copy the entire block, even the colours you're totally happy with. This was painful even the simplest setup.
Now you can just override the params
keys you want to change, e.g.:
[params]
[params.colours]
red="#fc0f03"
For more information, and especially about the way you can opt out of the above behaviour, see Merge Configuration from Themes.
Themes now support the config directory
Now both the project and themes/modules can store its configuration in both the top level config file (e.g. config.toml
) or in the config
directory. See Configuration Directory.
HTTP headers in getJSON/getCSV
getJSON
now supports custom HTTP headers. This has been a big limitation in Hugo, especially considering the Authorization header.
We have updated the internal Instagram shortcode to pass the access token in a header:
{{ $hideCaption := cond (eq (.Get 1) "hidecaption") "1" "0" }}
{{ $headers := dict "Authorization" (printf "Bearer %s" $accessToken) }}
{{ with getJSON "https://graph.facebook.com/v8.0/instagram_oembed/?url=https://instagram.com/p/" $id "/&hidecaption=" $hideCaption $headers }}
{{ .html | safeHTML }}
{{ end }}
Also see the discussion this issue about the access token above.
New erroridf template func
Sometime, especially when creating themes, it is useful to be able to let the user decide if an error situation is critical enough to fail the build. The new erroridf
produces ERROR
log statements that can be toggled off:
{{ erroridf "some-custom-id" "Some error message." }}
Will log:
ERROR: Some error message.
If you feel that this should not be logged as an ERROR, you can ignore it by adding this to your site config:
ignoreErrors = ["some-custom-id"]
Stats
This release represents 46 contributions by 11 contributors to the main Hugo code base.@bep leads the Hugo development with a significant amount of contributions, but also a big shoutout to @jmooring, @satotake, and @Seirdy for their ongoing contributions.
And a big thanks to @digitalcraftsman for his relentless work on keeping the themes site in pristine condition.
Many have also been busy writing and fixing the documentation in hugoDocs,
which has received 20 contributions by 10 contributors. A special thanks to @salim-b, @bep, @thomasjsn, and @lucasew for their work on the documentation site.
Hugo now has:
- 52487+ stars
- 432+ contributors
- 370+ themes
Notes
- We now do deep merging of
params
from theme config(s). That is you most likely what you want, but Merge Configuration from Themes describes how you can get the old behaviour back.
Enhancements
Templates
- Rename err-missing-instagram-accesstoken => error-missing-instagram-accesstoken 9096842b @bep
- Add a terse pagination template variant to improve performance 73483d0f @jmooring #8599
- Add erroridf template func f55d2f43 @bep #8613
- Print response body on HTTP errors 282f1aa3 @bep
- Misc header improvements, tests, allow multiple headers of same key fcd63de3 @bep #5617
- Allows user-defined HTTP headers with getJSON and getCSV 150d7573 @chamberlainpj #5617
- Allow 'Querify' to take lone slice/interface argument c46fc838 @importhuman #6735
Output
- Make WebAppManifestFormat NotAlternative=true 643b6719 @bep #8624
- Adjust test assertion ab4e1dfa @bep #8625
- support application/manifest+json 02f31897 @Seirdy #8624
Other
- Regenerate docs helper be6b901c @bep
- Regenerate docshelper 402da3f8 @bep
- Implement configuration in a directory for modules bb2aa087 @bep #8654
- Update github.com/alecthomas/chroma v0.9.1 => v0.9.2 3aa7f0b2 @bep #8658
- Run go mod tidy 9b870aa7 @bep
- Split out the puthe path/filepath functions into common/paths 93aad3c5 @bep #8654
- Update to Goldmark v1.3.8 8eafe084 @jmooring #8648
- Do not read config from os.Environ when running tests 31fb29fb @bep #8655
- Set a dummy Instagram token a886dd53 @bep
- Regenerate docs helper a91cd765 @bep
- Update to Go 1.16.5, Goreleaser 0.169.0 552cef5c @bep #8619#8263
- Upgrade Instagram shortcode 9b5debe4 @bep #7879
- Set modTime at creation time 06d29542 @bep #6161
- Add math.Max and math.Min 01758f99 @jmooring #8583
- Catch incomplete shortcode error 845a7ba4 @satotake #6866
- Use SPDX license identifier 10f60de8 @jmooring #8555
- Cache and copy Menu for sorting 785a31b5 @satotake #7594
- Update to LibSASS 3.6.5 bc1e0528 @bep
- Make the HTML element collector more robust f518b4f7 @bep #8530
- Make the HTML element collector more robust" dc6b7a75 @bep
- Get the collector in line with the io.Writer interface" 3f515f0e @bep
- Get the collector in line with the io.Writer interface a9bcd381 @bep
- Make the HTML element collector more robust ef0f1a72 @bep #8530
- Add Scratch.DeleteInMap abbc99d4 @meehawk #8504
- Display version when building site (#8533) 76c95f55 @jmooring #8531
- Update querify function description and examples 2c7f5b62 @jmooring
- Change SetEscapeHTML to false 504c78da @peaceiris #8512
- Add a benchmark b660ea8d @bep
- Update dependency list 64f88f30 @bep
Fixes
Templates
Other
- Fix fill with smartcrop sometimes returning 0 bytes images 5af045eb @bep #7955
- Misc config loading fixes d392893c @bep #8633#8618#8630#8591#6680#5192
- Fix nested OS env config override when parent does not exist 12530519 @bep #8618
- Fix invalid timestamp of the "public" folder 26ae12c0 @anthonyfok #6161
- Fix env split to allow = character in values ee733085 @xqbumu #8589
- Fix warning regression in i18n ececd1b1 @bep #8492