Once you have installed Hugo and verified the installation, you are ready to build your site with Hugo. Refer to our previous article How to install Hugo for installation instructions and verification in various operating systems.
Create a New Site with Hugo
To start your Hugo project, create a new site using the command below:
hugo new site <sitename>
For example to create a new site testsite
hugo new site testsite
Add a theme
Hugo does not come with a default theme. To see the list of available themes visit Hugo Themes
To add a theme you may use git
. In this example we are going to add the theme called ananke. Naviagate to your project folder.
cd testsite git init git submodule add https://github.com/budparr/gohugo-theme-ananke.git themes/ananke
All your themes reside in the themes directory of your project. If you navigate to themes folder now, you will find ananke. Adding any other theme is similar. To add "bleak" theme
git submodule add https://github.com/Zenithar/hugo-theme-bleak.git themes/bleak
Activate a theme
The config.toml file holds the configuration of your site. By default it looks like
baseURL = "http://example.org/" languageCode = "en-us" title = "My New Hugo Site"
To activate a theme, open the config.toml
file in a text editor and add the line
theme = "ananke"
Now you can run the builtin server to see your new site. To run the server run the command:
hugo server
This server listens on port 1313. So you may visit localhost:1313 in your browser to see your site running the new theme.
Customize your theme
The main config file for your site is config.toml. To make configuration changes open this file in text editor and make changes. For example to change the title to "New Title"
title = "New Title"
Hugo server by default uses livereload via JavaScript. A file called livereload.js
is included by default between <body> and </body> tags. So whenever you make a change and save it, the page refreshes by itself. This is very useful in development environment because you can see you changes as you make them live in another window. This option can be disabled by running hugo server with --disableLiveReload
flag.
Themes usually have theme based customization options. For example ananke
theme includes a sample config.toml
file that you can copy from themes/ananke/exampleSite
to the root of your project. The sample config.toml for ananke theme looks like below:
title = "Notre-Dame de Paris" baseURL = "https://example.com" languageCode = "en-us" theme = "gohugo-theme-ananke" themesDir = "../.." MetaDataFormat = "yaml" DefaultContentLanguage = "en" SectionPagesMenu = "main" Paginate = 3 # this is set low for demonstrating with dummy content. Set to a higher number googleAnalytics = "" enableRobotsTXT = true [sitemap] changefreq = "monthly" priority = 0.5 filename = "sitemap.xml" [params] favicon = "" description = "The last theme you'll ever need. Maybe." facebook = "" twitter = "https://twitter.com/GoHugoIO" instagram = "" youtube = "" github = "" linkedin = "" # choose a background color from : http://tachyons.io/docs/themes/skins/ and preface it with "bg-" background_color_class = "bg-black" featured_image = "/images/gohugo-default-sample-hero-image.jpg" recent_posts_number = 2
Remove the line themesDir = "../.." and change the line theme = "gohugo-theme-ananke"
to theme = "ananke"
.
In addition to customizing the title, you can change background_color_class
, featured_image
, recent_posts_number
etc.
Add new post
Contents are stored in files, written in simple markdown language. To create a post:
hugo new posts/first-post.md
This creates a file in contentpostsfirst-post.md
with the following default content
--- title: "First Post" date: 2018-01-29T14:15:22Z draft: true ---
This is just a text file in markdown syntax. Hugo supports markdown, html or both combined. You may save your content as html (.html) or markdown (.md) format. This is now a draft. To see the draft just restart the server with drafts enabled. Press Ctrl + C to stop the server. Start it again with drafts enabled:
hugo server -D
You can now see your first post.