<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:fh="http://purl.org/syndication/history/1.0">
  <title>Posts tagged: linux Archive</title>
  <id>https://go.waylonwalker.com/tags/linux/archive/atom.xml</id>
  <updated>2026-04-18T10:36:00Z</updated>
  <subtitle>All posts with the tag &#34;linux&#34;</subtitle>
  <link href="https://go.waylonwalker.com/tags/linux/" rel="alternate" type="text/html"></link>
  <link href="https://go.waylonwalker.com/tags/linux/archive/atom.xml" rel="self" type="application/atom+xml"></link>
  <link href="https://go.waylonwalker.com/tags/linux/atom.xml" rel="current" type="application/atom+xml"></link>
  <author>
    <name>Waylon Walker</name>
  </author>
  <generator uri="https://github.com/WaylonWalker/markata-go">markata-go</generator>
  <fh:complete></fh:complete>
  <entry>
    <title>stow local ignore</title>
    <id>https://go.waylonwalker.com/stow-local-ignore/</id>
    <updated>2026-04-18T10:36:00Z</updated>
    <published>2026-04-18T10:36:00Z</published>
    <link href="https://go.waylonwalker.com/stow-local-ignore/" rel="alternate" type="text/html"></link>
    <summary type="text">Stow comes with a local and global ignore list that you can use to ignore certain files or directories.</summary>
    <content type="html">&lt;p&gt;Stow comes with a local and global ignore list that you can use to ignore&#xA;certain files or directories.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;If you put Perl regular expressions, one per line, in a .stow-local-ignore&#xA;file within any top level package directory, in which case any file or&#xA;directory within that package matching any of these regular expressions will&#xA;be ignored. In the absence of this package-specific ignore list, Stow will&#xA;instead use the contents of ~/.stow-global-ignore, if it exists. If neither&#xA;the package-local or global ignore list exist, Stow will use its own built-in&#xA;default ignore list, which serves as a useful example of the format of these&#xA;ignore list files:&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Example given from the docs&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RCS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.+,v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CVS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.\#.+       # CVS conflict files / emacs lock files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.cvsignore&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.svn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_darcs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.hg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.gitignore&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\.gitmodules&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.+~          # emacs backup files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\#.*\#       # emacs autosave files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;^/README.*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;^/LICENSE.*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;^/COPYING&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;reference&#34;&gt;Reference &lt;a href=&#34;#reference&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.gnu.org/software/stow/manual/html_node/Types-And-Syntax-Of-Ignore-Lists.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.gnu.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.gnu.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.gnu.org/software/stow/manual/html_node/Types-And-Syntax-Of-Ignore-Lists.html&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 No one under 18 installs Linux</title>
    <id>https://go.waylonwalker.com/thought-944/</id>
    <updated>2026-03-09T11:46:15Z</updated>
    <published>2026-03-09T11:46:15Z</published>
    <link href="https://go.waylonwalker.com/thought-944/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://youtube.com/clip/UgkxVmrLKcNieh6FffrnSu2-iXD8SVFzSCzj?si=rV4k2piZM3Jcq9w0</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;1HeALnI-gVg&#34; title=&#34;✂️ No one under 18 installs Linux&#34; playlabel=&#34;Play: ✂️ No one under 18 installs Linux&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;😂 Should I be concerned that My 12yo installed Arch BTW on his own?&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 POV: You install Clawdbot on VPS - YouTube</title>
    <id>https://go.waylonwalker.com/thought-927/</id>
    <updated>2026-02-16T10:22:40Z</updated>
    <published>2026-02-16T10:22:40Z</published>
    <link href="https://go.waylonwalker.com/thought-927/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/shorts/bof8TkZkr1I</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;bof8TkZkr1I&#34; title=&#34;POV: You install Clawdbot on VPS&#34; playlabel=&#34;Play: POV: You install Clawdbot on VPS&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Use a linux vps, It’s easy, just follow these simple instructions.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setup bambu-studio in distrobox</title>
    <id>https://go.waylonwalker.com/setup-bambu-studio-in-distrobox/</id>
    <updated>2025-12-06T21:17:39Z</updated>
    <published>2025-12-06T21:17:39Z</published>
    <link href="https://go.waylonwalker.com/setup-bambu-studio-in-distrobox/" rel="alternate" type="text/html"></link>
    <summary type="text">gpus-are-awesome and I need one for Bambu Studio to be usable in a distrobox. Adding the flag to bind mounts the nvidia devices and sets up the necessary...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/gpus-are-awesome/&#34; class=&#34;wikilink&#34; data-title=&#34;gpus are awesome&#34; data-description=&#34;GPU&amp;#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...&#34; data-date=&#34;2025-12-03&#34; data-preview=&#34;GPU&amp;#39;s are awesome. I just added gpu support to my bambu-studio distrobox and its flying! On my wayland based system the native package has never worked,...&#34;&gt;gpus are awesome&lt;/a&gt; and I need one for Bambu Studio to be usable in a&#xA;distrobox.  Adding the &lt;code&gt;--nvidia&lt;/code&gt; flag to &lt;code&gt;distrobox create&lt;/code&gt; bind mounts the&#xA;nvidia &lt;code&gt;/dev/&lt;/code&gt; devices and sets up the necessary environment variables.  Once&#xA;we are in there are a couple of packages to install to make it work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox create --name bambu-studio --image archlinux:latest --nvidia&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox enter bambu-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S nvidia-utils lib32-nvidia-utils vulkan-icd-loader&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvidia-smi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;glxinfo &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; gprep OpenGL&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -Syu --needed base-devel git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://aur.archlinux.org/paru-bin.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; paru-bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;makepkg -si&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S bambustudio-bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bambu-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox-export --app bambu-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Microsoft keeps losing - YouTube</title>
    <id>https://go.waylonwalker.com/thought-870/</id>
    <updated>2025-11-15T17:51:23Z</updated>
    <published>2025-11-15T17:51:23Z</published>
    <link href="https://go.waylonwalker.com/thought-870/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://youtu.be/AyuMdNoL1Vs?si=QQ3BoV33nXR_TPnC</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;AyuMdNoL1Vs&#34; title=&#34;Microsoft keeps losing&#34; playlabel=&#34;Play: Microsoft keeps losing&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;👏👏👏preach it prime!  M$ continues to prove that they are not making products for you something else is affoot and shit you don’t want is shoved down your throat and forced on you.&lt;/p&gt;&#xA;&lt;p&gt;Prime points out that the agentic is prompt injected itself😂.  Rather than making a better os experience it’s assuming you are stupid and need everything done for you.  But what I don’t get here in the text scaling example.  Why the F does it not just fix it for me.  When I ask the machine to make text bigger it puts a flashy circle where to click.  This is a one time setup for someone who gives no fucks to remember how to do it.  Why is the machine doing this weird hand holding watching us do it’s work rather than just doing it? I like the pattern when you change display setting it gives you a counter that reverts everything if for some reason shit is so bad you can’t even see it.  Do that, not this help me click bs.&lt;/p&gt;&#xA;&lt;p&gt;Now in parallel we have steam making Linux desktop better and better.  Allowing you to just access the hardware you own to do what you want to do with it.  Providing a fantastic hands off out of the box experience for the price of the hardware.  No ongoing fees, no upgrade cycle, soft lock, aribraray cutoff date, tpm bs requirements.  Good stuff as it was supposed to be created.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 2025 The Year Of The Linux Desktop - YouTube</title>
    <id>https://go.waylonwalker.com/thought-850/</id>
    <updated>2025-10-10T13:14:37Z</updated>
    <published>2025-10-10T13:14:37Z</published>
    <link href="https://go.waylonwalker.com/thought-850/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=GQJZ96l-XQ4</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;GQJZ96l-XQ4&#34; title=&#34;Apple Introduces The Year Of The Linux Desktop!&#34; playlabel=&#34;Play: Apple Introduces The Year Of The Linux Desktop!&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The Year of the Linux Desktop is a meme, every year is the year of the Linux desktop as it gains rounding errors of market share.  Outside of Linux nerds, developers that use servers on the regular, cheap asses reviving old hardware that is dead in the eyes of other OS’s, the average user wont even notice a difference with the right distro.  I ran bazzite with plasma for over a year, It would be super beginner friendly while allowing users customization on levels never seen on non-Linux machines.  Other than adobe, roblox, and EA games with easy anti-cheat most users probably aren’t going to run in to any issues.  They probably wont even notice at this point, which is where the meme comes in.  Why would anyone switch if its not noticeably different for the average user, they wont, until what is working for them stops working for them.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 &#34;Pacman is currently in use, please wait.&#34;</title>
    <id>https://go.waylonwalker.com/thought-833/</id>
    <updated>2025-09-16T01:26:33Z</updated>
    <published>2025-09-16T01:26:33Z</published>
    <link href="https://go.waylonwalker.com/thought-833/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://bbs.archlinux.org/viewtopic.php?id=67729</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://bbs.archlinux.org/viewtopic.php?id=67729&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/bbs.archlinux.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/bbs.archlinux.org.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;&amp;#34;Pacman is currently in use, please wait.&amp;#34; / Pacman &amp;amp; Package Upgrade Issues / Arch Linux Forums&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;bbs.archlinux.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I ran into this issue today, never have I ever before though. Omarchy looking a bit sus on me.  This was even after a fresh boot, no pacman process running. just realized I forgot to check yay which it has installed for me.   I had to force it in.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm /var/lib/pacman/db.lck&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tar over ssh</title>
    <id>https://go.waylonwalker.com/tar-over-ssh/</id>
    <updated>2025-09-13T10:50:42Z</updated>
    <published>2025-09-13T10:50:42Z</published>
    <link href="https://go.waylonwalker.com/tar-over-ssh/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I learned how to use tar over ssh to save hours in file transfers. I keep all of my projects in ~/git (very creative I know, I&#39;ve done it for years and...</summary>
    <content type="html">&lt;p&gt;Today I learned how to use tar over ssh to save hours in file transfers.  I&#xA;keep all of my projects in ~/&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; (very creative I know, I’ve done it for years&#xA;and haven’t changed).  I just swapped out my main desktop from bazzite to&#xA;hyprland, and wanted to get all of my projects back.  Before killing my&#xA;bazzite install I moved everything over (16GB of many small files), it took&#xA;over 14 hours, maybe longer.  I had started in the morning and just let it&#xA;churn.&lt;/p&gt;&#xA;&lt;p&gt;This was not going to happen for re-seeding all of my projects on my new&#xA;system, I knew there had to be a better way, I looked at rsync, but for seeding&#xA;I ran into this tar over ssh technique and it only took me 6m51s to pull all of&#xA;my projects off of my remote server.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh user@192.168.1.100 &lt;span class=&#34;s1&#34;&gt;&amp;#39;tar -C /tank/git -cpf - .&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/git&amp;#34;&lt;/span&gt; -xpf -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>bash timestamp</title>
    <id>https://go.waylonwalker.com/bash-timestamp/</id>
    <updated>2025-08-22T15:35:36Z</updated>
    <published>2025-08-22T15:35:36Z</published>
    <link href="https://go.waylonwalker.com/bash-timestamp/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I needed to make a backup of some config. I wanted to add a timestamp so that I knew when the backup was made. This would make unique backups easy, and...</summary>
    <content type="html">&lt;p&gt;Today I needed to make a backup of some config.  I wanted to add a timestamp so&#xA;that I knew when the backup was made.  This would make unique backups easy, and&#xA;I could tell when they were made.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp configfile configfile.backup.&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date %s&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you want to decrypt the timestamp into something more human readable.  You&#xA;can list backup files, strip out the timestamp, and then convert it to a human&#xA;readable date.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/ls &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep backup &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/configfile.backup.//&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; date -d @&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;or just throw it to the date command by hand.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date -d @1755895402&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 DHH on X: &#34;Rewiring your muscle memory for copy/paste when you...</title>
    <id>https://go.waylonwalker.com/thought-799/</id>
    <updated>2025-08-17T15:39:42Z</updated>
    <published>2025-08-17T15:39:42Z</published>
    <link href="https://go.waylonwalker.com/thought-799/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://x.com/dhh/status/1956645753255805151</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://x.com/dhh/status/1956645753255805151&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/x.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/x.com.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;External Link&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;X (formerly Twitter) · x.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Today I learned that its spelled “Rite of Passage”, and is short for ritual.  Mac has so many of these things that are just different, but do not let you reconfigure them and you are stuck with it.  copy / paste I don’t get, the 3 times I’ve touched a mac since I was a kid its frustrated me.  Is it lock in? or is it them actually thinking this is the right way and you all shall do as we say.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Omarchy is on the move</title>
    <id>https://go.waylonwalker.com/thought-789/</id>
    <updated>2025-08-07T14:28:34Z</updated>
    <published>2025-08-07T14:28:34Z</published>
    <link href="https://go.waylonwalker.com/thought-789/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://world.hey.com/dhh/omarchy-is-on-the-move-8f848fa4</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://world.hey.com/dhh/omarchy-is-on-the-move-8f848fa4&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://world.hey.com/dhh/avatar-fb368b1ee9b185dc2a09b03eabdb61678dd55244&#34; alt=&#34;Omarchy is on the move — Omarchy has been improving at a furious pace. Since it was first released on June 26, I&amp;#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-to-Linux enthusiasts. We have about 3,500 early adopters on the Omarchy Discord, 250 pull requests processed, and one heck of an awesome Arch...&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Omarchy is on the move — Omarchy has been improving at a furious pace. Since it was first released on June 26, I&amp;#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-to-Linux enthusiasts. We have about 3,500 early adopters on the Omarchy Discord, 250 pull requests processed, and one heck of an awesome Arch...&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Omarchy is on the move&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Omarchy has been improving at a furious pace. Since it was first released on June 26, I&amp;#39;ve pushed out 18(!) new releases together with a rapidly growing community of collaborators, users, and new-t...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;world.hey.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;It’s facinating how many people are making the jump from mac/windows, not just to linux, not just to archlinux, but to a full on tiling window manager.  DHH has omakub and omarchy.  Omakub is advertised as easy and for beginners, but many are skipping right over that to go straight for the hard stuff.&lt;/p&gt;&#xA;&lt;p&gt;DHH mentions hyprland here, one thing I think he is missing is that this is the first real mainstream tiling window manager that is a competitor to i3, awesomewm, qtile  that runs Wayland.  I think they were able to pull a bunch of great benefits such as lack of screen tearing and animations from this.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dolphin Remote Storage Previews</title>
    <id>https://go.waylonwalker.com/dolphin-remote-storage-previews/</id>
    <updated>2025-08-02T14:58:09Z</updated>
    <published>2025-08-02T14:58:09Z</published>
    <link href="https://go.waylonwalker.com/dolphin-remote-storage-previews/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve got a few samba shares going in my homelab, and I&#39;m struggling finding a great app to scroll through vacation photos with my wife. I want something...</summary>
    <content type="html">&lt;p&gt;I’ve got a few samba shares going in my &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt;, and I’m struggling finding a&#xA;great app to scroll through vacation photos with my wife.  I want something&#xA;intuitive, non intimidating, and just works.  Turns out that the default file&#xA;browser application for hyprland works great, but you need to enable previews&#xA;for remote storage for it to work for my use case here.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34; alt=&#34;3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34;/ data-glightbox=&#34;description: 3940267e-3727-4e7b-8f7f-aebb49d79326.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 An Ode To My 10-Year-Old Thinkpad T440</title>
    <id>https://go.waylonwalker.com/thought-761/</id>
    <updated>2025-07-25T01:33:47Z</updated>
    <published>2025-07-25T01:33:47Z</published>
    <link href="https://go.waylonwalker.com/thought-761/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://mbrizic.com/blog/thinkpad-t440/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://mbrizic.com/blog/thinkpad-t440/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mbrizic.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mbrizic.com.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;An Ode To My 10-Year-Old Thinkpad T440&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;mbrizic.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I like reading about old hardware and how to keep it running, sending shit out to e-waste after barely using it for a year makes my skin crawl.  I find it interesting how most of these resurrections start with a linux build, and the author giving in and going for linux for the first time and enjoying being able to use something they thought was useless for real work.&lt;/p&gt;&#xA;&lt;p&gt;That being said I have weird thoughts similar to this guy about being able to take a machine and write a novel somewhere off in the distance, but any time I try to do real work form any laptop these days the ergonomics become so unappealing that I tend to just not do anything away from my desk.  Theres something that sounds so great about opening vim on old hardware that could last for hours, sip on coffee and write away, but it never works out like that in practice.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 2025-07-10 Notes</title>
    <id>https://go.waylonwalker.com/thought-756/</id>
    <updated>2025-07-18T15:26:28Z</updated>
    <published>2025-07-18T15:26:28Z</published>
    <link href="https://go.waylonwalker.com/thought-756/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://pype.dev/2025-07-10-notes/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://pype.dev/2025-07-10-notes/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/pype.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/pype.dev.ico&#34;&gt;&#xA;    &lt;/a&gt;&lt;div class=&#34;embed-card-image&#34;&gt;&lt;a href=&#34;https://pype.dev/2025-07-10-notes/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;      &lt;img src=&#34;https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png&#34; alt=&#34;2025-07-10 Notes | Nic Payne — &amp;lt;a href=&#34; 2025-07-09-notes=&#34;&#34; &#34;=&#34;&#34; class=&#34;wikilink glightbox&#34; data-title=&#34;2025-07-09 Notes&#34; data-description=&#34;What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...&#34; data-date=&#34;2025-07-09&#34;/ data-glightbox=&#34;description: 2025-07-10 Notes | Nic Payne — &amp;lt;a href=&#34;&gt;2025-07-09 Notes&lt;/a&gt; from yesterday I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]] Been cleaning up my z&amp;#34; loading=&amp;#34;lazy&amp;#34;&amp;gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;2025-07-10 Notes | Nic Payne&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;&lt;a href=&#34;/2025-07-09-notes/&#34; class=&#34;wikilink&#34; data-title=&#34;2025-07-09 Notes&#34; data-description=&#34;What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...&#34; data-date=&#34;2025-07-09&#34; data-preview=&#34;What a nightmare this glossary plugin turns out to be, it broke my site. I had it really close, then one more change asked for to the llm, an LGTM and did...&#34;&gt;2025-07-09 Notes&lt;/a&gt; from yesterday I have temporal stuff kind of going with postiz in a windsurf session working on [[thoughts-to-nostr]] Been cleaning up my z&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;pype.dev&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&lt;p&gt;big fan of eza and dust, I like these aliases to have some common commands at my fingertips.  I often use the tree command and yes it sometimes goes too deep to actually be useful.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;lt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;eza -T --level=2&amp;#39;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;# Tree view, 2 levels deep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ltt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;eza -T --level=3&amp;#39;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;# Tree view, 3 levels deep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;du1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dust -d 1&amp;#39;&lt;/span&gt;                   &lt;span class=&#34;c1&#34;&gt;# Show only 1 level deep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;du2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dust -d 2&amp;#39;&lt;/span&gt;                   &lt;span class=&#34;c1&#34;&gt;# Show 2 levels deep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Vimothée Chalamet shares his new favorite shell command from a...</title>
    <id>https://go.waylonwalker.com/thought-755/</id>
    <updated>2025-07-18T12:56:59Z</updated>
    <published>2025-07-18T12:56:59Z</published>
    <link href="https://go.waylonwalker.com/thought-755/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=0-SUk1G9xMg</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;0-SUk1G9xMg&#34; title=&#34;- YouTube&#34; playlabel=&#34;Play: - YouTube&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Love this dudes casual dry humor style, not afraid to poke fun at things with his dry ass satire.  that being said, fc is new and as a long time fan of up arrow and !! I will be using this often.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fc</title>
    <id>https://go.waylonwalker.com/fc/</id>
    <updated>2025-07-18T07:52:53Z</updated>
    <published>2025-07-18T07:52:53Z</published>
    <link href="https://go.waylonwalker.com/fc/" rel="alternate" type="text/html"></link>
    <summary type="text">I am a linux user through and through. Desktop, server, vms, containers, everything except my phone is linux. With this I spend a lot of time in the...</summary>
    <content type="html">&lt;p&gt;I am a linux user through and through.  Desktop, server, vms, containers,&#xA;everything except my phone is linux.  With this I spend a lot of time in the&#xA;terminal, and have been a long time user of &lt;code&gt;!!&lt;/code&gt; to rerun the last command, but&#xA;with the ability to tack something on at the beginning or end.&lt;/p&gt;&#xA;&lt;p&gt;TIL about &lt;code&gt;fc&lt;/code&gt;, which opens the last command in your shell history in your&#xA;&lt;code&gt;$EDITOR&lt;/code&gt; or pass in your editor &lt;code&gt;-e nvim&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://manned.org/fc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/manned.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/manned.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;man fc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;rcap-of-how--works&#34;&gt;Rcap of how !! works &lt;a href=&#34;#rcap-of-how--works&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;!!&lt;/code&gt; pronounces &lt;code&gt;bang bang&lt;/code&gt; and will run the last command in your history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!! &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ls -l | wc -l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo !!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo ls -l | wc -l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;!!:s/-l/-l &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo ls -l /tmp | wc -l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fc-enters-the-chat&#34;&gt;&lt;code&gt;fc&lt;/code&gt; enters the chat &lt;a href=&#34;#fc-enters-the-chat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now making complex edits in your shell can be a bit of a chore, so &lt;code&gt;fc&lt;/code&gt; moves&#xA;this work to your &lt;code&gt;$EDITOR&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;fc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This pops open your $EDITOR with the last command in your history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ls&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;l&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wc&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;l&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/9d624d65-de40-459b-9566-6e5c833cabcc.png&#34; alt=&#34;screenshot-2025-07-18T13-21-46-775Z.png&#34;/ data-glightbox=&#34;description: screenshot-2025-07-18T13-21-46-775Z.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;shell-history&#34;&gt;Shell History &lt;a href=&#34;#shell-history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;fc&lt;/code&gt; shows up in shell history, but &lt;code&gt;!!&lt;/code&gt; does not, &lt;code&gt;!!&lt;/code&gt; gets replaced by the&#xA;command that it becomes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;up-arrow&#34;&gt;Up Arrow &lt;a href=&#34;#up-arrow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;yaya yaya, I know you can also &lt;code&gt;up-arrow c-e&lt;/code&gt;, but what fun is that, it’s barely a&#xA;flex.  &lt;code&gt;fc&lt;/code&gt; just looks big brained and like you really know what you are doing.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Quickshell</title>
    <id>https://go.waylonwalker.com/thought-751/</id>
    <updated>2025-07-16T00:30:48Z</updated>
    <published>2025-07-16T00:30:48Z</published>
    <link href="https://go.waylonwalker.com/thought-751/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://quickshell.org/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://quickshell.org/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Quickshell&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;A fully user customizable desktop shell&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;quickshell · quickshell.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This has to be the most incredible looking Desktop experience I’ve ever seen, riced to the nines, more polished than macos, more features than kde plasma, this looks incredible and I want to try it and feel it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://quickshell.org/assets/showcase/end4.mp4&#34;&gt;https://quickshell.org/assets/showcase/end4.mp4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Stop Complaining About Ubuntu...Just Switch To Arch Already! -...</title>
    <id>https://go.waylonwalker.com/thought-750/</id>
    <updated>2025-07-15T01:48:46Z</updated>
    <published>2025-07-15T01:48:46Z</published>
    <link href="https://go.waylonwalker.com/thought-750/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=HbBF-bmGe2I</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;HbBF-bmGe2I&#34; title=&#34;Stop Complaining About Ubuntu...Just Switch To Arch Already!&#34; playlabel=&#34;Play: Stop Complaining About Ubuntu...Just Switch To Arch Already!&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;DT says it so well in this video, I’ve never really been one to shit on software projects, with maybe a VERY small handful of exceptions.  The shitting on ubuntu always rubbed me wrong, shitting on flatpak and snap I never got, shitting on systemd because of Leonard Pottering I never got, DT puts it in such good words here.  If you don’t like it you are probably not the target audience.&lt;/p&gt;&#xA;&lt;p&gt;If Ubuntu is too bloated, don’t try to debloat it, this is not windows, we have options, Ubuntu is one option and so much is intertwined together in something like Ubuntu if you think you want to try to &lt;em&gt;“debloat”&lt;/em&gt; it good luck.  If you have a problem with Snaps, this is probably not for you.  You are probably looking for a distro with more control, probably something that you choose everything for.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 I was wrong - YouTube</title>
    <id>https://go.waylonwalker.com/thought-733/</id>
    <updated>2025-07-04T16:53:47Z</updated>
    <published>2025-07-04T16:53:47Z</published>
    <link href="https://go.waylonwalker.com/thought-733/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=ZH3iKbEiks0</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;ZH3iKbEiks0&#34; title=&#34;I was wrong btw&#34; playlabel=&#34;Play: I was wrong btw&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Never did I think I would see the day that theprimeagen decided to run &lt;a href=&#34;https://archlinux.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/archlinux.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/archlinux.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;archlinux&lt;/a&gt;.  Furthermore him to start ricing it, EVEN furthermore, &lt;a href=&#34;https://www.youtube.com/watch?v=pVI_smLgTY0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Pewdiepie runs arch&lt;/a&gt; now, and thinks you should too?? and is promoting it on one of the &lt;a href=&#34;https://socialblade.com/youtube/lists/top/100/subscribers/all/global&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/socialblade.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/socialblade.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;largest YouTube channels ever&lt;/a&gt;??  Even DHH is getting in the mix with &lt;a href=&#34;https://omarchy.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/omarchy.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/omarchy.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;omarchy&lt;/a&gt; Such a cool transistion to see everyone find their way to linux and diving deep into the freedom and customization.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>gpg setup for kdewallet</title>
    <id>https://go.waylonwalker.com/gpg-setup-for-kdewallet/</id>
    <updated>2025-07-04T13:52:43Z</updated>
    <published>2025-07-04T13:52:43Z</published>
    <link href="https://go.waylonwalker.com/gpg-setup-for-kdewallet/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;m trying to setup gpg for kdewallet on archlinux with hyprland so that brave shuts up. I&#39;ve tried this, but brave still complains about the wallet setup,...</summary>
    <content type="html">&lt;p&gt;I’m trying to setup gpg for kdewallet on archlinux with hyprland so that brave&#xA;shuts up.  I’ve tried this, but brave still complains about the wallet setup,&#xA;so this post is to be continued.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S gnupg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg --full-generate-key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# use RSA&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# key length 4096&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# passphrase&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg --list-keys&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>brightnessctl adjust screen brightness</title>
    <id>https://go.waylonwalker.com/brightnessctl-adjust-screen-brightness/</id>
    <updated>2025-06-11T08:42:36Z</updated>
    <published>2025-06-11T08:42:36Z</published>
    <link href="https://go.waylonwalker.com/brightnessctl-adjust-screen-brightness/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I discovered to adjust the screen brightness on my AwesomeWM machine. Its a command line utility that you can use to adjust the brightness of your...</summary>
    <content type="html">&lt;p&gt;Today I discovered &lt;code&gt;brightnessctl&lt;/code&gt; to adjust the screen brightness on my&#xA;AwesomeWM machine.  Its a command line utility that you can use to adjust the&#xA;brightness of your screen.  A command line interface like this gives you the&#xA;ability to bind keys with something like [[xbindkeys]] or your window manager&#xA;configuration.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install brightnessctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S brightnessctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that you have it installed you can use it to adjust the brightness of your&#xA;screen, this worked particularly well for my laptop screen, I don’t think this&#xA;works for monitors, in my experience they are usually controlled by the built&#xA;in osd.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Increase brightness by 10%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; +10%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Decrease brightness by 10%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 10%-&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set brightness to 50%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 50%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set brightness to 100%&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brightnessctl &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; 100%&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;on my machine I had to use `sudo` to run the command, otherwise I got the following error:&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Can&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;t modify brightness: Permission denied&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You should run this program with root privileges.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alternatively, get write permissions &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; device files.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert ...</title>
    <id>https://go.waylonwalker.com/thought-668/</id>
    <updated>2025-06-07T01:05:25Z</updated>
    <published>2025-06-07T01:05:25Z</published>
    <link href="https://go.waylonwalker.com/thought-668/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=bAmJQuX4-ak&amp;t=1684s</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;bAmJQuX4-ak&#34; title=&#34;Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me?&#34; playlabel=&#34;Play: Arch Wizard Brodie Robertson vs My Mac Life - Will He Convert Me?&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I’ve never heard of niri, or a scrolling window manager, it looks quite interesting.  I think tiling window manager misses out on named sessions and hotkey straight to tmux sessions, Brodi mentions not using tmux right before this segment.  Niri looks quite interesting, but looks like it suffers specificity.  maybe there are other tools that allow me to jump straight to something like brave, or steam, but I don’t see how I could jump to a specific terminal.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>unset multiple environment variables</title>
    <id>https://go.waylonwalker.com/unset-multiple-environment-variables/</id>
    <updated>2025-06-03T11:21:11Z</updated>
    <published>2025-06-03T11:21:11Z</published>
    <link href="https://go.waylonwalker.com/unset-multiple-environment-variables/" rel="alternate" type="text/html"></link>
    <summary type="text">You can unset multiple environment variables at once. I did not know this was a thing, its something that ended up happening organically on a call and asking...</summary>
    <content type="html">&lt;p&gt;You can unset multiple environment variables at once. I did not know this was a&#xA;thing, its something that ended up happening organically on a call and asking&#xA;someone to run &lt;code&gt;unset&lt;/code&gt;.  They had never done it before and did not know how it&#xA;works, but did exactly as I said instead of what I meant.  I like this handy&#xA;shortcut doing it in one line rather than each one individually, I will be&#xA;using this in the future. You might need this for something like&#xA;&lt;a href=&#34;/running-aws-cli-commands-with-localstack/&#34; class=&#34;wikilink&#34; data-title=&#34;running aws cli commands with localstack&#34; data-description=&#34;Upon first running an cli command using localstack you might end up with the following error.&#34; data-date=&#34;2022-10-17&#34; data-preview=&#34;Upon first running an cli command using localstack you might end up with the following error.&#34;&gt;running aws cli commands with localstack&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;unset&lt;/span&gt; AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>i3lock on AwesomeWM</title>
    <id>https://go.waylonwalker.com/i3lock-on-awesomewm/</id>
    <updated>2025-06-02T14:40:56Z</updated>
    <published>2025-06-02T14:40:56Z</published>
    <link href="https://go.waylonwalker.com/i3lock-on-awesomewm/" rel="alternate" type="text/html"></link>
    <summary type="text">is a fantastic lockscreen for tiling window managers.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;i3lock&lt;/code&gt; is a fantastic lockscreen for tiling window managers.&lt;/p&gt;&#xA;&lt;p&gt;If you are using a tiling window manager within a public space you need to add&#xA;a lockscreen.  I have one machine that I take with me to a public space.  Its&#xA;secure enough that I can leave it, but not secure enough that I want to leave&#xA;it unlocked.  So when I need to leave it behind for the restroom I need to lock&#xA;it up.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://man.archlinux.org/man/extra/i3lock/i3lock.1.en&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/man.archlinux.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/man.archlinux.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arch wiki&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S i3lock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install i3lock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that you have &lt;code&gt;i3lock&lt;/code&gt; installed lets lock that screen.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a pure white flashbang&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a black background&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock -c &lt;span class=&#34;m&#34;&gt;000000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a custom color&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock -c 2e1330&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# lock it with a wallpaper&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i3lock -c &lt;span class=&#34;m&#34;&gt;000000&lt;/span&gt; ~/Pictures/Wallpapers/mywallpaper.png&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can use your window manager or something more generic like xbindkeys to set&#xA;a hotkey. This way you don’t have to open a terminal and type out the command&#xA;every time you leave your desk.  You can just press something like &lt;code&gt;SUPER+L&lt;/code&gt;&#xA;like you would on other OS’s.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fancy&#34;&gt;Fancy &lt;a href=&#34;#fancy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you like it a bit fancier, you can use &lt;code&gt;i3lock-fancy&lt;/code&gt;, it can blur,&#xA;pixelate, and greyscale your current screen.  I did not really like this&#xA;because you can still tell what is going on the screen.  It’s probably secure&#xA;enough and looks better, but I went with regular &lt;code&gt;i3lock&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S i3lock-fancy-git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install i3lock-fancy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Command Line | gitignore.io / docs</title>
    <id>https://go.waylonwalker.com/thought-653/</id>
    <updated>2025-05-29T16:22:42Z</updated>
    <published>2025-05-29T16:22:42Z</published>
    <link href="https://go.waylonwalker.com/thought-653/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://docs.gitignore.io/install/command-line</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://docs.gitignore.io/install/command-line&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://docs.gitignore.io/~gitbook/ogimage/-LIvvKfMD3PkcDQCppzH&#34; alt=&#34;Command Line | gitignore.io / docs — To run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Command Line | gitignore.io / docs — To run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Command Line | gitignore.io / docs&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;To run gitignore.io from your command line you need an active internet connection and an environment function. You need to add a function to your environment that lets you access the gitignore.io API.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;docs.gitignore.io&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is a very interesting cli, its so simple.  I stumbled accross the &lt;code&gt;gi&lt;/code&gt; command awhile back and was like pfft, I dont want to install something for that.  Didn’t even realize that you &lt;strong&gt;don’t&lt;/strong&gt; install it, its just http.  Their &lt;em&gt;install&lt;/em&gt; instructions lead you to putting a curl funtion in your bashrc.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; gi&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; curl -sLw &lt;span class=&#34;se&#34;&gt;\&amp;#34;\\\n\&amp;#34;&lt;/span&gt; https://www.toptal.com/developers/gitignore/api/&lt;span class=&#34;se&#34;&gt;\$&lt;/span&gt;@ &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This now has me wondering “What else can build like this?”&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Linux Is About Choice</title>
    <id>https://go.waylonwalker.com/linux-is-about-choice/</id>
    <updated>2025-05-27T13:37:00Z</updated>
    <published>2025-05-27T13:37:00Z</published>
    <link href="https://go.waylonwalker.com/linux-is-about-choice/" rel="alternate" type="text/html"></link>
    <summary type="text">This Luke Smith video came across my feed Linux, Bitcoin: When Tech Projects Become &#34;Too Popular...&#34; Don&#39;t forget the goal.. It&#39;s interesting to hear his...</summary>
    <content type="html">&lt;p&gt;This Luke Smith video came across my feed &lt;a href=&#34;https://www.youtube.com/watch?v=0-lS8Y79L7g&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Linux, Bitcoin: When Tech Projects&#xA;Become “Too Popular…” Don’t forget the&#xA;goal.&lt;/a&gt;.  It’s interesting to hear&#xA;his perspective about Linux, FOSS, Free Software being the end goal, and that we&#xA;are loosing sight of the goal.  This sentiment really aligns with the early&#xA;FOSS movement from Stallman, but was this ever the goal?&lt;/p&gt;&#xA;&lt;h2 id=&#34;taken-over-by-apathetic-interests&#34;&gt;Taken over by apathetic interests &lt;a href=&#34;#taken-over-by-apathetic-interests&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Luke talks about these projects getting taken over by people with no passion&#xA;for the original goal of freedom and privacy.  They want the projects to grow,&#xA;get bigger, and become mainstream.  This feels exactly the opposite of&#xA;anything Luke would want, so my bias alarm goes off here.  Honestly I do see&#xA;some of the grossness of projects like this that were grassroots, for freedom&#xA;and privacy get taken over for money grabs.  I’m completely out on bitcoin so I&#xA;cannot make any comment there, but I Truly believe that the Linux kernel is&#xA;not a money grab as Luke makes the new face of bitcoin sound.&lt;/p&gt;&#xA;&lt;h2 id=&#34;corporate-backing-is-ok&#34;&gt;Corporate backing is OK &lt;a href=&#34;#corporate-backing-is-ok&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m going to take a counter point here from Luke, that it’s OK for Companies to&#xA;be made, and money to be made on FOSS.  While the Nats relicense has caused a&#xA;Kerfuffle, I appreciate their side of the relicense, as a they discussed on &lt;a href=&#34;https://www.youtube.com/watch?v=hQ7nekmDFfQ&amp;amp;t=2300s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;The&#xA;Changelog: NATS and the CNCF kerfuffle | Derek Collison shares NATS/Synadia&#xA;story&lt;/a&gt;.  They had a&#xA;struggle to make money as a small project in the Linux Foundation.  Large&#xA;companies would not pay for their service as they have already paid into the&#xA;foundation.  They chose to relicense new versions of the server so such that it&#xA;would become FOSS after 2 years.  This gives them time to pay for their development.&lt;/p&gt;&#xA;&lt;p&gt;Rug pulls, price gouging, and other bad behaviors aside Funding is overall good&#xA;for the FOSS community.  It is a good thing that Torvalds is able to make a&#xA;living from the work he has done on the kernel.&lt;/p&gt;&#xA;&lt;h2 id=&#34;foss-hardware&#34;&gt;FOSS hardware &lt;a href=&#34;#foss-hardware&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Luke mentions FOSS hardware in the video.  I think this is great and really&#xA;plays to the longevity of a product and limiting e-waste.  I think the main&#xA;goal here is not necessarily openness, but repairability.  At least for me.  I&#xA;could not care to build out ram or hard drives from scratch, but what I do care&#xA;is that I can repair my hardware.   I don’t want my investments into hardware&#xA;to go to waste and be thrown away because of a component failure.  I get that&#xA;we are largely there on the mobile side, and that really sucks.&lt;/p&gt;&#xA;&lt;h2 id=&#34;choice&#34;&gt;Choice &lt;a href=&#34;#choice&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really feel like the goal of Linux is choice, its not locked into FOSS.  FOSS&#xA;is a great option, and is really only there for Linux, and not at all an option&#xA;for Windows or MacOS.  I’d argue that at the beginning of the Linux project&#xA;there was no choice your only real option was closed source all the way&#xA;around.  These days not only do we have the freedom to choose an OS, but we can&#xA;choose how we want our Linux.  If you want to deploy Linux at a large company,&#xA;and you are willing to pay for support from someone like Red Hat or Canonical&#xA;that’s an option, but its not the only option.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=bWX7jI9t7j8&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;macOS Power User Asks DistroTube: Which Linux Never Breaks?&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;In this interview DT talks about getting new hardware sent to him, and they ask&#xA;do you want us to put Linux on it?  His answer, No, it doesn’t matter, I wont&#xA;use it anyways.  You see DT is not here purely for the Linux, he is here for&#xA;the choice.  His choice is to pick every last config option, and tailor every&#xA;installed executable to fit his needs.  His preferences happen to be in the&#xA;full Free as in Freedom realm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;infinite-linux&#34;&gt;Infinite Linux &lt;a href=&#34;#infinite-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Linux has infinite options of configuration, hundreds of distros, hundreds of&#xA;desktop environments.  You can Choose a Floating window manager, Tiling window&#xA;manager, or go full TTY with no graphical environment.  With MacOS and Windows&#xA;you get it the way they decide you get it with a level of configuration that&#xA;pales in comparison to what you get on Linux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;immutable-linux&#34;&gt;Immutable Linux &lt;a href=&#34;#immutable-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A very recent and modern example of this is immutable or cloud native distros,&#xA;the idea is that they are more like an appliance, giving you less freedom and&#xA;control than you typically would have on a normal bare metal install of linux,&#xA;&lt;code&gt;bootc&lt;/code&gt; is just really taking off this year.  I’m currently running one of&#xA;these distro’s called bazzite and I am really loving it.  I have a couple of&#xA;desktop applications that I install from the discover store as flatpaks, but&#xA;mosty I live in a fully custom distrobox that I put every ounce of ricing and&#xA;configuration that I want into.  For me it has been ultra reliable, rather than&#xA;rolling my own thing that is a combination of packages unique to me, I have&#xA;something that is rock hard in the community and I run versioned images of my&#xA;devtainer that make it easy for me to roll back on if something were to break.&lt;/p&gt;&#xA;&lt;p&gt;For me this is feedom, I get to fully control the environment I really care&#xA;about, my terminal.  I get a window manager with 9 workspaces that I can hotkey&#xA;to, and I never miss a game night with my kids due to some weird graphics issue.&lt;/p&gt;&#xA;&lt;h2 id=&#34;freedom&#34;&gt;Freedom &lt;a href=&#34;#freedom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In the end Linux was born of this freedom, and is an important part.  While its&#xA;great that there are players here that are able to make money, be good citizens&#xA;and give back, there are bad players.  Even if all the players are good not&#xA;everyone is going to agree and money will only spoil their hurt feelings even&#xA;more.  If Linux looses this freedom of choice and becomes something that you&#xA;only get littered with Closed source software, or on paid platforms, or imposes&#xA;any level of restrictions on to you its lost, and we need a new revolution to&#xA;rise in its ashes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;fin&#34;&gt;Fin &lt;a href=&#34;#fin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m trying to write more free flowing articles philosophical in nature.  There&#xA;are probably grammatical and spelling misttakes.  There are probably things I&#xA;will re-read in 6 months and not agree with, but these are my free flowing&#xA;thoughts right now. I think we are missing really good opinion pieces on the&#xA;internet these days. Too much AI generated, “Hello World”, shoulda read the&#xA;docs BS.  I subscribe to a lot of other good folks that give their real&#xA;opinions you can find them on my&#xA;&lt;a href=&#34;https://reader.waylonwalker.com/blogroll&#34;&gt;blogroll&lt;/a&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 The Worst OS - YouTube</title>
    <id>https://go.waylonwalker.com/thought-612/</id>
    <updated>2025-05-01T12:54:13Z</updated>
    <published>2025-05-01T12:54:13Z</published>
    <link href="https://go.waylonwalker.com/thought-612/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=8T5pyGiTPdE</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;8T5pyGiTPdE&#34; title=&#34;The Worst OS&#34; playlabel=&#34;Play: The Worst OS&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;How is usability and it doing the thing I paid for it to do a selling point??  Any time I’ve touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 The Worst OS - YouTube</title>
    <id>https://go.waylonwalker.com/thought-611/</id>
    <updated>2025-05-01T12:54:12Z</updated>
    <published>2025-05-01T12:54:12Z</published>
    <link href="https://go.waylonwalker.com/thought-611/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=8T5pyGiTPdE</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;8T5pyGiTPdE&#34; title=&#34;The Worst OS&#34; playlabel=&#34;Play: The Worst OS&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;How is usability and it doing the thing I paid for it to do a selling point??  Any time I’ve touched a windows machine in the past 7 years has felt awkward, I have no idea where things are now, but they look so much worse.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>backup distrobox image</title>
    <id>https://go.waylonwalker.com/backup-distrobox-image/</id>
    <updated>2025-04-09T17:35:50Z</updated>
    <published>2025-04-09T17:35:50Z</published>
    <link href="https://go.waylonwalker.com/backup-distrobox-image/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I&#39;m upgrading my distrobox, but don&#39;t want to end up in a situation where I can&#39;t get anything done becauase I work out of my distrobox.</summary>
    <content type="html">&lt;p&gt;Today I’m upgrading my distrobox, but don’t want to end up in a situation where&#xA;I can’t get anything done becauase I work out of my distrobox.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox stop devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox create --clone devtainer --name devtainer-20250409&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;distrobox enter devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Use pbpaste for clean shell history</title>
    <id>https://go.waylonwalker.com/use-pbpaste-for-clean-shell-history/</id>
    <updated>2025-03-17T12:00:00Z</updated>
    <published>2025-03-17T12:00:00Z</published>
    <link href="https://go.waylonwalker.com/use-pbpaste-for-clean-shell-history/" rel="alternate" type="text/html"></link>
    <summary type="text">Using for command substitution keeps sensitive or long URLs out of your shell history. Instead of typing , copy the URL to clipboard and run . This prevents...</summary>
    <content type="html">&lt;p&gt;Using &lt;code&gt;pbpaste&lt;/code&gt; for command substitution keeps sensitive or long URLs out of&#xA;your shell history. Instead of typing &lt;code&gt;git clone https://github.com/user/repo-with-long-name.git&lt;/code&gt;, copy the URL to clipboard and&#xA;run &lt;code&gt;git clone &amp;#34;$(pbpaste)&amp;#34;&lt;/code&gt;. This prevents the URL from appearing in&#xA;&lt;code&gt;~/.bash_history&lt;/code&gt; or &lt;code&gt;~/.zsh_history&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To get pbpaste working on both Xorg and Wayland, add this to your shell config:&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -v wl-copy&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;pbcopy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wl-copy&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pbpaste&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; wl-paste&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -v xclip&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;pbcopy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;xclip -selection clipboard&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pbpaste&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; xclip -selection clipboard -o&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The function approach (instead of alias) enables command substitution, while&#xA;the quotes around &lt;code&gt;$(pbpaste)&lt;/code&gt; handle spaces and special characters safely.&lt;/p&gt;&#xA;&lt;p&gt;Now you can use it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;More importantly secrets can stay out of your history.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;GITHUB_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_ACCESS_KEY_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DATABASE_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;pbpaste&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>aptitude why</title>
    <id>https://go.waylonwalker.com/aptitude-why/</id>
    <updated>2025-02-11T13:55:04Z</updated>
    <published>2025-02-11T13:55:04Z</published>
    <link href="https://go.waylonwalker.com/aptitude-why/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I ran into an interesting question, why am I being asked to configure tzdata while installing npm. Turns out that the cli has a why command that very...</summary>
    <content type="html">&lt;p&gt;Today I ran into an interesting question, why am I being asked to configure&#xA;tzdata while installing npm.  Turns out that the &lt;code&gt;aptitude&lt;/code&gt; cli has a why&#xA;command that very handily nails down why you have something installed on a&#xA;debian based system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-aptitude&#34;&gt;Install aptitude &lt;a href=&#34;#install-aptitude&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install aptitude&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-tzdata&#34;&gt;Why tzdata &lt;a href=&#34;#why-tzdata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now we can query why we need tzdata and see the full chain with the root&#xA;package being &lt;code&gt;npm&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@47685221fb82:/# aptitude why tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i   npm        Depends  node-gyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A node-gyp   Depends  gyp &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0.1+20200513gitcaa6002&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A gyp        Depends  python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Provides python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Depends  python3.12 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 3.12.3-0~&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3.12 Depends  tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>configure timezone</title>
    <id>https://go.waylonwalker.com/configure-tz/</id>
    <updated>2025-02-10T13:35:24Z</updated>
    <published>2025-02-10T13:35:24Z</published>
    <link href="https://go.waylonwalker.com/configure-tz/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I ran into this interactive prompt on ubuntu while installing node and npm, and I do not want to manually configure this interactively every time I run...</summary>
    <content type="html">&lt;p&gt;Today I ran into this interactive prompt on ubuntu while installing node and&#xA;npm, and I do not want to manually configure this interactively every time I&#xA;run an install, moreso in docker I do not have the interactive terminal to do&#xA;so.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Configuring tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; the geographic area in which you live. Subsequent configuration questions will narrow this down by presenting a list of cities, representing the &lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; zones in which they are located.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  1. Africa  2. America  3. Antarctica  4. Arctic  5. Asia  6. Atlantic  7. Australia  8. Europe  9. Indian  10. Pacific  11. Etc  12. Legacy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Geographic area:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-tzdata&#34;&gt;Why tzdata &lt;a href=&#34;#why-tzdata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Checking aptitude why tzdata it shows that the chain goes back through npm.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@47685221fb82:/# aptitude why tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i   npm        Depends  node-gyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A node-gyp   Depends  gyp &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0.1+20200513gitcaa6002&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A gyp        Depends  python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Provides python3:any&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3    Depends  python3.12 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&amp;gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 3.12.3-0~&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;i A python3.12 Depends  tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;the-solution-configure-tzdata&#34;&gt;The solution, configure tzdata &lt;a href=&#34;#the-solution-configure-tzdata&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;America/Chicago&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;noninteractive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install tzdata -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -fs /usr/share/zoneinfo/&lt;span class=&#34;nv&#34;&gt;$TZ&lt;/span&gt; /etc/localtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure -f noninteractive tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition tip&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;DEBIAN_FRONTEND=noninteractive&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;This is required, because apt installing tzdata will trigger the&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;interactive prompt.  You will manually configure it in the next two steps.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>bc</title>
    <id>https://go.waylonwalker.com/bc/</id>
    <updated>2025-02-08T09:30:08Z</updated>
    <published>2025-02-08T09:30:08Z</published>
    <link href="https://go.waylonwalker.com/bc/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=03KsS09YS4E&amp;amp;t=610s&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=03KsS09YS4E&amp;amp;t=610s&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Today I learned about the basic calculator, bc.  At the very end of this video&#xA;prime uses it to add numbers in vim.&lt;/p&gt;&#xA;&lt;h2 id=&#34;repl&#34;&gt;REPL &lt;a href=&#34;#repl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can start a calculator repl at the command line, by running bc.&lt;/p&gt;&#xA;&lt;h2 id=&#34;vim&#34;&gt;Vim &lt;a href=&#34;#vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since bc supports standard unix pipes you can easily pipe data from vim into bc&#xA;and back out using &lt;code&gt;!!bc&lt;/code&gt;.  All you need is a string of math on the line you&#xA;want to calculate, go to normal mode and run &lt;code&gt;!!bc&lt;/code&gt; to get the answer.&lt;/p&gt;&#xA;&lt;p&gt;Traditionally I will open my system calculator or ipython to do something like&#xA;this.&lt;/p&gt;&#xA;&lt;p&gt;To keep the equation and the result in the same line you can send the equation&#xA;to stderr and the result to stdout using tee.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:.!tee &amp;gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;cat &amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Releases · bootandy/dust</title>
    <id>https://go.waylonwalker.com/thought-535/</id>
    <updated>2025-01-19T18:58:42Z</updated>
    <published>2025-01-19T18:58:42Z</published>
    <link href="https://go.waylonwalker.com/thought-535/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/bootandy/dust?tab=readme-ov-file</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/bootandy/dust?tab=readme-ov-file&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://opengraph.githubassets.com/e8f11d2f70fa5b3f4583014e5549abf3897896cd11d88613fc7e3a654df1c5d9/bootandy/dust&#34; alt=&#34;GitHub - bootandy/dust: A more intuitive version of du in rust — A more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - bootandy/dust: A more intuitive version of du in rust — A more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;GitHub - bootandy/dust: A more intuitive version of du in rust&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;A more intuitive version of du in rust. Contribute to bootandy/dust development by creating an account on GitHub.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;dust is one of my favorite rust rewrite tools.  Its so useful for narrowing down file system bloat and cleaning up some disk space on your nearly full disks.  It runs right in your terminal and gives you a nice bar graph on the top directories in use.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.wayl.one/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>nvim-manager</title>
    <id>https://go.waylonwalker.com/nvim-manager/</id>
    <updated>2025-01-12T21:14:19Z</updated>
    <published>2025-01-12T21:14:19Z</published>
    <link href="https://go.waylonwalker.com/nvim-manager/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently built a cli application as a nearly-one-shot-app called nvim-manager. It manages your nvim dotfiles install.</summary>
    <content type="html">&lt;p&gt;I recently built a cli application as a nearly-one-shot-app called&#xA;&lt;a href=&#34;https://github.com/waylonwalker/nvim-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-manager&lt;/a&gt;. It manages your&#xA;nvim dotfiles install.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/20f800f1-64a6-43a3-93eb-e805b07d86b1.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/20f800f1-64a6-43a3-93eb-e805b07d86b1.png&#34; alt=&#34;screenshot-2025-01-31T21-21-40-707Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-01-31T21-21-40-707Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;why&#34;&gt;Why &lt;a href=&#34;#why&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p class=&#34;chat-left&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;chat-right&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;chat-left&#34;&gt;&lt;/p&gt;&#xA;&lt;p class=&#34;chat-right&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-is-nvim-manager-any-better&#34;&gt;How is nvim manager any better &lt;a href=&#34;#how-is-nvim-manager-any-better&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;nvim-manager allows you to install pinned versions of your dotfiles, your&#xA;friends dotfiles, and distros in ~/.config.  This allows you to have stable&#xA;versions that will not break installed while you change things.&lt;/p&gt;&#xA;&lt;p&gt;I’m sure most of us have experienced the pain of installing one plugin, only to&#xA;update all of your plugins and break something.&lt;/p&gt;&#xA;&lt;p&gt;Or, you have small changes on every machine you use, because they are all just&#xA;a bit different and now you have big merge conflicts to deal with.&lt;/p&gt;&#xA;&lt;p&gt;All of this aside you can install a distro to get you by, or a known working&#xA;version of your own dotfiles.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-all-these-versions-in-config&#34;&gt;So all these versions in ~/.config &lt;a href=&#34;#so-all-these-versions-in-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;ya, thats the magic of &lt;code&gt;NVIM_APPNAME&lt;/code&gt;, I can boot up any of these intalled&#xA;working versions in an instant with &lt;code&gt;NVIM_APPNAME=nvim-waylonwalker-v0.0.1 nvim&lt;/code&gt;.  I can still cowboy up and break my main install, but as long as I am&#xA;diligent to keep these installs untouched I will always have a version to fall&#xA;back to in that moment of need.&lt;/p&gt;&#xA;&lt;h2 id=&#34;so-what-do-i-need-to-do&#34;&gt;So what do I need to do? &lt;a href=&#34;#so-what-do-i-need-to-do&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;start tagging your dotfiles as you hit stable versions&lt;/li&gt;&#xA;&lt;li&gt;Install &lt;code&gt;curl https://i.jpillora.com/waylonwalker/nvim-manager | bash&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Add some env variables to your shell startup (~/.bashrc or ~/.zshrc for example)&lt;/li&gt;&#xA;&lt;li&gt;Install that pinned version of your dotfiles &lt;code&gt;nvim-manager install v0.0.1&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install a distro &lt;code&gt;nvim-manager install --distro astronvim&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here are those environment variables I was talking about, set them to use your&#xA;dotfiles repo, name it what you like, and set your NVIM_APPNAME if you want to&#xA;default to a stable &lt;code&gt;nvim&lt;/code&gt; and force yourself to &lt;code&gt;unset NVIM_APPNAME&lt;/code&gt; to live&#xA;on the edge.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-nvim-manager&#34;&gt;Install nvim-manager &lt;a href=&#34;#install-nvim-manager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install curl git unzip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/MordechaiHadad/bob &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob install nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob use nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ~/.local/share/bob/nvim-bin/nvim ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/waylonwalker/nvim-manager &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-your-own-dotfiles&#34;&gt;Install your own dotfiles &lt;a href=&#34;#install-your-own-dotfiles&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Setup with the following environment variables.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# nvim-manager&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_REPO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://github.com/WaylonWalker/devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvim/.config/nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim-waylonwalker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;-v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note I like installer by jpillora, I &lt;a href=&#34;/self-host/&#34; class=&#34;glossary-term&#34; title=&#34;Self hosting is the act of hosting your own applications and services without using a SAS provider. This is typically done with your own hardware, but there...&#34;&gt;self host&lt;/a&gt; it for my own security, but&#xA;feel free to download from GH if it makes you feel safer.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;ubuntu-container-speedrun&#34;&gt;Ubuntu Container Speedrun &lt;a href=&#34;#ubuntu-container-speedrun&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a speedrun to getting nvim up and running in an ubuntu container.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -euxo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install curl git unzip -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LsSf https://astral.sh/uv/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/MordechaiHadad/bob &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv bob ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob install nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bob use nightly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ~/.local/share/bob/nvim-bin/nvim ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/waylonwalker/nvim-manager &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv nvim-manager ~/.local/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_REPO&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://github.com/WaylonWalker/devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nvim/.config/nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_INSTALL_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim-waylonwalker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_APPNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NVIM_MANAGER_PREFIX&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;-v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install v0.0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro lazyvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro astronvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro nvchad&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro kickstart&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim-manager install --distro lunarvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# plugins like treesiter need gcc and make&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install gcc make -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;America/Chicago&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DEBIAN_FRONTEND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;noninteractive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install tzdata -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -fs /usr/share/zoneinfo/&lt;span class=&#34;nv&#34;&gt;$TZ&lt;/span&gt; /etc/localtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure -f noninteractive tzdata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Some of the mason installs need npm&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install nodejs npm -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# plugins like telescope require ripgrep&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install fzf ripgrep -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;give-it-a-star&#34;&gt;Give it a Star &lt;a href=&#34;#give-it-a-star&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’d appreciate a star if you find this app useful.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/waylonwalker/nvim-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/waylonwalker/nvim-manager&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Why You Should Game on Linux (feat. GloriousEggroll of Nobara)...</title>
    <id>https://go.waylonwalker.com/thought-524/</id>
    <updated>2025-01-11T01:38:57Z</updated>
    <published>2025-01-11T01:38:57Z</published>
    <link href="https://go.waylonwalker.com/thought-524/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=QwpTAk_IiyU&amp;t=28s</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;QwpTAk_IiyU&#34; title=&#34;Why You Should Game on Linux (feat. GloriousEggroll of Nobara)&#34; playlabel=&#34;Play: Why You Should Game on Linux (feat. GloriousEggroll of Nobara)&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This man is responsible for making gaming on linux what it is today.  Such a heartfelt story to hear that reviving his dad’s machine was at the core of what drove him to do what he has done for the wider gaming on linux community.  Update on your schedule, remove all the tracking and bloatware, this is what drove him to start using linux before making it accessible for his Dad.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;But really do update, this is not your 2002 PHP box, things need updated and regular updates help the process.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 curl with partial files | daniel.haxx.se</title>
    <id>https://go.waylonwalker.com/thought-487/</id>
    <updated>2024-12-30T21:29:52Z</updated>
    <published>2024-12-30T21:29:52Z</published>
    <link href="https://go.waylonwalker.com/thought-487/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://daniel.haxx.se/blog/2024/12/30/curl-with-partial-files/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://daniel.haxx.se/blog/2024/12/30/curl-with-partial-files/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://daniel.haxx.se/blog/wp-content/uploads/2021/04/curl-polynesia-puzzle.jpg&#34; alt=&#34;curl with partial files — Back in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful way when building curl command lines in ways not previously possible - with almost all existing command line options. curl command lines … Continue reading curl with partial files →&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: curl with partial files — Back in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful way when building curl command lines in ways not previously possible - with almost all existing command line options. curl command lines … Continue reading curl with partial files →&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;curl with partial files&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Back in September 2023, we extended the curl command line tool with a new fairly advanced and flexible variable system. Using this, users can use files, environment variables and more in a powerful...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;daniel.haxx.se · daniel.haxx.se&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is a cool new feature coming to bash, I can’t think of a use case I have out of the gate, but it looks cool.  I’m thinking this might be good to keep in the back pocket for something like CI where I don’t have a hightly tuned bashrc file, and I want a dynamic curl request based on some state that exists as a fille.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Hybrid Cloud Show – Episode 20 - YouTube</title>
    <id>https://go.waylonwalker.com/thought-474/</id>
    <updated>2024-12-28T04:58:50Z</updated>
    <published>2024-12-28T04:58:50Z</published>
    <link href="https://go.waylonwalker.com/thought-474/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=IXUtIXYjFDM</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;IXUtIXYjFDM&#34; title=&#34;Hybrid Cloud Show – Episode 20&#34; playlabel=&#34;Play: Hybrid Cloud Show – Episode 20&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Red Hat has donated the whole open alternative to docker to the CNCF, the hosts weigh in with thier opinions all being pretty positive as they seem to be a legitimate donation and not dumping crap on open source.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;podman&lt;/li&gt;&#xA;&lt;li&gt;podman-desktop&lt;/li&gt;&#xA;&lt;li&gt;buildah&lt;/li&gt;&#xA;&lt;li&gt;compose-fs&lt;/li&gt;&#xA;&lt;li&gt;podman&lt;/li&gt;&#xA;&lt;li&gt;bootc&lt;/li&gt;&#xA;&lt;li&gt;scopio&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Personally I’ve been running podman exclusively at home since switching to Bazzite in August.  I’d like to use buildah in ci. I gave it a try, but was unable to swap out my use of kaniko for buildah, I will get there, but it was not quite as drop in as I wanted.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setting up ucore-zfs</title>
    <id>https://go.waylonwalker.com/setting-up-ucore-zfs/</id>
    <updated>2024-12-27T08:55:50Z</updated>
    <published>2024-12-27T08:55:50Z</published>
    <link href="https://go.waylonwalker.com/setting-up-ucore-zfs/" rel="alternate" type="text/html"></link>
    <summary type="text">I just setup my oldest hardware on the newest hotest server distro ucore-zfs. This is a gateway FX6860 manufactured in 2010.</summary>
    <content type="html">&lt;p&gt;I just setup my oldest hardware on the newest hotest server distro ucore-zfs.&#xA;This is a gateway FX6860 manufactured in 2010.&lt;/p&gt;&#xA;&lt;h2 id=&#34;immutable-is-the-future&#34;&gt;Immutable is the future &lt;a href=&#34;#immutable-is-the-future&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My current boot log shows that I first started daily driving bazzite back in&#xA;August 2024.  I’ve been hapily using it since my arch install was plaugued&#xA;with a crippling display driver error, or something that would lock the display&#xA;for minutes every 30s or so, it became unusable.  I switched because this is&#xA;what I put my son on and it was working great for him.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylon@razorcrest:~$ journalctl --list-boots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IDX BOOT ID                          FIRST ENTRY                 LAST ENTRY&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-19 7e6e154d2609407da24fa12814eadbd7 Thu 2024-08-29 16:15:15 CDT Thu 2024-08-29 17:37:25 CDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Four months later and I am really loving the immutable distro experience.  My&#xA;base system gets fresh reliable updates, and I barely install anything directly&#xA;on it, a handful of things are snaps or flatpaks from the discover store, but&#xA;my main workflow is now in distrobox.  It has been rock solid reliable, and&#xA;just works.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-hardware&#34;&gt;The Hardware &lt;a href=&#34;#the-hardware&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This gem is running a an intel i7-2600 (4) @ 3.80 ghz with 16gb of ram.  I’ve&#xA;maxed out the ram that the motherboard will allow me.  I may have even forgot&#xA;about this limitation and ordered a 2x32gb setup for it and it did nothing.&#xA;That’s now sitting in my new k3s master node.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/36b2d93e-ddb1-4a13-89bd-471cd5e42f14.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/36b2d93e-ddb1-4a13-89bd-471cd5e42f14.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Here’s a B&amp;amp;H photo post of the machine, she is big and heavy but still working.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/75c30c6e-421b-4d99-8a22-1d552ca541fe.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/75c30c6e-421b-4d99-8a22-1d552ca541fe.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I’m a big fan of keeping these old machines running and avoiding the e-waste&#xA;pile, great for running a home lab.  Admittedly this is one is probably on its&#xA;last leg, dell optiplexes are pretty cheap and run circles around this one, so&#xA;this one is become my experimental setup for trying new things like core-os.&lt;/p&gt;&#xA;&lt;h2 id=&#34;get-password-hash&#34;&gt;Get Password Hash &lt;a href=&#34;#get-password-hash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We will need to create a password hash for the root user to put into our ignition file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;podman run -ti --rm quay.io/coreos/mkpasswd --method&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yescrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Password:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$y$j9T$0&lt;/span&gt;ZsoVynV7y0Z7/l6588Ba1&lt;span class=&#34;nv&#34;&gt;$VZT0uCGP0CnYSX&lt;/span&gt;/EArCvYMuo3q.gnyOnk1RO6.HDNDB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;get-ssh-pub-key&#34;&gt;Get SSH Pub Key &lt;a href=&#34;#get-ssh-pub-key&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Generate an ssh key using the &lt;code&gt;ssh-keygen&lt;/code&gt; command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ssh-keygen -t ed25519 -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;waylon@waylonwalker.com&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Generating public/private ed25519 key pair.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enter file in which to save the key &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/var/home/core/.ssh/id_ed25519&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enter passphrase &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;empty &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; no passphrase&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Enter same passphrase again:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Your identification has been saved in /var/home/core/.ssh/id_ed25519&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Your public key has been saved in /var/home/core/.ssh/id_ed25519.pub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The key fingerprint is:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHA256:xVJAVreKVILOnxTDxK88RyMwhdDCBMnjMSGU7rsAqwQ waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;The key&lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;s randomart image is:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+--&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ED25519 256&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;--+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;oo+*oo OBo+ .    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; o* o *.&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; . .   &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;.. + + oo+o .    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ..   o.o++.     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;E      +S&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;..     &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;oo      * .      &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;o..      o       &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;+.               &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;...              &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+----&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;SHA256&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;-----+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now copy your public key into the ignition file from your local machine&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat ~/.ssh/id_ed25519.pub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPY73r4EU9wm/26/rTpx/uvAyInmbQ/k+l04eadSahD0 waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ucore-autorebasebutane&#34;&gt;ucore-autorebase.butane &lt;a href=&#34;#ucore-autorebasebutane&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I got my ignition file from&#xA;&lt;a href=&#34;https://github.com/ublue-os/ucore/blob/main/examples/ucore-autorebase.butane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ucore/ucore-autorebase&lt;/a&gt;.&#xA;Put my secret values into it and used it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/ublue-os/ucore/blob/main/examples/ucore-autorebase.butane&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/ublue-os/ucore/blob/main/examples/ucore-autorebase.butane&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;variant: fcos&#xA;version: 1.4.0&#xA;passwd:&#xA;  users:&#xA;    - name: core&#xA;      ssh_authorized_keys:&#xA;        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPY73r4EU9wm/26/rTpx/uvAyInmbQ/k+l04eadSahD0 waylon@waylonwalker.com&#xA;      password_hash: $y$j9T$0ZsoVynV7y0Z7/l6588Ba1$VZT0uCGP0CnYSX/EArCvYMuo3q.gnyOnk1RO6.HDNDB&#xA;storage:&#xA;  directories:&#xA;    - path: /etc/ucore-autorebase&#xA;      mode: 0754&#xA;systemd:&#xA;  units:&#xA;    - name: ucore-unsigned-autorebase.service&#xA;      enabled: true&#xA;      contents: |&#xA;        [Unit]&#xA;        Description=uCore autorebase to unsigned OCI and reboot&#xA;        ConditionPathExists=!/etc/ucore-autorebase/unverified&#xA;        ConditionPathExists=!/etc/ucore-autorebase/signed&#xA;        After=network-online.target&#xA;        Wants=network-online.target&#xA;        [Service]&#xA;        Type=oneshot&#xA;        StandardOutput=journal+console&#xA;        ExecStart=/usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable&#xA;        ExecStart=/usr/bin/touch /etc/ucore-autorebase/unverified&#xA;        ExecStart=/usr/bin/systemctl disable ucore-unsigned-autorebase.service&#xA;        ExecStart=/usr/bin/systemctl reboot&#xA;        [Install]&#xA;        WantedBy=multi-user.target&#xA;    - name: ucore-signed-autorebase.service&#xA;      enabled: true&#xA;      contents: |&#xA;        [Unit]&#xA;        Description=uCore autorebase to signed OCI and reboot&#xA;        ConditionPathExists=/etc/ucore-autorebase/unverified&#xA;        ConditionPathExists=!/etc/ucore-autorebase/verified&#xA;        After=network-online.target&#xA;        Wants=network-online.target&#xA;        [Service]&#xA;        Type=oneshot&#xA;        StandardOutput=journal+console&#xA;        ExecStart=/usr/bin/rpm-ostree rebase --bypass-driver ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable&#xA;        ExecStart=/usr/bin/touch /etc/ucore-autorebase/signed&#xA;        ExecStart=/usr/bin/systemctl disable ucore-signed-autorebase.service&#xA;        ExecStart=/usr/bin/systemctl reboot&#xA;        [Install]&#xA;        WantedBy=multi-user.target butane&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;creating-an-ignition-file&#34;&gt;Creating an ignition file &lt;a href=&#34;#creating-an-ignition-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;podman run --interactive --rm --security-opt &lt;span class=&#34;nv&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;disable &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --volume &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PWD&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;:/pwd --workdir /pwd quay.io/coreos/butane:release &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;        --pretty --strict ucore-autorebase.butane &amp;gt;transpiled_config.ign&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;getting-zfs&#34;&gt;Getting zfs &lt;a href=&#34;#getting-zfs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now this is where I realized I went wrong and wished I would have paid&#xA;attention to the autorebase.butane file, it did not use the zfs flavor ucore.&#xA;Luckily they make it wildly easy to rebase between these base images.&lt;/p&gt;&#xA;&lt;p&gt;I needed to run this to rebase into the zfs flavor.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This was the output.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;core@falcon-FX6860:~$ /usr/bin/rpm-ostree rebase --bypass-driver ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====&lt;/span&gt; AUTHENTICATING FOR org.projectatomic.rpmostree1.rebase &lt;span class=&#34;o&#34;&gt;====&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Authentication is required to switch to a different base OS&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Authenticating as: CoreOS Admin &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Password:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;====&lt;/span&gt; AUTHENTICATION &lt;span class=&#34;nv&#34;&gt;COMPLETE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;====&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pulling manifest: ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Importing: ostree-unverified-registry:ghcr.io/ublue-os/ucore:stable-zfs &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;digest: sha256:8ebae90f6844949044c026d7ba05c035956992b68e13bdcbd9158a37beda571e&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ostree chunk layers already present: &lt;span class=&#34;m&#34;&gt;51&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;custom layers needed: &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;492.9 MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fetching layer sha256:67f3c0e0e0fe &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;269.7 MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Fetching layer sha256:25992805e895 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;223.1 MB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Staging deployment... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Upgraded:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-bridge 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-networkmanager 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-selinux 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-storaged 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  cockpit-system 330-1.fc41 -&amp;gt; 331-1.fc41&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Added:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  groff-base-1.23.0-7.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  kmod-zfs-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libnvpair3-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libuutil3-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libzfs5-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  libzpool5-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  lm_sensors-libs-3.6.0-20.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  lzop-1.04-15.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  mbuffer-20241007-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-AutoLoader-5.74-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-B-1.89-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Capture-Tiny-0.48-21.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Carp-1.54-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Class-Struct-0.68-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Config-IniFiles-3.000003-14.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Data-Dumper-2.189-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Digest-1.20-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Digest-MD5-2.59-5.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-DynaLoader-1.56-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Encode-4:3.21-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Errno-1.38-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Exporter-5.78-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Fcntl-1.18-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-Basename-2.86-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-Path-2.18-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-Temp-1:0.231.100-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-File-stat-1.14-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-FileHandle-2.05-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Getopt-Long-1:2.58-2.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Getopt-Std-1.14-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-HTTP-Tiny-0.090-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-1.55-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-Socket-IP-0.43-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-Socket-SSL-2.089-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IO-stringy-2.113-15.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-IPC-Open3-1.22-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-MIME-Base32-1.303-21.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-MIME-Base64-3.16-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-NDBM_File-1.17-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Net-SSLeay-1.94-7.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-POSIX-2.20-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-PathTools-3.91-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Escapes-1:1.07-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Perldoc-3.28.01-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Simple-1:3.45-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Pod-Usage-4:2.03-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Scalar-List-Utils-5:1.68-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-SelectSaver-1.02-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Socket-4:2.038-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Storable-1:3.32-511.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Symbol-1.09-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Sys-Hostname-1.25-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Term-ANSIColor-5.01-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Term-Cap-1.18-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Text-ParseWords-3.31-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Text-Tabs+Wrap-2024.001-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-Time-Local-2:1.350-511.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-URI-5.30-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-base-2.27-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-constant-1.33-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-if-0.61.000-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-interpreter-4:5.40.0-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-libnet-3.15-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-libs-4:5.40.0-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-locale-1.12-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-mro-1.29-512.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-overload-1.37-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-overloading-0.02-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-parent-1:0.242-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-podlators-1:6.0.2-2.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  perl-vars-1.05-512.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  pv-1.8.14-2.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-cffi-1.17.0-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-ply-3.11-25.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-pycparser-2.20-18.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  python3-pyzfs-2.2.7-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sanoid-2.2.0-1.fc41.ucore2.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sysstat-12.7.6-2.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  zfs-2.2.7-1.fc41.x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  zfs-dracut-2.2.7-1.fc41.noarch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes queued &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; next boot. Run &lt;span class=&#34;s2&#34;&gt;&amp;#34;systemctl reboot&amp;#34;&lt;/span&gt; to start a reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;For some reason I double checked, and runnign it a second time gave me this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;core@falcon-FX6860:~$ sudo rpm-ostree rebase ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Pulling manifest: ostree-image-signed:docker://ghcr.io/ublue-os/ucore:stable-zfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Staging deployment... &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes queued &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; next boot. Run &lt;span class=&#34;s2&#34;&gt;&amp;#34;systemctl reboot&amp;#34;&lt;/span&gt; to start a reboot&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;zfs&#34;&gt;ZFS &lt;a href=&#34;#zfs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once I rebooted I had all of my necessary zfs utilities that I needed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;connecting-nfs&#34;&gt;connecting nfs &lt;a href=&#34;#connecting-nfs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The last thing I wanted to do was to mount an nfs share from my master node so&#xA;that they can share a storage backend.  I found that nfs was already in the host and ready to go.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /mnt/vault/nfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -t nfs &amp;lt;nfs server ip&amp;gt;:/mnt/vault/nfs /mnt/vault/nfs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Ubuntu Summit 2024 | UMU - A unified tool for easily running y...</title>
    <id>https://go.waylonwalker.com/thought-469/</id>
    <updated>2024-12-26T16:47:13Z</updated>
    <published>2024-12-26T16:47:13Z</published>
    <link href="https://go.waylonwalker.com/thought-469/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=iuBzGked-JU&amp;t=559s</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;iuBzGked-JU&#34; title=&#34;Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam&#34; playlabel=&#34;Play: Ubuntu Summit 2024 | UMU - A unified tool for easily running your games outside of Steam&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Damn Glorious Eggrolls is still making gaming on linux better.  Of course its containerization that drives everything on linux these days.  This is a pretty badass talk.  Umu is already running in steam and bazzite.  Bazzite gamemode uses this to get a gamescope session running.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Dedicated Servers | Intel Servers | AMD Servers - Dedicated Ho...</title>
    <id>https://go.waylonwalker.com/thought-462/</id>
    <updated>2024-12-24T20:29:13Z</updated>
    <published>2024-12-24T20:29:13Z</published>
    <link href="https://go.waylonwalker.com/thought-462/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.reliablesite.net/dedicated-servers/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.reliablesite.net/dedicated-servers/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.reliablesite.net.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.reliablesite.net.png&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Dedicated Servers | Intel Servers | AMD Servers - Dedicated Hosting&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;reliablesite.net&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Dax talked about this in a recent How about tomorrow podcast &lt;a href=&#34;https://thoughts.waylonwalker.com/post/461&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughts.waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://thoughts.waylonwalker.com/post/461&lt;/a&gt;.  He is using it as his dev machine, he just ssh’s in and devs on it.  Feels like quite an interesting workflow, their prices seem competitive, but as a cheap ass homelabber I see their prices and think I could grab a used optiplex for the cost of a month or two of these and probably wouldn’t know the difference.  DAX mentions longer compile times so maybe he does notice.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Talking with Typecraft - YouTube</title>
    <id>https://go.waylonwalker.com/thought-461/</id>
    <updated>2024-12-24T20:24:42Z</updated>
    <published>2024-12-24T20:24:42Z</published>
    <link href="https://go.waylonwalker.com/thought-461/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=qEykeKfAnJQ&amp;t=1068s</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;qEykeKfAnJQ&#34; title=&#34;- YouTube&#34; playlabel=&#34;Play: - YouTube&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is a pretty great episode talking shop with typecraft.  They talk setups, cameras, content creation. I found them talking about their linux setups particularly interesting.  Dax talked about his flow from building his own machines to using reliablesite.com.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tmux-default-leader&#34;&gt;tmux default leader &lt;a href=&#34;#tmux-default-leader&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Dax hates on c-a, both typecraft and dax use c-s, which normally freezes a terminal, we can all agree that is useless.  I use the default c-b, it seems fine for me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;type-crafts-setup&#34;&gt;type crafts setup &lt;a href=&#34;#type-crafts-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ubuntu&lt;/li&gt;&#xA;&lt;li&gt;Ghosty&lt;/li&gt;&#xA;&lt;li&gt;Tmux&lt;/li&gt;&#xA;&lt;li&gt;Nvim&lt;/li&gt;&#xA;&lt;li&gt;Ruby&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;selling-coffee-without-a-web-front-end&#34;&gt;Selling coffee without a web front end &lt;a href=&#34;#selling-coffee-without-a-web-front-end&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Dax talks about terminal.shop and how they originally planned to have a web front end, but after they had so much success they stuck with it.  now they are leaning harder into it and are building out integrations with a bunch of languages and an api, but no front end.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 casey/just: 🤖 Just a command runner</title>
    <id>https://go.waylonwalker.com/thought-445/</id>
    <updated>2024-12-14T17:04:06Z</updated>
    <published>2024-12-14T17:04:06Z</published>
    <link href="https://go.waylonwalker.com/thought-445/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/casey/just?tab=readme-ov-file#constants</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/casey/just?tab=readme-ov-file#constants&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://opengraph.githubassets.com/02aad539d7a99bb629a08a7d76bb8271f8ad6f0467d84a4f38a956f54e5021cd/casey/just&#34; alt=&#34;GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - casey/just: 🤖 Just a command runner — 🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;GitHub - casey/just: 🤖 Just a command runner&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;🤖 Just a command runner. Contribute to casey/just development by creating an account on GitHub.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;new versions of just now come with color variables already set.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;group&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;manage&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;version:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#!/usr/bin/env bash&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;cat version&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; current version &lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt;BOLD&lt;span class=&#34;o&#34;&gt;}}{{&lt;/span&gt;GREEN&lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt;NORMAL&lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 pipedream/justfile at main · thechangelog/pipedream</title>
    <id>https://go.waylonwalker.com/thought-444/</id>
    <updated>2024-12-14T16:54:34Z</updated>
    <published>2024-12-14T16:54:34Z</published>
    <link href="https://go.waylonwalker.com/thought-444/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/thechangelog/pipedream/blob/main/justfile</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/thechangelog/pipedream/blob/main/justfile&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://opengraph.githubassets.com/a8fa9047c60228f690d3fb848ea8232f236c860f28ec4c1e0fdbbef0e684d89a/thechangelog/pipely&#34; alt=&#34;pipely/justfile at main · thechangelog/pipely — I like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: pipely/justfile at main · thechangelog/pipely — I like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;pipely/justfile at main · thechangelog/pipely&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;I like the idea of having like this 20-line Varnish config that we deploy around the world, and it’s like: Look at our CDN! - thechangelog/pipely&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I found this nugget in thechangelogs justfile, it lets you add color to your justfile with variables quite easily.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://linux.101hacks.com/ps1-examples/prompt-color-using-tput/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_BOLD :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_RESET :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput sgr0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_BLACK :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_RED :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 1&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_GREEN :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 2&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_YELLOW :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 3&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_BLUE :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 4&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_MAGENTA :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 5&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_CYAN :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 6&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_WHITE :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 7&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_BLACKB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput bold&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setab 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_REDB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 1&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_GREENB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 2&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_YELLOWB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 3&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_BLUEB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 4&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_MAGENTAB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 5&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_CYANB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 6&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;_WHITEB :&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tput setab 7&lt;span class=&#34;k&#34;&gt;)$(&lt;/span&gt;tput setaf 0&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Usage&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;echo:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt;_BOLD&lt;span class=&#34;o&#34;&gt;}}{{&lt;/span&gt;_GREEN&lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt;hello there&lt;span class=&#34;o&#34;&gt;{{&lt;/span&gt;_RESET&lt;span class=&#34;o&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 hostnamectl to easily change hostname | Pype.dev</title>
    <id>https://go.waylonwalker.com/thought-441/</id>
    <updated>2024-12-06T14:30:41Z</updated>
    <published>2024-12-06T14:30:41Z</published>
    <link href="https://go.waylonwalker.com/thought-441/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://pype.dev/hostnamectl-to-easily-change-hostname</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://pype.dev/hostnamectl-to-easily-change-hostname&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://cdn.statically.io/gh/pypeaday/pype.dev/main/pages/media/og-02.png&#34; alt=&#34;hostnamectl to easily change hostname | Nic Payne — hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there&amp;#39;s transient and static hostnames, so that&amp;amp;&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: hostnamectl to easily change hostname | Nic Payne — hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there&amp;#39;s transient and static hostnames, so that&amp;amp;&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;hostnamectl to easily change hostname | Nic Payne&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;hostnamectl is apparently a linux utility for easily changing your hostname in a variety of ways I learned there&amp;#39;s transient and static hostnames, so that&amp;amp;&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;pype.dev&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;For some reason the ublue ecosystem does not prompt you to set your hostname on install and you get a hostname like bazzite showing up.  Looks like this is the fix.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;hostnamectl –static hostname babyblue-aurora&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 linux - What is stored in /dev/pts files and can we open them?...</title>
    <id>https://go.waylonwalker.com/thought-339/</id>
    <updated>2024-07-07T01:08:38Z</updated>
    <published>2024-07-07T01:08:38Z</published>
    <link href="https://go.waylonwalker.com/thought-339/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://unix.stackexchange.com/questions/93531/what-is-stored-in-dev-pts-files-and-can-we-open-them</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://unix.stackexchange.com/questions/93531/what-is-stored-in-dev-pts-files-and-can-we-open-them&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unix.stackexchange.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unix.stackexchange.com.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;External Link&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;unix.stackexchange.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;today I learned that /dev/pts is a pseudo-tty.  It amazes me how much linux is still built around things like hardware terminals.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 pacman/Tips and tricks - ArchWiki</title>
    <id>https://go.waylonwalker.com/thought-337/</id>
    <updated>2024-07-06T16:52:09Z</updated>
    <published>2024-07-06T16:52:09Z</published>
    <link href="https://go.waylonwalker.com/thought-337/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://wiki.archlinux.org/title/pacman/Tips_tricks</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://wiki.archlinux.org/title/pacman/Tips_and_tricks&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/wiki.archlinux.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/wiki.archlinux.org.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;pacman/Tips and tricks - ArchWiki&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;wiki.archlinux.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;The arch wiki is always full of good content, and pacman tips and tricks does not disappoint.  Today I discovered this command to remove orphaned dependencies on my system.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -Qdtq &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pacman -Rns -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Inside 22,734 Steam games | daniel.haxx.se</title>
    <id>https://go.waylonwalker.com/thought-336/</id>
    <updated>2024-07-06T16:48:21Z</updated>
    <published>2024-07-06T16:48:21Z</published>
    <link href="https://go.waylonwalker.com/thought-336/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://daniel.haxx.se/blog/2024/06/20/inside-22734-steam-games/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://daniel.haxx.se/blog/2024/06/20/inside-22734-steam-games/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://daniel.haxx.se/blog/wp-content/uploads/2016/09/GTA-end-credits-libcurl-1200x658.jpg&#34; alt=&#34;Inside 22,734 Steam games — About a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of amazing that over one hundred games decided to use curl! At the time, lots of … Continue reading Inside 22,734 Steam games →&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Inside 22,734 Steam games — About a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of amazing that over one hundred games decided to use curl! At the time, lots of … Continue reading Inside 22,734 Steam games →&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Inside 22,734 Steam games&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;About a year ago I blogged about games that use curl. In that post I listed a bunch of well-known titles I knew use curl and there was a list of 136 additional games giving credit to curl. Kind of ...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;daniel.haxx.se · daniel.haxx.se&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Interesting to see that curl is used in so many places.  I often think of things like games being so windows centric and curl being so linux centric I don’t even think of these things crossing paths as much as they do.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 wcurl is here | daniel.haxx.se</title>
    <id>https://go.waylonwalker.com/thought-335/</id>
    <updated>2024-07-06T16:46:19Z</updated>
    <published>2024-07-06T16:46:19Z</published>
    <link href="https://go.waylonwalker.com/thought-335/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://daniel.haxx.se/blog/2024/07/03/wcurl-is-here/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://daniel.haxx.se/blog/2024/07/03/wcurl-is-here/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://daniel.haxx.se/blog/wp-content/uploads/2019/04/tools-1209764_1280-1200x800.jpg&#34; alt=&#34;wcurl is here — Users tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of curl on the command line. It downloads the data from the URL without you needing to provide any … Continue reading wcurl is here →&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: wcurl is here — Users tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of curl on the command line. It downloads the data from the URL without you needing to provide any … Continue reading wcurl is here →&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;wcurl is here&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Users tell us that remembering what curl options to use when they just want to download the contents of a URL is hard. This is one often repeated reason why some users reach for wget instead of cur...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;daniel.haxx.se · daniel.haxx.se&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;interesting, seems like such a simple way to completely remove the need of a whole other cli.  No offense to anyone working on wget, but generally I use it out of lazyness or something wierd is happening and I am looking for a second opinion.  Cool to know that wcurl exists and will start shipping with curl.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>arch remove orphaned packages</title>
    <id>https://go.waylonwalker.com/arch-remove-orphaned-packages/</id>
    <updated>2024-07-06T11:34:31Z</updated>
    <published>2024-07-06T11:34:31Z</published>
    <link href="https://go.waylonwalker.com/arch-remove-orphaned-packages/" rel="alternate" type="text/html"></link>
    <content type="text">&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>playerctl fixes arch media keys</title>
    <id>https://go.waylonwalker.com/playerctl-fixes-arch/</id>
    <updated>2024-06-25T18:23:41Z</updated>
    <published>2024-06-25T18:23:41Z</published>
    <link href="https://go.waylonwalker.com/playerctl-fixes-arch/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve long had issues with my qmk keyboard media keys on my arch install, I always thought it was on the keyboard end. Today I learned that playerctl fixes this.</summary>
    <content type="html">&lt;p&gt;I’ve long had issues with my qmk keyboard media keys on my arch install, I&#xA;always thought it was on the keyboard end.  Today I learned that playerctl&#xA;fixes this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S playerctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once it is installed all of my media keys started working right away.&lt;/p&gt;&#xA;&lt;p&gt;I played around with it a bit more and came up with a way to display the&#xA;current playing title in my notifictations.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;notify-send &lt;span class=&#34;s2&#34;&gt;&amp;#34;`playerctl metadata --format &amp;#39;{{lc(status)}}:{{artist}}-{{album}}-{{title}}&amp;#39;`&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 podman requries qemu-system on ubuntu</title>
    <id>https://go.waylonwalker.com/thought-309/</id>
    <updated>2024-06-12T19:29:18Z</updated>
    <published>2024-06-12T19:29:18Z</published>
    <link href="https://go.waylonwalker.com/thought-309/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://askubuntu.com/questions/1490805/how-do-i-install-qemu-on-ubuntu-23-10</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://askubuntu.com/questions/1490805/how-do-i-install-qemu-on-ubuntu-23-10&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/askubuntu.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/askubuntu.com.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;External Link&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;askubuntu.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;podman requires qemu-system on&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ podman machine init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Looking up Podman Machine image at quay.io/podman/machine-os:5.1 to create VM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Extracting compressed file: podman-machine-default-amd64.qcow2: &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Error: exec: &lt;span class=&#34;s2&#34;&gt;&amp;#34;qemu-img&amp;#34;&lt;/span&gt;: executable file not found in &lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The fix to this for me was to install qemu-system before podman machine init.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install qemu-system&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher</title>
    <id>https://go.waylonwalker.com/thought-301/</id>
    <updated>2024-06-07T03:59:30Z</updated>
    <published>2024-06-07T03:59:30Z</published>
    <link href="https://go.waylonwalker.com/thought-301/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/catppuccin/ulauncher</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/catppuccin/ulauncher&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://opengraph.githubassets.com/17586f151e40edda426418a60998c5171ffc2011ea169c13629b208f57fbbc91/catppuccin/ulauncher&#34; alt=&#34;GitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher — 🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher — 🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;GitHub - catppuccin/ulauncher: 🇺 Soothing pastel theme for Ulauncher&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;🇺 Soothing pastel theme for Ulauncher. Contribute to catppuccin/ulauncher development by creating an account on GitHub.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I am using this theme for Ulauncher in arch and it looks fantastic!  One line install (read it first).&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3 &amp;lt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;curl https://raw.githubusercontent.com/catppuccin/ulauncher/main/install.py -fsSL&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Ulauncher — Application launcher for Linux 🐧</title>
    <id>https://go.waylonwalker.com/thought-300/</id>
    <updated>2024-06-07T03:58:16Z</updated>
    <published>2024-06-07T03:58:16Z</published>
    <link href="https://go.waylonwalker.com/thought-300/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://ulauncher.io/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://ulauncher.io/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ulauncher.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ulauncher.io.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Ulauncher — Application launcher for Linux 🐧&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Download Ulauncher for Linux, discover extensions and videos, and support the project.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;ulauncher.io&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Just discovered this really cool launcher from the DHH distro omakub.  &lt;a href=&#34;https://github.com/basecamp/omakub&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;github.com/omakub&lt;/a&gt;{.hoverlink}.&lt;/p&gt;&#xA;&lt;p&gt;Ulauncher comes out of the box looking good, supports extensions, and shortcuts like I have a lot of mac launchers have.  I installed it plus a theme and in no time It was looking good and launching applications.&lt;/p&gt;&#xA;&lt;p&gt;In the past I have leaned in on rofi for task launching, it is good.  I just felt it was harder to configure to get right or look good.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 basecamp/omakub: Opinionated Ubuntu Setup</title>
    <id>https://go.waylonwalker.com/thought-298/</id>
    <updated>2024-06-06T16:20:19Z</updated>
    <published>2024-06-06T16:20:19Z</published>
    <link href="https://go.waylonwalker.com/thought-298/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/basecamp/omakub</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/basecamp/omakub&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://opengraph.githubassets.com/058ad43b9a4a4932c910d0f00129d780016ae6d61f9a3171397f82369a8ad7aa/basecamp/omakub&#34; alt=&#34;GitHub - basecamp/omakub: Opinionated Ubuntu Setup — Opinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - basecamp/omakub: Opinionated Ubuntu Setup — Opinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;GitHub - basecamp/omakub: Opinionated Ubuntu Setup&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Opinionated Ubuntu Setup. Contribute to basecamp/omakub development by creating an account on GitHub.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is DHH’s linux startup script.  Call it a distro if you want, but he doesn’t.  It’s made to take a vanilla ubuntu install and configure everything the way he likes it.  There’s a number of great nuggets in here to pick up on.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;No need to write bespoke configs for every essential tool just to get started or to be up on all the latest command-line tools. Omakub is an opinionated take on what Linux can be at its best.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Check it out and give it a ⭐ &lt;a href=&#34;https://github.com/basecamp/omakub&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;basecamp/omakub&lt;/a&gt;{.hoverlink}.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 How to Force Dark Mode on Every Website in Google Chrome</title>
    <id>https://go.waylonwalker.com/thought-295/</id>
    <updated>2024-06-03T18:52:25Z</updated>
    <published>2024-06-03T18:52:25Z</published>
    <link href="https://go.waylonwalker.com/thought-295/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.howtogeek.com/446198/how-to-force-dark-mode-on-every-website-in-google-chrome/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.howtogeek.com/446198/how-to-force-dark-mode-on-every-website-in-google-chrome/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://static0.howtogeekimages.com/wordpress/wp-content/uploads/2024/06/laptop-with-some-google-chrome-windows-and-a-dark-mode-switch.jpg?w=1600&amp;amp;h=900&amp;amp;fit=crop&#34; alt=&#34;How to Force Dark Mode on Every Website in Google Chrome — Do you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: How to Force Dark Mode on Every Website in Google Chrome — Do you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;How to Force Dark Mode on Every Website in Google Chrome&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Do you like dark mode? Chrome now lets you forcibly enable it for every site on the web. No more blindingly bright websites.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;How-To Geek · howtogeek.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Sometimes I struggle to get my os to report dark mode to chrome, luckily there is a way to force chrome to always use dark mode.&lt;/p&gt;&#xA;&lt;p&gt;I’ve never really gotten into dark reader and extensions like this. For some reason they all make websites look really weird to me and I don’t really care for it.  What I want is websites designed to be in dark/light to always go dark, if the designer didn’t design dark just let it be light.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tailscale ssh</title>
    <id>https://go.waylonwalker.com/tailscale-ssh/</id>
    <updated>2024-06-03T16:40:18Z</updated>
    <published>2024-06-03T16:40:18Z</published>
    <link href="https://go.waylonwalker.com/tailscale-ssh/" rel="alternate" type="text/html"></link>
    <summary type="text">Tailscale allows you to ssh into all of your tailscale machines, it busts through firewalls and accross networks without complex setup. If you have used...</summary>
    <content type="html">&lt;p&gt;Tailscale allows you to ssh into all of your tailscale machines, it busts&#xA;through firewalls and accross networks without complex setup.  If you have used&#xA;tailscale before this is an obvious no brainer.  What is not obvious is that&#xA;you can configure tailscale to allow ssh connections from devices within your&#xA;tailnet without even a ssh daemon process running right through the tailscale&#xA;daemon.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --ssh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I picked this up from the tailscale youtube channel.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=08clF9srJ2k&amp;amp;t=35s&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34;&gt;Tailscale&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Distrobox</title>
    <id>https://go.waylonwalker.com/thought-281/</id>
    <updated>2024-05-22T18:13:13Z</updated>
    <published>2024-05-22T18:13:13Z</published>
    <link href="https://go.waylonwalker.com/thought-281/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://distrobox.it/usage/distrobox-host-exec/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://distrobox.it/usage/distrobox-host-exec/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://distrobox.it/assets/card.webp&#34; alt=&#34;Distrobox — Use any linux distribution inside your terminal.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Distrobox — Use any linux distribution inside your terminal.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Distrobox&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Use any linux distribution inside your terminal.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;distrobox.it&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;distrobox gives you &lt;code&gt;distrobox-host-exec&lt;/code&gt; to run commands on the host. This is handy to get access to host level clis that you probably wouldn’t want to run from the container like &lt;code&gt;podman&lt;/code&gt;, &lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;flatpak&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;DESCRIPTION&#xA;distrobox-host-exec lets one execute command on the host, while inside of a container.&lt;/p&gt;&#xA;&lt;p&gt;Under the hood, distrobox-host-exec uses host-spawn a project that lets us execute commands back on the host. If the tool is not found the user will be prompted to install it.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Are We Anti-Cheat Yet?</title>
    <id>https://go.waylonwalker.com/thought-280/</id>
    <updated>2024-05-22T12:37:55Z</updated>
    <published>2024-05-22T12:37:55Z</published>
    <link href="https://go.waylonwalker.com/thought-280/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://areweanticheatyet.com/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://areweanticheatyet.com/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/areweanticheatyet.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/areweanticheatyet.com.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Are We Anti-Cheat Yet?&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;areweanticheatyet.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;A comprehensive community built index of anti-cheat support for linux very similar to proton, but specific to anticheat support.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Install Pokemon TCG Live on Steam Deck - Installation Guide - ...</title>
    <id>https://go.waylonwalker.com/thought-270/</id>
    <updated>2024-05-11T13:27:19Z</updated>
    <published>2024-05-11T13:27:19Z</published>
    <link href="https://go.waylonwalker.com/thought-270/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=zfN4hk7FelI</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-youtube&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;lite-youtube videoid=&#34;zfN4hk7FelI&#34; title=&#34;Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen&#34; playlabel=&#34;Play: Install Pokemon TCG Live on Steam Deck - Installation Guide - get past the white login screen&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I had no idea that you could just drop an msi installer right in steam.  This worked for me, and was much easier to install pokemon tcg live in 05-2024 on ubuntu 22-04.  I added the msi to steam from my downloads, hit start, failed right away like he said it would.  changed compatability to proton experimental, and it opened right up.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Download the official installer from pokemon tcg&lt;/li&gt;&#xA;&lt;li&gt;Add non steam game&lt;/li&gt;&#xA;&lt;li&gt;click show all file types&lt;/li&gt;&#xA;&lt;li&gt;navigate to downloaded msi&lt;/li&gt;&#xA;&lt;li&gt;click gear icon &amp;gt; compatability &amp;gt; proton experimental&lt;/li&gt;&#xA;&lt;li&gt;click play&lt;/li&gt;&#xA;&lt;li&gt;profit&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>just picker</title>
    <id>https://go.waylonwalker.com/just-picker/</id>
    <updated>2024-05-08T20:48:23Z</updated>
    <published>2024-05-08T20:48:23Z</published>
    <link href="https://go.waylonwalker.com/just-picker/" rel="alternate" type="text/html"></link>
    <summary type="text">has been by go to tool for saving commands in a way that I can replay them and have team members replay them without relying on the shell history of any...</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/casey/just&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;just&lt;/code&gt;&lt;/a&gt; has been by go to tool for saving&#xA;commands in a way that I can replay them and have team members replay them&#xA;without relying on the shell history of any given machine.  This is my go to&#xA;default step, it lets you pick a just command to run with a fuzzy picker.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  @just --list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : g...</title>
    <id>https://go.waylonwalker.com/thought-266/</id>
    <updated>2024-05-02T00:54:02Z</updated>
    <published>2024-05-02T00:54:02Z</published>
    <link href="https://go.waylonwalker.com/thought-266/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2006590</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://bugs.launchpad.net/ubuntu/+source/gdm3/+bug/2006590&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img src=&#34;/@@/launchpad-og-image.png&#34; alt=&#34;Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu — Suddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.&#xA;I tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).&#xA;&amp;lt;p&amp;gt;ProblemType: Bug&#xA;DistroRelease: Ubuntu 22.10&#xA;Package: xorg 1:7.7+23ubuntu2&#xA;ProcVersionSignature: Ubuntu 5.19.0-29.30-generic 5.19.17&#xA;Uname: Linux 5.19.0-29-generic x86_64&#xA;NonfreeKernelModules: nvidia_modeset nvidia&#xA;.proc.driver.nvidia.capabilities.gpu0: Error: path was not a regular file.&#xA;.proc.driver.nvidia.capabilities…&amp;#34; loading=“lazy”&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;&amp;lt;div class=&#34; embed-card-content glightbox&#34;=&#34;&#34;/ data-glightbox=&#34;description: Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu — Suddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.&#xA;I tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).&#xA;&amp;lt;p&amp;gt;ProblemType: Bug&#xA;DistroRelease: Ubuntu 22.10&#xA;Package: xorg 1:7.7+23ubuntu2&#xA;ProcVersionSignature: Ubuntu 5.19.0-29.30-generic 5.19.17&#xA;Uname: Linux 5.19.0-29-generic x86_64&#xA;NonfreeKernelModules: nvidia_modeset nvidia&#xA;.proc.driver.nvidia.capabilities.gpu0: Error: path was not a regular file.&#xA;.proc.driver.nvidia.capabilities…&amp;#34; loading=“lazy”&amp;gt;&#xA;&amp;lt;/div&amp;gt;&#xA;&amp;lt;div class=&#34;&gt;&#xA;&lt;div class=&#34;embed-card-title&#34;&gt;Bug #2006590 “gdm3 crashes with SIGTRAP on startup” : Bugs : gdm3 package : Ubuntu&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-description&#34;&gt;Suddenly this week, my GUI (ubuntu 22.10) does not open, stuck on the console text.&#xA;I tried to free some space (by uninstall a app), then to check/update the paquets (dkpg).&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;ProblemType: Bug&#xA;Distr…&lt;/p&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-meta&#34;&gt;Launchpad · bugs.launchpad.net&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This Thread saved my son’s ubuntu 24.04 install.&#xA;His was failing to start with the following error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Gdm: GdmSession: no session desktop files installed, aborting...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1785825677079441482&#34;&gt;https://twitter.com/_WaylonWalker/status/1785825677079441482&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install --reinstall ubuntu-session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>showmount-e</title>
    <id>https://go.waylonwalker.com/showmount-e/</id>
    <updated>2024-04-25T20:15:29Z</updated>
    <published>2024-04-25T20:15:29Z</published>
    <link href="https://go.waylonwalker.com/showmount-e/" rel="alternate" type="text/html"></link>
    <summary type="text">TIL how to display the list of nfs mounts on your network.</summary>
    <content type="html">&lt;p&gt;TIL how to display the list of nfs mounts on your network.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;showmount -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can even look for mounts of other machines on your network.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;showmount -e &amp;lt;hostname&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Redka Runs on SQLite</title>
    <id>https://go.waylonwalker.com/redka-runs-on-sqlite/</id>
    <updated>2024-04-22T19:54:24Z</updated>
    <published>2024-04-22T19:54:24Z</published>
    <link href="https://go.waylonwalker.com/redka-runs-on-sqlite/" rel="alternate" type="text/html"></link>
    <summary type="text">With the liscense changes to redis there are several new forks out there. One that I am particularly interested in is redka.</summary>
    <content type="html">&lt;p&gt;With the liscense changes to redis there are several new forks out there.  One&#xA;that I am particularly interested in is&#xA;&lt;a href=&#34;https://github.com/nalgeon/redka&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;redka&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://i.jpillora.com/nalgeon/redka &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x redka&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./redka database.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We now have redis running on port 6379 that we can connect to with a redis&#xA;client. And we have a sqlite database that we can inspect.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ sqlite3 database.db &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT name FROM sqlite_master;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey_key_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey_etime_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rkey_on_type_update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rstring&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rstring_pk_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vstring&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rhash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rhash_pk_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rhash_key_id_idx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vhash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We can look at the values in the vstring table.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sqlite3 database.db &lt;span class=&#34;s2&#34;&gt;&amp;#34;SELECT * from vstring;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;hi&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;hello there you&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;2024-04-17 01:46:26&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Am I vulnerable to the xz backdoor?</title>
    <id>https://go.waylonwalker.com/am-i-vulnerable-to-the-xz-backdoor/</id>
    <updated>2024-04-21T07:53:54Z</updated>
    <published>2024-04-21T07:53:54Z</published>
    <link href="https://go.waylonwalker.com/am-i-vulnerable-to-the-xz-backdoor/" rel="alternate" type="text/html"></link>
    <summary type="text">The main system that I am concerned about is my arch BTW machine. I found a great article from the official archlinux site covering it.</summary>
    <content type="html">&lt;p&gt;The main system that I am concerned about is my arch BTW machine. I found a&#xA;great &lt;a href=&#34;https://archlinux.org/news/the-xz-package-has-been-backdoored/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/archlinux.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/archlinux.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;article&lt;/a&gt;&#xA;from the official archlinux site covering it.&lt;/p&gt;&#xA;&lt;p&gt;For my machine I am concerned with this line.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1)&#xA;contain this backdoor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I checked my xz package with &lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt;, and I am good.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -Qii zx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>arch dependencies</title>
    <id>https://go.waylonwalker.com/arch-dependencies/</id>
    <updated>2024-04-20T07:42:21Z</updated>
    <published>2024-04-20T07:42:21Z</published>
    <link href="https://go.waylonwalker.com/arch-dependencies/" rel="alternate" type="text/html"></link>
    <summary type="text">paru has some nice features that I rarely use, and hav to look up when I need them. Here are two commands to help with dependency management.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt; has some nice features that I rarely use, and hav to look up when I need&#xA;them.  Here are two commands to help with dependency management.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ paru -Qii nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Name            : nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Version         : 21.7.2-1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description     : Evented I/O &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; V8 javascript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Architecture    : x86_64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;URL             : https://nodejs.org/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Licenses        : MIT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Groups          : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Provides        : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Depends On      : icu  libuv  libnghttp2  libnghttp3  libngtcp2  openssl  zlib  brotli  c-ares&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Optional Deps   : npm: nodejs package manager &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;installed&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Required By     : node-gyp  nodejs-nopt  npm  semver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Optional For    : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Conflicts With  : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Replaces        : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Installed Size  : 46.86 MiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Packager        : Felix Yan &amp;lt;felixonmars@archlinux.org&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Build Date      : Thu &lt;span class=&#34;m&#34;&gt;04&lt;/span&gt; Apr &lt;span class=&#34;m&#34;&gt;2024&lt;/span&gt; 05:11:09 AM CDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install Date    : Mon &lt;span class=&#34;m&#34;&gt;15&lt;/span&gt; Apr &lt;span class=&#34;m&#34;&gt;2024&lt;/span&gt; 07:27:02 AM CDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install Reason  : Installed as a dependency &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; another package&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Install Script  : No&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Validated By    : Signature&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Backup Files    : None&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Extended Data   : &lt;span class=&#34;nv&#34;&gt;pkgtype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;pkg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can check all the packages depended on by nodejs by running the following.&#xA;This is everything from all of the repos you have configured, not what you have&#xA;installed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ pactree --reverse --sync --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nodejs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─acorn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ansible-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─asar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─babel-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─babel-core&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─bash-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─blinksocks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─bower&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─browserify&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─coffeescript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─dot-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─emscripten&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─eslint&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─eslint-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─eslint_d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gitlab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gnomon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─grunt-cli&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gtop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─gulp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─hedgedoc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─jake&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─markdownlint-cli2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─marked&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─marked-man&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─matrix-appservice-irc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─modclean&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─node-gyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-emojione&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-material-design-icons&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-nopt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-source-map&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─nodejs-yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─npm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─openui5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─pm2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─prettier&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─pyright&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─rapydscript-ng&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─s3rver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─semver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─serverless&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─stylelint&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─stylus&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─svelte-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─tailwindcss-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─ts-node&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─typescript&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─typescript-svelte-plugin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─uglify-js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vscode-css-languageserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vscode-html-languageserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vscode-json-languageserver&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vue-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─vue-typescript-plugin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─wasm-bindgen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─web-ext&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─wrangler&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─yaml-language-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├─yarn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Arch Linux - News: The xz package has been backdoored</title>
    <id>https://go.waylonwalker.com/thought-243/</id>
    <updated>2024-04-16T13:00:33Z</updated>
    <published>2024-04-16T13:00:33Z</published>
    <link href="https://go.waylonwalker.com/thought-243/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://archlinux.org/news/the-xz-package-has-been-backdoored/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://archlinux.org/news/the-xz-package-has-been-backdoored/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/archlinux.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/archlinux.org.png&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Arch Linux - News: The xz package has been backdoored&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;archlinux.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Check your system to see if you are vulnerable to the xz backdoor.&lt;/p&gt;&#xA;&lt;p&gt;I found this line most pertanent to me.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The xz packages prior to version 5.6.1-2 (specifically 5.6.0-1 and 5.6.1-1) contain this backdoor.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also it appears that arch is not vulnerable as it does not directly link openssh to liblzma, so the known attack vecotor is not possible.  read to the end of the linked article for more.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to kill ollama server</title>
    <id>https://go.waylonwalker.com/how-to-kill-ollama-server/</id>
    <updated>2024-04-14T18:31:36Z</updated>
    <published>2024-04-14T18:31:36Z</published>
    <link href="https://go.waylonwalker.com/how-to-kill-ollama-server/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently updated ollama, and it now installs a systemd service that I was not expecting. Seems like a great option, but I hadn&#39;t expeted this and I was...</summary>
    <content type="html">&lt;p&gt;I recently updated &lt;a href=&#34;https://ollama.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ollama.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ollama.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ollama&lt;/a&gt;, and it now installs a systemd&#xA;service that I was not expecting.  Seems like a great option, but I hadn’t&#xA;expeted this and I was able to kill it previously.  It was using up gpu, and I&#xA;do other things on my machine with a gpu.  I tried pkill, kill, and everything,&#xA;it was still coming back.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;No matter what it comes back&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# stop it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop ollama.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# disable it if you want&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl disable ollama.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# confirm its status&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl status ollama.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can confirm this with the following command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checking running processes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pgrep ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checking gpu processes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpustat --show-cmd --show-pid&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next time you want to start you can do it as before with &lt;code&gt;ollama serve&lt;/code&gt;.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 How to run pods as systemd services with Podman | Enable Sysadmin</title>
    <id>https://go.waylonwalker.com/thought-114/</id>
    <updated>2023-09-22T01:12:19Z</updated>
    <published>2023-09-22T01:12:19Z</published>
    <link href="https://go.waylonwalker.com/thought-114/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.redhat.com/en/blog/podman-run-pods-systemd-services</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.redhat.com/en/blog/podman-run-pods-systemd-services&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://www.redhat.com/rhdc/managed-files/sysadmin/2021-02/toolbox-container.jpg&#34; alt=&#34;How to run pods as systemd services with Podman — Podman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: How to run pods as systemd services with Podman — Podman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;How to run pods as systemd services with Podman&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Podman is well known for its seamless integration into modern Linux systems, and supporting systemd is a cornerstone in these efforts. Linux commonly uses th...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;redhat.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;podman comes with a nice command for generating systemd service files (units).&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ podman pod create --name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;my-pod&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;635bcc5bb5aa0a45af4c2f5a508ebd6a02b93e69324197a06d02a12873b6d1f7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ podman create --pod&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;my-pod --name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;container-a -t centos top&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c04be9c4ac1c93473499571f3c2ad74deb3e0c14f4f00e89c7be3643368daf0e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ podman create --pod&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;my-pod --name&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;container-b -t centos top&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b42314b2deff99f5877e76058ac315b97cfb8dc40ed02f9b1b87f21a0cf2fbff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.config/systemd/user&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ podman generate systemd --new --files --name my-pod&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/vrothberg/.config/systemd/user/pod-my-pod.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/vrothberg/.config/systemd/user/container-container-b.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/vrothberg/.config/systemd/user/container-container-a.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 sharkdp/bat: A cat clone with wings.</title>
    <id>https://go.waylonwalker.com/thought-95/</id>
    <updated>2023-08-21T13:28:06Z</updated>
    <published>2023-08-21T13:28:06Z</published>
    <link href="https://go.waylonwalker.com/thought-95/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/sharkdp/bat</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/sharkdp/bat&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://repository-images.githubusercontent.com/130464961/20727580-dd13-11e9-8f03-0789a00a3b64&#34; alt=&#34;GitHub - sharkdp/bat: A cat(1) clone with wings. — A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - sharkdp/bat: A cat(1) clone with wings. — A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;GitHub - sharkdp/bat: A cat(1) clone with wings.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;A cat(1) clone with wings. Contribute to sharkdp/bat development by creating an account on GitHub.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Bat is my favorite pager, its the one for me that seems to just work more than the rest. colors, syntax highlighting, line numbers search, it just feels the most natural.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Relocating the Docker root directory - IBM Documentation</title>
    <id>https://go.waylonwalker.com/thought-58/</id>
    <updated>2023-07-29T01:07:06Z</updated>
    <published>2023-07-29T01:07:06Z</published>
    <link href="https://go.waylonwalker.com/thought-58/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.ibm.com/docs/en/z-logdata-analytics/5.1.0?topic=compose-relocating-docker-root-directory&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.ibm.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.ibm.com.png&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Relocating the Docker root directory&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;If the space in the file system where the Docker root directory is located is not adequate and cannot be increased, you must relocate the directory.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;ibm.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;A very straightforward guide to moving your docker data, such as container storage to a different location.  In my case I wanted it off of my boot drive.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 containers/aardvark-dns: Authoritative dns server for A/AAAA c...</title>
    <id>https://go.waylonwalker.com/thought-57/</id>
    <updated>2023-07-29T01:05:22Z</updated>
    <published>2023-07-29T01:05:22Z</published>
    <link href="https://go.waylonwalker.com/thought-57/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/containers/aardvark-dns</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://github.com/containers/aardvark-dns&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://opengraph.githubassets.com/899426996470d42249a5874554114422db69357e78196fb337d7b0085483c43a/containers/aardvark-dns&#34; alt=&#34;GitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host&amp;#39;s /etc/resolv.conf — Authoritative dns server for A/AAAA container records. Forwards other request to host&amp;#39;s /etc/resolv.conf - containers/aardvark-dns&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host&amp;#39;s /etc/resolv.conf — Authoritative dns server for A/AAAA container records. Forwards other request to host&amp;#39;s /etc/resolv.conf - containers/aardvark-dns&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;GitHub - containers/aardvark-dns: Authoritative dns server for A/AAAA container records. Forwards other request to host&amp;#39;s /etc/resolv.conf&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Authoritative dns server for A/AAAA container records. Forwards other request to host&amp;#39;s /etc/resolv.conf - containers/aardvark-dns&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;GitHub · github.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I ran into some dns issues while running podman on arch, aparantly I had missed an optional dependency of aardvark-dns for container to container dns resolution.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paru -S aardvark-dns&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Podman - ArchWiki</title>
    <id>https://go.waylonwalker.com/thought-56/</id>
    <updated>2023-07-29T01:03:23Z</updated>
    <published>2023-07-29T01:03:23Z</published>
    <link href="https://go.waylonwalker.com/thought-56/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://wiki.archlinux.org/title/Podman</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://wiki.archlinux.org/title/Podman&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/wiki.archlinux.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/wiki.archlinux.org.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Podman - ArchWiki&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;wiki.archlinux.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I kept running into limits in the number of subuid and subgid’s I had on my system by default.  As always thank the arch wiki guide for having the most comprehensive yet consice guide to setup podman.&lt;/p&gt;&#xA;&lt;p&gt;What I needed to do to fix the error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usermod --add-subuids 100000-165535 --add-subgids 100000-165535 username&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 TestDisk Step By Step - CGSecurity</title>
    <id>https://go.waylonwalker.com/thought-55/</id>
    <updated>2023-07-29T01:00:51Z</updated>
    <published>2023-07-29T01:00:51Z</published>
    <link href="https://go.waylonwalker.com/thought-55/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.cgsecurity.org/wiki/TestDisk_By_Step</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.cgsecurity.org/wiki/TestDisk_Step_By_Step&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://www.cgsecurity.org/testdisklogo-clear-100.png&#34; alt=&#34;TestDisk Step By Step&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: TestDisk Step By Step&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;TestDisk Step By Step&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;CGSecurity · cgsecurity.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;code&gt;testdisk&lt;/code&gt; is an amazing command line utility (interactive tui) that just saved me a hard drive that was filled with data, but every machine that I plugged it into told me that it was completely unpartitioned.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 How to Manage &#39;Systemd&#39; Services and Units Using &#39;Systemctl&#39; i...</title>
    <id>https://go.waylonwalker.com/thought-9/</id>
    <updated>2023-07-28T14:59:37Z</updated>
    <published>2023-07-28T14:59:37Z</published>
    <link href="https://go.waylonwalker.com/thought-9/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.tecmint.com/manage-services-using-systemd-and-systemctl-in-linux/&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://www.tecmint.com/wp-content/uploads/2015/04/Manage-Linux-Services-Using-Systemctl.jpg&#34; alt=&#34;How to Manage &amp;#39;Systemd&amp;#39; Services and Units Using &amp;#39;Systemctl&amp;#39; in Linux — Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serves as a replacement of System V init daemon.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: How to Manage &amp;#39;Systemd&amp;#39; Services and Units Using &amp;#39;Systemctl&amp;#39; in Linux — Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serves as a replacement of System V init daemon.&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;How to Manage &amp;#39;Systemd&amp;#39; Services and Units Using &amp;#39;Systemctl&amp;#39; in Linux&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Systemctl is a systemd utility which is responsible for Controlling the systemd system and service manager. Systemd is a collection of system management daemons, utilities and libraries which serve...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;How to Manage ‘Systemd’ Services and Units Using ‘Systemctl’ in Linux · tecmint.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;A fantastic overview of the systemd cli.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 How to fix ZFS pool not importing at boot :: ./techtipsy — Her...</title>
    <id>https://go.waylonwalker.com/thought-8/</id>
    <updated>2023-07-28T14:59:37Z</updated>
    <published>2023-07-28T14:59:37Z</published>
    <link href="https://go.waylonwalker.com/thought-8/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://ounapuu.ee/posts/2021/02/01/how-to-fix-zfs-pool-not-importing-at-boot/&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ounapuu.ee.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ounapuu.ee.png&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;How to fix ZFS pool not importing at boot&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;You have probably tried Stack Exchange and reddit at this point, so what do you have to lose?&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;./techtipsy · ounapuu.ee&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Hacky solution to get &lt;code&gt;zpool import tank&lt;/code&gt; to work on boot right away.  This has been an issue that has plagued my system for months and no matter what dependencies I add in it never works, but adding a sleep as ExecStartPre did the trick.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 Deleting Specific Lines in a File with sed or yq</title>
    <id>https://go.waylonwalker.com/thought-6/</id>
    <updated>2023-07-28T14:59:37Z</updated>
    <published>2023-07-28T14:59:37Z</published>
    <link href="https://go.waylonwalker.com/thought-6/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq&#34; class=&#34;embed-card-link&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://nickjanetakis.com/assets/blog/cards/deleting-specific-lines-in-a-file-with-sed-or-yq.jpg&#34; alt=&#34;Deleting Specific Lines in a File with sed or yq — Nick Janetakis — We&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Deleting Specific Lines in a File with sed or yq — Nick Janetakis — We&#34;&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;Deleting Specific Lines in a File with sed or yq — Nick Janetakis&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;We&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Nick Janetakis · nickjanetakis.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;sed can be a tricky beast, I often stumble when trying to pipe into it.  Next time I need to use sed, I should reference this article by Nick Janetakis.  He makes it looks much easier than my experience has been, and it appears to behave like a vim &lt;code&gt;:%s/&lt;/code&gt; substitution does, or a &lt;code&gt;g/&lt;/code&gt; g command.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 How to pull from images from docker.io with podman</title>
    <id>https://go.waylonwalker.com/thought-4/</id>
    <updated>2023-07-28T14:59:37Z</updated>
    <published>2023-07-28T14:59:37Z</published>
    <link href="https://go.waylonwalker.com/thought-4/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://gist.github.com/isomorphisms/3114ab86960656a729a6b4653001aae2</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external embed-card-provider-github&#34; data-needs-code-css=&#34;true&#34;&gt;&#xA;  &lt;div class=&#34;embed-card-rich&#34;&gt;&#xA;&lt;div data-needs-code-css=&#34;true&#34;&gt;&lt;div class=&#34;embed-gist&#34;&gt;&#xA;  &lt;div class=&#34;embed-gist-header&#34;&gt;&#xA;    &lt;a href=&#34;https://gist.github.com/isomorphisms/3114ab86960656a729a6b4653001aae2&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;gistfile1.txt&lt;/a&gt;&#xA;    &lt;span class=&#34;embed-gist-language&#34;&gt;text&lt;/span&gt;&#xA;  &lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;On void linux.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Under `/etc/containers/` there is a file called `registries.conf`. It is complemented by `man 5 containers-registries.conf`.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Change (for me lines 11-12) which say&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[registries.search]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;registries = []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[registries.search]&#xA;registries = [&amp;#39;docker.io&amp;#39;]&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#xA;(drawn from https://www.projectatomic.io/blog/2018/05/podman-tls/)&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Without the above you won’t be able to use basic &lt;code&gt;podman&lt;/code&gt; functions. You might get errors like:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;Error: unable to pull fedora:28: image name provided is a short name and no search registries are defined in the registries config file.&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Error: unable to pull stripe/stripe-cli: image name provided is a short name and no search registries are defined in the registries config file.&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Various documentation (redhat blog entries, &lt;code&gt;man podman&lt;/code&gt; pages) say that dockerhub is a default, but without this step it’s clearly not.&lt;/p&gt;&#xA;&lt;/code&gt;&lt;p&gt;&lt;code&gt;Good luck. Feel free to use the comment box below if you have a github account.&#xA;&lt;/code&gt;&lt;/p&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;By default podman will not pull images from docker.io and will need setup.  This guide worked for me.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>💭 LazyVim Installation</title>
    <id>https://go.waylonwalker.com/thought-2/</id>
    <updated>2023-07-28T14:59:37Z</updated>
    <published>2023-07-28T14:59:37Z</published>
    <link href="https://go.waylonwalker.com/thought-2/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.lazyvim.org/installation</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a href=&#34;https://www.lazyvim.org/installation&#34; class=&#34;embed-card-link  has-avatar has-avatar-before&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.lazyvim.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.lazyvim.org.ico&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;🛠️ Installation | LazyVim&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;You can find a starter template for LazyVim here&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;lazyvim.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Lately in 2023 I have been leaning on lazyvim for my new setups where I am not necessarily ready to drop my full config.  It’s been pretty solid, and comes with a very nice setup out of the box, the docs are pretty fantastic as well.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Note&lt;/p&gt;&#xA;&lt;p&gt;This post is a &lt;a href=&#34;/thoughts/&#34; class=&#34;wikilink&#34; data-title=&#34;Thoughts&#34; data-description=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34; data-date=&#34;2024-04-01&#34; data-preview=&#34;These are generally my thoughts on a web page or some sort of url, except a rare few don&amp;#39;t have a link. These are dual published off of my...&#34;&gt;thought&lt;/a&gt;. It’s a short note that I make&#xA;about someone else’s content online &lt;a href=&#34;/tags/thoughts/&#34; class=&#34;hashtag-tag&#34; data-tag=&#34;thoughts&#34; data-count=&#34;2&#34; data-reading-time=&#34;3&#34; data-reading-time-text=&#34;3 minutes&#34;&gt;#thoughts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>setting up paru | installing from the AUR for the first time</title>
    <id>https://go.waylonwalker.com/setting-up-paru/</id>
    <updated>2023-05-27T20:22:42Z</updated>
    <published>2023-05-27T20:22:42Z</published>
    <link href="https://go.waylonwalker.com/setting-up-paru/" rel="alternate" type="text/html"></link>
    <summary type="text">paru is an aur helper that allows you to use a package manager to install packages from the aur.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/paru/&#34; class=&#34;glossary-term&#34; title=&#34;paru is a package manager for archlinux that installs packages from the &lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;AUR&lt;/a&gt;.&#34;&gt;paru&lt;/a&gt; is an aur helper that allows you to use a package manager to install&#xA;packages from the aur.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-the-aur&#34;&gt;What’s the Aur &lt;a href=&#34;#whats-the-aur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The Aur is a set of community managed packages that can be installed on arch based distros.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-a-helper&#34;&gt;Why a helper? &lt;a href=&#34;#why-a-helper&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;paru just makes it easy, no clone and run makepkg. You can do everything paru&#xA;can do using the built in pacman installer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;manual-install-from-the-aur&#34;&gt;Manual Install from the Aur &lt;a href=&#34;#manual-install-from-the-aur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need to manually instal pacman from the aur in order to get started.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S --needed base-devel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://aur.archlinux.org/paru.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; paru&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;makepkg -si&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;installing-packages-with-paru&#34;&gt;Installing packages with paru &lt;a href=&#34;#installing-packages-with-paru&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Once setup you are ready to install packages from the AUR just like the core repos.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# you can update your system using paru&#xA;paru -Syu&#xA;&#xA;# you can install packages from the AUR&#xA;paru -S tailscale&#xA;paru -S prismlauncher&#xA;&#xA;# even core repo packages can be installed&#xA;paru -S docker&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;paru-in-docker&#34;&gt;Paru in Docker &lt;a href=&#34;#paru-in-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a snippet from my devtainer&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/Dockerfile&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dockerfile&lt;/a&gt;.&#xA;Where I use paru to install packages from the AUR inside of a dockerfile.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FROM archlinux&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RUN &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;[multilib]&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/pacman.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Include = /etc/pacman.d/mirrorlist&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/pacman.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    pacman --noconfirm -Syyu &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    pacman --noconfirm -S base-devel git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    groupadd --gid &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    useradd --uid &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; --gid &lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt; -m -r -s /bin/bash devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    passwd -d devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;devtainer ALL=(ALL) ALL&amp;#39;&lt;/span&gt; &amp;gt; /etc/sudoers.d/devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    mkdir -p /home/devtainer/.gnupg &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;standard-resolver&amp;#39;&lt;/span&gt; &amp;gt; /home/devtainer/.gnupg/dirmngr.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    chown -R devtainer:devtainer /home/devtainer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    mkdir /build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    chown -R devtainer:devtainer /build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    sudo -u devtainer git clone --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; https://aur.archlinux.org/paru.git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; paru &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    sudo -u devtainer makepkg --noconfirm -si &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/#RemoveMake/RemoveMake/g&amp;#39;&lt;/span&gt; /etc/paru.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    pacman -Qtdq &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -r pacman --noconfirm -Rcns &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    rm -rf /home/devtainer/.cache &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    rm -rf /build&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;USER devtainer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RUN sudo -u devtainer paru --noconfirm --skipreview --useask -S &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    bat &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    cargo &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    direnv &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    dua-cli &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    dust &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;    fd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-thoughts&#34;&gt;Final Thoughts &lt;a href=&#34;#final-thoughts&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are other options out there, paru seemed to be the most supported at the&#xA;time I started using arch and there has been no other reason for me to change&#xA;it. It’s treated me well for nearly a year now.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>useful btrfs tools</title>
    <id>https://go.waylonwalker.com/useful-btrfs-tools/</id>
    <updated>2023-03-22T17:31:39Z</updated>
    <published>2023-03-22T17:31:39Z</published>
    <link href="https://go.waylonwalker.com/useful-btrfs-tools/" rel="alternate" type="text/html"></link>
    <summary type="text">Looking at disk usage on any of these must be done using a tool built for it if you want an accurate measurement. General purpose tools like du will be...</summary>
    <content type="html">&lt;h2 id=&#34;disk-usage&#34;&gt;disk usage &lt;a href=&#34;#disk-usage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Looking at disk usage on any of these must be done using a tool built for it if&#xA;you want an accurate measurement. General purpose tools like du will be&#xA;inaccurate as they do not count things like duplicate copies in snapshots.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ sudo btrfs &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt; usage -T /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;sudo&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; password &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; waylon:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Overall:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Device size:                 465.26GiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Device allocated:            251.06GiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Device unallocated:          214.20GiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Device missing:                  0.00B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Device slack:                    0.00B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Used:                        234.44GiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Free &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;estimated&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:            227.37GiB      &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;min: 120.27GiB&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Free &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;statfs, df&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:           227.37GiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Data ratio:                       1.00&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Metadata ratio:                   2.00&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Global reserve:              478.88MiB      &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;used: 0.00B&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Multiple profiles:                  no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  Data      Metadata System&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Id Path           single    DUP      DUP      Unallocated Total     Slack&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-- -------------- --------- -------- -------- ----------- --------- -----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; /dev/nvme1n1p2 239.00GiB 12.00GiB 64.00MiB   214.20GiB 465.26GiB     -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-- -------------- --------- -------- -------- ----------- --------- -----&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Total          239.00GiB  6.00GiB 32.00MiB   214.20GiB 465.26GiB 0.00B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Used           225.82GiB  4.31GiB 64.00KiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;-T for tabular format&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;mounting-the-drive&#34;&gt;mounting the drive &lt;a href=&#34;#mounting-the-drive&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /mnt/nvme1n1p2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -o &lt;span class=&#34;nv&#34;&gt;subvol&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/ /dev/nvme1n1p2 /mnt/nvme1n1p2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mounting-a-snapshot&#34;&gt;mounting a snapshot &lt;a href=&#34;#mounting-a-snapshot&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;snapper&#34;&gt;snapper &lt;a href=&#34;#snapper&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;btdu&#34;&gt;btdu &lt;a href=&#34;#btdu&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btdu /mnt/nvme1n1p2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; btdu v0.5.0 @ /mnt/nvme1n1p2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--- / -----------------------------------------------------------------------------------  ~5.974 GiB &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;          &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; /&amp;lt;DUP&amp;gt;  ~239.1 GiB &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;##########] /&amp;lt;SINGLE&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--- Details: ----------------------------------------------------------------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Full path: /mnt/nvme1n1p2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Average query duration: 0.0002558 seconds&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Represented size: ~245.0 GiB &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;607659&lt;/span&gt; samples&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, ±0.0 B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Logical offsets: ..., 2659587804610, 2608834997278, &lt;span class=&#34;m&#34;&gt;2688762158568&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--- Explanation:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Welcome to btdu. You are in the hierarchy root&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; results will be arranged according to&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;their block group and profile, and &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; by path.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Use the arrow keys to navigate, press ? &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; help.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Samples: &lt;span class=&#34;m&#34;&gt;607659&lt;/span&gt;  Resolution: ~422.8 KiB&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;btrfs-assistant&#34;&gt;btrfs-assistant &lt;a href=&#34;#btrfs-assistant&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Arch Linux Randomly Rejecting Passwords</title>
    <id>https://go.waylonwalker.com/arch-rejects-password/</id>
    <updated>2023-01-19T07:46:31Z</updated>
    <published>2023-01-19T07:46:31Z</published>
    <link href="https://go.waylonwalker.com/arch-rejects-password/" rel="alternate" type="text/html"></link>
    <summary type="text">Fix Arch Linux randomly rejecting passwords with one command. Try &gt; &#39;faillock --user $USER&#39; to reset login counter and regain access. Quick &gt; solution for a...</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;Fix Arch Linux randomly rejecting passwords with one command. Try&#xA;‘faillock –user $USER’ to reset login counter and regain access. Quick&#xA;solution for a smooth computing&amp;#34;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000255.3612717469.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000255.3612717469.webp&#34; alt=&#34;an intertwined mess of wires&#34;/ data-glightbox=&#34;description: an intertwined mess of wires&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;If you’re an Arch Linux user, you may have experienced a frustrating issue&#xA;where your password is randomly not being accepted by the system. This can be a&#xA;major inconvenience and can cause a lot of frustration, especially if it&#xA;happens frequently.&lt;/p&gt;&#xA;&lt;p&gt;The good news is that there is a simple fix for this issue. The following bash&#xA;code can be used to fix the problem:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;bash faillock --user $USER&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This command is used to reset the failed login count for the current user. By&#xA;running this command, you will be able to reset the system’s login counter and&#xA;regain access to your account.&lt;/p&gt;&#xA;&lt;p&gt;It’s important to note that this command should only be used as a temporary&#xA;solution. If you find yourself frequently having to run this command, it’s&#xA;likely that there is a deeper issue with your system that needs to be&#xA;addressed.&lt;/p&gt;&#xA;&lt;p&gt;In any case, if you’re experiencing problems with your Arch Linux system not&#xA;accepting your password, give the above command a try and see if it resolves&#xA;the issue for you.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ssh copy id</title>
    <id>https://go.waylonwalker.com/ssh-copy-id/</id>
    <updated>2022-12-04T20:10:05Z</updated>
    <published>2022-12-04T20:10:05Z</published>
    <link href="https://go.waylonwalker.com/ssh-copy-id/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently setup some vm&#39;s on my main machine and got sick of signing in with passwords.</summary>
    <content type="html">&lt;p&gt;I recently setup some vm’s on my main machine and got sick of signing in with&#xA;passwords.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-copy-id -i ~/.ssh/id_rsa.pub virt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ssh key permissions</title>
    <id>https://go.waylonwalker.com/ssh-key-permissions/</id>
    <updated>2022-11-22T16:16:38Z</updated>
    <published>2022-11-22T16:16:38Z</published>
    <link href="https://go.waylonwalker.com/ssh-key-permissions/" rel="alternate" type="text/html"></link>
    <summary type="text">I just shared some ssh keys with myself and ran into this error telling me that I did not set the correct permissions on my key.</summary>
    <content type="html">&lt;p&gt;I just shared some ssh keys with myself and ran into this error telling me that&#xA;I did not set the correct permissions on my key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Permissions &lt;span class=&#34;m&#34;&gt;0750&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/home/waylon/.ssh/id_*******&amp;#39;&lt;/span&gt; are too open.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;It is required that your private key files are NOT accessible by others.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This private key will be ignored.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Load key &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/.ssh/id_*******&amp;#34;&lt;/span&gt;: bad Permissions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;repo: Permission denied &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;publickey,gssapi-keyex,gssapi-with-mic&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fatal: Could not &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; from remote repository.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please make sure you have the correct access rights&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;and the repository exists.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I changed them with the following commands.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; ~/.ssh/id_*******.pub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; ~/.ssh/id_*******&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>obs virtual camera on boot</title>
    <id>https://go.waylonwalker.com/obs-virtual-camera-on-boot/</id>
    <updated>2022-10-18T08:34:25Z</updated>
    <published>2022-10-18T08:34:25Z</published>
    <link href="https://go.waylonwalker.com/obs-virtual-camera-on-boot/" rel="alternate" type="text/html"></link>
    <summary type="text">For far too long I have had to fidget with v4l2oloopback after reboot. I&#39;ve had this happen on ubuntu 18.04, 22.04, and arch.</summary>
    <content type="html">&lt;p&gt;For far too long I have had to fidget with v4l2oloopback after reboot.  I’ve&#xA;had this happen on ubuntu 18.04, 22.04, and arch.&lt;/p&gt;&#xA;&lt;p&gt;After a reboot the start virtual camera button won’t work, It appears and is&#xA;clickable, but never turns on.  Until I run this command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe v4l2loopback &lt;span class=&#34;nv&#34;&gt;video_nr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;card_label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OBS Video Source&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;exclusive_caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://stable-diffusion.waylonwalker.com/000378.373882614.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://stable-diffusion.waylonwalker.com/000378.373882614.webp&#34; alt=&#34;“cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614 &#34;/ data-glightbox=&#34;description: “cell shaded, long, full body, shot of a cybernetic blue soldier with glowing pink eyes looking into a selfie camera with ring light, llustration, post grunge, 4 k, warm colors, cinematic dramatic atmosphere, sharp focus, pink glowing volumetric lighting, concept art by josan gonzales and wlop, by james jean, Victo ngai, David Rubín, Mike Mignola, Laurie Greasley, highly detailed, sharp focus,alien,Trending on Artstation, HQ, deviantart, art by artgem” -s50 -W832 -H416 -C12.0 -Ak_lms -S373882614&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Today I learned that you can turn on kernel modules through some files in &lt;code&gt;/etc/modules...&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is what I did to my arch system to get it to work right after boot.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;v4l2loopback&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/modules-load.d/v4l2loopback.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;options v4l2loopback video_nr=10 card_label=\&amp;#34;OBS Video Source\&amp;#34; exclusive_caps=1&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/modprobe.d/v4l2loopback.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setting up snapper on Arch</title>
    <id>https://go.waylonwalker.com/setting-up-snapper-on-arch/</id>
    <updated>2022-09-05T11:00:46Z</updated>
    <published>2022-09-05T11:00:46Z</published>
    <link href="https://go.waylonwalker.com/setting-up-snapper-on-arch/" rel="alternate" type="text/html"></link>
    <summary type="text">https://www.youtube.com/watch?v=_97JOyC1o2o</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=_97JOyC1o2o&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=_97JOyC1o2o&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;snapper&#xA;snap-pac&#xA;grub-btrfs&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;note&#34;&gt;Note &lt;a href=&#34;#note&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;These are mostly my notes to remind myself, I’d Highly reccomend watching&#xA;&lt;a href=&#34;https://www.youtube.com/watch?v=_97JOyC1o2o&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;this-video&lt;/a&gt; or reading this&#xA;&lt;a href=&#34;https://wiki.archlinux.org/title/snapper&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/wiki.archlinux.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/wiki.archlinux.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;arch wiki page&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;snapshots-already-exists-error&#34;&gt;/.snapshots already exists error &lt;a href=&#34;#snapshots-already-exists-error&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When I started running &lt;code&gt;sudo snapper -c root create-config /&lt;/code&gt;  I ran into the&#xA;following error.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/689b85ad-aa94-44d2-a05b-111de5f29400.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/689b85ad-aa94-44d2-a05b-111de5f29400.webp&#34; alt=&#34;snapshots-already-exists.webp&#34;/ data-glightbox=&#34;description: snapshots-already-exists.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre&gt;&lt;code&gt;Creating config failed (creating btrfs subvolume .snapshots failed since it already exists).&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;remove-existing-snapshots&#34;&gt;remove existing snapshots &lt;a href=&#34;#remove-existing-snapshots&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /.snapshots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm -r /.snapshots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;configure-snapper&#34;&gt;configure snapper &lt;a href=&#34;#configure-snapper&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snapper -c root create-config /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snapper -c home create-config /home&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;btrfs-subvolumes&#34;&gt;btrfs subvolumes &lt;a href=&#34;#btrfs-subvolumes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvolume list /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/dbd2e2ee-3bd7-47a3-a808-578f96d3d6d4.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/dbd2e2ee-3bd7-47a3-a808-578f96d3d6d4.webp&#34; alt=&#34;btrfs-subvolume-list.webp&#34;/ data-glightbox=&#34;description: btrfs-subvolume-list.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvolume delete /.snapshots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /.snapshots&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;heading&#34;&gt; &lt;a href=&#34;#heading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# you might not see snapshots mounted yet&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# if you check fstab you will see an entry for it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /etc/fstab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# mount it&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# now you should see /.snapshots mounted&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You should now see &lt;code&gt;.snapshots&lt;/code&gt; in mountpoints.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/c551d2be-0441-4dc7-8ee5-6ba600faa126.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/c551d2be-0441-4dc7-8ee5-6ba600faa126.webp&#34; alt=&#34;lsblk-snapshots.webp&#34;/ data-glightbox=&#34;description: lsblk-snapshots.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;setting-the-default-to-&#34;&gt;Setting the default to @ &lt;a href=&#34;#setting-the-default-to-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;so that you can boot into snapper snapshots&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvol get-default /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvol list /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/231bb2a9-1679-4c42-9fd9-1fa6d7490cb2.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/231bb2a9-1679-4c42-9fd9-1fa6d7490cb2.webp&#34; alt=&#34;btrfs-subvol-get-default.webp&#34;/ data-glightbox=&#34;description: btrfs-subvol-get-default.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvol set-default &lt;span class=&#34;m&#34;&gt;256&lt;/span&gt; /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs subvol get-default /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## ID 256 gen 105268 top level 5 path @&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1780cbfe-0c71-432e-bef6-00db6a7d9563.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/1780cbfe-0c71-432e-bef6-00db6a7d9563.webp&#34; alt=&#34;btrfs-subvol-set-default.webp&#34;/ data-glightbox=&#34;description: btrfs-subvol-set-default.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;snapper-ls&#34;&gt;snapper ls &lt;a href=&#34;#snapper-ls&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snapper ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/24741b02-db31-41fe-957b-6eec2600db2b.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/24741b02-db31-41fe-957b-6eec2600db2b.webp&#34; alt=&#34;snapper-ls-init.webp&#34;/ data-glightbox=&#34;description: snapper-ls-init.webp&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;leaving off for now&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/_97JOyC1o2o?t=909&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/_97JOyC1o2o?t=909&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;config&#34;&gt;config &lt;a href=&#34;#config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nvim /etc/snapper/configs/root&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ALLOW_GROUPS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;wheel&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# limits for timeline cleanup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TIMELINE_MIN_AGE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1800&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TIMELINE_LIMIT_HOURLY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TIMELINE_LIMIT_DAILY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;7&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TIMELINE_LIMIT_WEEKLY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TIMELINE_LIMIT_MONTHLY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TIMELINE_LIMIT_YEARLY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;sudo chown -R :wheel /.snapshots/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>The one reason I switched to arch</title>
    <id>https://go.waylonwalker.com/switched-to-arch/</id>
    <updated>2022-07-23T12:05:55Z</updated>
    <published>2022-07-23T12:05:55Z</published>
    <link href="https://go.waylonwalker.com/switched-to-arch/" rel="alternate" type="text/html"></link>
    <summary type="text">The community, that&#39;s it, end of post, roll the credits.</summary>
    <content type="html">&lt;p&gt;The community, that’s it, end of post, roll the credits.&lt;/p&gt;&#xA;&lt;h2 id=&#34;im-a-tinkerer&#34;&gt;I’m a tinkerer &lt;a href=&#34;#im-a-tinkerer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am a tinkerer, I am not going to run a stock desktop manager, mostly becuase&#xA;that’s just not how my brain works.  I need to tweak everything to fit my&#xA;needs.  Grantid I have not spent much time in many full fledged linux desktop&#xA;environments.  They are far more customizable than windows ever will be, I&#xA;absolutely love that about them.  Inevitibly I end up in a situation where I&#xA;hit a wall, it just won’t do what I want it to do, or my lack of understanding&#xA;what came wtih it holds me back.&lt;/p&gt;&#xA;&lt;h2 id=&#34;minimal&#34;&gt;minimal &lt;a href=&#34;#minimal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I love minimal installs.  I love just building up my system from the bottom up&#xA;with things that I like, I understand, and that I can script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;im-a-noob&#34;&gt;I’m a noob &lt;a href=&#34;#im-a-noob&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I spend a lot of my time in the terminal.  I’d like to think I know how to use&#xA;a linux command line for software development really well, but there are a lot&#xA;of things that I still dont know all that well, mostly because I don’t need to.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-&lt;a href=&#34;/aur/&#34; class=&#34;glossary-term&#34; title=&#34;Arch User Repository, a collection of community maintained packages for archlinux.&#34;&gt;aur&lt;/a&gt;&#34;&gt;The AUR &lt;a href=&#34;#the-aur&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Arch’s &lt;strong&gt;community&lt;/strong&gt; maintained repo&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now by far this is the thing that really kicked me over the edge and made arch&#xA;feel like something that I needed to use.  While on any Debian based distro it&#xA;was inevitible that I would stumble accross a bug that was fixed in a newer&#xA;version, not available in the standard repos, want new features that are not&#xA;available in the standard repos, or want software that is not packaged into one&#xA;of the standard repos.&lt;/p&gt;&#xA;&lt;p&gt;This makes creating scripted installs/updates difficult.  I have to pull&#xA;releses from github, or some random website, or clone and build packages&#xA;myself.  It’s not too hard, but since I am the only one that maintains my&#xA;personal install script it’s inevitible that something changes in the build&#xA;process or release on something and breaks it over time.&lt;/p&gt;&#xA;&lt;p&gt;PPA’s are not the same.  Well maintained ppa’s are fine, but many of them are&#xA;not.  PPA’s are just deb files that someone hosts and their quality can be hit&#xA;or miss depending on if the maintainer still uses it or not.  While the AUR is&#xA;not completely absent of stale packages it’s rolling release nature tends to&#xA;keep them always up to date, and when it doesn’t the community helps out by&#xA;flagging these packages in the AUR and upvoting maintained packages.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-arch-wiki&#34;&gt;The Arch Wiki &lt;a href=&#34;#the-arch-wiki&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have underutilized the arch wiki in the past, but dang it has some really&#xA;good guides.  For me (at my level) they edge on being to brief, generally I find wiki’s&#xA;overly versose and hard to find what you are looking for.  The arch wiki gives&#xA;you what you need and no more.  The articles and forum really have answered&#xA;many of my questions and depened my understanding of linux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-am-learning&#34;&gt;I am learning &lt;a href=&#34;#i-am-learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While I am still a noob to a lot of this I am learning, and a combination of&#xA;the minimal install with the arch wiki have really helped me learn a lot about&#xA;lower level things like partitioning, grub, systemd, xorg.  On most other&#xA;systems these were just taken care of out of the box.&lt;/p&gt;&#xA;&lt;h2 id=&#34;arch-is-not-hardcore&#34;&gt;Arch is not hardcore &lt;a href=&#34;#arch-is-not-hardcore&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I think there is an old sentimate that arch is for hardcore users only.  Their&#xA;typical install process really gatekeeps it this way, but there are other&#xA;installers such as &lt;code&gt;archinstall&lt;/code&gt;, which I used and now ships with the arch iso,&#xA;that make it not much harder than any other distro.&lt;/p&gt;&#xA;&lt;p&gt;If you are a tinkerer who likes to try different things, likes to set you&#xA;machine up just the way you like it, and script it, arch really feels much&#xA;easier to do this with.  I’d even stand behind it being a distro for noob&#xA;tinkerers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;does-distro-matter&#34;&gt;Does distro matter?? &lt;a href=&#34;#does-distro-matter&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Idk if it really matters all that much in the end, but the community behind the&#xA;aur and arch wiki make setting up an up to date machine so much easier than on&#xA;any lts based distro.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>arch Fonts</title>
    <id>https://go.waylonwalker.com/arch-fonts/</id>
    <updated>2022-07-17T10:59:59Z</updated>
    <published>2022-07-17T10:59:59Z</published>
    <link href="https://go.waylonwalker.com/arch-fonts/" rel="alternate" type="text/html"></link>
    <summary type="text">https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://gist.github.com/YoEight/d19112db56cd8f93835bf2d009d617f7&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Manage your displays with xrandr manager</title>
    <id>https://go.waylonwalker.com/xrandr-manager/</id>
    <updated>2022-07-16T08:43:17Z</updated>
    <published>2022-07-16T08:43:17Z</published>
    <link href="https://go.waylonwalker.com/xrandr-manager/" rel="alternate" type="text/html"></link>
    <summary type="text">xrandr is a great cli to manage your windows in a linux distro using x11, which is most of them. The issue is that I can never remember all the flags to the...</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/9cd8d65495366b8d57d805ca0faf5fd5.webp&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/9cd8d65495366b8d57d805ca0faf5fd5.webp&#34; alt=&#34;a stable diffusion done with a111 web ui&#34;/ data-glightbox=&#34;description: a stable diffusion done with a111 web ui&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;xrandr is a great cli to manage your windows in a linux distro using x11, which&#xA;is most of them. The issue is that I can never remember all the flags to the&#xA;command, and if you are using it with something like a laptop using a dock the&#xA;names of all the displays tend to change every time you redock. This makes it&#xA;really hard to make scripts that work right every time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;homepage&#34;&gt;Homepage &lt;a href=&#34;#homepage&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the&#xA;&lt;a href=&#34;https://github.com/deresmos/xrandr-manager&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;deresmos/xrandr-manager&lt;/a&gt; for more&#xA;details on it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;xrander-manager is a python cli application that is simply a nice interface&#xA;into xrandr. So you must have xrandr already installed, which is generally&#xA;just there on any x11 window manager, I’ve never had to install it.&lt;/p&gt;&#xA;&lt;p&gt;As with any python cli that is indended to be used as a global/system level cli&#xA;application I always install them with pipx. This automates the process of&#xA;creating a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; for xrandr-manager for me, and does not clutter&#xA;up my system packages with its dependencies that may eventually clash with&#xA;another that I want to use.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;# prereqs (xrandr, pipx)&#xA;pipx install xrandr-manager&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;set-main-monitor&#34;&gt;set main monitor &lt;a href=&#34;#set-main-monitor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First if your main display is not set to the correct monitor set your main&#xA;display first.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xrandr-manager -m HDMI-0&#xA;xrandr-manager -m DP-0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;prompt-mode&#34;&gt;prompt mode &lt;a href=&#34;#prompt-mode&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you dont know the name of your monitors and and don’t want to dig through&#xA;xrandr, you can just run &lt;code&gt;--prompt&lt;/code&gt; and tab complete to fill set your main&#xA;display.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xrandr-manager --prompt&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;direction&#34;&gt;direction &lt;a href=&#34;#direction&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is what I most often use xrandr-manager for. Once you have the main&#xA;display set you can tell it where to put the other monitor. I’ve only tried&#xA;this with two monitors, I have no idea what happens with more monitors.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xrandr-manager -d right&#xA;xrandr-manager -d left&#xA;xrandr-manager -d above&#xA;xrandr-manager -d below&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;mirror&#34;&gt;mirror &lt;a href=&#34;#mirror&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One thing that I always need to jump through hoops to do is mirror.&#xA;Occasionally I want to mirror so that more people can see the screen while we&#xA;are split screen gaming. This has seemed like a pain in any other xrandr&#xA;utility, but trivial in xrandr-manager.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;xrandr-manager --mirror&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;it-logs-out-the-xrandr-command&#34;&gt;It logs out the xrandr command &lt;a href=&#34;#it-logs-out-the-xrandr-command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One nice thing about xrandr-manager is that it echos out the xrandr command&#xA;that it’s running. This is nice because you can toss this behind a hotkey or an&#xA;init script.&lt;/p&gt;&#xA;&lt;h2 id=&#34;guis&#34;&gt;Guis &lt;a href=&#34;#guis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Ya there are guis that do this. I’ve had good luck with arandr. It’s more&#xA;intuitive to drag windows around like what you would do in windows. Every once&#xA;in awhile it messes up and my polybar overlaps my windows, or my windows end up&#xA;only on half the screen.&lt;/p&gt;&#xA;&lt;p&gt;There are also graphics card specific utilities, Ive used nvidia x server&#xA;settings and it mostly works similar to arandr.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>qutebrowser clean up all status bars</title>
    <id>https://go.waylonwalker.com/clean-qutebrowser/</id>
    <updated>2022-05-11T22:03:30Z</updated>
    <published>2022-05-11T22:03:30Z</published>
    <link href="https://go.waylonwalker.com/clean-qutebrowser/" rel="alternate" type="text/html"></link>
    <summary type="text">I really like the super clean look of no status menus, no url bar, no bookmarks bar, nothing. Don&#39;t get me wrong these things are useful, but honestly they...</summary>
    <content type="html">&lt;p&gt;I really like the super clean look of no status menus, no url bar, no bookmarks&#xA;bar, nothing.  Don’t get me wrong these things are useful, but honestly they&#xA;take up screen real estate and I RARELY look at them.  What I really want is a&#xA;toggle hotkey.  I found this one from one of DT’s youtube video’s.  I can now&#xA;tap &lt;code&gt;xx&lt;/code&gt; and both the status bar at the botton and the address bar at the top&#xA;disappear.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.config/qutebrowser/config.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;xb&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;config-cycle statusbar.show always never&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;xt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;config-cycle tabs.show always never&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;xx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;config-cycle statusbar.show always never;; config-cycle tabs.show always never&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>A TTY Can Save Your Bacon</title>
    <id>https://go.waylonwalker.com/linux-tty/</id>
    <updated>2022-04-08T13:46:25Z</updated>
    <published>2022-04-08T13:46:25Z</published>
    <link href="https://go.waylonwalker.com/linux-tty/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently was unable to boot into my home Linux Desktop, it got stuck at diskcheck . I found that I was able to get in to a tty through a hotkey.</summary>
    <content type="html">&lt;p&gt;I recently was unable to boot into my home Linux Desktop, it got stuck at&#xA;diskcheck &lt;code&gt;fsck&lt;/code&gt;.  I found that I was able to get in to a tty through a hotkey.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1512281106120384519&#34;&gt;https://twitter.com/_WaylonWalker/status/1512281106120384519&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-a-tty&#34;&gt;What’s a TTY? &lt;a href=&#34;#whats-a-tty&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There’s probably more to it, but to me its a full screen terminal with zero&#xA;gui, not even your gui fonts.  It does log into your default shell so if you&#xA;have a comfy command line setup it will be here for you even though it looks&#xA;much different without fonts and full colorspace.&lt;/p&gt;&#xA;&lt;h2 id=&#34;normal-setup&#34;&gt;Normal setup &lt;a href=&#34;#normal-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Normally you have 6 TTY’s running, the first is dedicated to your desktop&#xA;manager, which is your login screen it might be something like gdm or lightdm.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ctrl+alt+F1: login screen&lt;/li&gt;&#xA;&lt;li&gt;ctrl+alt+F2: Desktop&lt;/li&gt;&#xA;&lt;li&gt;ctrl+alt+F3: TTY 3&lt;/li&gt;&#xA;&lt;li&gt;ctrl+alt+F4: TTY 4&lt;/li&gt;&#xA;&lt;li&gt;ctrl+alt+F5: TTY 5&lt;/li&gt;&#xA;&lt;li&gt;ctrl+alt+F6: TTY 6&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In my case the desktop manager neverstarted, so ctrl+alt+F1 brought me into a tty.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-happened&#34;&gt;What happened?? &lt;a href=&#34;#what-happened&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Well after getting back in and having some time to reflect, I think my Desktop&#xA;manager was installed or just broken, possibly during a update I ran a few days&#xA;prior.&lt;/p&gt;&#xA;&lt;p&gt;I tried a bunch of things like switching to lightdm, and manually running startx.&lt;/p&gt;&#xA;&lt;h2 id=&#34;getting-back-in&#34;&gt;Getting back in &lt;a href=&#34;#getting-back-in&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The final commands that ended up getting me back in were installing and starting gdm3.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install gdm3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start gdm3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dunk is my new diff pager</title>
    <id>https://go.waylonwalker.com/dunk-is-my-new-diff-pager/</id>
    <updated>2022-04-04T15:47:00Z</updated>
    <published>2022-04-04T15:47:00Z</published>
    <link href="https://go.waylonwalker.com/dunk-is-my-new-diff-pager/" rel="alternate" type="text/html"></link>
    <summary type="text">Dunk is a beautiful git diff tool built on top of rich.</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://github.com/darrenburns/dunk&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Dunk&lt;/a&gt; is a beautiful &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diff tool&#xA;built on top of &lt;a href=&#34;https://github.com/Textualize/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Browsing through twitter the other day I discovered it through this&#xA;tweet by &lt;a href=&#34;https://twitter.com/_darrenburns&#34;&gt;_darrenburns&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_darrenburns/status/1510350016623394817&#34; class=&#34;hoverlink&#34;&gt;https://twitter.com/_darrenburns/status/1510350016623394817&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;dunk-is-beta&#34;&gt;Dunk is beta &lt;a href=&#34;#dunk-is-beta&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before I dive in deep, I do want to mention that Dunk is super new and beta at&#xA;this point.  I am making it my default pager, because I know what I am doing&#xA;and can quickly shift back if I need to, no sweat.  If you are a little less&#xA;comfortable with the command line, terminal, or reading any issues that might&#xA;come up, it might be best if you just pipe into Dunk when you want to use it.&lt;/p&gt;&#xA;&lt;p&gt;The author really cautions the use of it as your default pager this early, I’m&#xA;just showing that it’s possible, and I’m trying it.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;He notes that it might have some issues especially with partially staged files.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;try-it&#34;&gt;try it &lt;a href=&#34;#try-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can try it with pipx.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pipx run dunk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-it&#34;&gt;install it &lt;a href=&#34;#install-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you like it, you can install it with pip or pipx, I prefer pipx for&#xA;cli applications like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install dunk&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;set-it-as-your-default-pager&#34;&gt;set it as your default pager &lt;a href=&#34;#set-it-as-your-default-pager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can configure dunk as your default pager with the command line, or&#xA;by editing your &lt;code&gt;.gitconfig&lt;/code&gt; file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global pager.diff &lt;span class=&#34;s2&#34;&gt;&amp;#34;dunk | less -R`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;pager&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;diff&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;dunk&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;less&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;-R&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;As &lt;a href=&#34;https://twitter.com/_darrenburns/status/1511106440613797896&#34;&gt;pointed out&lt;/a&gt; by&#xA;&lt;a href=&#34;https://twitter.com/_darrenburns&#34;&gt;_darrenburns&lt;/a&gt; dunk is not a pager and you&#xA;can gain back all of the benefits of using a pager by piping into less with the&#xA;&lt;code&gt;-R&lt;/code&gt; flag.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;reset-it-if-you-dont-like-it&#34;&gt;reset it if you don’t like it &lt;a href=&#34;#reset-it-if-you-dont-like-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can &lt;code&gt;--unset&lt;/code&gt; your pager configuration from the command line or edit&#xA;your &lt;code&gt;.gitconfig&lt;/code&gt; file by hand to remove the lines shown above.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global --unset pager.diff&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;comparison&#34;&gt;Comparison &lt;a href=&#34;#comparison&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have some edits to a game my son and I are working on unstaged so I&#xA;ran &lt;code&gt;git diff&lt;/code&gt; on that project with and without dunk to compare the&#xA;differences.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/git-diff-creeper-adventure-default.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/git-diff-creeper-adventure-default.png&#34; alt=&#34;default diff&#34;/ data-glightbox=&#34;description: default diff&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Dunk just looks so good.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/git-diff-creeper-adventure-dunk.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/git-diff-creeper-adventure-dunk.png&#34; alt=&#34;dunk diff&#34;/ data-glightbox=&#34;description: dunk diff&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;always-install&#34;&gt;Always install &lt;a href=&#34;#always-install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you follow along here often you know that I am a big fan of&#xA;installing all my tools in an ansible playbook so that I don’t suffer&#xA;configuring a new machine for months after getting it and wondering why&#xA;its not exactly like the last.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Dunk - prettier git diffs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# https://github.com/darrenburns/dunk&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check is dunk installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;command -v black&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;register&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;dunk_exists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ignore_errors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;install dunk&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;dunk_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pipx install dunk&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;[[ ansible-install-if-not-callable ]]&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;More on conditionally installing tools with ansible in this post.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Unzip minecraft mods to their directory from the command line</title>
    <id>https://go.waylonwalker.com/linux-unzip-directory/</id>
    <updated>2022-04-02T16:20:34Z</updated>
    <published>2022-04-02T16:20:34Z</published>
    <link href="https://go.waylonwalker.com/linux-unzip-directory/" rel="alternate" type="text/html"></link>
    <summary type="text">This morning I was trying to install a modpack on my minecraft server after getting a zip file, and its quite painful when I unzip everything in the current...</summary>
    <content type="html">&lt;p&gt;This morning I was trying to install a modpack on my minecraft server after&#xA;getting a zip file, and its quite painful when I unzip everything in the&#xA;current directory rather than the directory it belongs in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-had-the-files-on-a-windows-machine&#34;&gt;I had the files on a Windows Machine &lt;a href=&#34;#i-had-the-files-on-a-windows-machine&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So I’ve been struggling to get mods installed on linux lately and the easiest&#xA;way to download the entire pack rather than each mod one by one seems to be to&#xA;use the overwolf application on windows.  Once I have the modpack I can start&#xA;myself a small mod-server by zipping it, putting it in a mod-server directory&#xA;and running a python &lt;code&gt;http.server&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m http.server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;downoading-on-the-server&#34;&gt;Downoading on the server &lt;a href=&#34;#downoading-on-the-server&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Then I go back to my server and download the modpack with wget.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;wget&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;10.0.0.171&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8000&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;One&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BBlock&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BServer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;BPack&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;1.4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zip&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;unzip-to-the-minecraft-data-directory&#34;&gt;Unzip to the minecraft-data directory &lt;a href=&#34;#unzip-to-the-minecraft-data-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now I can unzip my mods into the &lt;code&gt;minecraft-data&lt;/code&gt; directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unzip One+Block+Server+Pack-1.4.zip -d minecraft-data&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;running-the-server-with-docker&#34;&gt;Running the server with docker &lt;a href=&#34;#running-the-server-with-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I run the minecraft server with docker, which is setup to mount the&#xA;minecraft-data directory.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/docker-minecraft-server/&#34; class=&#34;wikilink&#34; data-title=&#34;Running a Minecraft Server in Docker&#34; data-description=&#34;I&amp;#39;ve ran a Minecraft server at home since December 2017 for me and my son to play on. We start a brand new one somewhere between every day and every week....&#34; data-date=&#34;2022-02-07&#34; data-preview=&#34;I&amp;#39;ve ran a Minecraft server at home since December 2017 for me and my son to play on. We start a brand new one somewhere between every day and every week....&#34;&gt;Running a Minecraft Server in Docker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;A bit more on that in the other post, but when I download the whole modpack&#xA;like this I make these changes to my docker compose. (commented out lines)&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.8&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;walkercraft&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;itzg/minecraft-server:java8&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;EULA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;TRUE&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TYPE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;FORGE&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;VERSION&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.15.2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# MODS_FILE: /extras/mods.txt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# REMOVE_OLD_MODS: &amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;stdin_open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;restart&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;unless-stopped&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;m&#34;&gt;25565&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;25565&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;./minecraft-data:/data&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# - ./mods.txt:/extras/mods.txt:ro&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create a Swapfile on Your Linux Machine</title>
    <id>https://go.waylonwalker.com/linux-swap/</id>
    <updated>2022-03-18T13:29:49Z</updated>
    <published>2022-03-18T13:29:49Z</published>
    <link href="https://go.waylonwalker.com/linux-swap/" rel="alternate" type="text/html"></link>
    <summary type="text">If you ever end up on a linux machine that just does not have enough ram to suffice what you are doing and you just need to get the job done you can give it...</summary>
    <content type="html">&lt;p&gt;If you ever end up on a linux machine that just does not have enough ram to&#xA;suffice what you are doing and you just need to get the job done you can give&#xA;it some more swap.  You can look up reccomendations for how much swap you&#xA;should have this is more about just trying to get your job done when you are&#xA;almost there, but running out of memory on the hardware you have.&lt;/p&gt;&#xA;&lt;h2 id=&#34;make-the-swap-file&#34;&gt;make the /swap file &lt;a href=&#34;#make-the-swap-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can put this where you wish, for this example I am going to pop it into&#xA;&lt;code&gt;/swap&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fallocate -l 4G /swap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; /swap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkswap /swap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo swapon /swap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-sure-that-your-swap-is-on&#34;&gt;make sure that your swap is on &lt;a href=&#34;#make-sure-that-your-swap-is-on&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can make sure that your swap is working by using the &lt;code&gt;free&lt;/code&gt; command, I like&#xA;using the &lt;code&gt;-h&lt;/code&gt; flag to get human readable numbers.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ free -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               total        used        free      shared  buff/cache   available&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Mem:            15Gi       5.5Gi       4.9Gi       458Mi       5.2Gi       9.3Gi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Swap:          4.0Gi          0B       4.0Gi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/reset-ipython/&#34; class=&#34;wikilink&#34; data-title=&#34;Reclaim memory usage in Jupyter&#34; data-description=&#34;Today I ran into an issue where we had a one-off script that just needed to work, but it was just chewing threw memory like nothing.&#34; data-date=&#34;2020-10-01&#34; data-preview=&#34;Today I ran into an issue where we had a one-off script that just needed to work, but it was just chewing threw memory like nothing.&#34;&gt;Reclaim memory usage in Jupyter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I also used this trick in this article to give my python process a bit more oompf and get it on home.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Install yq | A light weight yaml parser cli</title>
    <id>https://go.waylonwalker.com/install-yq/</id>
    <updated>2022-03-14T18:30:12Z</updated>
    <published>2022-03-14T18:30:12Z</published>
    <link href="https://go.waylonwalker.com/install-yq/" rel="alternate" type="text/html"></link>
    <summary type="text">is a command line utility for parsing and querying yaml, like does for json.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;yq&lt;/code&gt; is a command line utility for parsing and querying yaml, like &lt;code&gt;jq&lt;/code&gt; does for json.&lt;/p&gt;&#xA;&lt;h2 id=&#34;this-is-for-me&#34;&gt;This is for me &lt;a href=&#34;#this-is-for-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I love that all of these modern tools built in go and rust, just give you a&#xA;zipped up executable right from GitHub releases, but it’s not necessarily&#xA;straight forward how to install them.  &lt;code&gt;yq&lt;/code&gt; does one of the best jobs I have&#xA;seen, giving you instructions on how to get a specific version and install it.&lt;/p&gt;&#xA;&lt;p&gt;I use a bunch of these tools, and for what its worth I trust the devs behind&#xA;them to make sure they don’t break.  This so far has worked out well for me,&#xA;but if it ever doesn’t I can always pick an older version.&lt;/p&gt;&#xA;&lt;h2 id=&#34;just-give-me-the-latest&#34;&gt;Just give me the latest &lt;a href=&#34;#just-give-me-the-latest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since I am all trusting of them I just want the latest version.  I do not want&#xA;to update a shell script with new versions, or even care about what then next&#xA;version is, I just want it. Luckily you can script the release page for the&#xA;latest version on all that I have came accross.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-is-the-latest&#34;&gt;What is the latest &lt;a href=&#34;#what-is-the-latest&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I wrote or stole, I think I wrote it, this line of bash quite awhile ago, and&#xA;it has served me well for finding the latest release for any GitHub project&#xA;using releases.  Just update it with the name of the tool, org, and repo and it&#xA;works.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;YQ_VERSION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl --silent https://github.com/mikefarah/yq/releases/latest &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^.*tag\///g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/&amp;gt;.*$//g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^v//&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-with-your-shell&#34;&gt;Install with your shell &lt;a href=&#34;#install-with-your-shell&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now that we know how to consistently get the right version, I generally right&#xA;click the release in the releases page, replace the version with&#xA;&lt;code&gt;${TOOL_VERSION}&lt;/code&gt; and put it in this wget call, then move the binary over to &lt;code&gt;~/.local/bin&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;mktemp -dt install-XXXXXX&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;pushd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$tmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;YQ_VERSION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl --silent https://github.com/mikefarah/yq/releases/latest &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^.*tag\///g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/&amp;gt;.*$//g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/^v//&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/mikefarah/yq/releases/download/v&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;YQ_VERSION&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/yq_linux_amd64.tar.gz -O- -q &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar -zxf - -C /tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp yq_linux_amd64 ~/.local/bin/yq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;popd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;install-with-ansible&#34;&gt;Install with ansible &lt;a href=&#34;#install-with-ansible&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now I don’t want to worry about missing &lt;code&gt;yq&lt;/code&gt; again, so I am added it to my&#xA;ansible install script.  This way it’s installed everyt time I setup a new&#xA;system with all of my favorite cli’s.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check is yq installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;command -v yq&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;register&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;yq_exists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ignore_errors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;yq&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Install yq&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;yq_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    local tmp=`mktemp -dt install-XXXXXX`&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    pushd $tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    YQ_VERSION=$(curl --silent https://github.com/mikefarah/yq/releases/latest | tr -d &amp;#39;&amp;#34;&amp;#39; | sed &amp;#39;s/^.*tag\///g&amp;#39; | sed &amp;#39;s/&amp;gt;.*$//g&amp;#39; | sed &amp;#39;s/^v//&amp;#39;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    wget https://github.com/mikefarah/yq/releases/download/v${YQ_VERSION}/yq_linux_amd64.tar.gz -O- -q | tar -zxf - -C /tmp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    cp yq_linux_amd64 {{ lookup(&amp;#39;env&amp;#39;, &amp;#39;HOME&amp;#39;) }}/.local/bin/yq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    popd&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;yq&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is how I installed it, of course you can always follow Mike’s instructions&#xA;from the repo.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/mikefarah/yq&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yq repo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://mikefarah.gitbook.io/yq/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mikefarah.gitbook.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mikefarah.gitbook.io.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yq docs&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Git Worktrees are not so Scary</title>
    <id>https://go.waylonwalker.com/git-checkout-worktree/</id>
    <updated>2022-03-10T19:19:34Z</updated>
    <published>2022-03-10T19:19:34Z</published>
    <link href="https://go.waylonwalker.com/git-checkout-worktree/" rel="alternate" type="text/html"></link>
    <summary type="text">So worktrees, I always thought they were a big scary things. Turns out they are much simpler than I thought.</summary>
    <content type="html">&lt;p&gt;So worktrees, I always thought they were a big scary things.  Turns out they&#xA;are much simpler than I thought.&lt;/p&gt;&#xA;&lt;h2 id=&#34;myth-1&#34;&gt;Myth #1 &lt;a href=&#34;#myth-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;no special setup&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I thought you had to be all in or worktrees or normal &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt;, but not both.  When&#xA;I see folks go all in on worktrees they start with a bare repo, while its true&#xA;this is the way you go all in, its not true that this is required.&lt;/p&gt;&#xA;&lt;h2 id=&#34;lets-make-a-worktree&#34;&gt;Lets make a worktree &lt;a href=&#34;#lets-make-a-worktree&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Making a worktree is as easy as making a branch.  It’s actually just a branch&#xA;that lives in another place in your filesystem.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checkout a new worktree called compare based on main in /tmp/project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git worktree add -b compare /tmp/project main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checkout a new worktree called compare based on HEAD in /tmp/project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git worktree add -b compare /tmp/project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checkout a worktree from an existing feature branch in /tmp/project&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git worktree add /tmp/project my-existing-feature-branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;The worktree that you create is considered a &lt;em&gt;linked worktree&lt;/em&gt;, while the&#xA;original worktree is called the &lt;em&gt;main worktree&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note that I put this in my tmp directory because I don’t expect it to live very&#xA;long, my recent use case was to compare two files after a big formatting&#xA;change.  You put these where you want, but dont come at me when your /tmp gets&#xA;wiped and you loose work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;myth-2&#34;&gt;Myth #2 &lt;a href=&#34;#myth-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;they are hidden mysterious creatures&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Just like branches git has some nice commands to help us understand what&#xA;worktrees we have on our system.  Firstly we have something very specific to&#xA;worktrees to list them out.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git worktree list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;gives the output&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/u_walkews/git/git-work-play  b202442 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;main&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/tmp/another                       d9b2cf1 &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;another&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Even the branch command gives a bit different output for a worktree.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;gives this output, notice the + denotes an actively linked worktree, and the *&#xA;gives the active branch.  If you cd over to the worktree directory, these will&#xA;switch roles.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+ another&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  just-a-branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;you-can-only-checkout-a-branch-in-one-place&#34;&gt;You can only checkout a branch in one place &lt;a href=&#34;#you-can-only-checkout-a-branch-in-one-place&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you try to checkout a branch that is checked out in a linked worktree, you&#xA;will be presented with an error, and it will not let you check out a second&#xA;copy of that branch.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;❯ git checkout another&#xA;fatal: &amp;#39;another&amp;#39; is already checked out at &amp;#39;/tmp/another&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;myth-3&#34;&gt;Myth #3 &lt;a href=&#34;#myth-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;once you go worktree, you worktree&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Once you have worktrees on your system, you have a few ways to get rid of them.&#xA;Using git’s way feels much superior, but if your a doof like me and didn’t read&#xA;the manual before you &lt;code&gt;rm /tmp/another -rf&lt;/code&gt; you will notice that the worktree&#xA;is still active.  If you run &lt;code&gt;git worktree prune&lt;/code&gt; it will clean that right up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git worktree remove another&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm /tmp/another&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git worktree prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;it-wont-let-you-remove-if-you-have-changes&#34;&gt;It won’t let you remove if you have changes &lt;a href=&#34;#it-wont-let-you-remove-if-you-have-changes&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This makes me think that &lt;code&gt;remove&lt;/code&gt; is a much safer option.  If you have&#xA;uncommitted changes, &lt;code&gt;git worktree remove&lt;/code&gt; will throw an error, and make you&#xA;commit or use &lt;code&gt;--force&lt;/code&gt; to remove the worktree.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git worktree remove another&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fatal: &lt;span class=&#34;s1&#34;&gt;&amp;#39;another&amp;#39;&lt;/span&gt; contains modified or untracked files, use --force to delete it&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rtfm&#34;&gt;RTFM &lt;a href=&#34;#rtfm&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;read the friendly manual&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is a ton more information in the man page for worktrees, these are just&#xA;the parts that seemed really useful to me out of the gate.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;man git worktree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setup SSH from chromebook to home desktop</title>
    <id>https://go.waylonwalker.com/open-ssh-setup/</id>
    <updated>2022-03-08T14:20:52Z</updated>
    <published>2022-03-08T14:20:52Z</published>
    <link href="https://go.waylonwalker.com/open-ssh-setup/" rel="alternate" type="text/html"></link>
    <summary type="text">I write many of these posts from a 10 year old desktop that sits in my office these days. It does a very fine job running all of the things I need it to for...</summary>
    <content type="html">&lt;p&gt;I write many of these posts from a 10 year old desktop that sits in my&#xA;office these days.  It does a very fine job running all of the things I&#xA;need it to for my side work, but sometimes I want a mobile setup.  I&#xA;don’t really want to spend the $$ on a new laptop just for the few times&#xA;I want to be somewhere else in the house.  What I do have though is a&#xA;chromebook.&lt;/p&gt;&#xA;&lt;p&gt;I’ve tried to get the chromebook into my workflow in the past, but have&#xA;failed.  Much because by the time I got all of my tools up and running&#xA;in the linux vm it was taking up quite a bit of space on the device and&#xA;made it harder for others to use as a chromebook.&lt;/p&gt;&#xA;&lt;p&gt;Today I am giving it a second try, but this time with ssh.&lt;/p&gt;&#xA;&lt;h2 id=&#34;checking-for-existing-sshd&#34;&gt;Checking for existing sshd &lt;a href=&#34;#checking-for-existing-sshd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Before doing anything I checked to see if sshd is already running. Using&#xA;the following command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo service ssh status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pgrep -l sshd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Both returned nothing so I know that its not running.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-up-sshd&#34;&gt;setting up sshd &lt;a href=&#34;#setting-up-sshd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;just apt install it&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Next install the openssh-client and openssh-server&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install openssh-client -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install openssh-server -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;After this I can see that its now running by checking its status once&#xA;again.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo service ssh status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gives me the result.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;● ssh.service - OpenBSD Secure Shell server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Loaded: loaded &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;/lib/systemd/system/ssh.service&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; enabled&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; vendor preset: enabled&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Active: active &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;running&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; since Tue 2022-03-08 08:17:05 CST&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 12min ago&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       Docs: man:sshd&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             man:sshd_config&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Process: &lt;span class=&#34;m&#34;&gt;181185&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ExecStartPre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/sbin/sshd -t &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;code&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;exited, &lt;span class=&#34;nv&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0/SUCCESS&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   Main PID: &lt;span class=&#34;m&#34;&gt;181189&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;sshd&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      Tasks: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;limit: 19119&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     Memory: 2.8M&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        CPU: 96ms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     CGroup: /system.slice/ssh.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;             └─181189 sshd: /usr/sbin/sshd -D &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;listener&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; of 10-100 startups&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;accessing-the-desktop&#34;&gt;Accessing the desktop &lt;a href=&#34;#accessing-the-desktop&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have already enabled the Linux terminal on my chromebook, so I just&#xA;opened the terminal, and ran the following.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh &amp;lt;username&amp;gt;@&amp;lt;ip-address&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;It prompted for my password and I was in.  I had all of my vim, tmux,&#xA;and zsh comforts that I enjoy without installing anything.  It worked so&#xA;well that this whole post was written from my chromebook.&lt;/p&gt;&#xA;&lt;h2 id=&#34;limitations&#34;&gt;Limitations &lt;a href=&#34;#limitations&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This does limit me to being on the same network as my desktop, which&#xA;these days is almost always true.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ssh-keys&#34;&gt;ssh keys &lt;a href=&#34;#ssh-keys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Out of the box I am just using passwords to get in, but if this were&#xA;public I would lock down to requiring an ssh key to enter.  I’ll likey&#xA;do this in a future post.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Dedupe your shell paths</title>
    <id>https://go.waylonwalker.com/dedupe-your-shell-paths/</id>
    <updated>2022-03-04T19:08:49Z</updated>
    <published>2022-03-04T19:08:49Z</published>
    <link href="https://go.waylonwalker.com/dedupe-your-shell-paths/" rel="alternate" type="text/html"></link>
    <summary type="text">If you have ever ran and see duplicate entries it&#39;s likely that you have duplicate entries in your $PATH. You can clean this up with a one liner at the end...</summary>
    <content type="html">&lt;p&gt;If you have ever ran &lt;code&gt;which &amp;lt;command&amp;gt;&lt;/code&gt; and see duplicate entries it’s likely&#xA;that you have duplicate entries in your $PATH.  You can clean this up with a&#xA;one liner at the end of your bashrc or zshrc.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;typeset -U path&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Bash mktemp</title>
    <id>https://go.waylonwalker.com/bash-mktemp/</id>
    <updated>2022-03-02T14:52:08Z</updated>
    <published>2022-03-02T14:52:08Z</published>
    <link href="https://go.waylonwalker.com/bash-mktemp/" rel="alternate" type="text/html"></link>
    <summary type="text">There is GNU coreutils command called that is super handy in shell scripts to make temporary landing spots for files so that they never clash with another...</summary>
    <content type="html">&lt;p&gt;There is GNU coreutils command called &lt;code&gt;mktemp&lt;/code&gt; that is super handy in shell&#xA;scripts to make temporary landing spots for files so that they never clash with&#xA;another instance, and will automatically get cleaned up when you restart, or&#xA;whenever &lt;code&gt;/tmp&lt;/code&gt; gets wiped.  I’m not sure when that is, but I don’t expect it&#xA;to be long.&lt;/p&gt;&#xA;&lt;h2 id=&#34;making-temp-directories&#34;&gt;Making temp directories &lt;a href=&#34;#making-temp-directories&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are some examples of making temp directories in different places, my&#xA;favorite is &lt;code&gt;mktemp -dt mytemp-XXXXXX&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# makes a temporary directory in /tmp/ with the defaul template tmp.XXXXXXXXXX&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# makes a temporary directory in your current directory&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp --directory mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# shorter version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp -d mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# same thing, but makes a file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# makes a temporary directory in your /tmp/ directory (or what ever you have configured as your TMPDIR)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp --directory --tmpdir mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# shorter version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp -dt mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# same thing, but makes a file&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp --tmpdir mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# shorter version&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp -t mytemp-XXXXXX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;use-case&#34;&gt;Use Case &lt;a href=&#34;#use-case&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a sample script that shows how to capture the tempdir as a variable and&#xA;reuse it.  Here is an example of curling my bootstrap file into a temp&#xA;directory and running it from that directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;mktemp -dt bootstrap-XXXXXX&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;pushd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$tmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://raw.githubusercontent.com/WaylonWalker/devtainer/main/bootstrap &amp;gt; bootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash bootstrap&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;popd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;templates&#34;&gt;Templates &lt;a href=&#34;#templates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You must have at least 3 trailing X’s that mktemp will replace with random&#xA;characters.  I played with it for a bit, it kinda allows for some trailing&#xA;characters, and will not fill groups of X’s earlier in your template, only the&#xA;last consecutive string.&lt;/p&gt;&#xA;&lt;p&gt;My randomm samples I played with.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylonwalker.com on  main &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;!?&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  v3.9.7 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;waylonwalker.com&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; took 2m24s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mktemp myXtemp-XaXbXXXX -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/tmp/myXtemp-XaXbx9hn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylonwalker.com on  main &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;!?&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  v3.9.7 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;waylonwalker.com&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mktemp myXtemp-XaXbXXXXs -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/tmp/myXtemp-XaXb2tpGs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waylonwalker.com on  main &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;!?&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  v3.9.7 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;waylonwalker.com&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mktemp myXtemp-XaXbXXcXXs -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mktemp: too few X&lt;span class=&#34;s1&#34;&gt;&amp;#39;s in template ‘myXtemp-XaXbXXcXXs’&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;waylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;❯ mktemp myXtemp-XaXbXXcXXs -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;waylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;❯ mktemp myXtemp-XaXbXXXXt -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;/tmp/myXtemp-XaXbe8PWt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;waylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;❯ mktemp myXtemp-XXX-you-XXX -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;/tmp/myXtemp-XXX-you-48l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;waylonwalker.com on  main [!?]  v3.9.7 (waylonwalker.com)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;❯ mktemp myXtemp-XXX-you-XX -dt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;mktemp: too few X&amp;#39;&lt;/span&gt;s in template ‘myXtemp-XXX-you-XX’&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rtfm&#34;&gt;RTFM &lt;a href=&#34;#rtfm&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The man page has good stuff on all the flags that you might need.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;man mktemp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Recover a lost git branch with checkout</title>
    <id>https://go.waylonwalker.com/git-recover-checkout/</id>
    <updated>2022-03-01T14:34:01Z</updated>
    <published>2022-03-01T14:34:01Z</published>
    <link href="https://go.waylonwalker.com/git-recover-checkout/" rel="alternate" type="text/html"></link>
    <summary type="text">Once you give a branch the big D () its gone, its lost from your history. It&#39;s completely removed from your log. There will be no reference to these commits,...</summary>
    <content type="html">&lt;p&gt;Once you give a branch the big D (&lt;code&gt;git branch -D mybranch&lt;/code&gt;) its gone,&#xA;its lost from your history.  It’s completely removed from your log.&#xA;There will be no reference to these commits, or will there?&lt;/p&gt;&#xA;&lt;h2 id=&#34;tldr&#34;&gt;TLDR &lt;a href=&#34;#tldr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Checkout is your savior, all you need is the commit hash.&lt;/p&gt;&#xA;&lt;h2 id=&#34;immediate-regret&#34;&gt;Immediate Regret &lt;a href=&#34;#immediate-regret&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;your terminal is still open&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;We have all done this, you give  branch the big D only to realize it was&#xA;the wrong one.  Don’t worry, not all is lost, this is the easiest to&#xA;recover from.  When you run the delete command you will see something&#xA;like this.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git branch -D new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Deleted branch new &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;was bc02a64&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Notice the hash is right there is the hash of your commit.  You can use&#xA;that to get your content back.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b bc02a64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or in one swoop checkout your new branch at the `start-point` you want&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b new bc02a64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;delayed-reaction&#34;&gt;Delayed reaction &lt;a href=&#34;#delayed-reaction&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;you have closed your terminal&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you have closed your terminal, or have deleted with a gui or&#xA;something that does not tell you the hash as you run it, don’t fret, all&#xA;your work is still there (as long as you have commited).  You just have&#xA;to dig it out.  The reflog contains a list of all &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; operations that&#xA;have occurred on your git repo, and can be incredibly helpful with this.&lt;/p&gt;&#xA;&lt;h3 id=&#34;kinda-recent&#34;&gt;Kinda Recent &lt;a href=&#34;#kinda-recent&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;If your botched delete operation was recent just diving right into the&#xA;reflog will show it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git reflog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;main&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;0&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from new to main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bc02a64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD -&amp;gt; another, new&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;4&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: commit: newfile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;main&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;In this example, I checked out a branch called new, commited a new&#xA;file, then switched back to main and deleted new.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now That I have the commit hash I can use the same solution to get my&#xA;branch back.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b bc02a64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# or in one swoop checkout your new branch at the `start-point` you want&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b new bc02a64&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;a-lot-has-happened-since-then&#34;&gt;A lot has happened since then &lt;a href=&#34;#a-lot-has-happened-since-then&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;If a lot has happened since then, you are going to need to pull out some&#xA;more tool to sift through that &lt;code&gt;reflog&lt;/code&gt;, especially if its a big one.&#xA;The first suggestion that I have is to pipe into grep and look for&#xA;commit messages, or the name of the branch.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git reflog &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;moving from&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to branch/oops&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;2&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from oops to main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;4&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to oops&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from another to main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bc02a64 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;6&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to another&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;7&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from another to main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bc02a64 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from new to another&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bc02a64 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;9&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from bc02a64bbe5683d905e333e8dfcbbb91a5e77549 to new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bc02a64 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;10&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to bc02a64bbe56&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;11&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from new to main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;13&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;14&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from other to main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;03a3338 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;18&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: checkout: moving from main to other&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;git has a built in &lt;code&gt;--grep&lt;/code&gt; flag, but I don’t think there is a way to&#xA;filter by branch name, regardless it still is helpful.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git reflog --grep new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bc02a64 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD -&amp;gt; another, new&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;4&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: commit: newfile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Maybe if you can remember a filename you can pass in &lt;code&gt;-- &amp;lt;filename&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reflog -- readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rtfm&#34;&gt;RTFM &lt;a href=&#34;#rtfm&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There are many other ways to slice up a git log, and reflog alike. check&#xA;out &lt;code&gt;man git log&lt;/code&gt; for some more flags.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Install obs flatpak</title>
    <id>https://go.waylonwalker.com/install-obs-flatpak/</id>
    <updated>2022-02-25T02:33:16Z</updated>
    <published>2022-02-25T02:33:16Z</published>
    <link href="https://go.waylonwalker.com/install-obs-flatpak/" rel="alternate" type="text/html"></link>
    <summary type="text">Big announcement recently that obs studio now builds out to a flatpak, hopefully making it easier for all of us to install, especially us near normies that...</summary>
    <content type="html">&lt;p&gt;Big announcement recently that obs studio now builds out to a flatpak,&#xA;hopefully making it easier for all of us to install, especially us near&#xA;normies that don’t regularly compile anything from source.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-flatpak&#34;&gt;install flatpak &lt;a href=&#34;#install-flatpak&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I did not have flatpak installed so the first thing I had to do was get&#xA;the &lt;code&gt;flatpak&lt;/code&gt; command installed, and add their default repo.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install flatpak&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once I had flatpak, I was able to get obs installed with the following&#xA;command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flatpak install flathub com.obsproject.Studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Once Installed it fired right up for me with the next command they&#xA;suggested.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flatpak run com.obsproject.Studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;it-works&#34;&gt;It Works &lt;a href=&#34;#it-works&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Pretty straightforward, following the instructions given it all worked&#xA;for me, but it was missing a lot of the plugins that the current snap&#xA;package I am using gives me (namely virtual webcam).  So I am not ready&#xA;to jump onto it until I figure out how to manage my own obs plugins.&#xA;For now I think the snap is working just well enough.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://flatpak.org/setup/Ubuntu&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/flatpak.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/flatpak.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flatpak setup for ubuntu&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/obsproject/obs-studio/releases/tag/27.2.0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;obs release notes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://flathub.org/apps/details/com.obsproject.Studio&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/flathub.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/flathub.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;obs flatpak&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Vim remaps use cmd in place of :</title>
    <id>https://go.waylonwalker.com/vim-cmd/</id>
    <updated>2022-02-14T14:53:17Z</updated>
    <published>2022-02-14T14:53:17Z</published>
    <link href="https://go.waylonwalker.com/vim-cmd/" rel="alternate" type="text/html"></link>
    <summary type="text">Anyone just starting out their vim customization journey is bound to run into this error.</summary>
    <content type="html">&lt;p&gt;Anyone just starting out their vim customization journey is bound to run into this error.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;E5520&lt;/span&gt;: &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mapping&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;must&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;i-did-not-get-it&#34;&gt;I did not get it &lt;a href=&#34;#i-did-not-get-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ll admit, in hindsight it’s very clear what this is trying to tell me, but&#xA;for whatever reason I still did not understand it and I just used a :&#xA;everywhere.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-docs&#34;&gt;From the docs &lt;a href=&#34;#from-the-docs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you run &lt;code&gt;:h &amp;lt;cmd&amp;gt;&lt;/code&gt; you will see a lot of reasons why you should do it, from&#xA;performance, to hygene, to ergonomics.  You will also see another clear&#xA;statement about how to use &lt;code&gt;&amp;lt;cmd&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                          &lt;span class=&#34;nx&#34;&gt;E5520&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;commands&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;must&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;terminate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;that&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;they&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;must&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;be&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;by&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  {&lt;span class=&#34;nx&#34;&gt;rhs&lt;/span&gt;} &lt;span class=&#34;nx&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mapping&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;definition&lt;/span&gt;.  &lt;span class=&#34;nx&#34;&gt;Command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;line&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;never&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;entered&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;when-to-map-with-a-&#34;&gt;When to map with a : &lt;a href=&#34;#when-to-map-with-a-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You still need to map your remaps with a : if you do not close it with a&#xA;&lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt;.  This might be something like prefilling a command with a search term.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/search/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;otherwise-use-cmd&#34;&gt;Otherwise use &lt;cmd&gt;&lt;/cmd&gt; &lt;a href=&#34;#otherwise-use-cmd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you can close the &lt;code&gt;&amp;lt;cmd&amp;gt;&lt;/code&gt; with a &lt;code&gt;&amp;lt;cr&amp;gt;&lt;/code&gt; the command do so.  Your map will&#xA;automatically be silent, more ergonomic, performant, and all that good stuff.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/search/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Search&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Bluetooth at the command line on Ubuntu</title>
    <id>https://go.waylonwalker.com/linux-bluetoothctl/</id>
    <updated>2022-02-11T22:01:41Z</updated>
    <published>2022-02-11T22:01:41Z</published>
    <link href="https://go.waylonwalker.com/linux-bluetoothctl/" rel="alternate" type="text/html"></link>
    <summary type="text">One thing about moving to a tiling window manager like awesome wm or i3 is that they are so lightweight they are all missing things like bluetooth gui&#39;s out...</summary>
    <content type="html">&lt;p&gt;One thing about moving to a tiling window manager like awesome wm or i3 is that&#xA;they are so lightweight they are all missing things like bluetooth gui’s out of&#xA;the box, and you generally bring your own.  Today I just needed to connet a new&#xA;set of headphones, so I decided to just give the &lt;code&gt;bluetoothctl&lt;/code&gt; cli a try.  It&#xA;seems to come with Ubuntu, I don’t think I did anything to get it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bluetoothctl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running &lt;code&gt;bluetoothctl&lt;/code&gt; pops you into a repl/shell like bah, python, or ipython.&#xA;From here you can execute &lt;code&gt;bluetoothctl&lt;/code&gt; commands.&lt;/p&gt;&#xA;&lt;p&gt;Here is what I had to do to connect my headphones.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list out the commands available&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# scan for new devices and stop when you see your device show up&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scan on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scan off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list devices&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paired-devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pair the device&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pair XX:XX:XX:XX:XX:XX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# now your device should show up in the paired list&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paired-devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# connet the device&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;connect XX:XX:XX:XX:XX:XX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;help&#34;&gt;help &lt;a href=&#34;#help&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is the output of the help menu on my machine, it seems pretty straight&#xA;forward to block, and remove devices from here.&lt;/p&gt;&#xA;&lt;p&gt;note ctrl revers to the bluetooth controller on the machine you are on, and dev&#xA;refers to a device id.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Menu main:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Available commands:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-------------------&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;advertise                                         Advertise Options Submenu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scan                                              Scan Options Submenu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gatt                                              Generic Attribute Submenu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;list                                              List available controllers&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;show &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ctrl&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                       Controller information&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt; &amp;lt;ctrl&amp;gt;                                     Select default controller&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;devices                                           List available devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;paired-devices                                    List paired devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;system-alias &amp;lt;name&amp;gt;                               Set controller &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;reset-alias                                       Reset controller &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;power &amp;lt;on/off&amp;gt;                                    Set controller power&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pairable &amp;lt;on/off&amp;gt;                                 Set controller pairable mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;discoverable &amp;lt;on/off&amp;gt;                             Set controller discoverable mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;agent &amp;lt;on/off/capability&amp;gt;                         Enable/disable agent with given capability&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-agent                                     Set agent as the default one&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;advertise &amp;lt;on/off/type&amp;gt;                           Enable/disable advertising with given &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-alias &amp;lt;alias&amp;gt;                                 Set device &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scan &amp;lt;on/off&amp;gt;                                     Scan &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; devices&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;info &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                        Device information&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pair &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                        Pair with device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;trust &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                       Trust device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;untrust &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                     Untrust device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;block &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                       Block device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unblock &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                     Unblock device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;remove &amp;lt;dev&amp;gt;                                      Remove device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;connect &amp;lt;dev&amp;gt;                                     Connect device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;disconnect &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;dev&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                                  Disconnect device&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;menu &amp;lt;name&amp;gt;                                       Select submenu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;version                                           Display version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;quit                                              Quit program&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;                                              Quit program&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;                                              Display &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt; about this program&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;final-impressions&#34;&gt;Final Impressions &lt;a href=&#34;#final-impressions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This was something that I have never used, and thought it would be intimidating&#xA;but it worked great first try out of the box.  It could have been my device on&#xA;the other end, but this was one of the least frustrations I have had pairing a&#xA;new device.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Simple Samba Share Setup</title>
    <id>https://go.waylonwalker.com/simple-samba/</id>
    <updated>2022-02-09T14:41:20Z</updated>
    <published>2022-02-09T14:41:20Z</published>
    <link href="https://go.waylonwalker.com/simple-samba/" rel="alternate" type="text/html"></link>
    <summary type="text">Samba is an implementation of the smb protocol that allows me to setup network shares on my linux machine that I can open on a variety of devices.</summary>
    <content type="html">&lt;p&gt;Samba is an implementation of the smb protocol that allows me to setup network&#xA;shares on my linux machine that I can open on a variety of devices.&lt;/p&gt;&#xA;&lt;p&gt;I think the &lt;a href=&#34;/homelab/&#34; class=&#34;glossary-term&#34; title=&#34;A place to self host applications. For me this is primarily self built web applications, and applications for sharing files with my family. Techno Tim has a...&#34;&gt;homelab&lt;/a&gt; is starting to intrigue me enought to dive into the path of&#xA;experimenting with different things that I might want setup in my own home.&#xA;One key piece of this is network storage.  As I looked into nas, I realized&#xA;that it takes a dedicated machine, or one virtualized at a lower level than I&#xA;have capability for right now.&lt;/p&gt;&#xA;&lt;h2 id=&#34;humble-beginnings&#34;&gt;Humble Beginnings &lt;a href=&#34;#humble-beginnings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To get goind I am going to make a directory &lt;code&gt;/srv/samba/public&lt;/code&gt; open to anyone&#xA;on my network.  I am not going to worry too much about it, I just want&#xA;something up and running so that I can learn.&lt;/p&gt;&#xA;&lt;p&gt;Install samba, open the firewall, and edit the &lt;code&gt;smb.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt install samba samba-common-bin&#xA;sudo ufw allow samba&#xA;sudo nvim /etc/samba/smb.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I added this to the end of my &lt;code&gt;smb.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[public]&#xA;&#xA;comment = public share, no need to enter username and password&#xA;path = /srv/samba/public/&#xA;browseable = yes&#xA;writable = yes&#xA;guest ok = yes&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then I made the &lt;code&gt;/srv/samba/public&lt;/code&gt; directory and made it writable by anyone.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /srv/samba/public&#xA;sudo setfacl -R -m &amp;#34;u:nobody:rwx&amp;#34; /srv/samba/public/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;windows-yes-windows&#34;&gt;Windows, yes windows &lt;a href=&#34;#windows-yes-windows&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a windows desktop in my office, primarily for my wife to run premiere&#xA;pro, and my son to play Minecraft.  I walked over to it, opened the file&#xA;explorer, and ernt to &lt;code&gt;\\&amp;lt;my-local-ip&amp;gt;&lt;/code&gt;.  It asked for the username and&#xA;password, I typed in the username and password of the linux device I have the&#xA;share running on, and I was in.  Right there I could see the Public folder.  I&#xA;opened it and made a files successfully.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>ag silver searcher look ahead and look behind</title>
    <id>https://go.waylonwalker.com/ag-ahead/</id>
    <updated>2022-02-08T13:54:08Z</updated>
    <published>2022-02-08T13:54:08Z</published>
    <link href="https://go.waylonwalker.com/ag-ahead/" rel="alternate" type="text/html"></link>
    <summary type="text">A super useful tool when doing PR&#39;s or checking your own work during a big refactor is the silver searcher. Its a super fast command line based searching...</summary>
    <content type="html">&lt;p&gt;A super useful tool when doing PR’s or checking your own work during a big&#xA;refactor is the silver searcher.  Its a super fast command line based searching&#xA;tool. You just run &lt;code&gt;ag &amp;#34;&amp;lt;search term&amp;gt;&amp;#34;&lt;/code&gt; to search for your search term.  This&#xA;will list out every line of every file in any directory under your current&#xA;working directory that contains a match.&lt;/p&gt;&#xA;&lt;h2 id=&#34;aheadbehind&#34;&gt;Ahead/Behind &lt;a href=&#34;#aheadbehind&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It’s often useful to need some extra context around the change.  I recently&#xA;reviewed a bunch of PR’s that moved schema from &lt;code&gt;save_args&lt;/code&gt; to the root of the&#xA;dataset in all yaml configs.  To ensure they all made it to the top level&#xA;DataSet configuraion, and not underneath save_args.  I can do a search for all&#xA;the schemas, and ensure that none of them are under &lt;code&gt;save_args&lt;/code&gt; anymore.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag &lt;span class=&#34;s2&#34;&gt;&amp;#34;schema: &amp;#34;&lt;/span&gt; -A &lt;span class=&#34;m&#34;&gt;12&lt;/span&gt; -B &lt;span class=&#34;m&#34;&gt;12&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Installing Rust and Cargo on Ubuntu 21.10 using Ansible</title>
    <id>https://go.waylonwalker.com/install-rust/</id>
    <updated>2022-02-06T15:34:02Z</updated>
    <published>2022-02-06T15:34:02Z</published>
    <link href="https://go.waylonwalker.com/install-rust/" rel="alternate" type="text/html"></link>
    <summary type="text">Installing rust in your own ansible playbook will make sure that you can get consistent installs accross all the machines you may use, or replicate your...</summary>
    <content type="html">&lt;p&gt;Installing rust in your own ansible playbook will make sure that you can&#xA;get consistent installs accross all the machines you may use, or&#xA;replicate your development machine if it ever goes down.&lt;/p&gt;&#xA;&lt;h2 id=&#34;personal-philosophy&#34;&gt;Personal philosophy &lt;a href=&#34;#personal-philosophy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I try to install everything that I will want to use for more than just a&#xA;trial inside of my ansible playbook.  This way I always get the same&#xA;setup across my work and home machines, and anytime I might setup a&#xA;throw away vm.&lt;/p&gt;&#xA;&lt;h2 id=&#34;reccommended-install&#34;&gt;reccommended install &lt;a href=&#34;#reccommended-install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is how rust reccomends that you install it on Ubuntu.  First update&#xA;your system, then run their installer, and finally check that the&#xA;install was successful.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# system update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# download and run the rust installer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://sh.rustup.rs -sSf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# confirm your installation is successful&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rustc --version&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;ansible-install&#34;&gt;Ansible Install &lt;a href=&#34;#ansible-install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The first thing I do in my playbooks is to check if the tool is already&#xA;installed.  Here I chose to look for &lt;code&gt;cargo&lt;/code&gt;, you could also look for&#xA;&lt;code&gt;rustc&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check if cargo is installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;command -v cargo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;register&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cargo_exists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ignore_errors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;I first check for an existing install so I can re-run my playbooks&#xA;quickly filling in only missing tools. More on this&#xA;&lt;a href=&#34;https://waylonwalker.com/til/ansible_install_if_not_callable/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ansible install conditionally&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Next we need to download the installer script and make it executable.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Download Installer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cargo_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://sh.rustup.rs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/tmp/sh.rustup.rs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0755&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;force&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;yes&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;rust&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;I chose to download the installer, because I was unable to pass in the&#xA;&lt;code&gt;-y&lt;/code&gt; flag otherwise, which is required to do unattended installs.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Last we just run the installer given to us by rust with the &lt;code&gt;-y&lt;/code&gt; flag so&#xA;that it will run unattended.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;install rust/cargo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cargo_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/tmp/sh.rustup.rs -y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;rust&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;one-more-thing&#34;&gt;One more thing &lt;a href=&#34;#one-more-thing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Make sure that you source your cargo env, otherwise your shell will not&#xA;find &lt;code&gt;rustc&lt;/code&gt; or &lt;code&gt;cargo&lt;/code&gt;.  I chose to do this by adding the following&#xA;line to my &lt;code&gt;~/.zshrc&lt;/code&gt;.  You can but it in &lt;code&gt;~/.bashrc&lt;/code&gt; if that is your&#xA;thing, or just run it in your shell to just get it to work.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -f ~/.cargo/env &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.cargo/env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;full-install-playbook&#34;&gt;Full Install Playbook &lt;a href=&#34;#full-install-playbook&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a fully working install playbook to get you started or to port&#xA;into your own playbook.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;hosts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gather_facts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ lookup(&amp;#39;env&amp;#39;, &amp;#39;USER&amp;#39;) }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre_tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;update repositories&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;update_cache=yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;changed_when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;vars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ ansible_user_id }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check if cargo is installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;command -v cargo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;register&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cargo_exists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ignore_errors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Download Installer&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cargo_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;get_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;https://sh.rustup.rs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/tmp/sh.rustup.rs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0755&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;force&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;yes&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;rust&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;install rust/cargo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;cargo_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/tmp/sh.rustup.rs -y&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;rust&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can save this as a  &lt;code&gt;local.yml&lt;/code&gt; and run the following in your shell&#xA;to run the playbook on your local machine.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ansible-playbook local.yml --ask-become-pass&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;note: &lt;code&gt;--ask-become-pass&lt;/code&gt; is required for the system update step.&#xA;This will ask for your password as soon as ansible starts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I also have a very similar article on hwo I &lt;a href=&#34;https://waylonwalker.com/til/ansible_install_fonts/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ansible install fonts&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Neovim Config for Git</title>
    <id>https://go.waylonwalker.com/neovim-config-for-git/</id>
    <updated>2022-02-04T14:23:57Z</updated>
    <published>2022-02-04T14:23:57Z</published>
    <link href="https://go.waylonwalker.com/neovim-config-for-git/" rel="alternate" type="text/html"></link>
    <summary type="text">Creating a minimal config specifically for git commits has made running much more pleasant. It starts up Much faster, and has all of the parts of my config...</summary>
    <content type="html">&lt;p&gt;Creating a minimal config specifically for &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; commits has made running&#xA;&lt;code&gt;git commit&lt;/code&gt; much more pleasant.  It starts up Much faster, and has all&#xA;of the parts of my config that I use while making a git commit.  The one&#xA;thing that I often use is autocomplete, for things coming from elsewhere&#xA;in the tmux session.  For this &lt;code&gt;cmpe-tmux&lt;/code&gt; specifically is super&#xA;helpful.&lt;/p&gt;&#xA;&lt;p&gt;The other thing that is engrained into my muscle memory is &lt;code&gt;jj&lt;/code&gt;&#xA;for escape.  For that I went agead and added my &lt;code&gt;settings&lt;/code&gt; and &lt;code&gt;keymap&lt;/code&gt;&#xA;with no noticable performance hit.&lt;/p&gt;&#xA;&lt;p&gt;Here is the config that has taken&lt;/p&gt;&#xA;&lt;p&gt;~/.config/nvim/init-git.vim&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/.config/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;settings&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/.config/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;keymap&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/.config/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;plugins&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker.cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;~/.config/nvim/git-plugins.vim&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;plug&lt;/span&gt;#&lt;span class=&#34;nx&#34;&gt;begin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;~/.local/share/nvim/plugged&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; cmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/nvim-cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-nvim-lsp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-buffer&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-path&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-calc&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;andersevenrud/compe-tmux&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; { &lt;span class=&#34;s1&#34;&gt;&amp;#39;branch&amp;#39;&lt;/span&gt;: &lt;span class=&#34;s1&#34;&gt;&amp;#39;cmp&amp;#39;&lt;/span&gt; }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;plug&lt;/span&gt;#&lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;~/.gitconfig&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;core&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;editor&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;-u&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;~/&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;init-git&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to Properly Simulate Stow</title>
    <id>https://go.waylonwalker.com/stow-simulate/</id>
    <updated>2022-01-30T20:28:17Z</updated>
    <published>2022-01-30T20:28:17Z</published>
    <link href="https://go.waylonwalker.com/stow-simulate/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stow -R --simulate -vvv git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tmux and Vim Clipboard for Ubuntu</title>
    <id>https://go.waylonwalker.com/ubuntu-terminal-clipboard/</id>
    <updated>2022-01-26T02:50:56Z</updated>
    <published>2022-01-26T02:50:56Z</published>
    <link href="https://go.waylonwalker.com/ubuntu-terminal-clipboard/" rel="alternate" type="text/html"></link>
    <summary type="text">One of the first things I noticed broken in my terminal based workflow moving from Windows wsl to ubuntu was that my clipboard was all messed up and not...</summary>
    <content type="html">&lt;p&gt;One of the first things I noticed broken in my terminal based workflow moving&#xA;from Windows wsl to ubuntu was that my clipboard was all messed up and not&#xA;working with my terminal apps.  Luckily setting tmux and neovim to work with&#xA;the system clipboard was much easier than it was on windows.&lt;/p&gt;&#xA;&lt;p&gt;First off you need to get &lt;code&gt;xclip&lt;/code&gt; if you don’t already have it provided by your&#xA;distro.  I found it in the apt repositories.  I have used it between Ubuntu&#xA;18.04 and 21.10 and they all work flawlessly for me.&lt;/p&gt;&#xA;&lt;p&gt;I have tmux setup to automatically copy any selection I make to the clipboard&#xA;by setting the following in my &lt;code&gt;~/.tmux.conf&lt;/code&gt;. While I have neovim open I need&#xA;to be in insert mode for this to pick up.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/tmux.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel &lt;span class=&#34;s2&#34;&gt;&amp;#34;xclip -i -f -selection primary | xclip -i -selection clipboard&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel &lt;span class=&#34;s2&#34;&gt;&amp;#34;xclip -selection clipboard -i&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;To get my yanks to go to the system clipboard in neovim, I just added&#xA;unnamedplus to my existing clipboard variable.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/.config/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;init&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;clipboard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unnamedplus&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you need to copy something right from the terminal you can use xclip&#xA;directly.  I do this semi-often to send someone a message in chat.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat file.txt &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; clip -sel copy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I set up some alias’s for doing this a bit more efficiently, but don’t find&#xA;myself using them very often.  This helps me grab commands from history and&#xA;copy them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;hclip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;history | tail -n1 | cut -c 8- | xclip -sel clip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fclip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;history -n 1000 | fzf | cut -c 8- | xclip -sel clip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;fclip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;history -n 1000 | fzf | xclip -sel clip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tmux hotkey for copier templates</title>
    <id>https://go.waylonwalker.com/tmux-copier-templates/</id>
    <updated>2022-01-24T02:22:53Z</updated>
    <published>2022-01-24T02:22:53Z</published>
    <link href="https://go.waylonwalker.com/tmux-copier-templates/" rel="alternate" type="text/html"></link>
    <summary type="text">I have added a hotkey to my copier template setup to quickly access all my templates at any time from tmux. At any point I can hit , thats holding control...</summary>
    <content type="html">&lt;p&gt;I have added a hotkey to my copier template setup to quickly access all my&#xA;templates at any time from tmux.  At any point I can hit &lt;code&gt;&amp;lt;c-b&amp;gt;&amp;lt;c-b&amp;gt;&lt;/code&gt;, thats&#xA;holding control and hitting &lt;code&gt;bb&lt;/code&gt;, and I will get a popup list of all of my&#xA;templates directory names.  Its an fzf list, which means that I can fuzzy&#xA;search through it for the template I want, or arrow key to the one I want if I&#xA;am feeling insane.  I even setup it up so that the preview is a list of the&#xA;files that come with the template in tree view.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key c-b popup -E -w 80% -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    pipx run copier copy ~/.copier-templates/`ls ~/.copier-templates |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    fzf --header &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --preview=&amp;#39;tree ~/.copier-templates/{} |\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    lolcat&amp;#39;` . \&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I’ve had this on my systems for a few weeks now and I am constantly using it&#xA;for my &lt;a href=&#34;https://waylonwalker.com/til/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tils&lt;/a&gt;,&#xA;&lt;a href=&#34;https://waylonwalker.com/archive&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blogs&lt;/a&gt;, and my .envrc file that goes into&#xA;all of my projects to make sure that I have a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; installed and&#xA;running any time I open it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/copier-templates-tmux-popup.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/copier-templates-tmux-popup.png&#34; alt=&#34;this is what it looks like when I open my copier templates popup&#34;/ data-glightbox=&#34;description: this is what it looks like when I open my copier templates popup&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Copier Tasks | Python templating post run task</title>
    <id>https://go.waylonwalker.com/copier-tasks/</id>
    <updated>2022-01-22T04:49:12Z</updated>
    <published>2022-01-22T04:49:12Z</published>
    <link href="https://go.waylonwalker.com/copier-tasks/" rel="alternate" type="text/html"></link>
    <summary type="text">Copier allows you to run post render tasks, just like cookiecutter. These are defined as a list of in your . They are simply shell commands to run.</summary>
    <content type="html">&lt;p&gt;Copier allows you to run post render tasks, just like cookiecutter. These are&#xA;defined as a list of &lt;code&gt;tasks&lt;/code&gt; in your &lt;code&gt;copier.yml&lt;/code&gt;.  They are simply shell&#xA;commands to run.&lt;/p&gt;&#xA;&lt;p&gt;The example I have below runs an &lt;code&gt;update-gratitude&lt;/code&gt; bash script after the&#xA;copier template has been rendered.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# copier.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;num&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;128&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;_answers_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.gratitude-copier-answers.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;_tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;update-gratitude&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have put the script in &lt;code&gt;~/.local/bin&lt;/code&gt; so that I know it’s always on my&#xA;&lt;code&gt;$PATH&lt;/code&gt;.  It will reach back into the &lt;code&gt;copier.yml&lt;/code&gt; and update the default&#xA;number.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.local/bin/update-gratitude&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;current&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; ~/.copier-templates/gratitude/copier.yml &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; head -n 1&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;new&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;expr &lt;span class=&#34;nv&#34;&gt;$current&lt;/span&gt; + 1&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$current&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$new&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$current&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$new&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt; ~/.copier-templates/gratitude/copier.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fuzzy wallpaper with fzf</title>
    <id>https://go.waylonwalker.com/fzf-wallpaper/</id>
    <updated>2022-01-19T01:17:26Z</updated>
    <published>2022-01-19T01:17:26Z</published>
    <link href="https://go.waylonwalker.com/fzf-wallpaper/" rel="alternate" type="text/html"></link>
    <summary type="text">I really appreciate that in linux anything can be scripted, including setting the wallpaper. So everytime I disconnect a monitor I can just rerun my script...</summary>
    <content type="html">&lt;p&gt;I really appreciate that in linux anything can be scripted, including&#xA;setting the wallpaper.  So everytime I disconnect a monitor I can just&#xA;rerun my script and fix my wallpaper without digging deep into the ui&#xA;and fussing through a bunch of settings.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;feh --bg-scale ~/.config/awesome/wallpaper/my_wallpaper.png&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;I set my default wallpaper with &lt;code&gt;feh&lt;/code&gt; using the command above.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Leaning in on feh, we can use fzf to pick a wallpaper from a directory&#xA;full of wallpapers with very few keystrokes.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;alias wallpaper=&amp;#39;ls ~/.config/awesome/wallpaper | fzf --preview=&amp;#34;feh --bg-scale ~/.config/awesome/wallpaper/{}&amp;#34; | xargs -I {} feh --bg-scale ~/.config/awesome/wallpaper/{}&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I have mine alias’d to &lt;code&gt;wallpaper&lt;/code&gt; so that I can quickly run it from&#xA;my terminal.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Converting markdown to pdf with pandoc on linux</title>
    <id>https://go.waylonwalker.com/convert-markdown-pdf-linux/</id>
    <updated>2022-01-12T03:25:36Z</updated>
    <published>2022-01-12T03:25:36Z</published>
    <link href="https://go.waylonwalker.com/convert-markdown-pdf-linux/" rel="alternate" type="text/html"></link>
    <summary type="text">Converting markdown posts to pdf on ubuntu takes a few packages from the standard repos. I had to go through a few stack overflow posts, and nothing seemed...</summary>
    <content type="html">&lt;p&gt;Converting markdown posts to pdf on ubuntu takes a few packages from the&#xA;standard repos.  I had to go through a few stack overflow posts, and&#xA;nothing seemed to have all the fonts and packages that I needed to&#xA;convert markdown, but this is what ended up working for me.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-all-the-packages&#34;&gt;Installing all the packages &lt;a href=&#34;#installing-all-the-packages&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  pandoc &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  texlive-latex-base &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  texlive-fonts-recommended &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  texlive-extra-utils &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  texlive-latex-extra &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;  texlive-xetex&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-pandoc-to-convert-markdown-to-a-pdf&#34;&gt;Using pandoc to convert markdown to a pdf &lt;a href=&#34;#using-pandoc-to-convert-markdown-to-a-pdf&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# older versions of pandoc, I needed this one on ubuntu 18.04&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pandoc&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;til&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markdown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markdown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;latex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xelatex&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# newer versions of pandoc, I needed this one on ubuntu 21.04&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;pandoc&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;til&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markdown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;linux&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;convert&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markdown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pdf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;engine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xelatex&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/convert-markdown-pdf-linux-result.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/convert-markdown-pdf-linux-result.png&#34; alt=&#34;results of converting this post to a pdf&#34;/ data-glightbox=&#34;description: results of converting this post to a pdf&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Here is an image of what converting this article over to a pdf looks&#xA;like.  The raw markdown is&#xA;&lt;a href=&#34;https://waylonwalker.com/convert-markdown-pdf-linux.md&#34; title=&#34;a link to the raw markdown of this post&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Installing Pipx on Ubuntu</title>
    <id>https://go.waylonwalker.com/installing-pipx-on-ubuntu/</id>
    <updated>2022-01-10T23:14:05Z</updated>
    <published>2022-01-10T23:14:05Z</published>
    <link href="https://go.waylonwalker.com/installing-pipx-on-ubuntu/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently paired up with another dev running windows with Ubuntu running in wsl, and we had a bit of a stuggle to get our project off the ground because...</summary>
    <content type="html">&lt;p&gt;I recently paired up with another dev running windows with Ubuntu running in&#xA;wsl, and we had a bit of a stuggle to get our project off the ground because&#xA;they were missing com system dependencies to get going.&lt;/p&gt;&#xA;&lt;h2 id=&#34;straight-in-the-terminal&#34;&gt;Straight in the terminal &lt;a href=&#34;#straight-in-the-terminal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Open up a terminal and get your required system dependencies using the apt&#xA;package manager and the standard ubuntu repos.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt upgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      python3-dev &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      python3-pip &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      python3-venv &lt;span class=&#34;se&#34;&gt;\&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;se&#34;&gt;&lt;/span&gt;      python3-virtualenv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-an-ansible-playbook&#34;&gt;Using an Ansible-Playbook &lt;a href=&#34;#using-an-ansible-playbook&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like running things like this through an ansible-playbook as it give me some&#xA;extra control and repeatability next time I have a new machine to setup.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- &lt;span class=&#34;nt&#34;&gt;hosts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;localhost&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;gather_facts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ lookup(&amp;#39;env&amp;#39;, &amp;#39;USER&amp;#39;) }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pre_tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;update repositories&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;update_cache=yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;changed_when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;vars&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ ansible_user_id }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tasks&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Install System Packages 1 (terminal)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;become_user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;apt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;build-essential&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;python3-dev&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;python3-pip&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;python3-venv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;          &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;python3-virtualenv&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;check is pipx installed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;command -v pipx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;register&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pipx_exists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ignore_errors&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;yes&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pipx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;when&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pipx_exists is failed&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;pip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;pipx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;pipx&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;video-clip&#34;&gt;video clip &lt;a href=&#34;#video-clip&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a clip of me getting pipx running on ubuntu 21.10, and running a few of&#xA;my favorite pipx commands.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/pipx-install-ubuntu.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/pipx-install-ubuntu.gif&#34; alt=&#34;installation video&#34;/ data-glightbox=&#34;description: installation video&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>2 minutes to stow</title>
    <id>https://go.waylonwalker.com/2-minutes-to-stow/</id>
    <updated>2022-01-09T00:33:58Z</updated>
    <published>2022-01-09T00:33:58Z</published>
    <link href="https://go.waylonwalker.com/2-minutes-to-stow/" rel="alternate" type="text/html"></link>
    <summary type="text">Stow is an incredible way to manage your dotfiles. It works by managing symlinks between your dotfiles directory and the rest of the system. You can then...</summary>
    <content type="html">&lt;p&gt;Stow is an incredible way to manage your dotfiles.  It works by managing&#xA;symlinks between your dotfiles directory and the rest of the system.  You can&#xA;then make your dotfiles directory a &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repo and have it version controlled.  In&#xA;my honest opinion, when I was trying to get started the docs straight into deep&#xA;detail of things I frankly don’t really care about and jumped right over how to&#xA;use it.&lt;/p&gt;&#xA;&lt;p&gt;When using stow its easiest to keep your dotfiles directory (you may name it&#xA;what you want) in your home directory, with application directories inside of&#xA;it.&lt;/p&gt;&#xA;&lt;p&gt;Then each application directory should reflet the same diretory structure as you&#xA;want in your home directory.&lt;/p&gt;&#xA;&lt;h2 id=&#34;zsh&#34;&gt;zsh &lt;a href=&#34;#zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is a simple example with my zshrc.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/dotfiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/dotfiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.zshrc zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stow --simulate zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can pass in the –simulate if you wish, it will tell you if there are going&#xA;to be any more errors or not, but it wont give much more than that.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;WARNING: in simulation mode so not modifying filesystem.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Once your ready you can stow your zsh application.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;stow zsh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;nvim&#34;&gt;nvim &lt;a href=&#34;#nvim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A slightly more complicated example is neovim since its diretory structure does&#xA;not put configuration files directly in your home directory, but rather at a&#xA;deeper level.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/dotfiles/nvim/.config/nvim/ -p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/dotfiles&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.config/nvim/ ~/dotfiles/nvim/.config/nvim/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;stow zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;!notice how the nvim directory inside of dotfiles is structured like it would&#xA;be in your $HOME directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Using Copier Answers to rerun templates quickly</title>
    <id>https://go.waylonwalker.com/copier-answers/</id>
    <updated>2022-01-08T01:16:52Z</updated>
    <published>2022-01-08T01:16:52Z</published>
    <link href="https://go.waylonwalker.com/copier-answers/" rel="alternate" type="text/html"></link>
    <summary type="text">The copier answers file is a key component to making your templates re-runnable. Let&#39;s look at the example for my setup.py.</summary>
    <content type="html">&lt;p&gt;The copier answers file is a key component to making your templates&#xA;re-runnable.  Let’s look at the example for my setup.py.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ tree ~/.copier-templates/setup.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/walkers/.copier-templates/setup.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; _copier_conf.answers_file &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;.tmpl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── copier.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── setup.cfg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── setup.py.tmpl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; directories, &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Inside of my &lt;code&gt;[[ _copier_conf.answers_file ]].tmpl&lt;/code&gt; file is this, a&#xA;message not to muck around with it, and the ansers in yaml form.  The&#xA;first line is just a helper for the blog post.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# ~/.copier-templates/setup.py/\[\[\ _copier_conf.answers_file\ \]\].tmpl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;_copier_answers|to_nice_yaml]]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Inside my copier.yml I have setup my _answers_file to point to a special&#xA;file.  This is because this is not a whole projet template, but one just&#xA;for a single file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# copier.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# ...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;_answers_file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;.setup-py-copier-answers.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Once I change the _answers_file I was incredibly stuck&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;run-it&#34;&gt;Run it &lt;a href=&#34;#run-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m making a library of personal copier templates in my&#xA;&lt;code&gt;~/.copier-templates&lt;/code&gt; directory and I am going to run it from there.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copier copy ~/.copier-templates/setup.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;results&#34;&gt;Results &lt;a href=&#34;#results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After rendering the template we have the following content in our&#xA;&lt;code&gt;.setup.setup-py-copier-answers.yml&lt;/code&gt; file.  This will allow us to update&#xA;quick if we ever change our template.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# .setup-py-copier-answers.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c&#34;&gt;# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;_src_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/home/walkers/.copier-templates/setup.py&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;author_github&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;waylonwalker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;author_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Waylon Walker&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;awesomeness&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;framework&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;keywords&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;package_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;my-package&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;update-it&#34;&gt;Update it &lt;a href=&#34;#update-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is where I was most stuck, primarily becuase &lt;code&gt;-a &amp;lt;answers_file&amp;gt;&lt;/code&gt;&#xA;must come exactly after the base command &lt;code&gt;copier&lt;/code&gt;.  This felt a bit odd&#xA;to and not where I expected it so it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copier -a .setup-py-copier-answers.yml update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;stop-asking-all-these-damn-questions&#34;&gt;Stop asking all these damn questions &lt;a href=&#34;#stop-asking-all-these-damn-questions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So the defaults are now changed to our previous results, but it keeps&#xA;asking for them.  To stop asking we can simply add a &lt;code&gt;-f&lt;/code&gt; flag.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copier -fa .setup-py-copier-answers.yml update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>pipx examples</title>
    <id>https://go.waylonwalker.com/pipx-examples/</id>
    <updated>2022-01-07T03:04:57Z</updated>
    <published>2022-01-07T03:04:57Z</published>
    <link href="https://go.waylonwalker.com/pipx-examples/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;h2 id=&#34;count-lines-of-code&#34;&gt;count lines of code &lt;a href=&#34;#count-lines-of-code&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run pygount markata&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run pygount markata --format&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;summary&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run pygount markata --suffix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cfg,py,yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Remove Vim Tab Characters</title>
    <id>https://go.waylonwalker.com/remove-vim-tab-characters/</id>
    <updated>2022-01-06T01:49:31Z</updated>
    <published>2022-01-06T01:49:31Z</published>
    <link href="https://go.waylonwalker.com/remove-vim-tab-characters/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been stuck many times looking at a vim buffer with little question marks at the beginning of each line and trying to get rid of them. for so long I...</summary>
    <content type="html">&lt;p&gt;I’ve been stuck many times looking at a vim buffer with little question&#xA;marks at the beginning of each line and trying to get rid of them.  for&#xA;so long I didn’t know what they were so trying to get rid of them was&#xA;impossible.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/vim-tab-characters.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/vim-tab-characters.png&#34; alt=&#34;example of what the tab character renders as in my editor&#34;/ data-glightbox=&#34;description: example of what the tab character renders as in my editor&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;It turns out they are tabs, and you can get rid of the little leading&#xA;question marks with this substitution command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;%&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/\t/&lt;/span&gt;    /&lt;span class=&#34;nx&#34;&gt;g&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Tmux Pop size</title>
    <id>https://go.waylonwalker.com/tmux-pop-size/</id>
    <updated>2022-01-05T17:37:26Z</updated>
    <published>2022-01-05T17:37:26Z</published>
    <link href="https://go.waylonwalker.com/tmux-pop-size/" rel="alternate" type="text/html"></link>
    <summary type="text">tmux popups can be sized how you like based on the % width of the terminal on creation by using the flags (h, w, x, y) for height, width, and position.</summary>
    <content type="html">&lt;p&gt;tmux popups can be sized how you like based on the % width of the&#xA;terminal on creation by using the flags (h, w, x, y) for height, width,&#xA;and position.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# normal popup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux popup figlet &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# fullscreen popup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux popup -h 100% -w 100% figlet &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 75% centered popup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux popup -h 100% -w 75% figlet &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 75% popup on left side&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux popup -h 100% -w 75% -x 0% figlet &lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;video autoplay=&#34;&#34; controls=&#34;&#34; loop=&#34;true&#34; muted=&#34;&#34; playsinline=&#34;&#34; width=&#34;100%&#34; class=&#34;rounded-xl border-pink-900 border-2&#34;&gt;&#xA;     &lt;source src=&#34;https://dropper.waylonwalker.com/api/file/c0e80bc5-a03d-40ad-a431-20436b82cf3b.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;     Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;example running these commands&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Copier Templates</title>
    <id>https://go.waylonwalker.com/copier-templates/</id>
    <updated>2022-01-05T01:54:07Z</updated>
    <published>2022-01-05T01:54:07Z</published>
    <link href="https://go.waylonwalker.com/copier-templates/" rel="alternate" type="text/html"></link>
    <summary type="text">%%include til/copier_endops</summary>
    <content type="html">&lt;p&gt;%%include til/copier_endops&lt;/p&gt;&#xA;&lt;p&gt;%%include til/copier-template-variables&lt;/p&gt;&#xA;&lt;p&gt;%%include til/copier-answers&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>List all the files containing a phrase</title>
    <id>https://go.waylonwalker.com/list-all-files-containing-phrase/</id>
    <updated>2021-12-31T20:24:48Z</updated>
    <published>2021-12-31T20:24:48Z</published>
    <link href="https://go.waylonwalker.com/list-all-files-containing-phrase/" rel="alternate" type="text/html"></link>
    <summary type="text">One of the most useful skills you can acquire to make you faster at almost any job that uses a computer is getting good at finding text in your current...</summary>
    <content type="html">&lt;p&gt;One of the most useful skills you can acquire to make you faster at&#xA;almost any job that uses a computer is getting good at finding text in&#xA;your current working diretory and identifying the files that its in.  I&#xA;often use the silver searcher &lt;code&gt;ag&lt;/code&gt; or ripgrep &lt;code&gt;rg&lt;/code&gt; to find files in&#xA;large directories quickly.  Both have a sane set of defaults that ignore&#xA;hidden and gitignored files, but getting them to list only the filenames&#xA;and not the matched was not trivial to me.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I’ve searched throught he help/man pages many times looking for these&#xA;flags and they always seem to evade me.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;ag&#34;&gt;ag &lt;a href=&#34;#ag&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Passing the flag &lt;code&gt;-l&lt;/code&gt; to ag will get it to list only the filepath, and&#xA;not the match. Here I gave it a &lt;code&gt;--md&lt;/code&gt; as well to only return markdown&#xA;filetypes.  &lt;code&gt;ag&lt;/code&gt; supports a number of filetypes in a very similar way.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag nvim --md -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rg&#34;&gt;rg &lt;a href=&#34;#rg&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Giving &lt;code&gt;rg&lt;/code&gt; the &lt;code&gt;--files-with-matches&lt;/code&gt; flag will yield you a similar set&#xA;of results, giving only the filepaths themselves and not the match&#xA;statement.  Also passing in the &lt;code&gt;-g &amp;#34;*.md&amp;#34;&lt;/code&gt; will similarly yield only&#xA;results from markdown files.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files-with-matches you -g &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>My first impressions with pyenv</title>
    <id>https://go.waylonwalker.com/pyenv-first-impressions/</id>
    <updated>2021-12-30T15:26:01Z</updated>
    <published>2021-12-30T15:26:01Z</published>
    <link href="https://go.waylonwalker.com/pyenv-first-impressions/" rel="alternate" type="text/html"></link>
    <summary type="text">pyenv provides an easy way to install almost any version of python from a large list of distributions. I have simply been using the version of python from...</summary>
    <content type="html">&lt;p&gt;pyenv provides an easy way to install almost any version of python from&#xA;a large list of distributions. I have simply been using the version of&#xA;python from the os package manager for awhile, but recently I bumped my&#xA;home system to Ubuntu 21.10 impish, and it is only 3.9+ while the&#xA;libraries I needed were only compatable with up to 3.8.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I needed to install an older version of python on ubuntu&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I’ve been wanting to check out pyenv for awhile now, but without a&#xA;burning need to do so.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing&#34;&gt;installing &lt;a href=&#34;#installing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Based on the Readme it looked like I needed to install using homebrew,so this&#xA;is what I did, but I later realized that there is a pyenv-installer repo that&#xA;may have saved me this need.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/installing-homebrew-linux/&#34; class=&#34;wikilink&#34; data-title=&#34;Installing Homebrew on Linux&#34; data-description=&#34;Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.&#34; data-date=&#34;2021-12-29&#34; data-preview=&#34;Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.&#34;&gt;Installing Homebrew on Linux&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;list-out-install-candidates&#34;&gt;List out install candidates &lt;a href=&#34;#list-out-install-candidates&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can list all of the available versions to install with&#xA;&lt;code&gt;pyenv install --list&lt;/code&gt;.  It does reccomend updating pyenv if you suspect&#xA;that it is missing one.  At the time of writing this comes out to 532&#xA;different versions!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv install --list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lets-install-the-latest-38-patch&#34;&gt;Let’s install the latest 3.8 patch &lt;a href=&#34;#lets-install-the-latest-38-patch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Installing a version is as easy as &lt;code&gt;pyenv install 3.8.12&lt;/code&gt;.  This will&#xA;install it, but not make it active anywhere.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pyenv install 3.8.12&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;lets-use-python-3812-while-in-this-directory&#34;&gt;let’s use python 3.8.12 while in this directory &lt;a href=&#34;#lets-use-python-3812-while-in-this-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Running &lt;code&gt;pyenv local&lt;/code&gt; will set the version of python that we wish to use&#xA;while in this directory and any directory underneath of it while using&#xA;the pyenv command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv &lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt; python3.8.12&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;python-version-file&#34;&gt;.python-version file &lt;a href=&#34;#python-version-file&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This creates a &lt;code&gt;.python-version&lt;/code&gt; files in the directory I ran it in,&#xA;that contains simply the version number.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3.8.12&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-with-pipx&#34;&gt;using with pipx &lt;a href=&#34;#using-with-pipx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I immediately ran into the same issue I was having before when trying to&#xA;run pipx, as pipx was running my system python.  I had to install pipx&#xA;in the python3.8 environment to get it to use it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyenv &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; pipx run kedro new&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;python-is-still-the-system-python&#34;&gt;python is still the system python &lt;a href=&#34;#python-is-still-the-system-python&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When I open a terminal and call &lt;code&gt;python&lt;/code&gt; its still my system python that&#xA;I installed and set with update-alternatives.  I am not sure if this is&#xA;expected or based on how I had installed the system python previously,&#xA;but it’s what happened on my system.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;update-alternatives --query python&#xA;&#xA;Name: python&#xA;Link: /home/walkers/.local/bin/python&#xA;Status: auto&#xA;Best: /usr/bin/python3&#xA;Value: /usr/bin/python3&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;making-a-virtual-environment&#34;&gt;making a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt; &lt;a href=&#34;#making-a-virtual-environment&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To make a virtual environment, I simply ran &lt;code&gt;pyenv exec python&lt;/code&gt; in place&#xA;of where I would normally run python and it worked for me.  There is a&#xA;whole package to get pyenv and venv to play nicely together, so I&#xA;suspect that there is more to it, but this worked well for me and I was&#xA;happy.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pyenv exec python -m venv .venv --prompt $(basename $PWD)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now when my virtual environment is active it points to the python in&#xA;that virtual environment, and is the version of python that was used to&#xA;create the environment.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/pyenv/pyenv#installation&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34;&gt;https://github.com/pyenv/pyenv#installation&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Installing Homebrew on Linux</title>
    <id>https://go.waylonwalker.com/installing-homebrew-linux/</id>
    <updated>2021-12-29T20:24:48Z</updated>
    <published>2021-12-29T20:24:48Z</published>
    <link href="https://go.waylonwalker.com/installing-homebrew-linux/" rel="alternate" type="text/html"></link>
    <summary type="text">Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.</summary>
    <content type="html">&lt;p&gt;Installing brew on linux proved quite easy and got pyenv running for me&#xA;within 4 commands.&lt;/p&gt;&#xA;&lt;p&gt;I had never used homebrew before, honestly I thought it was a mac only&#xA;thing for years.  Today I wanted to try out pyenv, and the reccommended&#xA;way to install was using homebrew.  I am not yet sure if I want either&#xA;in my normal workflow, so for now I am just going to pop open a new&#xA;terminal and install homebrew and see how it goes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/bin/bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; /home/walkers/.zprofile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;/home/linuxbrew/.linuxbrew/bin/brew shellenv&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That was it, now homebrew is working. Starting a new shell and running&#xA;the command to install pyenv worked.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install pyenv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://brew.sh/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/brew.sh.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/brew.sh.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;homebrew&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Serve html from your command line</title>
    <id>https://go.waylonwalker.com/serve-html-command-line/</id>
    <updated>2021-12-28T20:24:48Z</updated>
    <published>2021-12-28T20:24:48Z</published>
    <link href="https://go.waylonwalker.com/serve-html-command-line/" rel="alternate" type="text/html"></link>
    <summary type="text">When I first moved to vim from and ide like vscode or sublime text one of my very first issues was trying to preview my website at . There had always just...</summary>
    <content type="html">&lt;p&gt;When I first moved to vim from and ide like vscode or sublime text one of my&#xA;very first issues was trying to preview my website at &lt;code&gt;localhost:8000&lt;/code&gt;.  There&#xA;had always just been a button there to do it in all of my other editors, not&#xA;vim.  There are not many buttons for anything in vim.  While there is probably a&#xA;plugin that can run a webserver for me in vim, it’s not necessary, we just need&#xA;the command line we are already in.&lt;/p&gt;&#xA;&lt;h2 id=&#34;running-a-separate-process&#34;&gt;running a separate process &lt;a href=&#34;#running-a-separate-process&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need a way to run another process alongside vim, here are a couple&#xA;ideas to get you going that are not the focus here.style&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;use background jobs&#xA;&lt;ul&gt;&#xA;&lt;li&gt;c-z to send a job to the background&lt;/li&gt;&#xA;&lt;li&gt;fg to bring it back&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;use a second terminal&lt;/li&gt;&#xA;&lt;li&gt;use a second tab&lt;/li&gt;&#xA;&lt;li&gt;use tmux and run it in a separate split/window&lt;/li&gt;&#xA;&lt;li&gt;use an embeded nvim terminal&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;running-a-development-webserver-from-the-command-line&#34;&gt;running a development webserver from the command line &lt;a href=&#34;#running-a-development-webserver-from-the-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Python already exists on most linux systems by default, and most are now on&#xA;python3.  If you are on windows typing python will take you directly to the&#xA;windows store to install it, or you can also use wsl.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m http.server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# running on port 5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m http.server --directory markout &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre&gt;&lt;code&gt;# for the low chance you are on python2&#xA;python -m SimpleHTTPServer&#xA;&#xA;# running on port 5000&#xA;python -m SimpleHTTPServer 5000&#xA;python -m SimpleHTTPServer --directory markout 5000&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/python-m-http-server.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/python-m-http-server.png&#34; alt=&#34;running a python static webserver from the command line&#34;/ data-glightbox=&#34;description: running a python static webserver from the command line&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;using-nodejs&#34;&gt;using nodejs &lt;a href=&#34;#using-nodejs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you are a web developer it’s likely that you need nodejs and npm on your&#xA;system anyways and may want to use one of the servers from npm.  I’ll admit with&#xA;these not being tied to the long term support of a language they are much more&#xA;feature rich with things like compression out of the box.  In my opinion they&#xA;are nice things that you would want out of a production server, but may not&#xA;be necessary for development.&lt;/p&gt;&#xA;&lt;h3 id=&#34;installing-npx&#34;&gt;installing npx &lt;a href=&#34;#installing-npx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# if you don&amp;#39;t alredy have npx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i -g npx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;npx is a handy tool that lets you run command line applications straight from&#xA;npm without installing them.  It pulls the latest version every time you want&#xA;to run, then executes it without it being installed.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;running-the-http-server-with-npx&#34;&gt;running the http-server with npx &lt;a href=&#34;#running-the-http-server-with-npx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx http-server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# running on port 5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx http-server -p &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx http-server markout -p &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/npx-http-server.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/npx-http-server.png&#34; alt=&#34;running a nodejs static webserver from the command line&#34;/ data-glightbox=&#34;description: running a nodejs static webserver from the command line&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>You must use augroup with autocmd in vim | Here&#39;s how</title>
    <id>https://go.waylonwalker.com/vim-augroup/</id>
    <updated>2021-12-08T08:43:43Z</updated>
    <published>2021-12-08T08:43:43Z</published>
    <link href="https://go.waylonwalker.com/vim-augroup/" rel="alternate" type="text/html"></link>
    <summary type="text">If you are running vim autocmd&#39;s without a group, you&#39;re killing your performance. Granted your probably not sourcing your vimscript files with autocmd&#39;s too...</summary>
    <content type="html">&lt;p&gt;If you are running vim autocmd’s without a group, you’re killing your&#xA;performance.  Granted your probably not sourcing your vimscript files with&#xA;autocmd’s too often, but every time you source that vimscript you are adding&#xA;another command that needs to run redundantly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/2ITTn4Dl0lc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/2ITTn4Dl0lc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;this-is-what-i-had&#34;&gt;This is what I had &lt;a href=&#34;#this-is-what-i-had&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Not silky smooth&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;For &lt;strong&gt;WAAY&lt;/strong&gt; too long I have had something like this in my  vimrc or init.vim.&#xA;It formats my python for me on every save, works great except if I source my&#xA;dotfiles more than once I start adding how many times black runs.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Black&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;why-is-a-bare-autocmd-bad&#34;&gt;Why is a bare autocmd bad &lt;a href=&#34;#why-is-a-bare-autocmd-bad&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;let me demonstrate&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lets create a new file called &lt;code&gt;format.vim&lt;/code&gt; and give it the &lt;code&gt;:so %&lt;/code&gt;. Works&#xA;great, it starts telling me that its formatting.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;formatting with black&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/vim-augroups-too-many-formats.GIF&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/vim-augroups-too-many-formats.GIF&#34; alt=&#34;too-many-formats&#34;/ data-glightbox=&#34;description: too-many-formats&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;strong&gt;BUT&lt;/strong&gt; as every time I give it the &lt;code&gt;:so %&lt;/code&gt; it formats an extra time on every&#xA;single save.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-up-an-augroup&#34;&gt;Setting up an augroup &lt;a href=&#34;#setting-up-an-augroup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve been told I need an &lt;code&gt;augroup&lt;/code&gt; to prevent duplicates. So I did it, and&#xA;nothing changes, it still ran as many times as it was sources on every save.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;black&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;formatting with black&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;clearing-out-the-augroup&#34;&gt;Clearing out the augroup &lt;a href=&#34;#clearing-out-the-augroup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What you need to do is clear out all commands in the augroup with &lt;code&gt;autocmd!&lt;/code&gt;&#xA;right at the beginning of the group.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;black&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;formatting with black&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-final-silky-smooth-setup&#34;&gt;My Final silky smooth setup &lt;a href=&#34;#my-final-silky-smooth-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now this is what I have in my dotfiles for a silky smooth setup that does not&#xA;run automds like crazy as I am making changes to my dotfiles.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;waylonwalker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;!&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepre&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PyPreSave&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;PyPostSave&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; .&lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;local&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;conf&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:!tmux source-file %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;autocmd&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bufwritepost&lt;/span&gt; *.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;execute&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;:source %&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://vimhelp.org/autocmd.txt.html#%3Aaugroup&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/vimhelp.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/vimhelp.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vim-help&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://youtu.be/2ITTn4Dl0lc&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;youtube video&lt;/a&gt; for this article&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Code Review from the comfort of vim | Diffurcate</title>
    <id>https://go.waylonwalker.com/diffurcate/</id>
    <updated>2021-12-04T11:34:47Z</updated>
    <published>2021-12-04T11:34:47Z</published>
    <link href="https://go.waylonwalker.com/diffurcate/" rel="alternate" type="text/html"></link>
    <summary type="text">I often review Pull requests from the browser as it just makes it so easy to see the diffs and navigate through them, but there comes a time when the diffs...</summary>
    <content type="html">&lt;p&gt;I often review Pull requests from the browser as it just makes it so easy to see&#xA;the diffs and navigate through them, but there comes a time when the diffs get&#xA;really big and hard to follow.  That’s when its time to bring in the comforts of&#xA;vim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/5NKaZFavM0E&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/5NKaZFavM0E&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;plugins-needed&#34;&gt;Plugins needed &lt;a href=&#34;#plugins-needed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This all stems from the great plugin by&#xA;&lt;a href=&#34;https://github.com/AndrewRadev&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;AndrewRadev&lt;/a&gt;.  It breaks a down&#xA;into a project.  So rather than poping into a pager from &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; diff,&#xA;you can pipe to diffurcate and it will setup a project in a tmp&#xA;directory for you and you  can browse this project just like any&#xA;other except it’s just a diff.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AndrewRadev/diffurcate.vim&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-aliases&#34;&gt;My aliases &lt;a href=&#34;#my-aliases&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First to quickly checkout PR’s from azure devops I have setup an alias to fuzzy&#xA;select a pr and let the &lt;code&gt;az&lt;/code&gt; command do the checkout.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;azcheckout&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;az repos pr checkout --id $(az repos pr list --output table | tail -n -2 | fzf | cut -d &amp;#34; &amp;#34; -f1)&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I have a few aliases setup for checking diffs.  The first one checks what&#xA;is staged vs the current branch, the others check the current branch vs main or&#xA;master.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;alias diffstaged=&amp;#34;git diff --staged | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&amp;#34;&#xA;alias diffmain=&amp;#34;git diff main.. | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&amp;#34;&#xA;alias diffmaster=&amp;#34;git diff master.. | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&amp;#34;&#xA;&#xA;diffcommit() {&#xA;    git diff $1 | nvim - +Diffurcate &amp;#39;+Telescope find_files&amp;#39;&#xA;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/AndrewRadev/diffurcate.vim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;diffurcte.vim&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Setup a yaml schema | yamlls for a silky smooth setup</title>
    <id>https://go.waylonwalker.com/setup-yamlls/</id>
    <updated>2021-12-03T23:24:52Z</updated>
    <published>2021-12-03T23:24:52Z</published>
    <link href="https://go.waylonwalker.com/setup-yamlls/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve gone far too long without a good setup for editing yaml files, I am missing out on autocomplete and proper diagnostics. This ends today as I setup...</summary>
    <content type="html">&lt;p&gt;I’ve gone far too long without a good setup for editing yaml&#xA;files, I am missing out on autocomplete and proper diagnostics.&#xA;This ends today as I setup yaml-language-server in neovim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/xo4HrFoKF4c&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/xo4HrFoKF4c&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The video for this one is part of a&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETAj0nR_WYAxxGjd7kXch5zj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;challenge-playlist&lt;/a&gt;&#xA;I put out for myself to constantly improve my dotfiles for all of December.&lt;/p&gt;&#xA;&lt;h2 id=&#34;initvim&#34;&gt;init.vim &lt;a href=&#34;#initvim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have my &lt;code&gt;init.vim&lt;/code&gt; setup to only source other modules, if you want everything&#xA;in a single config, feel free to do as you wish. I broke mine up earlier this&#xA;year as I doubled into nvim and am not going back.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/.config/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nvim&lt;/span&gt;/&lt;span class=&#34;nx&#34;&gt;plugins&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker.cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker.lsp-config&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;plugin-setup&#34;&gt;Plugin setup &lt;a href=&#34;#plugin-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You will need the following plugins. I use plug, if you don’t you will have to&#xA;convert the syntax over to the plugin manager you use.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/neovim/nvim-lspconfig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;neovim/nvim-lspconfig&lt;/a&gt; is for&#xA;configuring the lsp. It comes with a bunch of sane defaults for most servers,&#xA;so you pretty much just have to call setup on that server unless you want to&#xA;change the defaults.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hrsh7th/nvim-cmp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;hrsh7th/nvim-cmp&lt;/a&gt; is what I use for&#xA;autocomplete. If you are using something else you might need to set that up in&#xA;a different way in order to get the autocomplete to work. You will still get&#xA;the diagnostics with just lsp-config.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/kabouzeid/nvim-lspinstall&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;kabouzeid/nvim-lspinstall&lt;/a&gt; will&#xA;aide in installing lsp’s if you want. I have chosen not to because I want to&#xA;have my full setup scripted so when I setup any new machine I just run my&#xA;ansible-playbook. This library is nice to just set things up quick and play&#xA;with them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; /home/u_walkews/.config/nvim/plugins.vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;neovim/nvim-lspconfig&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; if you want to use nvim-cmp&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/nvim-cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hrsh7th/cmp-nvim-lsp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;#34; if you want to use lsp-install&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Plug&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;kabouzeid/nvim-lspinstall&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cmp-config&#34;&gt;cmp config &lt;a href=&#34;#cmp-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Make sure that you have nvim_lsp as a source in your cmp config. This is my&#xA;config as of now, its likely to change in the future, set yours up how you&#xA;like. hrsh7th has a really good readme if you want help configuring cmp.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Again if you don’t use cmp you can skip this step, cmp is for autocomplete.&#xA;You can use a different plugin for autocomplete, or not use a plugin at all&#xA;if that’s your thing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;--  ~/.config/nvim/lua/waylonwalker/lsp-config.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;-- Setup nvim-cmp.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cmp&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;cmp.setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;snippet&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;expand&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- For `vsnip` user.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;vim.fn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vsnip#anonymous&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;](&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;args.body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- For `luasnip` user.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- require(&amp;#39;luasnip&amp;#39;).lsp_expand(args.body)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- For `ultisnips` user.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;-- vim.fn[&amp;#34;UltiSnips#Anon&amp;#34;](args.body)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mapping&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-n&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_next_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-p&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_prev_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Insert&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;Down&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_next_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;Up&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;select_prev_item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.SelectBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Select&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-d&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scroll_docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-f&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;scroll_docs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-Space&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;complete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;C-e&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;close&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;CR&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.mapping&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;confirm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;behavior&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmp.ConfirmBehavior&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Replace&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sources&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim_lsp&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;vsnip&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;path&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;buffer&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;calc&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;tmux&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;lsp-config&#34;&gt;lsp config &lt;a href=&#34;#lsp-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Next up is the heart of this post, the lsp-config.lua. This one is pretty&#xA;straight forward, require lspconfig (which you need the plugin for), then set&#xA;it up with cmp and the extra schemas. I’m sure there are yaml schemas for tons&#xA;of things, I’ll probably add more in the future, but for now, this is what I&#xA;have.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;--  ~/.config/nvim/lua/waylonwalker/lsp-config.lua&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lspconfig&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;yamlls.setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;on_attach&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;on_attach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;capabilities&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;cmp_nvim_lsp&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;update_capabilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;vim.lsp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;protocol.make_client_capabilities&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;yaml&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;schemas&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://raw.githubusercontent.com/kedro-org/kedro/develop/static/jsonschema/kedro-catalog-0.17.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;conf/**/*catalog*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://json.schemastore.org/github-workflow.json&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/.github/workflows/*&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/tree/main/nvim/.config/nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;my nvim config&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/neovim/nvim-lspconfig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-lspconfig GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/hrsh7th/nvim-cmp&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nvim-cmp GitHub&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/kabouzeid/nvim-lspinstall/blob/main/lua/lspinstall/servers/yaml.lua&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lspinstall yamlls&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.npmjs.com/package/yaml-language-server?activeTab=readme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.npmjs.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.npmjs.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;yaml-language-server npm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Follow the &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube channel&lt;/a&gt; or the&#xA;&lt;a href=&#34;https://waylonwalker/rss/&#34;&gt;rss-feed&lt;/a&gt; to stay up to date.&lt;/p&gt;&#xA;&lt;h2 id=&#34;also-check-out-my-python-lsp-setup&#34;&gt;Also Check out My python lsp setup &lt;a href=&#34;#also-check-out-my-python-lsp-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/setup-pylsp/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34;&gt;https://waylonwalker.com/setup-pylsp/&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Open files FAST from zsh | or bash if thats your thing</title>
    <id>https://go.waylonwalker.com/fuzzy-edit-zsh/</id>
    <updated>2021-12-02T11:34:47Z</updated>
    <published>2021-12-02T11:34:47Z</published>
    <link href="https://go.waylonwalker.com/fuzzy-edit-zsh/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/PQw_is7rQSw</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/PQw_is7rQSw&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/PQw_is7rQSw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am often in a set of tmux splits flying back and forth, accidentally close my&#xA;editor, so when I come back to that split and hit my keybinds to edit files I&#xA;enter them into zsh rather than into nvim like I intended.  Today I am going to&#xA;sand off that rough edge and get as similar behavior to nvim as I can with a&#xA;couple of aliases.&lt;/p&gt;&#xA;&lt;p&gt;Make sure you check out the YouTube video to see all of my improvements.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-an-alias&#34;&gt;what’s an alias &lt;a href=&#34;#whats-an-alias&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have never heard of an alias before it’s essentially a shortcut to a&#xA;given command.  You can pass additional flags to the underlying command and&#xA;they will get passed in.  Most of the time they are just shorter versions of&#xA;commands that you run often or even like in this case a common muscle memory&#xA;typo that occurs for you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-new-aliass-for-fuzzy-editing-files-from-zsh&#34;&gt;My new alias’s for fuzzy editing files from zsh &lt;a href=&#34;#my-new-aliass-for-fuzzy-editing-files-from-zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are the new aliases that I came up with to smooth out my workflow.  These&#xA;give me a similar feel to how these keys work in neovim but from zsh.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# fuzzy select file to edit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim `fzf --preview=&amp;#34;bat --color always {}&amp;#34;`&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# give me the same syntax as edit while in neovim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; :e&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim &amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Follow the &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube channel&lt;/a&gt; or the &lt;a href=&#34;https://waylonwalker/rss/&#34;&gt;rss&#xA;feed&lt;/a&gt; to stay up to date.&lt;/p&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETAj0nR_WYAxxGjd7kXch5zj&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;playlist for my dotfiles challenge&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How linux users install a text editor</title>
    <id>https://go.waylonwalker.com/install-nvim-skit/</id>
    <updated>2021-11-30T23:18:24Z</updated>
    <published>2021-11-30T23:18:24Z</published>
    <link href="https://go.waylonwalker.com/install-nvim-skit/" rel="alternate" type="text/html"></link>
    <summary type="text">In honor of the neovim 0.6.0 release, I decided to do a funny skit installing neovim, and fix up my install script in the process as part of my challenge to...</summary>
    <content type="html">&lt;p&gt;In honor of the neovim 0.6.0 release, I decided to do a funny skit installing&#xA;neovim, and fix up my install script in the process as part of my challenge to&#xA;fix up my dotfiles.  I ran into one snag where I was not updating the repo that&#xA;I cloned.  I moved it to the directory I now keep third-party &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; repos and set&#xA;it to update with ansible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/64oKLphhBuo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/64oKLphhBuo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The thing that took me the longest to realize was…. I had a path issue&#xA;pointing me to an old install of the appimage over the fresh build,  fixed that&#xA;up and now we are on 0.7.0 nightly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://neovim.io/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/neovim.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/neovim.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://neovim.io/&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/neovim/neovim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/neovim/neovim&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/neovim/neovim/releases/tag/v0.6.0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/neovim/neovim/releases/tag/v0.6.0&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>30 days dotfile ricing</title>
    <id>https://go.waylonwalker.com/dotfile-rice-challenge-intro/</id>
    <updated>2021-11-29T11:34:47Z</updated>
    <published>2021-11-29T11:34:47Z</published>
    <link href="https://go.waylonwalker.com/dotfile-rice-challenge-intro/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Jq1Y48F_rOU</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Jq1Y48F_rOU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Jq1Y48F_rOU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;I am challenging myself to 30 days of dotfile ricing. I have been on linux&#xA;desktop for a few months now and have a pretty good workflow going, I have the&#xA;coarse edits done to my workflow, but it has some rough edges that need sanded&#xA;down. It’s time to squash some of those little annoyances that still exist in&#xA;my setup.&lt;/p&gt;&#xA;&lt;p&gt;This is primarily going to be focused on productivity, but may have a few&#xA;things to just look better. This will comprise heavily of aliases, zsh, and&#xA;nvim config.&lt;/p&gt;&#xA;&lt;p&gt;Follow the &lt;a href=&#34;https://youtube.com/waylonwalker&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube channel&lt;/a&gt; or the &lt;a href=&#34;https://waylonwalker/rss/&#34;&gt;rss&#xA;feed&lt;/a&gt; to stay up to date.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Update Alternatives in Linux</title>
    <id>https://go.waylonwalker.com/update-alternatives/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://go.waylonwalker.com/update-alternatives/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives --query python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: error: no alternatives &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/local/bin/python python &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which python3.8&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# update-alternatives: using /usr/bin/python3.8 to provide /usr/local/bin/python (python) in auto mode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/local/bin/python python &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which python2.7&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# update-alternatives: using /usr/bin/python2.7 to provide /usr/local/bin/python (python) in auto mode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives --query python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Name: python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Link: /usr/local/bin/python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Status: auto&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Best: /usr/bin/python2.7&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Value: /usr/bin/python2.7&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Alternative: /usr/bin/python2.7&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Priority: 5&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Alternative: /usr/bin/python3.8&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Priority: 2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/local/bin/python python &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which python3.8&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;20&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# update-alternatives: using /usr/bin/python3.8 to provide /usr/local/bin/python (python) in auto mode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>JUT | Read Notebooks in the Terminal</title>
    <id>https://go.waylonwalker.com/jut/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://go.waylonwalker.com/jut/" rel="alternate" type="text/html"></link>
    <summary type="text">Trying to read a .ipynb file without starting a jupyter server? jut has you covered.</summary>
    <content type="html">&lt;p&gt;Trying to read a .ipynb file without starting a jupyter server?  jut has you&#xA;covered.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/t8AvImnwor0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/t8AvImnwor0&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;watch the video version of this post on &lt;a href=&#34;https://youtu.be/t8AvImnwor0&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;YouTube&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;install &lt;a href=&#34;#install&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;jut&lt;/code&gt; is packaged and available on pypi so installing is as easy as pip installing it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install jut&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-install.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-install.gif&#34; alt=&#34;installing jut with pip&#34;/ data-glightbox=&#34;description: installing jut with pip&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;! This is my first time including snippets of the video in the article like this, let me know what you think!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;examples&#34;&gt;examples &lt;a href=&#34;#examples&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb --head &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb --tail &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-command.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-command.gif&#34; alt=&#34;running jut examples&#34;/ data-glightbox=&#34;description: running jut examples&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-are-all-the-commands-available-for-jut&#34;&gt;what are all the commands available for jut? &lt;a href=&#34;#what-are-all-the-commands-available-for-jut&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Take a look at the help of the &lt;code&gt;jut&lt;/code&gt; cli to explore all the options that it&#xA;offers.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jut --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;There is some good information on the projects&#xA;&lt;a href=&#34;https://github.com/kracekumar/jut&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt; as well.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-help.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-help.gif&#34; alt=&#34;getting help with jut&#34;/ data-glightbox=&#34;description: getting help with jut&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;without-installing&#34;&gt;without installing &lt;a href=&#34;#without-installing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;using pipx&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Don’t want jut cluttering up your venv, or want to save yourself from making a&#xA;new one, &lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;pipx&lt;/code&gt;&lt;/a&gt; can manage a separate virual&#xA;environment for you.  This is one of the biggest selling points for me.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx run jut https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb --head &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-pipx.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-pipx.gif&#34; alt=&#34;running jut with pipx&#34;/ data-glightbox=&#34;description: running jut with pipx&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;nbconvert&#34;&gt;nbconvert &lt;a href=&#34;#nbconvert&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;jut&lt;/code&gt; is the lightweight option that I think will fit the bill often for me,&#xA;but it just doesn’t always cut it.  Mostly if there are images in the notebook&#xA;or  large output that is hard to read, its time to pull out the medium guns&#xA;that sit between fulling running jupyter and &lt;code&gt;jut&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install nbconvert&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;nbconvert does not have its own cli, instead it sits under the jupyter command.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;converting-to-&lt;a href=&#34;/html/&#34; class=&#34;glossary-term&#34; title=&#34;HTML (HyperText Markup Language) is the standard markup language used to create and design documents on the World Wide Web. It structures web content by...&#34;&gt;html&lt;/a&gt;&#34;&gt;converting to html &lt;a href=&#34;#converting-to-html&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Need to see images, go here!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert flame_temperature.ipynb --to html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m http.server&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note, nb convert does not work with a url, you will need to have the notebook locally.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-html.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-html.gif&#34; alt=&#34;nbconvert to html to see images&#34;/ data-glightbox=&#34;description: nbconvert to html to see images&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;what-other-options-does-nbconvert-offer&#34;&gt;what other options does nbconvert offer? &lt;a href=&#34;#what-other-options-does-nbconvert-offer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;nbconvert&lt;/code&gt; also offers a standard help flag that you can access by passing in&#xA;the &lt;code&gt;--help&lt;/code&gt; flag&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;converting-to-markdown&#34;&gt;converting to markdown &lt;a href=&#34;#converting-to-markdown&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;nbconvert&lt;/code&gt; also supports converting to many other formats, one option that is&#xA;quite interesting for use in the terminal is markdown.  We could simply convert&#xA;the notebook to markdown and cat it out.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;jupyter nbconvert flame_temperature.ipynb --to maarkdown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat flameflame_temperature.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-bat.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-bat.gif&#34; alt=&#34;nbconvert to markdown and displaying in bat&#34;/ data-glightbox=&#34;description: nbconvert to markdown and displaying in bat&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;viewing-markdown-with-glow&#34;&gt;viewing markdown with glow &lt;a href=&#34;#viewing-markdown-with-glow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Glow is a terminal markdown viewer that looks really good.  These days I use&#xA;&lt;code&gt;bat&lt;/code&gt; as &lt;code&gt;cat&lt;/code&gt; so I don’t get quite as much benefit from &lt;code&gt;glow&lt;/code&gt;, but it still&#xA;looks pretty good.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;glow flameflame_temperature.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-glow.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-glow.gif&#34; alt=&#34;nbconvert to markdown and displaying in glow&#34;/ data-glightbox=&#34;description: nbconvert to markdown and displaying in glow&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;viewing-markdown-as-slides-with-lookatme&#34;&gt;viewing markdown as slides with lookatme &lt;a href=&#34;#viewing-markdown-as-slides-with-lookatme&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://github.com/d0c-s4vage/lookatme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lookatme&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lookatme is my slideshow tool of choice.  Creating slides in markdown is such a&#xA;fantasic user experience,  It realy lets you go from outline to finished slide&#xA;deck fluidly.  Refactoring the whole thing is also so much easier than with gui&#xA;tools.  Once you have your idea fleshed out it does make the process of making&#xA;slides in powerpoint much easier if thats what you need.&lt;/p&gt;&#xA;&lt;p&gt;On to nbconvert, without even changing the notebook we can look at the notebook&#xA;as a slideshow in the terminal.  The only thing that it needs is some markdown&#xA;headers to start new slides from.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lookatme flameflame_temperature.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-lookatme.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jut-nbconvert-markdown-lookatme.gif&#34; alt=&#34;nbconvert to markdown and displaying as slides with lookatme&#34;/ data-glightbox=&#34;description: nbconvert to markdown and displaying as slides with lookatme&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;viewing-markdown-with-rich&#34;&gt;viewing markdown with rich &lt;a href=&#34;#viewing-markdown-with-rich&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Bringing this full circle, lets take a look at the converted markdown with&#xA;rich.  Here you will notice a surprising similarity to what we saw with &lt;code&gt;jut&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m rich.markdown flame_temperature.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Rich still cannot pull directly from a url or display markdown with out being&#xA;installed and managed by yourself.  Unlike how &lt;code&gt;jut&lt;/code&gt; can leverage &lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;&lt;code&gt;pipx&lt;/code&gt;&lt;/a&gt; to&#xA;manage the installation sandbox for you.&lt;/p&gt;&#xA;&lt;h2 id=&#34;links&#34;&gt;Links &lt;a href=&#34;#links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/kracekumar/jut&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;jut&lt;/a&gt; - View notebooks in the terminal&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://nbconvert.readthedocs.io/en/latest/usage.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/nbconvert.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/nbconvert.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;nbconvert&lt;/a&gt; - convert notebooks to other formats&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://cantera.org/examples/jupyter/thermo/flame_temperature.ipynb&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/cantera.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/cantera.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;flame-temperature notebook&lt;/a&gt; - The sample notebook I used&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/charmbracelet/glow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;glow&lt;/a&gt; - Terminal Markdown viewer&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/d0c-s4vage/lookatme&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lookatme&lt;/a&gt; - Terminal Markdown slideshow tool&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/pypa/pipx&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;pipx&lt;/a&gt; - Run python cli’s without maintianing a &lt;a href=&#34;/virtual-environment/&#34; class=&#34;glossary-term&#34; title=&#34;Virtual Environment is term for a sandboxed environment commonly associated with the python programming language. If you are installing any sort of python...&#34;&gt;virtual environment&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/willmcgugan/rich&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;rich&lt;/a&gt; - Beautiful python terminal formatter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I made a neovim plugin</title>
    <id>https://go.waylonwalker.com/telegraph-release/</id>
    <updated>2021-10-05T08:04:44Z</updated>
    <published>2021-10-05T08:04:44Z</published>
    <link href="https://go.waylonwalker.com/telegraph-release/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve slowly adding more and more lua functions into my neovim configuration, and recently I noticed a pattern for a class of functions that reach out to run...</summary>
    <content type="html">&lt;p&gt;I’ve slowly adding more and more lua functions into my neovim configuration,&#xA;and recently I noticed a pattern for a class of functions that reach out to run&#xA;shell commands that can be abstracted away.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://youtu.be/8m5ipBuopPU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/8m5ipBuopPU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;telegraphnvim&#34;&gt;Telegraph.nvim &lt;a href=&#34;#telegraphnvim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the project &lt;a href=&#34;https://github.com/WaylonWalker/Telegraph.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;readme&lt;/a&gt;&#xA;for the most up to date details on the plugin itself.&lt;/p&gt;&#xA;&lt;h2 id=&#34;motivation&#34;&gt;Motivation &lt;a href=&#34;#motivation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want a simple way to make remaps into shell commands that can open new tmux&#xA;windows, popups, or just run a command with context from the editor.&lt;/p&gt;&#xA;&lt;p&gt;For example I want to make remaps to do things like open the current file in lookatme.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;nx&#34;&gt;vim&lt;/span&gt; :&lt;span class=&#34;nx&#34;&gt;terminal&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Telegraph&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;pipx&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;run&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;lookatme&lt;/span&gt; {&lt;span class=&#34;nx&#34;&gt;filepath&lt;/span&gt;} &lt;span class=&#34;p&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;live&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reload&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;gruvbox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;session&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;telegraph&amp;#39;&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;telegraph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pipx run lookatme {filepath} --live-reload --style gruvbox-dark&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;how&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tmux&amp;#39;&lt;/span&gt;}&lt;span class=&#34;p&#34;&gt;)&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# &lt;span class=&#34;nx&#34;&gt;tmux&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;popup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;leader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;S&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;telegraph&amp;#39;&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;telegraph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;{&lt;span class=&#34;nx&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pipx run lookatme {filepath} --live-reload --style gruvbox-dark&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;how&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tmux_popup&amp;#39;&lt;/span&gt;}&lt;span class=&#34;p&#34;&gt;)&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;CR&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The main goal here is that remaps become one liners that can just be put&#xA;directly in my &lt;code&gt;init.vim&lt;/code&gt; without creating a whole new lua module for each&#xA;shell command I want to bind.&lt;/p&gt;&#xA;&lt;h2 id=&#34;how&#34;&gt;how &lt;a href=&#34;#how&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;telegraph&lt;/code&gt; takes in a &lt;code&gt;how&lt;/code&gt; argument to determine where to tun the command.j&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;term&lt;/code&gt;(default) runs command in the built in terminal&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux&lt;/code&gt; runs command in a new tmux session and joins it.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux_popup&lt;/code&gt; runs command in a tmux popup window.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux_popup_session&lt;/code&gt; runs command in a tmux session and displays it in a popup&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;subprocess&lt;/code&gt; runs command in a subprocess&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;format-strings&#34;&gt;Format strings &lt;a href=&#34;#format-strings&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The current set of format strings that can be used with telegraph. Placing&#xA;these in braces &lt;code&gt;{}&lt;/code&gt; within your command will get rendered into something with&#xA;context from the editor.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;cword&lt;/code&gt; - the current word under the cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cWORD&lt;/code&gt; - the current BIG Word under the cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cline&lt;/code&gt; - the current line under the cursor&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;filepath&lt;/code&gt; - the filepath of the current file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;filename&lt;/code&gt; - the filename of the current file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;parent&lt;/code&gt; - the parent directory of the current file&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;current_session_name&lt;/code&gt; - name of the current tmux session&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;cwd&lt;/code&gt; - the current working directory&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;give-it-a-&#34;&gt;Give it a ⭐ &lt;a href=&#34;#give-it-a-&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out the &lt;a href=&#34;https://github.com/WaylonWalker/Telegraph.nvim&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;repo&lt;/a&gt; and give&#xA;it a star if its something that interests you.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux targeted session</title>
    <id>https://go.waylonwalker.com/tmux-targeted-session/</id>
    <updated>2021-08-02T23:51:21Z</updated>
    <published>2021-08-02T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-targeted-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/5KE7Il7SOEk</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/5KE7Il7SOEk&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/5KE7Il7SOEk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is something that I made up but use every single day, this is what keeps&#xA;much of what is on my blog or my teams private work wiki going.  I have a few&#xA;very important directories that I have assigned directly to a hotkey for fast&#xA;session switching.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-i new-session -A -s waylonwalker_com &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/git/waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; i popup -E -h 95% -w 95% -x 100% &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s waylonwalker_com &amp;#39;cd ~/git/waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-I popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s waylonwalker_com &amp;#39;cd ~/git/waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-new-session/&#34; class=&#34;wikilink&#34; data-title=&#34;tmux new-session&#34; data-description=&#34;https://youtu.be/LbQNdCAUogE&#34; data-date=&#34;2021-08-01&#34; data-preview=&#34;https://youtu.be/LbQNdCAUogE&#34;&gt;tmux new-session&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This one is building off of yeserday’s new-session post, make sure you check that one out as well.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux detach</title>
    <id>https://go.waylonwalker.com/tmux-detach/</id>
    <updated>2021-08-01T23:51:21Z</updated>
    <published>2021-08-01T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-detach/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/A1qx3tNKDdA</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/A1qx3tNKDdA&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/A1qx3tNKDdA&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;tmux detach is a handy tmux command that will quit your current session while&#xA;keeping it running. The full name of the comamnd is &lt;code&gt;detach-client&lt;/code&gt;, &lt;code&gt;detach&lt;/code&gt;&#xA;is a shorthand.&lt;/p&gt;&#xA;&lt;p&gt;default keybinding&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          d detach-client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have mine bound to &lt;code&gt;mod+d&lt;/code&gt; where mod is alt.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-d detach-client&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/tmux-nav-2021/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34;&gt;https://waylonwalker.com/tmux-nav-2021/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>notify-send</title>
    <id>https://go.waylonwalker.com/notify-send/</id>
    <updated>2021-08-01T10:33:17Z</updated>
    <published>2021-08-01T10:33:17Z</published>
    <link href="https://go.waylonwalker.com/notify-send/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinput float &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;xinput list --id-only &lt;span class=&#34;s2&#34;&gt;&amp;#34;AT Translated Set 2 keyboard&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; notify-send &lt;span class=&#34;s2&#34;&gt;&amp;#34;laptop keeb floated&amp;#34;&lt;/span&gt; -i ~/Pictures/8bitcc.png&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux attach</title>
    <id>https://go.waylonwalker.com/tmux-attach/</id>
    <updated>2021-07-31T23:51:21Z</updated>
    <published>2021-07-31T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-attach/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/JQ0yDCVu44E</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/JQ0yDCVu44E&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://youtu.be/JQ0yDCVu44E&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;attach is one of the most useful features of tmux.  If you have no interest in&#xA;tmux for pane and window management, you should use tmux for this.  It can be a&#xA;life saver if you ever get disconnected from the host machine or accidently&#xA;close your terminal you can connect right back into the session you were just&#xA;in using attach.&lt;/p&gt;&#xA;&lt;h2 id=&#34;attach&#34;&gt;attach &lt;a href=&#34;#attach&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux attach&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;this command will simply attach back to tmux if you are ever disconnected&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;If you ever run long running tasks on a remote machine by sshing into this you&#xA;should be doing it inside tmux, or something like tmux so that you do not loose&#xA;your work.&lt;/p&gt;&#xA;&lt;h2 id=&#34;attach-to-a-specific-session&#34;&gt;attach to a specific session &lt;a href=&#34;#attach-to-a-specific-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you have multiple sessions running you can select the session that you want&#xA;to attach to by passing &lt;code&gt;-t &amp;lt;name-of-session&amp;gt;&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux attach -t scratch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux ls</title>
    <id>https://go.waylonwalker.com/tmux-ls/</id>
    <updated>2021-07-30T23:51:21Z</updated>
    <published>2021-07-30T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-ls/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/LY41GLn_DGg</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/LY41GLn_DGg&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/LY41GLn_DGg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;tmux ls will list the sessions that you have running within the tmux server if&#xA;tmux is currently running.  This is handy to combine with commands such as &lt;code&gt;attach&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux ls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-attach/&#34; class=&#34;wikilink&#34; data-title=&#34;tmux attach&#34; data-description=&#34;https://youtu.be/JQ0yDCVu44E&#34; data-date=&#34;2021-07-31&#34; data-preview=&#34;https://youtu.be/JQ0yDCVu44E&#34;&gt;tmux attach&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux command line</title>
    <id>https://go.waylonwalker.com/tmux-command-line/</id>
    <updated>2021-07-29T23:51:21Z</updated>
    <published>2021-07-29T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-command-line/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/SNu-4IrkjAs</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/SNu-4IrkjAs&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/SNu-4IrkjAs&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;So far we have covered a lot of tmux commands and how they map to keybindings&#xA;but these same commands can be executed at the command line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;from-the-command-line&#34;&gt;From the command line &lt;a href=&#34;#from-the-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s make a popup that displays our &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; status for 5s or until we close it&#xA;manually.  We can run the following command at the command line, in a split.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tmux display-popup -E -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;git status &amp;amp;&amp;amp; sleep 5&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;from-the-tmux-command-line&#34;&gt;From the tmux command line &lt;a href=&#34;#from-the-tmux-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Or we can open the tmux command line and run it from tmux’s built in command&#xA;line, which is very similar to bim EX mode. By default the tmux command line&#xA;can be opened with &lt;code&gt;prefix+[&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;display-popup -E -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;git status &amp;amp;&amp;amp; sleep 5&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that the tmux command is called by default when inside of tmux.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;make-it-a-keybinding&#34;&gt;Make it a keybinding &lt;a href=&#34;#make-it-a-keybinding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Finally we can make it a keybinding by adding a bind command ahead of our tmux&#xA;command, then we can execute this in the tmux command line or add it to our&#xA;&lt;code&gt;~/.tmux.conf&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; s display-popup -E -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;git status &amp;amp;&amp;amp; sleep 5&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux copy-mode</title>
    <id>https://go.waylonwalker.com/tmux-copy-mode/</id>
    <updated>2021-07-28T23:51:21Z</updated>
    <published>2021-07-28T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-copy-mode/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/-ypY_-VmBKk</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/-ypY_-VmBKk&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/-ypY_-VmBKk&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;tmux copy-mode is a tmux mode that lets you scroll, search, copy, and jump your&#xA;way through a pane.  There are a ton of keybindings for copy-mode, the main&#xA;ones you will need to know are &lt;code&gt;/&lt;/code&gt; for searching down &lt;code&gt;?&lt;/code&gt; for searching up, &lt;code&gt;n&lt;/code&gt;&#xA;for next item, &lt;code&gt;space&lt;/code&gt; for starting a selection, and enter to copy the&#xA;selection.  Arrow keys will be used for navigation unless you have specified vi mode, then it will be &lt;code&gt;hjkl&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Default keybinding to get into copy mode is &lt;code&gt;prefix+[&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; copy-mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are a vim user you will likely want to use vi style keys, add this to&#xA;your &lt;code&gt;~/.tmux.conf&lt;/code&gt; file to enable vi mode.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;setw -g mode-keys vi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;full list of copy-mode keybindings from the man page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Command                                      vi              emacs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           append-selection&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           append-selection-and-cancel                  A&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           back-to-indentation                          ^               M-m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           begin-selection                              Space           C-Space&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           bottom-line                                  L&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cancel                                       q               Escape&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           clear-selection                              Escape          C-g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-end-of-line &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;                  D               C-k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-line &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-pipe &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-pipe-no-clear &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-pipe-and-cancel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-selection &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-selection-no-clear &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           copy-selection-and-cancel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;         Enter           M-w&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-down                                  j               Down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-left                                  h               Left&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-right                                 l               Right&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           cursor-up                                    k               Up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           end-of-line                                  $               C-e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           goto-line &amp;lt;line&amp;gt;                             :               g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           halfpage-down                                C-d             M-Down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           halfpage-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           halfpage-up                                  C-u             M-Up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           history-bottom                               G               M-&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           history-top                                  g               M-&amp;lt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-again                                   &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;               &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-backward &amp;lt;to&amp;gt;                           F               F&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-forward &amp;lt;to&amp;gt;                            f               f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-reverse                                 ,               ,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-to-backward &amp;lt;to&amp;gt;                        T&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-to-forward &amp;lt;to&amp;gt;                         t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           jump-to-mark                                 M-x             M-x&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           middle-line                                  M               M-r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-matching-bracket                        %               M-C-f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-paragraph                               &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;               M-&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-space                                   W&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-space-end                               E&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-word                                    w&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           next-word-end                                e               M-f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           other-end                                    o&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           page-down                                    C-f             PageDown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           page-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           page-up                                      C-b             PageUp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           pipe &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           pipe-no-clear &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           pipe-and-cancel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;command&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&amp;lt;prefix&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-matching-bracket                                    M-C-b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-paragraph                           &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;               M-&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-space                               B&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           previous-word                                b               M-b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rectangle-on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rectangle-off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rectangle-toggle                             v               R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           refresh-from-pane                            r               r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           scroll-down                                  C-e             C-Down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           scroll-down-and-cancel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           scroll-up                                    C-y             C-Up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-again                                 n               n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-backward &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                        ?&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-backward-incremental &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                            C-r&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-backward-text &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-forward &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                         /&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-forward-incremental &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;                             C-s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-forward-text &amp;lt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           search-reverse                               N               N&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-line                                  V&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-word&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           set-mark                                     X               X&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           start-of-line                                &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;               C-a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           stop-selection&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           top-line                                     H               M-R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux join-pane</title>
    <id>https://go.waylonwalker.com/tmux-join-pane/</id>
    <updated>2021-07-27T23:51:21Z</updated>
    <published>2021-07-27T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-join-pane/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Vm5rRtcVXLw</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Vm5rRtcVXLw&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Vm5rRtcVXLw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Join-pane allows you to join panes that you have broken away from your window,&#xA;or created in a different window to the window you want it in.  As far as I&#xA;know there is not a default keybinding for it.&lt;/p&gt;&#xA;&lt;p&gt;Before you can join a pane you must first have a pane marked to join.  Once you&#xA;mark a pane, go back to the window you want to join it to and join-pane.&lt;/p&gt;&#xA;&lt;p&gt;My keybindings, you must add this to your &lt;code&gt;~/.tmux.conf&lt;/code&gt; file to use them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Mark and swap panes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#――――――――――――――――――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pane&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# mark&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pane&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;M&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# unmark&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;M&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;lt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pane&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Also check out the full YouTube&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;&#xA;to see all of the videos in this series.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux break-pane</title>
    <id>https://go.waylonwalker.com/break-pane/</id>
    <updated>2021-07-26T23:51:21Z</updated>
    <published>2021-07-26T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/break-pane/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/ICL609F2xnc</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/ICL609F2xnc&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/ICL609F2xnc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Break-pane is a handy tmux command when your layout gets too cramped and you&#xA;want to just move a split into its own window.  Calling &lt;code&gt;break-pane&lt;/code&gt; does&#xA;exactly that, it creates a &lt;code&gt;new-window&lt;/code&gt; for you and moves your currently&#xA;selected split into that window&lt;/p&gt;&#xA;&lt;p&gt;Default key binding for &lt;code&gt;break-pane&lt;/code&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          ! break-pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux zoom</title>
    <id>https://go.waylonwalker.com/tmux-zoom/</id>
    <updated>2021-07-25T23:51:21Z</updated>
    <published>2021-07-25T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-zoom/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/Rn6mOarCQ-Y</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/Rn6mOarCQ-Y&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/Rn6mOarCQ-Y&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Zooming into the current split in tmux is a valuable tool to give yourself some&#xA;screen real estate.  These days I am almost always presenting, streaming, or&#xA;pairing up with a co-worker over a video call.  Since I am always sharing my&#xA;screen I am generally zoomed in to a level that is just a bit uncomfortable, so&#xA;anytime I make a split it is really uncomfortable, being able to zoom into the&#xA;split I am focused on is a big help, and also help anyone watching follow where&#xA;I am currently working.&lt;/p&gt;&#xA;&lt;p&gt;Default key bindings for zooming the current split&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          z resize-pane -Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I have rebound this to match the default binding with mod+z rather so that I&#xA;get that single keystroke experience.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-z resize-pane -Z&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux new-window</title>
    <id>https://go.waylonwalker.com/tmux-new-window/</id>
    <updated>2021-07-24T23:51:21Z</updated>
    <published>2021-07-24T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-new-window/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/YRPZBv-iYyE</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/YRPZBv-iYyE&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/YRPZBv-iYyE&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;New window as it sounds makes new windows in tmux.  Windows are kind of like&#xA;tabs.  They are another screen within your sessions that you can name and make&#xA;new panes in.&lt;/p&gt;&#xA;&lt;p&gt;Default key bindings for creating and navigating windows in tmux.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          c new-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          p previous-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          n next-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;As always I have rebound these keys because I generally prefer a single&#xA;keystroke over the prefix plus keybinding approach that tmux gives by default.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#――windows――――――――――――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-c new-window -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-p previous-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-n next-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;When I started using tmux I did almost everything in one giant session with&#xA;many panes and windows.  It became a nightmare to manage and quickly get&#xA;between two sets work efficiently.  This year I leaned in on sessions quite&#xA;heavily.  Checkout this 👇 post to see that workflow in depth.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux slect-pane</title>
    <id>https://go.waylonwalker.com/tmux-select-pane/</id>
    <updated>2021-07-23T23:51:21Z</updated>
    <published>2021-07-23T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-select-pane/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/CPZJZjN9YTY</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/CPZJZjN9YTY&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/CPZJZjN9YTY&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are my MOST often used keybindings that I use in tmux.  They allow me to&#xA;jump between splits with ease with a vim style layout.  I can hold mod and jump&#xA;between panes with a familiar arrow key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-h &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -L&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-l &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -R&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-k &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-j &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -D&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux rotate-window</title>
    <id>https://go.waylonwalker.com/tmux-rotate-window/</id>
    <updated>2021-07-22T23:51:21Z</updated>
    <published>2021-07-22T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-rotate-window/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/06z5qf81ofo</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/06z5qf81ofo&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/06z5qf81ofo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Rotate window is the main way that I navigated tmux before I learned&#xA;&lt;code&gt;select-pane&lt;/code&gt;.  It allows you to change your focused pane, or rotate the&#xA;position of the panes easily.&lt;/p&gt;&#xA;&lt;p&gt;Default keybindings&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key        C-o rotate-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key          o &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -t :.+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;My keybindings look just a bit different than the default ones, I do not like&#xA;needing to hit prefix for every command, especially for repeated commands.  I&#xA;set a similar keybinding to the default one that uses mod instead of prefix.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-o &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-pane -t :.+&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-O rotate-window&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux select-layout</title>
    <id>https://go.waylonwalker.com/tmux-select-layout/</id>
    <updated>2021-07-21T23:51:21Z</updated>
    <published>2021-07-21T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-select-layout/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/F0mHnwTrNNc</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/F0mHnwTrNNc&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/F0mHnwTrNNc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;When you get many splits going in tmux sometimes its time for a new layout.&#xA;There are four layout strategies that I use, main-vertical, main-horizontal,&#xA;even-vertical, even-horizontal. Almost always I am useing the main ones with&#xA;mod plus a or mod plus shift a keybindings.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Select Layouts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#―――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-a &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout main-vertical&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-A &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout main-horizontal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-E &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout even-vertical&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-V &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;-layout even-horizontal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux resize-panes</title>
    <id>https://go.waylonwalker.com/tmux-resize-panes/</id>
    <updated>2021-07-20T23:51:21Z</updated>
    <published>2021-07-20T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-resize-panes/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/hpFYE2LU7xc</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/hpFYE2LU7xc&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/hpFYE2LU7xc&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Resizing panes in tmux can be quite difficult in default tmux, I&#xA;use a set of keybingings to help resize panes in the rare occasions&#xA;that I do need just a bit more space.  I set the keybinding to the same as my&#xA;split navigation bindings but shifted. They are very vim like (h,j,k,l).&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# resize panes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#―――――――――――――――――――――――――――――&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-H resize-pane -L &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-L resize-pane -R &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-K resize-pane -U &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-J resize-pane -D &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Most often when I need to resize panes I just grab the edge of the pane with my&#xA;mouse.  Yes the mouse, its not that often that I actually need to change the&#xA;size of a pane.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Enable mouse control (clickable windows, panes, resizable panes)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g mouse on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux choose-tree</title>
    <id>https://go.waylonwalker.com/tmux-choose-tree/</id>
    <updated>2021-07-19T23:51:21Z</updated>
    <published>2021-07-19T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-choose-tree/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/79Y-kqAiMpw</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/79Y-kqAiMpw&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/79Y-kqAiMpw&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Choose tree is a powerful tmux utility that provides a graphical interface to&#xA;preview all sessions, windows, and panes, move between them kill them, move&#xA;them and much more.&lt;/p&gt;&#xA;&lt;p&gt;The default keybinding&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key -T prefix s choose-tree -s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;my preferred keybinding to open sessions and windows collapsed and Zoomed in.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key j choose-tree -swZ&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;From the man page.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;choose-tree &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-GNrswZ&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-F format&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-f filter&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-K key-format&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-O sort-order&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-t target-pane&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;template&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Put a pane into tree mode, where a session, window or pane may be chosen interactively from a tree.  Each session, window or pane is shown on&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        one line.  A shortcut key is shown on the left in brackets allowing &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; immediate choice, or the tree may be navigated and an item chosen or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        otherwise manipulated using the keys below.  -s starts with sessions collapsed and -w with windows collapsed.  -Z zooms the pane.  The follow‐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ing keys may be used in tree mode:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Key    Function&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Enter  Choose selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Up     Select previous item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            Down   Select next item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            +      Expand selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            -      Collapse selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            M-+    Expand all items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            M--    Collapse all items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            x      Kill selected item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            X      Kill tagged items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &amp;lt;      Scroll list of previews left&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &amp;gt;      Scroll list of previews right&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            C-s    Search by name&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            m      Set the marked pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            M      Clear the marked pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            n      Repeat last search&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            t      Toggle &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; item is tagged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            T      Tag no items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            C-t    Tag all items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            :      Run a &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each tagged item&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            f      Enter a format to filter items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            H      Jump to the starting pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            O      Change sort field&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            r      Reverse sort order&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            v      Toggle preview&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            q      Exit mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        After a session, window or pane is chosen, ‘%%’ is replaced by the target in template and the result executed as a command.  If template is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        not given, &lt;span class=&#34;s2&#34;&gt;&amp;#34;switch-client -t &amp;#39;%%&amp;#39;&amp;#34;&lt;/span&gt; is used.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -O specifies the initial sort field: one of ‘index’, ‘name’, or ‘time’.  -r reverses the sort order.  -f specifies an initial filter: the fil‐&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ter is a format - &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; it evaluates to zero, the item in the list is not shown, otherwise it is shown.  If a filter would lead to an empty list,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        it is ignored.  -F specifies the format &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each item in the tree and -K a format &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each shortcut key&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; both are evaluated once &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; each&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        line.  -N starts without the preview.  -G includes all sessions in any session groups in the tree rather than only the first.  This &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        works only &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; at least one client is attached.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;https://waylonwalker.com/tmux-nav-2021/&#34; class=&#34;hoverlink  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/waylonwalker.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/waylonwalker.com.ico&#34;&gt;https://waylonwalker.com/tmux-nav-2021/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux prefix</title>
    <id>https://go.waylonwalker.com/tmux-prefix/</id>
    <updated>2021-07-18T23:51:21Z</updated>
    <published>2021-07-18T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-prefix/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/BMkpbfhbkKM</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/BMkpbfhbkKM&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/BMkpbfhbkKM&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;The prefix key is an essential part of tmux, by default all of tmux’s&#xA;key-bindings sit behind a prefix.  This prefix is very similar to vim’s leader&#xA;key. It is common for folks to change the default &lt;code&gt;C-b&lt;/code&gt; (control b) to &lt;code&gt;C-a&lt;/code&gt; or&#xA;if they are a vim user something to match their vim leader key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -g prefix C-Space&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; Space send-prefix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A few of the essential default key-bindings.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;%      vertical split&#xA;&amp;#34;      horizontal split&#xA;d      detach&#xA;&#xA;up     select up one pane&#xA;down   select down one pane&#xA;right  select right one pane&#xA;left   select left one pane&#xA;&#xA;t      clock&#xA;o      swap panes&#xA;c      create window&#xA;n      next window&#xA;p      previous window&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;A more complete list of key-bindings can be found in this gist &lt;a href=&#34;https://gist.github.com/mzmonsour/8791835&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gist.github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gist.github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://gist.github.com/mzmonsour/8791835&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux splitting panes</title>
    <id>https://go.waylonwalker.com/tmux-splitting-panes/</id>
    <updated>2021-07-17T23:51:21Z</updated>
    <published>2021-07-17T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-splitting-panes/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/kzgyiHap1nQ</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/kzgyiHap1nQ&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/kzgyiHap1nQ&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;splitting panes is a core feature of tmux.  It allows us to split the terminal&#xA;vertically or horizontally into new panes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-s split-window -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-v split-window -h -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;#{pane_current_path}&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-X kill-pane&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🗒️ note that  ‘#{pane_current_path}‘will keep the split in the same directory&#xA;as it’s parent, without this it will default to your home directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux last session</title>
    <id>https://go.waylonwalker.com/tmux-last-session/</id>
    <updated>2021-07-16T23:51:21Z</updated>
    <published>2021-07-16T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-last-session/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/RB87EEnnMnU</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/RB87EEnnMnU&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/RB87EEnnMnU&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;An ultimate productivity key-binding in tmux is one to switch to the last session.  I use this to quickly get between sessions really quick.  Often I am working and need to lookup a quick note, or copy something into my notes, then get back to where I was quickly.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-b switch-client -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I think of this hub and spoke model, and use &lt;code&gt;last-session&lt;/code&gt; to quickly drive it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; alt=&#34;hub and spoke&#34;/ data-glightbox=&#34;description: hub and spoke&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux floating popups</title>
    <id>https://go.waylonwalker.com/tmux-floating-popups/</id>
    <updated>2021-07-15T23:51:21Z</updated>
    <published>2021-07-15T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-floating-popups/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/2ZqFDsJywt8</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/2ZqFDsJywt8&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/2ZqFDsJywt8&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tmux popups are actually floating windows that you can drag around the screen.  They always open in the middle (by default) when you open them, no matter where you leave them.&lt;/p&gt;&#xA;&lt;p&gt;Here are a couple of keybindings I use to open up popup windows.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/git&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s scratch&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>tmux popups</title>
    <id>https://go.waylonwalker.com/tmux-popups/</id>
    <updated>2021-07-14T23:51:21Z</updated>
    <published>2021-07-14T23:51:21Z</published>
    <link href="https://go.waylonwalker.com/tmux-popups/" rel="alternate" type="text/html"></link>
    <summary type="text">https://youtu.be/2I8fB28zfB4</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://youtu.be/2I8fB28zfB4&#34; class=&#34;youtube-embed  has-avatar has-avatar-before&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/youtu.be.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/youtu.be.png&#34;&gt;https://youtu.be/2I8fB28zfB4&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Tmux-popups are a great feature that is relatively new to tmux, many repos such&#xA;as the standard ubuntu repos do not have it.   Popups came in 3.2a, if your&#xA;package manager does not have it, you can follow the &lt;a href=&#34;https://github.com/tmux/tmux#installation&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux’s install&#xA;instructions&lt;/a&gt; to build from source.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# open a popup scratchpad&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-g display-popup -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux new-session -A -s scratch&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/tmux-nav-2021/&#34; class=&#34;wikilink&#34; data-title=&#34;How I navigate tmux in 2021&#34; data-description=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34; data-date=&#34;2021-05-11&#34; data-preview=&#34;change_speed = (speed) =&amp;gt; [...document.querySelectorAll(&amp;#39;video&amp;#39;)].map(v =&amp;gt; v.playbackRate=v.playbackRate+speed)&#34;&gt;How I navigate tmux in 2021&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for more information on how I navigate tmux, check out this full post&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I use popups quite a bit in my workflow to ssh into another machine for a short&#xA;period, or make a new project with a template.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Copy and Paste on Linux</title>
    <id>https://go.waylonwalker.com/ubuntu/</id>
    <updated>2021-06-25T20:50:45Z</updated>
    <published>2021-06-25T20:50:45Z</published>
    <link href="https://go.waylonwalker.com/ubuntu/" rel="alternate" type="text/html"></link>
    <summary type="text">These are the notes that I used as I set up my first ever ubuntu desktop.</summary>
    <content type="html">&lt;p&gt;These are the notes that I used as I set up my first ever ubuntu desktop.&lt;/p&gt;&#xA;&lt;h2 id=&#34;gnome-tweaks&#34;&gt;gnome-tweaks &lt;a href=&#34;#gnome-tweaks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install gnome-tweaks&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;nordix-gtk-theme&#34;&gt;nordix gtk theme &lt;a href=&#34;#nordix-gtk-theme&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ran this, but have no idea if it had any effect as the theme did&#xA;not show up until I relogged.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gsettings set org.gnome.desktop.wm.preferences theme Nordic&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;What I think actuagnome terminal showing scrollbar in tmuxlly worked was&lt;/p&gt;&#xA;&lt;h2 id=&#34;emoji-support&#34;&gt;emoji support &lt;a href=&#34;#emoji-support&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;One thing that I really missed quite early from windows was the emoji virtual&#xA;keyboard. I like being able to quickly toss in those emoji that give just a&#xA;bit of a visual cue 🔥, ⚠️,, 🎉, 🦄, 💜.&lt;/p&gt;&#xA;&lt;h3 id=&#34;installation&#34;&gt;installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I found an application called emote. that seems to do everything I need it to&#xA;in the snap store. Installation is a typicall snap install.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo snap install emote&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;default-keybinding&#34;&gt;default keybinding &lt;a href=&#34;#default-keybinding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The application came with a default keybinding &lt;code&gt;ctrl+alt+e&lt;/code&gt;, but I could never remember it.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ctrl+alt+e&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;windows-keybinding&#34;&gt;Windows keybinding &lt;a href=&#34;#windows-keybinding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Old habits are hard to break, I opened up the gnome settings and set a hotkey&#xA;to &lt;code&gt;super+;&lt;/code&gt; to run the command emote.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Super+;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h3 id=&#34;how-it-works&#34;&gt;How it works &lt;a href=&#34;#how-it-works&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h2 id=&#34;get-that-dock-outta-here&#34;&gt;Get that dock outta here &lt;a href=&#34;#get-that-dock-outta-here&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I tried to disable the dock and it didn’t immediately work for me,&#xA;likely because I needed to relog. I really have no use for the&#xA;dock though as I will always open applications with a hotkey or&#xA;super + search.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt remove gnome-shell-extension-ubuntu-dock&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;terminal-one-dark-theme&#34;&gt;Terminal One Dark Theme &lt;a href=&#34;#terminal-one-dark-theme&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I don’t stress too hard on themes, I just want something halfway consistent and&#xA;just works. I typically have just used a semi-popular theme “one-dark”&#xA;everywhere. This was the default theme in GitHub’s Atom text editor that I&#xA;never used. I only care that it looks good and is popular enought that it just&#xA;exists everywhere.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/denysdovhan/gnome-terminal-one/master/one-dark.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;terminal-menu-and-scrollbar&#34;&gt;Terminal menu and scrollbar &lt;a href=&#34;#terminal-menu-and-scrollbar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I found these to be ugly ans unnecessary so I turned them off. You can access&#xA;all the menu items by right clicking on the terminal anyways, so there is no&#xA;reason to let it take up any screen real estate.&lt;/p&gt;&#xA;&lt;h3 id=&#34;hiding-the-scrollbar&#34;&gt;Hiding the scrollbar &lt;a href=&#34;#hiding-the-scrollbar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gnome-terminal-hide-scrollbar.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gnome-terminal-hide-scrollbar.png&#34; alt=&#34;hide the scrollbar&#34;/ data-glightbox=&#34;description: hide the scrollbar&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h3 id=&#34;hiding-the-menubar&#34;&gt;Hiding the menubar &lt;a href=&#34;#hiding-the-menubar&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/gnome-terminal-hide-menubar.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/gnome-terminal-hide-menubar.png&#34; alt=&#34;hide the menubar&#34;/ data-glightbox=&#34;description: hide the menubar&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;vim-clipboard&#34;&gt;vim clipboard &lt;a href=&#34;#vim-clipboard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install xsel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;clipboard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;unnamedplus&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;tmux-clipboard&#34;&gt;tmux clipboard &lt;a href=&#34;#tmux-clipboard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Copy and Paste on Linux&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -T copy-mode-vi Enter send-keys -X copy-pipe-and-cancel &lt;span class=&#34;s2&#34;&gt;&amp;#34;xclip -i -f -selection primary | xclip -i -selection clipboard&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-option -s set-clipboard off&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe-and-cancel &lt;span class=&#34;s2&#34;&gt;&amp;#34;xclip -selection clipboard -i&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;hotkeys&#34;&gt;Hotkeys &lt;a href=&#34;#hotkeys&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Key&lt;/th&gt;&#xA;&lt;th&gt;Desc&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;super+j&lt;/td&gt;&#xA;&lt;td&gt;move to workspace below&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;super+k&lt;/td&gt;&#xA;&lt;td&gt;move to workspace above&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;super+shift+j&lt;/td&gt;&#xA;&lt;td&gt;move window one workspace down&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;super+shift+k&lt;/td&gt;&#xA;&lt;td&gt;move window one workspace up&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;Key&lt;/th&gt;&#xA;&lt;th&gt;Command&lt;/th&gt;&#xA;&lt;th&gt;Desc&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Super+e&lt;/td&gt;&#xA;&lt;td&gt;nautilus&lt;/td&gt;&#xA;&lt;td&gt;File Browser&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Super+Shift+p&lt;/td&gt;&#xA;&lt;td&gt;Area Screenshot&lt;/td&gt;&#xA;&lt;td&gt;gnome-screenshot -a&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Super+Alt+p&lt;/td&gt;&#xA;&lt;td&gt;Area Screenshot to clipboard&lt;/td&gt;&#xA;&lt;td&gt;gnome-screenshot -ac&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;Super+e&lt;/td&gt;&#xA;&lt;td&gt;nautilus&lt;/td&gt;&#xA;&lt;td&gt;File Browser&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;screenshots&#34;&gt;screenshots &lt;a href=&#34;#screenshots&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I am constantly taking screenshots for my daily workflow, on Windows I had it&#xA;setup to both send to the clipboard and store in a screenshots directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# take a screenshot and Store it as a file.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gnome-screenshot -a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# take a screenshot and send it to the clipboard&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gnome-screenshot -ac&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;obs&#34;&gt;obs &lt;a href=&#34;#obs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;As od Jun 2021 the version of obs-studio installed using the instructions in&#xA;their wiki is out of date. I had success getting the latest version, which&#xA;supports virtual webcams, using snap.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snap install obs-studio&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;virtual-webcam&#34;&gt;virtual webcam &lt;a href=&#34;#virtual-webcam&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;After getting the latest version of obs-studio whixh supports virtual webcam it&#xA;still did not start. After some searching I found that updating v4l2loopback&#xA;resolved the issue.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt purge v4l2loopback-dkms&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/umlaeute/v4l2loopback.git ~/git/v4l2loopback/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/git/v4l2loopback/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe v4l2loopback &lt;span class=&#34;nv&#34;&gt;devices&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;exclusive_caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo depmod -a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo modprobe v4l2loopback &lt;span class=&#34;nv&#34;&gt;video_nr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;card_label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OBS Video Source&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;exclusive_caps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;i3&#34;&gt;i3 &lt;a href=&#34;#i3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I decided to give i3 a try, simply apt install it, then it shows up under the&#xA;gear icon at the login screen after a reboot. At this point I don’t think I am&#xA;ready for i3. I have just changed a bunch of stuff in my workflow and honestly&#xA;I got a decent gnome config setup in like 10 minutes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install i3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How I configure git</title>
    <id>https://go.waylonwalker.com/git-settings/</id>
    <updated>2021-06-25T20:50:45Z</updated>
    <published>2021-06-25T20:50:45Z</published>
    <link href="https://go.waylonwalker.com/git-settings/" rel="alternate" type="text/html"></link>
    <summary type="text">Git can be a bit tricky to get configured correctly. I often stumble into config issues weeks after setting up a new machine that I did not even notice....</summary>
    <content type="html">&lt;p&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;Git&lt;/a&gt; can be a bit tricky to get configured correctly.  I often stumble into&#xA;config issues weeks after setting up a new machine that I did not even notice.&#xA;These are my notes to remind me how I configure git.&lt;/p&gt;&#xA;&lt;h2 id=&#34;identity&#34;&gt;Identity &lt;a href=&#34;#identity&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.name &lt;span class=&#34;s2&#34;&gt;&amp;#34;John Doe&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.email johndoe@example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;rebase&#34;&gt;rebase &lt;a href=&#34;#rebase&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;editor&#34;&gt;editor &lt;a href=&#34;#editor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global core.editor nvim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;default-branch&#34;&gt;default branch &lt;a href=&#34;#default-branch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global init.defaultBranch main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;push-to-current-bransh-wihtout-setting-upstream&#34;&gt;push to current bransh wihtout setting upstream &lt;a href=&#34;#push-to-current-bransh-wihtout-setting-upstream&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global push.default current&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;autostash&#34;&gt;Autostash &lt;a href=&#34;#autostash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config pull.rebase &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config rebase.autoStash &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>python lsp setup</title>
    <id>https://go.waylonwalker.com/setup-pylsp/</id>
    <updated>2021-05-17T16:13:42Z</updated>
    <published>2021-05-17T16:13:42Z</published>
    <link href="https://go.waylonwalker.com/setup-pylsp/" rel="alternate" type="text/html"></link>
    <summary type="text">Setting up python with the native nvim&gt;0.5 lsp was mr</summary>
    <content type="html">&lt;p&gt;Setting up python with the native nvim&amp;gt;0.5 lsp was mr&lt;/p&gt;&#xA;&lt;h2 id=&#34;lsp-config&#34;&gt;lsp-config &lt;a href=&#34;#lsp-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/neovim/nvim-lspconfig&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/neovim/nvim-lspconfig&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;lua&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lspconfig&amp;#39;&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;pyright&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;setup&lt;/span&gt;{}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;EOF&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pyls190&#34;&gt;pyls#190 &lt;a href=&#34;#pyls190&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/palantir/python-language-server/issues/190&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/palantir/python-language-server/issues/190&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;lspconfig.pyls&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pyls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;filetypes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;pyls&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;configurationSources&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;flake8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;n&#34;&gt;plugins&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;jedi_completion&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;jedi_hover&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;jedi_references&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;jedi_signature_help&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;jedi_symbols&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;all_scopes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pycodestyle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;flake8&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;ignore&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          &lt;span class=&#34;n&#34;&gt;maxLineLength&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;160&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mypy&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;isort&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;yapf&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pylint&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;pydocstyle&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;mccabe&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;preload&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;rope_completion&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;n&#34;&gt;on_attach&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on_attach&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mypy&#34;&gt;mypy &lt;a href=&#34;#mypy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Getting mypy working with lsp was tricky for me.  I had some issues trying to&#xA;run mypy in ci and pyright in my editor and I really wanted them to match.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install &lt;span class=&#34;s1&#34;&gt;&amp;#39;python-lsp-server[all]&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx inject python-lsp-server pylsp-mypy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How I navigate tmux in 2021</title>
    <id>https://go.waylonwalker.com/tmux-nav-2021/</id>
    <updated>2021-05-11T09:14:07Z</updated>
    <published>2021-05-11T09:14:07Z</published>
    <link href="https://go.waylonwalker.com/tmux-nav-2021/" rel="alternate" type="text/html"></link>
    <summary type="text">change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)</summary>
    <content type="html">&lt;script&gt;&#xA;change_speed = (speed) =&gt; [...document.querySelectorAll(&#39;video&#39;)].map(v =&gt; v.playbackRate=v.playbackRate+speed)&#xA;&lt;/script&gt;&#xA;&lt;style&gt;&#xA;&lt;/style&gt;&#xA;&lt;p&gt;In 2021 I changed the way I navigate between tmux sessions big time.  Now I can&#xA;create, kill, switch with ease, and generally keep work separated into logical&#xA;groups.&lt;/p&gt;&#xA;&lt;h2 id=&#34;update&#34;&gt;Update &lt;a href=&#34;#update&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since making this post, I have made ~20 other posts in short form that all have&#xA;a YouTube video to go along with them you can find them all on my&#xA;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLTRNG6WIHETB4reAxbWza3CZeP9KL6Bkr&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux-playlist&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;chris-toomeyshttpstwittercomchristoomey-tmux-course&#34;&gt;&lt;a href=&#34;https://twitter.com/christoomey&#34;&gt;Chris Toomey’s&lt;/a&gt; Tmux Course &lt;a href=&#34;#chris-toomeyshttpstwittercomchristoomey-tmux-course&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I took Chris’s &lt;a href=&#34;https://thoughtbot.com/upcase/tmux&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/thoughtbot.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/thoughtbot.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tmux course&lt;/a&gt; in December&#xA;2020 and it was fantastic.  Even as a seasoned tmux user, I learned quite a bit.&#xA;Before the course, I was proficient in navigating within each of my tmux&#xA;sessions but rarely started more than one session.  A few months later, I have&#xA;adopted a lot of what I learned from Chris and made it my own.&lt;/p&gt;&#xA;&lt;p&gt;I am now keeping projects to their own session and can move between them&#xA;fluidly with just a few keystrokes.  For high-traffic projects, I have them&#xA;bound to a single keystroke for instant switching.  This change has been a&#xA;game-changer from the mess of windows I used to have and the nightmare it was&#xA;to find work I was doing and end up duplicating project work in two separate&#xA;windows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;📝 &lt;strong&gt;NOTE:&lt;/strong&gt; Some of my config comes straight from the course, and some of it has&#xA;been extended to my liking.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Let’s take a quick look at how I am navigating through tmux on a day-to-day basis.&lt;/p&gt;&#xA;&lt;!-- ![overview of how I switch and manage tmux sessions](https://images.waylonwalker.com/tmux-navigation-2021.gif &#34;overview&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 Overview of how I navigate tmux&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;tmux-ls&#34;&gt;tmux ls &lt;a href=&#34;#tmux-ls&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Throughout this article, I have several recordings showing how I use manage&#xA;sessions with my keybindings.  I will often run a &lt;code&gt;tmux ls&lt;/code&gt; command to&#xA;highlight running sessions at various points to help guide the viewer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;ta&#34;&gt;ta &lt;a href=&#34;#ta&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;my attach/session switch script&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;At the heart of my tmux navigation is a highly customized version of Chris’s&#xA;tat script that I renamed &lt;code&gt;ta&lt;/code&gt;.  Many folks add this to their bashrc &lt;code&gt;alias ta=tmux attach&lt;/code&gt;.  Simply calling ta will do the same thing as shown below.  If&#xA;you’re in a tmux session, it does nothing, and if you’re not in one, it will&#xA;attach you to the first one.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;get the full &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;script&lt;/a&gt; from GitHub.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;!-- ![overview of how I switch and manage tmux sessions](https://images.waylonwalker.com/tmux-navigation-2021-ta.gif &#34;overview&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 attaching to a session by default&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In my &lt;code&gt;~/.bashrc&lt;/code&gt; or &lt;code&gt;~/.zshrc&lt;/code&gt; I add the &lt;code&gt;ta&lt;/code&gt; command to keep myself in a tmux&#xA;session at all times.  Whenever I open my terminal, I am automatically dropped&#xA;into a tmux session, but if I am opening a split while in tmux it’s smart&#xA;enough to know not to nest tmux sessions.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ta&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Another article can dive into my &lt;code&gt;ta&lt;/code&gt; command. This one is more about the&#xA;methodology, workflow, and keybindings to get me there.  It’s available in my&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;script&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;but-theres-more&#34;&gt;but there’s more &lt;a href=&#34;#but-theres-more&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;gettin fuzzy&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Give it a directory, and a &lt;code&gt;fzy&lt;/code&gt; dropdown will let you choose a subdirectory to&#xA;start your session in, and name the session after that directory.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ta ~/git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;🔥 Bonus, use direnv to automatically set settings, echo your &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; status,&#xA;activate your environment or whatever else you need.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;!-- ![overview of how I switch and manage tmux sessions](https://images.waylonwalker.com/tmux-navigation-2021-ta-directory.gif &#34;overview&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta-directory.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-ta-directory.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;👆 give it a directory, it will ask for input to which project and start a new&#xA;named session in that directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Note that starting from outside currently does not start in a split layout like&#xA;it does when starting from within tmux.  I am still playing with this, but&#xA;generally, I want my terminal session to be plain when I first start my&#xA;terminal. I usually am starting work after the first default session.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;🤔 I still use both fzy and fzf. It probably doesn’t make sense to use both,&#xA;but I am currently giving fzy a try.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;prefixw&#34;&gt;prefix+w &lt;a href=&#34;#prefixw&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;tmux choose-tree&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;By default, tmux comes with a &lt;code&gt;tmux choose-tree&lt;/code&gt; command bound to &lt;code&gt;prefix+w&lt;/code&gt;,&#xA;which opens in full screen.  The upper section of the screen will show every&#xA;window opened.  While selected, you can show the splits in each window by&#xA;hitting l, or fold it with h. You can search for a session name by hitting /.&lt;/p&gt;&#xA;&lt;!-- ![jump to existing sessions with prefix+w](https://images.waylonwalker.com/tmux-navigation-2021-prefix+w.gif &#34;using prefix+w&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+w.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+w.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.tmux.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# expanded to show all splits&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; s choose-tree&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# simpler window to show only sessions&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; S choose-session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;keybindings-in-choose-treechoose-session&#34;&gt;Keybindings in choose-tree/choose-session &lt;a href=&#34;#keybindings-in-choose-treechoose-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;The default keybindings of the tmux &lt;code&gt;choose-tree&lt;/code&gt; and &lt;code&gt;choose-session&lt;/code&gt; that I&#xA;use are listed below.  J/K are very intuitive, but I just learned about h,l,/.&#xA;When I do use one of these, the / (search) can be super helpful to find&#xA;sessions/windows faster.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&lt;thead&gt;&#xA;&lt;tr&gt;&#xA;&lt;th&gt;action&lt;/th&gt;&#xA;&lt;th&gt;key&lt;/th&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/thead&gt;&#xA;&lt;tbody&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;fold&lt;/td&gt;&#xA;&lt;td&gt;h&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;unfold&lt;/td&gt;&#xA;&lt;td&gt;l&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;up&lt;/td&gt;&#xA;&lt;td&gt;k&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;down&lt;/td&gt;&#xA;&lt;td&gt;j&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;tr&gt;&#xA;&lt;td&gt;search&lt;/td&gt;&#xA;&lt;td&gt;/&lt;/td&gt;&#xA;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;prefixc-w-prefixc-g&#34;&gt;prefix+c-w prefix+c-g &lt;a href=&#34;#prefixc-w-prefixc-g&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;open a project&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have set up to make it easy to open my non-work projects &lt;em&gt;(in my ~/git directory)&lt;/em&gt;&#xA;and my work projects &lt;em&gt;(in my ~/work directory)&lt;/em&gt;.  I bound &lt;code&gt;prefix+c-g&lt;/code&gt; and&#xA;&lt;code&gt;prefix+c-w&lt;/code&gt; to open a new session in their respective directories.  I like&#xA;mapping common prefix commands with control to keep my pinky mashed on&#xA;that control key.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.tmux.conf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-w new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;work-session-picker&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/work&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-g new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;git-session-picker&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ta ~/git&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!-- ![create a new session from my ~/git directory](https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-g.gif &#34;using prefix+c-g&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-g.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-g.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;prefixc-j&#34;&gt;prefix+c-j &lt;a href=&#34;#prefixc-j&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;jump to session&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now that I have &lt;code&gt;ta&lt;/code&gt; rocking with a good create or attach setup, I am rarely&#xA;toggling through a list of running sessions, but I am doing it with&#xA;&lt;code&gt;prefix+c-j&lt;/code&gt; when I do it. Keeping my finger on control and pressing &lt;code&gt;&amp;lt;space&amp;gt;+j&lt;/code&gt;.&#xA;This keybinding uses fzf to fuzzy match to an existing session and attach.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-j new-window -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;session-switcher&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;tmux list-sessions | sed -E &amp;#39;s/:.*&lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;//&amp;#39; | grep -v \&amp;#34;^&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;tmux display-message -p &lt;span class=&#34;s1&#34;&gt;&amp;#39;#S&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\$\&amp;#34; | fzf --reverse | xargs tmux switch-client -t&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;!-- ![jump to existing sessions with prefix+c-j](https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.gif &#34;using prefix+c-j&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-prefix+c-j.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;m-n-m-p&#34;&gt;M-N M-P &lt;a href=&#34;#m-n-m-p&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;next/prev&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Next and Previous sessions.  This is super handy when working with under 3&#xA;sessions to be able to cycle through sessions holding &lt;code&gt;shift+alt&lt;/code&gt; and pressing&#xA;&lt;code&gt;n&lt;/code&gt; or &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;!-- ![jump to next or previous sessions with m-N or m-P](https://images.waylonwalker.com/tmux-navigation-2021-m-N-M-P.gif &#34;using m-N and m-P&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-N-M-P.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-N-M-P.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;tkill&#34;&gt;tkill &lt;a href=&#34;#tkill&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;time to clean up&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;It’s easy to get a long crufty list of sessions running throughout the day.&#xA;Typically this is not too bad on system resources compared to running vscode in&#xA;every working project, but it does make it more challenging to manage and wade&#xA;through the sessions list.  I use a handy shell alias that’s been in my zshrc&#xA;for quite some time.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;tkill&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;for s in \$(tmux list-sessions | awk &amp;#39;{print \$1}&amp;#39; | rg &amp;#39;:&amp;#39; -r &amp;#39;&amp;#39; | fzy); do tmux kill-session -t \$s; done;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don’t have this one set up with a nice hotkey, but it works for my&#xA;fingers.  I often pop open a lower split(&lt;code&gt;M-s&lt;/code&gt;), run &lt;code&gt;tkill&lt;/code&gt;, and close (&lt;code&gt;M-x&lt;/code&gt;).&lt;/p&gt;&#xA;&lt;!-- ![create a new session git-diff switch back to original session with prefix+c-g then use tkill to kill the git-diff session](https://images.waylonwalker.com/tmux-navigation-2021-tkill.gif &#34;tkill example&#34;) --&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-tkill.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-tkill.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;last-session&#34;&gt;Last Session &lt;a href=&#34;#last-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;back&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;While &lt;code&gt;M-n&lt;/code&gt; and &lt;code&gt;M-p&lt;/code&gt; work well with a small, focused number of sessions, I often&#xA;end up with too many sessions open, and it’s not efficient to remember a double&#xA;&lt;code&gt;M-N&lt;/code&gt; followed by a triple &lt;code&gt;M-P&lt;/code&gt; to get back and forth.  Most often, I want to&#xA;get between two sessions quickly, no matter what the order is.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-B switch-client -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-b switch-client -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-b.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-b.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Once I get two sessions back to back, I can switch between them with insane&#xA;speed and precision.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;more-precision&#34;&gt;More Precision &lt;a href=&#34;#more-precision&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;one keystroke&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The final layer of precision is for my most current project. I need to get&#xA;to these with a single keystroke.  These are bound to a set of keybindings that were&#xA;readily available, just above the home row.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; C-t new-session -A -s todo &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/work/todo &amp;amp;&amp;amp; nvim -O backlog.md doing.md done.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-i new-session -A -s ww3 &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/git/ww3/ &amp;amp;&amp;amp; nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;bind&lt;/span&gt; -n M-o new-session -A -s images_waylonwalker_com &lt;span class=&#34;s2&#34;&gt;&amp;#34;cd ~/git/images.waylonwalker.com/ &amp;amp;&amp;amp; nvim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-i-m-o.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-m-i-m-o.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;These few directories are always at my fingertips, encouraging me to keep better notes&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;And yes, I did steal this last one from &lt;a href=&#34;https://twitter.com/ThePrimeagen&#34;&gt;Harpoon-man&lt;/a&gt; By The Way.&lt;/p&gt;&#xA;&lt;h2 id=&#34;hub-and-spoke&#34;&gt;Hub and Spoke &lt;a href=&#34;#hub-and-spoke&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;M-i M-b&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I have really been digging this hub and spoke workflow where I am rocking away&#xA;on a project hit &lt;code&gt;M-I&lt;/code&gt;, take some notes then hit &lt;code&gt;M-b&lt;/code&gt; to get back to where I&#xA;was.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/tmux-nav-hub-spoke.png&#34; alt=&#34;hub and spoke&#34;/ data-glightbox=&#34;description: hub and spoke&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Model of my current workflow&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Here is an example of how I use the hub and spoke model to get to notes on my&#xA;blog and back to my project quickly.&lt;/p&gt;&#xA;&lt;video controls=&#34;&#34; muted=&#34;&#34; autoplay=&#34;&#34; playsinline=&#34;&#34; loop=&#34;true&#34; width=&#34;100%&#34;&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-quickly-access-notes.webm&#34; type=&#34;video/webm&#34;/&gt;&#xA;    &lt;source src=&#34;https://images.waylonwalker.com/tmux-navigation-2021-quickly-access-notes.mp4&#34; type=&#34;video/mp4&#34;/&gt;&#xA;    Sorry, your browser doesn&amp;#39;t support embedded videos.&#xA;&lt;/video&gt;&#xA;&lt;div class=&#34;speed-control&#34;&gt;&#xA;    &lt;button onclick=&#34;change_speed(.25)&#34;&gt;&#xA;        speed up&#xA;    &lt;/button&gt;&#xA;    &lt;button onclick=&#34;change_speed(-.25)&#34;&gt;&#xA;        slow down&#xA;    &lt;/button&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;example-workflow&#34;&gt;Example workflow &lt;a href=&#34;#example-workflow&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;open tmux session with ta&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;prefix+c-g&lt;/code&gt; start work in a project using a fuzzy matcher&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-t&lt;/code&gt; over to my todo list&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to my project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-i&lt;/code&gt; to my blog to look up notes/make notes&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to my project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;prefix+c-g&lt;/code&gt; start work in another project using a fuzzy matcher&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-t&lt;/code&gt; over to my todo list&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to my project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;prefix+c-j&lt;/code&gt; fuzzy back to the first project&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;M-b&lt;/code&gt; back to the second project&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Please let me know your thoughts.&#xA;&lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;@waylonwalker&lt;/a&gt;, this one took me a bit&#xA;longer to put together with all of the animated gif’s, but I think it helps&#xA;visually show how I navigate tmux every day.&lt;/p&gt;&#xA;&lt;h2 id=&#34;please-give-it-a-share-if-you-liked-it&#34;&gt;Please give it a share if you liked it &lt;a href=&#34;#please-give-it-a-share-if-you-liked-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you liked it, give it a share and tag me on&#xA;&lt;a href=&#34;https://twitter.com/_WaylonWalker&#34;&gt;twitter&lt;/a&gt;.  I don’t often ask but this&#xA;article took a bit more to put together than my normal post.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;related-links&#34;&gt;Related Links &lt;a href=&#34;#related-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://twitter.com/christoomey&#34;&gt;Chris Toomey’s&lt;/a&gt; Tmux Course&lt;/li&gt;&#xA;&lt;li&gt;my &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/bin/.local/bin/ta&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ta script&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;my &lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/tmux/.tmux.conf&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;.tmux.conf&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Trim unused git branches</title>
    <id>https://go.waylonwalker.com/trim-branches/</id>
    <updated>2021-05-07T09:47:24Z</updated>
    <published>2021-05-07T09:47:24Z</published>
    <link href="https://go.waylonwalker.com/trim-branches/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;h2 id=&#34;trim-branches-no-longer-on-origin&#34;&gt;Trim branches no longer on origin &lt;a href=&#34;#trim-branches-no-longer-on-origin&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote prune origin --dry-run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote prune origin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;find-branches-already-merged&#34;&gt;Find branches already merged &lt;a href=&#34;#find-branches-already-merged&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list remote branches that have already been merged into main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -r --merged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# list local branches that have already been merged into main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --merged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to compare two files in vim</title>
    <id>https://go.waylonwalker.com/vim-diffsplit/</id>
    <updated>2021-05-06T09:43:17Z</updated>
    <published>2021-05-06T09:43:17Z</published>
    <link href="https://go.waylonwalker.com/vim-diffsplit/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vert&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;diffsplit&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;filetwo&lt;/span&gt;.&lt;span class=&#34;nx&#34;&gt;py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;diffthis&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;diffoff&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Gdiff&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;main&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Create a Virtual File Gallery with Symlinks</title>
    <id>https://go.waylonwalker.com/symlink-gallery/</id>
    <updated>2021-05-05T08:23:33Z</updated>
    <published>2021-05-05T08:23:33Z</published>
    <link href="https://go.waylonwalker.com/symlink-gallery/" rel="alternate" type="text/html"></link>
    <summary type="text">Creating a directory that is a union of several directories can be achieved with a few symlinks at the command line.</summary>
    <content type="html">&lt;p&gt;Creating a directory that is a union of several directories can be achieved&#xA;with a few symlinks at the command line.&lt;/p&gt;&#xA;&lt;h2 id=&#34;creating-a-virtual-file-gallery&#34;&gt;Creating a Virtual File Gallery &lt;a href=&#34;#creating-a-virtual-file-gallery&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is how I am creating a virtual directory of all my projects that is a&#xA;combination of both work and not-work projects.  I am creating symlinks for&#xA;every directory under &lt;code&gt;~/work&lt;/code&gt; and &lt;code&gt;~/git&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf ~/work/* ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf ~/git/* ~/projects&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠ Notice that first I am recreating the directory each time. This will ensure&#xA;that any project that is deleted from their actual directory is removed from&#xA;the virtual gallery.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;updating-the-gallery&#34;&gt;Updating the gallery &lt;a href=&#34;#updating-the-gallery&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Since links are always kept up to date without any extra work, all the data is&#xA;still in the same place it started.  But as new directories are added to any&#xA;project directory they will not be automatically added to the virtual gallery.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;cron&lt;/li&gt;&#xA;&lt;li&gt;bashrc/zshrc&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you’re concerned about system resources, you can add it to a cron job to run&#xA;at a regular schedule that makes sense to you.  For me, I just popped those 4&#xA;lines right in my &lt;code&gt;~/.zshrc&lt;/code&gt;.  It’s a bit overkill, maybe bloat, but it runs in&#xA;an impercieveable amount of time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;automatically-cd-to-the-real-directory&#34;&gt;Automatically CD to the real directory &lt;a href=&#34;#automatically-cd-to-the-real-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When you cd into a &lt;code&gt;~/projects/my-proj&lt;/code&gt; directory, your &lt;code&gt;$PWD&lt;/code&gt; will still be&#xA;&lt;code&gt;~/projects/my-proj&lt;/code&gt;.  I did not want this for my use case.  I wanted to follow&#xA;the symlink to the real directory.  I found two options that worked for me.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;alias cd=&amp;#39;cd -P&amp;#39;&#xA;set -o physical&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Add either of these to your &lt;code&gt;.bashrc&lt;/code&gt;/&lt;code&gt;.zshrc&lt;/code&gt; to follow symlinks to the&#xA;actual directory.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📝 Docker Deep Dive - Notes</title>
    <id>https://go.waylonwalker.com/docker-deep-dive/</id>
    <updated>2021-04-23T09:41:29Z</updated>
    <published>2021-04-23T09:41:29Z</published>
    <link href="https://go.waylonwalker.com/docker-deep-dive/" rel="alternate" type="text/html"></link>
    <content type="html">&lt;p&gt;&lt;a href=&#34;https://www.hanselminutes.com/784/doing-open-source-with-brian-douglas&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.hanselminutes.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.hanselminutes.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.hanselminutes.com/784/doing-open-source-with-brian-douglas&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;play-with-docker&#34;&gt;Play With Docker &lt;a href=&#34;#play-with-docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A handy way to try weird things in docker is using&#xA;&lt;a href=&#34;https://play-with-docker.com&#34;&gt;play-with-docker&lt;/a&gt;.  You get a four hour session for&#xA;free, after four hours everything will be deleted, but you can start a new&#xA;session.&lt;/p&gt;&#xA;&lt;h3 id=&#34;installing-docker-on-linux&#34;&gt;Installing Docker on Linux &lt;a href=&#34;#installing-docker-on-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Installing on Ubuntu.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -qO- https://get.docker.com/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;running-docker-commands-without-sudo&#34;&gt;Running Docker commands without sudo &lt;a href=&#34;#running-docker-commands-without-sudo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;In order to run docker commands without using sudo you need to add docker to&#xA;your group.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -aG docker ubuntu&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;architecture-and-theory&#34;&gt;Architecture and Theory &lt;a href=&#34;#architecture-and-theory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Container&lt;/strong&gt; - Isolated area of an OS with resource usage limits applied.&lt;/p&gt;&#xA;&lt;p&gt;Namespaces and Control Groups are hard, which is why containers were unusable&#xA;by mortals before docker.&lt;/p&gt;&#xA;&lt;h2 id=&#34;namespaces&#34;&gt;Namespaces &lt;a href=&#34;#namespaces&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Isolation&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Each container looks and feels like a regular OS. It has its own eth0, users,&#xA;kernel.  These are completely isolated from every other container running on&#xA;the system.&lt;/p&gt;&#xA;&lt;p&gt;Namespaces are analogous to what Hypervisors do on hardware.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Process ID (pid)&lt;/li&gt;&#xA;&lt;li&gt;Network (net)&lt;/li&gt;&#xA;&lt;li&gt;Filesystem/mount (mnt)&lt;/li&gt;&#xA;&lt;li&gt;Inter-proc comms (ipc)&lt;/li&gt;&#xA;&lt;li&gt;UTS (uts)&lt;/li&gt;&#xA;&lt;li&gt;User (usr)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;control-groups&#34;&gt;Control Groups &lt;a href=&#34;#control-groups&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Resource usage limits&lt;/em&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Live Substitution In Neovim</title>
    <id>https://go.waylonwalker.com/neovim-live-substitution/</id>
    <updated>2021-01-04T00:00:00Z</updated>
    <published>2021-01-04T00:00:00Z</published>
    <link href="https://go.waylonwalker.com/neovim-live-substitution/" rel="alternate" type="text/html"></link>
    <summary type="text">Replacing text in vim can be quite frustrating especially since it doesn&#39;t have live feedback to what is changing. Today I was watching Josh Branchaud&#39;s...</summary>
    <content type="html">&lt;p&gt;Replacing text in vim can be quite frustrating especially since it doesn’t have&#xA;live feedback to what is changing. Today I was watching Josh Branchaud’s&#xA;Vim-Unalphabet series on Youtuve and realized that his vim was doing this and I&#xA;had to have it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/_WaylonWalker/status/1346081617199198210&#34;&gt;https://twitter.com/_WaylonWalker/status/1346081617199198210&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;how-to-do-it&#34;&gt;How to do it &lt;a href=&#34;#how-to-do-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I had to do a bit of searching and found a great post from &lt;a href=&#34;https://vimcasts.org/episodes/neovim-eyecandy/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/vimcasts.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/vimcasts.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;vimcasts&lt;/a&gt; that shows exactly how to get the live search and replace highlighting using &lt;code&gt;inccomand&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;h-inccommand&#34;&gt;:h inccommand &lt;a href=&#34;#h-inccommand&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inccommand&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;icm&amp;#39;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nx&#34;&gt;global&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; &amp;#34;nosplit&amp;#34;: Shows the effects of a command incrementally, as you type.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt; &amp;#34;split&amp;#34;  : Also shows partial off-screen results in a preview window.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;Works&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;substitute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;smagic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;:&lt;span class=&#34;nx&#34;&gt;snomagic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;. &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Substitute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;If&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;preview&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;too&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;slow&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;exceeds&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;redrawtime&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;inccommand&amp;#39;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;nx&#34;&gt;automatically&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;disabled&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;until&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;line&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;done&lt;/span&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;add-this-to-your-config&#34;&gt;Add this to your config &lt;a href=&#34;#add-this-to-your-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I believe that this is a neovim only feature, add it into your&#xA;&lt;code&gt;~/.config/nvim/init.vim&lt;/code&gt; file. You can see it in my&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/devtainer/blob/main/nvim/.config/nvim/settings.vim#L155&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dotfiles&lt;/a&gt;&#xA;as well.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;inccommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nosplit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;see-it-in-action&#34;&gt;See it in Action &lt;a href=&#34;#see-it-in-action&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://images.waylonwalker.com/nvim-live-substitute-inccommand.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/nvim-live-substitute-inccommand.gif&#34; alt=&#34;example live&#xA;substitution&#34;/ data-glightbox=&#34;description: example live&#xA;substitution&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-video-that-inspired-this&#34;&gt;The Video that inspired this &lt;a href=&#34;#the-video-that-inspired-this&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out Josh Branchaud’s great series on the Vim-Unalphabet.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=5jMiYtXz2QA&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.youtube.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.youtube.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://www.youtube.com/watch?v=5jMiYtXz2QA&lt;/a&gt;&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Newsboat</title>
    <id>https://go.waylonwalker.com/newsboat/</id>
    <updated>2021-01-02T00:00:00Z</updated>
    <published>2021-01-02T00:00:00Z</published>
    <link href="https://go.waylonwalker.com/newsboat/" rel="alternate" type="text/html"></link>
    <summary type="text">Web browsers are a black hole of productivity. I try to use them as little as possible when it is time to focus. I try to use , , or with ipython, or --help...</summary>
    <content type="html">&lt;p&gt;Web browsers are a black hole of productivity.  I try to use them as little as&#xA;possible when it is time to focus.  I try to use &lt;code&gt;help&lt;/code&gt;, &lt;code&gt;?&lt;/code&gt;, or &lt;code&gt;??&lt;/code&gt; with&#xA;ipython, or –help at the command line as much as possible.  What about that&#xA;time I am trying to see what my online friends are posting on their sites?  I&#xA;used to used google reader quite heavily before that was taken down.&lt;/p&gt;&#xA;&lt;h2 id=&#34;newsboat&#34;&gt;Newsboat &lt;a href=&#34;#newsboat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am going to give a terminal rss reader a try for a bit and see how that goes&#xA;for me.  I have really struggled to get into an rss reader since google reader&#xA;died.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;installation &lt;a href=&#34;#installation&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I installed with the reccomended snap for Ubuntu.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snap install newsboat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;adding-feeds&#34;&gt;Adding feeds &lt;a href=&#34;#adding-feeds&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;super simple&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Running help for newsboat directed me towards their config files at the bottom.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ newsboat --help&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;newsboat r2.22&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usage: /snap/newsboat/3849/usr/local/bin/newsboat &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-i &amp;lt;file&amp;gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;-e&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-u &amp;lt;urlfile&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-c &amp;lt;cachefile&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-x &amp;lt;command&amp;gt; ...&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-h&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -e, --export-to-opml        &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; OPML feed to stdout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -r, --refresh-on-start      refresh feeds on start&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -i, --import-from-opml&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;file&amp;gt;   import OPML file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -u, --url-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;urlfile&amp;gt;    &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; RSS feed URLs from &amp;lt;urlfile&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -c, --cache-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;cachefile&amp;gt;    use &amp;lt;cachefile&amp;gt; as cache file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -C, --config-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;configfile&amp;gt;  &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; configuration from &amp;lt;configfile&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -X, --vacuum            compact the cache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -x, --execute&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;command&amp;gt;...  execute list of commands&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -q, --quiet         quiet startup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -v, --version           get version information&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -l, --log-level&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;loglevel&amp;gt;  write a log with a certain loglevel &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;valid values: &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; to 6&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -d, --log-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;logfile&amp;gt;    use &amp;lt;logfile&amp;gt; as output log file&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -E, --export-to-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;file&amp;gt; &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; list of &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; articles to &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -I, --import-from-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;file&amp;gt;   import list of &lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; articles from &amp;lt;file&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -h, --help          this &lt;span class=&#34;nb&#34;&gt;help&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --cleanup           remove unreferenced items from cache&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Files:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - configuration:  /home/nic/snap/newsboat/3849/.newsboat/config&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - feed URLs:      /home/nic/snap/newsboat/3849/.newsboat/urls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - cache:          /home/nic/snap/newsboat/3849/.newsboat/cache.db&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Support at &lt;span class=&#34;c1&#34;&gt;#newsboat at https://freenode.net or on our mailing list https://groups.google.com/g/newsboat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;For more information, check out https://newsboat.org/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I just need to edit its urls file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvim ~/snap/newsboat/3849/.newsboat/urls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The Urls file is just a list of urls to rss feeds.  Adding mine in allowed me to see all of my posts.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://waylonwalker.com/rss.xml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;config&#34;&gt;Config &lt;a href=&#34;#config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I took most of my config from a &lt;a href=&#34;https://evantravers.com/articles/2020/04/15/reworking-my-rss-reading/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/evantravers.com.svg&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/evantravers.com.svg&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;blog&#xA;post&lt;/a&gt;&#xA;that I found by Evan Travers.  It set some sane defaults to the reading width&#xA;and vim keys.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://evantravers.com/articles/2020/04/15/reworking-my-rss-reading/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Hide feeds where all the items are read.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;show-read-feeds no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Make the text width readable&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;text-width &lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use multiple threads to download all the news faster.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;reload-threads &lt;span class=&#34;m&#34;&gt;11&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# browser ~/bin/newsboat-browser.sh&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# browser &amp;#34;/usr/bin/brave-browser %u&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# unbind keys&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key ENTER&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key J&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key K&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key ^D&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key ^U&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key o&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key g&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unbind-key G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bind keys - vim style&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key j down&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key k up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key l open&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key h quit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key ^D pagedown&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key ^U pageup&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key b toggle-source-view&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key U toggle-show-read-feeds&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key u show-urls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key g home&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key G end&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key b open-in-browser-and-mark-read&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key B open-in-browser&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key i sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bind-key I rev-sort&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;gui-browser&#34;&gt;GUI Browser &lt;a href=&#34;#gui-browser&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;No matter how many different guides I tried I keedp getting &lt;code&gt;error code 127&lt;/code&gt;&#xA;when trying to &lt;code&gt;open-in-browser&lt;/code&gt;.  Please let me know if you know how to fix&#xA;this. For now I am just going to roll with it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;heres-how-it-looks&#34;&gt;Here’s how it looks &lt;a href=&#34;#heres-how-it-looks&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/newsboat-feed-waylonwalker-com.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/newsboat-feed-waylonwalker-com.png&#34; alt=&#34;newsboat feed&#34;/ data-glightbox=&#34;description: newsboat feed&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;browsing a feed in newsboat&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/newsboat-article.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/newsboat-article.png&#34; alt=&#34;newsboat article&#34;/ data-glightbox=&#34;description: newsboat article&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;reading an article in newsboat&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Find and Replace in the Terminal.</title>
    <id>https://go.waylonwalker.com/find-replace/</id>
    <updated>2020-11-12T05:00:00Z</updated>
    <published>2020-11-12T05:00:00Z</published>
    <link href="https://go.waylonwalker.com/find-replace/" rel="alternate" type="text/html"></link>
    <summary type="text">notes about find and replace techniques</summary>
    <content type="html">&lt;h2 id=&#34;grepr&#34;&gt;grepr &lt;a href=&#34;#grepr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sb&#34;&gt;```&lt;/span&gt;bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;grepd&#34;&gt;grepd &lt;a href=&#34;#grepd&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;grepd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;grep&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;iRl&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;$1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xargs&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/^$1/d&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cocsearch&#34;&gt;CocSearch &lt;a href=&#34;#cocsearch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:CocSearch published: &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt; -g *.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Creating Reusable Bash Scripts</title>
    <id>https://go.waylonwalker.com/reusable-bash/</id>
    <updated>2020-08-13T05:00:00Z</updated>
    <published>2020-08-13T05:00:00Z</published>
    <link href="https://go.waylonwalker.com/reusable-bash/" rel="alternate" type="text/html"></link>
    <summary type="text">Bash is a language that is quite useful for automation no matter what language you write in. Bash can do so many powerful system-level tasks. Even if you are...</summary>
    <content type="html">&lt;p&gt;Bash is a language that is quite useful for automation no matter what language&#xA;you write in. Bash can do so many powerful system-level tasks. Even if you are&#xA;on windows these days you are likely to come across bash inside a cloud VM,&#xA;Continuous Integration, or even inside of docker.&lt;/p&gt;&#xA;&lt;p&gt;I have three techniques that help me write more composable bash scripts.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#functions&#34;&gt;functions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#arguments&#34;&gt;Arguments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#positional-arguments&#34;&gt;positional arguments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#all-arguments&#34;&gt;All Arguments&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#error-handling&#34;&gt;Error Handling&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#main-script&#34;&gt;main script&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;functions&#34;&gt;Functions &lt;a href=&#34;#functions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Break scripts down into reusable components&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Functions in bash are quite simple. They are something that I wish I would have&#xA;started using long ago. They make your code much more reusable. I often use&#xA;them in my aliases as well since they can simplify the process and allow more&#xA;flexibility.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hello_world&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello_world &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Source the file to load the function and run it from the terminal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello_world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello_world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello world&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;arguments&#34;&gt;Arguments &lt;a href=&#34;#arguments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Make functions a little more flexible&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Arguments and options are quite a bit more complex in bash. For now, we will&#xA;focus on the basics which are not all that bad.&lt;/p&gt;&#xA;&lt;h3 id=&#34;positional-arguments&#34;&gt;positional arguments &lt;a href=&#34;#positional-arguments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;em&gt;easiest and most common to use&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Positional arguments can be pulled out quite easily using &lt;code&gt;$1&lt;/code&gt; for the first&#xA;one, &lt;code&gt;$2&lt;/code&gt; for the second, and so on.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; &lt;code&gt;$0&lt;/code&gt; is the command that was called. You will see this often used to&#xA;find the command called to open up your current shell.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hello&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now we have a function that accepts positional arguments and we can call it by&#xA;passing things into it.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;More than one argument would be ignored since we are only looking at &lt;code&gt;$1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just the same as before since we do not use the second argument.&lt;/p&gt;&#xA;&lt;h3 id=&#34;all-arguments&#34;&gt;All Arguments &lt;a href=&#34;#all-arguments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Bash has another special variable &lt;code&gt;$@&lt;/code&gt; that stores &lt;strong&gt;all arguments&lt;/strong&gt; in one.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;# hello&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Just the same as before.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;run it&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; hello&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now the function will output all arguments that are passed into it since we are using the &lt;code&gt;$@&lt;/code&gt; variable.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;outputs&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hello Waylon Walker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;error-handling&#34;&gt;Error Handling &lt;a href=&#34;#error-handling&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Super powers in a single line&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;The easiest and most common way to handle an error in bash is through the use&#xA;of the logical operators &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; (and) and &lt;code&gt;||&lt;/code&gt; (or).&lt;/p&gt;&#xA;&lt;p&gt;Here I have a concrete example from earlier today. I was creating a bash script&#xA;to run a python script from cron. The bash script is there to make sure that we&#xA;have the python environment, activate it, and run. If it doesn’t have it, it&#xA;should create it.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# creates the conda environment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_env&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    conda create -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    conda activate &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    pip install -r requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# checks if the conda environment exists&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;env_exists&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +3 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -w &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; /dev/null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# creates the conda environment if it doesn&amp;#39;t exist&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_if &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;env_exists &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;environment exists&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; create_env &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_if my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If we look at the &lt;code&gt;create_if&lt;/code&gt; function, it will check if the environment exists&#xA;if there is a passing status code &lt;code&gt;0&lt;/code&gt;, then it will run &lt;code&gt;echo &amp;#34;environment exists&amp;#34;&lt;/code&gt; otherwise it will run &lt;code&gt;create_env $1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;note&lt;/strong&gt; Inside of &lt;code&gt;env_exists&lt;/code&gt; grep will look for whole words if there is a&#xA;match it will give a status code 0 if it finds a match and not 0 if there is no&#xA;match.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;main-script&#34;&gt;main script &lt;a href=&#34;#main-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;_&lt;code&gt;if __name__ == &amp;#34; __main__&amp;#34;&lt;/code&gt;_&lt;/p&gt;&#xA;&lt;p&gt;The last thing I want to discuss is making a bash script both runnable and&#xA;sourceable. This makes it so that you can &lt;code&gt;source filename.sh&lt;/code&gt; and run each&#xA;function individually, or &lt;code&gt;bash filename.sh&lt;/code&gt; to run the script. This is a&#xA;similar concept to &lt;code&gt;if __name__ == &amp;#34; __main__&amp;#34;&lt;/code&gt; from python.&lt;/p&gt;&#xA;&lt;p&gt;I did try this from bash and zsh with success. The following is an example that&#xA;would pass all arguments into a main function.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BASH_SOURCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[0]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    main &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Extending the example above that created a python example if necessary we can&#xA;create the env if necessary, activate the environment, and run the script.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;syntax&lt;/mark&gt;&lt;/small&gt;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;BASH_SOURCE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[0]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;create_if my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python script.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Using this syntax to run our “main” functions will allow us to both runs the&#xA;script or source the script to utilize the functions that we created.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>New Machine for developing Tests with TestProject.io</title>
    <id>https://go.waylonwalker.com/new-machine-tpio/</id>
    <updated>2020-07-25T05:00:00Z</updated>
    <published>2020-07-25T05:00:00Z</published>
    <link href="https://go.waylonwalker.com/new-machine-tpio/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I setup a new machine on Digital Ocean to use with TestProject.io, Here are my installation notes.</summary>
    <content type="html">&lt;p&gt;Today I setup a new machine on Digital Ocean to use with TestProject.io,  Here are my installation notes.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chsh zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://starship.rs/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(starship init zsh)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# python&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install python3-pip -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;alias python=python3&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;alias pip=pip3&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pipx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install python3-venv&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install pipx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install black&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install shell-functools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install ipython&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# docker&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo apt-key add -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [arch=amd64] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; stable&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install docker-ce&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# docker-compose&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo curl -L &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/docker/compose/releases/download/1.25.5/docker-compose-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -s&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;uname -m&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; -o /usr/local/bin/docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/local/bin/docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# configure git&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.name &lt;span class=&#34;s2&#34;&gt;&amp;#34;Waylon Walker&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.email waylon@waylonwalker.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# fzf&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone --depth &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; https://github.com/junegunn/fzf.git ~/.fzf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/.fzf/install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# forgit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/wfxr/forgit ~/.forgit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;. ~/.forgit/forgit.plugin.zsh&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ag&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install silversearcher-ag&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alias cat=batcat&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# testproject.io tokens&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;export TP_AGENT_ALIAS=&amp;#34;Digital Ocean Agent&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;echo &amp;#34;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TP_AGENT_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;your-key&amp;gt; &amp;gt;&amp;gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;echo &amp;#34;&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TP_DEV_TOKEN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;your-token&amp;gt; &amp;gt;&amp;gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;envsubst &amp;lt; .github/ci/docker-compose.yml &amp;gt; docker-compose.yml&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# .github/ci/docker-compose.yml&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;services&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;testproject-agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;testproject/agent:latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;container_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;testproject-agent&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;depends_on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;chrome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;firefox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;environment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_API_KEY&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;${TP_API_KEY}&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_AGENT_ALIAS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;GitHub Action Agent&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_AGENT_TEMP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;TP_SDK_PORT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;8686&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CHROME&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;chrome:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;CHROME_EXT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost:5555&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FIREFOX&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;firefox:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;FIREFOX_EXT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost:6666&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8585:8585&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;8686:8686&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;chrome&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;selenium/standalone-chrome&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/dev/shm:/dev/shm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;5555:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;firefox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;selenium/standalone-firefox&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;volumes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;      &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/dev/shm:/dev/shm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;- &lt;span class=&#34;s2&#34;&gt;&amp;#34;6666:4444&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose -f docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Out of Space</title>
    <id>https://go.waylonwalker.com/out-of-space/</id>
    <updated>2020-02-01T06:00:00Z</updated>
    <published>2020-02-01T06:00:00Z</published>
    <link href="https://go.waylonwalker.com/out-of-space/" rel="alternate" type="text/html"></link>
    <summary type="text">Out of Space! How to remove 65 conda environments in one command.</summary>
    <content type="html">&lt;p&gt;This morning I logged into my machine and was nearly out of space&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;64GB miniconda3!&lt;/li&gt;&#xA;&lt;li&gt;5GB conda cache&lt;/li&gt;&#xA;&lt;li&gt;4GM pip cache&lt;/li&gt;&#xA;&lt;li&gt;34GB docker&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;find-it&#34;&gt;Find it &lt;a href=&#34;#find-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1214e7fb-6806-44cf-8712-c98685fb2e1d.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/1214e7fb-6806-44cf-8712-c98685fb2e1d.png&#34; alt=&#34;screenshot-2025-02-12T22-32-14-298Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-12T22-32-14-298Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;These are the commands that I often use to reclaim space.  Its so easy to fill&#xA;up small vm’s in the cloud, or in my case today let your dev machine go way too&#xA;long without a good cleanup.&lt;/p&gt;&#xA;&lt;h3 id=&#34;show-remaining-space-on-drives&#34;&gt;Show Remaining Space on Drives &lt;a href=&#34;#show-remaining-space-on-drives&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;This shows us where to start and gives a baseline of how much space we have&#xA;reclaimed.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;show-largest-files-in-current-directory&#34;&gt;show largest files in current directory &lt;a href=&#34;#show-largest-files-in-current-directory&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Next keep drilling into directories that are big and running this command to&#xA;see whats big inside of it.  When you find somethign that you are willing to&#xA;part with &lt;code&gt;rm -rf &amp;lt;directory&amp;gt;&lt;/code&gt; it and check &lt;code&gt;df -h&lt;/code&gt; to see if you have enough&#xA;reclaimed yet.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;du . -h --max-depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Honestly I rarely bother unless the directory is in the GB’s of space.  A super&#xA;simple filter for that is to just grep for G.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;du . -h --max-depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep G&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;conda&#34;&gt;conda &lt;a href=&#34;#conda&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;how-many&#34;&gt;How Many? &lt;a href=&#34;#how-many&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;As a first baseline lets see how many enviroments we are starting with. I&#xA;started with 71. Yeah I have had this machine for 2 years, and dont regularly&#xA;remove them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;bash&lt;/p&gt;&#xA;&lt;h3 id=&#34;lets-batch-it-out&#34;&gt;Lets batch it out &lt;a href=&#34;#lets-batch-it-out&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;We are devs here surely we can automate this issue! The following four lines&#xA;will generate a list of existing conda environments, edit them with vim, remove&#xA;the remaining ones, then remove the text file we created to remove from.&lt;/p&gt;&#xA;&lt;p&gt;Make sure that you only keep names of environments that you want to &lt;strong&gt;remove&lt;/strong&gt;&#xA;in &lt;code&gt;conda_envs_to_remove.txt&lt;/code&gt; and delete the environment names you want to&#xA;keep.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -d &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; -f1 &amp;gt; conda_envs_to_remove.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim conda_envs_to_remove.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat ~/.conda_envs_remove &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr &lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -l -0 conda remove --all -y -n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm conda_envs_to_remove.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-side-note&#34;&gt;📝 Side note &lt;a href=&#34;#-side-note&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When I am creating one of these complicated bash pipelines including xargs I&#xA;generally print out the command first and make sure that it does what I want.&#xA;The following command will test the above script before doing dangerous things!&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat ~/.conda_envs_remove &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tr &lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -l -0 &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;conda remove --all -y -n &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cache&#34;&gt;Cache &lt;a href=&#34;#cache&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If your feeling really strained for space, you can &lt;code&gt;rm -rf ~/.cache&lt;/code&gt;.&#xA;Personally I like the improved speed of installing everything… obviously I&#xA;install a lot of new environments.&lt;/p&gt;&#xA;&lt;h2 id=&#34;docker&#34;&gt;Docker &lt;a href=&#34;#docker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/1c81ce90-4f54-4267-8bb4-88e708131803.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/api/file/1c81ce90-4f54-4267-8bb4-88e708131803.png&#34; alt=&#34;screenshot-2025-02-12T22-35-00-679Z.png&#34; class=&#34;more-cinematic glightbox&#34;/ data-glightbox=&#34;description: screenshot-2025-02-12T22-35-00-679Z.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;For more information read this article,&#xA;&lt;a href=&#34;https://docs.docker.com/config/pruning/&#34; title=&#34;https://docs.docker.com/config/pruning/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.docker.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.docker.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://docs.docker.com/config/pruning/&lt;/a&gt;. I have all of the images that I&#xA;want pushed remotely so I just dumped everything with the following command.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker system prune&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker system prune --volumes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Running these two sets of commands cleared up about &lt;strong&gt;70GB&lt;/strong&gt; of space for me&#xA;with very little effort on my behalf. I hope others find the first command&#xA;helpful to batch remove many conda environments at once.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Supercharge Zsh Startup</title>
    <id>https://go.waylonwalker.com/supercharge-zsh-startup/</id>
    <updated>2020-01-03T06:00:00Z</updated>
    <published>2020-01-03T06:00:00Z</published>
    <link href="https://go.waylonwalker.com/supercharge-zsh-startup/" rel="alternate" type="text/html"></link>
    <summary type="text">I have been using oh-my-zsh successfully for about 2 years now. But lately my startup time has been really bothersome. It has grown to the point where it was...</summary>
    <content type="html">&lt;p&gt;I have been using oh-my-zsh successfully for about 2 years now. But lately my&#xA;startup time has been really bothersome. It has grown to the point where it was&#xA;taking about &lt;strong&gt;5.5s&lt;/strong&gt; to startup a shell!  This is ok if I am going to spend&#xA;some time in here for awhile and do some work that benefits from all of the&#xA;autocompletions, plugins, and shortcuts that oh-my-zsh brings.  But to only&#xA;jump in to run a handful of commands is infuriating.&lt;/p&gt;&#xA;&lt;h3 id=&#34;-my-setup&#34;&gt;📑 My Setup &lt;a href=&#34;#-my-setup&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I believe the real issue is io speed on wsl.  I have some remote servers with&#xA;similar configs that are 10x faster or more, loading in 100s of milliseconds&#xA;rather than seconds.  Sourcing all of the individual plugin files are just too&#xA;much for it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-how-fast-can-it-be&#34;&gt;💨 How Fast can it be &lt;a href=&#34;#-how-fast-can-it-be&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Quick side note: your zsh config is controled by your ~/.zshrc file.  This&#xA;file can source other files, load plugins, or run literally anything.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Time the &lt;strong&gt;initial&lt;/strong&gt; time&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; zsh -c &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Move your &lt;strong&gt;~/.zshrc&lt;/strong&gt; config file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.zshrc ~/.zshrc-back&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Time the fastest startup possible with nothing in your &lt;strong&gt;~/.zshrc&lt;/strong&gt; config file.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;time&lt;/span&gt; zsh -c &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Move your &lt;strong&gt;~/.zshrc&lt;/strong&gt; back&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.zshrc-back ~/.zshrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;profile-your-startup-time&#34;&gt;🕵️‍♂️Profile your startup time &lt;a href=&#34;#profile-your-startup-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;It is possible to profile your zsh startup time by adding &lt;code&gt;zmodload zsh/zprof&lt;/code&gt;&#xA;to the start of your &lt;code&gt;~/.zshrc&lt;/code&gt; file and &lt;code&gt;zprof&lt;/code&gt; at the end.  This was&#xA;unsuccessfull for me.  I ended up just backing up &lt;code&gt;~/.zshrc&lt;/code&gt; file, then&#xA;deleting half of it to see where the hot spots were.  I found that two places&#xA;that were really hot for me.  One I was inadvertantly setting &lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; and npm&#xA;settings everytime that didn’t need to be set everytime.  That was an easy 2s&#xA;gain.  Another easy 3s gain was removing oh-my-zsh.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.zshrc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zmodload zsh/zprof&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zprof&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;but-i-really-like-oh-my-zsh&#34;&gt;😭But I really like oh-my-zsh &lt;a href=&#34;#but-i-really-like-oh-my-zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;without all the bells and whistle that oh-my-zsh provided zsh became lightning fast to load, but incredibly boring.  It was also very painful to manually type out everything that it autocompleted or aliased all the time.  Next I headed down a path to get all of that functionality back without sacrificing load time.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Without oh-my-zsh, zsh became incredibly boring.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;-plugin-managers&#34;&gt;🔌 Plugin Managers &lt;a href=&#34;#-plugin-managers&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/steve-johnson-ZUabNmumOcA-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/steve-johnson-ZUabNmumOcA-unsplash.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Photo by &lt;a href=&#34;https://unsplash.com/@steve_j?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unsplash.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unsplash.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Steve Johnson&lt;/a&gt; on &lt;a href=&#34;https://unsplash.com/s/photos/plug?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unsplash.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unsplash.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;oh-my-zsh&lt;/li&gt;&#xA;&lt;li&gt;zplugin&lt;/li&gt;&#xA;&lt;li&gt;zgen&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;There are a number of plugin managers for zsh, I tried each of the ones listed above, but found that as I approached a nice setup that I liked the load time would creep up &lt;strong&gt;above the 2s&lt;/strong&gt; &lt;strong&gt;mark&lt;/strong&gt; each time. I would turn certain plugins on and off, try different plugin managers, before realizing that I had spent enough time on this problem and it was going to be time to settle on fast startup or functionality.&lt;/p&gt;&#xA;&lt;h2 id=&#34;-finding-balance&#34;&gt;⚖ Finding Balance &lt;a href=&#34;#-finding-balance&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Semi-lazy loading&lt;/em&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://images.waylonwalker.com/jeppe-hove-jensen-b3eaH1hguOA-unsplash.jpg&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://images.waylonwalker.com/jeppe-hove-jensen-b3eaH1hguOA-unsplash.jpg&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Photo by Jeppe Hove Jensen on &lt;a href=&#34;https://unsplash.com/s/photos/balance?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/unsplash.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/unsplash.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;After struggling to get all of the features I wanted with a fast load time, I decided to only load what I needed upon startup.  Next I created a simple alias that loads in zgen and all of the plugins I want. By doing this I get two main benefits.  Obviously I get a faster starup time by loading less.  I got my startup time down to about 0.25s.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.zshrc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;p &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zgen load zsh-users/zsh-autosuggestions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;....&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;..&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;-fast-loading&#34;&gt;⚡ Fast Loading &lt;a href=&#34;#-fast-loading&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I really like the fast startup time, because sometimes I am only loading up zsh to run a handful of commands that dont need much in the way of plugins&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;simple commands that need 💨 blazing start speed&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;any single easy to type command, these are my common commands that I will open a terminal in my editor and just need to run quick.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;vim&lt;/li&gt;&#xA;&lt;li&gt;git add . &amp;amp;&amp;amp; git commit &amp;amp;&amp;amp; git push&lt;/li&gt;&#xA;&lt;li&gt;sh my_script.sh&lt;/li&gt;&#xA;&lt;li&gt;make build&lt;/li&gt;&#xA;&lt;li&gt;bake build&lt;/li&gt;&#xA;&lt;li&gt;pytest&lt;/li&gt;&#xA;&lt;li&gt;gatsby develop&lt;/li&gt;&#xA;&lt;li&gt;npm i&lt;/li&gt;&#xA;&lt;li&gt;npm update&lt;/li&gt;&#xA;&lt;li&gt;pip install&lt;/li&gt;&#xA;&lt;li&gt;ipython&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The second benefit was that I can continue typing while plugins are loading.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://waylonwalker.com/type-while-loading-plugins.gif&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://waylonwalker.com/type-while-loading-plugins.gif&#34; alt=&#34;&#34;/ data-glightbox=&#34;description: &#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;prompt&#34;&gt;&amp;gt;Prompt &lt;a href=&#34;#prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;After removing oh-my-zsh the first thing that I missed was the themes that it provided.  I went through a number of them and the one that seemed to have the smallest effect on performance and everything I needed was &lt;a href=&#34;https://starship.rs/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/starship.rs.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/starship.rs.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;starship&lt;/a&gt;.  It’s a really fast prompt written in rust.  The biggest thing that I needed to have that other prompts were misssing was conda environments.  I live much of my work life running python from various conda environments and it is crutial that I can see what environment I am in at all times.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/08d01b82-df3d-4695-bad1-39acd8961707.png&#34; class=&#34;glightbox-link&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/08d01b82-df3d-4695-bad1-39acd8961707.png&#34; alt=&#34;2020-01-04 12-36-31_Cortana.png&#34;/ data-glightbox=&#34;description: 2020-01-04 12-36-31_Cortana.png&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;-bonus&#34;&gt;💰 Bonus &lt;a href=&#34;#-bonus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I applied the same logic to neovim and achieved similar results.  Again it just had too many plugins loading on startup for simple tasks.  I ended up taking a shortcut and load any heavy plugins upon NerdTreeToggle.  I dont really use NERDTree that much, but when I do its for more than just a quick edit.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ~/.config/nvim/init.vim&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Plug &lt;span class=&#34;s1&#34;&gt;&amp;#39;valloric/youcompleteme&amp;#39;&lt;/span&gt;, &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;do&amp;#39;&lt;/span&gt;: &lt;span class=&#34;s1&#34;&gt;&amp;#39;./install.py&amp;#39;&lt;/span&gt;, &lt;span class=&#34;s1&#34;&gt;&amp;#39;on&amp;#39;&lt;/span&gt;: &lt;span class=&#34;s1&#34;&gt;&amp;#39;NERDTreeToggle&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>📝 Bash Notes</title>
    <id>https://go.waylonwalker.com/bash/</id>
    <updated>2019-09-08T05:00:00Z</updated>
    <published>2019-09-08T05:00:00Z</published>
    <link href="https://go.waylonwalker.com/bash/" rel="alternate" type="text/html"></link>
    <summary type="text">Waylon Walker&#39;s Bash Notes</summary>
    <content type="html">&lt;p&gt;Bash is super powerful.&lt;/p&gt;&#xA;&lt;h2 id=&#34;file-system-full&#34;&gt;File System Full &lt;a href=&#34;#file-system-full&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Show Remaining Space on Drives&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;show largest files in current directory&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;du . -h --max-depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Move files then symlink them&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /mnt/mounted_drive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/bigdir /mnt/mounted_drive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /mnt/mounted_drive/bigdir ~/bigdir&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fuzzy-one-liners&#34;&gt;Fuzzy One Liners &lt;a href=&#34;#fuzzy-one-liners&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;err&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;print $&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;edit in vim&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vf&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -r -I % &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; % &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;cat a file&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vf&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -r -I % &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; % &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;bash execute&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bf&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; bash &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;fzf&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;/glossary/git/&#34; class=&#34;glossary-term&#34; title=&#34;Git is a version control system for tracking changes in source code during software development. In the beginning there were many, some were licensed. As...&#34;&gt;git&lt;/a&gt; add&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gadd&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; git status -s &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs git add &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git status -s&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;git reset&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;greset&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; git status -s &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;  fzf -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;xargs git reset &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; git status -s&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Kill a process&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fkill&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print($2)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;finding-things&#34;&gt;Finding things &lt;a href=&#34;#finding-things&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;files&#34;&gt;Files &lt;a href=&#34;#files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/sharkdp/fd&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;fd-find&lt;/a&gt; is amazing for finding files, it even respects your &lt;code&gt;.gitignore&lt;/code&gt; file 😲.  Install with &lt;code&gt;apt install fd-find&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag -g python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;content&#34;&gt;Content &lt;a href=&#34;#content&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;** show matching text **&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -iR Python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;** show file names only **&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ag -l python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -iRl python&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;recursively-replace-text&#34;&gt;Recursively Replace text &lt;a href=&#34;#recursively-replace-text&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;agr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;ag -l &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Extending&lt;/strong&gt; &lt;code&gt;**agr**&lt;/code&gt; &lt;strong&gt;or&lt;/strong&gt; &lt;code&gt;**grepr**&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;There are so many options inside of &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;ag&lt;/code&gt;, and &lt;code&gt;sed&lt;/code&gt; that you could many an enormous amount of these if you really wanted to, but I like to keep it simple.  These cover 90% of my usage.  If I wanted to change something in the second half I would just paste in this command and edit it. More often though I want to limit the input, say only replace word1 to word2 inside of markdown files.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Limited Scope&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd md &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs argr python python3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find . -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;*.md&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs grepr python python3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;/refactor-in-cli/&#34; class=&#34;wikilink&#34; data-title=&#34;Large Refactor At The Command Line&#34; data-description=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34; data-date=&#34;2020-12-30&#34; data-preview=&#34;As projects grow patterns that worked early on break and we need to change things to make the project easier to work with, and more welcoming to new developers.&#34;&gt;Large Refactor At The Command Line&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;I use these replace commands heavily when doing large refactorings.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;conditionally-configure&#34;&gt;conditionally configure &lt;a href=&#34;#conditionally-configure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I like this one when there is not a good cli into config files and I need to replace something like a true to false if the value is in the config and append to the config if its not.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grepr&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# replaces first string with second string inside file from third argument&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# example:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   grepr &amp;#34;allow_conda_downgrades:.*&amp;#34; &amp;#34;allow_conda_downgrades: true&amp;#34; ~/.condarc&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; grep -xq &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;|g&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$2&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; &lt;span class=&#34;nv&#34;&gt;$3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;watch-the-time&#34;&gt;Watch the time &lt;a href=&#34;#watch-the-time&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;watch -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; date&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;em&gt;++Vanilla Bonus&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;with figlet&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;watch -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;date | figlet&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;watch-a-function&#34;&gt;watch a function &lt;a href=&#34;#watch-a-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;run &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aws s3 sync &lt;span class=&#34;nv&#34;&gt;$BUCKET&lt;/span&gt; .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; -f run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;watch -n &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; run&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;if-conda-environment-does-not-exist-create-it&#34;&gt;if conda environment does not exist create it &lt;a href=&#34;#if-conda-environment-does-not-exist-create-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep my_env &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;my_env environment is installed&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; conda create -n my_env &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.8 -y&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; activate my_env&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h1 id=&#34;rename-multiple-files&#34;&gt;Rename multiple files&lt;/h1&gt;&#xA;&lt;p&gt;more info from &lt;a href=&#34;https://linuxize.com/post/how-to-rename-files-in-linux/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/linuxize.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/linuxize.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;linuxize&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.png&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   mv &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; prefix-&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;using-the-rename-command&#34;&gt;using the rename command &lt;a href=&#34;#using-the-rename-command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install rename&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rename &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/.GIF/.gif/&amp;#34;&lt;/span&gt; *.GIF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;convert-all-files-in-a-directory-to-unix&#34;&gt;convert all files in a directory to unix &lt;a href=&#34;#convert-all-files-in-a-directory-to-unix&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dos2unix **/*&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;recursively-remove-all-whitespace-from-py-files&#34;&gt;recursively remove all whitespace from .py files &lt;a href=&#34;#recursively-remove-all-whitespace-from-py-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find **/*.py -type f -exec sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/ *$//&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;recursively-autopep8&#34;&gt;recursively autopep8 &lt;a href=&#34;#recursively-autopep8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.py&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autopep8&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;place&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt; \&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-bash-script-a-runnable-command&#34;&gt;make bash script a runnable command &lt;a href=&#34;#make-bash-script-a-runnable-command&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;include a shebang&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#! /bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;chmod&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /usr/local/bin/my_script&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;accept positional input&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#! /bin/bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; input&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;using-pyp&#34;&gt;Using pyp &lt;a href=&#34;#using-pyp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install pyp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;replacement-for-cut&#34;&gt;replacement for cut &lt;a href=&#34;#replacement-for-cut&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ python -m http.server &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;8574&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;✦ ❯ Serving HTTP on 0.0.0.0 port &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;http://0.0.0.0:5000/&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;✦ ❯ ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;python -m http.server&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v grep &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pyp &lt;span class=&#34;s1&#34;&gt;&amp;#39;line.split()[1]&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  + terminated  python -m http.server &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;replacement-for-wc&#34;&gt;replacement for wc &lt;a href=&#34;#replacement-for-wc&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda info --envs &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pyp &lt;span class=&#34;s1&#34;&gt;&amp;#39;len(lines) - 3 # account for header and base&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;print-contents-of-shell-function&#34;&gt;print contents of shell function &lt;a href=&#34;#print-contents-of-shell-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;declare&lt;/span&gt; -f &amp;lt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;-name&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;batch-rename-files&#34;&gt;batch rename files &lt;a href=&#34;#batch-rename-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; f in *.jpeg&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mv -- &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;%.jpeg&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.jpg&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;convert-markdown-files-to-revealjs&#34;&gt;convert markdown files to reveal.js &lt;a href=&#34;#convert-markdown-files-to-revealjs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/jgm/pandoc/wiki/Using-pandoc-to-produce-reveal.js-slides&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/jgm/pandoc/wiki/Using-pandoc-to-produce-reveal.js-slides&lt;/a&gt;{.hoverlink}&#xA;install pandoc&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install pandoc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;setup&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/hakimel/reveal.js/archive/master.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzvf master.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv reveal.js-master reveal.js&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;convert&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pandoc -t revealjs -s -o myslides.html myslides.md -V revealjs-url&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://unpkg.com/reveal.js@3.9.2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;render-markdown-at-the-command-line&#34;&gt;Render Markdown at the command line &lt;a href=&#34;#render-markdown-at-the-command-line&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/charmbracelet/glow&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Glow&lt;/a&gt; is a terminal markdown renderer written in go.  There iis a prebuilt binary that can simply be unzipped and executed to render markdow.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/charmbracelet/glow/releases/download/v0.2.0/glow_0.2.0_linux_x86_64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzf glow_0.2.0_linux_x86_64.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x glow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv glow /usr/bin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;glow &amp;lt;filename&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;autocomplete-for-click-applications&#34;&gt;Autocomplete for click applications &lt;a href=&#34;#autocomplete-for-click-applications&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;see the &lt;a href=&#34;https://click.palletsprojects.com/en/7.x/bashcomplete/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/click.palletsprojects.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/click.palletsprojects.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt; for more details&lt;/p&gt;&#xA;&lt;h2 id=&#34;autocomplete-for-non-click-python-clis&#34;&gt;Autocomplete for non click python cli’s &lt;a href=&#34;#autocomplete-for-non-click-python-clis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;shtab &lt;a href=&#34;https://github.com/iterative/shtab&#34; title=&#34;https://github.com/iterative/shtab&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/github.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/github.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://github.com/iterative/shtab&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;ensure-functions-reset-context&#34;&gt;Ensure functions reset context &lt;a href=&#34;#ensure-functions-reset-context&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;project_log&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   _project_log&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/projects/project&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      git log&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   _project_log &lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_dir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;finding-files&#34;&gt;Finding Files &lt;a href=&#34;#finding-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; rg bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; ag bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files . &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;hook&amp;#39;&lt;/span&gt; -g &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.md&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;hook&amp;#39;&lt;/span&gt; -g &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.py&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files-with-matches&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --files-without-match&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mu-repo&#34;&gt;mu-repo &lt;a href=&#34;#mu-repo&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# installation&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install mu-repo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## register repos&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu register --recursive&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run git commands&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu status --short&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu diff -U0 --color &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# run shell commands&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu sh &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;grep -iRl &lt;span class=&#34;s2&#34;&gt;&amp;#34;KEDRO_GID=0&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s/KEDRO_GID=0/KEDRO_GID=5/g&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;a href=&#34;/mu-repo/&#34; class=&#34;wikilink&#34; data-title=&#34;Maintianing multiple git repos with mu-repo&#34; data-description=&#34;bash&#34; data-date=&#34;2021-06-10&#34; data-preview=&#34;bash&#34;&gt;Maintianing multiple git repos with mu-repo&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;See the full post for mu-repo for more&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;mu-unregister-all&#34;&gt;mu unregister all &lt;a href=&#34;#mu-unregister-all&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I ran into some issues with mu unregister * before, but this seems to work everywhere.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mu list &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n +3 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; mu unregister &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mu-register-all-repos-that-have-an-rg-match&#34;&gt;mu register all repos that have an rg match &lt;a href=&#34;#mu-register-all-repos-that-have-an-rg-match&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Add all repos that have a versionspec of 3.7 in them.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rg --hidden&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;versionSpec:.*.3.7&amp;#39;&lt;/span&gt; -l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; mu register &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;xrandr&#34;&gt;xrandr &lt;a href=&#34;#xrandr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xrandr -s 1920x1080&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
</feed>