Added Makefile, updated theme, using fork of even theme

This commit is contained in:
Bastian de Byl
2018-12-19 23:26:10 -05:00
parent ad41075f43
commit f6ac6ee3fd
5 changed files with 325 additions and 182 deletions

32
Makefile Normal file
View File

@@ -0,0 +1,32 @@
# This Makefile was originally taken from https://github.com/alimac/alimac.io/
# Website hostname, used to set:
# - image and container names
# - path to web root (in /tmp directory)
WEBSITE=bdebyl.net
# Look up CloudFront distribution ID based on website alias
DISTRIBUTION_ID=$(shell aws cloudfront list-distributions \
--query 'DistributionList.Items[].{id:Id,a:Aliases.Items}[?contains(a,`$(WEBSITE)`)].id' \
--output text)
default: run
build:
hugo
run:
hugo server
clean:
@# Clean up existing generated site
rm -rf public/
deploy: clean build
@# Upload files to S3
aws s3 sync --acl "public-read" --sse "AES256" public/ s3://$(WEBSITE)
cache:
@# Invalidate caches
aws cloudfront create-invalidation --distribution-id $(DISTRIBUTION_ID) --paths '/*'
.PHONY: build run deploy

View File

@@ -1,196 +1,168 @@
# Tranquilpeak
baseURL = "https://bdebyl.net/"
languageCode = "en-us"
defaultContentLanguage = "en-us"
title = "bdebyl"
theme = "hugo-tranquilpeak-theme"
# disqusShortname = "basdb-site"
# googleAnalytics = "UA-123-45"
paginate = 7
canonifyurls = true
baseURL = "http://bdebyl.net/"
languageCode = "en"
defaultContentLanguage = "en"
title = "A random assortment of my personal projects."
preserveTaxonomyNames = true
enableRobotsTXT = true
enableEmoji = false
theme = "even"
# Syntax highlighting by Chroma. NOTE: Don't enable `highlightInClient` and `chroma` at the same time!
pygmentsOptions = "linenos=table"
pygmentsCodefences = true
pygmentsUseClasses = true
pygmentsCodefencesGuessSyntax = true
hasCJKLanguage = true # has chinese/japanese/korean ?
paginate = 5
disqusShortname = "" # disqus_shortname
googleAnalytics = "" # UA-XXXXXXXX-X
copyright = "" # default: author.name
[permalinks]
post = "/:year/:month/:slug/"
[author] # essential
name = "Bastian D."
[taxonomies]
tag = "tags"
category = "categories"
archive = "archives"
[sitemap] # essential
changefreq = "weekly"
priority = 0.5
filename = "sitemap.xml"
[author]
name = "Bastian de Byl"
bio = "This site serves both as my portfolio and collections of personal projects."
job = "Software Engineer"
location = "New England"
# Your profile picture
gravatarEmail = "bastiandebyl@gmail.com"
# picture = "https://cdn1.iconfinder.com/data/icons/ninja-things-1/1772/ninja-simple-512.png"
# Menu Configuration
[[menu.main]]
weight = 1
identifier = "home"
[[menu.main]] # config your menu
name = "Home"
pre = "<i class=\"sidebar-button-icon fa fa-lg fa-home\"></i>"
weight = 10
identifier = "home"
url = "/"
[[menu.main]]
weight = 2
identifier = "categories"
name = "Categories"
pre = "<i class=\"sidebar-button-icon fa fa-lg fa-bookmark\"></i>"
url = "/categories"
[[menu.main]]
weight = 3
identifier = "tags"
name = "Tags"
pre = "<i class=\"sidebar-button-icon fa fa-lg fa-tags\"></i>"
url = "/tags"
[[menu.main]]
weight = 4
identifier = "archives"
name = "Archives"
pre = "<i class=\"sidebar-button-icon fa fa-lg fa-archive\"></i>"
url = "/archives"
weight = 20
identifier = "archives"
url = "/post/"
[[menu.main]]
weight = 5
identifier = "about"
name = "About"
pre = "<i class=\"sidebar-button-icon fa fa-lg fa-question\"></i>"
url = "/#about"
[[menu.links]]
weight = 1
identifier = "github"
name = "GitHub"
pre = "<i class=\"sidebar-button-icon fa fa-lg fa-github\"></i>"
url = "https://github.com/bdebyl"
# [[menu.links]]
# weight = 2
# identifier = "stackoverflow"
# name = "Stack Overflow"
# pre = "<i class=\"sidebar-button-icon fa fa-lg fa-stack-overflow\"></i>"
# url = "https://stackoverflow.com/users/636472/kakawait"
# [[menu.misc]]
# weight = 1
# identifier = "rss"
# name = "RSS"
# pre = "<i class=\"sidebar-button-icon fa fa-lg fa-rss\"></i>"
# url = "/index.xml"
name = "Tags"
weight = 30
identifier = "tags"
url = "/tags/"
[[menu.main]]
name = "Categories"
weight = 40
identifier = "categories"
url = "/categories/"
[params]
# Customize date format use to render blog post date, categories and other
# You must use date format used by Go Time package https://golang.org/pkg/time/
# Months (not work with short month like "jan", "feb", etc) are translated if translation exists on i18n folders
# Default format is: January 2, 2006
dateFormat = "2 January 2006"
version = "4.x" # Used to give a friendly message when you have an incompatible update
debug = false # If true, load `eruda.min.js`. See https://github.com/liriliri/eruda
# Global keywords configuration. Following keywords will be add to every pages
# keywords = ["development", "next-gen"]
since = "2017" # Site creation time
# Syntax highlighter, possible choice between: "highlight.js" (recommanded) and "prism.js" (experimental)
# You can comment it to disable syntax highlighting
syntaxHighlighter = "highlight.js"
# site info (optional)
logoTitle = "bdebyl" # default: the title value
keywords = ["bastian", "de byl","bdebyl"]
description = "A random assortment of my personal projects."
# Hide sidebar on all article page to let article take full width to improve reading, and enjoy wide images and cover images. (true: enable, false: disable)
clearReading = true
# paginate of archives, tags and categories
archivePaginate = 5
# Define categories will create hierarchy between parents: `categories = ["foo", "bar"]` will consider "bar" a sub-category of "foo".
# If false it will flat categories.
hierarchicalCategories = true
# show 'xx Posts In Total' in archive page ?
showArchiveCount = false
description = "bdebyl.net"
# The date format to use; for a list of valid formats, see https://gohugo.io/functions/format/
dateFormatToUse = "2006-01-02"
# Customization
# Define the behavior of the sidebar
# 1: Display extra large sidebar on extra large screen, large sidebar on large screen,
# medium sidebar on medium screen and header bar on small screen and
# extra large sidebar is swiped on extra large screen and large sidebar on all lower screen (default)
# 2: Display large sidebar on large screen, medium sidebar on medium screen and
# header bar on small screen and large sidebar is swiped
# 3: Display medium sidebar on large and medium screen and header bar on small screen and
# medium sidebar is swiped
# 4: Display header bar on all screens, extra large sidebar is swiped on extra large screen and
# large sidebar is swiped on all lower screens
# 5: Display header bar on all screens and large sidebar is swiped on large screen
# 6: Display header bar on all screens and medium sidebar is swiped
sidebarBehavior = 1
# show word count and read time ?
moreMeta = false
# Your blog cover picture. I STRONGLY recommend you to use a CDN to speed up loading of pages.
# There is many free CDN like Cloudinary or you can also use indirectly
# by using services like Google Photos.
# Current image is on AWS S3 and delivered by AWS CloudFront.
# Otherwise put your image in folder `static/_images/` (development) or in `source/assets/images/` if you can't or don't want to build the theme,
# and use relative url : `your-image.png`
coverImage = "https://bdebyl.net/img/cover.png"
# Syntax highlighting by highlight.js
highlightInClient = false
# Display an image gallery at the end of a post which have photos variables (false: disabled, true: enabled)
imageGallery = true
# Some global options, you can also close or open something in front matter for a single post, see more information from `archetypes/default.md`.
toc = true
autoCollapseToc = false # Auto expand and collapse toc
fancybox = true # see https://github.com/fancyapps/fancybox
# Display thumbnail image of each post on index pages (false: disabled, true: enabled)
thumbnailImage = true
# Display thumbnail image at the right of title in index pages (`right`, `left` or `bottom`)
# Set this value to `right` if you have old posts to keep the old style on them
# and define `thumbnailImagePosition` on a post to overwrite this setting
thumbnailImagePosition = "bottom"
# Automatically select the cover image or the first photo from the gallery of a post if there is no thumbnail image as the thumbnail image
# Set this value to `true` if you have old posts that use the cover image or the first photo as the thumbnail image
# and set `autoThumbnailImage` to `false` on a post to overwrite this setting
autoThumbnailImage = true
# mathjax
mathjax = false # see https://www.mathjax.org/
mathjaxEnableSingleDollar = false
mathjaxEnableAutoNumber = false
mathjaxUseLocalFiles = false # You should install mathjax in `yout-site/static/lib/mathjax`
# Your favicon path, default is "/favicon.png"
# favicon = "/favicon.png"
postMetaInFooter = true # contain author, lastMod, markdown link, license
linkToMarkDown = false # Only effective when hugo will output .md files.
contentCopyright = '' # e.g. '<a rel="license noopener" href="https://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank">CC BY-NC-ND 4.0</a>'
# Header configuration
# The link at the right of the header is customizable
# You can add a link (as an icon) at the right of the header instead of the author's gravatar image or author's picture.
# By default, author's gravatar or author's picture is displayed.
# url: /#search
# icon: search
# class: st-search-show-outputs
changyanAppid = "" # Changyan app id
changyanAppkey = "" # Changyan app key
# Custom CSS. Put here your custom CSS files. They are loaded after the theme CSS;
# they have to be referred from static root. Example
# [[params.customCSS]]
# href = "css/mystyle.css"
livereUID = "" # LiveRe UID
# Custom JS. Put here your custom JS files. They are loaded after the theme JS;
# they have to be referred from static root. Example
# [[params.customJS]]
# src = "js/myscript.js"
baiduPush = false # baidu push
baiduAnalytics = "" # Baidu Analytics
baiduVerification = "" # Baidu Verification
googleVerification = "" # Google Verification
# Display `Next` on left side of the pagination, and `Prev` on right side one.
# If you set this value to `true`, these positions swap.
# swapPaginator = true
# Link custom CSS and JS assets
# (relative to /static/css and /static/js respectively)
customCSS = []
customJS = []
# Sharing options
# Comment and uncomment to enable or disable sharing options
# If you wanna add a sharing option, read user documentation :
# Tranquilpeak configuration > Theme configuration > sharing-options
[[params.sharingOptions]]
name = "Facebook"
icon = "fa-facebook-official"
url = "https://www.facebook.com/sharer/sharer.php?u=%s"
# Display a message at the beginning of an article to warn the readers that it's content may be outdated.
[params.outdatedInfoWarning]
enable = false
hint = 30 # Display hint if the last modified time is more than these days ago.
warn = 180 # Display warning if the last modified time is more than these days ago.
[[params.sharingOptions]]
name = "Twitter"
icon = "fa-twitter"
url = "https://twitter.com/intent/tweet?text=%s"
[params.gitment] # Gitment is a comment system based on GitHub issues. see https://github.com/imsun/gitment
owner = "" # Your GitHub ID
repo = "" # The repo to store comments
clientId = "" # Your client ID
clientSecret = "" # Your client secret
[[params.sharingOptions]]
name = "Google+"
icon = "fa-google-plus"
url = "https://plus.google.com/share?url=%s"
[params.gitalk] # Gitalk is a comment system based on GitHub issues. see https://github.com/gitalk/gitalk
owner = "" # Your GitHub ID
repo = "" # The repo to store comments
clientId = "" # Your client ID
clientSecret = "" # Your client secret
# [params.header.rightLink]
# class = ""
# icon = ""
# url = "/#about"
[params.flowchartDiagrams]# see https://blog.olowolo.com/example-site/post/js-flowchart-diagrams/
enable = false
options = ""
# Customize link of author avatar in sidebar
# [params.sidebar.profile]
# url = "/#about"
[params.sequenceDiagrams] # see https://blog.olowolo.com/example-site/post/js-sequence-diagrams/
enable = false
options = "" # default: "{theme: 'simple'}"
# Customize copyright value "© 2017 <CUSTOMIZATION>. All Rights Reserved"
# [params.footer]
# copyright = "<a href=\"https://github.com/kakawait\">kakawait</a>"
[params.busuanzi] # count web traffic by busuanzi
enable = false
siteUV = false
sitePV = false
pagePV = false
[params.reward]
enable = false
[params.social]
a-email = "mailto:bastiandebyl@gmail.com"
g-github = "https://github.com/bdebyl"
m-instagram = "https://instagram.com/bastian.remi"
n-gitlab = "https://gitlab.com/bdebyl"
# See https://gohugo.io/about/hugo-and-gdpr/
[privacy]
[privacy.googleAnalytics]
anonymizeIP = true # 12.214.31.144 -> 12.214.31.0
[privacy.youtube]
privacyEnhanced = true
# Uncomment these options to make hugo output .md files.
#[mediaTypes]
# [mediaTypes."text/plain"]
# suffixes = ["md"]
#
#[outputFormats.MarkDown]
# mediaType = "text/plain"
# isPlainText = true
# isHTML = false
#
#[outputs]
# home = ["HTML", "RSS"]
# page = ["HTML", "MarkDown"]
# section = ["HTML", "RSS"]
# taxonomy = ["HTML", "RSS"]
# taxonomyTerm = ["HTML"]

141
content/post/archinstall.md Normal file
View File

@@ -0,0 +1,141 @@
---
title: "Installing ArchLinux with Full Disk Encryption (LUKS)"
date: 2018-12-19T22:35:11-05:00
categories: ["Tutorial"]
tags: ["linux"]
---
This is a guide written on how to install Arch Linux using LUKS for disk encryption, and Systemd-boot as the bootloader.
<!--more-->
It is assumed that the reader has basic linux knowledge and understands that examples are given via output commands.
The reader may always consult manpages, the [Arch Wiki](https://wiki.archlinux.org/), or other documentation to build a better understanding of the tools and methods used.
---
# Partitioning
1. Create a partition scheme using partitioner of choice (e.g. `gdisk`, `fdisk`, `cgdisk`).
- First partition should be EFI/boot partition at around 256MB+ (type: `ef00`)
- Second partition should be Linux LVM partition using rest of disk space (type: `8e00`)
1. Make the the EFI/boot partition FAT32 via `mkfs.fat -F32`
# Encryption
1. Format the Linux LVM partition:
```
# cryptsetup luksFormat /dev/sdaN
Enter passphrase:
```
**Note:** _Remember your passphrase! You will need this every time you boot your computer_
1. Create a mapping for your Linux LVM (LUKS):
```
# cryptsetup open --type luks /dev/sdaN <map_name>
```
_Use whatever name you want. Ex. `lvm`, `volume`, etc._
1. Create the physical volume, volume group, and logical volumes for `<map_name>` specified in the previous step:
```
# pvcreate /dev/mapper/<map_name>
# vgcreate <volume_name> /dev/mapper/<map_name>
```
_Use whatever volume name you want. Ex. `volume`, `main`, `linux`, etc._
```
# lvcreate -L2G <volume_name> -n swap
```
_Select size for swap, if desired. Here we use `2G` for 2Gb._
```
# lvcreate -L16G <volume_name> -n root
# lvcreate -l 100%FREE <volume_name> -n home
```
1. Specify and write the desired filesystems:
```
# mkfs.ext4 /dev/mapper/<volume_name>-root
# mkfs.ext4 /dev/mapper/<volume_name>-home
# mkswap /dev/mapper/<volume_name>-swap
```
# Install Linux
1. Mount the boot partition and logical volumes for installation:
```
# mount /dev/mapper/<volume_name>-root /mnt
# mkdir /mnt/home
# mkdir /mnt/boot
# mount /dev/mapper/<volume_name>-home /mnt/home
# mount /dev/sdaN /mnt/boot
# swapon /dev/mapper/<volume_name>-swap
```
1. Install the base system (_Assuming you have internet connectivity. Use `wifi-menu`, or other, to connect to the internet at this point._):
```
# pacstrap /mnt base base-devel
```
# Set-up Linux Installation
1. Generate the `fstab`:
```
# genfstab -p /mnt >> /mnt/etc/fstab
```
1. Move into the installation:
```
# arch-chroot /mnt
```
1. Configure `initramfs`:
1. Edit `HOOKS` in `/etc/mkinitcpio.conf` using text editor of your choice (e.g. `vi`, `nano`, etc.). Move the `keyboard` hook before `filesystems`, and add `encrypt` and `lvm2` hooks **before** `filesystems`:
```
# egrep '^HOOKS' /etc/mkinitcpio.conf
HOOKS=(base udev autodetect modconf block keyboard encrypt lvm2 filesystems fsck)
```
_Read the comment documentation on `HOOKS` in the document to find out more._
1. Generate `initramfs`:
```
# mkinitcpio -p linux
```
1. Install a bootloader (e.g. `systemd-boot`, `grub`, `syslinux`, etc.):
1. I will be using `systemd-boot`
```
# bootctl --path=/boot/ install
```
1. Edit the loader configuration using a text editor of your choice:
```
# cat /boot/loader/loader.conf
default arch
timeout 3
editor 0
```
1. Create the loader entry for the default `arch` entry specified above (_You can edit this name if desired._). Use `blkid /dev/sdaN` to find the UUID of your crypt device, and recall the volume name you gave your device above (_`main` in example below_):
```
# cat /boot/loader/entries/arch.conf
title Arch Linux
linux /vmlinuz-linux.img
initrd /initramfs-linux.img
options cryptdevice=UUID=9f1fc119-b1dc-49d8-9a5a-686ad9e2fd2e:volume root=/dev/mapper/main-root quiet rw
```
1. Create a root password using `passwd`.
1. Set a hostname:
```
# echo "<your_hostname>" > /etc/hostname
```
1. Set up the time:
```
# ln -fs /usr/share/zoneinfo/<continent>/<city/place> /etc/localtime
# hwclock --systohc --utc
```
1. Set the locale to `en_US`:
```
# sed -i 's/^\#en_US/en_US/' /etc/locale.gen
# locale-gen
# locale > /etc/locale.conf
```
1. Done!
```
# exit
# unmount -R /mnt
# reboot
```

View File

@@ -3,9 +3,6 @@ title: "Make Your Ears Bern"
date: 2018-01-11T04:26:57+01:00
categories: ["Blog"]
tags: ["electronics"]
thumbnailImagePosition: top
thumbnailImage: "/img/headphone-fix/thumbnail.jpg"
coverImage: "/img/headphone-fix/IMG_7518.jpg"
---
A colleague offered a pair of Bern Bluetooth drop-in headphones to me fore free, with the catch being: _I had to fix them_
@@ -17,7 +14,7 @@ A colleague offered a pair of Bern Bluetooth drop-in headphones to me fore free,
Past mistakes have taught me to be gentle and patient when it comes to taking things apart. This was no exception either. After looking over the unit on each side, I figured the only way *in* was lifting the mesh cover off. So I went at it, carefully, with a pair of tweezers. I worked my way around the edge and wedged the mesh upwards.
{{< image classes="fancybox clear center nocaption" src="/img/headphone-fix/IMG_7505.jpg" >}}
![Zoom, Zoom, Zoom!](/img/headphone-fix/IMG_7505.jpg)
# Okay, Maybe Turn It On
@@ -27,8 +24,11 @@ Now that the problematic speaker side was successfully opened without any damage
I played a song via smartphone on the speakers. The result was as expected: _the right speaker put out no sound._ I checked the known-good left speaker using my **Rigol 1074Z** oscilloscope. This may not have been entirely necessary, but I wanted to find out what to expect when troubleshooting the right channel.
{{< image classes="fancybox fig-50" group="turniton" src="/img/headphone-fix/IMG_7506.jpg" title="Left Speaker" >}}
{{< image classes="fancybox clear fig-50 right" group="turniton" src="/img/headphone-fix/IMG_7511.jpg" title="Right Speaker">}}
### Left Speaker
![Left Speaker](/img/headphone-fix/IMG_7506.jpg)
### Right Speaker
![Right Speaker](/img/headphone-fix/IMG_7511.jpg)
Knowing what to expect on the oscilloscope, I hooked up the probe to the right, problematic, speaker. The result was much different, indicating either noise or an open circuit. It may be worth mentioning that the right speaker was disconnected at this point in time to ease the troubleshooting process.
@@ -38,15 +38,15 @@ Knowing what to expect on the oscilloscope, I hooked up the probe to the right,
Lucky for me the PCB pads were labeled -- even better `SPKL+` (_left_) and `SPKR+` (_right_) were easy to find.
{{< image classes="fancybox clear center" src="/img/headphone-fix/IMG_7507.jpg" >}}
![](/img/headphone-fix/IMG_7507.jpg)
Outside of the bluetooth board hidden under the piece of tape, there's not a whole lot going on in the circuit. It was my guess that the visible surface mount QFN chip was most likely the op-amp used for the speakers. A quick Google search of `AIWI TI` (_as shown in the photograph_) resulted in [the following datasheet](http://www.ti.com/lit/ds/symlink/tpa6132a2.pdf) which verified that to be the case.
{{< image classes="clear center" src="/img/headphone-fix/TPA6132A2.png" title="TPA6132A2 QFN Pinout" >}}
<center![TPA6132A2 QFN Pinout](/img/headphone-fix/TPA6132A2.png)</center>
**Bingo!** Now knowing the pinout, I could use my trusty multimeter (_a Fluke 115_) to test continuity of the circuit from the known-good and the now known-bad speaker traces back to the `OUTL` and `OUTR` outputs of the amplifier.
{{< image classes="fancybox clear center" src="/img/headphone-fix/IMG_7514.jpg" >}}
![](/img/headphone-fix/IMG_7514.jpg)
Removing the board from the housing required a bit of finesse. I didn't want to bother desoldering the left speaker connections to make removal easier. So, with a bit of gentle back and forth I was able to get it the PCB out and inspect traces on the bottom side.
@@ -60,7 +60,7 @@ After a few minutes of scratching my head and repeatedly going over the datashee
Using the 3.5mm mini-jack's solder pads, I found continuity to be true from the chips left and right outputs to the conveniently accessible solder pads. _A bodge wire was in order_..
{{< image classes="fancybox clear center" src="/img/headphone-fix/IMG_7515.jpg" >}}
!(/img/headphone-fix/IMG_7515.jpg)
# All's Well That Ends Well
@@ -68,6 +68,6 @@ Using the 3.5mm mini-jack's solder pads, I found continuity to be true from the
Again, using my trusty Fluke 115, I verified continuity from the chip's `OUTR` pin to `SPKR+`. Lo and behold it was now closed-circuit! I was very happy to see the expected waveform from the known-good left channel now also appearing on the right channel.
{{< image classes="fancybox clear center" src="/img/headphone-fix/IMG_7516.jpg" >}}
![](/img/headphone-fix/IMG_7516.jpg)
At this point I quickly re-soldered the wires to the speaker and enjoyed music now coming into both ears!

View File

@@ -3,8 +3,6 @@ title: "Humble Beginnings"
date: 2017-12-21T01:42:57-05:00
categories: ["Blog"]
tags: ["code"]
thumbnailImagePosition: top
thumbnailImage: "/img/humble-beginnings/main.png"
---
After running into too many road blocks I've decided to go with the [**Tranquilpeak**](https://github.com/kakawait/hugo-tranquilpeak-theme) theme for this site. Before this, I was really looking forward to using the [**Tracks**](https://github.com/ageekymonk/hugo-tracks-theme) theme (ported from WordPress)
<!--more-->
@@ -17,12 +15,12 @@ If you want a general overview, feel free to check out the relevant [commit](htt
Right off the bat I noticed the navigation bar seemed a bit off, to say the least:
{{< image classes="center" src="/img/humble-beginnings/header-problem.png" title="Navbar Issue" >}}
<center>![Navbar Issue](/img/humble-beginnings/header-problem.png)</center>
The links showed as numbers and pointed to `/0`, `/1`, and `/2` respectively. These, of course, lead to 404s.
{{< image classes="center" src="/img/humble-beginnings/404.png" title="404 Page - Should probably make this look a bit better, eventually..">}}
<center>![404 Page](/img/humble-beginnings/404.png)</center>
This didn't seem like the intended behavior, so I kept digging. Eventually, I found out the problem lied in the usage of the `.Site.Sections` variable used in a loop to populare items in the page header.
@@ -55,7 +53,7 @@ Looking at other template files in the theme's layout, I stumbled on a chunk of
The original uses the `.Site.Sections` variable, which I replaced with `.Site.Params.navlinks`. **This** seemed like intended behavior as the user-defined `config.toml` nav links weren't ever utilized or populated anywhere on the site.
{{< image classes="center clear" src="/img/humble-beginnings/tracks-config.png" title="Nav Links from Tracks Theme config">}}
<center>![Nav Links from Tracks Theme config](/img/humble-beginnings/tracks-config.png)</center>
I borrowed the code found in `layouts/partials/sidebar.html` (*which also never appears to be used*) to include the nav links and get my desired behavior: