Merge commit 'ec920363cdeb687c8bcac9c242767d366fb058cb'
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 8 Apr 2022 11:32:01 +0000 (13:32 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 8 Apr 2022 11:32:01 +0000 (13:32 +0200)
20 files changed:
1  2 
docs/.cspell.json
docs/content/en/content-management/formats.md
docs/content/en/functions/cond.md
docs/content/en/functions/default.md
docs/content/en/functions/uniq.md
docs/content/en/getting-started/configuration.md
docs/content/en/hosting-and-deployment/deployment-with-rclone.md
docs/content/en/hosting-and-deployment/hosting-on-keycdn.md
docs/content/en/hosting-and-deployment/hosting-on-render.md
docs/content/en/hugo-modules/configuration.md
docs/content/en/hugo-modules/use-modules.md
docs/content/en/showcase/hapticmedia/index.md
docs/content/en/templates/404.md
docs/content/en/templates/ordering-and-grouping.md
docs/content/en/templates/partials.md
docs/content/en/templates/render-hooks.md
docs/content/en/templates/sitemap-template.md
docs/content/en/tools/migrations.md
docs/layouts/maintenance/list.html
docs/netlify.toml

index 2cac73c022e157dd85e931bd8fd429bd5c322aa4,0000000000000000000000000000000000000000..84631ce67d31b3e34a868cad269811c37fff3f1e
mode 100644,000000..100644
--- /dev/null
@@@ -1,276 -1,0 +1,336 @@@
-     "Unmarshal",
 +{
 +  "version": "0.2",
 +  "words": [
 +    "aaabaab",
 +    "aabb",
 +    "aabba",
 +    "aabbaa",
 +    "aabbaabb",
++    "aabbaabbab",
++    "abbaa",
 +    "abourget",
 +    "absurl",
 +    "adoc",
 +    "algolia",
 +    "allowfullscreen",
 +    "ananke",
 +    "anchorize",
 +    "anthonyfok",
 +    "asciidoctor",
 +    "attrlink",
 +    "azblob",
 +    "baseof",
++    "bbaa",
++    "bcde",
++    "bcdef",
 +    "beevelop",
++    "Bergevin",
 +    "bibtex",
 +    "Bjørn",
 +    "blackfriday",
 +    "blogue",
 +    "bogem",
 +    "Bootcamp",
 +    "brlink",
 +    "Brotli",
 +    "Browsersync",
 +    "canonify",
 +    "Catmull",
 +    "Catwoman",
++    "changefreq",
 +    "Cheatsheet",
 +    "choco",
 +    "chromastyles",
 +    "clockoon",
 +    "Cloudinary",
 +    "CNAME",
 +    "Codecademy's",
 +    "CODEOWNERS",
 +    "Coen",
 +    "Commento",
 +    "Cond",
++    "contentdir",
 +    "Contentful",
++    "Copr",
 +    "copyrighthtml",
 +    "corejs",
 +    "countrunes",
 +    "countwords",
 +    "crossreferences",
++    "daftaupe",
 +    "datatable",
 +    "DATOCMS",
 +    "debugconfig",
 +    "DELIM",
 +    "dhersam",
 +    "digitalcraftsman",
 +    "Disqus",
 +    "Dmdh",
 +    "doas",
 +    "dokuwiki",
 +    "dpkg",
 +    "DRING",
++    "Eiqc",
++    "Eliott",
 +    "Emojify",
 +    "Enwrite",
 +    "eopkg",
 +    "eparis",
 +    "errorf",
 +    "erroridf",
 +    "Evernote",
 +    "exitwp",
++    "expirydate",
 +    "Feminella",
 +    "firstpost",
 +    "Formspree",
 +    "fpath",
 +    "Francia",
 +    "freenode",
 +    "frontmatter",
 +    "funcs",
 +    "funcsig",
 +    "Garen",
 +    "gcloud",
 +    "Getenv",
 +    "getjson",
 +    "getpage",
 +    "Gmfc",
 +    "Goel",
 +    "Gohugo",
 +    "gohugoio",
 +    "goldenbridge",
 +    "Goldmark",
 +    "gomodules",
 +    "GOPATH",
 +    "govendor",
 +    "Gowans",
 +    "Grayscale",
 +    "Gruber",
 +    "gtag",
++    "gvfs",
 +    "hidecaption",
++    "hmac",
 +    "Hokus",
 +    "hola",
 +    "hügó",
 +    "hugodeps",
 +    "hugodoc",
 +    "Hugofy",
 +    "hugolang",
 +    "hugoversion",
 +    "Hyas",
 +    "Hyvor",
 +    "iframes",
 +    "ifttt",
 +    "iife",
 +    "imgproc",
 +    "importr",
 +    "IMWQ",
 +    "indice",
 +    "innershortcode",
 +    "Intelli",
 +    "interdoc",
 +    "IPTC",
 +    "ismenucurrent",
 +    "Isset",
 +    "Isso",
 +    "Jaco",
++    "JIRN",
 +    "johnpatitucci",
 +    "Joomla",
 +    "JRBR",
 +    "jsonify",
 +    "katex",
 +    "keycdn",
 +    "KEYVALS",
 +    "kubernetes",
 +    "Lanczos",
 +    "langformatnumber",
 +    "lastmod",
 +    "libwebp",
 +    "linktitle",
 +    "Lipi",
 +    "lrwxr",
 +    "maingo",
 +    "markdownified",
 +    "markdownify",
 +    "mathjax",
 +    "mdhender",
 +    "mdshortcode",
++    "MENUENTRY",
 +    "mercredi",
++    "Milli",
 +    "Mittwoch",
 +    "mkdir",
 +    "mmark",
++    "modh",
 +    "monokai",
 +    "Morling",
 +    "mspowerpoint",
 +    "Multihost",
 +    "Muut",
 +    "myclass",
 +    "mydeployment",
 +    "myindex",
 +    "mylayout",
++    "mylogin",
 +    "mypage",
 +    "mypartials",
 +    "mypost",
 +    "mysite",
 +    "myspa",
 +    "mystyle",
++    "mytextpartial",
 +    "mytheme",
 +    "NDJSON",
 +    "needsexample",
 +    "Netravali",
 +    "newparam",
++    "Nichlas",
 +    "Nikhil",
 +    "Njjy",
 +    "nlist",
 +    "nobr",
 +    "nocopy",
 +    "Norsk",
 +    "nosniff",
 +    "NOSQL",
 +    "notoc",
 +    "novembre",
++    "numfmt",
 +    "NUMWORKERMULTIPLIER",
 +    "Obhu",
 +    "octohug",
 +    "Octopress",
 +    "oldparam",
 +    "onrender",
 +    "opengraph",
 +    "OWASP",
 +    "Pandoc",
 +    "partialcached",
 +    "Pastorius",
 +    "Patitucci",
 +    "PCRE",
 +    "peaceiris",
 +    "Pedersen",
++    "Pekka",
 +    "permalinkable",
 +    "plainify",
 +    "POSIX",
 +    "postprocess",
++    "Poupin",
++    "prerender",
 +    "println",
 +    "publishdate",
 +    "Pygments",
++    "qref",
 +    "querify",
 +    "QVOMC",
++    "Racic",
++    "Rclone",
 +    "rdwatters",
 +    "readfile",
 +    "rebinded",
++    "recommendedby",
 +    "REDIR",
 +    "reftext",
 +    "relatedfuncs",
 +    "relref",
 +    "relurl",
 +    "remarkjs",
 +    "rgba",
++    "Riku",
 +    "rlimit",
 +    "roboto",
 +    "rssxml",
 +    "rwxrwxrwx",
++    "RYUGV",
 +    "safehtml",
 +    "safejs",
 +    "Samsa",
++    "schemaorg",
 +    "Shekhar",
 +    "Shortcode",
 +    "Shortcodes",
++    "signup",
++    "Silvola",
 +    "Sindre",
 +    "sitemapindex",
 +    "sitemapxml",
 +    "Smartcrop",
 +    "Sprintf",
 +    "Startseite",
 +    "strconv",
 +    "stringifier",
 +    "struct",
 +    "structs",
 +    "subdir",
++    "svgs",
++    "symdiff",
 +    "Talkyard",
 +    "taxo",
++    "taxonomyname",
 +    "tbody",
 +    "tdewolff",
 +    "testshortcodes",
 +    "thead",
 +    "Thinkful",
++    "Tknx",
 +    "TLDR",
 +    "TMPDIR",
++    "TOCSS",
++    "todos",
 +    "tojson",
++    "Tomango",
++    "topologix",
 +    "Torikian",
 +    "totoml",
 +    "toyaml",
 +    "twitteruser",
 +    "Unmarshal",
-     "zzbbaabb"
 +    "urlize",
 +    "urlset",
++    "utimestamp",
++    "vendored",
 +    "vimrc",
 +    "wanghc",
 +    "Wappalyzer",
 +    "warnf",
 +    "webp",
 +    "Wercker",
 +    "wibble",
 +    "wordcount",
 +    "workson",
++    "wpxr",
++    "Xbaabbab",
 +    "xvzf",
 +    "yoyoyo",
 +    "Zgotmpl",
-     "*.min.*"
++    "zzbbaabb",
++    "مدونتي"
 +  ],
 +  "language": "en,en-GB,en-US,de,fr",
++  "allowCompoundWords": true,
 +  "files": [
 +    "**/*.md"
 +  ],
++  "ignoreRegExpList": [
++    "<!-- prettier-ignore -->\\n(`{3,})\\w*\\n[\\s\\S]+?\\1",
++    "\\[(\\*{2})?@\\w+?\\1\\]",
++    "\\[`\\w+`\\]",
++    "ve{2,}r{2,}y",
++    "ve+r+y+long\\w*",
++    "\\/.*?\\/",
++    "\\_\\w+",
++    "\\#\\w+"
++  ],
 +  "ignorePaths": [
 +    ".cspell.json",
 +    "**/node_modules/**",
++    "*.min.*",
++    "**/news/*",
++    "**/showcase/*"
 +  ],
 +  "useGitignore": true
 +}
index 3c3edfdd496a3d6e60f9cc8160795ff56af9ad16,0000000000000000000000000000000000000000..0b25c3171e330a4f5265f443e3e8dc2debfb606e
mode 100644,000000..100644
--- /dev/null
@@@ -1,154 -1,0 +1,154 @@@
- |RST|rst|Needs [RST](https://docutils.sourceforge.net/rst.html) installed.|
 +---
 +title: Content Formats
 +linktitle: Content Formats
 +description: Both HTML and Markdown are supported content formats.
 +date: 2017-01-10
 +publishdate: 2017-01-10
 +categories: [content management]
 +keywords: [markdown,asciidoc,mmark,pandoc,content format]
 +menu:
 +  docs:
 +    parent: "content-management"
 +    weight: 20
 +weight: 20    #rem
 +draft: false
 +aliases: [/content/markdown-extras/,/content/supported-formats/,/doc/supported-formats/]
 +toc: true
 +---
 +
 +You can put any file type into your `/content` directories, but Hugo uses the `markup` front matter value if set or the file extension (see `Markup identifiers` in the table below) to determine if the markup needs to be processed, e.g.:
 +
 +* Markdown converted to HTML
 +* [Shortcodes](/content-management/shortcodes/) processed
 +* Layout applied
 +
 +## List of content formats
 +
 +The current list of content formats in Hugo:
 +
 +| Name  | Markup identifiers | Comment |
 +| ------------- | ------------- |-------------|
 +| Goldmark  | md, markdown, goldmark  |Note that you can set the default handler of `md` and `markdown` to something else, see [Configure Markup](/getting-started/configuration-markup/).{{< new-in "0.60.0" >}} |
 +| Blackfriday | blackfriday  |Blackfriday will eventually be deprecated.|
 +|MMark|mmark|Mmark is deprecated and will be removed in a future release.|
 +|Emacs Org-Mode|org|See [go-org](https://github.com/niklasfasching/go-org).|
 +|AsciiDoc|asciidocext, adoc, ad|Needs [Asciidoctor][ascii] installed.|
++|RST|rst|Needs [RST](https://docutils.sourceforge.io/rst.html) installed.|
 +|Pandoc|pandoc, pdc|Needs [Pandoc](https://www.pandoc.org/) installed.|
 +|HTML|html, htm|To be treated as a content file, with layout, shortcodes etc., it must have front matter. If not, it will be copied as-is.|
 +
 +The `markup identifier` is fetched from either the `markup` variable in front matter or from the file extension. For markup-related configuration, see [Configure Markup](/getting-started/configuration-markup/).
 +
 +## External Helpers
 +
 +Some of the formats in the table above need external helpers installed on your PC. For example, for AsciiDoc files,
 +Hugo will try to call the `asciidoctor` command. This means that you will have to install the associated
 +tool on your machine to be able to use these formats.
 +
 +Hugo passes reasonable default arguments to these external helpers by default:
 +
 +- `asciidoctor`: `--no-header-footer -`
 +- `rst2html`: `--leave-comments --initial-header-level=2`
 +- `pandoc`: `--mathjax`
 +
 +{{% warning "Performance of External Helpers" %}}
 +Because additional formats are external commands, generation performance will rely heavily on the performance of the external tool you are using. As this feature is still in its infancy, feedback is welcome.
 +{{% /warning %}}
 +
 +### External Helper AsciiDoc
 +
 +[AsciiDoc](https://github.com/asciidoc/asciidoc) implementation EOLs in Jan 2020 and is no longer supported. 
 +AsciiDoc development is being continued under [Asciidoctor](https://github.com/asciidoctor). The format AsciiDoc 
 +remains of course. Please continue with the implementation Asciidoctor.
 +
 +### External Helper Asciidoctor
 +
 +The Asciidoctor community offers a wide set of tools for the AsciiDoc format that can be installed additionally to Hugo. 
 +[See the Asciidoctor docs for installation instructions](https://asciidoctor.org/docs/install-toolchain/). Make sure that also all
 +optional extensions like `asciidoctor-diagram` or `asciidoctor-html5s` are installed if required.
 +
 +{{% note %}}
 +External `asciidoctor` command requires Hugo rendering to _disk_ to a specific destination directory. It is required to run Hugo with the command option `--destination`.
 +{{% /note %}}
 +
 +Some [Asciidoctor](https://asciidoctor.org/man/asciidoctor/) parameters can be customized in Hugo:
 +
 +Parameter | Comment
 +--- | ---
 +backend | Don't change this unless you know what you are doing.
 +doctype | Currently, the only document type supported in Hugo is `article`.
 +extensions | Possible extensions are `asciidoctor-html5s`, `asciidoctor-bibtex`, `asciidoctor-diagram`, `asciidoctor-interdoc-reftext`, `asciidoctor-katex`, `asciidoctor-latex`, `asciidoctor-mathematical`, `asciidoctor-question`, `asciidoctor-rouge`.
 +attributes | Variables to be referenced in your AsciiDoc file. This is a list of variable name/value maps. See [Asciidoctor's attributes](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#attributes-and-substitutions).
 +noHeaderOrFooter | Output an embeddable document, which excludes the header, the footer, and everything outside the body of the document. Don't change this unless you know what you are doing.
 +safeMode | Safe mode level `unsafe`, `safe`, `server` or `secure`. Don't change this unless you know what you are doing.
 +sectionNumbers | Auto-number section titles.
 +verbose | Verbosely print processing information and configuration file checks to stderr.
 +trace | Include backtrace information on errors.
 +failureLevel | The minimum logging level that triggers a non-zero exit code (failure).
 +
 +Hugo provides additional settings that don't map directly to Asciidoctor's CLI options:
 +
 +workingFolderCurrent
 +: Sets the working directory to be the same as that of the AsciiDoc file being processed, so that [include](https://asciidoctor.org/docs/asciidoc-syntax-quick-reference/#include-files) will work with relative paths. This setting uses the `asciidoctor` cli parameter `--base-dir` and attribute `outdir=`. For rendering diagrams with [asciidoctor-diagram](https://asciidoctor.org/docs/asciidoctor-diagram/), `workingFolderCurrent` must be set to `true`.
 +
 +preserveTOC
 +: By default, Hugo removes the table of contents generated by Asciidoctor and provides it through the built-in variable [`.TableOfContents`](/content-management/toc/) to enable further customization and better integration with the various Hugo themes. This option can be set to `true` to preserve Asciidoctor's TOC in the generated page.
 +
 +Below are all the AsciiDoc related settings in Hugo with their default values:
 +
 +{{< code-toggle config="markup.asciidocExt" />}}
 +
 +Notice that for security concerns only extensions that do not have path separators (either `\`, `/` or `.`) are allowed. That means that extensions can only be invoked if they are in one's ruby's `$LOAD_PATH` (ie. most likely, the extension has been installed by the user). Any extension declared relative to the website's path will not be accepted.
 +
 +Example of how to set extensions and attributes:
 +
 +```
 +[markup.asciidocExt]
 +    extensions = ["asciidoctor-html5s", "asciidoctor-diagram"]
 +    workingFolderCurrent = true
 +    [markup.asciidocExt.attributes]
 +        my-base-url = "https://example.com/"
 +        my-attribute-name = "my value"
 +```
 +
 +In a complex Asciidoctor environment it is sometimes helpful to debug the exact call to your external helper with all 
 +parameters. Run Hugo with `-v`. You will get an output like
 +
 +```
 +INFO 2019/12/22 09:08:48 Rendering book-as-pdf.adoc with C:\Ruby26-x64\bin\asciidoctor.bat using asciidoc args [--no-header-footer -r asciidoctor-html5s -b html5s -r asciidoctor-diagram --base-dir D:\prototypes\hugo_asciidoc_ddd\docs -a outdir=D:\prototypes\hugo_asciidoc_ddd\build -] ...
 +```
 +
 +## Learn Markdown
 +
 +Markdown syntax is simple enough to learn in a single sitting. The following are excellent resources to get you up and running:
 +
 +* [Daring Fireball: Markdown, John Gruber (Creator of Markdown)][fireball]
 +* [Markdown Cheatsheet, Adam Pritchard][mdcheatsheet]
 +* [Markdown Tutorial (Interactive), Garen Torikian][mdtutorial]
 +* [The Markdown Guide, Matt Cone][mdguide]
 +
 +[`emojify` function]: /functions/emojify/
 +[ascii]: https://asciidoctor.org/
 +[bfconfig]: /getting-started/configuration/#configuring-blackfriday-rendering
 +[blackfriday]: https://github.com/russross/blackfriday
 +[mmark]: https://github.com/miekg/mmark
 +[config]: /getting-started/configuration/
 +[developer tools]: /tools/
 +[emojis]: https://www.webpagefx.com/tools/emoji-cheat-sheet/
 +[fireball]: https://daringfireball.net/projects/markdown/
 +[gfmtasks]: https://guides.github.com/features/mastering-markdown/#syntax
 +[helperssource]: https://github.com/gohugoio/hugo/blob/77c60a3440806067109347d04eb5368b65ea0fe8/helpers/general.go#L65
 +[hl]: /content-management/syntax-highlighting/
 +[hlsc]: /content-management/shortcodes/#highlight
 +[hugocss]: /css/style.css
 +[ietf]: https://tools.ietf.org/html/
 +[mathjaxdocs]: https://docs.mathjax.org/en/latest/
 +[mdcheatsheet]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
 +[mdguide]: https://www.markdownguide.org/
 +[mdtutorial]: https://www.markdowntutorial.com/
 +[Miek Gieben's website]: https://miek.nl/2016/march/05/mmark-syntax-document/
 +[org]: https://orgmode.org/
 +[pandoc]: https://www.pandoc.org/
 +[rest]: https://docutils.sourceforge.io/rst.html
 +[sc]: /content-management/shortcodes/
 +[sct]: /templates/shortcode-templates/
index a5e5344268c8e49a0a3dcac3cb74409946b8d831,0000000000000000000000000000000000000000..30b85325198c9bb32f6c205ed99e48262dbb97ff
mode 100644,000000..100644
--- /dev/null
@@@ -1,31 -1,0 +1,30 @@@
- needsexamples: false
 +---
 +title: "cond"
 +date: 2017-09-08
 +description: "Return one of two arguments, depending on the value of a third argument."
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +signature: ["cond CONTROL VAR1 VAR2"]
 +hugoversion: 0.27
 +relatedfuncs: [default]
 +toc: false
 +draft: false
 +---
 +
 +`cond` returns *VAR1* if *CONTROL* is true, or *VAR2* if it is not.
 +
 +Example:
 +
 +```
 +{{ cond (eq (len $geese) 1) "goose" "geese" }}
 +```
 +
 +Would emit "goose" if the `$geese` array has exactly 1 item, or "geese" otherwise.
 +
 +{{% warning %}}
 +Whenever you use a `cond` function, *both* variable expressions are *always* evaluated. This means that a usage like `cond false (div 1 0) 27` will throw an error because `div 1 0` will be evaluated *even though the condition is false*.
 +
 +In other words, the `cond` function does *not* provide [short-circuit evaluation](https://en.wikipedia.org/wiki/Short-circuit_evaluation) and does *not* work like a normal [ternary operator](https://en.wikipedia.org/wiki/%3F:) that will pass over the first expression if the condition returns `false`.
 +{{% /warning %}}
index eee00b2002ea5f4f74ec05c5076d64b4b7ac804d,0000000000000000000000000000000000000000..c4cc166a78258bbc2b868f3aad96726c7844ad78
mode 100644,000000..100644
--- /dev/null
@@@ -1,92 -1,0 +1,91 @@@
- needsexamples: false
 +---
 +title: default
 +description: Allows setting a default value that can be returned if a first value is not set.
 +qref: "Returns a default value if a value is not set when checked."
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +keywords: [defaults]
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +toc:
 +signature: ["default DEFAULT INPUT"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +draft: false
 +aliases: []
 +---
 +
 +`default` checks whether a given value is set and returns a default value if it is not. *Set* in this context means different things depending on the data type:
 +
 +* non-zero for numeric types and times
 +* non-zero length for strings, arrays, slices, and maps
 +* any boolean or struct value
 +* non-nil for any other types
 +
 +`default` function examples reference the following content page:
 +
 +{{< code file="content/posts/default-function-example.md" >}}
 +---
 +title: Sane Defaults
 +seo_title:
 +date: 2017-02-18
 +font:
 +oldparam: The default function helps make your templating DRYer.
 +newparam:
 +---
 +{{< /code >}}
 +
 +`default` can be written in more than one way:
 +
 +```
 +{{ index .Params "font" | default "Roboto" }}
 +{{ default "Roboto" (index .Params "font") }}
 +```
 +
 +Both of the above `default` function calls return `Roboto`.
 +
 +A `default` value, however, does not need to be hard coded like the previous example. The `default` value can be a variable or pulled directly from the front matter using dot notation:
 +
 +{{< code file="variable-as-default-value.html" nocopy="true" >}}
 +{{$old := .Params.oldparam }}
 +<p>{{ .Params.newparam | default $old }}</p>
 +{{< /code >}}
 +
 +Which would return:
 +
 +```
 +<p>The default function helps make your templating DRYer.</p>
 +```
 +
 +And then using dot notation
 +
 +{{< code file="dot-notation-default-value.html" >}}
 +<title>{{ .Params.seo_title | default .Title }}</title>
 +{{< /code >}}
 +
 +Which would return
 +
 +{{< output file="dot-notation-default-return-value.html" >}}
 +<title>Sane Defaults</title>
 +{{< /output >}}
 +
 +The following have equivalent return values but are far less terse. This demonstrates the utility of `default`:
 +
 +Using `if`:
 +
 +{{< code file="if-instead-of-default.html" nocopy="true" >}}
 +<title>{{if .Params.seo_title}}{{.Params.seo_title}}{{else}}{{.Title}}{{end}}</title>
 +=> Sane Defaults
 +{{< /code >}}
 +
 +Using `with`:
 +
 +{{< code file="with-instead-of-default.html" nocopy="true" >}}
 +<title>{{with .Params.seo_title}}{{.}}{{else}}{{.Title}}{{end}}</title>
 +=> Sane Defaults
 +{{< /code >}}
index 0a720f88fd62ad962d59fa59b541dba52ae4b8b8,0000000000000000000000000000000000000000..eec55e5c3102af158ac2d324e6710b719c93a2ee
mode 100644,000000..100644
--- /dev/null
@@@ -1,26 -1,0 +1,25 @@@
- needsexamples: false
 +---
 +title: uniq
 +linktitle: uniq
 +description: Takes in a slice or array and returns a slice with subsequent duplicate elements removed.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [functions]
 +menu:
 +  docs:
 +    parent: "functions"
 +keywords: [multilingual,i18n,urls]
 +signature: ["uniq SET"]
 +workson: []
 +hugoversion:
 +relatedfuncs: []
 +deprecated: false
 +aliases: []
 +---
 +
 +```
 +{{ uniq (slice 1 2 3 2) }}
 +{{ slice 1 2 3 2 | uniq }}
 +<!-- both return [1 2 3] -->
 +```
index aed0ea100612351eeed1a8f0d34566cf49521d0d,0000000000000000000000000000000000000000..d377487c57aef3687b79dabcfe07090069a2e522
mode 100644,000000..100644
--- /dev/null
@@@ -1,756 -1,0 +1,745 @@@
-   
 +---
 +title: Configure Hugo
 +linktitle: Configuration
 +description: How to configure your Hugo site.
 +date: 2013-07-01
 +publishdate: 2017-01-02
 +lastmod: 2017-03-05
 +categories: [getting started,fundamentals]
 +keywords: [configuration,toml,yaml,json]
 +menu:
 +  docs:
 +    parent: "getting-started"
 +    weight: 60
 +weight: 60
 +sections_weight: 60
 +draft: false
 +aliases: [/overview/source-directory/,/overview/configuration/]
 +toc: true
 +---
 +
 +
 +## Configuration File
 +
 +Hugo uses the `config.toml`, `config.yaml`, or `config.json` (if found in the
 +site root) as the default site config file.
 +
 +The user can choose to override that default with one or more site config files
 +using the command line `--config` switch.
 +
 +Examples:
 +
 +```
 +hugo --config debugconfig.toml
 +hugo --config a.toml,b.toml,c.toml
 +```
 +
 +{{% note %}}
 +Multiple site config files can be specified as a comma-separated string to the `--config` switch.
 +{{% /note %}}
 +
 +{{< todo >}}TODO: distinct config.toml and others (the root object files){{< /todo >}}
 +
 +## Configuration Directory
 +
 +In addition to using a single site config file, one can use the `configDir` directory (default to `config/`) to maintain easier organization and environment specific settings.
 +
 +- Each file represents a configuration root object, such as `params.toml` for `[Params]`, `menu(s).toml` for `[Menu]`, `languages.toml` for `[Languages]` etc...
 +- Each file's content must be top-level, for example:
- ### enableEmoji 
++
 +{{< code-toggle file="config" >}}
 +[Params]
 +  foo = "bar"
 +{{< /code-toggle >}}
 +
 +{{< code-toggle file="params" >}}
 +foo = "bar"
 +{{< /code-toggle >}}
 +
 +- Each directory holds a group of files containing settings unique to an environment.
 +- Files can be localized to become language specific.
 +
 +
 +```
 +├── config
 +│   ├── _default
 +│   │   ├── config.toml
 +│   │   ├── languages.toml
 +│   │   ├── menus.en.toml
 +│   │   ├── menus.zh.toml
 +│   │   └── params.toml
 +│   ├── production
 +│   │   ├── config.toml
 +│   │   └── params.toml
 +│   └── staging
 +│       ├── config.toml
 +│       └── params.toml
 +```
 +
 +Considering the structure above, when running `hugo --environment staging`, Hugo will use every settings from `config/_default` and merge `staging`'s on top of those.
 +{{% note %}}
 +Default environments are __development__ with `hugo server` and __production__ with `hugo`.
 +{{%/ note %}}
 +
 +## Merge Configuration from Themes
 +
 +{{< new-in "0.84.0" >}} The configuration merge described below was improved in Hugo 0.84.0 and made fully configurable. The big change/improvement was that we now, by default, do deep merging of `params` maps from themes.
 +
 +The configuration value for `_merge` can be one of:
 +
 +none
 +: No merge.
 +
 +shallow
 +: Only add values for new keys.
 +
 +deep
 +: Add values for new keys, merge existing.
 +
 +Note that you don't need to be so verbose as in the default setup below; a `_merge` value higher up will be inherited if not set.
 +
 +{{< code-toggle config="mergeStrategy" skipHeader=true />}}
 +
 +## All Configuration Settings
 +
 +The following is the full list of Hugo-defined variables with their default
 +value in parentheses. Users may choose to override those values in their site
 +config file(s).
 +
 +### archetypeDir 
 +
 +**Default value:** "archetypes"
 +
 +The directory where Hugo finds archetype files (content templates). {{% module-mounts-note %}}
 +
 +### assetDir
 +
 +**Default value:** "assets"
 +
 +The directory where Hugo finds asset files used in [Hugo Pipes](/hugo-pipes/). {{% module-mounts-note %}}
 +
 +### baseURL
 +Hostname (and path) to the root, e.g. https://bep.is/
 +
 +### blackfriday
 +See [Configure Blackfriday](/getting-started/configuration-markup#blackfriday)
 +
 +### build
 +See [Configure Build](#configure-build)
 +
 +### buildDrafts (false)
 +
 +**Default value:** false
 +
 +Include drafts when building.
 +
 +### buildExpired
 +
 +**Default value:** false
 +
 +Include content already expired.
 +
 +### buildFuture
 +
 +**Default value:** false
 +
 +Include content with publishdate in the future.
 +
 +### caches
 +See [Configure File Caches](#configure-file-caches)
 +
 +### cascade
 +
 +{{< new-in "0.86.0" >}}
 +
 +Pass down down default configuration values (front matter) to pages in the content tree. The options in site config is the same as in page front matter, see [Front Matter Cascade](/content-management/front-matter#front-matter-cascade).
 +
 +### canonifyURLs
 +
 +**Default value:** false
 +
 +Enable to turn relative URLs into absolute.
 +
 +### contentDir
 +
 +**Default value:** "content"
 +
 +The directory from where Hugo reads content files. {{% module-mounts-note %}}
 +
 +### copyright
 +
 +**Default value:** ""
 +
 +Copyright notice for your site, typically displayed in the footer.
 +
 +### dataDir
 +
 +**Default value:** "data"
 +
 +The directory from where Hugo reads data files. {{% module-mounts-note %}}
 +
 +### defaultContentLanguage
 +
 +**Default value:** "en"
 +
 +Content without language indicator will default to this language.
 +
 +### defaultContentLanguageInSubdir
 +
 +**Default value:**  false
 +
 +Render the default content language in subdir, e.g. `content/en/`. The site root `/` will then redirect to `/en/`.
 +
 +### disableAliases
 +
 +**Default value:**  false
 +
 +Will disable generation of alias redirects. Note that even if `disableAliases` is set, the aliases themselves are preserved on the page. The motivation with this is to be able to generate 301 redirects in an `.htaccess`, a Netlify `_redirects` file or similar using a custom output format.
 +
 +### disableHugoGeneratorInject
 +
 +**Default value:**  false
 +
 +Hugo will, by default, inject a generator meta tag in the HTML head on the _home page only_. You can turn it off, but we would really appreciate if you don't, as this is a good way to watch Hugo's popularity on the rise.
 +
 +### disableKinds
 +
 +**Default value:**  []
 +
 +Enable disabling of all pages of the specified *Kinds*. Allowed values in this list: `"page"`, `"home"`, `"section"`, `"taxonomy"`, `"term"`, `"RSS"`, `"sitemap"`, `"robotsTXT"`, `"404"`.
 +
 +### disableLiveReload
 +
 +**Default value:**  false
 +
 +Disable automatic live reloading of browser window.
 +
 +### disablePathToLower
 +
 +**Default value:**  false
 +
 +: Do not convert the url/path to lowercase.
 +
- ### footnoteAnchorPrefix
- **Default value:**  ""
- Prefix for footnote anchors.
- ###  footnoteReturnLinkContents
- **Default value:**  ""
- Text to display for footnote return links.
++### enableEmoji
 +
 +**Default value:**  false
 +
 +Enable Emoji emoticons support for page content; see the [Emoji Cheat Sheet](https://www.webpagefx.com/tools/emoji-cheat-sheet/).
 +
 +### enableGitInfo
 +
 +**Default value:**  false
 +
 +Enable `.GitInfo` object for each page (if the Hugo site is versioned by Git). This will then update the `Lastmod` parameter for each page using the last git commit date for that content file.
 +
 +### enableInlineShortcodes
 +
 +**Default value:**  false
 +
 +Enable inline shortcode support. See [Inline Shortcodes](/templates/shortcode-templates/#inline-shortcodes).
 +
 +### enableMissingTranslationPlaceholders
 +
 +**Default value:**  false
 +
 +Show a placeholder instead of the default value or an empty string if a translation is missing.
 +
 +### enableRobotsTXT
 +
 +**Default value:**  false
 +
 +Enable generation of `robots.txt` file.
 +
 +### frontmatter
 +
 +See [Front matter Configuration](#configure-front-matter).
 +
- ### paginate 
 +### googleAnalytics
 +
 +**Default value:**  ""
 +
 +Google Analytics tracking ID.
 +
 +### hasCJKLanguage
 +
 +**Default value:** false
 +
 +If true, auto-detect Chinese/Japanese/Korean Languages in the content. This will make `.Summary` and `.WordCount` behave correctly for CJK languages.
 +
 +### imaging
++
 +See [Image Processing Config](/content-management/image-processing/#image-processing-config).
 +
 +### languageCode
 +
 +**Default value:**  ""
 +
 +A language tag as defined by [RFC 5646](https://datatracker.ietf.org/doc/html/rfc5646). The internal [RSS template](https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/rss.xml) populates its `<language>` element with this value. The value is not used elsewhere.
 +
 +### languages
++
 +See [Configure Languages](/content-management/multilingual/#configure-languages).
 +
 +### disableLanguages
 +
 +See [Disable a Language](/content-management/multilingual/#disable-a-language)
 +
 +### markup
 +See [Configure Markup](/getting-started/configuration-markup).{{< new-in "0.60.0" >}}
 +
 +### mediaTypes
 +See [Configure Media Types](/templates/output-formats/#media-types).
 +
 +### menus
 +See [Add Non-content Entries to a Menu](/content-management/menus/#add-non-content-entries-to-a-menu).
 +
 +### minify
 +See [Configure Minify](#configure-minify)
 +
 +### module
 +Module config see [Module Config](/hugo-modules/configuration/).{{< new-in "0.56.0" >}}
 +
 +### newContentEditor
 +
 +**Default value:** ""
 +
 +The editor to use when creating new content.
 +
 +### noChmod
 +
 +**Default value:** false
 +
 +Don't sync permission mode of files.
 +
 +### noTimes
 +
 +**Default value:** false
 +
 +Don't sync modification time of files.
 +
 +### outputFormats
 +See [Configure Output Formats](#configure-additional-output-formats).
 +
- footnoteReturnLinkContents: "↩"
++### paginate
 +
 +**Default value:** 10
 +
 +Default number of elements per page in [pagination](/templates/pagination/).
 +
 +### paginatePath
 +
 +**Default value:** "page"
 +
 +The path element used during pagination (`https://example.com/page/2`).
 +
 +### permalinks
 +See [Content Management](/content-management/urls/#permalinks).
 +
 +### pluralizeListTitles
 +
 +**Default value:** true
 +
 +Pluralize titles in lists.
 +
 +### publishDir
 +
 +**Default value:** "public"
 +
 +The directory to where Hugo will write the final static site (the HTML files etc.).
 +
 +### related
 +: See [Related Content](/content-management/related/#configure-related-content).{{< new-in "0.27" >}}
 +
 +### relativeURLs 
 +
 +**Default value:** false
 +
 +Enable this to make all relative URLs relative to content root. Note that this does not affect absolute URLs.
 +
 +### refLinksErrorLevel
 +
 +**Default value:** "ERROR"
 +
 +When using `ref` or `relref` to resolve page links and a link cannot resolved, it will be logged with this log level. Valid values are `ERROR` (default) or `WARNING`. Any `ERROR` will fail the build (`exit -1`).
 +
 +### refLinksNotFoundURL
 +URL to be used as a placeholder when a page reference cannot be found in `ref` or `relref`. Is used as-is.
 +
 +### removePathAccents
 +
 +**Default value:** false
 +
 +Removes [non-spacing marks](https://www.compart.com/en/unicode/category/Mn) from [composite characters](https://en.wikipedia.org/wiki/Precomposed_character) in content paths.
 +
 +```text
 +content/post/hügó.md --> https://example.org/post/hugo/
 +```
 +
 +
 +### rssLimit
 +
 +**Default value:** -1 (unlimited)
 +
 +Maximum number of items in the RSS feed.
 +
 +### sectionPagesMenu
 +See ["Section Menu for Lazy Bloggers"](/templates/menu-templates/#section-menu-for-lazy-bloggers).
 +
 +### security
 +
 +See [Security Policy](/about/security-model/#security-policy)
 +
 +### sitemap
 +Default [sitemap configuration](/templates/sitemap-template/#configure-sitemapxml).
 +
 +### summaryLength
 +
 +**Default value:** 70
 +
 +The length of text in words to show in a [`.Summary`](/content-management/summaries/#hugo-defined-automatic-summary-splitting).
 +
 +### taxonomies
 +See [Configure Taxonomies](/content-management/taxonomies#configure-taxonomies).
 +
 +### theme
 +: See [Module Config](/hugo-modules/configuration/#module-config-imports) for how to import a theme.
 +
 +### themesDir
 +
 +**Default value:**  "themes"
 +
 +The directory where Hugo reads the themes from.
 +
 +### timeout 
 +
 +**Default value:** "30s"
 +
 +Timeout for generating page contents, specified as a [duration](https://pkg.go.dev/time#Duration) or in milliseconds. *Note:*&nbsp;this is used to bail out of recursive content generation. You might need to raise this limit if your pages are slow to generate (e.g., because they require large image processing or depend on remote contents).
 +
 +### timeZone 
 +
 +{{< new-in "0.87.0" >}}
 +
 +The time zone (or location), e.g. `Europe/Oslo`,  used to parse front matter dates without such information and in the [`time` function](/functions/time/). The list of valid values may be system dependent, but should include `UTC`, `Local`, and any location in the [IANA Time Zone database](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones).
 +
 +### title
 +Site title.
 +
 +### titleCaseStyle
 +
 +**Default value:**  "AP"
 +
 +See [Configure Title Case](#configure-title-case)
 +
 +### uglyURLs
 +When enabled, creates URL of the form `/filename.html` instead of `/filename/`.
 +
 +### watch
 +
 +**Default value:** false
 +
 +Watch filesystem for changes and recreate as needed.
 +
 +{{% note %}}
 +If you are developing your site on a \*nix machine, here is a handy shortcut for finding a configuration option from the command line:
 +```
 +cd ~/sites/yourhugosite
 +hugo config | grep emoji
 +```
 +
 +which shows output like
 +
 +```
 +enableemoji: true
 +```
 +{{% /note %}}
 +
 +## Configure Build
 +
 +{{< new-in "0.66.0" >}}
 +
 +The `build` configuration section contains global build-related configuration options.
 +
 +{{< code-toggle file="config">}}
 +[build]
 +useResourceCacheWhen="fallback"
 +writeStats = false
 +noJSConfigInAssets = false
 +{{< /code-toggle >}}
 +
 +
 +useResourceCacheWhen
 +: When to use the cached resources in `/resources/_gen` for PostCSS and ToCSS. Valid values are `never`, `always` and `fallback`. The last value means that the cache will be tried if PostCSS/extended version is not available.
 +
 +writeStats {{< new-in "0.69.0" >}}
 +: When enabled, a file named `hugo_stats.json` will be written to your project root with some aggregated data about the build, e.g. list of HTML entities published to be used to do [CSS pruning](/hugo-pipes/postprocess/#css-purging-with-postcss). If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory). It's also worth mentioning that, due to the nature of the partial server builds, new HTML entities will be added when you add or change them while the server is running, but the old values will not be removed until you restart the server or run a regular `hugo` build.
 +
 +**Note** that the prime use case for this is purging of unused CSS; it is build for speed and there may be false positives (e.g. elements that isn't really a HTML element).
 +
 +noJSConfigInAssets {{< new-in "0.78.0" >}}
 +: Turn off writing a `jsconfig.json` into your `/assets` folder with mapping of imports from running [js.Build](https://gohugo.io/hugo-pipes/js). This file is intended to help with intellisense/navigation inside code editors such as [VS Code](https://code.visualstudio.com/). Note that if you do not use `js.Build`, no file will be written.
 +
 +## Configure Server
 +
 +{{< new-in "0.67.0" >}}
 +
 +This is only relevant when running `hugo server`, and it allows to set HTTP headers during development, which allows you to test out your Content Security Policy and similar. The configuration format matches [Netlify's](https://docs.netlify.com/routing/headers/#syntax-for-the-netlify-configuration-file) with slightly more powerful [Glob matching](https://github.com/gobwas/glob):
 +
 +
 +{{< code-toggle file="config">}}
 +[server]
 +[[server.headers]]
 +for = "/**"
 +
 +[server.headers.values]
 +X-Frame-Options = "DENY"
 +X-XSS-Protection = "1; mode=block"
 +X-Content-Type-Options = "nosniff"
 +Referrer-Policy = "strict-origin-when-cross-origin"
 +Content-Security-Policy = "script-src localhost:1313"
 +{{< /code-toggle >}}
 +
 +Since this is is "development only", it may make sense to put it below the `development` environment:
 +
 +
 +{{< code-toggle file="config/development/server">}}
 +[[headers]]
 +for = "/**"
 +
 +[headers.values]
 +X-Frame-Options = "DENY"
 +X-XSS-Protection = "1; mode=block"
 +X-Content-Type-Options = "nosniff"
 +Referrer-Policy = "strict-origin-when-cross-origin"
 +Content-Security-Policy = "script-src localhost:1313"
 +{{< /code-toggle >}}
 +
 +
 +{{< new-in "0.72.0" >}}
 +
 +You can also specify simple redirects rules for the server. The syntax is again similar to Netlify's. 
 +
 +Note that a `status` code of 200 will trigger a [URL rewrite](https://docs.netlify.com/routing/redirects/rewrites-proxies/), which is what you want in SPA situations, e.g:
 +
 +{{< code-toggle file="config/development/server">}}
 +[[redirects]]
 +from = "/myspa/**"
 +to = "/myspa/"
 +status = 200
 +force = false
 +{{< /code-toggle >}}
 +
 +{{< new-in "0.76.0" >}} Setting `force=true` will make a redirect even if there is existing content in the path. Note that before Hugo 0.76  `force` was the default behaviour, but this is inline with how Netlify does it.
 +
 +## Configure Title Case
 +
 +Set `titleCaseStyle` to specify the title style used by the [title](/functions/title/) template function and the automatic section titles in Hugo. It defaults to [AP Stylebook](https://www.apstylebook.com/) for title casing, but you can also set it to `Chicago` or `Go` (every word starts with a capital letter).
 +
 +## Configuration Environment Variables
 +
 +HUGO_NUMWORKERMULTIPLIER
 +: Can be set to increase or reduce the number of workers used in parallel processing in Hugo. If not set, the number of logical CPUs will be used.
 +
 +## Configuration Lookup Order
 +
 +Similar to the template [lookup order][], Hugo has a default set of rules for searching for a configuration file in the root of your website's source directory as a default behavior:
 +
 +1. `./config.toml`
 +2. `./config.yaml`
 +3. `./config.json`
 +
 +In your `config` file, you can direct Hugo as to how you want your website rendered, control your website's menus, and arbitrarily define site-wide parameters specific to your project.
 +
 +
 +## Example Configuration
 +
 +The following is a typical example of a configuration file. The values nested under `params:` will populate the [`.Site.Params`][] variable for use in [templates][]:
 +
 +{{< code-toggle file="config">}}
 +baseURL: "https://yoursite.example.com/"
 +title: "My Hugo Site"
 +permalinks:
 +  posts: /:year/:month/:title/
 +params:
 +  Subtitle: "Hugo is Absurdly Fast!"
 +  AuthorName: "Jon Doe"
 +  GitHubUser: "spf13"
 +  ListOfFoo:
 +    - "foo1"
 +    - "foo2"
 +  SidebarRecentLimit: 5
 +{{< /code-toggle >}}
 +
 +## Configure with Environment Variables
 +
 +In addition to the 3 config options already mentioned, configuration key-values can be defined through operating system environment variables.
 +
 +For example, the following command will effectively set a website's title on Unix-like systems:
 +
 +```
 +$ env HUGO_TITLE="Some Title" hugo
 +```
 +
 +This is really useful if you use a service such as Netlify to deploy your site. Look at the Hugo docs [Netlify configuration file](https://github.com/gohugoio/hugoDocs/blob/master/netlify.toml) for an example.
 +
 +{{% note "Setting Environment Variables" %}}
 +Names must be prefixed with `HUGO_` and the configuration key must be set in uppercase when setting operating system environment variables.
 +
 +To set config params, prefix the name with `HUGO_PARAMS_`
 +{{% /note %}}
 +
 +{{< new-in "0.79.0" >}} If you are using snake_cased variable names, the above will not work, so since Hugo 0.79.0 Hugo determines the delimiter to use by the first character after `HUGO`. This allows you to define environment variables on the form `HUGOxPARAMSxAPI_KEY=abcdefgh`, using any [allowed](https://stackoverflow.com/questions/2821043/allowed-characters-in-linux-environment-variable-names#:~:text=So%20names%20may%20contain%20any,not%20begin%20with%20a%20digit.) delimiter.
 +
 +{{< todo >}}
 +Test and document setting params via JSON env var.
 +{{< /todo >}}
 +
 +## Ignore Content and Data Files when Rendering
 +
 +To exclude specific files from the `content` and `data` directories when rendering your site, set `ignoreFiles` to one or more regular expressions to match against the absolute file path.
 +
 +To ignore files ending with `.foo` or `.boo`:
 +
 +{{< code-toggle copy="false" >}}
 +ignoreFiles = ['\.foo$', '\.boo$']
 +{{< /code-toggle >}}
 +
 +To ignore a file using the absolute file path:
 +
 +{{< code-toggle copy="false" >}}
 +ignoreFiles = ['^/home/user/project/content/test\.md$']
 +{{< /code-toggle >}}
 +
 +## Configure Front Matter
 +
 +### Configure Dates
 +
 +Dates are important in Hugo, and you can configure how Hugo assigns dates to your content pages. You do this by adding a `frontmatter` section to your `config.toml`.
 +
 +
 +The default configuration is:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date = ["date", "publishDate", "lastmod"]
 +lastmod = [":git", "lastmod", "date", "publishDate"]
 +publishDate = ["publishDate", "date"]
 +expiryDate = ["expiryDate"]
 +{{< /code-toggle >}}
 +
 +If you, as an example, have a non-standard date parameter in some of your content, you can override the setting for `date`:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date = ["myDate", ":default"]
 +{{< /code-toggle >}}
 +
 +The `:default` is a shortcut to the default settings. The above will set `.Date` to the date value in `myDate` if present, if not we will look in `date`,`publishDate`, `lastmod` and pick the first valid date.
 +
 +In the list to the right, values starting with ":" are date handlers with a special meaning (see below). The others are just names of date parameters (case insensitive) in your front matter configuration.  Also note that Hugo have some built-in aliases to the above: `lastmod` => `modified`, `publishDate` => `pubdate`, `published` and `expiryDate` => `unpublishdate`. With that, as an example, using `pubDate` as a date in front matter, will, by default, be assigned to `.PublishDate`.
 +
 +The special date handlers are:
 +
 +
 +`:fileModTime`
 +: Fetches the date from the content file's last modification timestamp.
 +
 +An example:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +lastmod = ["lastmod", ":fileModTime", ":default"]
 +{{< /code-toggle >}}
 +
 +
 +The above will try first to extract the value for `.Lastmod` starting with the `lastmod` front matter parameter, then the content file's modification timestamp. The last, `:default` should not be needed here, but Hugo will finally look for a valid date in `:git`, `date` and then `publishDate`.
 +
 +
 +`:filename`
 +: Fetches the date from the content file's filename. For example, `2018-02-22-mypage.md` will extract the date `2018-02-22`. Also, if `slug` is not set, `mypage` will be used as the value for `.Slug`.
 +
 +An example:
 +
 +{{< code-toggle file="config" >}}
 +[frontmatter]
 +date  = [":filename", ":default"]
 +{{< /code-toggle >}}
 +
 +The above will try first to extract the value for `.Date` from the filename, then it will look in front matter parameters `date`, `publishDate` and lastly `lastmod`.
 +
 +
 +`:git`
 +: This is the Git author date for the last revision of this content file. This will only be set if `--enableGitInfo` is set or `enableGitInfo = true` is set in site config.
 +
 +## Configure Additional Output Formats
 +
 +Hugo v0.20 introduced the ability to render your content to multiple output formats (e.g., to JSON, AMP html, or CSV). See [Output Formats][] for information on how to add these values to your Hugo project's configuration file.
 +
 +## Configure Minify
 +
 +{{< new-in "0.68.0" >}}
 +
 +Default configuration:
 +
 +{{< code-toggle config="minify" />}}
 +
 +## Configure File Caches
 +
 +Since Hugo 0.52 you can configure more than just the `cacheDir`. This is the default configuration:
 +
 +{{< code-toggle >}}
 +[caches]
 +[caches.getjson]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.getcsv]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.getresource]
 +dir = ":cacheDir/:project"
 +maxAge = -1
 +[caches.images]
 +dir = ":resourceDir/_gen"
 +maxAge = -1
 +[caches.assets]
 +dir = ":resourceDir/_gen"
 +maxAge = -1
 +[caches.modules]
 +dir = ":cacheDir/modules"
 +maxAge = -1
 +{{< /code-toggle >}}
 +
 +You can override any of these cache settings in your own `config.toml`.
 +
 +### The keywords explained
 +
 +`:cacheDir`
 +: This is the value of the `cacheDir` config option if set (can also be set via OS env variable `HUGO_CACHEDIR`). It will fall back to `/opt/build/cache/hugo_cache/` on Netlify, or a `hugo_cache` directory below the OS temp dir for the others. This means that if you run your builds on Netlify, all caches configured with `:cacheDir` will be saved and restored on the next build. For other CI vendors, please read their documentation. For an CircleCI example, see [this configuration](https://github.com/bep/hugo-sass-test/blob/6c3960a8f4b90e8938228688bc49bdcdd6b2d99e/.circleci/config.yml).
 +
 +`:project`
 +: The base directory name of the current Hugo project. This means that, in its default setting, every project will have separated file caches, which means that when you do `hugo --gc` you will not touch files related to other Hugo projects running on the same PC.
 +
 +`:resourceDir`
 +: This is the value of the `resourceDir` config option.
 +
 +maxAge
 +: This is the duration before a cache entry will be evicted, -1 means forever and 0 effectively turns that particular cache off. Uses Go's `time.Duration`, so valid values are `"10s"` (10 seconds), `"10m"` (10 minutes) and `"10h"` (10 hours).
 +
 +dir
 +: The absolute path to where the files for this cache will be stored. Allowed starting placeholders are `:cacheDir` and `:resourceDir` (see above).
 +
 +## Configuration Format Specs
 +
 +* [TOML Spec][toml]
 +* [YAML Spec][yaml]
 +* [JSON Spec][json]
 +
 +[`.Site.Params`]: /variables/site/
 +[directory structure]: /getting-started/directory-structure
 +[json]: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf "Specification for JSON, JavaScript Object Notation"
 +[lookup order]: /templates/lookup-order/
 +[Output Formats]: /templates/output-formats/
 +[templates]: /templates/
 +[toml]: https://github.com/toml-lang/toml
 +[yaml]: https://yaml.org/spec/
 +[static-files]: /content-management/static-files/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e9feb765acba1c9d9a573a4d5d6111a6d8096da0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,57 @@@
++---
++title: Deployment with Rclone
++linktitle: Deployment with Rclone
++description: If you have access to your web host with SFTP/FTP/SSH/HTTP(DAV), you can use rclone to incrementally deploy your entire Hugo website.
++date: 2021-08-09
++publishdate: 2021-08-09
++lastmod: 2021-08-09
++categories: [hosting and deployment]
++keywords: [rclone,sftp,deployment]
++authors: [Daniel F. Dickinson]
++menu:
++  docs:
++    parent: "hosting-and-deployment"
++    weight: 80
++weight: 80
++sections_weight: 80
++draft: false
++aliases: [/tutorials/deployment-with-rclone/]
++toc: true
++notesforauthors:
++---
++
++## Assumptions
++
++* A web host running a web server. This could be a shared hosting environment or a VPS.
++* Access to your web host with any of the [protocols supported by rclone](https://rclone.org/#providers), such as SFTP.
++* A functional static website built with Hugo
++* Deploying from an [Rclone](https://rclone.org) compatible operating system
++* You have [installed Rclone](https://rclone.org/install/).
++
++**NB**: You can remove ``--interactive`` in the commands below once you are comfortable with rclone, if you wish. Also, ``--gc`` and ``--minify`` are optional in the ``hugo`` commands below.
++
++## Getting Started
++
++The spoiler is that you can even deploy your entire website from any compatible OS with no configuration. Using SFTP for example:
++
++```
++hugo --gc --minify
++rclone sync --interactive --sftp-host sftp.example.com --sftp-user www-data --sftp-ask-password public/ :sftp:www/
++```
++
++## Configure Rclone for Even Easier Usage
++
++The easiest way is simply to run ``rclone config``.
++
++The [Rclone docs](https://rclone.org/docs/) provide [an example of configuring Rclone to use SFTP](https://rclone.org/sftp/).
++
++For the next commands, we will assume you configured a remote you named ``hugo-www``
++
++The above 'spoiler' commands could become:
++
++```
++hugo --gc --minify
++rclone sync --interactive public/ hugo-www:www/
++```
++
++After you issue the above commands (and respond to any prompts), check your website and you will see that it is deployed.
index 8d9cb0e635ec09ad68428fa4b96f24d46a598f29,0000000000000000000000000000000000000000..bec8b36e42c14325335f37a90086ba69f4b9a748
mode 100644,000000..100644
--- /dev/null
@@@ -1,94 -1,0 +1,94 @@@
- git remote add origin git@gitlab.com:youruser/ciexample.git
 +---
 +title: "Hosting on KeyCDN"
 +date: 2017-09-12
 +description: "Accelerate your Hugo site globally with a KeyCDN integration. This tutorial shows you how to setup your static site as a GitLab page behind a KeyCDN pull zone."
 +categories: [hosting and deployment]
 +keywords: [keycdn,hosting,deployment,cdn]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 40
 +slug: ""
 +aliases: []
 +toc: false
 +draft: false
 +---
 +
 +[KeyCDN](https://www.keycdn.com/) provides a multitude of features to help accelerate and secure your Hugo site globally including Brotli compression, Let's Encrypt support, Origin Shield, and more.
 +
 +## Assumptions
 +
 +- You already have a Hugo page configured
 +- You have a GitLab account
 +- You have a KeyCDN account
 +
 +## Create a KeyCDN Pull Zone
 +
 +The first step will be to login to your KeyCDN account and create a new zone. Name this whatever you like and select the [Pull Zone](https://www.keycdn.com/support/create-a-pull-zone/) option. As for the origin URL, your site will be running on [GitLab Pages](https://docs.gitlab.com/ee/user/project/pages/getting_started_part_one.html) with a URL of `https://youruser.gitlab.io/reponame/`. Use this as the Origin URL.
 +
 +![Screenshot of KeyCDN's pull zone creation page](/images/hosting-and-deployment/hosting-on-keycdn/keycdn-pull-zone.png)
 +
 +While the origin location doesn’t exist yet, you will need to use your new Zone URL address (or [Zone Alias](https://www.keycdn.com/support/create-a-zone-alias/)) in the `.gitlab-ci.yml` file that will be uploaded to your GitLab project.
 +
 +Ensure that you use your Zone URL or Zone alias as the `BASEURL` variable in the example below. This will be the user-visible website address.
 +
 +## Configure Your .gitlab-ci.yml File
 +
 +Your `.gitlab-ci.yml` file should look similar to the example below. Be sure to modify any variables that are specific to your setup.
 +
 +```
 +image: alpine:latest
 +
 +variables:
 +    BASEURL: "https://cipull-7bb7.kxcdn.com/"
 +    HUGO_VERSION: "0.26"
 +    HUGO_CHECKSUM: "67e4ba5ec2a02c8164b6846e30a17cc765b0165a5b183d5e480149baf54e1a50"
 +    KEYCDN_ZONE_ID: "75544"
 +
 +before_script:
 +    - apk update
 +    - apk add curl
 +
 +pages:
 +    stage: deploy
 +    script:
 +    - apk add git
 +    - git submodule update --init
 +    - curl -sSL https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz -o /tmp/hugo.tar.gz
 +    - echo "${HUGO_CHECKSUM}  /tmp/hugo.tar.gz" | sha256sum -c
 +    - tar xf /tmp/hugo.tar.gz hugo -C /tmp/ && cp /tmp/hugo /usr/bin
 +    - hugo --baseURL ${BASEURL}
 +    - curl "https://api.keycdn.com/zones/purge/${KEYCDN_ZONE_ID}.json" -u "${KEYCDN_API_KEY}:"
 +    artifacts:
 +    paths:
 +    - public
 +    only:
 +    - master
 +
 +```
 +Using this integration method,  you will have to specify the Zone ID and your [KeyCDN API](https://www.keycdn.com/api) key as secret variables. To do this, navigate to the top-left menu bar in GitLab and select Projects. Then, select your project and click on the Settings page. Finally, select Pipelines from the sub-menu and scroll down to the Secret Variable section.
 +
 +The Secret Variable for your Zone ID should look similar to:
 +
 +![Screenshot of setting the Zone ID secret variable](/images/hosting-and-deployment/hosting-on-keycdn/secret-zone-id.png)
 +
 +While the Secret Variable for your API Key will look similar to:
 +
 +![Screenshot of setting the API Key secret variable](/images/hosting-and-deployment/hosting-on-keycdn/secret-api-key.png)
 +
 +The Zone ID and API key are used to purge your zone – it’s not strictly needed but otherwise, the CDN might deliver older versions of your assets for quite a while.
 +
 +## Push Your Changes to GitLab
 +
 +Now it’s time to push the newly created repository to GitLab:
 +
 +```
- You can watch the progress and CI job output in your Gitlab project under “Pipelines”. 
++git remote add origin git@gitlab.com:youruser/ci-example.git
 +git push -u origin master
 +```
 +
++You can watch the progress and CI job output in your Gitlab project under “Pipelines”.
 +
 +After verifying your CI job ran without issues, first check that your GitLab page shows up under `https://youruser.gitlab.io/reponame/` (it might look broken depending on your browser settings as all links point to your KeyCDN zone – don’t worry about that) and then by heading to whatever Zone alias / Zone URL you defined.
 +
 +To learn more about Hugo hosting options with KeyCDN, check out the complete [Hugo hosting with KeyCDN integration guide](https://www.keycdn.com/support/hugo-hosting/).
index 7a77742e236ee0914759612785d6a055e8ba9349,0000000000000000000000000000000000000000..73b20bcb2bea4777a30b158063eec9d74223d184
mode 100644,000000..100644
--- /dev/null
@@@ -1,92 -1,0 +1,90 @@@
- lastmod: 2020-01-01
 +---
 +title: Host on Render
 +linktitle: Host on Render
 +description: Host your Hugo site for free with Render's global CDN, fully-managed SSL and auto deploys from GitHub.
 +date: 2019-06-06
 +publishdate: 2019-06-06
 +categories: [hosting and deployment]
 +keywords: [hosting,deployment]
 +authors: [Anurag Goel]
 +menu:
 +  docs:
 +    parent: "hosting-and-deployment"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +draft: false
 +aliases: []
 +toc: true
 +---
 +
 +## Introduction
 +
 +[Render](https://render.com) is a fully-managed cloud platform where you can host static sites, backend APIs, databases, cron jobs, and all your other apps in one place.
 +
 +Static sites are **completely free** on Render and include the following:
 +
 +- Continuous, automatic builds & deploys from [GitHub](https://render.com/docs/github) and [GitLab](https://render.com/docs/gitlab).
 +- Automatic SSL certificates through [Let's Encrypt](https://letsencrypt.org).
 +- Instant cache invalidation with a lightning fast, global CDN.
 +- Unlimited collaborators.
 +- Unlimited [custom domains](https://render.com/docs/custom-domains).
 +- Automatic [Brotli compression](https://en.wikipedia.org/wiki/Brotli) for faster sites.
 +- Native HTTP/2 support.
 +- [Pull Request Previews](https://render.com/docs/pull-request-previews).
 +- Automatic HTTP → HTTPS redirects.
 +- Custom URL redirects and rewrites.
 +
 +## Assumptions
 +
 +* You have an account with GitHub or GitLab.
 +* You have completed the [Quick Start][] or have a Hugo website you are ready to deploy and share with the world.
 +* You have a Render account. You can sign up at https://render.com/register.
 +
 +## Deployment
 +
 +You can set up a Hugo site on Render in two quick steps:
 +
 +1. Create a new **Static Site** on Render, and give Render permission to access your GitHub/Gitlab repo.
 +2. Use the following values during creation:
 +
 +  Field                | Value
 +  -------------------  |  -------------------
 + **Build Command**     | `hugo --gc --minify` (or your own build command)
 + **Publish Directory** | `public` (or your own output directory)
 +
 +That's it! Your site will be live on your Render URL (which looks like `yoursite.onrender.com`) as soon as the build is done.
 +
 +## Continuous Deploys
 +
 +Now that Render is connected to your repo, it will **automatically build and publish your site** any time you push to your GitHub/Gitlab.
 +
 +You can choose to disable auto deploys under the **Settings** section for your site and deploy it manually from the Render dashboard.
 +
 +## CDN and Cache Invalidation
 +
 +Render hosts your site on a global, lightning fast CDN which ensures the fastest possible download times for all your users across the globe.
 +
 +Every deploy automatically and instantly invalidates the CDN cache, so your users can always access the latest content on your site.
 +
 +## Custom Domains
 +
 +Add your own domains to your site easily using Render's [custom domains](https://render.com/docs/custom-domains) guide.
 +
 +## Pull Request Previews
 +
 +With Pull Request (PR) previews, you can visualize changes introduced in a pull request instead of simply relying on code reviews.
 +
 +Once enabled, every PR for your site will automatically generate a new static site based on the code in the PR. It will have its own URL, and it will be deleted automatically when the PR is closed.
 +
 +Read more about [Pull Request Previews](https://render.com/docs/pull-request-previews) on Render.
 +
 +## Hugo Themes
 +
 +Render automatically downloads all Git submodules defined in your Git repo on every build. This way Hugo themes added as submodules work as expected.
 +
 +## Support
 +
 +Chat with Render developers at https://render.com/chat or email `support@render.com` if you need help.
 +
 +[Quick Start]: /getting-started/quick-start/
index c66d93a6dfd57519dc19350e576a4a98e3054667,0000000000000000000000000000000000000000..70de492ab4bf822e1a4f21d6c1c7f406ea35cdac
mode 100644,000000..100644
--- /dev/null
@@@ -1,173 -1,0 +1,173 @@@
- The workspace file to use. This enables Go workspace mode. Note that this can also be set via OS env, e.g. `export HUGO_MODULE_WORKSPACE=/my/hugo.work` This only works with Go 1.18+.
 +---
 +title: Configure Modules
 +linktitle: Configure Modules
 +description: This page describes the configuration options for a module.
 +date: 2019-07-24
 +categories: [hugo modules]
 +keywords: [themes, source, organization, directories]
 +menu:
 +  docs:
 +    parent: "modules"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +toc: true
 +---
 +
 +## Module Config: Top level
 +
 +{{< code-toggle file="config">}}
 +[module]
 +noVendor = ""
 +proxy = "direct"
 +noProxy = "none"
 +private = "*.*"
 +replacements = ""
 +workspace = ""
 +{{< /code-toggle >}}
 +
 +
 +noVendor {{< new-in "0.75.0" >}}
 +: A optional Glob pattern matching module paths to skip when vendoring, e.g. "github.com/**"
 +
 +vendorClosest {{< new-in "0.81.0" >}}
 +: When enabled, we will pick the vendored module closest to the module using it. The default behaviour is to pick the first. Note that there can still be only one dependency of a given module path, so once it is in use it cannot be redefined.
 +
 +proxy
 +: Defines the proxy server to use to download remote modules. Default is `direct`, which means "git clone" and similar.
 +
 +noProxy
 +: Comma separated glob list matching paths that should not use the proxy configured above.
 +
 +private
 +: Comma separated glob list matching paths that should be treated as private.
 +
 +workspace {{< new-in "0.83.0" >}}
- : A comma separated (or a slice) list of module path to directory replacement mapping, e.g. `github.com/bep/myprettytheme -> ../..,github.com/bep/shortcodes -> /some/path`. This is mostly useful for temporary locally development of a module, and then it makes sense to set it as an OS environment variable, e.g: `env HUGO_MODULE_REPLACEMENTS="github.com/bep/myprettytheme -> ../.."`. Any relative path is relate to [themesDir](https://gohugo.io/getting-started/configuration/#all-configuration-settings), and absolute paths are allowed.
++: The workspace file to use. This enables Go workspace mode. Note that this can also be set via OS env, e.g. `export HUGO_MODULE_WORKSPACE=/my/hugo.work` This only works with Go 1.18+.
 +
 +replacements {{< new-in "0.77.0" >}}
++: A comma separated (or a slice) list of module path to directory replacement mapping, e.g. `github.com/bep/my-theme -> ../..,github.com/bep/shortcodes -> /some/path`. This is mostly useful for temporary locally development of a module, and then it makes sense to set it as an OS environment variable, e.g: `env HUGO_MODULE_REPLACEMENTS="github.com/bep/my-theme -> ../.."`. Any relative path is relate to [themesDir](https://gohugo.io/getting-started/configuration/#all-configuration-settings), and absolute paths are allowed.
 +
 +Note that the above terms maps directly to their counterparts in Go Modules. Some of these setting may be natural to set as OS environment variables. To set the proxy server to use, as an example:
 +
 +```
 +env HUGO_MODULE_PROXY=https://proxy.example.org hugo
 +```
 +
 +{{< gomodules-info >}}
 +
 +## Module Config: hugoVersion
 +
 +If your module requires a particular version of Hugo to work, you can indicate that in the `module` section and the user will be warned if using a too old/new version.
 +
 +{{< code-toggle file="config">}}
 +[module]
 +[module.hugoVersion]
 +  min = ""
 +  max = ""
 +  extended = false
 +
 +{{< /code-toggle >}}
 +
 +Any of the above can be omitted.
 +
 +min
 +: The minimum Hugo version supported, e.g. `0.55.0`
 +
 +max
 +: The maximum Hugo version supported, e.g. `0.55.0`
 +
 +extended
 +: Whether the extended version of Hugo is required.
 +
 +## Module Config: imports
 +
 +{{< code-toggle file="config">}}
 +[module]
 +[[module.imports]]
 +  path = "github.com/gohugoio/hugoTestModules1_linux/modh1_2_1v"
 +  ignoreConfig = false
 +  ignoreImports = false
 +  disable = false
 +[[module.imports]]
 +  path = "my-shortcodes"
 +{{< /code-toggle >}}
 +
 +path
 +: Can be either a valid Go Module module path, e.g. `github.com/gohugoio/myShortcodes`, or the directory name for the module as stored in your themes folder.
 +
 +ignoreConfig
 +: If enabled, any module configuration file, e.g. `config.toml`, will not be loaded. Note that this will also stop the loading of any transitive module dependencies.
 +
 +ignoreImports {{< new-in "0.80.0" >}}
 +: If enabled, module imports will not be followed.
 +
 +disable
 +: Set to `true` to disable the module while keeping any version info in the `go.*` files.
 +
 +noMounts {{< new-in "0.84.2" >}}
 +:  Do not mount any folder in this import.
 +
 +noVendor
 +:  Never vendor this import (only allowed in main project).
 +
 +{{< gomodules-info >}}
 +
 +
 +## Module Config: mounts
 +
 +{{% note %}}
 +When the `mounts` config was introduced in Hugo 0.56.0, we were careful to preserve the existing `contentDir`, `staticDir`, and similar configuration to make sure all existing sites just continued to work. But you should not have both: if you add a `mounts` section you should remove the old `contentDir`, `staticDir`, etc. settings.
 +{{% /note %}}
 +
 +{{% warning %}}
 +When you add a mount, the default mount for the concerned target root is ignored: be sure to explicitly add it.
 +{{% /warning %}}
 +
 +**Default mounts**
 +{{< code-toggle file="config">}}
 +[module]
 +[[module.mounts]]
 +    source="content"
 +    target="content"
 +[[module.mounts]]
 +    source="static"
 +    target="static"
 +[[module.mounts]]
 +    source="layouts"
 +    target="layouts"
 +[[module.mounts]]
 +    source="data"
 +    target="data"
 +[[module.mounts]]
 +    source="assets"
 +    target="assets"
 +[[module.mounts]]
 +    source="i18n"
 +    target="i18n"
 +[[module.mounts]]
 +    source="archetypes"
 +    target="archetypes"
 +{{< /code-toggle >}}
 +
 +source
 +: The source directory of the mount. For the main project, this can be either project-relative or absolute and even a symbolic link. For other modules it must be project-relative.
 +
 +target
 +: Where it should be mounted into Hugo's virtual filesystem. It must start with one of Hugo's component folders: `static`, `content`, `layouts`, `data`, `assets`, `i18n`, or `archetypes`. E.g. `content/blog`.
 +
 +lang
 +: The language code, e.g. "en". Only relevant for `content` mounts, and `static` mounts when in multihost mode.
 +
 +includeFiles (string or slice)
 +: One or more [glob](https://github.com/gobwas/glob) patterns matching files or directories to include. If `excludeFiles` is not set, the files matching `includeFiles` will be the files mounted. 
 +
 +The glob patterns are matched to the filenames starting from the `source` root, they should have Unix styled slashes even on Windows, `/` matches the mount root and `**` can be used as a  super-asterisk to match recursively down all directories, e.g `/posts/**.jpg`.
 +
 +The search is case-insensitive.
 +
 +{{< new-in "0.89.0" >}}
 +
 +excludeFiles (string or slice)
 +: One or more glob patterns matching files to exclude.
 +
index e0d73957aa8c10fe693dd3a71a8d174715317450,0000000000000000000000000000000000000000..038e0bf89e4a97fb580c93c4d50478ce2cec3442
mode 100644,000000..100644
--- /dev/null
@@@ -1,143 -1,0 +1,143 @@@
- Note that you can also configure the `modules` cache with a `maxAge`, see [File Caches](/hugo-modules/configuration/#configure-file-caches).
 +---
 +title: Use Hugo Modules
 +linktitle: Use Hugo Modules
 +description: How to use Hugo Modules to build and manage your site.
 +date: 2019-07-24
 +categories: [hugo modules]
 +keywords: [install, themes, source, organization, directories,usage,modules]
 +menu:
 +  docs:
 +    parent: "modules"
 +    weight: 20
 +weight: 20
 +sections_weight: 20
 +draft: false
 +aliases: [/themes/usage/,/themes/installing/,/installing-and-using-themes/]
 +toc: true
 +---
 +
 +## Prerequisite
 +
 +{{< gomodules-info >}}
 +
 +
 +
 +## Initialize a New Module
 +
 +Use `hugo mod init` to initialize a new Hugo Module. If it fails to guess the module path, you must provide it as an argument, e.g.:
 +
 +```bash
 +hugo mod init github.com/gohugoio/myShortcodes
 +```
 +
 +Also see the [CLI Doc](/commands/hugo_mod_init/).
 +
 +## Use a Module for a Theme
 +The easiest way to use a Module for a theme is to import it in the config.
 +
 +1. Initialize the hugo module system: `hugo mod init github.com/<your_user>/<your_project>`
 +2. Import the theme:
 +
 +{{< code-toggle file="config" >}}
 +[module]
 +  [[module.imports]]
 +    path = "github.com/spf13/hyde"
 +{{< /code-toggle >}}
 +
 +## Update Modules
 +
 +Modules will be downloaded and added when you add them as imports to your configuration, see [Module Imports](/hugo-modules/configuration/#module-config-imports).
 +
 +To update or manage versions, you can use `hugo mod get`.
 +
 +Some examples:
 +
 +### Update All Modules
 +
 +```bash
 +hugo mod get -u
 +```
 +
 +### Update All Modules Recursively
 +
 +{{< new-in "0.65.0" >}}
 +
 +```bash
 +hugo mod get -u ./...
 +```
 +
 +### Update One Module
 +
 +```bash
 +hugo mod get -u github.com/gohugoio/myShortcodes
 +```
 +### Get a Specific Version
 +
 +```bash
 +hugo mod get github.com/gohugoio/myShortcodes@v1.0.7
 +```
 +
 +Also see the [CLI Doc](/commands/hugo_mod_get/).
 +
 +## Make and test changes in a module
 +
 +One way to do local development of a module imported in a project is to add a replace directive to a local directory with the source in `go.mod`:
 +
 +```bash
 +replace github.com/bep/hugotestmods/mypartials => /Users/bep/hugotestmods/mypartials
 +```
 +
 +If you have the `hugo server` running, the configuration will be reloaded and `/Users/bep/hugotestmods/mypartials` put on the watch list.
 +
 +Note that since v.0.77.0 you can use modules config [`replacements`](https://gohugo.io/hugo-modules/configuration/#module-config-top-level) option. {{< new-in "0.77.0" >}}
 +
 +## Print Dependency Graph
 +
 +
 +Use `hugo mod graph` from the relevant module directory and it will print the dependency graph, including vendoring, module replacement or disabled status.
 +
 +E.g.:
 +
 +```
 +hugo mod graph
 +
 +github.com/bep/my-modular-site github.com/bep/hugotestmods/mymounts@v1.2.0
 +github.com/bep/my-modular-site github.com/bep/hugotestmods/mypartials@v1.0.7
 +github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myassets@v1.0.4
 +github.com/bep/hugotestmods/mypartials@v1.0.7 github.com/bep/hugotestmods/myv2@v1.0.0
 +DISABLED github.com/bep/my-modular-site github.com/spf13/hyde@v0.0.0-20190427180251-e36f5799b396
 +github.com/bep/my-modular-site github.com/bep/hugo-fresh@v1.0.1
 +github.com/bep/my-modular-site in-themesdir
 +
 +```
 +
 +Also see the [CLI Doc](/commands/hugo_mod_graph/).
 +
 +## Vendor Your Modules
 +
 +`hugo mod vendor` will write all the module dependencies to a `_vendor` folder, which will then be used for all subsequent builds.
 +
 +Note that:
 +
 +* You can run `hugo mod vendor` on any level in the module tree.
 +* Vendoring will not store modules stored in your `themes` folder.
 +* Most commands accept a `--ignoreVendorPaths` flag, which will then not use the vendored modules in `_vendor` for the module paths matching the [Glob](https://github.com/gobwas/glob) pattern given. Note that before Hugo 0.75 this flag was named `--ignoreVendor` and was a "all or nothing". {{< new-in "0.75.0" >}}
 +
 +Also see the [CLI Doc](/commands/hugo_mod_vendor/).
 +
 +
 +## Tidy go.mod, go.sum
 +
 +Run `hugo mod tidy` to remove unused entries in `go.mod` and `go.sum`.
 +
 +Also see the [CLI Doc](/commands/hugo_mod_clean/).
 +
 +## Clean Module Cache
 +
 +Run `hugo mod clean` to delete the entire modules cache.
 +
++Note that you can also configure the `modules` cache with a `maxAge`, see [File Caches](/getting-started/configuration/#configure-file-caches).
 +
 +
 +
 +Also see the [CLI Doc](/commands/hugo_mod_clean/).
index b32879b6954f23b6c36412a3e0bf27b233e42705,0000000000000000000000000000000000000000..85ec17a8b95b8698d9e62d33c65d2cbf50c56e5d
mode 100644,000000..100644
--- /dev/null
@@@ -1,33 -1,0 +1,32 @@@
- - The **partial layouts**, including the `internals` (e.g. social metas).
 +---
 +
 +title: Hapticmedia Blog
 +date: 2019-10-01
 +description: "Showcase: \"A simple, but powerful, multilingual blog.\""
 +siteURL: https://hapticmedia.fr/blog/en/
 +byline: "[Cyril Bonnet](https://github.com/monsieurnebo), Web Developer"
 +
 +---
 +
 +Our goal was to create a simple, effective and multilingual blog on [3D technology](https://hapticmedia.fr/blog/en/3d-technology/) that could be managed by a non-technical profile.
 +
 +## Why Hugo?
 +Hugo addresses all these needs, coupled with [Forestry.io](https://forestry.io/) for its administration via a "turnkey" interface. We have attached particular importance to SEO, and therefore to the creation of an advanced taxonomy system. Thus, each author and tag has a dedicated page, listing the related posts.
 +
 +
 +## What we liked
 +- The **multilingual** content support, especially simple to setup.
 +- The **multiple environments** support (develop, staging, test, production, ...).
 +- Although a hard start with the Go language, the power of the **Hugo's templating**.
++- The **partial layouts**, including the `internals` (e.g. social meta tags).
 +- The **build time**, unbeatable ⚡️⚡️⚡️.
 +
 +
 +## Tools & workflow
 +- We used the same design as **[our website](https://hapticmedia.fr/en/)**, recreated as a Hugo HTML template.
 +- **[Hugo](https://gohugo.io)** for the static website generator.
 +- **[CircleCI](https://circleci.com)** for continuous integration & deployment.
 +- **[AWS](https://aws.amazon.com/)** for web hosting.
 +- **[Forestry.io](https://forestry.io)** for the content management.
 +
 +**All of these tools allow our editor to manage the blog's content without having to worry about its technical aspect, which is managed by the developers.**
index 1b82e9ebf20aa28f087749453721c726bccd808c,0000000000000000000000000000000000000000..a2d06cf812c739810288c10130fa2a096bd93e61
mode 100644,000000..100644
--- /dev/null
@@@ -1,64 -1,0 +1,64 @@@
- * Caddy Server. Using `errors { 404 /404.html }`. [Details here](https://caddyserver.com/docs/errors)
 +---
 +title: Custom 404 Page
 +linktitle: 404 Page
 +description: If you know how to create a single page template, you have unlimited options for creating a custom 404.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-03-31
 +categories: [templates]
 +keywords: [404, page not found]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 120
 +weight: 120   #rem
 +draft: false
 +aliases: []
 +toc: false
 +---
 +
 +When using Hugo with [GitHub Pages](https://pages.github.com/), you can provide your own template for a [custom 404 error page](https://help.github.com/articles/custom-404-pages/) by creating a 404.html template file in your `/layouts` folder. When Hugo generates your site, the `404.html` file will be placed in the root.
 +
 +404 pages will have all the regular [page variables][pagevars] available to use in the templates.
 +
 +In addition to the standard page variables, the 404 page has access to all site content accessible from `.Pages`.
 +
 +```
 +▾ layouts/
 +    404.html
 +```
 +
 +## 404.html
 +
 +This is a basic example of a 404.html template:
 +
 +{{< code file="layouts/404.html" download="404.html" >}}
 +{{ define "main"}}
 +    <main id="main">
 +      <div>
 +       <h1 id="title"><a href="{{ "/" | relURL }}">Go Home</a></h1>
 +      </div>
 +    </main>
 +{{ end }}
 +{{< /code >}}
 +
 +## Automatic Loading
 +
 +Your 404.html file can be set to load automatically when a visitor enters a mistaken URL path, dependent upon the web serving environment you are using. For example:
 +
 +* [GitHub Pages](/hosting-and-deployment/hosting-on-github/) and [GitLab Pages](/hosting-and-deployment/hosting-on-gitlab/). The 404 page is automatic.
 +* Apache. You can specify `ErrorDocument 404 /404.html` in an `.htaccess` file in the root of your site.
 +* Nginx. You might specify `error_page 404 /404.html;` in your `nginx.conf` file. [Details here](https://nginx.org/en/docs/http/ngx_http_core_module.html#error_page).
 +* Amazon AWS S3. When setting a bucket up for static web serving, you can specify the error file from within the S3 GUI.
 +* Amazon CloudFront. You can specify the page in the Error Pages section in the CloudFront Console. [Details here](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/custom-error-pages.html)
++* Caddy Server. Use the `handle_errors` directive to specify error pages for one or more status codes. [Details here](https://caddyserver.com/docs/caddyfile/directives/handle_errors)
 +* Netlify. Add `/* /404.html 404` to `content/_redirects`. [Details Here](https://www.netlify.com/docs/redirects/#custom-404)
 +* Azure Static website. You can specify the `Error document path` in the Static website configuration page of the Azure portal. [More details are available in the Static website documentation](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website).
 +
 +{{% note %}}
 +`hugo server` will not automatically load your custom `404.html` file, but you
 +can test the appearance of your custom "not found" page by navigating your
 +browser to `/404.html`.
 +{{% /note %}}
 +
 +[pagevars]: /variables/page/
index a4f238fdfbc8ea666c4320ae5e6d4456a24b3b1b,0000000000000000000000000000000000000000..f1634c7d8e458bde7efca0e6e23f0393cdfb7165
mode 100644,000000..100644
--- /dev/null
@@@ -1,344 -1,0 +1,344 @@@
- title: Ordere and Grouping Hugo Lists
 +---
- In Hugo, A list template is any template that will be used to render multiple pieces of content in a single HTML page.
++title: Ordering and Grouping Hugo Lists
 +linktitle: List Ordering and Grouping
 +description: You can group or order your content in both your templating and content front matter.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: []
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 27
 +weight: 27
 +sections_weight: 27
 +draft: true
 +aliases: [/templates/ordering/,/templates/grouping/]
 +toc: true
 +notes: This was originally going to be a separate page on the new docs site but it now makes more sense to keep everything within the templates/lists page. - rdwatters, 2017-03-12.
 +---
 +
++In Hugo, a list template is any template that will be used to render multiple pieces of content in a single HTML page.
 +
 +## Example List Templates
 +
 +### Section Template
 +
 +This list template is used for [spf13.com](https://spf13.com/). It makes use of [partial templates][partials]. All examples use a [view](/templates/views/) called either "li" or "summary."
 +
 +{{< code file="layouts/section/post.html" >}}
 +{{ partial "header.html" . }}
 +{{ partial "subheader.html" . }}
 +
 +<section id="main">
 +  <div>
 +   <h1 id="title">{{ .Title }}</h1>
 +        <ul id="list">
 +            {{ range .Pages }}
 +                {{ .Render "li"}}
 +            {{ end }}
 +        </ul>
 +  </div>
 +</section>
 +{{ partial "footer.html" . }}
 +{{< /code >}}
 +
 +### Taxonomy Template
 +
 +{{< code file="layouts/_default/taxonomies.html" download="taxonomies.html" >}}
 +{{ define "main" }}
 +<section id="main">
 +  <div>
 +   <h1 id="title">{{ .Title }}</h1>
 +    {{ range .Pages }}
 +        {{ .Render "summary"}}
 +    {{ end }}
 +  </div>
 +</section>
 +{{ end }}
 +{{< /code >}}
 +
 +## Order Content
 +
 +Hugo lists render the content based on metadata provided in the [front matter](/content-management/front-matter/)..
 +
 +Here are a variety of different ways you can order the content items in
 +your list templates:
 +
 +### Default: Weight > Date
 +
 +{{< code file="layouts/partials/order-default.html" >}}
 +<ul class="pages">
 +    {{ range .Pages }}
 +        <li>
 +            <h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
 +            <time>{{ .Date.Format "Mon, Jan 2, 2006" }}</time>
 +        </li>
 +    {{ end }}
 +</ul>
 +{{< /code >}}
 +
 +### By Weight
 +
 +{{< code file="layouts/partials/by-weight.html" >}}
 +{{ range .Pages.ByWeight }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Date
 +
 +{{< code file="layouts/partials/by-date.html" >}}
 +{{ range .Pages.ByDate }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Publish Date
 +
 +{{< code file="layouts/partials/by-publish-date.html" >}}
 +{{ range .Pages.ByPublishDate }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .PublishDate.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Expiration Date
 +
 +{{< code file="layouts/partials/by-expiry-date.html" >}}
 +{{ range .Pages.ByExpiryDate }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .ExpiryDate.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Last Modified Date
 +
 +{{< code file="layouts/partials/by-last-mod.html" >}}
 +{{ range .Pages.ByLastmod }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Length
 +
 +{{< code file="layouts/partials/by-length.html" >}}
 +{{ range .Pages.ByLength }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +
 +### By Title
 +
 +{{< code file="layouts/partials/by-title.html" >}}
 +{{ range .Pages.ByTitle }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Link Title
 +
 +{{< code file="layouts/partials/by-link-title.html" >}}
 +{{ range .Pages.ByLinkTitle }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Parameter
 +
 +Order based on the specified front matter parameter. Content that does not have the specified front matter field  will use the site's `.Site.Params` default. If the parameter is not found at all in some entries, those entries will appear together at the end of the ordering.
 +
 +The below example sorts a list of posts by their rating.
 +
 +{{< code file="layouts/partials/by-rating.html" >}}
 +{{ range (.Pages.ByParam "rating") }}
 +  <!-- ... -->
 +{{ end }}
 +{{< /code >}}
 +
 +If the front matter field of interest is nested beneath another field, you can
 +also get it:
 +
 +{{< code file="layouts/partials/by-nested-param.html" >}}
 +{{ range (.Pages.ByParam "author.last_name") }}
 +  <!-- ... -->
 +{{ end }}
 +{{< /code >}}
 +
 +### Reverse Order
 +
 +Reversing order can be applied to any of the above methods. The following uses `ByDate` as an example:
 +
 +{{< code file="layouts/partials/by-date-reverse.html" >}}
 +{{ range .Pages.ByDate.Reverse }}
 +<li>
 +<a href="{{ .Permalink }}">{{ .Title }}</a>
 +<div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +</li>
 +{{ end }}
 +{{< /code >}}
 +
 +## Group Content
 +
 +Hugo provides some functions for grouping pages by Section, Type, Date, etc.
 +
 +### By Page Field
 +
 +{{< code file="layouts/partials/by-page-field.html" >}}
 +{{ range .Pages.GroupBy "Section" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Page date
 +
 +{{< code file="layouts/partials/by-page-date.html" >}}
 +{{ range .Pages.GroupByDate "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Page publish date
 +
 +{{< code file="layouts/partials/by-page-publish-date.html" >}}
 +{{ range .Pages.GroupByPublishDate "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .PublishDate.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Page Param
 +
 +{{< code file="layouts/partials/by-page-param.html" >}}
 +{{ range .Pages.GroupByParam "param_key" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### By Page Param in Date Format
 +
 +{{< code file="layouts/partials/by-page-param-as-date.html" >}}
 +{{ range .Pages.GroupByParamDate "param_key" "2006-01" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +### Reverse Key Order
 +
 +The ordering of the groups is performed by keys in alphanumeric order (A–Z, 1–100) and in reverse chronological order (newest first) for dates.
 +
 +While these are logical defaults, they are not always the desired order. There are two different syntaxes to change the order, both of which work the same way. You can use your preferred syntax.
 +
 +#### Reverse Method
 +
 +```
 +{{ range (.Pages.GroupBy "Section").Reverse }}
 +```
 +
 +```
 +{{ range (.Pages.GroupByDate "2006-01").Reverse }}
 +```
 +
 +
 +#### Provide the Alternate Direction
 +
 +```
 +{{ range .Pages.GroupByDate "2006-01" "asc" }}
 +```
 +
 +```
 +{{ range .Pages.GroupBy "Section" "desc" }}
 +```
 +
 +### Order Within Groups
 +
 +Because Grouping returns a `{{.Key}}` and a slice of pages, all of the ordering methods listed above are available.
 +
 +In the following example, groups are ordered chronologically and then content
 +within each group is ordered alphabetically by title.
 +
 +{{< code file="layouts/partials/by-group-by-page.html" >}}
 +{{ range .Pages.GroupByDate "2006-01" "asc" }}
 +<h3>{{ .Key }}</h3>
 +<ul>
 +    {{ range .Pages.ByTitle }}
 +    <li>
 +    <a href="{{ .Permalink }}">{{ .Title }}</a>
 +    <div class="meta">{{ .Date.Format "Mon, Jan 2, 2006" }}</div>
 +    </li>
 +    {{ end }}
 +</ul>
 +{{ end }}
 +{{< /code >}}
 +
 +## Filter and Limiting Lists
 +
 +See the [_Lists/Filtering and Limiting Lists_
 +section][filteringandlimitinglists] for details.
 +
 +
 +[views]: /templates/views/
 +[filteringandlimitinglists]: /templates/lists/#filtering-and-limiting-lists
index 2d1e9edf2e070e0ff9541c24bb81018fc5918600,0000000000000000000000000000000000000000..56a676d7eae7e320ee050d78949c0f320b52bd1c
mode 100644,000000..100644
--- /dev/null
@@@ -1,208 -1,0 +1,208 @@@
- In addition to outputting markup, partials can be used to return a value of any type. In order to return a value, a partial must include a lone `return` statement.
 +---
 +title: Partial Templates
 +linktitle: Partial Templates
 +description: Partials are smaller, context-aware components in your list and page templates that can be used economically to keep your templating DRY.
 +date: 2017-02-01
 +publishdate: 2017-02-01
 +lastmod: 2017-02-01
 +categories: [templates]
 +keywords: [lists,sections,partials]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 90
 +weight: 90
 +sections_weight: 90
 +draft: false
 +aliases: [/templates/partial/,/layout/chrome/,/extras/analytics/]
 +toc: true
 +---
 +
 +{{< youtube pjS4pOLyB7c >}}
 +
 +## Partial Template Lookup Order
 +
 +Partial templates---like [single page templates][singletemps] and [list page templates][listtemps]---have a specific [lookup order][]. However, partials are simpler in that Hugo will only check in two places:
 +
 +1. `layouts/partials/*<PARTIALNAME>.html`
 +2. `themes/<THEME>/layouts/partials/*<PARTIALNAME>.html`
 +
 +This allows a theme's end user to copy a partial's contents into a file of the same name for [further customization][customize].
 +
 +## Use Partials in your Templates
 +
 +All partials for your Hugo project are located in a single `layouts/partials` directory. For better organization, you can create multiple subdirectories within `partials` as well:
 +
 +```txt
 +layouts/
 +└── partials/
 +    ├── footer/
 +    │   ├── scripts.html
 +    │   └── site-footer.html
 +    ├── head/
 +    │   ├── favicons.html
 +    │   ├── metadata.html
 +    │   ├── prerender.html
 +    │   └── twitter.html
 +    └── header/
 +        ├── site-header.html
 +        └── site-nav.html
 +```
 +
 +All partials are called within your templates using the following pattern:
 +
 +```go-html-template
 +{{ partial "<PATH>/<PARTIAL>.html" . }}
 +```
 +
 +{{% note %}}
 +One of the most common mistakes with new Hugo users is failing to pass a context to the partial call. In the pattern above, note how "the dot" (`.`) is required as the second argument to give the partial context. You can read more about "the dot" in the [Hugo templating introduction](/templates/introduction/).
 +{{% /note %}}
 +
 +{{% note %}}
 +`<PARTIAL>` including `baseof` is reserved. ([#5373](https://github.com/gohugoio/hugo/issues/5373))
 +{{% /note %}}
 +
 +As shown in the above example directory structure, you can nest your directories within `partials` for better source organization. You only need to call the nested partial's path relative to the `partials` directory:
 +
 +```go-html-template
 +{{ partial "header/site-header.html" . }}
 +{{ partial "footer/scripts.html" . }}
 +```
 +
 +### Variable Scoping
 +
 +The second argument in a partial call is the variable being passed down. The above examples are passing the `.`, which tells the template receiving the partial to apply the current [context][context].
 +
 +This means the partial will *only* be able to access those variables. The partial is isolated and *has no access to the outer scope*. From within the partial, `$.Var` is equivalent to `.Var`.
 +
 +## Returning a value from a Partial
 +
++In addition to outputting markup, partials can be used to return a value of any type. In order to return a value, a partial must include a lone `return` statement _at the end of the partial_.
 +
 +### Example GetFeatured
 +
 +```go-html-template
 +{{/* layouts/partials/GetFeatured.html */}}
 +{{ return first . (where site.RegularPages "Params.featured" true) }}
 +```
 +
 +```go-html-template
 +{{/* layouts/index.html */}}
 +{{ range partial "GetFeatured.html" 5 }}
 +  [...]
 +{{ end }}
 +```
 +
 +### Example GetImage
 +
 +```go-html-template
 +{{/* layouts/partials/GetImage.html */}}
 +{{ $image := false }}
 +{{ with .Params.gallery }}
 +  {{ $image = index . 0 }}
 +{{ end }}
 +{{ with .Params.image }}
 +  {{ $image = . }}
 +{{ end }}
 +{{ return $image }}
 +```
 +
 +```go-html-template
 +{{/* layouts/_default/single.html */}}
 +{{ with partial "GetImage.html" . }}
 +  [...]
 +{{ end }}
 +```
 +
 +{{% note %}}
 +Only one `return` statement is allowed per partial file.
 +{{% /note %}}
 +
 +## Inline Partials
 +
 +{{< new-in "0.74.0" >}}
 +
 +You can also define partials inline in the template. But remember that template namespace is global, so you need to make sure that the names are unique to avoid conflicts.
 +
 +```go-html-template
 +Value: {{ partial "my-inline-partial.html" . }}
 +
 +{{ define "partials/my-inline-partial.html" }}
 +{{ $value := 32 }}
 +{{ return $value }}
 +{{ end }}
 +```
 +
 +## Cached Partials
 +
 +The [`partialCached` template function][partialcached] can offer significant performance gains for complex templates that don't need to be re-rendered on every invocation. The simplest usage is as follows:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . }}
 +```
 +
 +You can also pass additional parameters to `partialCached` to create *variants* of the cached partial.
 +
 +For example, you can tell Hugo to only render the partial `footer.html` once per section:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . .Section }}
 +```
 +
 +If you need to pass additional parameters to create unique variants, you can pass as many variant parameters as you need:
 +
 +```go-html-template
 +{{ partialCached "footer.html" . .Params.country .Params.province }}
 +```
 +
 +Note that the variant parameters are not made available to the underlying partial template. They are only use to create a unique cache key.
 +
 +### Example `header.html`
 +
 +The following `header.html` partial template is used for [spf13.com](https://spf13.com/):
 +
 +{{< code file="layouts/partials/header.html" download="header.html" >}}
 +<!DOCTYPE html>
 +<html class="no-js" lang="en-US" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">
 +<head>
 +    <meta charset="utf-8">
 +
 +    {{ partial "meta.html" . }}
 +
 +    <base href="{{ .Site.BaseURL }}">
 +    <title> {{ .Title }} : spf13.com </title>
 +    <link rel="canonical" href="{{ .Permalink }}">
 +    {{ if .RSSLink }}<link href="{{ .RSSLink }}" rel="alternate" type="application/rss+xml" title="{{ .Title }}" />{{ end }}
 +
 +    {{ partial "head_includes.html" . }}
 +</head>
 +{{< /code >}}
 +
 +{{% note %}}
 +The `header.html` example partial was built before the introduction of block templates to Hugo. Read more on [base templates and blocks](/templates/base/) for defining the outer chrome or shell of your master templates (i.e., your site's head, header, and footer). You can even combine blocks and partials for added flexibility.
 +{{% /note %}}
 +
 +### Example `footer.html`
 +
 +The following `footer.html` partial template is used for [spf13.com](https://spf13.com/):
 +
 +{{< code file="layouts/partials/footer.html" download="footer.html" >}}
 +<footer>
 +  <div>
 +    <p>
 +    &copy; 2013-14 Steve Francia.
 +    <a href="https://creativecommons.org/licenses/by/3.0/" title="Creative Commons Attribution">Some rights reserved</a>;
 +    please attribute properly and link back.
 +    </p>
 +  </div>
 +</footer>
 +{{< /code >}}
 +
 +[context]: /templates/introduction/ "The most easily overlooked concept to understand about Go templating is how the dot always refers to the current context."
 +[customize]: /themes/customizing/ "Hugo provides easy means to customize themes as long as users are familiar with Hugo's template lookup order."
 +[listtemps]: /templates/lists/ "To effectively leverage Hugo's system, see how Hugo handles list pages, where content for sections, taxonomies, and the homepage are listed and ordered."
 +[lookup order]: /templates/lookup-order/ "To keep your templating dry, read the documentation on Hugo's lookup order."
 +[partialcached]: /functions/partialcached/ "Use the partial cached function to improve build times in cases where Hugo can cache partials that don't need to be rendered with every page."
 +[singletemps]: /templates/single-page-templates/ "The most common form of template in Hugo is the single content template. Read the docs on how to create templates for individual pages."
 +[themes]: /themes/
index 57c2efa06897938c5260abfc63f72cb0901b45b4,0000000000000000000000000000000000000000..8f1a55c2fac9d233e98fcd72b8d811f9d0f644d1
mode 100644,000000..100644
--- /dev/null
@@@ -1,172 -1,0 +1,172 @@@
- * `codeblock`{{< new-in "0.83.0" >}}
 +---
 +title: "Markdown Render Hooks"
 +linkTitle: "Render Hooks"
 +description: "Render Hooks allow custom templates to override markdown rendering functionality."
 +date: 2017-03-11
 +categories: [templates]
 +keywords: [markdown]
 +toc: true
 +menu:
 +  docs:
 +    title: "Markdown Render Hooks"
 +    parent: "templates"
 +    weight: 20
 +---
 +
 +{{< new-in "0.62.0" >}} Note that this is only supported with the [Goldmark](#goldmark) renderer.
 +
 +
 +You can override certain parts of the default Markdown rendering to HTML by creating templates with base names `render-{kind}` in `layouts/_default/_markup`.
 +
 +You can also create type/section specific hooks in `layouts/[type/section]/_markup`, e.g.: `layouts/blog/_markup`.{{< new-in "0.71.0" >}}
 +
 +The hook kinds currently supported are:
 +
 +* `image`
 +* `link`
 +* `heading` {{< new-in "0.71.0" >}}
++* `codeblock`{{< new-in "0.93.0" >}}
 +
 +You can define [Output-Format-](/templates/output-formats) and [language-](/content-management/multilingual/)specific templates if needed. Your `layouts` folder may look like this:
 +
 +```goat { class="black f7" }
 +layouts
 +└── _default
 +    └── _markup
 +        ├── render-image.html
 +        ├── render-image.rss.xml
 +        └── render-link.html
 +        └── render-codeblock.html
 +        └── render-codeblock-bash.html
 +```
 +
 +Some use cases for the above:
 +
 +* Resolve link references using `.GetPage`. This would make links portable as you could translate `./my-post.md` (and similar constructs that would work on GitHub) into `/blog/2019/01/01/my-post/` etc.
 +* Add `target=_blank` to external links.
 +* Resolve and [process](/content-management/image-processing/) images.
 +* Add [header links](https://remysharp.com/2014/08/08/automatic-permalinks-for-blog-posts).
 +
 +## Render Hooks for Headings, Links and Images
 +
 +The `render-link` and `render-image` templates will receive this context:
 +
 +Page
 +: The [Page](/variables/page/) being rendered.
 +
 +Destination
 +: The URL.
 +
 +Title
 +: The title attribute.
 +
 +Text
 +: The rendered (HTML) link text.
 +
 +PlainText
 +: The plain variant of the above.
 +
 +The `render-heading` template will receive this context:
 +
 +Page
 +: The [Page](/variables/page/) being rendered.
 +
 +Level
 +: The header level (1--6)
 +
 +Anchor
 +: An auto-generated html id unique to the header within the page
 +
 +Text
 +: The rendered (HTML) text.
 +
 +PlainText
 +: The plain variant of the above.
 +
 +Attributes (map) {{< new-in "0.82.0" >}}
 +: A map of attributes (e.g. `id`, `class`)
 +
 +### Link with title Markdown example:
 +
 +```md
 +[Text](https://www.gohugo.io "Title")
 +```
 +
 +Here is a code example for how the render-link.html template could look:
 +
 +{{< code file="layouts/_default/_markup/render-link.html" >}}
 +<a href="{{ .Destination | safeURL }}"{{ with .Title}} title="{{ . }}"{{ end }}{{ if strings.HasPrefix .Destination "http" }} target="_blank" rel="noopener"{{ end }}>{{ .Text | safeHTML }}</a>
 +{{< /code >}}
 +
 +### Image Markdown example:
 +
 +```md
 +![Text](https://d33wubrfki0l68.cloudfront.net/c38c7334cc3f23585738e40334284fddcaf03d5e/2e17c/images/hugo-logo-wide.svg "Title")
 +```
 +
 +Here is a code example for how the render-image.html template could look:
 +
 +{{< code file="layouts/_default/_markup/render-image.html" >}}
 +<p class="md__image">
 +  <img src="{{ .Destination | safeURL }}" alt="{{ .Text }}" {{ with .Title}} title="{{ . }}"{{ end }} />
 +</p>
 +{{< /code >}}
 +
 +### Heading link example
 +
 +Given this template file
 +
 +{{< code file="layouts/_default/_markup/render-heading.html" >}}
 +<h{{ .Level }} id="{{ .Anchor | safeURL }}">{{ .Text | safeHTML }} <a href="#{{ .Anchor | safeURL }}">¶</a></h{{ .Level }}>
 +{{< /code >}}
 +
 +And this markdown
 +
 +```md
 +### Section A
 +```
 +
 +The rendered html will be
 +
 +```html
 +<h3 id="section-a">Section A <a href="#section-a">¶</a></h3>
 +```
 +
 +## Render Hooks for Code Blocks
 +
 +{{< new-in "0.93.0" >}}
 +
 +You can add a hook template for either all code blocks or for a specific type/language (`bash` in the example below):
 +
 +```goat { class="black f7" }
 +layouts
 +└── _default
 +    └── _markup
 +        └── render-codeblock.html
 +        └── render-codeblock-bash.html
 +```
 +
 +The default behaviour for these code blocks is to do [Code Highlighting](/content-management/syntax-highlighting/#highlighting-in-code-fences), but since you can pass attributes to these code blocks, they can be used for almost anything. One example would be the built-in [GoAT Diagrams](/content-management/diagrams/#goat-diagrams-ascii) or this [Mermaid Diagram Code Block Hook](/content-management/diagrams/#mermaid-diagrams) example.
 +
 +The context (the ".") you receive in a code block template contains:
 +
 +Type (string)
 +: The type of code block. This will be the programming language, e.g. `bash`, when doing code highlighting.
 +
 +Attributes (map)
 +: Attributes passed in from Markdown (e.g. `{ attrName1=attrValue1 attrName2="attr Value 2" }`).
 +
 +Options (map)
 +: Chroma highlighting processing options. This will only be filled if `Type` is a known [Chroma Lexer](/content-management/syntax-highlighting/#list-of-chroma-highlighting-languages).
 +
 +Inner (string)
 +: The text between the code fences.
 +
 +Ordinal (integer)
 +: Zero-based ordinal for all code blocks in the current document.
 +
 +Page
 +: The owning `Page`.
 +
 +Position
 +: Useful in error logging as it prints the filename and position (linenumber, column), e.g. `{{ errorf "error in code block: %s" .Position }}`.
index dee28fc3ba8574851bb07eb6c83e2d17708a7c5d,0000000000000000000000000000000000000000..9fc817020dd4d53d578c1ef959f3ff093b7960e9
mode 100644,000000..100644
--- /dev/null
@@@ -1,106 -1,0 +1,87 @@@
- title: Sitemap Template
- # linktitle: Sitemap
- description: Hugo ships with a built-in template file observing the v0.9 of the Sitemap Protocol, but you can override this template if needed.
 +---
- publishdate: 2017-02-01
- lastmod: 2017-02-01
++title: Sitemap Templates
++description: Hugo provides built-in sitemap templates.
 +date: 2017-02-01
- toc: false
 +categories: [templates]
 +keywords: [sitemap, xml, templates]
 +menu:
 +  docs:
 +    parent: "templates"
 +    weight: 160
 +weight: 160
 +sections_weight: 160
 +draft: false
 +aliases: [/layout/sitemap/,/templates/sitemap/]
- A single Sitemap template is used to generate the `sitemap.xml` file.
- Hugo automatically comes with this template file. *No work is needed on
- the users' part unless they want to customize `sitemap.xml`.*
++toc: true
 +---
 +
- A sitemap is a `Page` and therefore has all the [page variables][pagevars] available to use in this template along with Sitemap-specific ones:
++## Overview
 +
- `.Sitemap.ChangeFreq`
- : The page change frequency
++Hugo's built-in sitemap templates conform to v0.9 of the [sitemap protocol].
 +
- `.Sitemap.Priority`
- : The priority of the page
++With a monolingual project, Hugo generates a sitemap.xml file in the root of the [`publishDir`] using the built-in [sitemap.xml] template.
 +
- `.Sitemap.Filename`
- : The sitemap filename
++With a multilingual project, Hugo generates:
 +
- If provided, Hugo will use `/layouts/sitemap.xml` instead of the internal `sitemap.xml` template that ships with Hugo.
++- A sitemap.xml file in the root of each site (language) using the built-in [sitemap.xml] template
++- A sitemap.xml file in the root of the [`publishDir`] using the built-in [sitemapindex.xml] template
 +
- ## Sitemap Templates
++## Configuration
 +
- Hugo has built-on Sitemap templates, but you can provide your own if needed, in either `layouts/sitemap.xml` or `layouts/_default/sitemap.xml`.
++Set the default values for [change frequency] and [priority], and the name of the generated file, in your site configuration.
 +
- For multilingual sites, we also create a Sitemap index. You can provide a custom layout for that in either `layouts/sitemapindex.xml` or `layouts/_default/sitemapindex.xml`.
++{{< code-toggle file="config" >}}
++[sitemap]
++  changefreq = 'monthly'
++  filename = 'sitemap.xml'
++  priority = 0.5
++{{</ code-toggle >}}
 +
- ## Hugo’s sitemap.xml
++changefreq
++: How frequently a page is likely to change. Valid values are `always`, `hourly`, `daily`, `weekly`, `monthly`, `yearly`, and `never`. Default is `""` (change frequency omitted from rendered sitemap).
 +
- This template respects the version 0.9 of the [Sitemap Protocol](https://www.sitemaps.org/protocol.html).
++filename
++: The name of the generated file. Default is `sitemap.xml`.
 +
- ```xml
- {{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" | safeHTML }}
- <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
-   xmlns:xhtml="http://www.w3.org/1999/xhtml">
-   {{ range .Data.Pages }}
-   <url>
-     <loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
-     <lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
-     <changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
-     <priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
-     <xhtml:link
-                 rel="alternate"
-                 hreflang="{{ .Lang }}"
-                 href="{{ .Permalink }}"
-                 />{{ end }}
-     <xhtml:link
-                 rel="alternate"
-                 hreflang="{{ .Lang }}"
-                 href="{{ .Permalink }}"
-                 />{{ end }}
-   </url>
-   {{ end }}
- </urlset>
- ```
++priority
++: The priority of a page relative to any other page on the site. Valid values range from 0.0 to 1.0. Default is `-1` (priority omitted from rendered sitemap).
 +
- ## Hugo's sitemapindex.xml
++## Override Default Values
 +
- This is used to create a Sitemap index in multilingual mode:
++Override the default values for a given page in front matter.
 +
- ```xml
- {{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" | safeHTML }}
- <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
-       {{ range . }}
-       <sitemap>
-               <loc>{{ .SitemapAbsURL }}</loc>
-               {{ if not .LastChange.IsZero }}
-               <lastmod>{{ .LastChange.Format "2006-01-02T15:04:05-07:00" | safeHTML }}</lastmod>
-               {{ end }}
-       </sitemap>
-       {{ end }}
- </sitemapindex>
- ```
++{{< code-toggle file="news.md" fm=true >}}
++title = 'News'
++[sitemap]
++  changefreq = 'weekly'
++  priority = 0.8
++{{</ code-toggle >}}
 +
- ## Configure `sitemap.xml`
++## Override Built-in Templates
 +
- Defaults for `<changefreq>`, `<priority>` and `filename` values can be set in the site's config file, e.g.:
++To override the built-in sitemap.xml template, create a new file in either of these locations:
 +
- {{< code-toggle file="config" >}}
- [sitemap]
-   changefreq = "monthly"
-   priority = 0.5
-   filename = "sitemap.xml"
- {{</ code-toggle >}}
++- layouts/sitemap.xml
++- layouts/_default/sitemap.xml
 +
- The same fields can be specified in an individual content file's front matter in order to override the value assigned to that piece of content at render time.
++When ranging through the page collection, access the _change frequency_ and _priority_ with `.Sitemap.ChangeFreq` and `.Sitemap.Priority` respectively.
++
++To override the built-in sitemapindex.xml template, create a new file in either of these locations:
 +
- [pagevars]: /variables/page/
++- layouts/sitemapindex.xml
++- layouts/_default/sitemapindex.xml
 +
++## Disable Sitemap Generation
 +
++You may disable sitemap generation in your site configuration:
++
++{{< code-toggle file="config" >}}
++disableKinds = ['sitemap']
++{{</ code-toggle >}}
 +
++[`publishDir`]: {{< relref "getting-started/configuration#publishdir" >}}
++[change frequency]: <https://www.sitemaps.org/protocol.html#changefreqdef>
++[priority]: <https://www.sitemaps.org/protocol.html#priority>
++[sitemap protocol]: <https://www.sitemaps.org/protocol.html>
++[sitemap.xml]: <https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/sitemap.xml>
++[sitemapindex.xml]: <https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_default/sitemapindex.xml>
index d87bd4013f32076ab2e716a1492088887572a5c6,0000000000000000000000000000000000000000..7009164ebf8190f3e1865517ce8a45ee3c4185e9
mode 100644,000000..100644
--- /dev/null
@@@ -1,87 -1,0 +1,87 @@@
- lastmod: 2017-02-01
 +---
 +title: Migrate to Hugo
 +linktitle: Migrations
 +description: A list of community-developed tools for migrating from your existing static site generator or content management system to Hugo.
 +date: 2017-02-01
 +publishdate: 2017-02-01
- - [exitwp-for-hugo](https://github.com/wooni005/exitwp-for-hugo) - A python script which works with the xml export from WordPress and converts WordPress pages and posts to Markdown and YAML for hugo.
++lastmod: 2022-03-26
 +keywords: [migrations,jekyll,wordpress,drupal,ghost,contentful]
 +menu:
 +  docs:
 +    parent: "tools"
 +    weight: 10
 +weight: 10
 +sections_weight: 10
 +draft: false
 +aliases: [/developer-tools/migrations/,/developer-tools/migrated/]
 +toc: true
 +---
 +
 +This section highlights some projects around Hugo that are independently developed. These tools try to extend the functionality of our static site generator or help you to get started.
 +
 +{{% note %}}
 +Do you know or maintain a similar project around Hugo? Feel free to open a [pull request](https://github.com/gohugoio/hugoDocs/pulls) on GitHub if you think it should be added.
 +{{% /note %}}
 +
 +Take a look at this list of migration tools if you currently use other blogging tools like Jekyll or WordPress but intend to switch to Hugo instead. They'll take care to export your content into Hugo-friendly formats.
 +
 +## Jekyll
 +
 +Alternatively, you can use the new [Jekyll import command](/commands/hugo_import_jekyll/).
 +
 +- [JekyllToHugo](https://github.com/SenjinDarashiva/JekyllToHugo) - A Small script for converting Jekyll blog posts to a Hugo site.
 +- [ConvertToHugo](https://github.com/coderzh/ConvertToHugo) - Convert your blog from Jekyll to Hugo.
 +
 +## Ghost
 +
 +- [ghostToHugo](https://github.com/jbarone/ghostToHugo) - Convert Ghost blog posts and export them to Hugo.
 +
 +## Octopress
 +
 +- [octohug](https://github.com/codebrane/octohug) - Octopress to Hugo migrator.
 +
 +## DokuWiki
 +
 +- [dokuwiki-to-hugo](https://github.com/wgroeneveld/dokuwiki-to-hugo) - Migrates your DokuWiki source pages from [DokuWiki syntax](https://www.dokuwiki.org/wiki:syntax) to Hugo Markdown syntax. Includes extra's like the TODO plugin. Written with extensibility in mind using python 3. Also generates a TOML header for each page. Designed to copypaste the wiki directory into your /content directory.
 +
 +## WordPress
 +
 +- [wordpress-to-hugo-exporter](https://github.com/SchumacherFM/wordpress-to-hugo-exporter) - A one-click WordPress plugin that converts all posts, pages, taxonomies, metadata, and settings to Markdown and YAML which can be dropped into Hugo. (Note: If you have trouble using this plugin, you can [export your site for Jekyll](https://wordpress.org/plugins/jekyll-exporter/) and use Hugo's built in Jekyll converter listed above.)
 +- [blog2md](https://github.com/palaniraja/blog2md) - Works with [exported xml](https://en.support.wordpress.com/export/) file of your free YOUR-TLD.wordpress.com website. It also saves approved comments to `YOUR-POST-NAME-comments.md` file along with posts.
 +- [wordhugopress](https://github.com/nantipov/wordhugopress) - A small utility written in Java, exports the entire WordPress site from the database and resource (e.g. images) files stored locally or remotely. Therefore, migration from the backup files is possible. Supports merging of the multiple WordPress sites into a single Hugo one.
++- [wpxr-to-static](https://github.com/danielfdickinson/wpxr-to-static) - WordPress eXtended RSS to Static Generator Conversion, Python3 program to convert WordPress XML Export (WPXR) format files to Hugo Markdown files (with YAML metadata) and a `config.toml` for the site. Inspired by [exitwp-for-hugo](https://github.com/wooni005/exitwp-for-hugo) (a Python 2 \[EOL] script which works with the xml export from WordPress and converts WordPress pages and posts to Markdown and YAML for hugo).
 +
 +## Medium
 +
 +- [medium2md](https://github.com/gautamdhameja/medium-2-md) - A simple Medium to Hugo exporter able to import stories in one command, including Front Matter.
 +- [medium-to-hugo](https://github.com/bgadrian/medium-to-hugo) - CLI tool written in Go to export medium posts into a Hugo compatible Markdown format. Tags and images are included. All images will be downloaded locally and linked appropriately.
 +
 +## Tumblr
 +
 +- [tumblr-importr](https://github.com/carlmjohnson/tumblr-importr) - An importer that uses the Tumblr API to create a Hugo static site.
 +- [tumblr2hugomarkdown](https://github.com/Wysie/tumblr2hugomarkdown) - Export all your Tumblr content to Hugo Markdown files with preserved original formatting.
 +- [Tumblr to Hugo](https://github.com/jipiboily/tumblr-to-hugo) - A migration tool that converts each of your Tumblr posts to a content file with a proper title and path. Furthermore, "Tumblr to Hugo" creates a CSV file with the original URL and the new path on Hugo, to help you setup the redirections.
 +
 +## Drupal
 +
 +- [drupal2hugo](https://github.com/danapsimer/drupal2hugo) - Convert a Drupal site to Hugo.
 +
 +## Joomla
 +
 +- [hugojoomla](https://github.com/davetcc/hugojoomla) - This utility written in Java takes a Joomla database and converts all the content into Markdown files. It changes any URLs that are in Joomla's internal format and converts them to a suitable form.
 +
 +## Blogger
 +
 +- [blogimport](https://github.com/natefinch/blogimport) - A tool to import from Blogger posts to Hugo.
 +- [blogger-to-hugo](https://pypi.org/project/blogger-to-hugo/) - Another tool to import Blogger posts to Hugo. It also downloads embedded images so they will be stored locally.
 +- [blog2md](https://github.com/palaniraja/blog2md) - Works with [exported xml](https://support.google.com/blogger/answer/41387?hl=en) file of your YOUR-TLD.blogspot.com website. It also saves comments to `YOUR-POST-NAME-comments.md` file along with posts.
 +- [BloggerToHugo](https://github.com/huanlin/blogger-to-hugo) - Yet another tool to import Blogger posts to Hugo. For Windows platform only, and .NET Framework 4.5 is required. See README.md before using this tool.
 +
 +## Contentful
 +
 +- [contentful2hugo](https://github.com/ArnoNuyts/contentful2hugo) - A tool to create content-files for Hugo from content on [Contentful](https://www.contentful.com/).
 +
 +
 +## BlogML
 +
 +- [BlogML2Hugo](https://github.com/jijiechen/BlogML2Hugo) - A tool that helps you convert BlogML xml file to Hugo markdown files. Users need to take care of links to attachments and images by themselves. This helps the blogs that export BlogML files (e.g. BlogEngine.NET) transform to hugo sites easily.
index 299602318c4c854a1cc752ffbcc5a5199239f22b,0000000000000000000000000000000000000000..2035c058b55d321171899f3fe4c1dcff760b6595
mode 100644,000000..100644
--- /dev/null
@@@ -1,68 -1,0 +1,68 @@@
-             {{ $leastRecent := $byLastMod | first 10 }}            
 +{{ define "main" }}
 +<div class="w-100 ph4 pb5 pb6-ns pt1 mt4 pt3-ns">
 +    <div class="flex-l">
 +        <div class="order-2 w-100 w-20-l ph5-m ph0-l mb4 sticky">
 +            <aside class="fixed-lTK mw5-l right-0 f6 bl-l b--moon-gray pv4 pv0-ns ph4-l nested-list-reset nested-links nested-copy-line-height">
 +                <p class="b">What's on this Page</p>
 +                <ul>
 +                    <li><a href="#last-updated">Last Updated</a></li>
 +                    <li><a href="#least-recently-updated">Least Recently Updated</a></li>
 +                    <li><a href="#todos">Pages marked with TODO</a></li>
 +                    <li><a href="#dependencies">Project dependencies (Hugo Modules)</a></li>
 +                </ul>
 +            </aside>
 +        </div>
 +        <div class="w-100">
 +            {{ $byLastMod :=  .Site.RegularPages.ByLastmod  }}
 +            {{ $recent := ($byLastMod | last 30).Reverse }}
++            {{ $leastRecent := $byLastMod | first 10 }}
 +            <h2 id="last-updated">Last Updated</h2>
 +            {{ partial "maintenance-pages-table.html" $recent }}
 +            <h2 id="least-recently-updated">Least Recently Updated</h2>
 +            {{ partial "maintenance-pages-table.html" $leastRecent }}
 +
 +            {{/* Don't think this is possible with where directly. Should investigate. */}}
 +            {{ .Scratch.Set "todos" slice }}
 +            {{ range .Site.RegularPages }}
 +                 {{ if .HasShortcode "todo" }}
 +                 {{ $.Scratch.Add "todos" . }}
 +                 {{ end }}
 +            {{ end }}
 +            <h2 id="todos">Pages marked with TODO</h2>
 +            {{ partial "maintenance-pages-table.html" (.Scratch.Get "todos") }}
 +
 +            <h2 id="dependencies">Dependencies</h2>
 +            <table class="collapse ba br2 b--black-10 pv2 ph3">
 +              <thead>
 +                <tr>
 +                  <th class="pv2 ph3 tl f6 fw6 ttu">#</th>
 +                  <th class="pv2 ph3 tl f6 fw6 ttu">Owner</th>
 +                  <th class="pv2 ph3 tl f6 fw6 ttu">Path</th>
 +                  <th class="pv2 ph3 tl f6 fw6 ttu">Version</th>
 +                  <th class="pv2 ph3 tl f6 fw6 ttu">Time</th>
 +                  <th class="pv2 ph3 tl f6 fw6 ttu">Vendor</th>
 +                </tr>
 +              </thead>
 +              <tbody>
 +                {{ range $index, $element := hugo.Deps }}
 +                <tr class="striped--light-gray">
 +                  <th class="pv2 ph3">{{ add $index 1 }}</th>
 +                  <td class="pv2 ph3">{{ with $element.Owner }}{{.Path }}{{ end }}</td>
 +                  <td class="pv2 ph3">
 +                    {{ $element.Path }}
 +                    {{ with $element.Replace}}
 +                    => {{ .Path }}
 +                    {{ end }}
 +                  </td>
 +                  <td class="pv2 ph3">{{ $element.Version }}</td>
 +                  <td class="pv2 ph3">{{ with $element.Time }}{{ . }}{{ end }}</td>
 +                  <td class="pv2 ph3">{{ $element.Vendor }}</td>
 +                </tr>
 +                {{ end }}
 +              </tbody>
 +            </table>
 +
 +        </div>
 +    </div>
 +</div>
 +{{ end }}
index a29dc9ec366d881f106043298de670062ac141de,0000000000000000000000000000000000000000..b97fb55c38aede12840eaad90b525a61d37f35a7
mode 100644,000000..100644
--- /dev/null
@@@ -1,35 -1,0 +1,35 @@@
- HUGO_VERSION = "0.95.0"
 +[build]
 +publish = "public"
 +command = "hugo --gc --minify"
 +
 +[context.production.environment]
- HUGO_VERSION = "0.95.0"
++HUGO_VERSION = "0.96.0"
 +HUGO_ENV = "production"
 +HUGO_ENABLEGITINFO = "true"
 +
 +[context.split1]
 +command = "hugo --gc --minify --enableGitInfo"
 +
 +[context.split1.environment]
- HUGO_VERSION = "0.95.0"
++HUGO_VERSION = "0.96.0"
 +HUGO_ENV = "production"
 +
 +[context.deploy-preview]
 +command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL"
 +
 +[context.deploy-preview.environment]
- HUGO_VERSION = "0.95.0"
++HUGO_VERSION = "0.96.0"
 +
 +[context.branch-deploy]
 +command = "hugo --gc --minify -b $DEPLOY_PRIME_URL"
 +
 +[context.branch-deploy.environment]
++HUGO_VERSION = "0.96.0"
 +
 +[context.next.environment]
 +HUGO_ENABLEGITINFO = "true"
 +
 +[[redirects]]
 +from = "/npmjs/*"
 +to = "/npmjs/"
 +status = 200