<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Micah Bird's Site</title><link>https://www.micahbird.com/</link><description>Recent content on Micah Bird's Site</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 16 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.micahbird.com/index.xml" rel="self" type="application/rss+xml"/><item><title>3 lil Indie Games That You Should Play to Live a Good Life</title><link>https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/</guid><description>&lt;img src="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/cover.jpg" alt="Featured image of post 3 lil Indie Games That You Should Play to Live a Good Life" /&gt;&lt;p&gt;&lt;em&gt;This blog post is adapted from a presentation I gave for HASS 465: THE GOOD LIFE, FROM ARISTOTLE TO THE ANTHROPOCENE.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This first game is all about exploration, climbing every mountain, looking in every corner, and going on a grandiose adventure&amp;hellip; But who do you play as? Well, this little fella of course:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/tall-trails-1.png"
width="512"
height="288"
srcset="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/tall-trails-1_hu_8e48e731228073.png 480w, https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/tall-trails-1_hu_b380121df37f3acf.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
&gt;&lt;/p&gt;
&lt;p&gt;The name of the first game is is &lt;strong&gt;Tall Trails&lt;/strong&gt;, and your objective is to find your purpose in the world.&lt;/p&gt;
&lt;p&gt;Why do I like it? The best thing I can equate it to is like if The Legend of Zelda Breath of the Wild was more whimsical. You go around just climbing and collecting things to progress to new worlds. You know, typically video game things. It also has a chill atmosphere, with a neat gimmick!&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;video
controls
src="tall-trails-2.mp4"
autoplay
&gt;
&lt;p&gt;
Your browser doesn't support HTML5 video. Here is a
&lt;a href="tall-trails-2.mp4"&gt;link to the video&lt;/a&gt; instead.
&lt;/p&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;The main gimmick of this game is that you have a boot that is permanently stuck to your back, and you can put different items in it to get different abilities! The best thing I can equate it to is like the &amp;ldquo;copy abilities&amp;rdquo; in the Kirby franchise.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/tall-trails-3.png"
width="1920"
height="1080"
srcset="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/tall-trails-3_hu_cec54a7db6590c7.png 480w, https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/tall-trails-3_hu_11e889fe40950080.png 1024w"
loading="lazy"
alt="Comedy, at it’s finest"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
&gt;&lt;/p&gt;
&lt;p&gt;Finally, the comedy on this game is pretty on the nose. &lt;a class="link" href="https://store.steampowered.com/app/2393760/Tall_Trails/" target="_blank" rel="noopener"
&gt;Check out Tall Trails on Steam!&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;But what if you are interested in something more action oriented?&lt;/p&gt;
&lt;p&gt;Look no further than &lt;strong&gt;DELTARUNE&lt;/strong&gt;!!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/deltarune-1.png"
width="460"
height="215"
srcset="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/deltarune-1_hu_e631ba67b1896a8d.png 480w, https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/deltarune-1_hu_b5a71ff5c111d058.png 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="213"
data-flex-basis="513px"
&gt;&lt;/p&gt;
&lt;p&gt;First off, I must admit, iiiiiiiiiiiiit&amp;rsquo;s an RPG&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;BUT WAIT WAIT!&lt;/strong&gt;&lt;/em&gt; Before you groan, this one is different.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/lamerpgs.png"
width="960"
height="540"
srcset="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/lamerpgs_hu_4cde02923aca0712.png 480w, https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/lamerpgs_hu_654d8ac9e00165f1.png 1024w"
loading="lazy"
alt="“Lame” RPGs"
class="gallery-image"
data-flex-grow="177"
data-flex-basis="426px"
&gt;&lt;/p&gt;
&lt;p&gt;Unlike all those lame RPGs where you press a button, wait for an attack, and then some random amount of damage occurs, in Deltarune, it&amp;rsquo;s &lt;em&gt;your fault&lt;/em&gt; if you take damage:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/deltarune-battle.gif"
width="756"
height="491"
srcset="https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/deltarune-battle_hu_28c45e95d56c45b6.gif 480w, https://www.micahbird.com/p/3-lil-indie-games-that-you-should-play-to-live-a-good-life/deltarune-battle_hu_1e660e6cbd02d5a9.gif 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="153"
data-flex-basis="369px"
&gt;&lt;/p&gt;
&lt;p&gt;So, why do I like it? To put it simply:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;The The 1st two chapters are free! Each chapter is exponentially better than the last, but I must admit, the 1st chapter can kinda be a slog.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The soundtrack is a certified hood classic. Genuinely some of my favorite music of all time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You do not have to fight your enemies! You have the choice to either spare or fight your enemies, and there are different endings depending on how much of a pacifist or murderer you are!&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I want to keep it brief to avoid spoilers, but the more blind you can go in, the better. &lt;a class="link" href="https://store.steampowered.com/app/1671210/DELTARUNE/" target="_blank" rel="noopener"
&gt;Check out DELTATUNE on Steam!&lt;/a&gt; It&amp;rsquo;s also on Switch and PlayStation!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Finally, last but not least, you should check out OneShot.&lt;/p&gt;
&lt;p&gt;Your objective in this game is to restore light (&lt;em&gt;or maybe not?&lt;/em&gt;) to a world plunged into darkness.&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;video
controls
src="one-shot.mp4"
autoplay
&gt;
&lt;p&gt;
Your browser doesn't support HTML5 video. Here is a
&lt;a href="one-shot.mp4"&gt;link to the video&lt;/a&gt; instead.
&lt;/p&gt;
&lt;/video&gt;
&lt;/div&gt;
&lt;p&gt;Why I like it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;You 🫵, the player, play a role in the game. As a result, the game will constantly breaks the 4th wall in interesting ways.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There is a neat mechanic where you can combine items to solve puzzles in ways you would not expect.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It&amp;rsquo;s also a great walking simulator with a gripping story.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The puzzles can be a tad confusing at times, and this game is absolutely best played in one sitting (so you can remember where you are at). OneShot has released on pretty much every platform under the sun, but you can &lt;a class="link" href="https://store.steampowered.com/app/2915460/OneShot_World_Machine_Edition/" target="_blank" rel="noopener"
&gt;check it out Steam here!&lt;/a&gt;&lt;/p&gt;</description></item><item><title>A Novel Kind of Domain Scam</title><link>https://www.micahbird.com/p/a-novel-kind-of-domain-scam/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/a-novel-kind-of-domain-scam/</guid><description>&lt;img src="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/cover.jpg" alt="Featured image of post A Novel Kind of Domain Scam" /&gt;&lt;h2 id="the-scam"&gt;The Scam
&lt;/h2&gt;&lt;p&gt;Today out of the blue I was contacted by a business that I made a website for ages ago. They simply sent a picture of the following letter they received in the mail and asked if they should do anything about it. Here is that picture:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/scam-letter.jpg"
width="1200"
height="1328"
srcset="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/scam-letter_hu_865098214b070ce0.jpg 480w, https://www.micahbird.com/p/a-novel-kind-of-domain-scam/scam-letter_hu_67e5c9185820c382.jpg 1024w"
loading="lazy"
alt="The Letter"
class="gallery-image"
data-flex-grow="90"
data-flex-basis="216px"
&gt;&lt;/p&gt;
&lt;p&gt;Although it&amp;rsquo;s a solicitation, what the heck is the domain &lt;code&gt;marston-holdings.com&lt;/code&gt; and why would they want $288 for it?! Well, when going to that site, it displays the homepage for the business who received this letter. Also, the letter is from &amp;ldquo;Domain Listings&amp;rdquo; how could it not be legit??&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/urlbar.png"
width="1176"
height="146"
srcset="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/urlbar_hu_2005061ee261c639.png 480w, https://www.micahbird.com/p/a-novel-kind-of-domain-scam/urlbar_hu_390995423951d741.png 1024w"
loading="lazy"
alt="The Scam Site"
class="gallery-image"
data-flex-grow="805"
data-flex-basis="1933px"
&gt;&lt;/p&gt;
&lt;p&gt;Well, this is going to come as a real shocker, but this is a phishing scam. This business has nothing to do with that domain, let alone hosting a clone of their homepage!&lt;/p&gt;
&lt;p&gt;From the outside, this is how I believe the scam works:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get a cheap domain.&lt;/li&gt;
&lt;li&gt;Host a mirror of a website through that domain.&lt;/li&gt;
&lt;li&gt;Send out scary solicitation letters that could be plausible that you need to pay for it.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;It is a clever scam I must admit, but incredibly poor execution. No doubt it would have tricked the employees in this business as admittedly they are the older, and in non-technical crowd. I am incredibly thankful that they reached out to me before doing anything about it. Now, it&amp;rsquo;s my turn.&lt;/p&gt;
&lt;h2 id="lets-get-it"&gt;Let&amp;rsquo;s Get It
&lt;/h2&gt;&lt;p&gt;First, I started with an obligatory whois lookup:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/whois-lookup.png"
width="1598"
height="1370"
srcset="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/whois-lookup_hu_3de809398c283748.png 480w, https://www.micahbird.com/p/a-novel-kind-of-domain-scam/whois-lookup_hu_2377427853f58f1d.png 1024w"
loading="lazy"
alt="Whois Lookup"
class="gallery-image"
data-flex-grow="116"
data-flex-basis="279px"
&gt;&lt;/p&gt;
&lt;p&gt;Which, unfortunately, does not tell much, besides it being registered through GoDaddy&amp;hellip; More on them later.&lt;/p&gt;
&lt;p&gt;Onto a &lt;code&gt;dig&lt;/code&gt; to see what&amp;rsquo;s under the hood.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ dig marston-holdings.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;; &amp;lt;&amp;lt;&amp;gt;&amp;gt; DiG 9.10.6 &amp;lt;&amp;lt;&amp;gt;&amp;gt; marston-holdings.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; global options: +cmd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; Got answer:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: NOERROR, id: 18973
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; OPT PSEUDOSECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;; EDNS: version: 0, flags:; udp: 1220
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; QUESTION SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;marston-holdings.com. IN A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; ANSWER SECTION:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;marston-holdings.com. 600 IN A 160.153.78.39
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; Query time: 55 msec
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; SERVER: 172.16.0.1#53(172.16.0.1)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; WHEN: Thu Apr 09 17:56:58 MDT 2026
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;;; MSG SIZE rcvd: 65
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Wow, a single IP? How brave.&lt;/p&gt;
&lt;p&gt;Taking that IP to good ol&amp;rsquo; &lt;a class="link" href="https://www.shodan.io" target="_blank" rel="noopener"
&gt;shodan&lt;/a&gt; is pretty revealing.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/shodan-lookup.png"
width="1259"
height="1262"
srcset="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/shodan-lookup_hu_ea963d9cfce0a31e.png 480w, https://www.micahbird.com/p/a-novel-kind-of-domain-scam/shodan-lookup_hu_42ad5db0a3e3304a.png 1024w"
loading="lazy"
alt="Shodan Results"
class="gallery-image"
data-flex-grow="99"
data-flex-basis="239px"
&gt;&lt;/p&gt;
&lt;p&gt;Quite a few vulnerabilities, and a fair amount of open ports too. Seems to be associated with a few other suspect domains, such as &lt;code&gt;forthedocs.com&lt;/code&gt;. Which reminds me, the scam site did not even have HTTPs certs! &lt;em&gt;For shame&amp;hellip;&lt;/em&gt; But that got me wondering, how long has this site been cloned?&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/internet-archive-lookup.png"
width="2986"
height="132"
srcset="https://www.micahbird.com/p/a-novel-kind-of-domain-scam/internet-archive-lookup_hu_a71c40a4de6be2a6.png 480w, https://www.micahbird.com/p/a-novel-kind-of-domain-scam/internet-archive-lookup_hu_d5909dadebdf8827.png 1024w"
loading="lazy"
alt="Internet Archive Lookup"
class="gallery-image"
data-flex-grow="2262"
data-flex-basis="5429px"
&gt;&lt;/p&gt;
&lt;p&gt;Huh, that&amp;rsquo;s odd. The website was at least cloned starting in July 2025, and the business who is being impersonated did not receive a letter until today. Not sure if this was premeditated or if the scammers are just lazy.&lt;/p&gt;
&lt;h2 id="the-end"&gt;The End..?
&lt;/h2&gt;&lt;p&gt;For now, I have contacted GoDaddy support to get the impostor site taken down, but I have yet to hear back. I will update this post with new developments as they happen.&lt;/p&gt;
&lt;p&gt;UPDATE: 04/12, still no response from GoDaddy, but I fundamentally misunderstood the letter, as it states: &amp;ldquo;THIS IS NOT A BILL. THIS IS A SOLICITATION. YOU ARE UNDER NO OBLIGATION TO PAY THE AMOUNT STATED ABOVE UNLESS YOU ACCEPT THIS OFFER.&amp;rdquo; I was under the assumption that this was a misleading bill, but that is not the case. The text above text has been corrected to reflect that.&lt;/p&gt;</description></item><item><title>Five Free of Charge Albums You Should Absolutely Listen to</title><link>https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/</guid><description>&lt;img src="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/cover.jpg" alt="Featured image of post Five Free of Charge Albums You Should Absolutely Listen to" /&gt;&lt;p&gt;The following a short compilation of albums that can be &lt;em&gt;legally&lt;/em&gt; downloaded from an official source, be that directly from the artist or publisher itself. Whether you are just starting a local music library, or already have terabytes of music, I think all of these would make great additions to your collection! After all, who doesn&amp;rsquo;t like free?!&lt;/p&gt;
&lt;h2 id="various-artists---ghostly-swim"&gt;Various Artists - Ghostly Swim
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.adultswim.com/music/ghostly-swim" target="_blank" rel="noopener"
&gt;&lt;img src="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/ghostly-swim.jpg"
width="578"
height="574"
srcset="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/ghostly-swim_hu_b8ccd659bed68d86.jpg 480w, https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/ghostly-swim_hu_5cb3a89564408e09.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="241px"
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A phenomenal electronic album, where each song is from a different artist. Even if you are not a electronic music fan, I am willing to bet that you can find at least one track that you enjoy, due to sheer sonic diversity at play here. This album is positively blooming with early 2000s nostalgia energy. In fact, I discovered a lot of my favorite artists from this album, such as &lt;a class="link" href="https://tycho.bandcamp.com/album/past-is-prologue" target="_blank" rel="noopener"
&gt;Tycho&lt;/a&gt; and &lt;a class="link" href="https://muxmool.bandcamp.com/album/skulltaste" target="_blank" rel="noopener"
&gt;Mux Mool&lt;/a&gt;. I only wish that Ghostly International and Adult Swim could pull off another phenomenal album like this.
&lt;strong&gt;Memorable Track: Tycho - Cascade (Live)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://www.adultswim.com/music/ghostly-swim" target="_blank" rel="noopener"
&gt;Download from Ghostly International&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="neil-cicierega---mouth-moods"&gt;Neil Cicierega - Mouth Moods
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="http://www.neilcic.com/mouthmoods/" target="_blank" rel="noopener"
&gt;&lt;img src="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/mouth-moods.jpg"
width="580"
height="580"
srcset="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/mouth-moods_hu_e0c662c484af409d.jpg 480w, https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/mouth-moods_hu_7d3f70de00c3aaf4.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This album is absolutely not for everyone, but if you jive with off-the-wall remixes and sampling like I do, then you will no doubt enjoy this album. The sheer amount of pop-culture references and songs reimagined on this album is staggering. The more blind you can go into this one, the better.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memorable Track: Wow Wow&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="http://www.neilcic.com/mouthmoods/" target="_blank" rel="noopener"
&gt;Download from Neil Cicierega&amp;rsquo;s Website&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(Shame for not having your HTTPs certs up to date Neil&amp;hellip;)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="c418---148"&gt;C418 - 148
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://c418.bandcamp.com/album/148" target="_blank" rel="noopener"
&gt;&lt;img src="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/148.jpg"
width="580"
height="580"
srcset="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/148_hu_41cba9ff4488e615.jpg 480w, https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/148_hu_a1bf7f23b3c1a81c.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m going to be honest, this is probably the most mixed bag album on this list. There are some tracks that are pretty annoying, bordering on grating to listen to. Especially the first 3 tracks, which just use a kinda reuse a pretty mediocre vocal sample. But, holy cow, when a song hits, they are BANGERS. What is even cooler is that there are DJ-able remixes of Minecraft Soundtrack songs, and they are just *chef&amp;rsquo;s kiss*! If you are even familiar with the music in Minecraft, at the very least, listen to &lt;strong&gt;Beta&lt;/strong&gt; and you will see what I mean.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memorable Track: Beta&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://c418.bandcamp.com/album/148" target="_blank" rel="noopener"
&gt;Download from C418&amp;rsquo;s Bandcamp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="robohands---affirmations"&gt;Robohands - Affirmations
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://robohands.bandcamp.com/album/affirmations" target="_blank" rel="noopener"
&gt;&lt;img src="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/affirmations.jpg"
width="580"
height="451"
srcset="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/affirmations_hu_145dc251ae39f6d.jpg 480w, https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/affirmations_hu_ada18e32f7e49c3a.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="128"
data-flex-basis="308px"
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is probably the most chill, laid back jazz, and shortest album on this list. This was how I was introduced to Robohands, and have been listing to them ever since! I am a sucker for any kind of music that has a &lt;a class="link" href="https://en.wikipedia.org/wiki/Rhodes_piano" target="_blank" rel="noopener"
&gt;Rhodes piano&lt;/a&gt; involved, so this is always a joy to listen to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memorable Track: Into The Darkness&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://robohands.bandcamp.com/album/affirmations" target="_blank" rel="noopener"
&gt;Download from Robohand&amp;rsquo;s Bandcamp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="tennyson---like-what-ep"&gt;Tennyson - Like What EP
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://tennyson.bandcamp.com/album/like-what-ep" target="_blank" rel="noopener"
&gt;&lt;img src="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/like-what-ep.jpg"
width="580"
height="580"
srcset="https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/like-what-ep_hu_2a75ba0e752b5251.jpg 480w, https://www.micahbird.com/p/five-free-of-charge-albums-you-should-absolutely-listen-to/like-what-ep_hu_4fd6ecb8862253f2.jpg 1024w"
loading="lazy"
class="gallery-image"
data-flex-grow="100"
data-flex-basis="240px"
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Admittedly this is kinda cheating since this is an EP, but it&amp;rsquo;s an absolute no-brainer for any electronica/low-fi/chill music enjoyer. This EP always manages to put a smile on my face. The vocals on the few tracks that they are present work in so organically that it&amp;rsquo;s just bliss, on top of every track being the perfect length. You can tell that Tennyson just had fun with the track &amp;ldquo;L&amp;rsquo;oiseau qui danse&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memorable Track:&lt;/strong&gt; Like What?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class="link" href="https://tennyson.bandcamp.com/album/like-what-ep" target="_blank" rel="noopener"
&gt;Download from Tennyson&amp;rsquo;s Bandcamp&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h1 id="more-in-the-future"&gt;More in the Future?
&lt;/h1&gt;&lt;p&gt;Hopefully in the near future I will be making a dedicated site for these kinds of free album recommendations! Pester me in the comments and I&amp;rsquo;ll get it done sooner, and/or recommend an album, I&amp;rsquo;m all ears!&lt;/p&gt;</description></item><item><title>How to use Gadgetbridge with a Pebble watch</title><link>https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/</guid><description>&lt;img src="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/cover.jpg" alt="Featured image of post How to use Gadgetbridge with a Pebble watch" /&gt;&lt;p&gt;With all the hype surrounding the new Pebble devices, I thought it was high time that I share how I still rock my &lt;a class="link" href="https://en.wikipedia.org/wiki/Pebble_Time" target="_blank" rel="noopener"
&gt;Pebble Time&lt;/a&gt; (&lt;em&gt;a device that released in 2015!&lt;/em&gt;) to this day. The key, is &lt;a class="link" href="https://gadgetbridge.org/" target="_blank" rel="noopener"
&gt;Gadgetbridge&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="why-gadgetbridge"&gt;Why Gadgetbridge?
&lt;/h2&gt;&lt;p&gt;Although I haven&amp;rsquo;t conducted any formal experiments or taken any measurements of battery life, anecdotally, I can say Gadgetbridge provides better battery life than the stock Pebble app. It also gives some peace of mind that the app is in constant development on top of being open source. Admittedly, this is also true of the &lt;a class="link" href="https://repebble.com/app" target="_blank" rel="noopener"
&gt;new Pebble app&lt;/a&gt;, but the landing page states that &amp;ldquo;Bluetooth connectivity to older Pebbles &lt;em&gt;may&lt;/em&gt; be a bit flakey.&amp;rdquo; so I have refrained from testing it for now.&lt;/p&gt;
&lt;h2 id="using-gadgetbridge-with-your-pebble-device"&gt;Using Gadgetbridge with your Pebble Device
&lt;/h2&gt;&lt;h3 id="pre-installtion-prep"&gt;Pre-Installtion Prep
&lt;/h3&gt;&lt;p&gt;If you want to be able to add any favorite contacts to the &amp;ldquo;Send Text&amp;rdquo; app, you most do so in the original Pebble app before switching to Gadgetbridge. After that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Uninstall the Pebble app&lt;/li&gt;
&lt;li&gt;Unpair the watch from your phone, and unpair your phone from your watch settings&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="pair-your-watch-with-gadgetbridge"&gt;Pair your watch with Gadgetbridge
&lt;/h3&gt;&lt;p&gt;Install the &lt;a class="link" href="https://f-droid.org/packages/nodomain.freeyourgadget.gadgetbridge/" target="_blank" rel="noopener"
&gt;Gadgetbridge app&lt;/a&gt; from a repository of your choosing, then add a device:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/pairing-pebble.jpg"
width="360"
height="693"
srcset="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/pairing-pebble_hu_d0d37da1f667bc7e.jpg 480w, https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/pairing-pebble_hu_992d97a7ebe19eda.jpg 1024w"
loading="lazy"
alt="Gadgetbridge Pairing Screen"
class="gallery-image"
data-flex-grow="51"
data-flex-basis="124px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note that you must pair the device with the non-LE connection.&lt;/strong&gt; It may take a while for the normal Bluetooth device to show up. Be patient.&lt;/p&gt;
&lt;p&gt;If after multiple attempts the non-LE Bluetooth device doesn&amp;rsquo;t show up, exit the Gadgetbridge app, force stop the app, turn off Bluetooth, turn on airplane mode, turn Bluetooth back on, and then go back to the gadget bridge app and try again.&lt;/p&gt;
&lt;p&gt;Upon connecting, select &amp;ldquo;No&amp;rdquo; when asked to pair it as a companion device.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/companion-device.png"
width="360"
height="262"
srcset="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/companion-device_hu_630cc303be3a23cc.png 480w, https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/companion-device_hu_1ebbe109450d5a22.png 1024w"
loading="lazy"
alt="Gadgetbridge Companion Device Prompt"
class="gallery-image"
data-flex-grow="137"
data-flex-basis="329px"
&gt;&lt;/p&gt;
&lt;p&gt;Then be &lt;em&gt;very&lt;/em&gt; patient as it pairs, it took multiple minutes for my Pebble Time to pair. Maybe take a gander at my &lt;a class="link" href="https://www.micahbird.com/tech-talks-hall-of-fame/" &gt;Tech Talks Hall of Fame&lt;/a&gt; while waiting, or not, I don&amp;rsquo;t mind either way.&lt;/p&gt;
&lt;h3 id="profit"&gt;Profit!
&lt;/h3&gt;&lt;p&gt;To test that your Pebble device is successfully paired, now try to send a test notification by pressing the menu button in the upper left corner &amp;gt; Debug &amp;gt; Send. If you receive &amp;ldquo;Test&amp;rdquo; on your watch, congrats!&lt;/p&gt;
&lt;h2 id="installing-apps-from-the-rebble-store"&gt;Installing Apps from the Rebble store
&lt;/h2&gt;&lt;p&gt;After using Gadgetbridge for a while, it dawned on me I was missing a stopwatch app. As it would turn out, it&amp;rsquo;s possible to install apps on your Pebble device via Gadgetbridge, although obtaining said watch apps is a bit obfuscated.&lt;/p&gt;
&lt;p&gt;To install apps, you have to download them as &lt;code&gt;.pbw&lt;/code&gt; files to then upload in Gadgetbridge app. To obtain said mystical files, you have to go to the &lt;a class="link" href="https://apps.rebble.io/en_US/watchapps?dev_settings=true" target="_blank" rel="noopener"
&gt;Rebble App Store with developer settings enabled&lt;/a&gt; or simply append &lt;code&gt;?dev_settings=true&lt;/code&gt; to the end of a URL to the app, for example, the stopwatch app would be &lt;a class="link" href="https://apps.rebble.io/en_US/application/55b6c2c3e68f5acdfc00008d?dev_settings=true" target="_blank" rel="noopener"
&gt;&lt;code&gt;https://apps.rebble.io/en_US/application/55b6c2c3e68f5acdfc00008d?dev_settings=true&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Alternatively, you can download the apps from the &lt;a class="link" href="https://archive.org/details/pebble-appstore-archive" target="_blank" rel="noopener"
&gt;Pebble App Store Archive from the Internet Archive&lt;/a&gt;. &lt;em&gt;Thanks &lt;a class="link" href="https://lukaswerner.com/" target="_blank" rel="noopener"
&gt;Lukas&lt;/a&gt;!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Then at the bottom of the page of the app, tap the &amp;ldquo;Download PBW&amp;rdquo; link, save the file, and then in Gadgetbridge select the App Manager of your Pebble device, and upload the app using the button in the lower right:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/app-manager.png"
width="360"
height="700"
srcset="https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/app-manager_hu_ae41bd38a9c80be2.png 480w, https://www.micahbird.com/p/how-to-use-gadgetbridge-with-a-pebble-watch/app-manager_hu_ae9418055791a4e1.png 1024w"
loading="lazy"
alt="Gadgetbridge App Manager"
class="gallery-image"
data-flex-grow="51"
data-flex-basis="123px"
&gt;&lt;/p&gt;
&lt;p&gt;Enjoy, and a hardy thanks to the &lt;a class="link" href="https://codeberg.org/Freeyourgadget/Gadgetbridge/src/branch/master/CONTRIBUTORS.rst" target="_blank" rel="noopener"
&gt;people who make Gadgetbridge&lt;/a&gt;, a truly incredible piece of software!&lt;/p&gt;</description></item><item><title>How to Setup ArgoCD (the Homelab Way)</title><link>https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/</link><pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/</guid><description>&lt;img src="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/cover.jpg" alt="Featured image of post How to Setup ArgoCD (the Homelab Way)" /&gt;&lt;h2 id="preamble"&gt;Preamble
&lt;/h2&gt;&lt;p&gt;Manage a Kubernetes cluster for your homelab? Tired of mucking around with&lt;code&gt;kubectl apply -f&lt;/code&gt; and &lt;code&gt;helm install&lt;/code&gt; commands, and wish your deployments were more declarative, reproducible, and controlled with Git? Well, ArgoCD is the solution for you! This tutorial will go through setting up ArgoCD from scratch, and even how you setup a cluster with a single command! Make sure that you already have &lt;code&gt;helm&lt;/code&gt; and &lt;code&gt;kubectl&lt;/code&gt; installed, and &lt;code&gt;kubectl&lt;/code&gt; can connect to your cluster before proceeding!&lt;/p&gt;
&lt;h2 id="folder-structure"&gt;Folder structure
&lt;/h2&gt;&lt;p&gt;First, initialize a git repo with the following directories and familiarize yourself with each of their purposes:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p apps/templates
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p yamls
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p charts/argo-cd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps&lt;/code&gt; is where all of your Helm deployments will live, along with the &amp;lsquo;root&amp;rsquo; app for your K8s manifests, more on that later.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;charts&lt;/code&gt; is how ArgoCD is bootstrapped and declared for the cluster.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yamls&lt;/code&gt; is where all of your desired K8s manifests will be deployed from.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bootstrapping-argocd"&gt;Bootstrapping ArgoCD
&lt;/h2&gt;&lt;p&gt;Start by adding the Argo Helm repo with the following command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm repo add argo https://argoproj.github.io/argo-helm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then by placing the following contents in a yaml file located at &lt;code&gt;charts/argo-cd/Chart.yaml&lt;/code&gt;, we can generate a Chart.lock file for managing ArgoCD&amp;rsquo;s version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argo-cd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.0.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;dependencies&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argo-cd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;7.8.2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repository&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://argoproj.github.io/argo-helm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;NOTE: To check what the latest version is, use the command &lt;code&gt;helm search repo -l | grep argo-cd&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;With that &lt;code&gt;Chart.yaml&lt;/code&gt; in place, now run following command to &lt;em&gt;lock in&lt;/em&gt; that version:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm dep update charts/argo-cd/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="setup-the-github-repository"&gt;Setup the Github Repository
&lt;/h2&gt;&lt;p&gt;Now, create a private Github repo, and create a &lt;a class="link" href="https://github.com/settings/personal-access-tokens/new" target="_blank" rel="noopener"
&gt;fine-grained personal access token&lt;/a&gt; for it. For the personal access token, set no expiry date, and select access only to you repo you just created. With your newfound token, fill in the following K8s secret manifest, and for ArgoCD will utilize that token to pull from your repo. Put this secret somewhere safe!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Secret&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;deployment-git-repo&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argocd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;argocd.argoproj.io/secret-type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;repository&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;stringData&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://github.com/[GITHUB_REPO_HERE]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;username&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;GITHUB_USERNAME_HERE]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;GITHUB_PAT_HERE]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Be sure to apply this secret!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create ns argocd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl apply -f secret-argocd-git-repo-credentials.yaml
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="installing-argocd"&gt;Installing ArgoCD
&lt;/h2&gt;&lt;p&gt;Now comes the fun part, actually installing ArgoCD, but first we got to set the scene:&lt;/p&gt;
&lt;p&gt;We need to create a &amp;lsquo;root&amp;rsquo; &lt;a class="link" href="https://argo-cd.readthedocs.io/en/stable/core_concepts/" target="_blank" rel="noopener"
&gt;Application&lt;/a&gt; for ArgoCD to springboard off of, place the following file in &lt;code&gt;apps/Chart.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;v2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;root&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1.0.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;As well as place this &lt;code&gt;Application&lt;/code&gt; manifest for &lt;code&gt;root&lt;/code&gt; in &lt;code&gt;apps/templates/root.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argoproj.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Application&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;root&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argocd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;finalizers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;resources-finalizer.argocd.argoproj.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://kubernetes.default.svc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;project&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repoURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://github.com/[GITHUB_REPO_HERE].git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetRevision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HEAD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;syncPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;allowEmpty&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selfHeal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;With this root Application, ArgoCD will automatically deploy any manifests present in the &lt;code&gt;apps/templates/&lt;/code&gt; folder! For example, we could deploy a Helm Chart like NGINX (&lt;strong&gt;optionally&lt;/strong&gt; paste this file in &lt;code&gt;apps/templates/ingress-nginx.yaml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argoproj.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Application&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ingress-nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argocd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;finalizers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;resources-finalizer.argocd.argoproj.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://kubernetes.default.svc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ingress&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;project&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;ingress-nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repoURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://kubernetes.github.io/ingress-nginx&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetRevision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;4.11.1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;helm&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;contoller.service.loadBalancerIP&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;192.168.1.2&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;syncPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selfHeal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;We can also point ArgoCD at a folder in the Github repo to deploy K8s manifests from (paste the contents in &lt;code&gt;apps/templates/k8s-manifests.yaml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argoproj.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Application&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;k8s-manifests&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argocd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://kubernetes.default.svc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;project&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;yamls/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repoURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://github.com/[GITHUB_REPO_HERE].git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetRevision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HEAD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;recurse&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;syncPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selfHeal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ignoreDifferences&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;group&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;jsonPointers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;/spec/replicas&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;On top of that, we can allow ArgoCD to manage also itself with the following Application (paste the contents in &lt;code&gt;apps/templates/argo-cd.yaml&lt;/code&gt;):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argoproj.io/v1alpha1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Application&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argo-cd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argocd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;finalizers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;resources-finalizer.argocd.argoproj.io&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;destination&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://kubernetes.default.svc&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;argocd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;project&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;default&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;charts/argo-cd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;repoURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://github.com/[GITHUB_REPO_HERE].git&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;targetRevision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;HEAD&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;syncPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;automated&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;prune&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selfHeal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Finally, ensure everything is up to date in your Github Repo, and deploy ArgoCD!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s1"&gt;&amp;#39;Getting Started!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm install -n argocd argo-cd charts/argo-cd/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="deploy-your-first-manifest-via-git"&gt;Deploy Your First Manifest Via Git
&lt;/h2&gt;&lt;p&gt;If you take a look at the pods present in the &lt;code&gt;argocd&lt;/code&gt; namespace, there should now be a plethora of pods present and running! Now check in and ensure everything went smoothly by logging into the ArgoCD Admin Panel:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Delpoy your `apps/` for the first time (you only have to do this once)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;helm template apps/helm template apps/ &lt;span class="p"&gt;|&lt;/span&gt; kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Get the admin password for the WebUI (if this doesn&amp;#39;t return anything run it in bash ;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl get secret -n argocd argocd-initial-admin-secret --template&lt;span class="o"&gt;={{&lt;/span&gt;.data.password&lt;span class="o"&gt;}}&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; base64 --decode
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Port Forward the WebUI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl port-forward -n argocd service/argo-cd-argocd-server 8080:443
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then go to &lt;a class="link" href="https://localhost:8080" target="_blank" rel="noopener"
&gt;localhost:8080&lt;/a&gt; and login with the user &lt;code&gt;admin&lt;/code&gt; and the admin password from the previous step.
&lt;img src="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/argo-screenshot.jpg"
width="1802"
height="885"
srcset="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/argo-screenshot_hu_59c6d774790fcb9d.jpg 480w, https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/argo-screenshot_hu_4e7af5275b5f57e3.jpg 1024w"
loading="lazy"
alt="ArgoCD Screenshot"
class="gallery-image"
data-flex-grow="203"
data-flex-basis="488px"
&gt;&lt;/p&gt;
&lt;p&gt;Now that ArgoCD is running, let&amp;rsquo;s put it to the test by deploying something without &lt;code&gt;kubectl&lt;/code&gt;. Paste the following file into &lt;code&gt;yamls/test.yaml&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;apiVersion&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;apps/v1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;kind&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http-deployment&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;replicas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;strategy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;RollingUpdate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;rollingUpdate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;maxSurge&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;selector&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;matchLabels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;template&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;metadata&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;spec&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;containers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;http&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;httpd&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;imagePullPolicy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Always&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="nt"&gt;containerPort&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Then &lt;code&gt;git add . &amp;amp;&amp;amp; git commit -m 'Added test yaml' &amp;amp;&amp;amp; git push&lt;/code&gt; that critter. After waiting for a brief moment, you will then notice in the ArgoCD WebUI that a new deployment is present, and a new pod has spawned!
&lt;img src="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/argo-screenshot2.jpg"
width="2105"
height="444"
srcset="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/argo-screenshot2_hu_eb365a258c33cbe.jpg 480w, https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/argo-screenshot2_hu_921968d97d25b0f4.jpg 1024w"
loading="lazy"
alt="ArgoCD K8s Manifest Screenshot"
class="gallery-image"
data-flex-grow="474"
data-flex-basis="1137px"
&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;img src="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/sponge-bob-victory-screech.gif"
width="333"
height="200"
srcset="https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/sponge-bob-victory-screech_hu_25059d4fbe803a58.gif 480w, https://www.micahbird.com/p/how-to-setup-argocd-the-homelab-way/sponge-bob-victory-screech_hu_39af6c9b93fd61f5.gif 1024w"
loading="lazy"
alt="Spongebob Victory Screetch GIF"
class="gallery-image"
data-flex-grow="166"
data-flex-basis="399px"
&gt;&lt;/p&gt;
&lt;p&gt;You can now deploy all of your K8s manifests via Git, and bask in all the benefits of version control! Need to undo something you applied? Deploy a new service? Change a ConfigMap? Just make your changes, commit and push them, and you are off to the races!&lt;/p&gt;
&lt;p&gt;On top of that, you can now deploy your cluster from scratch with a single command! For reference, the completed directory structure and files are &lt;a class="link" href="https://github.com/MicahBird/argocd-setup-demo" target="_blank" rel="noopener"
&gt;available on Github!&lt;/a&gt; Enjoy!&lt;/p&gt;
&lt;h3 id="the-single-command"&gt;The Single Command
&lt;/h3&gt;&lt;p&gt;Apply your GitHub repo secret, then all you need to run is:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;kubectl create ns argocd &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; helm install -n argocd argo-cd charts/argo-cd/ &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; helm template apps/ &lt;span class="p"&gt;|&lt;/span&gt; kubectl apply -f -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>How to fix WebRTC connection issues on Ungoogled Chromium</title><link>https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/</link><pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/</guid><description>&lt;img src="https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/cover.jpg" alt="Featured image of post How to fix WebRTC connection issues on Ungoogled Chromium" /&gt;&lt;h2 id="preamble"&gt;Preamble
&lt;/h2&gt;&lt;p&gt;I noticed that when updating &lt;a class="link" href="https://github.com/ungoogled-software/ungoogled-chromium" target="_blank" rel="noopener"
&gt;Ungoogled Chromium&lt;/a&gt;, seemingly randomly WebRTC would stop working and as a result apps like Discord would fail to connect when joining voice calls. Searching online didn&amp;rsquo;t yield any similar issues, but after some hunting in &lt;code&gt;chrome://flags/&lt;/code&gt;, I found a fix!&lt;/p&gt;
&lt;h2 id="testing-webrtc"&gt;Testing WebRTC
&lt;/h2&gt;&lt;p&gt;First, make sure that indeed your WebRTC isn&amp;rsquo;t working and not some odd fluke, &lt;a class="link" href="https://theanam.github.io/webrtc-test-suite/" target="_blank" rel="noopener"
&gt;by using this test suite&lt;/a&gt;, it should show the &amp;ldquo;Peer connection did not work&amp;rdquo; error:
&lt;img src="https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/webrtc-error-sceenshot.jpg"
width="804"
height="718"
srcset="https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/webrtc-error-sceenshot_hu_fb4c7e8dd93cbbbd.jpg 480w, https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/webrtc-error-sceenshot_hu_896b45e22d8d4603.jpg 1024w"
loading="lazy"
alt="WebRTC Test Suite Error Screenshot"
class="gallery-image"
data-flex-grow="111"
data-flex-basis="268px"
&gt;&lt;/p&gt;
&lt;h2 id="the-fix"&gt;The Fix
&lt;/h2&gt;&lt;p&gt;Simply go to &lt;code&gt;chrome://flags/#webrtc-ip-handling-policy&lt;/code&gt; and change the value from &lt;code&gt;Disable non proxied udp&lt;/code&gt; to &lt;code&gt;Default&lt;/code&gt;, relaunch chromium, and run the WebRTC test suite again. You should see that WebRTC is working now!
&lt;img src="https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/webrtc-success-sceenshot.jpg"
width="816"
height="718"
srcset="https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/webrtc-success-sceenshot_hu_4ccd7c135902b928.jpg 480w, https://www.micahbird.com/p/how-to-fix-webrtc-connection-issues-on-ungoogled-chromium/webrtc-success-sceenshot_hu_6b16b3fec7a316f3.jpg 1024w"
loading="lazy"
alt="WebRTC Test Suite Success Screenshot"
class="gallery-image"
data-flex-grow="113"
data-flex-basis="272px"
&gt;&lt;/p&gt;
&lt;p&gt;Hopefully this guide helped you and leave a comment if you have any feedback!&lt;/p&gt;
&lt;p&gt;The version of Chrome that I tested this fix on is &lt;code&gt;115.0.5790.170 (Official Build, ungoogled-chromium) (arm64)&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Switching from Linux to macOS and creating a bastardized OS in the process</title><link>https://www.micahbird.com/p/switching-from-linux-to-macos-and-creating-a-bastardized-os-in-the-process/</link><pubDate>Tue, 01 Aug 2023 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/p/switching-from-linux-to-macos-and-creating-a-bastardized-os-in-the-process/</guid><description>&lt;img src="https://www.micahbird.com/p/switching-from-linux-to-macos-and-creating-a-bastardized-os-in-the-process/cover.jpg" alt="Featured image of post Switching from Linux to macOS and creating a bastardized OS in the process" /&gt;&lt;h2 id="why"&gt;Why..?
&lt;/h2&gt;&lt;p&gt;In my transition to going to university, I came to the realization that I will have to forgo my desktop for something that is portable &lt;strong&gt;and&lt;/strong&gt; powerful. I spent many weeks trying to find the perfect &amp;ldquo;gamer&amp;rdquo; laptop that would fit my compute need (it felt a lot like those &amp;ldquo;pick two&amp;rdquo; triangles between performance, portability, and battery life) but I could not find anything that could compare to battery life and performance of the Apple Silicon lineup.&lt;/p&gt;
&lt;h2 id="dealing-with-the-defaults"&gt;Dealing with the &lt;code&gt;defaults&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;MacOS&amp;rsquo;s default settings definitely force you to &amp;ldquo;think different&amp;rdquo; however, you can change all settings with the &lt;code&gt;defaults&lt;/code&gt; command which under the hood writes to Apple&amp;rsquo;s &lt;code&gt;.plist&lt;/code&gt; files. This can be especially useful for automating your macOS setup!&lt;/p&gt;
&lt;p&gt;Here are some commands that work as of macOS 13 Ventura:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Enable Reduce Motion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;defaults write com.apple.Accessibility ReduceMotionEnabled -int &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show Airplay in menu bar when active&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;defaults write com.apple.airplay showInMenuBarIfPresent -int &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Save to disk (not to iCloud) by default&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool &lt;span class="nb"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Save screenshots to Pictures/Screenshots folder.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/Pictures/Screenshots&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;defaults write com.apple.screencapture location -string &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/Pictures/Screenshots&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# # Set a blazingly fast keyboard repeat rate, and make it happen more quickly.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# # (The KeyRepeat option requires logging out and back in to take effect.)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;defaults write NSGlobalDomain InitialKeyRepeat -int &lt;span class="m"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;defaults write NSGlobalDomain KeyRepeat -int &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Although I&amp;rsquo;ve learned the hard way that all defaults commands are not equal, and can change with each macOS update. So, if your copy/pasting a &lt;code&gt;defaults&lt;/code&gt; command be sure that your not adding unnecessary clutter to your entries!&lt;/p&gt;
&lt;p&gt;Also, if you don&amp;rsquo;t know what the specific &lt;code&gt;defaults&lt;/code&gt; command would be for an option that you would like to change, simply follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;cd /tmp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Store current defaults in file: &lt;code&gt;defaults read &amp;gt; before&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Make a change to your system.&lt;/li&gt;
&lt;li&gt;Store new defaults in file: &lt;code&gt;defaults read &amp;gt; after&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Diff the files: &lt;code&gt;diff before after&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="the-positives-of-macos"&gt;The positives of macOS!
&lt;/h2&gt;&lt;h3 id="loving-homebrew"&gt;Loving Homebrew
&lt;/h3&gt;&lt;p&gt;When I was first introduced to &lt;code&gt;brew&lt;/code&gt; I was put off by the idea of using Ruby for package management, but it has slowly but surely grown on me! If you are used to &lt;code&gt;apt&lt;/code&gt;, &lt;code&gt;brew&lt;/code&gt; will make you feel right at home!&lt;/p&gt;
&lt;h3 id="yay-cmus-yay"&gt;Yay CMUS! Yay!
&lt;/h3&gt;&lt;p&gt;CMUS is one of my favorite music players for Linux systems, and to my surprise, it has native macOS support! It&amp;rsquo;s a simple &lt;code&gt;brew install cmus&lt;/code&gt; away!&lt;/p&gt;
&lt;p&gt;Pro-tip: If you are experiencing odd audio crackling when skipping tracks or during playback, try running the command &lt;code&gt;set audio=ao&lt;/code&gt; to see if it fixes it! The only downside to this option is when switching audio devices (e.g. headphones to builtin speakers) you must stop playback with &lt;code&gt;v&lt;/code&gt; and then play the track again!&lt;/p&gt;
&lt;h3 id="gui-linux-applications-on-macos"&gt;GUI Linux Applications on macOS
&lt;/h3&gt;&lt;p&gt;While I will probably flesh this out into a full blown guide later down the line, for those that are technically inclined, it&amp;rsquo;s possible to run normal Linux GNOME, Qt, and other GUI apps almost like they are native through &lt;a class="link" href="https://www.xquartz.org/" target="_blank" rel="noopener"
&gt;XQuartz&lt;/a&gt; and &lt;a class="link" href="https://github.com/lima-vm/lima" target="_blank" rel="noopener"
&gt;Lima&lt;/a&gt;!&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;But, it wasn&amp;rsquo;t all sunshine and rainbows, in my opinion, there is a lot to be desired coming from the KDE desktop environment and the Linux realm.&lt;/p&gt;
&lt;h2 id="restoring-basic-functionality"&gt;Restoring &amp;lsquo;basic functionality&amp;rsquo;
&lt;/h2&gt;&lt;h3 id="external-mouse-scrolling-direction"&gt;External Mouse Scrolling Direction
&lt;/h3&gt;&lt;p&gt;Something that you will notice almost immediately when using an external mouse is that it uses natural scrolling directions (or the same scrolling direction as the trackpad). While you can disable natural scrolling to fix the issue, I prefer to keep natural scrolling enabled on the trackpad, but normal scrolling on the mouse. Sadly there is no native way to accomplish this, &lt;a class="link" href="https://github.com/pilotmoon/Scroll-Reverser/releases" target="_blank" rel="noopener"
&gt;but you can install an open source app to fix it!&lt;/a&gt; You can also install Scroll Reverser via &lt;code&gt;brew&lt;/code&gt; with the following command:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;brew install --cask scroll-reverser&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="disabling-bluetooth-when-sleeping"&gt;Disabling Bluetooth When Sleeping
&lt;/h3&gt;&lt;p&gt;Something you may also notice if you don&amp;rsquo;t have AirPods (like myself) is that Bluetooth headphones stay connected to your computer even when asleep. To quote NakeyJakey:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a class="link" href="https://youtu.be/8vfbVVkwdQw?t=113" target="_blank" rel="noopener"
&gt;&amp;ldquo;I don&amp;rsquo;t want that.&amp;rdquo;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Luckily there is another open source app that can solve that! Simply install &lt;a class="link" href="https://github.com/odlp/bluesnooze/" target="_blank" rel="noopener"
&gt;Bluesnooze&lt;/a&gt; with the command &lt;code&gt;brew install bluesnooze&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="an-actual-alt-tab"&gt;An Actual Alt-Tab
&lt;/h3&gt;&lt;p&gt;While macOS does have a builtin application switcher (triggered with &lt;code&gt;command + tab&lt;/code&gt;), it leaves a lot to be desired because it only allows you switch applications, not windows. Fear not! There is yet another open source app called [AltTab])(&lt;a class="link" href="https://alt-tab-macos.netlify.app" target="_blank" rel="noopener"
&gt;https://alt-tab-macos.netlify.app&lt;/a&gt;) that solves exactly this issue!&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://alt-tab-macos.netlify.app" target="_blank" rel="noopener"
&gt;&lt;img src="https://d33wubrfki0l68.cloudfront.net/23fa1c980411cdc7c2967d25b132497fa9f596d4/e533a/public/demo/frontpage.jpg"
loading="lazy"
alt="AltTab Screenshot"
&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;But now, onto the fun stuff&amp;hellip;&lt;/p&gt;
&lt;h2 id="creating-a-tiling-window-manager-experience-with-yabai--skhd"&gt;Creating a tiling window manager experience with &lt;code&gt;yabai&lt;/code&gt; + &lt;code&gt;skhd&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;While there are many guides that cover this setup in detail, if you are getting started, I would highly recommend following along with this tutorial from Josean Martinez.&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/k94qImbFKWE"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;p&gt;This is where a lot of the OS bastardization comes from, as once you got a basic setup going there is an infinite amount of ways to customize your setup, and make it foreign from macOS. In my experience, I have found the following configuration options particularly useful:&lt;/p&gt;
&lt;h5 id="configskhdskhdrc"&gt;&lt;code&gt;~/.config/skhd/skhdrc&lt;/code&gt;
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Displaying a notification when restating Yabai&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ctrl + alt - r : yabai --restart-service &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; osascript -e &lt;span class="s1"&gt;&amp;#39;display notification &amp;#34;Yabai has been restarted.&amp;#34; with title &amp;#34;Yabai&amp;#34;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Open a new Kitty terminal window without starting another instance of the app:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alt - a : osascript -e &lt;span class="s1"&gt;&amp;#39;tell application &amp;#34;System Events&amp;#34; to tell process &amp;#34;kitty&amp;#34; to click menu item &amp;#34;New OS Window&amp;#34; of menu &amp;#34;Shell&amp;#34; of menu bar 1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Open a new Firefox window without starting another instance of the app:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alt - w : osascript -e &lt;span class="s1"&gt;&amp;#39;tell application &amp;#34;System Events&amp;#34; to tell process &amp;#34;Firefox&amp;#34; to click menu item &amp;#34;New Window&amp;#34; of menu &amp;#34;File&amp;#34; of menu bar 1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Open a new terminal instance&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;alt - &lt;span class="k"&gt;return&lt;/span&gt; : open -n /Applications/kitty.app
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Put computer to sleep as a shortcut&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cmd - escape : osascript -e &lt;span class="s1"&gt;&amp;#39;tell app &amp;#34;System Events&amp;#34; to sleep&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Balance out tree of windows (resize to occupy same area)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;shift&lt;/span&gt; + alt - e : yabai -m space --balance
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Move window to space # and focus it without disabling SIP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;shift&lt;/span&gt; + alt - &lt;span class="m"&gt;1&lt;/span&gt; : yabai -m window --space 1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;yabai -m query --spaces &lt;span class="p"&gt;|&lt;/span&gt; jq --argjson index &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;index&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -r &lt;span class="s1"&gt;&amp;#39;(.[] | select(.index == $index).windows[0]) as $wid | if $wid then &amp;#34;yabai -m window --focus \&amp;#34;&amp;#34; + ($wid | tostring) + &amp;#34;\&amp;#34;&amp;#34; else &amp;#34;skhd --key \&amp;#34;ctrl - &amp;#34; + (map(select(.&amp;#34;native-fullscreen&amp;#34; == 0)) | index(map(select(.index == $index))) + 1 % 10 | tostring) + &amp;#34;\&amp;#34;&amp;#34; end&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="configyabaiyabairc"&gt;&lt;code&gt;~/.config/yabai/yabairc&lt;/code&gt;
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Focus window after another window is closed rather than losing focus&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yabai -m signal --add &lt;span class="nv"&gt;event&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;window_destroyed &lt;span class="nv"&gt;active&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes &lt;span class="nv"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;yabai -m query --windows --window &amp;amp;&amp;gt; /dev/null || yabai -m window --focus mouse &amp;amp;&amp;gt; /dev/null || yabai -m window --focus \$(yabai -m query --windows --space | jq .[0].id) &amp;amp;&amp;gt; /dev/null&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Disable management for certain apps&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yabai -m rule --add &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;System Information&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;manage&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;off
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yabai -m rule --add &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;^System Settings&lt;/span&gt;$&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;manage&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;off
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yabai -m rule --add &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;^Raycast&lt;/span&gt;$&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;manage&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;off
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;There are many more open sources tools that I didn&amp;rsquo;t go into in this post, such as &lt;a class="link" href="https://hammerspoon.org/" target="_blank" rel="noopener"
&gt;Hammerspoon&lt;/a&gt; for creating more advanced automation written with Lua, or even &lt;a class="link" href="https://github.com/FelixKratz/SketchyBar" target="_blank" rel="noopener"
&gt;Sketchybar&lt;/a&gt; for creating your own custom menu bar! I&amp;rsquo;d highly recommend taking a gander at those tools, and maybe someday I&amp;rsquo;ll make a part 2 two this post, time will tell!&lt;/p&gt;</description></item><item><title>Search</title><link>https://www.micahbird.com/search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/search/</guid><description/></item><item><title>Tech Talks Hall of Fame</title><link>https://www.micahbird.com/tech-talks-hall-of-fame/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.micahbird.com/tech-talks-hall-of-fame/</guid><description>&lt;p&gt;The following are tech talks that I find comedic, learned lessons from, introduced me to new tech, and/or all of the above!&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Last Upated: December 31, 2025&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="zoz---pwned-by-the-owner-what-happens-when-you-steal-a-hackers-computer-defcon-18"&gt;Zoz - Pwned By The Owner: What Happens When You Steal a Hackers Computer (DEFCON 18)
&lt;/h2&gt;&lt;p&gt;This was the first DEFCON talk I watched and it&amp;rsquo;s an entertaining hacker tale! Although the technology discussed is ancient by modern standards, the security principles still ring true. &lt;strong&gt;Includes NFSW imagery, viewer discretion is advised.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/XNnOQfshLVU"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="charles-stross---dude-you-broke-the-future-34c3"&gt;Charles Stross - Dude, you broke the Future! (34C3)
&lt;/h2&gt;&lt;p&gt;An excellent talk by Science Fiction writer Charles Stross. Although this talk is from 2017, the topics brought up are still important in this tech landscape. &lt;em&gt;Cameras that have a cryptographic signature might be coming sooner than you think.&lt;/em&gt;&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://media.ccc.de/v/34c3-9270-dude_you_broke_the_future/oembed"
frameborder="0"
allowfullscreen
title="media.ccc.de Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="zoz---and-thats-how-i-lost-my-other-eyeexplorations-in-data-destruction-defcon-23"&gt;Zoz - And That&amp;rsquo;s How I Lost My Other Eye&amp;hellip;Explorations in Data Destruction (DEFCON 23)
&lt;/h2&gt;&lt;p&gt;Yet another entertaining watch from Zoz, on physical and chemical methods of making sure your browser history is gone for good. &lt;em&gt;Don&amp;rsquo;t try this at home.&lt;/em&gt;&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/-bpX8YvNg6Y"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="alex---finding-tony-abbotts-passport-number-and-entering-the-do-not-get-arrested-challenge-2020"&gt;&amp;ldquo;Alex&amp;rdquo; - Finding Tony Abbott&amp;rsquo;s Passport Number and entering the Do Not Get Arrested Challenge (2020)
&lt;/h2&gt;&lt;p&gt;A fun watch from the one and only famed hacker &amp;ldquo;Alex&amp;rdquo; and why it&amp;rsquo;s important to not post everything you do to Instagram ;)&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/IWT6Y0YDJUo"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="hunter-scott---rt-to-win-50-lines-of-python-made-me-the-luckiest-guy-on-twitter-defcon-24"&gt;Hunter Scott - RT to Win: 50 lines of Python made me the luckiest guy on Twitter (DEFCON 24)
&lt;/h2&gt;&lt;p&gt;Although this talk is now horribly outdated because of the Twitter takeover, it&amp;rsquo;s inspirational of what&amp;rsquo;s possible with just a tiny Python script and some automation magic!&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/iAOOdYsK7MM"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="droogie---go-null-yourself-defcon-27"&gt;droogie - Go NULL Yourself (DEFCON 27)
&lt;/h2&gt;&lt;p&gt;A cautionary tale on the real life consequences of poor data validation.&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/TwRE2QK1Ibc"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="adam-savage---failure-defcon-17"&gt;Adam Savage - Failure (DEFCON 17)
&lt;/h2&gt;&lt;p&gt;A phenomenal talk on failure from former Mythbuster Adam Savage.&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/lxH4scJ_dxw"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="luke-muscat---the-prototype-that-was-banned-from-halfbrick-gdc-2013"&gt;Luke Muscat - The Prototype that was Banned from Halfbrick (GDC 2013)
&lt;/h2&gt;&lt;p&gt;A confounding talk on the repercussions of what can happen when a game becomes too engaging, and how it takes a toll on players.&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://www.youtube.com/embed/t9WMNuyjm4w"
allowfullscreen
title="YouTube Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;h2 id="cory-doctorow---a-post-american-enshittification-resistant-internet-39c3"&gt;Cory Doctorow - A post-American, enshittification-resistant internet (39C3)
&lt;/h2&gt;&lt;p&gt;This is Cory Doctorow at his peak, rather than verbally shrugging his sholders at the prospect of enshittification, he provides some ways we could fight back.&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
&lt;iframe loading="lazy"
src="https://media.ccc.de/v/39c3-a-post-american-enshittification-resistant-internet/oembed"
frameborder="0"
allowfullscreen
title="media.ccc.de Video"
&gt;
&lt;/iframe&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Send me an email if you think there is a tech talk that belongs here!&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>