{
    "version" : "https://jsonfeed.org/version/1.1",
    "title" : "Dad's Tech Lab - Smart Home, Technology, and Software Development Blog",
    "description": "Software development, technology, and smart home blog by Jimmy Gillam",
    "home_page_url" : "https://dadstechlab.com/",
    "feed_url" : "https://dadstechlab.com/index.feed",
    "icon" : "https://dadstechlab.com/apple-touch-icon.png",
    "favicon" : "https://dadstechlab.com/favicon.ico",
    "author" : {
        "name" : "Jimmy Gillam",
        "url": "https://itsmejimmyg.com"
    },
    "items" : [
    {
        "title" : "Home Assistant + Matter Bridge: Smarter Connections, Fewer Headaches",
        "date_published" : "2025-08-24T06:45:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/08/home-assistant-matter-hub/",
        "url" : "https://dadstechlab.com/2025/08/home-assistant-matter-hub/",
        "summary": "Voice control isn\u0026rsquo;t mission-critical in my house, but when it breaks, you\u0026rsquo;d think my coffee maker was plotting against me. My smart home consists of two primary systems - Home Assistant and Google. I configured them to work together through Google Cloud Platform, and everything worked great\u0026hellip; until it didn\u0026rsquo;t a few months ago. Because of dad life (and because duct tape only goes so far in the digital world), time and the fix had slipped away from me.\n",
        "content_html" : "\u003cp\u003eVoice control isn\u0026rsquo;t mission-critical in my house, but when it breaks, you\u0026rsquo;d think my coffee maker was plotting against me. My smart home consists of two primary systems - Home Assistant and Google. I configured them to work together through Google Cloud Platform, and everything worked great\u0026hellip; until it didn\u0026rsquo;t a few months ago. Because of dad life (and because duct tape only goes so far in the digital world), time and the fix had slipped away from me.\u003c/p\u003e\n\u003cp\u003eScrolling Reddit, I stumbled across a hidden gem that promised to ditch Google Cloud headaches and make everything play nice locally. It simplifies everything. I wanted to share it with you to give props to the developer and to help others in the same boat.\u003c/p\u003e\n\u003ch2 id=\"home-assistant-matter-hub\" class=\"headerLink\"\u003e\n    \u003ca href=\"#home-assistant-matter-hub\" class=\"header-mark\"\u003e\u003c/a\u003eHome Assistant Matter Hub\u003c/h2\u003e\u003cblockquote\u003e\n  \u003cp\u003eGotta give props to the OG - \u003ca href=\"https://t0bst4r.github.io/home-assistant-matter-hub/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHome-Assistant-Matter-Hub\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eI\u0026rsquo;m not going to go much into Home Assistant yet, but it is a solid smart home platform that allows you to integrate all kinds of technologies in one place. This not only includes sensors and other hardware, but also software. They offer all kinds of official integrations and add-ons, but a lot of the magic happens by the hands of the community.\u003c/p\u003e\n\u003cp\u003eThis open source add-on not only saved me a lot of time (and probably a few extra gray hairs) by not having to set up and maintain a project in GCP, but it lets me share everything from Home Assistant to my Google smart home devices locally. Yes, \u003cstrong\u003eLOCALLY\u003c/strong\u003e. This is a huge plus for me and other smart home enthusiasts, because the more data I keep within my home the better.\u003c/p\u003e\n\u003cp\u003eIt works by simulating a bridge to connect all of your entities from Home Assistant to any Matter-compatible controller. This can be Google Home, Alexa, or Apple Home. If you\u0026rsquo;re a wild one and couldn\u0026rsquo;t decide on one, you can even configure it to work with multiple controllers! There are a few limitations, but it has worked for everything I need.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;ll walk you through all it takes to add it to Home Assistant and start sharing entities with Google Home. You could knock all this out by the time you brew a cup of coffee to start your next project.\u003c/p\u003e\n\u003ch2 id=\"installation\" class=\"headerLink\"\u003e\n    \u003ca href=\"#installation\" class=\"header-mark\"\u003e\u003c/a\u003eInstallation\u003c/h2\u003e\u003cblockquote\u003e\n  \u003cp\u003eAs always, check out the \u003ca href=\"https://t0bst4r.github.io/home-assistant-matter-hub/installation\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial docs\u003c/a\u003e for the add-on.\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eYou can either run this as a docker container or as an add-on within Home Assistant. We\u0026rsquo;ll take the latter route.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eOpen your Home Assistant UI\u003c/li\u003e\n\u003cli\u003eNavigate to the Add-Ons area by navigating to \u003ccode\u003eSettings\u003c/code\u003e -\u0026gt; \u003ccode\u003eAdd-Ons\u003c/code\u003e -\u0026gt; \u003ccode\u003eAdd-On Store\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eOn the top right, click the \u003ccode\u003eMore\u003c/code\u003e ellipses and select \u003ccode\u003eRepositories\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eWe\u0026rsquo;re adding a new repository, so at the bottom of the modal in the Add field enter \u003ccode\u003ehttps://github.com/t0bst4r/home-assistant-addons\u003c/code\u003e and click \u003ccode\u003eAdd\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eClose the modal\u003c/li\u003e\n\u003cli\u003eRefresh the Add-On Store and install the Add-On\u003c/li\u003e\n\u003cli\u003eNavigate to the Add-On page, configure how you want it. I toggled on \u003ccode\u003eStart on boot\u003c/code\u003e, \u003ccode\u003eWatchdog\u003c/code\u003e, and \u003ccode\u003eShow in sidebar\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eNow to make the magic happen.\u003c/p\u003e\n\u003ch2 id=\"play-nice-and-share\" class=\"headerLink\"\u003e\n    \u003ca href=\"#play-nice-and-share\" class=\"header-mark\"\u003e\u003c/a\u003ePlay Nice and Share\u003c/h2\u003e\u003cp\u003eBefore we get started, let me tell you that if you don\u0026rsquo;t configure \u003cem\u003esomething\u003c/em\u003e in the new bridge settings then Home Assistant will share \u003cstrong\u003eEVERYTHING\u003c/strong\u003e. Google Home was flooded with all kinds of devices - lights, sensors, automations, even things I forgot I had connected. It was like opening a junk drawer and realizing half of it is smart now.\u003c/p\u003e\n\u003cp\u003eIn the configuration for the bridge, you have an \u003ccode\u003einclude\u003c/code\u003e array and an \u003ccode\u003eexclude\u003c/code\u003e array. I \u003cem\u003ehighly\u003c/em\u003e suggest that you configure one of them. I decided to include devices by labels, but I\u0026rsquo;ll get more on that later. Please check the \u003ca href=\"https://t0bst4r.github.io/home-assistant-matter-hub/bridge-configuration\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ebridge configuration docs\u003c/a\u003e for detailed instructions on how to configure these settings. Now\u0026hellip; let\u0026rsquo;s get started.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eNavigate to the add-on web UI\u003c/li\u003e\n\u003cli\u003eClick \u003ccode\u003eCreate New Bridge\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eGive it a name, leave the port the same, provide a country code if you need, configure your include and exclude settings, and finally change any additional settings below. I made sure not to include hidden entities\u003c/li\u003e\n\u003cli\u003eClick \u003ccode\u003eSave\u003c/code\u003e and it should provide you with a QR code. Keep this up\u003c/li\u003e\n\u003cli\u003eNavigate to your Google Home app on your phone, go to your devices tab, tap \u003ccode\u003eAdd\u003c/code\u003e. Now tap \u003ccode\u003eMatter-enabled device\u003c/code\u003e and scan the QR code that the add-on presented to you\u003c/li\u003e\n\u003cli\u003eWatch your device list fill with everything shared from Home Assistant!\u003c/li\u003e\n\u003c/ol\u003e\n\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/08/home-assistant-matter-hub/android_hass_matter_bridge_screenshot.png\" title=\"\" data-thumbnail=\"/2025/08/home-assistant-matter-hub/android_hass_matter_bridge_screenshot.png\" data-sub-html=\"\u003ch2\u003eGoogle Home HASS Matter Bridge\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/08/home-assistant-matter-hub/android_hass_matter_bridge_screenshot.png' srcset=\"/2025/08/home-assistant-matter-hub/android_hass_matter_bridge_screenshot_hu_2dcd94a000770d9c.webp 800w, /2025/08/home-assistant-matter-hub/android_hass_matter_bridge_screenshot_hu_574c7d4b7c9e9767.webp 1200w, /2025/08/home-assistant-matter-hub/android_hass_matter_bridge_screenshot_hu_306b68a4e447783e.webp 1600w\"   height=\"2496\" width=\"300px\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eGoogle Home HASS Matter Bridge\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003ch2 id=\"tag-me-in\" class=\"headerLink\"\u003e\n    \u003ca href=\"#tag-me-in\" class=\"header-mark\"\u003e\u003c/a\u003eTag Me In\u003c/h2\u003e\u003cp\u003eI wanted to share my approach for filtering what I wanted to share with Google Home. As of right now, I really only want to share my light switches and door locks. I already have my TVs and thermostats on Google Home. I don\u0026rsquo;t need anything else right \u003cem\u003enow\u003c/em\u003e, but I\u0026rsquo;m sure with all my tinkering I will in the future.\u003c/p\u003e\n\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/08/home-assistant-matter-hub/hass_matter_label.png\" title=\"\" data-thumbnail=\"/2025/08/home-assistant-matter-hub/hass_matter_label.png\" data-sub-html=\"\u003ch2\u003eHome Assistant Matter Label\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/08/home-assistant-matter-hub/hass_matter_label.png' srcset=\"/2025/08/home-assistant-matter-hub/hass_matter_label_hu_d3d44f2280bb53d4.webp 800w, /2025/08/home-assistant-matter-hub/hass_matter_label_hu_b1e67fe7c1874629.webp 1200w, /2025/08/home-assistant-matter-hub/hass_matter_label_hu_a3dab6abd395c9ee.webp 1600w\"   height=\"945\" width=\"1912\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eHome Assistant Matter Label\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eSo to make things easy for me, I decide to only include entities with a particular tag\n\u003ccode\u003ematter_available\u003c/code\u003e. Instead of messing with the configuration for the add-on every time and knowing how to find the information I need to configure things properly, I\u0026rsquo;m able to include and exclude items at will by just adding a label to any supported entity by that entity\u0026rsquo;s settings. Easy peasy, just like labeling your kid\u0026rsquo;s lunchbox. But this time it makes Google behave.\u003c/p\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eNote\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003eWhenever you add or remove labels from entities you will have to restart the add-on to make those entities available in Google Home\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cp\u003eIt\u0026rsquo;s an easy way manage what I share, and I can always find a list of everything by filter by label on the Entities page.\u003c/p\u003e\n\u003ch2 id=\"wrapping-up\" class=\"headerLink\"\u003e\n    \u003ca href=\"#wrapping-up\" class=\"header-mark\"\u003e\u003c/a\u003eWrapping Up\u003c/h2\u003e\u003cp\u003eIt\u0026rsquo;s a quick article for something with potentially big gains for your smart home. It\u0026rsquo;s one of those small tweaks that feels like a superpower - kind of like finding fresh batteries in the junk drawer on the first try. I\u0026rsquo;m sure my daughter will love turnings lights on and off once she can pronounce \u0026ldquo;Hey Google\u0026rdquo; a bit better. Though honestly, I may regret giving her that much power \u0026#x1f606;.\u003c/p\u003e\n\u003cp\u003eI wanted to again give a shout out to the developer and wanted to share love for the open source community! Share the article with your fellow smart home geeks and let me know what you\u0026rsquo;re using your voice to control in the comments below!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Goodbye Cloudflare Pages, Hello Workers: A Hugo Deployment Makeover - Plus Slack Notifications!",
        "date_published" : "2025-08-06T12:00:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/08/cloudflare-pages-to-workers/",
        "url" : "https://dadstechlab.com/2025/08/cloudflare-pages-to-workers/",
        "summary": "Recently, Cloudflare kept nudging me to migrate from Pages to Workers - and by \u0026ldquo;nudging,\u0026rdquo; I mean waving a persistent banner in my face like a toddler with a glitter-filled craft project. I\u0026rsquo;ve deployed a few sites to Pages and appreciated the simple setup, but after digging into Workers, I decided to give it a go. Let\u0026rsquo;s walk through the pros, the cons, and how I\u0026rsquo;ve reworked my CI/CD pipeline. As a cherry on top, I\u0026rsquo;ll show you how I wired up Slack to keep me posted on every build and deploy - because sometimes I like someone to notice my accomplishments.\n",
        "content_html" : "\u003cp\u003eRecently, Cloudflare kept nudging me to migrate from Pages to Workers - and by \u0026ldquo;nudging,\u0026rdquo; I mean waving a persistent banner in my face like a toddler with a glitter-filled craft project. I\u0026rsquo;ve deployed a few sites to Pages and appreciated the simple setup, but after digging into Workers, I decided to give it a go. Let\u0026rsquo;s walk through the pros, the cons, and how I\u0026rsquo;ve reworked my CI/CD pipeline. As a cherry on top, I\u0026rsquo;ll show you how I wired up Slack to keep me posted on every build and deploy - because sometimes I like someone to notice my accomplishments.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eFirst, here\u0026rsquo;s a link to the \u003ca href=\"https://developers.cloudflare.com/workers/static-assets/migration-guides/migrate-from-pages/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial Cloudflare migration docs\u003c/a\u003e - the source of truth, and pretty straightforward.\u003c/p\u003e\n\u003c/blockquote\u003e\u003ch3 id=\"comparison\" class=\"headerLink\"\u003e\n    \u003ca href=\"#comparison\" class=\"header-mark\"\u003e\u003c/a\u003eComparison\u003c/h3\u003e\u003cp\u003eCloudflare has an \u003ca href=\"https://developers.cloudflare.com/workers/static-assets/migration-guides/migrate-from-pages/#compatibility-matrix\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial comparison matrix\u003c/a\u003e between Pages and Workers. I\u0026rsquo;m linking to it here because Workers is still evolving - and I\u0026rsquo;m sure it\u0026rsquo;ll get more bells, whistles, and maybe even a foghorn soon.\u003c/p\u003e\n\u003cp\u003eThe biggest perks of switching (for me):\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eThat persistent migration banner finally goes away - like finishing the dishes and realizing you\u0026rsquo;ve won a small domestic war.\u003c/li\u003e\n\u003cli\u003eDisabling the default domains Cloudflare provides is a breeze - no duct tape or DNS incantations required.\u003c/li\u003e\n\u003cli\u003eI can manage deployment options in code (IaC fans, rise up!)\u003c/li\u003e\n\u003cli\u003eFor static sites it\u0026rsquo;s not essential, but server-side stack traces are nice to have\u003c/li\u003e\n\u003cli\u003eCron triggers: because sometimes you just want your site to do stuff while you sleep\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNow this part isn\u0026rsquo;t in any official documentation, but Workers just \u003cem\u003efeels\u003c/em\u003e like the future of Pages. It\u0026rsquo;s more flexible, better suited for infrastructure-as-code approaches, and easier to evolve as your site grows. Like swapping out your clunky flip phone for a smart one - it just makes sense.\u003c/p\u003e\n\u003ch3 id=\"switching-to-proper-cicd\" class=\"headerLink\"\u003e\n    \u003ca href=\"#switching-to-proper-cicd\" class=\"header-mark\"\u003e\u003c/a\u003eSwitching to Proper CI/CD\u003c/h3\u003e\u003cp\u003eI wanted to combine some of the best practices from my \n\n\n\n\u003ca href=\"/2025/07/theengs-ci-cd/\"\u003eAutomating Theengs Gateway with Github Action Runner\u003c/a\u003e\n article and apply them to my Hugo sites. Workers gave me the perfect excuse to modernize things.\u003c/p\u003e\n\u003cp\u003eMy Git repo lives on GitHub, and I switched to using GitHub Actions for my pipelines. It gives me:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMore flexibility (thanks to a smorgasbord of official and community-built actions)\u003c/li\u003e\n\u003cli\u003eIaC-style pipeline management\u003c/li\u003e\n\u003cli\u003eSeamless integration with \u003ca href=\"https://infisical.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInfisical\u003c/a\u003e for secrets\u003c/li\u003e\n\u003cli\u003eEasy migration later on - just swap out the deploy step, not the whole workflow\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThere\u0026rsquo;s more setup upfront, but like any good DIY project, it pays off. Let\u0026rsquo;s roll up our sleeves.\u003c/p\u003e\n\u003ch3 id=\"switching-to-cloudflare-workers\" class=\"headerLink\"\u003e\n    \u003ca href=\"#switching-to-cloudflare-workers\" class=\"header-mark\"\u003e\u003c/a\u003eSwitching to Cloudflare Workers\u003c/h3\u003e\u003cp\u003eI was running a basic Pages setup, so your mileage may vary. Good news: you can set up Workers without disturbing your existing project. The only real interruption is when you move your custom domain. Here\u0026rsquo;s the step-by-step breakdown.\u003c/p\u003e\n\u003ch4 id=\"pages-prep\" class=\"headerLink\"\u003e\n    \u003ca href=\"#pages-prep\" class=\"header-mark\"\u003e\u003c/a\u003ePages Prep\u003c/h4\u003e\u003cp\u003eYou\u0026rsquo;ll be committing new files, so start by disconnecting your GitHub repo from the Pages project:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eIn Cloudflare, go to \u003cstrong\u003eWorkers \u0026amp; Pages\u003c/strong\u003e \u0026gt; Your Pages project \u0026gt; \u003cstrong\u003eSettings\u003c/strong\u003e tab\u003c/li\u003e\n\u003cli\u003eClick \u003cstrong\u003eDisconnect repository\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eDon\u0026rsquo;t worry - it\u0026rsquo;s like unplugging your toaster. The toast (your current site) doesn\u0026rsquo;t disappear.\u003c/p\u003e\n\u003ch4 id=\"create-your-worker\" class=\"headerLink\"\u003e\n    \u003ca href=\"#create-your-worker\" class=\"header-mark\"\u003e\u003c/a\u003eCreate Your Worker\u003c/h4\u003e\u003cp\u003eFrom the Workers \u0026amp; Pages dashboard:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eClick \u003cstrong\u003eCreate\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eChoose \u003cstrong\u003eStart with Hello World!\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eRename your Worker if you\u0026rsquo;d like. Note the name for \u003ccode\u003ewrangler.toml\u003c/code\u003e later on.\u003c/li\u003e\n\u003cli\u003eClick \u003cstrong\u003eDeploy\u003c/strong\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eAt this point, you\u0026rsquo;ve got a cheerful little \u0026ldquo;\u003cem\u003eHello World\u003c/em\u003e\u0026rdquo; response - a blank canvas for your Hugo masterpiece.\u003c/p\u003e\n\u003cp\u003eIn the root of your repository, create a file named \u003ccode\u003ewrangler.toml\u003c/code\u003e. For our Hugo site, you can copy and paste the example I have documented below, just make sure to change your project name to the name of your worker you defined in the first step.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ewrangler.toml\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e#project name\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ename\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;dads-tech-lab\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# ensures that this will be compatible for this specific version of Cloudflare Workers\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003ecompatibility_date\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;2025-07-31\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# disables *.workers.dev URL\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003eworkers_dev\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# disables preview URLs\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003epreview_urls\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003efalse\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"nx\"\u003eassets\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# directory of static files\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003edirectory\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;./public\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# tells the worker that you have a custom 404 page when a requested\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# asset is not found, and should be found in the directory set in the above line.\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003enot_found_handling\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;404-page\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eDisabled URLs\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003eI didn\u0026rsquo;t want the \u003ccode\u003eworker.dev\u003c/code\u003e or preview URLs hanging out in the wild like forgotten socks behind the dryer. The config above makes sure they stay disabled - even across deployments.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cp\u003eThat\u0026rsquo;s it for the Worker setup. Simple, readable, and easier than assembling a trampoline - and safer, too.\u003c/p\u003e\n\u003ch3 id=\"proper-cicd-with-github-actions\" class=\"headerLink\"\u003e\n    \u003ca href=\"#proper-cicd-with-github-actions\" class=\"header-mark\"\u003e\u003c/a\u003eProper CI/CD with Github Actions\u003c/h3\u003e\u003cp\u003eI say \u0026ldquo;proper\u0026rdquo; CI/CD with all the love in the world for Cloudflare\u0026rsquo;s native setup, but decoupling build from deploy just gives you so much more control. Like finally getting a remote that works for all your devices.\u003c/p\u003e\n\u003ch4 id=\"defining-an-actions-file\" class=\"headerLink\"\u003e\n    \u003ca href=\"#defining-an-actions-file\" class=\"header-mark\"\u003e\u003c/a\u003eDefining an Actions File\u003c/h4\u003e\u003cp\u003eFrom the root of your repository, create a file located at \u003ccode\u003e.github/workflows/hugo.yml\u003c/code\u003e. Let\u0026rsquo;s walk through my \u003ccode\u003ehugo.yml\u003c/code\u003e file step by step we\u0026rsquo;re on the same page.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-closed show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e.github/workflows/hugo.yml\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# Sample workflow for building and deploying a Hugo site to Cloudflare Workers\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDeploy Hugo site to Pages\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# Runs on pushes targeting the default branch\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epush\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebranches\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;master\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# Allows you to run this workflow manually from the Actions tab\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eworkflow_dispatch\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"c\"\u003e# Default to bash\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003edefaults\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eshell\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebash\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ejobs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# Build job\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ebuild\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eruns-on\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eubuntu-latest\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eenv\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"nt\"\u003eHUGO_VERSION\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e0.148.2\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# NODE_VERSION: 22.15.1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eHugo setup\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"c\"\u003e# You may pin to the exact commit or the version.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"c\"\u003e# uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003epeaceiris/actions-hugo@v3.0.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# The Hugo version to download (if necessary) and use. Example: 0.58.2\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ehugo-version\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ env.HUGO_VERSION }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Download (if necessary) and use Hugo extended version. Example: true\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eextended\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"kc\"\u003etrue\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# - name: Setup Node.js environment\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e#   uses: actions/setup-node@v3.9.1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e#   with:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e#     node-version: ${{ env.NODE_VERSION }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eCheckout\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eactions/checkout@v4\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003esubmodules\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003erecursive\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# - name: Install Node.js dependencies\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e#   run: \u0026#34;[[ -f package-lock.json || -f npm-shrinkwrap.json ]] \u0026amp;\u0026amp; npm ci || true\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eBuild Hugo Site\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          hugo --minify\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eUpload a Build Artifact\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eactions/upload-artifact@v4.6.2\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Artifact name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eartifact\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# optional, default is artifact\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# A file, directory or wildcard pattern that describes what to upload\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003epath\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e            public\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e            ./wrangler.toml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# Deployment job\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edeploy\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eruns-on\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eubuntu-latest\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eneeds\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ebuild\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDownload a Build Artifact\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eactions/download-artifact@v5.0.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Name of the artifact to download. If unspecified, all artifacts for the run are downloaded.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eartifact\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDeploy to Cloudflare Workers with Wrangler\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"c\"\u003e# You may pin to the exact commit or the version.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"c\"\u003e# uses: cloudflare/wrangler-action@c25aadc9657b0cdc4786c04e59a6fe92765a783b\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003ecloudflare/wrangler-action@v3.1.0\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Your Cloudflare API Token\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eapiToken\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ secrets.CLOUDFLARE_API_TOKEN }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Your Cloudflare Account ID\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003eaccountId\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ secrets.CLOUDFLARE_ACCOUNT_ID }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# The version of Wrangler you\u0026#39;d like to use to deploy your Workers project\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ewranglerVersion\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"m\"\u003e4.28.0\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eI\u0026rsquo;ve added comments for each line within the file, but here\u0026rsquo;s a basic breakdown:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFirst we define the basics, the name, the deployment triggers (when committed to the master branch AND on a manual trigger), and defaulting to \u003ccode\u003eBash\u003c/code\u003e for any scripts.\u003c/li\u003e\n\u003cli\u003eI like to break things down into multiple jobs rather than just one, so we have a jobs array containing both a \u003ccode\u003ebuild\u003c/code\u003e and a \u003ccode\u003edeploy\u003c/code\u003e job.\u003c/li\u003e\n\u003cli\u003eInside of the \u003ccode\u003ebuild\u003c/code\u003e job, we first define a couple variables including the Hugo version to use. You\u0026rsquo;ll see that even though I didn\u0026rsquo;t need Node.JS to build this project, I do for other ones, so I left some lines here you can uncomment if you need them. For this \u003ccode\u003ebuild\u003c/code\u003e job:\n\u003cul\u003e\n\u003cli\u003eWe take advantage of one of the community actions to install and set up Hugo Extended.\u003c/li\u003e\n\u003cli\u003eWe checkout our code\u003c/li\u003e\n\u003cli\u003eWe run a build command\u003c/li\u003e\n\u003cli\u003eWe upload only the build artifacts we need to make them available on other jobs. In this case, we only need the \u003ccode\u003epublic\u003c/code\u003e folder that our site\u0026rsquo;s static files are built and moved into, and our \u003ccode\u003ewrangler.toml\u003c/code\u003e file for our Cloudflare Worker configuration.\n\u003cdiv class=\"details admonition tip open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eKeep artifacts small\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003ePro tip from experience - keep your artifacts small. Only pass what you need. Think of it like packing for a weekend trip - no need to bring 17 pairs of socks “just in case.”\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eInside of the \u003ccode\u003edeploy\u003c/code\u003e job:\n\u003cul\u003e\n\u003cli\u003eWe first download the artifact uploaded from the previous job containing all the files we need.\u003c/li\u003e\n\u003cli\u003eUse the official Cloudflare Worker action to deploy our site.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"details admonition note open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z\"/\u003e\u003c/svg\u003e\u003c/span\u003eKeeping secrets safe\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003e\u003cp\u003eI added the \u003ccode\u003eCLOUDFLARE_API_TOKEN\u003c/code\u003e and \u003ccode\u003eCLOUDFLARE_ACCOUNT_ID\u003c/code\u003e secrets referenced to Infisical so that I take advantage of my central secret repository and keep things in sync. You can read more about how to set that up in the article section linked below.\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"/2025/07/theengs-ci-cd/#infisical---third-party-secrets-manager\"\u003eAutomating Theengs Gateway with Github Action Runner\u003c/a\u003e\u003c/p\u003e\n\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cp\u003eYou can find instructions on how to get your Cloudflare Account ID from the \u003ca href=\"https://developers.cloudflare.com/fundamentals/account/find-account-and-zone-ids/#copy-your-account-id\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial Cloudflare Account ID Docs\u003c/a\u003e and you can follow the \u003ca href=\"https://developers.cloudflare.com/fundamentals/api/get-started/account-owned-tokens/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial Cloudflare Account API Token documentation\u003c/a\u003e to create your API Token. I left all the defaults the same (don\u0026rsquo;t be like me - you should probably give it more explicit control), and I gave it access to all my zones.\u003c/p\u003e\n\u003cp\u003eOnce you commit your action file, Github should automatically pick up the new workflow and kick off your new CI/CD pipeline! Check out the deployment logs under the \u003cstrong\u003eActions\u003c/strong\u003e tab to review the logs, check for errors, and fix any issues.\u003c/p\u003e\n\u003ch3 id=\"clean-up-after-yourself\" class=\"headerLink\"\u003e\n    \u003ca href=\"#clean-up-after-yourself\" class=\"header-mark\"\u003e\u003c/a\u003eClean Up After Yourself\u003c/h3\u003e\u003cp\u003eThe final step in the process is to do a little cleanup to your workers in Cloudflare Workers and Pages.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eRemove your custom domain from the old Pages project\u003c/li\u003e\n\u003cli\u003eAdd your custom domain to your shiny new Worker\u003c/li\u003e\n\u003cli\u003eConfirm DNS records are updated and pointing correctly\u003c/li\u003e\n\u003cli\u003eOnce happy, delete the old Pages project\u003c/li\u003e\n\u003cli\u003e(Optional) Rename your Worker project - just make sure to update the \u003cstrong\u003ename\u003c/strong\u003e property in \u003ccode\u003ewrangler.toml\u003c/code\u003e if you do\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"bonus-round-slack-notifications\" class=\"headerLink\"\u003e\n    \u003ca href=\"#bonus-round-slack-notifications\" class=\"header-mark\"\u003e\u003c/a\u003eBonus Round: Slack Notifications\u003c/h3\u003e\u003cp\u003eWant to know the build results without refreshing GitHub 12 times? Set up a Slack webhook! I won\u0026rsquo;t go into too much detail here, but I have a personal Slack workspace I set up to get notifications from various services. If you set up a custom Slack app with the correct permissions, scopes, and webhook settings, you can have your Github Action Workflow send the results of your build and deploy steps to Slack via webhook.\u003c/p\u003e\n\u003cp\u003eOnce you create your custom Slack app, add the following \u003cstrong\u003eBot Token Scopes\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003echannels:read\u003c/li\u003e\n\u003cli\u003echat:write\u003c/li\u003e\n\u003cli\u003echat:write:public\u003c/li\u003e\n\u003cli\u003eincoming-webhook\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eMake sure to activate your incoming webhook, install the app to your workspace, add the app to the channel you want to post to defined in the incoming webhook settings, update your \u003ccode\u003e.github/workflows/hugo.yml\u003c/code\u003e to include the additional \u003ccode\u003enotify\u003c/code\u003e job defined below, and you\u0026rsquo;ll have build and deploy results coming straight to your Slack workspace!\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e.github/workflows/hugo.yml\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nn\"\u003e...\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003enotify\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eruns-on\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eubuntu-latest\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"c\"\u003e# make sure this always runs even if the \u0026#34;needs\u0026#34; jobs failed or skipped\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eif\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ always() }}\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"c\"\u003e# needs both previous jobs\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eneeds\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"l\"\u003ebuild, deploy]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eSend to Slack\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"c\"\u003e# You may pin to the exact commit or the version.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"c\"\u003e# uses: slackapi/slack-github-action@91efab103c0de0a537f72a35f6b8cda0ee76bf0a\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eslackapi/slack-github-action@v2.1.1\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003ewith\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# A location for posting request payloads.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ewebhook\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003e${{ secrets.SLACK_WEBHOOK_URL }}\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"c\"\u003e# optional\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Option to use either an incoming webhook or webhook trigger.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003ewebhook-type\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eincoming-webhook\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"c\"\u003e# Attributes that create the content of the request using JSON or YAML.\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e          \u003c/span\u003e\u003cspan class=\"nt\"\u003epayload\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e            blocks:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e              - type: \u0026#34;section\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                text:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                  type: \u0026#34;mrkdwn\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                  text: \u0026#34;*GitHub Action results*: \\n*Workflow*: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} \\n*Commit*: ${{ github.event.pull_request.html_url || github.event.head_commit.url }}\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e              - type: \u0026#34;section\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                text:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                  type: \u0026#34;mrkdwn\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                  text: \u0026#34;Build result: *${{ needs.build.result }}*\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e              - type: \u0026#34;section\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                text:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                  type: \u0026#34;mrkdwn\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                  text: \u0026#34;Deploy result: *${{ needs.deploy.result }}*\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                \n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e                    \u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eThis \u003ccode\u003enotify\u003c/code\u003e job also takes advantage of the webhook URL including a token that is stored in an Infisical secret and synced with Github.\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eMy message is simple - just enough info to celebrate or investigate. It contains a link to the workflow result, the commit that kicked it off, and results for both the build and deploy jobs. For fancier layouts, check out \u003ca href=\"https://api.slack.com/block-kit/building\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSlack\u0026rsquo;s Block Kit Builder\u003c/a\u003e.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eBonus dad joke: Why did the CI/CD pipeline get promoted? It always delivered \u0026#x1f602;\u003c/p\u003e\n\u003c/blockquote\u003e\u003ch3 id=\"migration-complete\" class=\"headerLink\"\u003e\n    \u003ca href=\"#migration-complete\" class=\"header-mark\"\u003e\u003c/a\u003eMigration Complete\u003c/h3\u003e\u003cp\u003eWe\u0026rsquo;ve got a flexible setup, versioned pipelines, secure secrets, and a talking Slack bot. That\u0026rsquo;s a good day\u0026rsquo;s work. Time to kick back, sip some coffee, and pretend you didn\u0026rsquo;t just spend three hours picking the perfect Slack emoji.\u003c/p\u003e\n\u003cp\u003eShare this article if it was helpful and let me know if you have any issues, questions, or comments below. If you end up building a slick Slack integration, I\u0026rsquo;d love to see it!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Racks Not Required: A Dad’s Guide to Budget Home Labs",
        "date_published" : "2025-07-30T22:35:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/07/my-home-lab-setup/",
        "url" : "https://dadstechlab.com/2025/07/my-home-lab-setup/",
        "summary": "Back in the pre-dad days - when my biggest responsibility was remembering my Steam password - I had time to tinker with all kinds of tech. Phones got custom firmware, speakers played synchronized music in every room, and I even built a bluetooth garage door opener. These days? I’m lucky if I can open the fridge without an audience.\nStill, the itch to tinker never left. Enter: the home lab - a middle-aged man’s playground, minus the Legos (mostly). I always want to keep developing skills and learning when I can. Setting up a simple home lab has helped do just that.\n",
        "content_html" : "\u003cp\u003eBack in the pre-dad days - when my biggest responsibility was remembering my Steam password - I had time to tinker with all kinds of tech. Phones got custom firmware, speakers played synchronized music in every room, and I even built a bluetooth garage door opener. These days? I’m lucky if I can open the fridge without an audience.\u003c/p\u003e\n\u003cp\u003eStill, the itch to tinker never left. Enter: the home lab - a middle-aged man’s playground, minus the Legos (mostly). I always want to keep developing skills and learning when I can. Setting up a simple home lab has helped do just that.\u003c/p\u003e\n\u003cp\u003eIt\u0026rsquo;s nothing fancy - it\u0026rsquo;s a custom router, simple thin-client PC with some extra memory, a few Raspberry Pis, a NAS for storage and backup, and some networking equipment. Trust me I\u0026rsquo;d love to have a server rack and get some better equipment, but what I\u0026rsquo;ve got has been perfect for what I\u0026rsquo;m doing.\u003c/p\u003e\n\u003cp\u003eHere’s a quick overview of the gear I’m using before I dive into my network architecture and services in future posts.\u003c/p\u003e\n\u003ch2 id=\"router\" class=\"headerLink\"\u003e\n    \u003ca href=\"#router\" class=\"header-mark\"\u003e\u003c/a\u003eRouter\u003c/h2\u003e\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/my-home-lab-setup/router.jpg\" title=\"\" data-thumbnail=\"/2025/07/my-home-lab-setup/router.jpg\" data-sub-html=\"\u003ch2\u003epfSense Router\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/my-home-lab-setup/router.jpg' srcset=\"/2025/07/my-home-lab-setup/router_hu_ec0ae5c3a96864c3.webp 800w, /2025/07/my-home-lab-setup/router_hu_b0366cc3ed188a79.webp 1200w, /2025/07/my-home-lab-setup/router_hu_2976ba3821454056.webp 1600w\"   height=\"3072\" width=\"4080\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003epfSense Router\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eLet’s start with the heart of any modern home—no, not the coffee maker—the router. Mine’s a modest pfSense box that routes packets better than I route family road trips.\u003c/p\u003e\n\u003cp\u003eI currently have fiber internet giving me great speeds. Probably overkill for most of our needs, but it comes in handy working from home and for streaming all the Cocomelon and Bluey episodes. Right behind the fiber modem is a Mini Itx Linux Q330G4 running pfSense. Here\u0026rsquo;s the spec breakdown:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIntel Core i3-4010U CPU @ 1.70GHz\u003c/li\u003e\n\u003cli\u003e8GB DDR3 RAM\u003c/li\u003e\n\u003cli\u003e4x Gigabit LAN ports\u003c/li\u003e\n\u003cli\u003e16GB SSD\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI bought it in 2021 and has very basic specs, but it\u0026rsquo;s built for being used as a custom router and has worked great for us over the years. I went through several routers before I wanted to create VLANs to separate different equipment in our house. I stumbled upon \u003ca href=\"https://www.pfsense.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003epfSense\u003c/a\u003e which gave me full control over my network. I\u0026rsquo;m able to create multiple VLANs, set up all of the networking rules, isolate certain networks, assign static IPs, even run some additional packages like Tailscale or a reverse proxy. It\u0026rsquo;s been a good learning experience, but I think I\u0026rsquo;ll be switching to \u003ca href=\"https://opnsense.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eOpnSense\u003c/a\u003e the next time I roll a new router.\u003c/p\u003e\n\u003ch2 id=\"managed-switch-and-aps\" class=\"headerLink\"\u003e\n    \u003ca href=\"#managed-switch-and-aps\" class=\"header-mark\"\u003e\u003c/a\u003eManaged Switch and APs\u003c/h2\u003e\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/my-home-lab-setup/switch.jpg\" title=\"\" data-thumbnail=\"/2025/07/my-home-lab-setup/switch.jpg\" data-sub-html=\"\u003ch2\u003eUnifi Switch\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/my-home-lab-setup/switch.jpg' srcset=\"/2025/07/my-home-lab-setup/switch_hu_aaa50406b8b7f745.webp 800w, /2025/07/my-home-lab-setup/switch_hu_8e552e35e6a2c868.webp 1200w, /2025/07/my-home-lab-setup/switch_hu_59d3fa1bea42e8fc.webp 1600w\"   height=\"4080\" width=\"3072\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eUnifi Switch\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eRecently I replaced all of my TP-Link hardware with Unifi and it has been a game changer. I have a managed switch, the \u003ca href=\"https://a.co/d/aW5u0LE\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUbiquiti Switch Lite 16 PoE\u003c/a\u003e, which splits traffic between a few devices in my office and an access point. I self-host \u003ca href=\"https://ui.com/download/releases/network-server\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUnifi Network Server\u003c/a\u003e which helps me understand and manage all traffic across my network. It was important to have this be the very first device after my router so I could have as much insight into my network as possible.\u003c/p\u003e\n\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/my-home-lab-setup/access-point.jpg\" title=\"\" data-thumbnail=\"/2025/07/my-home-lab-setup/access-point.jpg\" data-sub-html=\"\u003ch2\u003eUnifi 7 Pro Access Point\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/my-home-lab-setup/access-point.jpg' srcset=\"/2025/07/my-home-lab-setup/access-point_hu_f52e30d4eff0a7b3.webp 800w, /2025/07/my-home-lab-setup/access-point_hu_43eebbeec4befb6b.webp 1200w, /2025/07/my-home-lab-setup/access-point_hu_9b51567c17d51d64.webp 1600w\"   height=\"4080\" width=\"3072\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eUnifi 7 Pro Access Point\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eUnfortunately my house is not hard wired. I purchased two \u003ca href=\"https://a.co/d/dMjz9TJ\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUbiquiti Networks UniFi 7 Pro Access Points\u003c/a\u003e - one that is hard wired in my office straight off the switch, and one running in wireless mesh mode downstairs. These provide great coverage, and through the Unifi Network Server I\u0026rsquo;m able to define multiple wifi networks whose traffic is tagged with particular VLAN ids I created in my pfSense router.\u003c/p\u003e\n\u003ch2 id=\"nas---backup-and-storage\" class=\"headerLink\"\u003e\n    \u003ca href=\"#nas---backup-and-storage\" class=\"header-mark\"\u003e\u003c/a\u003eNAS - Backup and Storage\u003c/h2\u003e\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/my-home-lab-setup/nas.jpg\" title=\"\" data-thumbnail=\"/2025/07/my-home-lab-setup/nas.jpg\" data-sub-html=\"\u003ch2\u003eSynology DS220\u0026#43; NAS\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/my-home-lab-setup/nas.jpg' srcset=\"/2025/07/my-home-lab-setup/nas_hu_47b959bb2c7b1d4.webp 800w, /2025/07/my-home-lab-setup/nas_hu_d72bc2a559ec1c51.webp 1200w, /2025/07/my-home-lab-setup/nas_hu_58fd8c794b1203fc.webp 1600w\"   height=\"4080\" width=\"3072\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eSynology DS220+ NAS\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eI have a \u003ca href=\"https://a.co/d/hNTMmFk\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSynology 2 bay NAS DiskStation DS220+\u003c/a\u003e with two \u003ca href=\"https://a.co/d/6NzHMiy\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSeagate IronWolf 8Tb HDDs\u003c/a\u003e. It\u0026rsquo;s set up in SHR, which stands for \u0026ldquo;Save Him from RAID.\u0026rdquo; Just kidding - SHR stands for Synology Hybrid RAID. SHR is just an automated RAID management system that takes care of configuration for me so I don\u0026rsquo;t have to worry about it. Making my life easier \u0026#x1f603;\u003c/p\u003e\n\u003cp\u003eThis NAS has two GbE ports, which unfortunately I\u0026rsquo;m not fully taking advantage of at this time. I also do not run a crazy amount of things on my NAS, I primary just use it for daily backups, storing project files, and occasionally wondering why I saved 12 copies of the same config file. The NAS can run a lot of extra software and services, but I preferred to have those run on my Proxmox machine instead of on the NAS for decoupling, ease of migration/trying other services, and because Proxmox makes it very easy to get things up and running.\u003c/p\u003e\n\u003ch2 id=\"primary-home-lab-pc\" class=\"headerLink\"\u003e\n    \u003ca href=\"#primary-home-lab-pc\" class=\"header-mark\"\u003e\u003c/a\u003ePrimary Home Lab PC\u003c/h2\u003e\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/my-home-lab-setup/mini-pc.jpg\" title=\"\" data-thumbnail=\"/2025/07/my-home-lab-setup/mini-pc.jpg\" data-sub-html=\"\u003ch2\u003eMini PC running Proxmox\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/my-home-lab-setup/mini-pc.jpg' srcset=\"/2025/07/my-home-lab-setup/mini-pc_hu_ff01ed73ff0890b7.webp 800w, /2025/07/my-home-lab-setup/mini-pc_hu_2f665b0bee527001.webp 1200w, /2025/07/my-home-lab-setup/mini-pc_hu_41e12f91264d83a4.webp 1600w\"   height=\"4080\" width=\"3072\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eMini PC running Proxmox\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eBehold the most exciting unexciting machine in my house. It’s a \u003ca href=\"https://a.co/d/4JSUQfo\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDell Optiplex 7040m\u003c/a\u003e - a tiny box with the heart of a champion and the size of a sandwich. It\u0026rsquo;s not very exciting, but this is the main attraction, both for how simple the hardware is and for what it runs. I upgraded it with:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://a.co/d/f1gyIrS\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e32GB KIT(2x16GB) DDR4 2133MHz\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eI had a spare 128GB SSD laying around I used for the OS and some storage\u003c/li\u003e\n\u003cli\u003eA \u003ca href=\"https://a.co/d/aYxrWOW\" target=\"_blank\" rel=\"noopener noreferrer\"\u003e1TB Western Digital WD Blue SA510 SATA III 6 Gb/s SSD\u003c/a\u003e for secondary storage\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eI installed \u003ca href=\"https://www.proxmox.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eProxmox\u003c/a\u003e and this thing runs like a champ. It\u0026rsquo;s low power, quiet, currently runs 6 LXCs and 4 Ubuntu Server VMs, and 1 Home Assistant VM. I\u0026rsquo;m still only using 24 out of the 32GB of memory and have plenty of storage left. I added my Synology NAS as NFS storage and use that for daily backups. I\u0026rsquo;ll talk about the services I\u0026rsquo;m running in another article coming soon, but I cannot emphasize how much this one little box does for me and how flexible it is running Proxmox. It\u0026rsquo;s super simple to stand up a new VM or container, assign a VLAN tag to it, assign storage, and have it accessible within minutes. It runs a daily backup of all containers and VMs so I have peace of mind and can roll things back if, I mean when, I screw things up inside one of those resources.\u003c/p\u003e\n\u003ch2 id=\"raspberry-pis\" class=\"headerLink\"\u003e\n    \u003ca href=\"#raspberry-pis\" class=\"header-mark\"\u003e\u003c/a\u003eRaspberry Pis\u003c/h2\u003e\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/my-home-lab-setup/pi.jpg\" title=\"\" data-thumbnail=\"/2025/07/my-home-lab-setup/pi.jpg\" data-sub-html=\"\u003ch2\u003eRaspberry Pi 4B\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/my-home-lab-setup/pi.jpg' srcset=\"/2025/07/my-home-lab-setup/pi_hu_df66a5184a38472f.webp 800w, /2025/07/my-home-lab-setup/pi_hu_5f32e05cc57362d6.webp 1200w, /2025/07/my-home-lab-setup/pi_hu_8090d4e1151ff8c8.webp 1600w\"   height=\"4080\" width=\"3072\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eRaspberry Pi 4B\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eI\u0026rsquo;ve been a fanboy of Raspberry Pis every since they debuted years ago. Some may say it\u0026rsquo;s not pretty, but I think the little machines are fantastic supplementary machines. I\u0026rsquo;ve used my Pis for gaming systems, for learning purposes (I built a Kubernetes cluster at one point), for trying new services, and to host some important services like \u003ca href=\"https://tailscale.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTailscale\u003c/a\u003e so I can access things in my network even when other hardware is down. I do not have a Pi 5 yet, however I have a few Pi 4Bs, and I have to recommend purchasing a kit that includes a power supply, SD card, heat sinks, a fan, and a case. I purchased the \u003ca href=\"https://a.co/d/5TELMjv\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eCanaKit Raspberry Pi 4 8GB Starter Kit - 8GB RAM\u003c/a\u003e which comes with everything you\u0026rsquo;ll need to get started and keep your Pi running in good condition.\u003c/p\u003e\n\u003ch2 id=\"conclusion-nothing-fancy\" class=\"headerLink\"\u003e\n    \u003ca href=\"#conclusion-nothing-fancy\" class=\"header-mark\"\u003e\u003c/a\u003eConclusion: Nothing Fancy\u003c/h2\u003e\u003cp\u003eSo there you have it - my humble home lab. Not fancy, not flashy, but it gets the job done (unlike my attempts at building Ikea furniture without swearing). You don’t need server racks or liquid cooling - just some curiosity, a few budget-friendly parts, and a willingness to admit you totally messed up that last VLAN config.\u003c/p\u003e\n\u003cp\u003eI wouldn\u0026rsquo;t call it a home lab, but I started self-hosting websites and opening firewall ports on an ancient PC and basic D-Link router years ago. I\u0026rsquo;m really not too far from that now. I\u0026rsquo;ve upgraded some things over the years as with any technology, but you don\u0026rsquo;t have to spend a fortune to have your own home lab. Be smart about what you purchase, make sure it is flexible but powerful enough to last you at least a few years, and the most important thing is to just get it up and running so you can have fun with it.\u003c/p\u003e\n\u003cp\u003eIn my next few posts I\u0026rsquo;ll fill you in on all the services I\u0026rsquo;m running that help me keep my network secure, provide tools and useful services I expose to the internet, and some other services that help me every day that I only provide internal access to.\u003c/p\u003e\n\u003cp\u003eLet me know what you think of my current set up and what you\u0026rsquo;re running in your own home lab! I’d love to hear how others are tackling the same problems. It will also give me ideas for a new setup in our future home!\u003c/p\u003e\n",
        "language": "en"
    }
    {
        "title" : "Automating Theengs Gateway with Github Action Runner",
        "date_published" : "2025-07-06T22:35:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/07/theengs-ci-cd/",
        "url" : "https://dadstechlab.com/2025/07/theengs-ci-cd/",
        "summary": "One thing that I\u0026rsquo;ve learned over the years is how valuable source control can be. Especially when learning something new, I wind up changing code or tweaking configurations until I get a better understanding how things work and to get things working how I want\u0026hellip;but changes don\u0026rsquo;t always work out. Instead of undoing my changes manually, I love being able to just make commits and being able to roll back if needed, or even just comparing my changes.\n",
        "content_html" : "\u003cp\u003eOne thing that I\u0026rsquo;ve learned over the years is how valuable source control can be. Especially when learning something new, I wind up changing code or tweaking configurations until I get a better understanding how things work and to get things working how I want\u0026hellip;but changes don\u0026rsquo;t always work out. Instead of undoing my changes manually, I love being able to just make commits and being able to roll back if needed, or even just comparing my changes.\u003c/p\u003e\n\u003cp\u003eTheengs Gateway is pretty cool so far from my experience, however I wish there was more documentation around all the configuration settings. Like I mentioned in my previous \n\n\n\n\u003ca href=\"/2025/06/theengs-to-try-out/\"\u003eTheengs to Try Out - BLE Sensors, Theengs Gateway, and Home Assistant\u003c/a\u003e\n post, I flooded my Home Assistant instance with too many devices. I live in a neighborhood where houses are fairly close together, and I even picked up devices a few doors down and across the street. I knew immediately I had to stop it from getting worse and figure out how to whitelist devices, so that\u0026rsquo;s what I did. But I wanted a history of what I was doing. I knew then I needed to put the configuration in a repository, deploy the changes, and restart the service once I was done. That also meant I shouldn\u0026rsquo;t put sensitive information in my repo as well, such as user names and passwords. In this article, we\u0026rsquo;ll walk through:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInstalling Github Action Runner on the Raspberry Pi\u003c/li\u003e\n\u003cli\u003eCreating a repo for your config without storing sensitive information\u003c/li\u003e\n\u003cli\u003eCreating and using secrets for said sensitive information\u003c/li\u003e\n\u003cli\u003eCreating a deployment pipeline using Github Actions\u003c/li\u003e\n\u003cli\u003eAutomating consuming configuration changes when pushed to your repository\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"self-host-github-actions-on-the-pi\" class=\"headerLink\"\u003e\n    \u003ca href=\"#self-host-github-actions-on-the-pi\" class=\"header-mark\"\u003e\u003c/a\u003eSelf-Host GitHub Actions on the Pi\u003c/h2\u003e\u003cp\u003eIn order to deploy the Theengs Gateway configuration file to my Raspberry Pi, I need access to my IoT VLAN inside of my network to. I also need to be able to restart the service. The easiest solution to me was to self host the action runner on the same Raspberry Pi. By doing this I can run any commands that I wish, and can even deploy to other devices on my network that it would have access.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eHere\u0026rsquo;s the link to the official self-hosting docs from Github: \u003ca href=\"https://docs.github.com/en/actions/how-tos/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAdding Self Hosted Runners\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eI\u0026rsquo;m not going into a step by step here, because Github does a great job giving step by steps in the link above, and it could change by the time you\u0026rsquo;re reading this. Github also gives you a specific token in the instructions on their site that you have to use. Here\u0026rsquo;s a quick breakdown of what to do for a Linux installation like I did on the Pi:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eNavigate to the \u003ccode\u003eSettings\u003c/code\u003e area of your repository\u003c/li\u003e\n\u003cli\u003eIn the left sidebar, expand the \u003ccode\u003eActions\u003c/code\u003e menu item and click on \u003ccode\u003eRunners\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eClick on the \u003ccode\u003eNew self-hosted runner\u003c/code\u003e button\u003c/li\u003e\n\u003cli\u003eSelect your OS and architecture, for me with the Raspberry Pi 4 I selected \u003ccode\u003eARM64\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eMake a directory from inside of your home folder for the action runner and navigate into it.\u003c/li\u003e\n\u003cli\u003eDownload the file, and validate the hash if you want.\u003c/li\u003e\n\u003cli\u003eExtract the installer from the downloaded archive file.\u003c/li\u003e\n\u003cli\u003eCreate the runner and start the configuration experience with the token that Github gives you in their instructions.\u003c/li\u003e\n\u003cli\u003eFinally, run the action runner!\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"details admonition tip open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 352 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M96.06 454.35c.01 6.29 1.87 12.45 5.36 17.69l17.09 25.69a31.99 31.99 0 0 0 26.64 14.28h61.71a31.99 31.99 0 0 0 26.64-14.28l17.09-25.69a31.989 31.989 0 0 0 5.36-17.69l.04-38.35H96.01l.05 38.35zM0 176c0 44.37 16.45 84.85 43.56 115.78 16.52 18.85 42.36 58.23 52.21 91.45.04.26.07.52.11.78h160.24c.04-.26.07-.51.11-.78 9.85-33.22 35.69-72.6 52.21-91.45C335.55 260.85 352 220.37 352 176 352 78.61 272.91-.3 175.45 0 73.44.31 0 82.97 0 176zm176-80c-44.11 0-80 35.89-80 80 0 8.84-7.16 16-16 16s-16-7.16-16-16c0-61.76 50.24-112 112-112 8.84 0 16 7.16 16 16s-7.16 16-16 16z\"/\u003e\u003c/svg\u003e\u003c/span\u003eRun as a Background Service\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003eIf you\u0026rsquo;re like me, you\u0026rsquo;ll want to run this as a background service so you don\u0026rsquo;t have to worry about running it every time you want to use it. Luckily \u003ca href=\"https://docs.github.com/en/actions/how-tos/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGithub has a great tutorial\u003c/a\u003e as well for Linux systems and they have helper scripts to make things easy peasy.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003ch2 id=\"automate-deployments-with-github-actions\" class=\"headerLink\"\u003e\n    \u003ca href=\"#automate-deployments-with-github-actions\" class=\"header-mark\"\u003e\u003c/a\u003eAutomate Deployments with GitHub Actions\u003c/h2\u003e\u003cp\u003eNow to take advantage of what we\u0026rsquo;ve set up. We\u0026rsquo;re going to create a new repository to host the configuration file for Theengs Gateway. But we need to keep security in mind, take advantage of using Github secrets in a deployment pipeline, and clean up the configuration file.\u003c/p\u003e\n\u003ch3 id=\"shhh---pipeline-secrets\" class=\"headerLink\"\u003e\n    \u003ca href=\"#shhh---pipeline-secrets\" class=\"header-mark\"\u003e\u003c/a\u003eShhh - Pipeline Secrets\u003c/h3\u003e\u003cp\u003eWe need to remove the sensitive information from the configuration file we\u0026rsquo;re storing in the repository. Instead, we\u0026rsquo;ll store them as secrets that our deployment pipeline can use. We have a few options - either use a third party and integrate it with Github, or just use Github. I prefer the former as I can have a central place to manage all of my secrets and make them more reusable, but either way you will end up with secrets defined in Github that are available during the deployment pipeline. Let\u0026rsquo;s go ahead and define the secret variables names, and it will be up to you whether you want to define them in a third party like Infisical or in Github. I\u0026rsquo;d recommend defining them as repository secrets, unless you want to use them in other repositories after this.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eHA_MQTT_HOST\u003c/code\u003e - This is the IP address of your MQTT broker\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eHA_MQTT_USERNAME\u003c/code\u003e - This is the username to authenticate with the MQTT broker\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eHA_MQTT_PASSWORD\u003c/code\u003e - This is the password to authenticate with the MQTT broker\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eTake the values from your configuration that match those descriptions and keep them handy. Next, we\u0026rsquo;ll add them as secrets to use later on. I won\u0026rsquo;t provide step-by-step documentation, but I do have docs linked for creating secrets in both Infisical and Github.\u003c/p\u003e\n\u003ch4 id=\"infisical---third-party-secrets-manager\" class=\"headerLink\"\u003e\n    \u003ca href=\"#infisical---third-party-secrets-manager\" class=\"header-mark\"\u003e\u003c/a\u003eInfisical - Third Party Secrets Manager\u003c/h4\u003e\u003cp\u003eI liked the idea of using a third party service to manage my secrets. This way, if I decide to use a different CI/CD service, I don\u0026rsquo;t have to move secrets. There is also one place to manage all of my sensitive information.\u003c/p\u003e\n\u003cp\u003eI won\u0026rsquo;t go into too much detail as it is an optional step in this process, but the service I decided to use was \u003ca href=\"https://infisical.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInfisical\u003c/a\u003e. I was easily able to sign up, add some secrets and integrate it with Github. You can even self-host it! However, I decided to use their free-tier service.\u003c/p\u003e\n\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/theengs-ci-cd/infisical_secrets_home.png\" title=\"\" data-thumbnail=\"/2025/07/theengs-ci-cd/infisical_secrets_home.png\" data-sub-html=\"\u003ch2\u003eInfisical Secrets Home\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/theengs-ci-cd/infisical_secrets_home.png' srcset=\"/2025/07/theengs-ci-cd/infisical_secrets_home_hu_49271c95168d5a5.webp 800w, /2025/07/theengs-ci-cd/infisical_secrets_home_hu_15b7fd58282a0502.webp 1200w, /2025/07/theengs-ci-cd/infisical_secrets_home_hu_4ab663a409c79252.webp 1600w\"   height=\"947\" width=\"1920\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eInfisical Secrets Home\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eWhat Infisical does, at least with Github in my experience so far, is that once you \u003ca href=\"https://infisical.com/docs/integrations/cicd/githubactions\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eset up a Github integration\u003c/a\u003e, is that it will sync the secrets entered in Infisical with those in Github. It manages them for you, so don\u0026rsquo;t change things inside of Github itself moving forward, only manage your secrets inside of Infisical. It even has versioning and point-in-time recovery. Pretty cool stuff.\u003c/p\u003e\n\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/theengs-ci-cd/infisical_integrations_github_secrets-sync.png\" title=\"\" data-thumbnail=\"/2025/07/theengs-ci-cd/infisical_integrations_github_secrets-sync.png\" data-sub-html=\"\u003ch2\u003eInfisical Github Integration\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/theengs-ci-cd/infisical_integrations_github_secrets-sync.png' srcset=\"/2025/07/theengs-ci-cd/infisical_integrations_github_secrets-sync_hu_9f86fa23856704e8.webp 800w, /2025/07/theengs-ci-cd/infisical_integrations_github_secrets-sync_hu_e91cbd4467ef6cec.webp 1200w, /2025/07/theengs-ci-cd/infisical_integrations_github_secrets-sync_hu_e783e2213ea71ea2.webp 1600w\"   height=\"947\" width=\"1920\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eInfisical Github Integration\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eThis makes managing secrets in one spot very handy, and you don\u0026rsquo;t have to change how you use those secrets with Github Actions.\u003c/p\u003e\n\u003cp\u003eCreate your secrets in Infisical using \u003ca href=\"https://infisical.com/docs/documentation/platform/project\" target=\"_blank\" rel=\"noopener noreferrer\"\u003etheir official documentation\u003c/a\u003e, using the names we defined earlier with the corresponding values from your Theengs Gateway configuration file. We\u0026rsquo;ll remove the value and replace them with placeholders soon.\u003c/p\u003e\n\u003ch4 id=\"github-repository-secrets\" class=\"headerLink\"\u003e\n    \u003ca href=\"#github-repository-secrets\" class=\"header-mark\"\u003e\u003c/a\u003eGithub Repository Secrets\u003c/h4\u003e\u003cp\u003eGithub has \u003ca href=\"https://docs.github.com/en/actions/how-tos/security-for-github-actions/security-guides/using-secrets-in-github-actions#creating-secrets-for-a-repository\" target=\"_blank\" rel=\"noopener noreferrer\"\u003egreat documentation\u003c/a\u003e on how to set up secrets at different levels, including the repository level linked. My suggestion is to follow that documentation, adding the secrets we named earlier with the corresponding values from your Theengs Gateway configuration file. We will update the file with placeholder strings in a few steps.\u003c/p\u003e\n\u003ch4 id=\"quick-comparison\" class=\"headerLink\"\u003e\n    \u003ca href=\"#quick-comparison\" class=\"header-mark\"\u003e\u003c/a\u003eQuick Comparison\u003c/h4\u003e\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth\u003eOption\u003c/th\u003e\n          \u003cth\u003ePros\u003c/th\u003e\n          \u003cth\u003eCons\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eInfisical\u003c/td\u003e\n          \u003ctd\u003eCentralized secrets, multi-repo support\u003c/td\u003e\n          \u003ctd\u003eExtra setup, potential cost, but the free version worked well for this\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd\u003eGitHub\u003c/td\u003e\n          \u003ctd\u003eBuilt-in, easy for single repo\u003c/td\u003e\n          \u003ctd\u003eGitHub-specific, less portable\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id=\"creating-your-repository-and-github-action-for-deploying\" class=\"headerLink\"\u003e\n    \u003ca href=\"#creating-your-repository-and-github-action-for-deploying\" class=\"header-mark\"\u003e\u003c/a\u003eCreating Your Repository and Github Action for Deploying\u003c/h3\u003e\u003cp\u003eBefore we can create anything for deploying, we first have to create a repository for storing your configuration. Let\u0026rsquo;s create a directory, copy your configuration file into it, swap out the sensitive info with placeholders for secrets, and make our first commit. I\u0026rsquo;ll be doing this from my WSL installation since it doesn\u0026rsquo;t have to live on the Raspberry Pi itself, so your experience may slightly differ.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eI like creating an empty repository in Github first, cloning it locally, and then adding content for my first commit. Clone your empty repository locally after creating it. Here was the command that I ran:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/theigmo87/theengs-gateway.git\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003col start=\"2\"\u003e\n\u003cli\u003eOpen your repository in VS Code\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e theengs-gateway\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecode .\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003col start=\"3\"\u003e\n\u003cli\u003eCopy your config file to your repository. I have SSH set up between my WSL installation and my Raspberry Pi, so it was simple enough to copy it via SCP. Update the following command by substituting out your user name, ip address, and location to the configuration file if it is different than mine. I also renamed the file so I knew it was a template. Run the command from the repository directory:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-15\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003escp \u0026lt;user-on-remote-machine\u0026gt;@\u0026lt;remote-machine-ip\u0026gt;:/home/\u0026lt;user-on-remote-machine\u0026gt;/theengsgw.conf.template .\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003col start=\"4\"\u003e\n\u003cli\u003eRemove your sensitive information. I removed my MQTT user, MQTT password, and MQTT ip address. Replace them with a placeholder that we\u0026rsquo;ll replace with the secret value in a script during our deployment. I went with the format \u003ccode\u003e{{SECRET_NAME}}\u003c/code\u003e so that it was easy to remember and it wouldn\u0026rsquo;t clash with other regular string values. This was the resulting configuration file, omitting my whitelisted devices\u0026rsquo; MAC addresses and the \u003ccode\u003egateway_id\u003c/code\u003e because I used my MAC address for my Pi.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003etheengsgw.conf.template\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-16\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;adapter\u0026#34;: \u0026#34;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;bindkeys\u0026#34;: {},\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;blacklist\u0026#34;: [],\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ble\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ble_scan_time\u0026#34;: 7,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ble_time_between_scans\u0026#34;: 5,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ca_certs\u0026#34;: null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery_device_name\u0026#34;: \u0026#34;TheengsGateway\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery_filter\u0026#34;: [],\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery_topic\u0026#34;: \u0026#34;homeassistant\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;enable_multi_gtw_sync\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;enable_tls\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;enable_websocket\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;gateway_id\u0026#34;: \u0026#34;\u0026lt;gateway_id\u0026gt;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;general_presence\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;host\u0026#34;: \u0026#34;{{HA_MQTT_HOST}}\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;identities\u0026#34;: {},\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ignore_wblist\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;log_level\u0026#34;: \u0026#34;INFO\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;lwt_topic\u0026#34;: \u0026#34;home/TheengsGateway/LWT\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;pass\u0026#34;: \u0026#34;{{HA_MQTT_PASSWORD}}\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;port\u0026#34;: 1883,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;presence\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;presence_topic\u0026#34;: \u0026#34;home/TheengsGateway/presence\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;publish_advdata\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;publish_all\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;publish_topic\u0026#34;: \u0026#34;home/TheengsGateway/BTtoMQTT\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;scanning_mode\u0026#34;: \u0026#34;active\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;subscribe_topic\u0026#34;: \u0026#34;home/+/BTtoMQTT/undecoded\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;time_format\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;time_sync\u0026#34;: [],\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;tls_insecure\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;tracker_timeout\u0026#34;: 120,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;trackersync_topic\u0026#34;: \u0026#34;home/internal/trackersync\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;user\u0026#34;: \u0026#34;{{HA_MQTT_USERNAME}}\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;whitelist\u0026#34;: [\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e      \u0026#34;\u0026lt;device-bluetooth-MAC-address\u0026gt;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ]\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can see I used the placeholders \u003ccode\u003e{{HA_MQTT_USERNAME}}\u003c/code\u003e, \u003ccode\u003e{{HA_MQTT_PASSWORD}}\u003c/code\u003e, and \u003ccode\u003e{{HA_MQTT_HOST}}\u003c/code\u003e. Like I just mentioned, we\u0026rsquo;ll use these values for string replacements in our deployment script.\u003c/p\u003e\n\u003cp\u003eMake any other adjustments or remove any other values you want to manage externally, save the file, and commit and push the changes.\u003c/p\u003e\n\u003col start=\"5\"\u003e\n\u003cli\u003eCreate a directory for your Github action by running the following command from the root of your repository:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-17\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir .github \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e mkdir .github/workflows\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003col start=\"6\"\u003e\n\u003cli\u003eAdd the following file in the \u003ccode\u003e.github/workflows\u003c/code\u003e directory you just created:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e.github/workflows/deploy-config-changes.yml\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-18\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eDeploy Config and Restart\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003eon\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"c\"\u003e# Triggers the workflow on push or pull request events but only for the \u0026#34;master\u0026#34; branch\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003epush\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003ebranches\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;master\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003ejobs\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003edeploy-config\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"c\"\u003e# Run on the self-hosted action runner installed on the Raspberry Pi running Theengs Gateway\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eruns-on\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eself-hosted\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003esteps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eCheckout code\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003euses\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eactions/checkout@v3\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e\u003cspan class=\"c\"\u003e# This step uses the secret placeholders and outputs a configuration file with the correct file name\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eReplace placeholders with secrets\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          sed -e \u0026#34;s|{{HA_MQTT_HOST}}|${{ secrets.HA_MQTT_HOST }}|g\u0026#34; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e              -e \u0026#34;s|{{HA_MQTT_PASSWORD}}|${{ secrets.HA_MQTT_PASSWORD }}|g\u0026#34; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e              -e \u0026#34;s|{{HA_MQTT_USERNAME}}|${{ secrets.HA_MQTT_USERNAME }}|g\u0026#34; \\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e              theengsgw.conf.template \u0026gt; theengsgw.conf\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eMove config to target directory\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          sudo mv theengsgw.conf /home/\u0026lt;your-username\u0026gt;/theengsgw.conf\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e      \u003c/span\u003e- \u003cspan class=\"nt\"\u003ename\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"l\"\u003eRestart TheengsGateway service\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e        \u003c/span\u003e\u003cspan class=\"nt\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e|\u003c/span\u003e\u003cspan class=\"sd\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"sd\"\u003e          sudo systemctl restart TheengsGateway.service\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow a step-by-step breakdown of what\u0026rsquo;s going on in our Action file:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFirst we have the pipeline name.\u003c/li\u003e\n\u003cli\u003eSecond, we specify that we want this action to trigger on any changes pushed to the \u003ccode\u003emaster\u003c/code\u003e branch.\u003c/li\u003e\n\u003cli\u003eWe then define the \u003ccode\u003edeploy-config\u003c/code\u003e job.\u003c/li\u003e\n\u003cli\u003eWe specify it should run on the self-hosted action runner we have running on our Raspberry Pi that has Theengs Gateway installed.\u003c/li\u003e\n\u003cli\u003eThe first step of the job is to check out the code.\u003c/li\u003e\n\u003cli\u003eWe have a script that perform a string replacement, replacing the placeholders we inserted into the template file with secret values for our repository, and finally outputting the changes to a new file, \u003ccode\u003etheengsgw.conf\u003c/code\u003e. This is the original file name that Theengs Gateway looks for in your the home directory ont he Raspberry pi.\u003c/li\u003e\n\u003cli\u003eMove the new configuration file with the secret values to the target directory.\u003c/li\u003e\n\u003cli\u003eFinally, restart the service to consume the changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eCommit BUT DON\u0026rsquo;T PUSH YOUR CHANGES! As soon as we push our change that includes the Github Action file, it will kick off our deployment pipeline. I want you to be ready to watch the logs and make sure things go as expected, or know where to look for issues. Now, let\u0026rsquo;s review and test it out!\u003c/p\u003e\n\u003ch2 id=\"testing-it-out\" class=\"headerLink\"\u003e\n    \u003ca href=\"#testing-it-out\" class=\"header-mark\"\u003e\u003c/a\u003eTesting it out\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s take a look back to see what we\u0026rsquo;ve done and where we\u0026rsquo;re at. In the first article (\n\n\n\n\u003ca href=\"/2025/06/theengs-to-try-out/\"\u003eTheengs to Try Out - BLE Sensors, Theengs Gateway, and Home Assistant\u003c/a\u003e\n), we installed Theengs Gateway as a service and had it publishing to an MQTT broker. So far in this guide, we installed a Github Action Runner on our Raspberry Pi that is also running Theengs Gateway and set it up as a background service. We then moved the Theengs Gateway configuration file \u003ccode\u003etheengsgw.conf\u003c/code\u003e into a git repository, first moving our sensitive values into a secrets manager before making our first commit and replacing those values with placeholders. Finally, we created the \u003ccode\u003eyml\u003c/code\u003e file needed for the Github Action so we could deploy our changes and restart the service.\u003c/p\u003e\n\u003cp\u003eIf you\u0026rsquo;ve been following this guide, you should be ready to push your deployment pipeline to Github. As soon as you push it to the \u003ccode\u003emaster\u003c/code\u003e branch, it will kick off the Github Action we defined in our \u003ccode\u003e.github/workflows/deploy-config-changes.yml\u003c/code\u003e file. Before we push our final commit that include the \u003ccode\u003eyml\u003c/code\u003e file, navigate to your \u003ccode\u003eActions\u003c/code\u003e area inside of your Github repository. I included a screenshot below for reference.\u003c/p\u003e\n\u003cfigure\u003e\u003ca class=\"lightgallery\" href=\"/2025/07/theengs-ci-cd/github-action-location.png\" title=\"\" data-thumbnail=\"/2025/07/theengs-ci-cd/github-action-location.png\" data-sub-html=\"\u003ch2\u003eGithub Actions Location\u003c/h2\u003e\"\u003e\u003cimg  loading=\"lazy\" src='/2025/07/theengs-ci-cd/github-action-location.png' srcset=\"/2025/07/theengs-ci-cd/github-action-location_hu_bb3f9f114deb65d2.webp 800w, /2025/07/theengs-ci-cd/github-action-location_hu_7bcf0871395938a3.webp 1200w, /2025/07/theengs-ci-cd/github-action-location_hu_6a649c333bb5a1d7.webp 1600w\"   height=\"422\" width=\"1907\"\u003e\u003c/a\u003e\u003cfigcaption class=\"image-caption\"\u003eGithub Actions Location\u003c/figcaption\u003e\n    \u003c/figure\u003e\n\u003cp\u003eOnce you are there, push your changes that include your \u003ccode\u003eyml\u003c/code\u003e Action definition, refresh the Actions page we just navigated to, and check out the logs. If you pushed directly to the \u003ccode\u003emaster\u003c/code\u003e branch like you\u0026rsquo;re not supposed to (even though if you followed this you did it too like me, whoops \u0026#x1f606;), it should kick off your deployment Action. Click on the workflow run and monitor it\u0026rsquo;s progress. If everything is set up correctly, it should walk through each step we defined, deploy the changes where they should go, and restart the Theengs Gateway service! Congrats, you just set up a CI/CD pipeline \u0026#x1f389;\u003c/p\u003e\n\u003cp\u003eIf you run into any issues, check out the logs and work your way through them. You can always comment down below and I\u0026rsquo;ll see what I can do to help.\u003c/p\u003e\n\u003ch2 id=\"whats-next\" class=\"headerLink\"\u003e\n    \u003ca href=\"#whats-next\" class=\"header-mark\"\u003e\u003c/a\u003eWhat\u0026rsquo;s Next\u003c/h2\u003e\u003cp\u003eNow that we\u0026rsquo;ve set up our deployment pipeline, we can safely make changes and always revert back to what we had if things don\u0026rsquo;t work out. Feel free to play around with the configuration file, just make sure to keep any sensitive information out of the configuration file that\u0026rsquo;s checked in to the repository and in your secrets manager, especially if it is a public repo. And finally, make sure to work on best practices - don\u0026rsquo;t commit directly to master like we did here. Now that you have things set up you can create branches, perform pull requests, and once you complete the PR it will kick off the workflow run for you.\u003c/p\u003e\n\u003cp\u003eI think I may start digging into my home lab set up in my next few articles. I want to see what you think of my set up and how it can be improved. My wife and I will be building a house soon, and I\u0026rsquo;d love to learn from my mistakes and set myself up for success during the \u003cem\u003ebuild\u003c/em\u003e process of the house rather than retrofitting things like I\u0026rsquo;ve done here. So I\u0026rsquo;d love to get some feedback and suggestions on things I can do better! I may also throw in a programming article. I\u0026rsquo;m itching to get back to working on an app I started a while ago, but it\u0026rsquo;s at a point where I want to do things differently on the mobile side and possibly rewrite the backend to another language so I can learn a few things.\u003c/p\u003e\n\u003cp\u003eIf this guide helped you streamline your smart home setup, make sure to comment and share it with a friend! Until next time have fun with the new sensors you\u0026rsquo;ve set up!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Theengs to Try Out - BLE Sensors, Theengs Gateway, and Home Assistant",
        "date_published" : "2025-06-29T22:28:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/06/theengs-to-try-out/",
        "url" : "https://dadstechlab.com/2025/06/theengs-to-try-out/",
        "summary": "I know I haven\u0026rsquo;t introduced my home lab or smart home setup yet. But I recently bought a few new sensors and wanted to share some new theengs I set up.\nSee what I did there? \u0026#x1f609;\nYes, I installed Theengs Gateway on a Raspberry Pi 4B so that it would act as a gateway between my bluetooth low energy (BLE) sensors and my smart home\u0026rsquo;s MQTT Broker. MQTT is a lightweight messaging protocol which is often used in IoT and smart home integrations. It does this via OpenMQTTGateway, and Theengs is like a wrapper around it so that it is easily stood up on a Raspberry Pi or other devices.\n",
        "content_html" : "\u003cp\u003eI know I haven\u0026rsquo;t introduced my home lab or smart home setup yet. But I recently bought a few new sensors and wanted to share some new theengs I set up.\u003c/p\u003e\n\u003cp\u003eSee what I did there? \u0026#x1f609;\u003c/p\u003e\n\u003cp\u003eYes, I installed Theengs Gateway on a Raspberry Pi 4B so that it would act as a gateway between my bluetooth low energy (BLE) sensors and my smart home\u0026rsquo;s MQTT Broker. MQTT is a lightweight messaging protocol which is often used in IoT and smart home integrations. It does this via OpenMQTTGateway, and Theengs is like a wrapper around it so that it is easily stood up on a Raspberry Pi or other devices.\u003c/p\u003e\n\u003ch2 id=\"sensors-galore\" class=\"headerLink\"\u003e\n    \u003ca href=\"#sensors-galore\" class=\"header-mark\"\u003e\u003c/a\u003eSensors Galore\u003c/h2\u003e\u003cp\u003eI feel like I have an addiction to making our house \u0026ldquo;smart\u0026rdquo;. Really at the end of the day I want to supplement what we already have with additional functionality to improve our every day lives, and if I can add some cool extra stuff along the way then bonus points to me! Sensors are a key component to any smart home. There is a brutal heat wave happening here in Georgia and much of the United States, and I want to keep track of the temperature and humidity in my daughter\u0026rsquo;s room and the room my son will be sleeping in (hopefully soon \u0026#x1f91e;). I\u0026rsquo;ve tried a few different temperature/humidity sensors, but I wanted to try something new. I ended up buying a few \u003ca href=\"https://us.switch-bot.com/products/switchbot-indoor-outdoor-thermo-hygrometer\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSwitchBot Indoor/Outdoor Thermo Hygrometers\u003c/a\u003e and I needed a way to integrate them into Home Assistant.\u003c/p\u003e\n\u003ch2 id=\"home-assistant-integration\" class=\"headerLink\"\u003e\n    \u003ca href=\"#home-assistant-integration\" class=\"header-mark\"\u003e\u003c/a\u003eHome Assistant Integration\u003c/h2\u003e\u003cp\u003eFirst, these thermo-hygrometers operate over BLE. I was able to pair these sensors with my phone via the SwitchBot app very easily, however I wanted to be able to view and use the data in my Home Assistant instance.\u003c/p\u003e\n\u003cp\u003eEnter \u003ca href=\"https://gateway.theengs.io/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTheengs Gateway\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eTheengs Gateway is a BLE to MQTT bridge. It receives nearby device BLE packets, decodes them, and sends the data to a MQTT broker. In this case, I am running the \u003ca href=\"https://www.home-assistant.io/integrations/mqtt/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHome Assistant MQTT Integration\u003c/a\u003e and the \u003ca href=\"https://github.com/home-assistant/addons/tree/master/mosquitto\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eMosquitto MQTT Add-on\u003c/a\u003e Home Assistant add-on, which installs the \u003ca href=\"https://mosquitto.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eEclipse Mosquitto MQTT broker\u003c/a\u003e. It is very simple to set up given the links provided. I won\u0026rsquo;t be covering that today, but I will give an overview in another series of articles more tailored to setting up Home Assistant.\u003c/p\u003e\n\u003ch2 id=\"hardware-choice\" class=\"headerLink\"\u003e\n    \u003ca href=\"#hardware-choice\" class=\"header-mark\"\u003e\u003c/a\u003eHardware Choice\u003c/h2\u003e\u003cp\u003eLike many of you, I have a few extra Raspberry Pi\u0026rsquo;s laying around after years of collecting them. I have an original Pi, a Pi 3, some Zero W\u0026rsquo;s, and a couple Pi 4 Model B\u0026rsquo;s. My Home Assistant instance is running as a VM on a thin-client PC. I\u0026rsquo;ll get more into details in another article, but hey, as a young family man doing this as a hobby I don\u0026rsquo;t need to much, so the thin-client PC works great. However, I wanted to be able to reliably receive data from BLE devices on the other side of the house or even outside. Instead of running this gateway directly inside of Home Assistant and limiting my range, I decided to install Theengs Gateway on a Raspberry Pi 4 Model B so that I could put it anywhere within my wifi range and more reliably work with BLE devices.\u003c/p\u003e\n\u003cp\u003eI initially tried a Pi Zero W, but I had a few issues, primarily my frustration in waiting \u0026#x1f606;. The Pi Zero W has some great applications, but I decided to go with the Pi 4 in this case to speed things up and have greater flexibility in the future if I decided to add additional protocol gateways via the USB ports. The Pi 4 has wifi and bluetooth built in, and was a great option to get things up and running. However, Theengs can run on a wide variety of hardware described on their website, including the popular ESP32.\u003c/p\u003e\n\u003ch2 id=\"what-were-setting-up-today\" class=\"headerLink\"\u003e\n    \u003ca href=\"#what-were-setting-up-today\" class=\"header-mark\"\u003e\u003c/a\u003eWhat We\u0026rsquo;re Setting Up Today\u003c/h2\u003e\u003cp\u003eHere\u0026rsquo;s a diagram of what we\u0026rsquo;re setting up today using the Mermaid diagramming tool:\u003c/p\u003e\n\u003cpre class=\"mermaid bg-none\"\u003e\n  %%{init: { \"themeCSS\": \".edgeLabel { padding: 10px; }\" } }%%\n  graph TD\n  subgraph SGTitle[\"`**Theengs BLE to MQTT Gateway**`\"]\n  end\n\n  A[Sensor] -- Data over BLE --\u003e D[Theengs Gateway]\n  B[Phone] -- Data over BLE --\u003e D\n  C[Device] -- Data over BLE --\u003e D\n  D -- MQTT Publish --\u003e E[MQTT Broker]\n  F[Home Assistant] -- MQTT Subscribe --\u003e E\n    \n\n\u003c/pre\u003e\n\u003cp\u003eI know it\u0026rsquo;s not proper UML, but it gets the job done and it\u0026rsquo;s something I\u0026rsquo;ll improve upon the more I add to these articles. Now let\u0026rsquo;s break this down, and really it is pretty simple. This is a sample diagram of how things are set up, in particular in my house. On the left side you have multiple BLE devices emitting data. Theengs Gateway, which is running on the Raspberry Pi 4, receives and decodes these BLE signals even without pairing (since it\u0026rsquo;s BLE). Theengs Gateway then publishes the data via MQTT to a particular topic on the MQTT Broker running on my Proxmox machine. Finally, Home Assistant, which is running on my Proxmox machine as well, subscribes to the same topic to read the data so I can use it within Home Assistant. Not too shabby!\u003c/p\u003e\n\u003ch2 id=\"raspberry-pi-setup\" class=\"headerLink\"\u003e\n    \u003ca href=\"#raspberry-pi-setup\" class=\"header-mark\"\u003e\u003c/a\u003eRaspberry Pi Setup\u003c/h2\u003e\u003cp\u003eOk, the first thing I did as usual is use an imaging tool, in this case the official \u003ca href=\"https://www.raspberrypi.com/software/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eRaspberry Pi Imager\u003c/a\u003e, to flash the lite version Raspberry Pi OS since I will be using this headless without any monitors. You get the option to set wifi, initial user, ssh options, and more via the imager.\u003c/p\u003e\n\u003cp\u003eBoom, first roadblock.\u003c/p\u003e\n\u003cp\u003eI spent hours between the Pi Zero W and the Pi 4 flashing and reflashing, trying to troubleshoot why the Pi\u0026rsquo;s weren\u0026rsquo;t connecting to my wifi network on first boot. Then I found out why, and let me tell you to save you some headaches\u0026hellip;\u003c/p\u003e\n\u003cdiv class=\"details admonition danger open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M439.15 453.06L297.17 384l141.99-69.06c7.9-3.95 11.11-13.56 7.15-21.46L432 264.85c-3.95-7.9-13.56-11.11-21.47-7.16L224 348.41 37.47 257.69c-7.9-3.95-17.51-.75-21.47 7.16L1.69 293.48c-3.95 7.9-.75 17.51 7.15 21.46L150.83 384 8.85 453.06c-7.9 3.95-11.11 13.56-7.15 21.47l14.31 28.63c3.95 7.9 13.56 11.11 21.47 7.15L224 419.59l186.53 90.72c7.9 3.95 17.51.75 21.47-7.15l14.31-28.63c3.95-7.91.74-17.52-7.16-21.47zM150 237.28l-5.48 25.87c-2.67 12.62 5.42 24.85 16.45 24.85h126.08c11.03 0 19.12-12.23 16.45-24.85l-5.5-25.87c41.78-22.41 70-62.75 70-109.28C368 57.31 303.53 0 224 0S80 57.31 80 128c0 46.53 28.22 86.87 70 109.28zM280 112c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32zm-112 0c17.65 0 32 14.35 32 32s-14.35 32-32 32-32-14.35-32-32 14.35-32 32-32z\"/\u003e\u003c/svg\u003e\u003c/span\u003eAvoid My Headaches\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003eThe wifi settings in the Raspberry Pi Imager do not support WPA3/WPA2 mixed wifi networks!\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cp\u003eI think this was the first time I had one of my Pis connect to the network wirelessly since I upgrade network equipment to Unifi several months ago. It turns out that the official imaging tool does not support the changes needed to connect to a mixed security network, AND you cannot set it manually in the wpa_supplicant.conf file in Bookworm or newer as that functionality was deprecated (\u003ca href=\"https://forums.raspberrypi.com/viewtopic.php?t=357623\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehttps://forums.raspberrypi.com/viewtopic.php?t=357623\u003c/a\u003e).\u003c/p\u003e\n\u003cp\u003eFrom what I read on a few forums, it all depends on what chipset your Pi has. If you run into this issue, the easiest solution, if you can, is to set the security on your wifi network to only WPA2 instead of WPA3/WPA2 mixed, and even better if you can set it to use only 2.4 GHz and not 5 GHz. Your other solution is to enable SSH access in the imager before flashing and hard wire the Pi for the first boot. Once you are able to SSH into the Pi, run the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo raspi-config\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can update your network settings within this tool as well as play around with other settings.\u003c/p\u003e\n\u003cp\u003eWhew\u0026hellip;\u003c/p\u003e\n\u003ch2 id=\"installing-theengs-gateway\" class=\"headerLink\"\u003e\n    \u003ca href=\"#installing-theengs-gateway\" class=\"header-mark\"\u003e\u003c/a\u003eInstalling Theengs Gateway\u003c/h2\u003e\u003cp\u003eLet\u0026rsquo;s get to the good stuff.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eAs usual, I like linking to the original and official docs for anyone that wants to see them: \u003ca href=\"https://gateway.theengs.io/install/install.html\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInstalling Theengs Gateway\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eThere are multiple routes to install Theengs Gateway on your device. In my case, I went for the pip package in a Python virtual environment route. I tried the Snap package route on the Pi Zero and only led to frustration (probably because of the Pi Zero itself), so this seemed like a good route to try.\u003c/p\u003e\n\u003cp\u003ePython3 was already installed on my Pi, but I needed to install pip and the \u003ccode\u003evenv\u003c/code\u003e module. To do this, run the following commands:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install python3-pip python3-venv\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eOnce that completes, you want to create your virtual environment and activate it. Running the following commands creates a virtual environment named \u003ccode\u003etheengs\u003c/code\u003e and activates it. Just a heads up - I did not run these with \u003ccode\u003esudo\u003c/code\u003e and everything worked out great. It creates the virtual environment inside of your user folder and I did not run into any permission issues when actually running the gateway, even as a service.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m venv theengs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e theengs/bin/activate\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou know you have activated the virtual environment when the command prompt is preceded by the virtual environment name, in this case \u003ccode\u003e(theengs)\u003c/code\u003e. Now you can finally install the \u003ccode\u003eTheengs Gateway\u003c/code\u003e package by running the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epip install TheengsGateway\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAfter the installation, you can view the help documentation by running:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython3 -m TheengsGateway -h\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCongrats, you have it installed! If you want to exit now and come back, or run a TheengGateway command in another shell session, you\u0026rsquo;ll need to make sure you first activate the same virtual environment by running\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e theengs/bin/activate\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIf you used a different virtual environment name, substitute it out for \u003ccode\u003etheengs\u003c/code\u003e in that example. Now to configure the gateway for your first run.\u003c/p\u003e\n\u003ch2 id=\"first-run\" class=\"headerLink\"\u003e\n    \u003ca href=\"#first-run\" class=\"header-mark\"\u003e\u003c/a\u003eFirst Run\u003c/h2\u003e\u003cblockquote\u003e\n  \u003cp\u003eAgain, here is the \u003ca href=\"https://gateway.theengs.io/use/use.html#launching-the-gateway\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial docs\u003c/a\u003e for reference.\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eBefore we launch the gateway, if you don\u0026rsquo;t have a MQTT client that helps visualize the activity on your broker, you\u0026rsquo;ll want to install something. I installed \u003ca href=\"https://mqtt-explorer.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eMQTT Explorer\u003c/a\u003e on my Windows machine. You just need to enter in your broker\u0026rsquo;s settings, connect, and you\u0026rsquo;ll be able to watch Theengs Gateway publish data in real time.\u003c/p\u003e\n\u003cp\u003eTo launch Theengs Gateway following this installation with the minimal setup, run the following command inside of your virtual environment:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003epython -m TheengsGateway -H \u003cspan class=\"s2\"\u003e\u0026#34;\u0026lt;mqtt_broker_host_ip\u0026gt;\u0026#34;\u003c/span\u003e -u \u003cspan class=\"s2\"\u003e\u0026#34;username\u0026#34;\u003c/span\u003e -p \u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eMake sure you put in your broker\u0026rsquo;s IP address, username, and password accordingly. And that\u0026rsquo;s it! You will be able to see all kinds of near by BLE devices reported on your MQTT broker. My suggestion is to stop it after you confirm it\u0026rsquo;s working so we can set it up as a service and we can set a whitelist of devices we want to track.\u003c/p\u003e\n\u003ch2 id=\"running-as-a-service\" class=\"headerLink\"\u003e\n    \u003ca href=\"#running-as-a-service\" class=\"header-mark\"\u003e\u003c/a\u003eRunning as a Service\u003c/h2\u003e\u003cp\u003eI wasn\u0026rsquo;t a fan of just running it from the command line, so thankfully it was pretty simple to create a service that would automatically restart on reboot. Modify the template below for the \u003ccode\u003eTheengsGateway.service\u003c/code\u003e file with the following updates:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eReplace the value in the \u003ccode\u003eExecStart\u003c/code\u003e line with your original command\u003c/li\u003e\n\u003cli\u003eReplace \u003ccode\u003epi\u003c/code\u003e for the value in the \u003ccode\u003eUser\u003c/code\u003e line to your local username (not root)\u003c/li\u003e\n\u003cli\u003eFinally, if you\u0026rsquo;ve installed Theengs Gateway in a virtual python environment like we did in this article, change the \u003ccode\u003eExecStart\u003c/code\u003e binary reference from \u003ccode\u003e/user/bin/python3\u003c/code\u003e to \u003ccode\u003e/home/\u0026lt;user\u0026gt;/theengs/bin/python3\u003c/code\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e/etc/systemd/system/TheengsGateway.service\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[Unit]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eDescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003eTheengs Gateway\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eRequires\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003ebluetooth.target network-online.target\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[Service]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eRestart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003ealways\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eType\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003esimple\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eUser\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003epi\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eExecStart\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003e/usr/bin/python3 -m TheengsGateway -H mqtt_broker_host_ip -u username -p password\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e[Install]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"na\"\u003eWantedBy\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s\"\u003emulti-user.target\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eWe\u0026rsquo;re now going to install the service and enable it to start on boot. After we start it the first time, the service will make a configuration file we\u0026rsquo;ll want to get familiar with and possibly update. Run the following commands to enable and start the service:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl daemon-reload\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e --now TheengsGateway.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eCheck the status to makes sure it is running:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl status TheengsGateway\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can check the logs to look for any issues if it is not:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ejournalctl -xe\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd finally stop the service so we can take a look at the configuration it made on the first run:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl stop TheengsGateway.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch2 id=\"configuration\" class=\"headerLink\"\u003e\n    \u003ca href=\"#configuration\" class=\"header-mark\"\u003e\u003c/a\u003eConfiguration\u003c/h2\u003e\u003cp\u003eThe first time I connected Theengs Gateway to my MQTT broker, it automatically published data to the auto-discovery topic that Home Assistant subscribes to for \u003cstrong\u003eEVERY\u003c/strong\u003e BLE device it picked up. To say I was overwhelmed was an understatement. Fortunately, I was able to stop it as soon as I saw 30 different devices show up in Home Assistant that I didn\u0026rsquo;t own, and it didn\u0026rsquo;t take \u003cem\u003etoo long\u003c/em\u003e to clean things up.\u003c/p\u003e\n\u003cp\u003eI did some digging and found the device whitelist setting in the Theengs Gateway configuration file. In case you didn\u0026rsquo;t read the official docs and followed the approach I did, the gateway stores its configuration in a file \u003ccode\u003etheengsgw.conf\u003c/code\u003e in your home directory. So after the systemd service has started successfully, you may remove all options from the ExecStart line in the systemd service file, as the gateway reads the configuration from that file.\u003c/p\u003e\n\u003cp\u003eTake a look at the configuration file at \u003ccode\u003e~/theengsgw.conf\u003c/code\u003e, it should look similar to the following, but you\u0026rsquo;ll have your host IP, gateway ID, MQTT user and password in it:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e~/theengsgw.conf\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;adapter\u0026#34;: \u0026#34;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;bindkeys\u0026#34;: {},\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;blacklist\u0026#34;: [],\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ble\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ble_scan_time\u0026#34;: 7,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ble_time_between_scans\u0026#34;: 5,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ca_certs\u0026#34;: null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery_device_name\u0026#34;: \u0026#34;TheengsGateway\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery_filter\u0026#34;: [\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u0026#34;IBEACON\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    ],\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;discovery_topic\u0026#34;: \u0026#34;/home/TheengsGateway/BTtoMQTT\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;enable_multi_gtw_sync\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;enable_tls\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;enable_websocket\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;gateway_id\u0026#34;: \u0026#34;\u0026lt;your-gateway-ip\u0026gt;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;general_presence\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;host\u0026#34;: \u0026#34;\u0026lt;host ip address\u0026gt;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;identities\u0026#34;: {},\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;ignore_wblist\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;log_level\u0026#34;: \u0026#34;INFO\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;lwt_topic\u0026#34;: \u0026#34;home/TheengsGateway/LWT\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;pass\u0026#34;: \u0026#34;\u0026lt;mqtt-password\u0026gt;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;port\u0026#34;: 1883,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;presence\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;presence_topic\u0026#34;: \u0026#34;home/TheengsGateway/presence\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;publish_advdata\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;publish_all\u0026#34;: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;publish_topic\u0026#34;: \u0026#34;home/TheengsGateway/BTtoMQTT\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;scanning_mode\u0026#34;: \u0026#34;active\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;subscribe_topic\u0026#34;: \u0026#34;home/+/BTtoMQTT/undecoded\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;time_format\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;time_sync\u0026#34;: [],\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;tls_insecure\u0026#34;: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;tracker_timeout\u0026#34;: 120,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;trackersync_topic\u0026#34;: \u0026#34;home/internal/trackersync\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;user\u0026#34;: \u0026#34;\u0026lt;mqtt-user\u0026gt;\u0026#34;,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u0026#34;whitelist\u0026#34;: []\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eI may have modified one or two other things, but it should look similar.\u003c/p\u003e\n\u003cp\u003eNow my piece of advice is to get the bluetooth MAC address for devices you want to track and enter them in the \u003ccode\u003ewhitelist\u003c/code\u003e array as strings. This will prevent unwanted data from coming in, but it can be useful to leave it empty if you want to discover what\u0026rsquo;s around you.\u003c/p\u003e\n\u003cp\u003eNow, let\u0026rsquo;s update the service file to run the correct command now that it will automatically look at this file. Remove any parameters from the \u003ccode\u003eExecStart\u003c/code\u003e line in \u003ccode\u003e/etc/systemd/system/TheengsGateway.service\u003c/code\u003e so that it ends with \u003ccode\u003e-m TheengsGateway\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eFinally, let\u0026rsquo;s restart the service by running\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo systemctl start TheengsGateway.service\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd we\u0026rsquo;re set!\u003c/p\u003e\n\u003cp\u003eTake a look at the rest of the \u003ca href=\"https://gateway.theengs.io/use/use.html#details-options\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTheengs Gateway configuration\u003c/a\u003e, play around with it, and modify as you want!\u003c/p\u003e\n\u003cp\u003eDon\u0026rsquo;t forget to take a look at your MQTT broker to see all the data flowing in! If you have the MQTT integration installed in Home Assistant with auto-discovery enabled and the default discovery prefix, you should start seeing devices show up automatically without needing to change the Theengs Gateway configuration.\u003c/p\u003e\n\u003ch2 id=\"summary\" class=\"headerLink\"\u003e\n    \u003ca href=\"#summary\" class=\"header-mark\"\u003e\u003c/a\u003eSummary\u003c/h2\u003e\u003cp\u003eWhew, that was a lengthy article, but hopefully helpful. To recap, we:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eInstalled Theengs Gateway on a Pi 4\u003c/li\u003e\n\u003cli\u003eBridged BLE sensor data into Home Assistant via MQTT via Theengs Gateway\u003c/li\u003e\n\u003cli\u003eSet up a systemd service to make it persistent\u003c/li\u003e\n\u003cli\u003eWhitelisted sensors to reduce noise\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"next-steps---cicd\" class=\"headerLink\"\u003e\n    \u003ca href=\"#next-steps---cicd\" class=\"header-mark\"\u003e\u003c/a\u003eNext Steps - CI/CD\u003c/h2\u003e\u003cp\u003eThat was fun and all getting useful data into Home Assistant to use with everything we have installed there, but if you\u0026rsquo;re like me, I want to tweak the Theengs Gateway configuration to see what it can do. And if you\u0026rsquo;re also like me, you don\u0026rsquo;t make backups before changing things, and you\u0026rsquo;ll lose track of your changes along the way \u0026#x1f61f;\u0026#x1f606;\u003c/p\u003e\n\u003cp\u003eIn my next article, I\u0026rsquo;ll show you how I put the Theengs Gateway configuration in a git repository and set up a deployment pipeline. This way, I\u0026rsquo;m able to always track my changes, make those changes without actually connecting to the Raspberry Pi, restart the service to pick up the changes, all while integrating a secret manager outside of GitHub so we don\u0026rsquo;t have sensitive data stored in the config!\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eThanks for reading—drop a comment or share if this helped!\u003c/em\u003e\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Deploying a Hugo Site with Cloudflare Pages: Custom Domains, Redirects, and CI/CD",
        "date_published" : "2025-06-20T12:00:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/06/deploying-the-site/",
        "url" : "https://dadstechlab.com/2025/06/deploying-the-site/",
        "summary": "I\u0026rsquo;ve used Cloudflare for what feels like ages - first for accessing my home lab (which at the time was a Raspberry Pi updating the ip address with DDNS), later at work to protect applications. Today, I use it for domains, DNS, tunnels, security, and more. It\u0026rsquo;s a very versatile tool for both hobby and business.\nThis is the first time I\u0026rsquo;ve used Cloudflare Pages. I thought about self-hosting a static site, and just using my Caddy reverse proxy or Nginx to serve up the static site. However, I thought I\u0026rsquo;d give Cloudflare Pages a shot because\n",
        "content_html" : "\u003cp\u003eI\u0026rsquo;ve used Cloudflare for what feels like ages - first for accessing my home lab (which at the time was a Raspberry Pi updating the ip address with DDNS), later at work to protect applications. Today, I use it for domains, DNS, tunnels, security, and more. It\u0026rsquo;s a very versatile tool for both hobby and business.\u003c/p\u003e\n\u003cp\u003eThis is the first time I\u0026rsquo;ve used Cloudflare Pages. I thought about self-hosting a static site, and just using my Caddy reverse proxy or Nginx to serve up the static site. However, I thought I\u0026rsquo;d give Cloudflare Pages a shot because\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eIt\u0026rsquo;s free, and\u003c/li\u003e\n\u003cli\u003eI don\u0026rsquo;t have to manage anything!\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eI\u0026rsquo;ve found through the years that I like to pick and choose what I self-host and what I host on existing services. This was something simple that I didn\u0026rsquo;t have to pay for and it takes one more thing off my plate.\u003c/p\u003e\n\u003cp\u003eAnd it was stupid easy to get up and running.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eI\u0026rsquo;d like to give credit where credit is due - the documentation for deploying a Hugo site to Cloudflare Pages was well written and can be found here: \u003ca href=\"https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDeploy Hugo Site with Cloudflare pages\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\u003ch2 id=\"prerequisites\" class=\"headerLink\"\u003e\n    \u003ca href=\"#prerequisites\" class=\"header-mark\"\u003e\u003c/a\u003ePrerequisites\u003c/h2\u003e\u003cp\u003eFirst and foremost you need to have the Git repository available online. It can be a public or private repo, but I\u0026rsquo;d recommend hosting it in either GitHub or GitLab. Cloudflare Pages offers support for both and makes this process move along smoothly. For the purpose of this article, I have my project hosted in a private Git repo on GitHub, and that\u0026rsquo;s the path I will describe.\u003c/p\u003e\n\u003cp\u003eCloudflare will give you a custom subdomain on the \u003ccode\u003e\u0026lt;project\u0026gt;.pages.dev\u003c/code\u003e domain, however my domain is also registered with Cloudflare. I\u0026rsquo;ll describe what is needed to only allow traffic to your purchased domain instead of the custom domain.\u003c/p\u003e\n\u003ch2 id=\"connecting-your-repo-with-pages\" class=\"headerLink\"\u003e\n    \u003ca href=\"#connecting-your-repo-with-pages\" class=\"header-mark\"\u003e\u003c/a\u003eConnecting Your Repo with Pages\u003c/h2\u003e\u003cp\u003eTo connect your GitHub repository with Cloudflare pages:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eFirst need to log in to the \u003ca href=\"https://dash.cloudflare.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eCloudflare Dashboard\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eWithin the sidebar menu, expand \u003ccode\u003eCompute (Workers)\u003c/code\u003e and navigate to \u003ccode\u003eWorkers and Pages\u003c/code\u003e. Alternatively, you can use the search box and search for \u003ccode\u003epages\u003c/code\u003e. You may see a few results, but click on the \u003ccode\u003eCompute (Workers) | Workers and Pages\u003c/code\u003e link in the \u003ccode\u003eAccount-level Pages\u003c/code\u003e section.\u003c/li\u003e\n\u003cli\u003eNext, click on the \u003ccode\u003ePages\u003c/code\u003e tab\u003c/li\u003e\n\u003cli\u003eContinue by clicking the \u003ccode\u003eImport an existing Git repository\u003c/code\u003e button\u003c/li\u003e\n\u003cli\u003eConnect your Github repository,\u003c/li\u003e\n\u003cli\u003eSelect your Hugo project repository\u003c/li\u003e\n\u003cli\u003eClick \u003ccode\u003eBegin Setup\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eIn the \u003ccode\u003eBuild Settings\u003c/code\u003e section, select Hugo as the framework preset.\u003c/li\u003e\n\u003cli\u003eFinally, click \u003ccode\u003eSave and Deploy\u003c/code\u003e and you\u0026rsquo;re off!\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eMy first release failed, and yours probably will too. Don\u0026rsquo;t sweat it, that\u0026rsquo;s all part of it. You\u0026rsquo;ve just got to do what you usually do - check the logs and do a little debugging \u0026#x1f645;.\u003c/p\u003e\n\u003cdiv class=\"details admonition warning open\"\u003e\n    \u003cdiv class=\"details-summary admonition-title\"\u003e\n        \u003cspan class=\"icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 576 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z\"/\u003e\u003c/svg\u003e\u003c/span\u003eA Common Issue\u003cspan class=\"details-icon\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"details-content\"\u003e\n        \u003cdiv class=\"admonition-content\"\u003eIf your deployment fails, check the Hugo version. Cloudflare may default to an older one.\u003c/div\u003e\u003c/div\u003e\u003c/div\u003e\n\u003cp\u003eAfter looking at the Cloudflare logs for my release, my issue was pretty apparent. I discovered the issue was related to the version of Hugo that Cloudflare defaulted to. To fix this issue if you come across it, we first need to figure out which version of Hugo you are developing with. On your machine you\u0026rsquo;ve been using for development, run the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo version\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIt should output something similar to:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehugo v0.147.8-10da2bd765d227761641f94d713d094e88b920ae+extended linux/amd64 BuildDate=2025-06-07T12:59:52Z VendorInfo=snap:0.147.8\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eNow you can define the version of Hugo for Cloudflare to use by going to \u003ccode\u003eSettings \u0026gt; Environment variables\u003c/code\u003e within your Pages project. Provide the environment variable \u003ccode\u003eHUGO_VERSION\u003c/code\u003e and give it a value of \u003ccode\u003e0.147.8\u003c/code\u003e, or whatever version you are actually using. You don\u0026rsquo;t need to provide the entire string that was outputted in your console, you just need the version number.\u003c/p\u003e\n\u003cp\u003eAfter changing this setting, my deployment worked and I could visit my site by going to the provided URL of:\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehttps://dadstechlab.pages.dev\u003c/code\u003e\u003c/p\u003e\n\u003cfigure\u003e\u003cimg src=\"/2025/06/deploying-the-site/yessss.gif\"\u003e\n\u003c/figure\u003e\n\n\u003ch2 id=\"custom-domain-setup-and-redirection\" class=\"headerLink\"\u003e\n    \u003ca href=\"#custom-domain-setup-and-redirection\" class=\"header-mark\"\u003e\u003c/a\u003eCustom Domain Setup and Redirection\u003c/h2\u003e\u003cp\u003eSince I already had my domain in Cloudflare, setting my project to use my domain was pretty simple. Navigate to the \u003ccode\u003eCustom Settings\u003c/code\u003e tab within your Pages project and choose your domain. That was it! Cloudflare will add the necessary CNAME DNS record to your site for you.\u003c/p\u003e\n\u003cp\u003eIf you are like me, you probably don\u0026rsquo;t want visitors accessing your \u003ccode\u003e\u0026lt;project\u0026gt;.pages.dev\u003c/code\u003e URL. I only wanted visitors on my custom domain. The \u003ca href=\"https://developers.cloudflare.com/pages/how-to/redirect-to-custom-domain/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eofficial Cloudflare Hugo deployment guide\u003c/a\u003e has an excellent guide on how to do this, but I\u0026rsquo;ll describe my experience as well since you are already here.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eOn the account level menu (or you can search for it, just make sure you choose account level settings), navigate to \u003ccode\u003eBulk Redirects\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eCreate a \u003ccode\u003eBulk Redirect List\u003c/code\u003e. This allows you to define a source URL, which should be the \u003ccode\u003e\u0026lt;project\u0026gt;.pages.dev\u003c/code\u003e URL of your site, and set the target URL to your custom domain. I left the status response as \u003ccode\u003e301\u003c/code\u003e. I didn\u0026rsquo;t change any of the additional parameters.\u003c/li\u003e\n\u003cli\u003eNext create a \u003ccode\u003eBulk Redirect Rule\u003c/code\u003e using the \u003ccode\u003eBulk Redirect List\u003c/code\u003e that you just created, click \u003ccode\u003eSave and Deploy\u003c/code\u003e, and you\u0026rsquo;re done!\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eTo test, try navigating to your \u003ccode\u003e\u0026lt;project\u0026gt;.pages.dev\u003c/code\u003e domain and make sure it redirects as expected to your custom domain.\u003c/p\u003e\n\u003ch2 id=\"deploying-updates\" class=\"headerLink\"\u003e\n    \u003ca href=\"#deploying-updates\" class=\"header-mark\"\u003e\u003c/a\u003eDeploying Updates\u003c/h2\u003e\u003cp\u003eI haven\u0026rsquo;t played around with the \u003ccode\u003ePreview\u003c/code\u003e environment, only \u003ccode\u003eProduction\u003c/code\u003e, so if you have experience with this please let me know how it\u0026rsquo;s going in the comments below!\u003c/p\u003e\n\u003cp\u003eWhat does come out of the box is an automatic trigger defined on your production branch so that any commits on that branch will trigger a redeploy of your website. Just remember to test and review changes in PRs before merging into your production branch. You aren\u0026rsquo;t committing to directly to \u003ccode\u003emaster\u003c/code\u003e/\u003ccode\u003emain\u003c/code\u003e are you? \u0026#x1f602;\u003c/p\u003e\n\u003cp\u003eNow you have your own Hugo website with automatic deployments set up. Start writing your content and tell the world your story!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Hugo Journey and Setup Guide",
        "date_published" : "2025-06-17T12:00:00-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/06/hugo-journey/",
        "url" : "https://dadstechlab.com/2025/06/hugo-journey/",
        "summary": "I have a habit of spending a good bit of time researching things before I take action. Whether it be making a purchase, deciding where to go on vacation, or even what to eat for dinner. Finding a blog engine was no exception.\nOf course you have Wordpress - but I\u0026rsquo;ve tried it over the years helping people out and I\u0026rsquo;m not a fan. Then there was Jekyll - I\u0026rsquo;m not too familiar with Ruby. I took a look at Ghost - but I got frustrated with existing themes and didn\u0026rsquo;t feel like digging in to make my own. Finally I landed on Hugo - simple markdown, config driven, and a template engine that felt familiar.\n",
        "content_html" : "\u003cp\u003eI have a habit of spending a good bit of time researching things before I take action. Whether it be making a purchase, deciding where to go on vacation, or even what to eat for dinner. Finding a blog engine was no exception.\u003c/p\u003e\n\u003cp\u003eOf course you have Wordpress - but I\u0026rsquo;ve tried it over the years helping people out and I\u0026rsquo;m not a fan. Then there was Jekyll - I\u0026rsquo;m not too familiar with Ruby. I took a look at Ghost - but I got frustrated with existing themes and didn\u0026rsquo;t feel like digging in to make my own. Finally I landed on Hugo - simple markdown, config driven, and a template engine that felt familiar.\u003c/p\u003e\n\u003cp\u003eNow as of writing this article, I haven\u0026rsquo;t customized the layout much past the basic theme I found aside from a few small customizations. But I feel a lot more comfortable with the beginning product, I know it can evolve, it\u0026rsquo;s familiar enough that I can be comfortable with it, but unfamiliar enough that it can challenge me with a few things here and there.\u003c/p\u003e\n\u003cp\u003eHere\u0026rsquo;s a quick guide on how to get things up and running locally pretty quickly. As always with these articles, please give me feedback as I know I don\u0026rsquo;t always do things the best way, and that\u0026rsquo;s how we learn \u0026#x1f60a;\u003c/p\u003e\n\u003ch2 id=\"prerequisites\" class=\"headerLink\"\u003e\n    \u003ca href=\"#prerequisites\" class=\"header-mark\"\u003e\u003c/a\u003ePrerequisites\u003c/h2\u003e\u003cp\u003eFirst and foremost, I\u0026rsquo;m on a Windows 11 machine. I don\u0026rsquo;t mind Windows, but I feel pretty comfortable in a linux environment. WSL has evolved a lot over the years, and I thought I\u0026rsquo;d use it for development purposes on this machine. VS Code is my go to IDE for the majority of my development work and integrates seamlessly with WSL for the work I\u0026rsquo;ve done so far with it. If you have a different OS or different setup, things will be slightly different, but you should be able to follow along and replicate pretty easily.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eThe documentation for Hugo was really easy to follow and can be found here: \u003ca href=\"https://gohugo.io/getting-started/quick-start/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHugo Quick Start\u003c/a\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\u003col\u003e\n\u003cli\u003eWindows 11\u003c/li\u003e\n\u003cli\u003eWSL (I\u0026rsquo;m using Ubuntu 24.04) \u003ca href=\"https://learn.microsoft.com/en-us/windows/wsl/install\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInstall WSL on Windows\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://code.visualstudio.com/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eVisual Studio Code\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"install-hugo-dependencies\" class=\"headerLink\"\u003e\n    \u003ca href=\"#install-hugo-dependencies\" class=\"header-mark\"\u003e\u003c/a\u003eInstall Hugo Dependencies\u003c/h2\u003e\u003cp\u003eFirst things first - in order to install Hugo, we need to install both Git and Go. Hugo\u0026rsquo;s installation documentation does state that Dart Sass \u0026ldquo;is required to transpile Sass to CSS when using the latest features of the Sass language.\u0026rdquo; Fortunately, since we will use Snap to install Hugo, the Snap Hugo package already includes Dart Sass!\u003c/p\u003e\n\u003ch3 id=\"git\" class=\"headerLink\"\u003e\n    \u003ca href=\"#git\" class=\"header-mark\"\u003e\u003c/a\u003eGit\u003c/h3\u003e\u003cp\u003eAfter running your usual:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-1\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eRun:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-2\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install git\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou\u0026rsquo;ll probably want to go ahead and configure your name and email for committing changes in the future, so run the following commands:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-3\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global user.name \u003cspan class=\"s2\"\u003e\u0026#34;Your Name\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global user.email \u003cspan class=\"s2\"\u003e\u0026#34;your.email@example.com\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 id=\"go\" class=\"headerLink\"\u003e\n    \u003ca href=\"#go\" class=\"header-mark\"\u003e\u003c/a\u003eGo\u003c/h3\u003e\u003cp\u003eOfficial Go install directions for reference: \u003ca href=\"https://go.dev/doc/install\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGo Download and Install\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eNext we will install Go. Here\u0026rsquo;s how I did it inside of WSL. This may be different for you if there is a new version of Go available.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-4\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewget https://go.dev/dl/go1.24.3.linux-amd64.tar.gz\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erm -rf /usr/local/go \u003cspan class=\"o\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e tar -C /usr/local -xzf go1.24.3.linux-amd64.tar.gz\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eI had to manually add \u003ccode\u003e/usr/local/go/bin\u003c/code\u003e to the \u003ccode\u003ePATH\u003c/code\u003e environment variable. I have Zsh as my shell, so I had to add the following lines to my \u003ccode\u003e~/.zshrc\u003c/code\u003e. A similar approach can be used if you are using a different shell, such as the \u003ccode\u003e~/.bashrc\u003c/code\u003e for the bash shell.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e~/.zshrc\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-5\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e\u003cspan class=\"s2\"\u003e:/usr/local/go/bin\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThen apply the changes:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-6\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/.zshrc\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eYou can verify by typing the following in your shell to make sure it worked:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-7\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ego version\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eIf you got output similar to\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ego version go1.24.3 linux/amd64\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eCongrats! You\u0026rsquo;ve got your dependencies installed!\u003c/p\u003e\n\u003ch2 id=\"installing-hugo\" class=\"headerLink\"\u003e\n    \u003ca href=\"#installing-hugo\" class=\"header-mark\"\u003e\u003c/a\u003eInstalling Hugo\u003c/h2\u003e\u003cp\u003eNow that we have our dependencies installed, let\u0026rsquo;s install Hugo through the Snap package manager. I installed Hugo through Snap because Hugo\u0026rsquo;s installation instructions do state that the Hugo version available in package repos may in some cases not be the latest version. Hugo\u0026rsquo;s documentation also has instruction to install Hugo via Homebrew should you choose that direction.\u003c/p\u003e\n\u003cp\u003eTo install Hugo through Snap, run the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-8\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo snap install hugo\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd just like that, we\u0026rsquo;re almost ready! One thing tripped me up - possibly because I\u0026rsquo;m using Zsh - but it might apply to other shells. You see, the bin folder for applications installed via Snap is not in my \u003ccode\u003ePATH\u003c/code\u003e environment variable. Just like we did after the Go installation, let\u0026rsquo;s add the executable\u0026rsquo;s parent directory to our \u003ccode\u003e~/.zshrc\u003c/code\u003e file, \u003ccode\u003e~/.bashrc\u003c/code\u003e file, or analogous file for other distributions.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003e~/.zshrc\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-9\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eexport\u003c/span\u003e \u003cspan class=\"nv\"\u003ePATH\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"nv\"\u003e$PATH\u003c/span\u003e\u003cspan class=\"s2\"\u003e:/snap/bin\u0026#34;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThen apply the changes:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-10\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e ~/.zshrc\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd voila! You can verify Hugo is installed by running the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-11\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo version\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd the output should be something similar to\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ehugo v0.147.8-10da2bd765d227761641f94d713d094e88b920ae+extended linux/amd64 BuildDate=2025-06-07T12:59:52Z VendorInfo=snap:0.147.8\u003c/code\u003e\u003c/p\u003e\n\u003ch2 id=\"tell-the-world\" class=\"headerLink\"\u003e\n    \u003ca href=\"#tell-the-world\" class=\"header-mark\"\u003e\u003c/a\u003eTell the World!\u003c/h2\u003e\u003cp\u003eOne thing I’ve always found awesome about development and the web is that your work is instantly available for the entire world to see. There aren\u0026rsquo;t many mediums in which that can happen. I don\u0026rsquo;t take it for granted, and always think about that before pushing something out because I know it can affect a lot of people. Not necessarily my blog, well maybe one day, but other products I\u0026rsquo;ve worked on.\u003c/p\u003e\n\u003cp\u003eWith Hugo, it doesn\u0026rsquo;t have to be a blog. The templating engine is pretty powerful and at the end of the day, it generates HTML like everything else. Hugo just gives you a different experience to build your website compared to writing strict HTML, other static site generators, server side rendering frameworks, or fancy javascript frameworks. Don\u0026rsquo;t overcomplicate creating a simple site. But if you really wanted to, go ahead and throw React, Angular, Vue, or anything else in there. It\u0026rsquo;s all up to you.\u003c/p\u003e\n\u003cp\u003eSo with that, let\u0026rsquo;s build a site so you can showcase your ideas to the world. I won\u0026rsquo;t walk you through everything, as I think the \u003ca href=\"https://gohugo.io/documentation/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHugo Documentation\u003c/a\u003e is fantastic. However, I\u0026rsquo;ll reiterate their instructions to stand up a quick site, select a theme to use, and create your first post.\u003c/p\u003e\n\u003ch3 id=\"generate-a-new-site\" class=\"headerLink\"\u003e\n    \u003ca href=\"#generate-a-new-site\" class=\"header-mark\"\u003e\u003c/a\u003eGenerate a New Site\u003c/h3\u003e\u003cp\u003eFirst, navigate to your parent directory where you want the Hugo project to live. Run the following command to generate the project template for a new site:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-12\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo new site my-website\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eChange to the project\u0026rsquo;s directory:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-13\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e my-website\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eFinally, let\u0026rsquo;s go ahead and set up source control so we can keep track of changes and use the submodule feature for themes.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-14\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit init\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003ch3 id=\"choose-your-theme\" class=\"headerLink\"\u003e\n    \u003ca href=\"#choose-your-theme\" class=\"header-mark\"\u003e\u003c/a\u003eChoose Your Theme\u003c/h3\u003e\u003cp\u003eNow we want to pick a theme to use. You can definitely create your own theme if you are up for it, however I\u0026rsquo;ll follow Hugo\u0026rsquo;s lead in their documentation with the \u003ca href=\"https://github.com/theNewDynamic/gohugo-theme-ananke\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAnanke\u003c/a\u003e theme. There are also a ton of other options you can find \u003ca href=\"https://themes.gohugo.io/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere\u003c/a\u003e. I ended up going with the \u003ca href=\"https://hugodoit.pages.dev/theme-documentation-basics/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eDoIt\u003c/a\u003e theme as a starting point. Yes, my site looks almost identical to it at the time of this article, but at this point this site is an MVP and we\u0026rsquo;ll customize it more soon \u0026#x1f603;\u003c/p\u003e\n\u003cp\u003eThere are a couple ways to implement a theme, but I prefer the git submodule route. Run the following command to clone the Ananke theme as a submodule inside of your project\u0026rsquo;s root folder:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-15\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow we want to tell our project\u0026rsquo;s configuration to use the theme. You can do this a few ways, but just to get your eyes on the config file you can open the \u003ccode\u003ehugo.toml\u003c/code\u003e file in the project\u0026rsquo;s root directory and add the following line to the end of the file:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ehugo.toml\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-16\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e...\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nx\"\u003etheme\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;ananke\u0026#39;\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eNow run the following command to start up your Hugo development server\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-17\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo server\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eThe console will output the localhost URL including the port number to view your site. Congrats, you are up and running!\u003c/p\u003e\n\u003ch3 id=\"create-your-first-post\" class=\"headerLink\"\u003e\n    \u003ca href=\"#create-your-first-post\" class=\"header-mark\"\u003e\u003c/a\u003eCreate Your First Post\u003c/h3\u003e\u003cp\u003eYes, it looks a little bland. There are a lot of configuration options including menus, images, posts, search, and more for you to play around with and customize your site. But we need to add content in there first. To create your first post, stop the server and run the following command:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-18\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo new content content/posts/my-first-post.md\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eOpen up your new file and you\u0026rsquo;ll see what is called \u003ccode\u003efront matter\u003c/code\u003e. This is pretty much metadata that gives information to the templating engine and site build engine. It should look similar to this:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003econtent/posts/my-first-post.md\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-19\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e+++\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etitle = \u0026#39;My First Post\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate = 2024-01-14T07:07:07+01:00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edraft = true\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e+++\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eBelow the end of the front matter (below the closing \u003ccode\u003e+++\u003c/code\u003e line), and add some content with markdown! You can learn all about markdown \u003ca href=\"https://www.markdownguide.org/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehere\u003c/a\u003e. It is a standardized way to take notes and build documents, which in this case get translated to websites.\u003c/p\u003e\n\u003cp\u003eThe first content I wrote was the obligatory \u003cem\u003e\u003cstrong\u003eHello world\u003c/strong\u003e\u003c/em\u003e, and my file contents looked like this:\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003econtent/posts/my-first-post.md\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-20\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e+++\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003etitle = \u0026#39;My First Post\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edate = 2024-01-14T07:07:07+01:00\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edraft = true\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e+++\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e## Hello world\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAfter you add your own content, let\u0026rsquo;s rerun the \u003ccode\u003ehugo server\u003c/code\u003e command with a couple flags. The \u003ccode\u003e-D\u003c/code\u003e flag tells Hugo to include drafts, which is defined in the front matter for each content. The \u003ccode\u003e--disableFastRender\u003c/code\u003e flag enables full re-renders on changes, which is helpful as you are building out your site and making changes.\u003c/p\u003e\n\u003cdiv class=\"code-block highlight is-open show-line-numbers  tw-group tw-my-2\"\u003e\n  \u003cdiv class=\"\n    \n    tw-flex \n    tw-flex-row\n    tw-flex-1 \n    tw-justify-between \n    tw-w-full tw-bg-bgColor-secondary\n    \"\u003e      \n    \u003cbutton \n      class=\"\n        code-block-button\n        tw-mx-2 \n        tw-flex\n        tw-flex-row\n        tw-flex-1\"\n      aria-hidden=\"true\"\u003e\n          \u003cdiv class=\"group-[.is-open]:tw-rotate-90 tw-transition-[transform] tw-duration-500 tw-ease-in-out print:!tw-hidden tw-w-min tw-h-min tw-my-1 tw-mx-1\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 320 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z\"/\u003e\u003c/svg\u003e\u003c/div\u003e\n          \u003cp class=\"tw-select-none !tw-my-1\"\u003ebash\u003c/p\u003e\n      \u003c/button\u003e\n\n   \u003cdiv class=\"tw-flex\"\u003e\n      \u003cbutton \n        class=\"\n          line-number-button\n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.show-line-numbers]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle line numbers\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M61.77 401l17.5-20.15a19.92 19.92 0 0 0 5.07-14.19v-3.31C84.34 356 80.5 352 73 352H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h22.83a157.41 157.41 0 0 0-11 12.31l-5.61 7c-4 5.07-5.25 10.13-2.8 14.88l1.05 1.93c3 5.76 6.29 7.88 12.25 7.88h4.73c10.33 0 15.94 2.44 15.94 9.09 0 4.72-4.2 8.22-14.36 8.22a41.54 41.54 0 0 1-15.47-3.12c-6.49-3.88-11.74-3.5-15.6 3.12l-5.59 9.31c-3.72 6.13-3.19 11.72 2.63 15.94 7.71 4.69 20.38 9.44 37 9.44 34.16 0 48.5-22.75 48.5-44.12-.03-14.38-9.12-29.76-28.73-34.88zM496 224H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM16 160h64a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H64V40a8 8 0 0 0-8-8H32a8 8 0 0 0-7.14 4.42l-8 16A8 8 0 0 0 24 64h8v64H16a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8zm-3.91 160H80a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8H41.32c3.29-10.29 48.34-18.68 48.34-56.44 0-29.06-25-39.56-44.47-39.56-21.36 0-33.8 10-40.46 18.75-4.37 5.59-3 10.84 2.8 15.37l8.58 6.88c5.61 4.56 11 2.47 16.12-2.44a13.44 13.44 0 0 1 9.46-3.84c3.33 0 9.28 1.56 9.28 8.75C51 248.19 0 257.31 0 304.59v4C0 316 5.08 320 12.09 320z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n\n      \u003cbutton \n        class=\"\n          wrap-code-button\n          tw-select-none \n          tw-mx-2 \n          tw-hidden \n          group-[.is-open]:tw-block \n          group-[.is-wrap]:tw-text-fgColor-link \n          print:!tw-hidden\" \n        title=\"Toggle code wrap\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n      \n      \u003cbutton \n        class=\"\n          copy-code-button\n          tw-select-none\n          tw-mx-2 \n          tw-hidden\n          group-[.is-open]:tw-block\n          hover:tw-text-fgColor-link \n          print:!tw-hidden\"\n        title=\"Copy code\"\u003e\n          \u003cspan class=\"copy-icon tw-block\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n          \u003cspan class=\"check-icon tw-hidden\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z\"/\u003e\u003c/svg\u003e\u003c/span\u003e\n      \u003c/button\u003e\n        \n      \u003cbutton \n        class=\"\n          tw-select-none \n          tw-mx-2 \n          tw-block \n          group-[.is-open]:tw-hidden \n          print:!tw-hidden\" \n        disabled\n        aria-hidden=\"true\"\u003e\u003csvg class=\"icon\"\n    xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"\u003e\u003c!-- Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) --\u003e\u003cpath d=\"M328 256c0 39.8-32.2 72-72 72s-72-32.2-72-72 32.2-72 72-72 72 32.2 72 72zm104-72c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72zm-352 0c-39.8 0-72 32.2-72 72s32.2 72 72 72 72-32.2 72-72-32.2-72-72-72z\"/\u003e\u003c/svg\u003e\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cpre style=\"counter-reset: codeblock;\" class=\"tw-block tw-m-0 tw-p-0\"\u003e\u003ccode \n    id=\"codeblock-id-21\" \n    class=\"\n      chroma \n      !tw-block \n      tw-p-0\n      tw-m-0\n      tw-transition-[max-height] \n      tw-duration-500 \n      tw-ease-in-out \n      group-[.is-closed]:!tw-max-h-0 \n      group-[.is-wrap]:tw-text-wrap\n      tw-overflow-y-hidden\n      tw-overflow-x-auto\n      tw-scrollbar-thin\n      \"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehugo server -D --disableFastRender\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/div\u003e\n\u003cp\u003eAnd there you go! It is still pretty bland, yes, however you know have a website with your first bit of content that the world can see!\u003c/p\u003e\n\u003ch2 id=\"next-steps\" class=\"headerLink\"\u003e\n    \u003ca href=\"#next-steps\" class=\"header-mark\"\u003e\u003c/a\u003eNext Steps\u003c/h2\u003e\u003cp\u003eI don\u0026rsquo;t want to just leave you hanging there. To start customizing your site, it would be good to start with the \u003ca href=\"https://gohugo.io/documentation/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHugo documentation\u003c/a\u003e so you have a good idea of how things work and where to find what you\u0026rsquo;re looking for.\u003c/p\u003e\n\u003cp\u003eThe next place to go is your theme\u0026rsquo;s documentation. Here is a link to the \u003ca href=\"https://github.com/theNewDynamic/gohugo-theme-ananke\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAnanke git repo\u003c/a\u003e where you can find helpful documentation such as setting up a hero image, adding comments, and more.\u003c/p\u003e\n\u003cblockquote\u003e\n  \u003cp\u003eI will add another post in the future documenting how I got this site up and running on Cloudflare Pages (here\u0026rsquo;s a hint, I followed \u003ca href=\"https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eCloudflare\u0026rsquo;s Documentation\u003c/a\u003e) \u0026#x1f609;\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eLet me know in the comments if this was helpful and please link your site that you\u0026rsquo;ve built!\u003c/p\u003e\n",
        "language": "en"
    },
    {
        "title" : "Hello World",
        "date_published" : "2025-05-28T02:59:54-04:00",
        "date_modified" : "2026-02-19T10:56:21-05:00",
        "id" : "https://dadstechlab.com/2025/05/hello-world/",
        "url" : "https://dadstechlab.com/2025/05/hello-world/",
        "summary": " Hello world\nSorry but I figured that was appropriate \u0026#x1f923;\nWelcome to Dad\u0026rsquo;s Tech Lab!\nI\u0026rsquo;m a tech fanatic, although time is limited now with a wife and kids (I wouldn\u0026rsquo;t trade it for anything). I have a passion for technology, software development, anything smart home, home labbing, and anything in between there. I\u0026rsquo;ve done plenty of IT, devops, architecture, and software development over the years, and one thing I\u0026rsquo;ve learned is that you should never stop learning. You should always push yourself and try new things.\n",
        "content_html" : "\u003cblockquote\u003e\n  \u003cp\u003eHello world\u003c/p\u003e\n\u003c/blockquote\u003e\u003cp\u003eSorry but I figured that was appropriate \u0026#x1f923;\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eWelcome to Dad\u0026rsquo;s Tech Lab!\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m a tech fanatic, although time is limited now with a wife and kids (I wouldn\u0026rsquo;t trade it for anything). I have a passion for technology, software development, anything smart home, home labbing, and anything in between there. I\u0026rsquo;ve done plenty of IT, devops, architecture, and software development over the years, and one thing I\u0026rsquo;ve learned is that you should never stop learning. You should always push yourself and try new things.\u003c/p\u003e\n\u003cp\u003eThat\u0026rsquo;s why I\u0026rsquo;m creating this blog. I want to share with yall (yes I\u0026rsquo;m southern lol) the things I\u0026rsquo;ve learned, the things I like to play around with, and I want to learn from yall. Let me know if things can be done better. Let me know if I am stupid doing something a certain way.\u003c/p\u003e\n\u003cp\u003eSharing knowledge and even failing is part of the way we get better with anything.\u003c/p\u003e\n\u003cp\u003eThat\u0026rsquo;s what we\u0026rsquo;re here for \u0026#x1f60a;\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m not going to be formal about things. Being super formal is not how we communicate if we were to see each other outside of a professional setting. And frankly, even in a professional setting, I just like to be myself. What you get is what you see.\u003c/p\u003e\n\u003cp\u003eAnd if you can bare with me, I will definitely be talking about my family some. Check out the \u003ca href=\"/about/\" rel=\"\"\u003eAbout\u003c/a\u003e page to view more info about me and my family. I love them to death and wouldn\u0026rsquo;t be where I\u0026rsquo;m at without the support of my wife, friends, and family.\u003c/p\u003e\n\u003cp\u003eI\u0026rsquo;m excited to share this journey with yall. This is my first blog, and really my first time using Hugo to develop the blog. I\u0026rsquo;m still getting used to Markdown, so it probably won\u0026rsquo;t be the best formatting for the first several posts. Speaking of which, I think my next post will be discussing setting up this blog :) See you there!\u003c/p\u003e\n",
        "language": "en"
    },
    ]
}
