-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Features
- Assets (js/css)
- Default Theme light/dark/auto
- Theme Switch Toggle (enabled by default)
- Archives Layout
- Regular Mode (default-mode)
- Home-Info Mode
- Profile Mode
- Search Page
- Draft Page indication
- Post Cover Image
- Share Buttons on post
- Show post reading time
- Show Table of Contents (Toc) on blog post
- BreadCrumb Navigation
- Edit Link for Posts
- Other Posts suggestion below a post
- Code Copy Button
- Multiple Authors
- Comments
- AccessKeys
- Enhanced SEO
- Multilingual Support
- Misc
View demo here
We'll be using
yml/yaml
format for all examples down below, I recommend usingyml
overtoml
as it is easier to read.You can find any YML to TOML converters if necessary.
The following is enabled by default
- minification - makes the assets size smallest as possible.
- bundling - bundles all the styles in one single asset
- fingerprint/intergity check.
params:
# defaultTheme: light
# defaultTheme: dark
defaultTheme: auto # to switch between dark or light according to browser theme
Shows icon besides title of page to change theme
To disable it :
disableThemeToggle: true
You can refer following table for better understanding...
defaultTheme |
disableThemeToggle |
checks local storage? | checks system theme? | Info |
---|---|---|---|---|
auto |
true | No | Yes | only system theme |
false | Yes (if not->2) | Yes (2) | switch present | |
dark |
true | No | No | force dark only |
false | Yes | No | switch present | |
light |
true | No | No | force light only |
false | Yes | No | switch present |
Create a page with archive.md
in content
directory with following content
.
├── config.yml
├── content/
│ ├── archives.md <--- Create archive.md here
│ └── posts/
├── static/
└── themes/
└── PaperMod/
and add the following to it
---
title: "Archive"
layout: "archives"
url: "/archives/"
summary: archives
---
Note: Archives Layout does not support Multilingual Month Translations.
ex: archives.md
Use 1st entry as some Information
add following to config file
params:
homeInfoParams:
Title: Hi there wave
Content: Can be Info, links, about...
socialIcons: # optional
- name: "<platform>"
url: "<link>"
- name: "<platform 2>"
url: "<link2>"
Shows Index/Home page as Full Page with Social Links and Image
add following to config file
params:
profileMode:
enabled: true
title: "<Title>" # optional default will be site title
subtitle: "This is subtitle"
imageUrl: "<image link>" # optional
imageTitle: "<title of image as alt>" # optional
imageWidth: 120 # custom size
imageHeight: 120 # custom size
buttons:
- name: Archive
url: "/archive"
- name: Github
url: "https://github.com/"
socialIcons: # optional
- name: "<platform>"
url: "<link>"
- name: "<platform 2>"
url: "<link2>"
PaperMod uses Fuse.js Basic for search functionality
Add the following to site config, config.yml
outputs:
home:
- HTML
- RSS
- JSON # necessary for search
Create a page with search.md
in content
directory with following content
---
title: "Search" # in any language you want
layout: "search" # necessary for search
# url: "/archive"
# description: "Description for Search"
summary: "search"
placeholder: "placeholder text in search input box"
---
To hide a particular page from being searched, add it in post's frontmatter
searchHidden: true
ex: search.md
Search Page also has Key bindings:
- Arrow keys to move up/down the list
- Enter key (return) or Right Arrow key to go to the highlighted page
- Escape key to clear searchbox and results
For Multilingual use search.<lang>.md
ex. search.es.md
.
Note: Search will work only on current language, user is currently on !
Customizing Fusejs Options
Refer https://fusejs.io/api/options.html for Options, Add those as shown below.
params:
fuseOpts:
isCaseSensitive: false
shouldSort: true
location: 0
distance: 1000
threshold: 0.4
minMatchCharLength: 0
# limit: 10 # refer: https://www.fusejs.io/api/methods.html#search
keys: ["title", "permalink", "summary", "content"]
adds [draft]
mark to indicate draft pages.
In post's page-variables add :
cover:
image: "<image path/url>"
# can also paste direct link from external site
# ex. https://i.ibb.co/K0HVPBd/paper-mod-profilemode.png
alt: "<alt text>"
caption: "<text>"
relative: false # To use relative path for cover image, used in hugo Page-bundles
When you include images in the Page Bundle, multiple sizes of the image will automatically be provided using the HTML5 srcset
field.
To reduce generation time and size of the site, you can disable this feature using
params:
cover:
responsiveImages: false
To enable hyperlinks to the full image size on post pages, use
params:
cover:
linkFullImages: true
Displays Share Buttons at Bottom of each post
to show share buttons add
params:
ShowShareButtons: true
Displays Reading Time (the estimated time, in minutes, it takes to read the content.)
To show reading time add
Params:
ShowReadingTime: true
Displays ToC on blog-pages
To show ToC add following to page-variables
ShowToc: true
To keep Toc Open by default on a post add following to page-variables:
TocOpen: true
Adds BreadCrumb Navigation above Post's Title to show subsections and Navigation to Home
params:
ShowBreadCrumbs: true
Can be diabled for particular page's front-matter
---
ShowBreadCrumbs: false
---
Add a button to suggest changes by using the file path of the post to link to a edit destination.
For site config use:
Params:
editPost:
URL: "https://github.com/<path_to_repo>/content"
Text: "Suggest Changes" # edit text
appendFilePath: true # to append file path to Edit link
Can be modified for individual pages
---
editPost:
URL: "https://github.com/<path_to_repo>/content"
Text: "Suggest Changes" # edit text
appendFilePath: true # to append file path to Edit link
---
The example above would yield the following link for the post file posts/post-name.md
:
https://github.com/<path_to_repo>/content/posts/post-name.md
Parameter | Required | Default Value |
---|---|---|
editPost.URL |
true | - |
editPost.appendFilePath |
false | false |
editPost.Text |
false | Edit |
Since the link generated is a regular HTML anchor tag <a href=...>
, you can
also use other URL schemas like mailto://
, e.g.
URL: "mailto://mail@example.com?subject=Suggesting changes for "
Adds a Previous / Next post suggestion under a single post
params:
ShowPostNavLinks: true
Adds a copy
button in code block to copy the code it contains
params:
ShowCodeCopyButtons: true
To Use multiple authors for a post, in post-variables:
---
author: ["Me", "You"]
---
To use Multiple Authors Site-wide, in config.yml
:
params:
author: ["Me", "You"]
to add comments, create a html file
layouts/partials/comments.html
and paste code provided by your comments provider
also in config add this
params:
comments: true
read more about this hugo-comments
c - ToC Open/Close
g - Go To Top
h - Home (according to current lang)
t - Theme toggle
/ - Jumps to search page if in menu
Enabled only when env: production
- The Twitter Cards metadata, except
twitter:image
should not require additional configuration, since it is generated from metadata that you should already have (for instance the page title and description). - The
twitter:image
uses the Post Cover Image, if present. - In the absence of a cover images, the first image from the
images
frontmatter (a list) is used.images: - image_01.png - image_02.png
- Finally, if neither of those are provided,
twitter:image
comes from the first Page Bundle image withfeature
in the name, with a fallback to the first image withcover
orthumbnail
in the name.
- The OpenGraph metadata, except
og:image
should not require additional configuration, since it is generated from metadata that you should already have (for instance the page title and description). - The
og:image
uses the Post Cover Image, if present. - In the absence of a cover images, the first image from the
images
frontmatter (a list) is used.images: - image_01.png - image_02.png
- Finally, if neither of those are provided,
og:image
comes from the first Page Bundle image withfeature
in the name, with a fallback to the first image withcover
orthumbnail
in the name. - For pages, you can also add audio (using frontmatter
audio: filename.ext
) and/or videos.videos: - filename01.mov - filename02.avi
Displays a Scroll-to-Top button in right-bottom corner