Freedom

Layout Customization

·   3 min ·   Gautham Chettiar
Table Of Contents

Learn how to customize the Freedom theme’s layout visibility settings. Control which components display on your pages using configuration toggles for titles, breadcrumbs, metadata, navigation, and more.

Overview #

Freedom theme provides flexible layout customization through boolean configuration flags. You can control the visibility of various UI components at different levels:

  1. Site-wide configuration - Apply settings globally via hugo.yaml
  2. Kind-level configuration - Different settings for home, page, section, taxonomy, term
  3. Section-level configuration - Override for specific content sections
  4. Type-level configuration - Override for specific content types
  5. Page-level configuration - Individual page overrides via front matter

Configuration Hierarchy #

Configuration resolution follows this priority (highest to lowest):

  1. Page front matter: Parameters in individual page front matter (highest priority)
  2. Type-level: Based on page type (params.type.<typename>)
  3. Section-level: Based on content section (params.section.<sectionname>)
  4. Kind-level: Based on page kind - home, page, section, taxonomy, term (params.kind.<kindname>)
  5. Site-level: Global site parameters (params)
  6. Defaults: Built-in theme defaults (lowest priority)

Available Configuration Options #

Page Header Components #

Config KeyDefaultDescription
showPageTitletrueDisplay title on regular content pages
showTitletrueDisplay title on section/taxonomy/term pages
showThemeToggletrueLight/dark mode switcher button
showMenutrueMain navigation menu display
showBreadcrumbtrueHierarchical navigation showing page location in site structure
breadcrumbSeparator" » "Custom separator between breadcrumb items
showHeadingAnchortrueDisplay anchor link on every heading on a page

Page Metadata #

Config KeyDefaultDescription
showAuthortrueDisplay author name
showAuthorIcontrueDisplay user icon before author
showDatetrueDisplay publication date
showDateIcontrueDisplay calendar icon before date
dateType"date"Date field to display: date, publishDate, or lastmod
dateFormat":date_long"Date format for metadata display
showReadTimetrueDisplay estimated reading time
showReadTimeIcontrueDisplay clock icon before reading time
readTimeWordsPerMinute200Words per minute for reading time calculation
showToctrueAuto-generated TOC from headings

Taxonomy Components #

Config KeyDefaultDescription
showTagstrueDisplay page tags
showTagsCounttrueDisplay post count for each tag
showCategoriestrueDisplay page categories
showCategoriesCounttrueDisplay post count for each category
show{Name}trueDisplay custom taxonomy (series, authors, etc.)
show{Name}CounttrueDisplay post count for custom taxonomy

List Components #

Config KeyDefaultDescription
showPostListtrueDisplay list of pages on section/taxonomy pages
showPostListDatetrueShow dates in page lists
postListStyle"none"List bullet style: none, disc, circle, square
postListDateFormat":date_medium"Date format using Hugo date formats
postListSortBy"date"Sort field: “date”, “weight”, or “title”
postListSortOrder"desc"Sort order: “asc” or “desc”
postListPaginatetrueEnable pagination for lists
postListPageSize15Number of items per page
Config KeyDefaultDescription
showFooterTexttrueDisplay footer text section
footerText(empty)Custom footer text or HTML content

Markdown & Content Components #

Config KeyDefaultDescription
showHeadingAnchortrueDisplay anchor links on headings for easy linking
showCodeblockLangtrueDisplay language label on code blocks
showCodeblockCopytrueDisplay copy button on code blocks
showBlockquoteCitetrueDisplay cite attribution in blockquotes
showBlockquoteCaptiontrueDisplay caption in blockquotes
showExternalLinkIndicatortrueDisplay indicator icon for external links
openExternalLinkInNewTabtrueOpen external links in new tab

Best Practices #

Start with Defaults #

The theme provides sensible defaults. Only override what you need:

hugo.yaml
## ✅ Good - Override only what's needed
params:
  showBreadcrumb: false

## ❌ Unnecessary - These are already the defaults
params:
  showTitle: true
  showDate: true
  showAuthor: true

Use Hierarchy Wisely #

Apply settings at the appropriate level:

Keep It Consistent #

Maintain consistency within content types:

hugo.yaml
params:
  ## All blog posts get the same layout
  section:
    blog:
      showAuthor: true
      showDate: true
      showTags: true
      showReadTime: true

Test Across Page Types #

Configuration affects different page kinds:

Test your configuration on each type:

hugo.yaml
params:
  ## Global defaults
  showTitle: true
  
  kind:
    home:
      showTitle: false      ## Hide on home
    section:
      showTitle: true       ## Show on sections
      showPostList: true    ## With post lists

Troubleshooting #

Configuration Not Taking Effect #

Check hierarchy: Lower priority configs don’t override higher priority ones.

Configuration resolution order (highest to lowest priority):

  1. Page front matter - params.showTitle: true (wins over everything)
  2. Type-level - type.blog.showTitle: false
  3. Section-level - section.blog.showTitle: false
  4. Kind-level - kind.page.showTitle: false
  5. Site-level - showTitle: true (lowest priority)

Icons Not Hiding #

Icon visibility is separate from component visibility:

yaml
## ✅ Correct - Hide the icon
params:
  showDate: true
  showDateIcon: false

## ❌ Won't work - Wrong key
params:
  showDate: true
  showIcon: false  ## No such key

Section Config Not Working #

Use exact section name from content directory (case-sensitive):

yaml
## ✅ Correct - matches content/blog/
params:
  section:
    blog:
      showAuthor: true

## ❌ Wrong - case mismatch
params:
  section:
    Blog:  ## Won't match 'blog' folder
      showAuthor: true

Kind Config Not Applying #

Use exact kind names: home, page, section, taxonomy, term

yaml
## ✅ Correct
params:
  kind:
    page:
      showBreadcrumb: false

## ❌ Wrong - not a valid kind
params:
  kind:
    post:  ## Use 'page' instead
      showBreadcrumb: false