> **Vendored copy.** This directory is a snapshot of the upstream > [`gevhaz/hugo-theme-notrack`](https://github.com/gevhaz/hugo-theme-notrack) > theme, copied into the repo on 2026-04-25 (was previously a git submodule). > Local edits live here directly. To pull upstream changes, diff against > the upstream repo manually — there's no submodule link to do it for you. --- # Notrack Notrack is an original, minimal theme with a focus on self-sufficiency and decentralization. By default, Notrack does not rely on any third parties to serve your website. The README is long. You can use the automatic table of contents in GitHub to navigate (upper right corner of rendered README). ## Dependencies You will need the extended edition of Hugo in order to use this theme. This is the edition Hugo's developers recommend for most users. You probably already have it, but you can double check with: ```console $ hugo version hugo v0.115.4+extended linux/amd64 BuildDate=unknown ``` Note the "+extended" after the version number. Information about the standard and extended versions may be found within Hugo's [installation instructions](https://gohugo.io/installation/). ## Demonstration web page The theme has a demonstration web page that looks like this: ![Screenshot of the theme](https://raw.githubusercontent.com/gevhaz/hugo-theme-notrack/master/images/screenshot.png) There is a working demonstration page here: You can also run the demonstration web page on a local server. This is how you do it: ```console $ git clone https://github.com/gevhaz/hugo-theme-notrack notrack $ cd notrack/exampleSite/ $ hugo server -D --themesDir ../.. ``` You can them see the example website in your browser and interact with it. Hugo will print instructions for what address to use. Usually it is `http://localhost:1313/`. ## How to write a website from scratch with Notrack There are two ways to get started with this theme – the bottom-up approach and the top-down approach. The top-down approach is to just clone the example site and modify it until it looks how you want. The bottom-up approach is to start from scratch with `hugo new site` and gradually add the components you need. This section explains how to do that. ### The basic structure Notrack is built with a few types of pages in mind. The [home page](#how-to-create-a-home-page) is mandatory, but the [blog](#how-to-create-a-blog), ["About me"-page](#how-to-add-an-about-me-page), [gallery](#how-to-create-a-gallery-page) and [resume](#how-to-create-a-resume) are all optional. This section deals with creating minimal version of each type of page the theme supports. In the next section we will deal with adding custom content to the pages using shortcodes (but you can of course use the default Hugo shortcodes in any page as well). #### How to create a home page First, create a new Hugo project in a directory of your choice: ```console $ hugo new site $ cd $ git init $ git submodule add https://github.com/gevhaz/hugo-theme-notrack.git themes/notrack ``` > [!NOTE] > I use angle brackets ('<' and '>') to indicate a placeholder. You should put > replace it with your own value. Your project should already have a file called `hugo.toml`. Open it and make sure it looks something like this: ```toml baseURL = '' languageCode = '' title = '' theme = 'notrack' [params] author = '' # optional, defaults to author: siteHeading = '' ``` Now you are ready to add the first content to the web page. Create the home page, which is the first page users see: ```console $ hugo new _index.md ``` This could contain a short introduction of what is on the website or of yourself. Here is an example: ```markdown +++ date = '2024-11-10T16:46:03+02:00' title = '' +++ Welcome to my web page! ``` Now you have a working website. You can run it locally with: ```console $ hugo server ``` or deploy it somewhere according to the instructions form Hugo: You can further extend the home page: - Add an [image](#the-image-shortcode) (for example like in the demonstration web page) - Add a [footer](#how-to-set-a-footer) (that will be shown on all pages) #### How to create a blog > TL;DR: You add blog posts the default way, but don't forget to add the blog > section to the navigation bar so that people can find it. First, create the mandatory `_index.md` page for the blog: ```console $ hugo new blog/_index.md ``` And give it the following content: ```markdown +++ title = '' date = '' [menu.main] identifier = 'blog' name = 'Blog' weight = 5 +++ ``` Under `[params]` in your `hugo.toml`, add: ```toml mainSections = ['blog'] ``` > [!NOTE] > The section names are based on folder names, so if you call the folder > something other than 'blog', make sure that that is reflected. Add a blog post: ```console $ hugo new blog/post-1.md ``` And put any content you want in it. Don't forget to set `draft` to `false`. After adding or changing these three files, you will see a summary of the blog post on the home page, and a link to the blog in the menu. You can now continue blogging by just adding new posts with `hugo new blog/.md` For the blog, you may also be interested in: - [How to create tags and categories pages](#how-to-create-tags-and-categories-pages) - [How to create an archive page](#how-to-create-an-archive-page) #### How to add an About Me page There is nothing special about the About Me page, but the theme supplies a couple of shortcodes that can be useful if you want to display social links like in the demonstration site: Example of social link shortcodes To prepare for using one of the shortcodes, configure your social media user names like this in the site configuration: ```toml [params.social] github = '' email = '' ``` For all available social icons, see the [`data/notrack/social.yaml`](https://github.com/gevhaz/hugo-theme-notrack/blob/master/data/notrack/social.yaml) file. There are 65 of them. Then, create a new page, for example like this: ```console $ hugo new contact.md ``` Make sure you [add it to the navigation bar](#how-to-add-a-page-to-the-navigation-bar), for example like this: ```toml [menu.main] name = 'About me' weight = 90 ``` Finally, use either the [`social`](#the-social-shortcode) or [`contact-box`](#the-contact-box-shortcode) shortcodes in that page. The former produces the element at the bottom of the above image, and the latter produces the element on the right. #### How to create a Gallery Page A gallery page is just a normal page. Create a page: ```console $ hugo new gallery.md ``` Then use the [gallery shortcodes](#the-gallery-shortcodes) on it. #### How to create a resume A resume page is just a normal page. Create a page: ```console $ hugo new resume.md ``` Then use the [resume shortcodes](#the-resume-shortcodes) on it. #### How to create tags and categories pages If you have a blog, Hugo generates tags and categories pages for you automatically. They are available at `/tags` and `/categories` respectively. Don't forget to actually tag and categorize your posts for them to show up there. Notrack puts buttons at the top of your blog with links to the tags and categories (and an archive page [if you have one](#how-to-create-an-archive-page)). If you don't want these, disable it in your site configuration: ```toml [params] showTaxonomyLinks = false ``` You might instead want to have a [drop-down](#how-to-add-a-page-to-drop-down-menu) menu that links to tags and categories, like this: ![screenshot of drop-down menu](blog-drop-down.png) To add a tags page and a menu entry for it simply create a new `tags` section and add its index page as a sub-menu to the blog. You create the section like this: ```console $ hugo new tags/_index.md ``` The only needed content is a menu definition in the front matter, like this: ```toml [menu.main] parent = 'blog' name = 'Tags' ``` > [!IMPORTANT] > Take care that the parent value is the _identifier_ of the blog menu that you > have set in the blogs index page. The procedure is exactly the same for categories. #### How to create an archive page You can add an Archive page that lists all blog posts by year and month. Do this by adding a `[taxonomies]` section to your site configuration: ```toml [taxonomies] year = "year" month = "month" tags = "tags" categories = "categories" ``` > [!NOTE] > The `tags` and `categories` taxonomies are enabled by default but will be > disabled when you add a taxonomies section to your site configuration unless > you specifically add them. Then add an archive page: ```console $ hugo new archive/_index.md ``` It just needs to have a front matter specifying that it should have the `archives` layout: ```toml title = 'Archive' layout = 'archives' ``` You will automatically get a button at the top of the blog page linking to the archive unless you [disable it](#how-to-create-tags-and-categories-pages). You might otherwise want to add the page to the Blog [drop-down](#how-to-add-a-page-to-drop-down-menu) menu: ```toml layout = 'archives' [menu.main] parent = 'blog' name = 'Archive' ``` > [!IMPORTANT] > Make sure the value of `parent` is the identifier you used for your blog menu > entry or it won't show up in the drop-down. ### Shortcodes from Notrack Notrack supplies a few custom shortcodes. In this section I present the list of all the shortcodes in a table, and show how to use the non-trivial ones. #### Shortcodes provided by Notrack | Category | Shortcode | Description | | :--- | :--- | :--- | | **Contact info** | `contact-box` | Displays contact info set in `params.social` | | | `social` | Displays contact info set in `params.social` | | **Photo Gallery** | `gallery-category` | Container for `gallery-photo` shortcodes | | | `gallery-modal` | HTML to allow for full page view of gallery photos | | | `gallery-photo` | Include a photo in a gallery | | | `gallery-script` | Script to allow for full page view of gallery photos | | **General** | `image` | More advanced version of figure | | | `video` | Similar to an ordinary `