<?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: cli Archive</title>
  <id>https://new.waylonwalker.com/tags/cli/archive/atom.xml</id>
  <updated>2026-06-29T08:39:59Z</updated>
  <subtitle>All posts with the tag &#34;cli&#34;</subtitle>
  <link href="https://new.waylonwalker.com/tags/cli/" rel="alternate" type="text/html"></link>
  <link href="https://new.waylonwalker.com/tags/cli/archive/atom.xml" rel="self" type="application/atom+xml"></link>
  <link href="https://new.waylonwalker.com/tags/cli/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>fixing a corrupt zshrc</title>
    <id>https://new.waylonwalker.com/fixing-a-corrupt-zsh_history/</id>
    <updated>2026-06-29T08:39:59Z</updated>
    <published>2026-06-29T08:39:59Z</published>
    <link href="https://new.waylonwalker.com/fixing-a-corrupt-zsh_history/" rel="alternate" type="text/html"></link>
    <summary type="text">This morning I had a machine crash on me and came back to an error.</summary>
    <content type="html">&lt;p&gt;This morning I had a machine crash on me and came back to an error.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition warning&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;Error&lt;/p&gt;&#xA;&lt;p&gt;zsh: corrupt history file /home/u_walkews/.zsh_history&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Dammit I don’t want to redo my shell history, I checked with a clanker and they&#xA;came up with this solution using &lt;code&gt;strings&lt;/code&gt; that only prints printable&#xA;characters.&lt;/p&gt;&#xA;&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 ~/.zsh_history ~/.zsh_history.bak&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ~/.zsh_history ~/.zsh_history.corrupt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch ~/.zsh_history&#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; ~/.zsh_history&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;strings ~/.zsh_history.corrupt &amp;gt; ~/.zsh_history&#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; ~/.zsh_history&#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>rsync delays</title>
    <id>https://new.waylonwalker.com/rsync-delays/</id>
    <updated>2026-06-04T17:31:53Z</updated>
    <published>2026-06-04T17:31:53Z</published>
    <link href="https://new.waylonwalker.com/rsync-delays/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been deploying my site old school for most of this year, rsync to a volume mounted to nginx. I ran into an issue today where I updated my site and all...</summary>
    <content type="html">&lt;p&gt;I’ve been deploying my site old school for most of this year, rsync to a volume&#xA;mounted to nginx.  I ran into an issue today where I updated my site and all of&#xA;the pages updated first, followed by upload.  The issue this created was that&#xA;the new cache busted css files were not up yet and the site had no styles for a&#xA;brief period during upload.&lt;/p&gt;&#xA;&lt;p&gt;I found that delaying updates and delaying deletes until the new content exists&#xA;first solves this problem pretty well.  Theres still possiblility of jank while&#xA;uploading to a live directory and not doing some sort of hot swap, but I’m good&#xA;with this low budget option for now.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sync:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;rsync -rlt --delete --omit-dir-times &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;&#x9;--info&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;progress2 &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;&#x9;--delay-updates &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;&#x9;--delete-delay &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;&#x9;./output/ &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;&#x9;server:/mnt/mysite&#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>zsh source .env</title>
    <id>https://new.waylonwalker.com/zsh-source-env/</id>
    <updated>2026-05-29T08:19:41Z</updated>
    <published>2026-05-29T08:19:41Z</published>
    <link href="https://new.waylonwalker.com/zsh-source-env/" 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>setopt HIST_IGNORE_SPACE</title>
    <id>https://new.waylonwalker.com/setopt-hist_ignore_space/</id>
    <updated>2026-05-24T20:15:37Z</updated>
    <published>2026-05-24T20:15:37Z</published>
    <link href="https://new.waylonwalker.com/setopt-hist_ignore_space/" rel="alternate" type="text/html"></link>
    <summary type="text">To ignore commands that start with a space character, use the option in bash or zsh.</summary>
    <content type="html">&lt;p&gt;To ignore commands that start with a space character, use the&#xA;&lt;code&gt;HIST_IGNORE_SPACE&lt;/code&gt; option in bash or 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;setopt HIST_IGNORE_SPACE&#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>testing copilot model flag</title>
    <id>https://new.waylonwalker.com/testing-copilot-model-flag/</id>
    <updated>2026-04-29T11:05:39Z</updated>
    <published>2026-04-29T11:05:39Z</published>
    <link href="https://new.waylonwalker.com/testing-copilot-model-flag/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I found a way to test model syntax, cause the clankers always get the exact model name that copilot wants wrong.</summary>
    <content type="html">&lt;p&gt;Today I found a way to test model syntax, cause the clankers always get the&#xA;exact model name that copilot wants wrong.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copilot --model claude-sonnet-4.5 -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;Reply with OK&amp;#34;&lt;/span&gt; --allow-all --no-ask-user -s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copilot --model gpt-5.4 -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;Reply with OK&amp;#34;&lt;/span&gt; --allow-all --no-ask-user -s&#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>Ses_3444b09b1ffexter3elfg5qqtg</title>
    <id>https://new.waylonwalker.com/ses-3444b09b1ffexter3elfg5qqtg/</id>
    <updated>2026-03-04T20:58:05Z</updated>
    <published>2026-03-04T20:58:05Z</published>
    <link href="https://new.waylonwalker.com/ses-3444b09b1ffexter3elfg5qqtg/" rel="alternate" type="text/html"></link>
    <summary type="text">** ses***** 3/4/2026, 8:52:32 PM</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;Session ID:&lt;/strong&gt; ses_3444b09b1ffeXTEr3ELFg5qqtg&#xA;&lt;strong&gt;Created:&lt;/strong&gt; 3/4/2026, 7:55:24 PM&#xA;&lt;strong&gt;Updated:&lt;/strong&gt; 3/4/2026, 8:52:32 PM&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user&#34;&gt;User &lt;a href=&#34;#user&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I want to spec out a cli for tmux session switching in go.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;responsive to terminal size&lt;/li&gt;&#xA;&lt;li&gt;works in tmux popup&lt;/li&gt;&#xA;&lt;li&gt;shows list of tmux sessions with favorites pinned at the top&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;keymap&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;j/k arrow navigation&lt;/li&gt;&#xA;&lt;li&gt;tab to switch sections&lt;/li&gt;&#xA;&lt;li&gt;asdfqwertzxcvb to pick a session (letter listed next to the session)&lt;/li&gt;&#xA;&lt;li&gt;space to select a session, then arrows j/k move that session up in priority and hotkey letter&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--24s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--24s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Initiating brainstorming skill load&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: skill&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;brainstorming&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;skill_content name=&amp;#34;brainstorming&amp;#34;&amp;gt;&#xA;# Skill: brainstorming&#xA;&#xA;# Brainstorming Ideas Into Designs&#xA;&#xA;## Overview&#xA;&#xA;Help turn ideas into fully formed designs and specs through natural collaborative dialogue.&#xA;&#xA;Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you&amp;#39;re building, present the design in small sections (200-300 words), checking after each section whether it looks right so far.&#xA;&#xA;## The Process&#xA;&#xA;**Understanding the idea:**&#xA;- Check out the current project state first (files, docs, recent commits)&#xA;- Ask questions one at a time to refine the idea&#xA;- Prefer multiple choice questions when possible, but open-ended is fine too&#xA;- Only one question per message - if a topic needs more exploration, break it into multiple questions&#xA;- Focus on understanding: purpose, constraints, success criteria&#xA;&#xA;**Exploring approaches:**&#xA;- Propose 2-3 different approaches with trade-offs&#xA;- Present options conversationally with your recommendation and reasoning&#xA;- Lead with your recommended option and explain why&#xA;&#xA;**Presenting the design:**&#xA;- Once you believe you understand what you&amp;#39;re building, present the design&#xA;- Break it into sections of 200-300 words&#xA;- Ask after each section whether it looks right so far&#xA;- Cover: architecture, components, data flow, error handling, testing&#xA;- Be ready to go back and clarify if something doesn&amp;#39;t make sense&#xA;&#xA;## After the Design&#xA;&#xA;**Documentation:**&#xA;- Write the validated design to `docs/plans/YYYY-MM-DD-&amp;lt;topic&amp;gt;-design.md`&#xA;- Use elements-of-style:writing-clearly-and-concisely skill if available&#xA;- Commit the design document to git&#xA;&#xA;**Implementation (if continuing):**&#xA;- Ask: &amp;#34;Ready to set up for implementation?&amp;#34;&#xA;- Use superpowers:using-git-worktrees to create isolated workspace&#xA;- Use superpowers:writing-plans to create detailed implementation plan&#xA;&#xA;## Key Principles&#xA;&#xA;- **One question at a time** - Don&amp;#39;t overwhelm with multiple questions&#xA;- **Multiple choice preferred** - Easier to answer than open-ended when possible&#xA;- **YAGNI ruthlessly** - Remove unnecessary features from all designs&#xA;- **Explore alternatives** - Always propose 2-3 approaches before settling&#xA;- **Incremental validation** - Present design in sections, validate each&#xA;- **Be flexible** - Go back and clarify when something doesn&amp;#39;t make sense&#xA;&#xA;Base directory for this skill: file:///home/waylon/.agents/skills/brainstorming&#xA;Relative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.&#xA;Note: file list is sampled.&#xA;&#xA;&amp;lt;skill_files&amp;gt;&#xA;&#xA;&amp;lt;/skill_files&amp;gt;&#xA;&amp;lt;/skill_content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--88s&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--88s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning cautious context inspection&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: glob&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;pattern&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&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;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;No files found&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--270s&#34;&gt;Assistant (Build · gpt-5.3-codex · 27.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--270s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Outlining comprehensive spec approach&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Great idea. Here’s a practical spec you can build straight into Go.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Product Shape&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Build &lt;code&gt;tms&lt;/code&gt; (tmux session switcher) as a full-screen TUI that also runs cleanly inside &lt;code&gt;tmux popup&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Primary goal: fast switching with keyboard-only flow and stable hotkeys.&lt;/li&gt;&#xA;&lt;li&gt;Session list is split into sections: &lt;code&gt;Favorites&lt;/code&gt; (pinned) and &lt;code&gt;Others&lt;/code&gt; (remaining tmux sessions).&lt;/li&gt;&#xA;&lt;li&gt;Favorites always render at top; within each section, order is user-priority order.&lt;/li&gt;&#xA;&lt;li&gt;Hotkey letters are shown beside each session and are re-assigned from top-to-bottom using: &lt;code&gt;asdfqwertzxcvb&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recommended Stack&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;bubbletea&lt;/code&gt; for event loop + resize handling.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bubbles/list&lt;/code&gt; (or custom list model) for session rendering and selection.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;lipgloss&lt;/code&gt; for responsive styling and compact popup-safe layout.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;os/exec&lt;/code&gt; for tmux integration.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tmux Integration&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Read sessions with:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux list-sessions -F &amp;#34;#{session_name}|#{session_attached}|#{session_last_attached}&amp;#34;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Switch session with:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;tmux switch-client -t &amp;lt;session&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Optional sanity checks:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;detect tmux via &lt;code&gt;$TMUX&lt;/code&gt;; show error if not running in tmux context.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Data Model&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Persist state at &lt;code&gt;~/.config/tms/state.json&lt;/code&gt; (or XDG path).&lt;/li&gt;&#xA;&lt;li&gt;Schema:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;favorites: []string&lt;/code&gt; (ordered names)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;order: []string&lt;/code&gt; (global priority fallback)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;lastSelected: string&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Hotkeys are computed at runtime from rendered order (not persisted directly).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Keymap Spec&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;j&lt;/code&gt; / &lt;code&gt;Down&lt;/code&gt;: move cursor down&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;k&lt;/code&gt; / &lt;code&gt;Up&lt;/code&gt;: move cursor up&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Tab&lt;/code&gt;: cycle section focus (&lt;code&gt;Favorites&lt;/code&gt; &amp;lt;-&amp;gt; &lt;code&gt;Others&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[asdfqwertzxcvb]&lt;/code&gt;: activate session currently bound to that letter; immediate switch and exit&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Space&lt;/code&gt;: toggle “reorder mode” for currently highlighted session&#xA;&lt;ul&gt;&#xA;&lt;li&gt;While active, &lt;code&gt;j/k&lt;/code&gt; moves that session up/down within current section&lt;/li&gt;&#xA;&lt;li&gt;Each move recalculates priority and hotkey mapping live&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Space&lt;/code&gt; again confirms reorder mode off&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Enter&lt;/code&gt;: switch to highlighted session&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Esc&lt;/code&gt; or &lt;code&gt;q&lt;/code&gt;: cancel/exit&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Responsive + Popup Behavior&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On terminal resize (&lt;code&gt;tea.WindowSizeMsg&lt;/code&gt;), recompute:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;list height = terminal height - header - footer - margins&lt;/li&gt;&#xA;&lt;li&gt;truncate long names with ellipsis&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Single-column layout for narrow widths; richer status line for wider widths.&lt;/li&gt;&#xA;&lt;li&gt;No hardcoded minimum popup size; degrade gracefully with compact row renderer.&lt;/li&gt;&#xA;&lt;li&gt;Keep render under ~16ms/frame by precomputing derived row labels.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;UX Rules&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Current session visually marked (e.g., &lt;code&gt;*&lt;/code&gt; + muted color).&lt;/li&gt;&#xA;&lt;li&gt;Favorites section always shown first, even if empty (show “No favorites yet” placeholder).&lt;/li&gt;&#xA;&lt;li&gt;If session disappears mid-run (tmux changed), refresh list and preserve cursor as best effort.&lt;/li&gt;&#xA;&lt;li&gt;Reordering in &lt;code&gt;Favorites&lt;/code&gt; changes pin priority; reordering in &lt;code&gt;Others&lt;/code&gt; changes non-favorite priority only.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Error Handling&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If tmux command fails: show inline error banner, keep app running, allow retry (&lt;code&gt;r&lt;/code&gt; optional).&lt;/li&gt;&#xA;&lt;li&gt;Corrupt state file: back it up to &lt;code&gt;state.json.bak&lt;/code&gt;, start with defaults.&lt;/li&gt;&#xA;&lt;li&gt;Missing sessions in saved state: drop them during load normalization.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Testing Plan&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Unit tests:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;hotkey assignment by visible order&lt;/li&gt;&#xA;&lt;li&gt;section partitioning (favorites vs others)&lt;/li&gt;&#xA;&lt;li&gt;reorder logic and boundary behavior&lt;/li&gt;&#xA;&lt;li&gt;state load/save normalization&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Integration tests (command-layer):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;parse &lt;code&gt;list-sessions&lt;/code&gt; output fixtures&lt;/li&gt;&#xA;&lt;li&gt;verify switch command target formatting&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Manual checks:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;standard terminal and &lt;code&gt;tmux popup&lt;/code&gt; at small/medium/large sizes&lt;/li&gt;&#xA;&lt;li&gt;rapid resize during reorder mode&lt;/li&gt;&#xA;&lt;li&gt;switching with every letter key in map&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want, I can turn this into a concrete implementation plan next (package structure + first-pass interfaces + command skeleton).&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-1&#34;&gt;User &lt;a href=&#34;#user-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;its called tgo&lt;/p&gt;&#xA;&lt;p&gt;I’m envisioning an app that I can assign a hotkey to it opens instantly in a tmux popup, I press the key for the session that I want an I isntantly go there.  the whole process is only two keystrokes.  its critical that its quick and fast.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--212s&#34;&gt;Assistant (Build · gpt-5.3-codex · 21.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--212s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Drafting optimized popup design&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Perfect — &lt;code&gt;tgo&lt;/code&gt; should be designed around a &lt;strong&gt;two-keystroke fast path&lt;/strong&gt;:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;tmux hotkey opens popup&lt;/li&gt;&#xA;&lt;li&gt;press session letter&lt;br/&gt;&#xA;→ immediate switch + popup closes&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;For your goal, optimize for startup latency first, features second.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fast-path spec for &lt;code&gt;tgo&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;tgo&lt;/code&gt; starts, fetches sessions once, renders once, waits for a single key.&lt;/li&gt;&#xA;&lt;li&gt;If key is in &lt;code&gt;asdfqwertzxcvb&lt;/code&gt; and mapped to a live session:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;run &lt;code&gt;tmux switch-client -t &amp;lt;session&amp;gt;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;exit immediately (popup disappears)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;No animations, no spinner, no deferred UI transitions.&lt;/li&gt;&#xA;&lt;li&gt;Keep key-to-session mapping stable across runs (muscle memory), unless reordered.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Performance-oriented design&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Use a minimal UI loop (stdin raw mode + ANSI render), not a heavyweight framework.&lt;/li&gt;&#xA;&lt;li&gt;Single tmux read command on boot: &lt;code&gt;tmux list-sessions -F ...&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Zero background polling by default.&lt;/li&gt;&#xA;&lt;li&gt;Preload and parse state from XDG config in one read.&lt;/li&gt;&#xA;&lt;li&gt;Render compact, fixed-height rows; truncate names only if needed.&lt;/li&gt;&#xA;&lt;li&gt;Target cold-start budget: ~20–40ms on typical machine, warm path even lower.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hotkey behavior&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Letters (&lt;code&gt;asdfqwertzxcvb&lt;/code&gt;) are primary action keys.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;j/k&lt;/code&gt; and arrows for navigation.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Tab&lt;/code&gt; switches sections (Favorites / Others).&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Space&lt;/code&gt; enters reorder mode for selected session:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;j/k&lt;/code&gt; moves session priority&lt;/li&gt;&#xA;&lt;li&gt;letter mapping updates immediately&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;Space&lt;/code&gt; confirms and exits reorder mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tmux popup binding&lt;/strong&gt;&#xA;Use a binding like this so launch is one key:&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-tmux&#34;&gt;bind-key g display-popup -E -w 70% -h 70% &amp;#34;tgo&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;(Replace &lt;code&gt;g&lt;/code&gt; with your preferred trigger key.)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Critical implementation rule&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If a valid letter is pressed, do not do anything else first: no redraw, no extra checks beyond target existence; switch and exit immediately.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want, next I can draft the exact &lt;code&gt;tgo&lt;/code&gt; internal package layout and event loop pseudocode optimized for this latency target.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-2&#34;&gt;User &lt;a href=&#34;#user-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;use the todo tool to track work, use the @builder for research and writing, create a justfile for managing the project, create a readme, changelog, and github actions to lint, tests, dependabot. create release artifacts on release.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--134s&#34;&gt;Assistant (Build · gpt-5.3-codex · 13.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--134s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Clarifying tool usage and task delegation&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Draft builder prompt from tgo requirements and project setup tasks&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;in_progress&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run builder subagent to create justfile, README, CHANGELOG, and GitHub workflows (lint, tests, dependabot, release artifacts)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Review builder results and summarize created files and next steps&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Draft builder prompt from tgo requirements and project setup tasks&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;in_progress&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Run builder subagent to create justfile, README, CHANGELOG, and GitHub workflows (lint, tests, dependabot, release artifacts)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Review builder results and summarize created files and next steps&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;medium&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--1191s&#34;&gt;Assistant (Build · gpt-5.3-codex · 119.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--1191s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Preparing detailed task prompt&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: task&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Scaffold project docs and CI&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;nt&#34;&gt;&amp;#34;subagent_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;builder&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;nt&#34;&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;You are working in /home/waylon/git/tgo. Perform research and writing, then implement project scaffolding for a new Go CLI called `tgo`.\n\nContext to embed:\n- `tgo` is a tmux session switcher optimized for speed.\n- Core UX goal: two-keystroke flow (tmux popup hotkey opens app, then user presses a session letter to switch instantly).\n- Hotkey set: `asdfqwertzxcvb`; favorites pinned at top; responsive to terminal/popup size.\n\nTasks to complete:\n1) Create a `justfile` for project management commands suitable for Go projects.\n   - Include at least: help/default list, fmt, lint, test, build, run, tidy, ci.\n   - Prefer golangci-lint if present; make behavior clear if missing.\n2) Create a high-quality `README.md` covering:\n   - What tgo is and performance philosophy.\n   - Planned keymap and interaction model (including two-keystroke fast path).\n   - Planned architecture notes.\n   - Local development workflow using `just`.\n   - Example tmux binding to open `tgo` in popup.\n3) Create `CHANGELOG.md` using Keep a Changelog format with an initial unreleased section.\n4) Add GitHub automation:\n   - `.github/workflows/ci.yml` for lint + tests on pushes/PRs.\n   - `.github/dependabot.yml` for Go modules + GitHub Actions updates.\n   - `.github/workflows/release.yml` that creates release artifacts when a GitHub Release is published.\n     * Build cross-platform binaries (linux/mac/windows amd64+arm64 where applicable) and upload as artifacts/assets.\n     * Include checksums file.\n5) Ensure workflows are reasonable for a fresh repo (avoid assumptions not present).\n6) If needed for CI/lint/test sanity in a fresh repo, add minimal Go scaffolding (e.g., go.mod and tiny main/test) but keep it minimal.\n\nConstraints:\n- Keep files concise and practical.\n- Use ASCII only.\n- Follow conventional Go and GitHub Actions practices.\n\nReturn a final report with:\n- Files created/updated.\n- Any assumptions made.\n- Recommended next commands to run locally.&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;task_id: ses_344457065ffeyL8ub5ZBsD7Ed5 (for resuming to continue this task if needed)&#xA;&#xA;&amp;lt;task_result&amp;gt;&#xA;Scaffolded the `tgo` CLI with a minimal Go module, placeholder command/testing, documentation, changelog, `just` workflow recipes, and GitHub automation covering CI, Dependabot, and release pipelines (cross-platform builds + checksums).&#xA;&#xA;**Files**&#xA;- `go.mod`, `cmd/tgo/main.go`, `cmd/tgo/main_test.go`&#xA;- `README.md`, `justfile`, `CHANGELOG.md`&#xA;- `.github/workflows/ci.yml`, `.github/workflows/release.yml`, `.github/dependabot.yml`&#xA;&#xA;**Assumptions**&#xA;- The module path is simply `tgo` (no upstream repo URL provided) and `ubuntu-latest` agents have `zip`/`sha256sum` for release packaging.&#xA;- Local linting will skip `golangci-lint` unless it is installed, so `just lint` prints a warning but stays green.&#xA;&#xA;**Next Steps**&#xA;1. `just ci` to run fmt, lint, and tests end-to-end.&#xA;2. `just run` to verify the CLI launches and prints the hotkey list.&#xA;&amp;lt;/task_result&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--80s&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--80s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning todo updates and file verification&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/justfile&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/justfile&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: default: help&#xA;2: &#xA;3: help:&#xA;4:     @just --list&#xA;5: &#xA;6: fmt:&#xA;7:     @go fmt ./...&#xA;8: &#xA;9: lint:&#xA;10:     @if command -v golangci-lint &amp;gt;/dev/null 2&amp;gt;&amp;amp;1; then \&#xA;11:         golangci-lint run ./...; \&#xA;12:     else \&#xA;13:         echo &amp;#34;golangci-lint not found; install it to enable lint checks.&amp;#34;; \&#xA;14:         exit 0; \&#xA;15:     fi&#xA;16: &#xA;17: test:&#xA;18:     @go test ./...&#xA;19: &#xA;20: build:&#xA;21:     @mkdir -p bin&#xA;22:     @go build -ldflags &amp;#34;-s -w&amp;#34; -o bin/tgo ./cmd/tgo&#xA;23: &#xA;24: run:&#xA;25:     @go run ./cmd/tgo&#xA;26: &#xA;27: tidy:&#xA;28:     @go mod tidy&#xA;29: &#xA;30: ci: fmt lint test&#xA;&#xA;(End of file - total 30 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/README.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/README.md&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: # tgo&#xA;2: &#xA;3: tgo is a tmux session switcher optimized for speed and predictability. It runs inside a tmux popup or terminal, draws the active sessions, highlights favorites, and lets you switch with a single letter after opening (two keystrokes overall). The focus is low latency: the popup hotkey triggers `tgo`, and the keyboard-only UI assumes tmux-level terminal performance and responsive layouts.&#xA;4: &#xA;5: ## UX guidance&#xA;6: &#xA;7: - **Two-keystroke flow**: Press the tmux popup hotkey, then tap the letter mapped to the target session. No arrow navigation, no typing a name twice.&#xA;8: - **Key map**: `asdf qwert zxcvb` serves as the ordered list of hotkeys. Favorites are pinned to the top of the list so that letters stay stable even when promting terminals resize.&#xA;9: - **Sizing**: `tgo` will render the session list responsively so that both narrow popups and larger terminals remain usable—critical for tmux popup contexts.&#xA;10: &#xA;11: ## Architecture notes&#xA;12: &#xA;13: - `cmd/tgo` contains the CLI entry point and will orchestrate session discovery, layout, and rendering logic.&#xA;14: - Session data comes from tmux via shell calls (placeholder now), with an overlay layer for the favorites list and letter assignment.&#xA;15: - UI rendering will target the terminal/popup dimensions reported by tmux, keeping control loops synchronous so the hotkey response stays within one frame.&#xA;16: &#xA;17: ## Local workflow (using `just`)&#xA;18: &#xA;19: 1. Install [just](https://github.com/casey/just) if missing.&#xA;20: 2. `just fmt` to format Go files.&#xA;21: 3. `just lint` to run `golangci-lint` if it is installed (falls back to a warning otherwise).&#xA;22: 4. `just test` to exercise the package.&#xA;23: 5. `just build` produces `bin/tgo` under the repository root.&#xA;24: 6. `just run` executes the CLI locally.&#xA;25: 7. `just tidy` keeps `go.mod` and `go.sum` neat.&#xA;26: 8. `just ci` runs `fmt`, `lint`, and `test` in sequence for a quick check before pushing.&#xA;27: &#xA;28: ## Example tmux binding&#xA;29: &#xA;30: ```tmux&#xA;31: bind-key q run-shell &amp;#34;tmux popup -E &amp;#39;tgo&amp;#39;&amp;#34;&#xA;32: ```&#xA;33: &#xA;34: This binding opens a popup that immediately starts `tgo`, letting you press one of the letters from `asdfqwertzxcvb` to jump to the desired session.&#xA;&#xA;(End of file - total 34 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/CHANGELOG.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/CHANGELOG.md&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: # Changelog&#xA;2: &#xA;3: All notable changes to `tgo` will be documented in this file. This project adheres to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).&#xA;4: &#xA;5: ## [Unreleased]&#xA;6: &#xA;7: ### Added&#xA;8: - base Go module, CLI entry point, and placeholder session hotkey collection.&#xA;9: - `justfile` with formatter, lint, test, build, run, tidy, and CI recipes.&#xA;10: - `README.md` describing the command, UX goal, architecture notes, tmux binding, and local workflow.&#xA;11: - `CHANGELOG.md` initial structure plus README and changelog.&#xA;12: - GitHub workflows for CI, dependency updates, and release automation, along with cross-platform binary packaging and checksums.&#xA;&#xA;(End of file - total 12 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/.github/workflows/ci.yml&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/.github/workflows/ci.yml&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: name: CI&#xA;2: &#xA;3: on:&#xA;4:   push:&#xA;5:     branches: [main]&#xA;6:   pull_request:&#xA;7:     branches: [main]&#xA;8: &#xA;9: jobs:&#xA;10:   checks:&#xA;11:     runs-on: ubuntu-latest&#xA;12:     steps:&#xA;13:       - uses: actions/checkout@v4&#xA;14:       - name: Set up Go&#xA;15:         uses: actions/setup-go@v5&#xA;16:         with:&#xA;17:           go-version: 1.22&#xA;18:       - name: Cache Go modules&#xA;19:         uses: actions/cache@v3&#xA;20:         with:&#xA;21:           path: |&#xA;22:             ~/.cache/go-build&#xA;23:             ~/go/pkg/mod&#xA;24:           key: ${{ runner.os }}-go-${{ hashFiles(&amp;#39;**/go.sum&amp;#39;) }}&#xA;25:       - name: Format code&#xA;26:         run: go fmt ./...&#xA;27:       - name: Run golangci-lint&#xA;28:         uses: golangci/golangci-lint-action@v4&#xA;29:         with:&#xA;30:           version: v1.64.0&#xA;31:           args: run ./...&#xA;32:       - name: Vet packages&#xA;33:         run: go vet ./...&#xA;34:       - name: Run tests&#xA;35:         run: go test ./...&#xA;&#xA;(End of file - total 35 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/.github/workflows/release.yml&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/.github/workflows/release.yml&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: name: Release&#xA;2: &#xA;3: on:&#xA;4:   release:&#xA;5:     types: [published]&#xA;6: &#xA;7: jobs:&#xA;8:   build:&#xA;9:     runs-on: ubuntu-latest&#xA;10:     steps:&#xA;11:       - uses: actions/checkout@v4&#xA;12:       - name: Set up Go&#xA;13:         uses: actions/setup-go@v5&#xA;14:         with:&#xA;15:           go-version: 1.22&#xA;16:       - name: Build cross-platform binaries&#xA;17:         run: |&#xA;18:           set -euo pipefail&#xA;19:           artifacts=artifacts&#xA;20:           mkdir -p &amp;#34;$artifacts&amp;#34;&#xA;21:           combos=(&#xA;22:             linux:amd64&#xA;23:             linux:arm64&#xA;24:             darwin:amd64&#xA;25:             darwin:arm64&#xA;26:             windows:amd64&#xA;27:             windows:arm64&#xA;28:           )&#xA;29:           for combo in &amp;#34;${combos[@]}&amp;#34;; do&#xA;30:             os=${combo%%:*}&#xA;31:             arch=${combo##*:}&#xA;32:             bin_name=&amp;#34;tgo-${os}-${arch}&amp;#34;&#xA;33:             bin_path=&amp;#34;$artifacts/${bin_name}&amp;#34;&#xA;34:             if [[ &amp;#34;$os&amp;#34; == &amp;#34;windows&amp;#34; ]]; then&#xA;35:               bin_path+=&amp;#34;.exe&amp;#34;&#xA;36:             fi&#xA;37:             GOOS=&amp;#34;$os&amp;#34; GOARCH=&amp;#34;$arch&amp;#34; go build -ldflags &amp;#34;-s -w&amp;#34; -o &amp;#34;$bin_path&amp;#34; ./cmd/tgo&#xA;38:             archive=&amp;#34;$artifacts/${bin_name}.zip&amp;#34;&#xA;39:             zip -j &amp;#34;$archive&amp;#34; &amp;#34;$bin_path&amp;#34;&#xA;40:             rm &amp;#34;$bin_path&amp;#34;&#xA;41:           done&#xA;42:           sha256sum &amp;#34;$artifacts&amp;#34;/*.zip &amp;gt; &amp;#34;$artifacts/checksums.txt&amp;#34;&#xA;43:       - name: Publish release assets&#xA;44:         uses: softprops/action-gh-release@v1&#xA;45:         with:&#xA;46:           files: |&#xA;47:             artifacts/*.zip&#xA;48:             artifacts/checksums.txt&#xA;49:         env:&#xA;50:           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}&#xA;&#xA;(End of file - total 50 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/.github/dependabot.yml&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/.github/dependabot.yml&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: version: 2&#xA;2: updates:&#xA;3:   - package-ecosystem: gomod&#xA;4:     directory: /&#xA;5:     schedule:&#xA;6:       interval: weekly&#xA;7:   - package-ecosystem: github-actions&#xA;8:     directory: /&#xA;9:     schedule:&#xA;10:       interval: weekly&#xA;&#xA;(End of file - total 10 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--24s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--24s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Scanning Go files for mentions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/go.mod&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/go.mod&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: module tgo&#xA;2: &#xA;3: go 1.22&#xA;&#xA;(End of file - total 3 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/main.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/main.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import &amp;#34;fmt&amp;#34;&#xA;4: &#xA;5: const hotkeyRunes = &amp;#34;asdfqwertzxcvb&amp;#34;&#xA;6: &#xA;7: func main() {&#xA;8: &#x9;fmt.Println(&amp;#34;tgo: tmux session switcher&amp;#34;)&#xA;9: &#x9;fmt.Println(&amp;#34;hotkeys:&amp;#34;, hotkeyRunes)&#xA;10: }&#xA;11: &#xA;12: func SessionHotkeyAlphabet() string {&#xA;13: &#x9;return hotkeyRunes&#xA;14: }&#xA;&#xA;(End of file - total 14 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/main_test.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/main_test.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import &amp;#34;testing&amp;#34;&#xA;4: &#xA;5: func TestSessionHotkeyAlphabet(t *testing.T) {&#xA;6: &#x9;want := &amp;#34;asdfqwertzxcvb&amp;#34;&#xA;7: &#x9;if got := SessionHotkeyAlphabet(); got != want {&#xA;8: &#x9;&#x9;t.Fatalf(&amp;#34;hotkey alphabet mismatch: got %q want %q&amp;#34;, got, want)&#xA;9: &#x9;}&#xA;10: }&#xA;&#xA;(End of file - total 10 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--43s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--43s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Running Go tests to verify&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go test ./...&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Runs Go tests for all packages&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok  &#x9;tgo/cmd/tgo&#x9;0.002s&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--23s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--23s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Completing todos update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Draft builder prompt from tgo requirements and project setup tasks&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run builder subagent to create justfile, README, CHANGELOG, and GitHub workflows (lint, tests, dependabot, release artifacts)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Review builder results and summarize created files and next steps&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Draft builder prompt from tgo requirements and project setup tasks&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Run builder subagent to create justfile, README, CHANGELOG, and GitHub workflows (lint, tests, dependabot, release artifacts)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Review builder results and summarize created files and next steps&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;medium&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--92s&#34;&gt;Assistant (Build · gpt-5.3-codex · 9.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--92s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Implemented. I used the todo tracker, generated a builder prompt from your &lt;code&gt;tgo&lt;/code&gt; context, and ran the &lt;code&gt;builder&lt;/code&gt; subagent to do the research/writing and scaffold the repo.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added project scaffolding: &lt;code&gt;go.mod&lt;/code&gt;, &lt;code&gt;cmd/tgo/main.go&lt;/code&gt;, &lt;code&gt;cmd/tgo/main_test.go&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Added project management: &lt;code&gt;justfile&lt;/code&gt; with &lt;code&gt;help&lt;/code&gt;, &lt;code&gt;fmt&lt;/code&gt;, &lt;code&gt;lint&lt;/code&gt;, &lt;code&gt;test&lt;/code&gt;, &lt;code&gt;build&lt;/code&gt;, &lt;code&gt;run&lt;/code&gt;, &lt;code&gt;tidy&lt;/code&gt;, &lt;code&gt;ci&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Added docs: &lt;code&gt;README.md&lt;/code&gt; (two-keystroke UX, keymap, architecture notes, tmux popup binding), &lt;code&gt;CHANGELOG.md&lt;/code&gt; (Keep a Changelog)&lt;/li&gt;&#xA;&lt;li&gt;Added automation:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CI: &lt;code&gt;.github/workflows/ci.yml&lt;/code&gt; (fmt, golangci-lint action, vet, test)&lt;/li&gt;&#xA;&lt;li&gt;Dependabot: &lt;code&gt;.github/dependabot.yml&lt;/code&gt; (gomod + github-actions weekly)&lt;/li&gt;&#xA;&lt;li&gt;Release artifacts: &lt;code&gt;.github/workflows/release.yml&lt;/code&gt; (cross-platform zip builds + &lt;code&gt;checksums.txt&lt;/code&gt; on published release)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Verified tests locally with &lt;code&gt;go test ./...&lt;/code&gt; (pass)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Key files:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;justfile&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;README.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;CHANGELOG.md&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.github/workflows/release.yml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.github/dependabot.yml&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Natural next steps:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Run &lt;code&gt;just ci&lt;/code&gt; locally.&lt;/li&gt;&#xA;&lt;li&gt;Wire real tmux session discovery/switching into &lt;code&gt;cmd/tgo/main.go&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Add first-pass TUI loop for the two-keystroke popup flow.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-3&#34;&gt;User &lt;a href=&#34;#user-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;keep going until we have a fully workign tui that can list, switch, manage tmux sessions&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--62s&#34;&gt;Assistant (Build · gpt-5.3-codex · 6.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--62s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Preparing implementation strategy&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Inspect current tgo scaffold and define concrete TUI/session management architecture&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;in_progress&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Implement tmux integration and persistent state (favorites/order)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Implement interactive TUI with navigation, section switching, hotkeys, and reorder mode&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Update README with implemented behavior and usage&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Add/expand tests for key mapping, ordering, and state normalization&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run formatting and tests to validate full functionality&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Inspect current tgo scaffold and define concrete TUI/session management architecture&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;in_progress&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Implement tmux integration and persistent state (favorites/order)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Implement interactive TUI with navigation, section switching, hotkeys, and reorder mode&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Update README with implemented behavior and usage&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;medium&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Add/expand tests for key mapping, ordering, and state normalization&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;medium&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Run formatting and tests to validate full functionality&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--41s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--41s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: skill&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;brainstorming&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;skill_content name=&amp;#34;brainstorming&amp;#34;&amp;gt;&#xA;# Skill: brainstorming&#xA;&#xA;# Brainstorming Ideas Into Designs&#xA;&#xA;## Overview&#xA;&#xA;Help turn ideas into fully formed designs and specs through natural collaborative dialogue.&#xA;&#xA;Start by understanding the current project context, then ask questions one at a time to refine the idea. Once you understand what you&amp;#39;re building, present the design in small sections (200-300 words), checking after each section whether it looks right so far.&#xA;&#xA;## The Process&#xA;&#xA;**Understanding the idea:**&#xA;- Check out the current project state first (files, docs, recent commits)&#xA;- Ask questions one at a time to refine the idea&#xA;- Prefer multiple choice questions when possible, but open-ended is fine too&#xA;- Only one question per message - if a topic needs more exploration, break it into multiple questions&#xA;- Focus on understanding: purpose, constraints, success criteria&#xA;&#xA;**Exploring approaches:**&#xA;- Propose 2-3 different approaches with trade-offs&#xA;- Present options conversationally with your recommendation and reasoning&#xA;- Lead with your recommended option and explain why&#xA;&#xA;**Presenting the design:**&#xA;- Once you believe you understand what you&amp;#39;re building, present the design&#xA;- Break it into sections of 200-300 words&#xA;- Ask after each section whether it looks right so far&#xA;- Cover: architecture, components, data flow, error handling, testing&#xA;- Be ready to go back and clarify if something doesn&amp;#39;t make sense&#xA;&#xA;## After the Design&#xA;&#xA;**Documentation:**&#xA;- Write the validated design to `docs/plans/YYYY-MM-DD-&amp;lt;topic&amp;gt;-design.md`&#xA;- Use elements-of-style:writing-clearly-and-concisely skill if available&#xA;- Commit the design document to git&#xA;&#xA;**Implementation (if continuing):**&#xA;- Ask: &amp;#34;Ready to set up for implementation?&amp;#34;&#xA;- Use superpowers:using-git-worktrees to create isolated workspace&#xA;- Use superpowers:writing-plans to create detailed implementation plan&#xA;&#xA;## Key Principles&#xA;&#xA;- **One question at a time** - Don&amp;#39;t overwhelm with multiple questions&#xA;- **Multiple choice preferred** - Easier to answer than open-ended when possible&#xA;- **YAGNI ruthlessly** - Remove unnecessary features from all designs&#xA;- **Explore alternatives** - Always propose 2-3 approaches before settling&#xA;- **Incremental validation** - Present design in sections, validate each&#xA;- **Be flexible** - Go back and clarify when something doesn&amp;#39;t make sense&#xA;&#xA;Base directory for this skill: file:///home/waylon/.agents/skills/brainstorming&#xA;Relative paths in this skill (e.g., scripts/, reference/) are relative to this base directory.&#xA;Note: file list is sampled.&#xA;&#xA;&amp;lt;skill_files&amp;gt;&#xA;&#xA;&amp;lt;/skill_files&amp;gt;&#xA;&amp;lt;/skill_content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--29s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--29s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Resolving inquiry approach conflict&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: glob&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;pattern&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&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;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/home/waylon/git/tgo/bin/tgo&#xA;/home/waylon/git/tgo/cmd/tgo/main_test.go&#xA;/home/waylon/git/tgo/cmd/tgo/main.go&#xA;/home/waylon/git/tgo/.github/workflows/release.yml&#xA;/home/waylon/git/tgo/.github/dependabot.yml&#xA;/home/waylon/git/tgo/.github/workflows/ci.yml&#xA;/home/waylon/git/tgo/CHANGELOG.md&#xA;/home/waylon/git/tgo/justfile&#xA;/home/waylon/git/tgo/README.md&#xA;/home/waylon/git/tgo/go.mod&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/main.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/main.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import &amp;#34;fmt&amp;#34;&#xA;4: &#xA;5: const hotkeyRunes = &amp;#34;asdfqwertzxcvb&amp;#34;&#xA;6: &#xA;7: func main() {&#xA;8: &#x9;fmt.Println(&amp;#34;tgo: tmux session switcher&amp;#34;)&#xA;9: &#x9;fmt.Println(&amp;#34;hotkeys:&amp;#34;, hotkeyRunes)&#xA;10: }&#xA;11: &#xA;12: func SessionHotkeyAlphabet() string {&#xA;13: &#x9;return hotkeyRunes&#xA;14: }&#xA;&#xA;(End of file - total 14 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/README.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/README.md&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: # tgo&#xA;2: &#xA;3: tgo is a tmux session switcher optimized for speed and predictability. It runs inside a tmux popup or terminal, draws the active sessions, highlights favorites, and lets you switch with a single letter after opening (two keystrokes overall). The focus is low latency: the popup hotkey triggers `tgo`, and the keyboard-only UI assumes tmux-level terminal performance and responsive layouts.&#xA;4: &#xA;5: ## UX guidance&#xA;6: &#xA;7: - **Two-keystroke flow**: Press the tmux popup hotkey, then tap the letter mapped to the target session. No arrow navigation, no typing a name twice.&#xA;8: - **Key map**: `asdf qwert zxcvb` serves as the ordered list of hotkeys. Favorites are pinned to the top of the list so that letters stay stable even when promting terminals resize.&#xA;9: - **Sizing**: `tgo` will render the session list responsively so that both narrow popups and larger terminals remain usable—critical for tmux popup contexts.&#xA;10: &#xA;11: ## Architecture notes&#xA;12: &#xA;13: - `cmd/tgo` contains the CLI entry point and will orchestrate session discovery, layout, and rendering logic.&#xA;14: - Session data comes from tmux via shell calls (placeholder now), with an overlay layer for the favorites list and letter assignment.&#xA;15: - UI rendering will target the terminal/popup dimensions reported by tmux, keeping control loops synchronous so the hotkey response stays within one frame.&#xA;16: &#xA;17: ## Local workflow (using `just`)&#xA;18: &#xA;19: 1. Install [just](https://github.com/casey/just) if missing.&#xA;20: 2. `just fmt` to format Go files.&#xA;21: 3. `just lint` to run `golangci-lint` if it is installed (falls back to a warning otherwise).&#xA;22: 4. `just test` to exercise the package.&#xA;23: 5. `just build` produces `bin/tgo` under the repository root.&#xA;24: 6. `just run` executes the CLI locally.&#xA;25: 7. `just tidy` keeps `go.mod` and `go.sum` neat.&#xA;26: 8. `just ci` runs `fmt`, `lint`, and `test` in sequence for a quick check before pushing.&#xA;27: &#xA;28: ## Example tmux binding&#xA;29: &#xA;30: ```tmux&#xA;31: bind-key q run-shell &amp;#34;tmux popup -E &amp;#39;tgo&amp;#39;&amp;#34;&#xA;32: ```&#xA;33: &#xA;34: This binding opens a popup that immediately starts `tgo`, letting you press one of the letters from `asdfqwertzxcvb` to jump to the desired session.&#xA;&#xA;(End of file - total 34 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--628s&#34;&gt;Assistant (Build · gpt-5.3-codex · 62.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--628s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Designing session manager architecture&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/cmd/tgo/main.go\n@@\n-package main\n-\n-import \&amp;#34;fmt\&amp;#34;\n-\n-const hotkeyRunes = \&amp;#34;asdfqwertzxcvb\&amp;#34;\n-\n-func main() {\n-\tfmt.Println(\&amp;#34;tgo: tmux session switcher\&amp;#34;)\n-\tfmt.Println(\&amp;#34;hotkeys:\&amp;#34;, hotkeyRunes)\n-}\n-\n-func SessionHotkeyAlphabet() string {\n-\treturn hotkeyRunes\n-}\n+package main\n+\n+import (\n+\t\&amp;#34;fmt\&amp;#34;\n+\t\&amp;#34;os\&amp;#34;\n+)\n+\n+const hotkeyRunes = \&amp;#34;asdfqwertzxcvb\&amp;#34;\n+\n+func main() {\n+\tclient := &amp;amp;tmuxCLI{}\n+\tstore, err := openStateStore()\n+\tif err != nil {\n+\t\tfmt.Fprintf(os.Stderr, \&amp;#34;tgo: state init failed: %v\\n\&amp;#34;, err)\n+\t\tos.Exit(1)\n+\t}\n+\n+\tapp, err := newApp(client, store)\n+\tif err != nil {\n+\t\tfmt.Fprintf(os.Stderr, \&amp;#34;tgo: startup failed: %v\\n\&amp;#34;, err)\n+\t\tos.Exit(1)\n+\t}\n+\n+\tif err := app.Run(); err != nil {\n+\t\tfmt.Fprintf(os.Stderr, \&amp;#34;tgo: %v\\n\&amp;#34;, err)\n+\t\tos.Exit(1)\n+\t}\n+}\n+\n+func SessionHotkeyAlphabet() string {\n+\treturn hotkeyRunes\n+}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/cmd/tgo/main.go&#xA;&#xA;LSP errors detected in home/waylon/git/tgo/cmd/tgo/main.go, please fix:&#xA;&amp;lt;diagnostics file=&amp;#34;/home/waylon/git/tgo/cmd/tgo/main.go&amp;#34;&amp;gt;&#xA;ERROR [11:13] undefined: tmuxCLI&#xA;ERROR [12:16] undefined: openStateStore&#xA;ERROR [18:14] undefined: newApp&#xA;&amp;lt;/diagnostics&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--234s&#34;&gt;Assistant (Build · gpt-5.3-codex · 23.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--234s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Add File: /home/waylon/git/tgo/cmd/tgo/tmux.go\n+package main\n+\n+import (\n+\t\&amp;#34;bytes\&amp;#34;\n+\t\&amp;#34;fmt\&amp;#34;\n+\t\&amp;#34;os/exec\&amp;#34;\n+\t\&amp;#34;sort\&amp;#34;\n+\t\&amp;#34;strings\&amp;#34;\n+)\n+\n+type session struct {\n+\tName     string\n+\tAttached bool\n+}\n+\n+type tmuxClient interface {\n+\tListSessions() ([]session, error)\n+\tSwitchSession(name string) error\n+\tKillSession(name string) error\n+\tNewSession(name string) error\n+}\n+\n+type tmuxCLI struct{}\n+\n+func (t *tmuxCLI) ListSessions() ([]session, error) {\n+\tcmd := exec.Command(\&amp;#34;tmux\&amp;#34;, \&amp;#34;list-sessions\&amp;#34;, \&amp;#34;-F\&amp;#34;, \&amp;#34;#{session_name}|#{?session_attached,1,0}\&amp;#34;)\n+\tout, err := cmd.Output()\n+\tif err != nil {\n+\t\treturn nil, fmt.Errorf(\&amp;#34;list sessions: %w\&amp;#34;, err)\n+\t}\n+\n+\tlines := strings.Split(strings.TrimSpace(string(out)), \&amp;#34;\\n\&amp;#34;)\n+\tif len(lines) == 1 &amp;amp;&amp;amp; lines[0] == \&amp;#34;\&amp;#34; {\n+\t\treturn []session{}, nil\n+\t}\n+\n+\tsessions := make([]session, 0, len(lines))\n+\tfor _, line := range lines {\n+\t\tparts := strings.SplitN(line, \&amp;#34;|\&amp;#34;, 2)\n+\t\tif len(parts) != 2 {\n+\t\t\tcontinue\n+\t\t}\n+\t\tsessions = append(sessions, session{\n+\t\t\tName:     parts[0],\n+\t\t\tAttached: parts[1] == \&amp;#34;1\&amp;#34;,\n+\t\t})\n+\t}\n+\n+\treturn sessions, nil\n+}\n+\n+func (t *tmuxCLI) SwitchSession(name string) error {\n+\tif name == \&amp;#34;\&amp;#34; {\n+\t\treturn fmt.Errorf(\&amp;#34;empty session name\&amp;#34;)\n+\t}\n+\tcmd := exec.Command(\&amp;#34;tmux\&amp;#34;, \&amp;#34;switch-client\&amp;#34;, \&amp;#34;-t\&amp;#34;, name)\n+\tif out, err := cmd.CombinedOutput(); err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;switch session %q: %w (%s)\&amp;#34;, name, err, strings.TrimSpace(string(out)))\n+\t}\n+\treturn nil\n+}\n+\n+func (t *tmuxCLI) KillSession(name string) error {\n+\tif name == \&amp;#34;\&amp;#34; {\n+\t\treturn fmt.Errorf(\&amp;#34;empty session name\&amp;#34;)\n+\t}\n+\tcmd := exec.Command(\&amp;#34;tmux\&amp;#34;, \&amp;#34;kill-session\&amp;#34;, \&amp;#34;-t\&amp;#34;, name)\n+\tif out, err := cmd.CombinedOutput(); err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;kill session %q: %w (%s)\&amp;#34;, name, err, strings.TrimSpace(string(out)))\n+\t}\n+\treturn nil\n+}\n+\n+func (t *tmuxCLI) NewSession(name string) error {\n+\tif name == \&amp;#34;\&amp;#34; {\n+\t\treturn fmt.Errorf(\&amp;#34;empty session name\&amp;#34;)\n+\t}\n+\tcmd := exec.Command(\&amp;#34;tmux\&amp;#34;, \&amp;#34;new-session\&amp;#34;, \&amp;#34;-d\&amp;#34;, \&amp;#34;-s\&amp;#34;, name)\n+\tif out, err := cmd.CombinedOutput(); err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;new session %q: %w (%s)\&amp;#34;, name, err, strings.TrimSpace(string(out)))\n+\t}\n+\treturn nil\n+}\n+\n+func orderSessions(sessions []session, st state) (favorites []session, others []session) {\n+\tnameToSession := make(map[string]session, len(sessions))\n+\ttmuxOrder := make(map[string]int, len(sessions))\n+\tfor i, s := range sessions {\n+\t\tnameToSession[s.Name] = s\n+\t\ttmuxOrder[s.Name] = i\n+\t}\n+\n+\tfor _, name := range st.Favorites {\n+\t\ts, ok := nameToSession[name]\n+\t\tif !ok {\n+\t\t\tcontinue\n+\t\t}\n+\t\tfavorites = append(favorites, s)\n+\t}\n+\n+\tfavSet := make(map[string]struct{}, len(favorites))\n+\tfor _, s := range favorites {\n+\t\tfavSet[s.Name] = struct{}{}\n+\t}\n+\n+\tnonFav := make([]session, 0, len(sessions)-len(favorites))\n+\tfor _, s := range sessions {\n+\t\tif _, ok := favSet[s.Name]; ok {\n+\t\t\tcontinue\n+\t\t}\n+\t\tnonFav = append(nonFav, s)\n+\t}\n+\n+\torderIndex := make(map[string]int, len(st.Order))\n+\tfor i, name := range st.Order {\n+\t\torderIndex[name] = i\n+\t}\n+\n+\tsort.SliceStable(nonFav, func(i, j int) bool {\n+\t\tli, iok := orderIndex[nonFav[i].Name]\n+\t\tlj, jok := orderIndex[nonFav[j].Name]\n+\t\tswitch {\n+\t\tcase iok &amp;amp;&amp;amp; jok:\n+\t\t\treturn li &amp;lt; lj\n+\t\tcase iok:\n+\t\t\treturn true\n+\t\tcase jok:\n+\t\t\treturn false\n+\t\tdefault:\n+\t\t\treturn tmuxOrder[nonFav[i].Name] &amp;lt; tmuxOrder[nonFav[j].Name]\n+\t\t}\n+\t})\n+\n+\treturn favorites, nonFav\n+}\n+\n+func assignHotkeys(favorites []session, others []session, alphabet string) map[string]rune {\n+\tout := make(map[string]rune)\n+\tordered := make([]session, 0, len(favorites)+len(others))\n+\tordered = append(ordered, favorites...)\n+\tordered = append(ordered, others...)\n+\n+\trunes := []rune(alphabet)\n+\tfor i, s := range ordered {\n+\t\tif i &amp;gt;= len(runes) {\n+\t\t\tbreak\n+\t\t}\n+\t\tout[s.Name] = runes[i]\n+\t}\n+\treturn out\n+}\n+\n+func runesToString(m map[string]rune, ordered []session) string {\n+\tbuf := bytes.Buffer{}\n+\tfor _, s := range ordered {\n+\t\tr, ok := m[s.Name]\n+\t\tif !ok {\n+\t\t\tcontinue\n+\t\t}\n+\t\tbuf.WriteRune(r)\n+\t}\n+\treturn buf.String()\n+}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;A home/waylon/git/tgo/cmd/tgo/tmux.go&#xA;&#xA;LSP errors detected in home/waylon/git/tgo/cmd/tgo/tmux.go, please fix:&#xA;&amp;lt;diagnostics file=&amp;#34;/home/waylon/git/tgo/cmd/tgo/tmux.go&amp;#34;&amp;gt;&#xA;ERROR [85:43] undefined: state&#xA;&amp;lt;/diagnostics&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--158s&#34;&gt;Assistant (Build · gpt-5.3-codex · 15.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--158s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Identifying need for state file&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Add File: /home/waylon/git/tgo/cmd/tgo/state.go\n+package main\n+\n+import (\n+\t\&amp;#34;encoding/json\&amp;#34;\n+\t\&amp;#34;errors\&amp;#34;\n+\t\&amp;#34;fmt\&amp;#34;\n+\t\&amp;#34;os\&amp;#34;\n+\t\&amp;#34;path/filepath\&amp;#34;\n+)\n+\n+type state struct {\n+\tFavorites []string `json:\&amp;#34;favorites\&amp;#34;`\n+\tOrder     []string `json:\&amp;#34;order\&amp;#34;`\n+}\n+\n+type stateStore struct {\n+\tpath string\n+}\n+\n+func openStateStore() (*stateStore, error) {\n+\tconfigDir, err := os.UserConfigDir()\n+\tif err != nil {\n+\t\treturn nil, fmt.Errorf(\&amp;#34;config dir: %w\&amp;#34;, err)\n+\t}\n+\treturn &amp;amp;stateStore{path: filepath.Join(configDir, \&amp;#34;tgo\&amp;#34;, \&amp;#34;state.json\&amp;#34;)}, nil\n+}\n+\n+func (s *stateStore) Load() (state, error) {\n+\tdata, err := os.ReadFile(s.path)\n+\tif err != nil {\n+\t\tif errors.Is(err, os.ErrNotExist) {\n+\t\t\treturn state{}, nil\n+\t\t}\n+\t\treturn state{}, fmt.Errorf(\&amp;#34;read state: %w\&amp;#34;, err)\n+\t}\n+\n+\tvar st state\n+\tif err := json.Unmarshal(data, &amp;amp;st); err != nil {\n+\t\tbak := s.path + \&amp;#34;.bak\&amp;#34;\n+\t\t_ = os.Rename(s.path, bak)\n+\t\treturn state{}, nil\n+\t}\n+\treturn st, nil\n+}\n+\n+func (s *stateStore) Save(st state) error {\n+\tdir := filepath.Dir(s.path)\n+\tif err := os.MkdirAll(dir, 0o755); err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;create state dir: %w\&amp;#34;, err)\n+\t}\n+\tdata, err := json.MarshalIndent(st, \&amp;#34;\&amp;#34;, \&amp;#34;  \&amp;#34;)\n+\tif err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;marshal state: %w\&amp;#34;, err)\n+\t}\n+\tif err := os.WriteFile(s.path, data, 0o644); err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;write state: %w\&amp;#34;, err)\n+\t}\n+\treturn nil\n+}\n+\n+func normalizeState(st state, sessions []session) state {\n+\texists := make(map[string]struct{}, len(sessions))\n+\tfor _, s := range sessions {\n+\t\texists[s.Name] = struct{}{}\n+\t}\n+\n+\tst.Favorites = dedupeAndFilter(st.Favorites, exists)\n+\n+\tfavSet := make(map[string]struct{}, len(st.Favorites))\n+\tfor _, name := range st.Favorites {\n+\t\tfavSet[name] = struct{}{}\n+\t}\n+\n+\tallowedOthers := make(map[string]struct{}, len(sessions)-len(st.Favorites))\n+\tfor _, s := range sessions {\n+\t\tif _, fav := favSet[s.Name]; fav {\n+\t\t\tcontinue\n+\t\t}\n+\t\tallowedOthers[s.Name] = struct{}{}\n+\t}\n+\tst.Order = dedupeAndFilter(st.Order, allowedOthers)\n+\treturn st\n+}\n+\n+func dedupeAndFilter(items []string, allowed map[string]struct{}) []string {\n+\tseen := map[string]struct{}{}\n+\tout := make([]string, 0, len(items))\n+\tfor _, item := range items {\n+\t\tif item == \&amp;#34;\&amp;#34; {\n+\t\t\tcontinue\n+\t\t}\n+\t\tif _, ok := allowed[item]; !ok {\n+\t\t\tcontinue\n+\t\t}\n+\t\tif _, dup := seen[item]; dup {\n+\t\t\tcontinue\n+\t\t}\n+\t\tseen[item] = struct{}{}\n+\t\tout = append(out, item)\n+\t}\n+\treturn out\n+}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;A home/waylon/git/tgo/cmd/tgo/state.go&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--579s&#34;&gt;Assistant (Build · gpt-5.3-codex · 57.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--579s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adding tcell app file&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Add File: /home/waylon/git/tgo/cmd/tgo/app.go\n+package main\n+\n+import (\n+\t\&amp;#34;fmt\&amp;#34;\n+\t\&amp;#34;strings\&amp;#34;\n+\t\&amp;#34;time\&amp;#34;\n+\n+\t\&amp;#34;github.com/gdamore/tcell/v2\&amp;#34;\n+)\n+\n+type mode int\n+\n+const (\n+\tmodeNormal mode = iota\n+\tmodeReorder\n+\tmodeCreate\n+)\n+\n+type app struct {\n+\tclient tmuxClient\n+\tstore  *stateStore\n+\n+\tstate     state\n+\tsessions  []session\n+\tfavorites []session\n+\tothers    []session\n+\thotkeys   map[string]rune\n+\n+\tsection     int\n+\tcursorFav   int\n+\tcursorOther int\n+\tscrollFav   int\n+\tscrollOther int\n+\n+\tmode        mode\n+\tcreateInput string\n+\n+\tstatus       string\n+\tstatusExpiry time.Time\n+}\n+\n+func newApp(client tmuxClient, store *stateStore) (*app, error) {\n+\tst, err := store.Load()\n+\tif err != nil {\n+\t\treturn nil, err\n+\t}\n+\ta := &amp;amp;app{client: client, store: store, state: st}\n+\tif err := a.refreshSessions(); err != nil {\n+\t\treturn nil, err\n+\t}\n+\treturn a, nil\n+}\n+\n+func (a *app) Run() error {\n+\tscreen, err := tcell.NewScreen()\n+\tif err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;create screen: %w\&amp;#34;, err)\n+\t}\n+\tif err := screen.Init(); err != nil {\n+\t\treturn fmt.Errorf(\&amp;#34;init screen: %w\&amp;#34;, err)\n+\t}\n+\tdefer screen.Fini()\n+\n+\tscreen.HideCursor()\n+\ta.draw(screen)\n+\n+\tfor {\n+\t\tev := screen.PollEvent()\n+\t\tswitch e := ev.(type) {\n+\t\tcase *tcell.EventResize:\n+\t\t\tscreen.Sync()\n+\t\t\ta.draw(screen)\n+\t\tcase *tcell.EventKey:\n+\t\t\tdone, runSwitch := a.handleKey(e)\n+\t\t\tif runSwitch != \&amp;#34;\&amp;#34; {\n+\t\t\t\tscreen.Fini()\n+\t\t\t\tif err := a.client.SwitchSession(runSwitch); err != nil {\n+\t\t\t\t\treturn err\n+\t\t\t\t}\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t\tif done {\n+\t\t\t\treturn nil\n+\t\t\t}\n+\t\t\ta.draw(screen)\n+\t\t}\n+\t}\n+}\n+\n+func (a *app) handleKey(key *tcell.EventKey) (done bool, switchTo string) {\n+\tif a.mode == modeCreate {\n+\t\treturn a.handleCreateKey(key)\n+\t}\n+\n+\tif key.Key() == tcell.KeyCtrlC || key.Rune() == &amp;#39;q&amp;#39; {\n+\t\treturn true, \&amp;#34;\&amp;#34;\n+\t}\n+\n+\tif key.Key() == tcell.KeyTab {\n+\t\ta.toggleSection()\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\t}\n+\n+\tif key.Key() == tcell.KeyEnter {\n+\t\tif name, ok := a.selectedName(); ok {\n+\t\t\treturn false, name\n+\t\t}\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\t}\n+\n+\tif key.Key() == tcell.KeyRune {\n+\t\tr := key.Rune()\n+\t\tif name, ok := a.hotkeyTarget(r); ok {\n+\t\t\treturn false, name\n+\t\t}\n+\t\tswitch r {\n+\t\tcase &amp;#39;j&amp;#39;:\n+\t\t\ta.moveDown()\n+\t\tcase &amp;#39;k&amp;#39;:\n+\t\t\ta.moveUp()\n+\t\tcase &amp;#39; &amp;#39;:\n+\t\t\ta.toggleReorderMode()\n+\t\tcase &amp;#39;f&amp;#39;:\n+\t\t\ta.toggleFavorite()\n+\t\tcase &amp;#39;x&amp;#39;:\n+\t\t\ta.killSelected()\n+\t\tcase &amp;#39;n&amp;#39;:\n+\t\t\ta.mode = modeCreate\n+\t\t\ta.createInput = \&amp;#34;\&amp;#34;\n+\t\t\ta.status = \&amp;#34;new session: type name and press Enter\&amp;#34;\n+\t\t\ta.statusExpiry = time.Time{}\n+\t\tcase &amp;#39;r&amp;#39;:\n+\t\t\tif err := a.refreshSessions(); err != nil {\n+\t\t\t\ta.setError(err)\n+\t\t\t}\n+\t\t}\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\t}\n+\n+\tswitch key.Key() {\n+\tcase tcell.KeyUp:\n+\t\ta.moveUp()\n+\tcase tcell.KeyDown:\n+\t\ta.moveDown()\n+\t}\n+\n+\treturn false, \&amp;#34;\&amp;#34;\n+}\n+\n+func (a *app) handleCreateKey(key *tcell.EventKey) (bool, string) {\n+\tswitch key.Key() {\n+\tcase tcell.KeyEsc:\n+\t\ta.mode = modeNormal\n+\t\ta.setStatus(\&amp;#34;create canceled\&amp;#34;)\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\tcase tcell.KeyEnter:\n+\t\tname := strings.TrimSpace(a.createInput)\n+\t\tif name == \&amp;#34;\&amp;#34; {\n+\t\t\ta.setStatus(\&amp;#34;session name cannot be empty\&amp;#34;)\n+\t\t\treturn false, \&amp;#34;\&amp;#34;\n+\t\t}\n+\t\tif err := a.client.NewSession(name); err != nil {\n+\t\t\ta.setError(err)\n+\t\t\treturn false, \&amp;#34;\&amp;#34;\n+\t\t}\n+\t\ta.mode = modeNormal\n+\t\ta.createInput = \&amp;#34;\&amp;#34;\n+\t\tif err := a.refreshSessions(); err != nil {\n+\t\t\ta.setError(err)\n+\t\t\treturn false, \&amp;#34;\&amp;#34;\n+\t\t}\n+\t\ta.selectByName(name)\n+\t\ta.setStatus(fmt.Sprintf(\&amp;#34;created %s\&amp;#34;, name))\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\tcase tcell.KeyBackspace, tcell.KeyBackspace2:\n+\t\tif len(a.createInput) &amp;gt; 0 {\n+\t\t\ta.createInput = a.createInput[:len(a.createInput)-1]\n+\t\t}\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\tcase tcell.KeyRune:\n+\t\tr := key.Rune()\n+\t\tif r &amp;gt;= 32 &amp;amp;&amp;amp; r &amp;lt;= 126 {\n+\t\t\ta.createInput += string(r)\n+\t\t}\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\tdefault:\n+\t\treturn false, \&amp;#34;\&amp;#34;\n+\t}\n+}\n+\n+func (a *app) toggleSection() {\n+\tif len(a.favorites) == 0 &amp;amp;&amp;amp; len(a.others) == 0 {\n+\t\treturn\n+\t}\n+\tif a.section == 0 {\n+\t\tif len(a.others) &amp;gt; 0 {\n+\t\t\ta.section = 1\n+\t\t}\n+\t\treturn\n+\t}\n+\tif len(a.favorites) &amp;gt; 0 {\n+\t\ta.section = 0\n+\t}\n+}\n+\n+func (a *app) moveUp() {\n+\tif a.mode == modeReorder {\n+\t\ta.reorder(-1)\n+\t\treturn\n+\t}\n+\tif a.section == 0 {\n+\t\tif a.cursorFav &amp;gt; 0 {\n+\t\t\ta.cursorFav--\n+\t\t}\n+\t\treturn\n+\t}\n+\tif a.cursorOther &amp;gt; 0 {\n+\t\ta.cursorOther--\n+\t}\n+}\n+\n+func (a *app) moveDown() {\n+\tif a.mode == modeReorder {\n+\t\ta.reorder(1)\n+\t\treturn\n+\t}\n+\tif a.section == 0 {\n+\t\tif a.cursorFav &amp;lt; len(a.favorites)-1 {\n+\t\t\ta.cursorFav++\n+\t\t}\n+\t\treturn\n+\t}\n+\tif a.cursorOther &amp;lt; len(a.others)-1 {\n+\t\ta.cursorOther++\n+\t}\n+}\n+\n+func (a *app) toggleReorderMode() {\n+\tif _, ok := a.selectedName(); !ok {\n+\t\treturn\n+\t}\n+\tif a.mode == modeReorder {\n+\t\ta.mode = modeNormal\n+\t\ta.setStatus(\&amp;#34;reorder mode off\&amp;#34;)\n+\t\treturn\n+\t}\n+\ta.mode = modeReorder\n+\ta.setStatus(\&amp;#34;reorder mode on: j/k moves selected session\&amp;#34;)\n+}\n+\n+func (a *app) toggleFavorite() {\n+\tname, ok := a.selectedName()\n+\tif !ok {\n+\t\treturn\n+\t}\n+\n+\tidx := indexOf(a.state.Favorites, name)\n+\tif idx &amp;gt;= 0 {\n+\t\ta.state.Favorites = removeAt(a.state.Favorites, idx)\n+\t\ta.state.Order = append([]string{name}, a.state.Order...)\n+\t\ta.setStatus(fmt.Sprintf(\&amp;#34;unfavorited %s\&amp;#34;, name))\n+\t} else {\n+\t\ta.state.Favorites = append(a.state.Favorites, name)\n+\t\ta.state.Order = removeByValue(a.state.Order, name)\n+\t\ta.setStatus(fmt.Sprintf(\&amp;#34;favorited %s\&amp;#34;, name))\n+\t}\n+\tif err := a.persistAndRebuild(); err != nil {\n+\t\ta.setError(err)\n+\t}\n+}\n+\n+func (a *app) reorder(delta int) {\n+\tname, ok := a.selectedName()\n+\tif !ok {\n+\t\treturn\n+\t}\n+\tif a.section == 0 {\n+\t\tidx := indexOf(a.state.Favorites, name)\n+\t\tif idx &amp;lt; 0 {\n+\t\t\treturn\n+\t\t}\n+\t\tnewIdx := idx + delta\n+\t\tif newIdx &amp;lt; 0 || newIdx &amp;gt;= len(a.state.Favorites) {\n+\t\t\treturn\n+\t\t}\n+\t\ta.state.Favorites[idx], a.state.Favorites[newIdx] = a.state.Favorites[newIdx], a.state.Favorites[idx]\n+\t\ta.cursorFav = newIdx\n+\t} else {\n+\t\tnames := make([]string, 0, len(a.others))\n+\t\tfor _, s := range a.others {\n+\t\t\tnames = append(names, s.Name)\n+\t\t}\n+\t\tidx := indexOf(names, name)\n+\t\tif idx &amp;lt; 0 {\n+\t\t\treturn\n+\t\t}\n+\t\tnewIdx := idx + delta\n+\t\tif newIdx &amp;lt; 0 || newIdx &amp;gt;= len(names) {\n+\t\t\treturn\n+\t\t}\n+\t\tnames[idx], names[newIdx] = names[newIdx], names[idx]\n+\t\ta.state.Order = names\n+\t\ta.cursorOther = newIdx\n+\t}\n+\tif err := a.persistAndRebuild(); err != nil {\n+\t\ta.setError(err)\n+\t\treturn\n+\t}\n+\ta.setStatus(\&amp;#34;priority updated\&amp;#34;)\n+}\n+\n+func (a *app) killSelected() {\n+\tname, ok := a.selectedName()\n+\tif !ok {\n+\t\treturn\n+\t}\n+\tif err := a.client.KillSession(name); err != nil {\n+\t\ta.setError(err)\n+\t\treturn\n+\t}\n+\ta.state.Favorites = removeByValue(a.state.Favorites, name)\n+\ta.state.Order = removeByValue(a.state.Order, name)\n+\tif err := a.persistAndRebuild(); err != nil {\n+\t\ta.setError(err)\n+\t\treturn\n+\t}\n+\ta.setStatus(fmt.Sprintf(\&amp;#34;killed %s\&amp;#34;, name))\n+}\n+\n+func (a *app) refreshSessions() error {\n+\tsessions, err := a.client.ListSessions()\n+\tif err != nil {\n+\t\treturn err\n+\t}\n+\ta.sessions = sessions\n+\ta.state = normalizeState(a.state, sessions)\n+\ta.rebuildLists()\n+\tif err := a.store.Save(a.state); err != nil {\n+\t\treturn err\n+\t}\n+\treturn nil\n+}\n+\n+func (a *app) persistAndRebuild() error {\n+\ta.state = normalizeState(a.state, a.sessions)\n+\ta.rebuildLists()\n+\treturn a.store.Save(a.state)\n+}\n+\n+func (a *app) rebuildLists() {\n+\ta.favorites, a.others = orderSessions(a.sessions, a.state)\n+\ta.hotkeys = assignHotkeys(a.favorites, a.others, SessionHotkeyAlphabet())\n+\ta.clampCursors()\n+}\n+\n+func (a *app) clampCursors() {\n+\tif a.cursorFav &amp;gt;= len(a.favorites) {\n+\t\ta.cursorFav = max(len(a.favorites)-1, 0)\n+\t}\n+\tif a.cursorOther &amp;gt;= len(a.others) {\n+\t\ta.cursorOther = max(len(a.others)-1, 0)\n+\t}\n+\tif a.section == 0 &amp;amp;&amp;amp; len(a.favorites) == 0 &amp;amp;&amp;amp; len(a.others) &amp;gt; 0 {\n+\t\ta.section = 1\n+\t}\n+\tif a.section == 1 &amp;amp;&amp;amp; len(a.others) == 0 &amp;amp;&amp;amp; len(a.favorites) &amp;gt; 0 {\n+\t\ta.section = 0\n+\t}\n+}\n+\n+func (a *app) selectedName() (string, bool) {\n+\tif a.section == 0 {\n+\t\tif len(a.favorites) == 0 {\n+\t\t\treturn \&amp;#34;\&amp;#34;, false\n+\t\t}\n+\t\treturn a.favorites[a.cursorFav].Name, true\n+\t}\n+\tif len(a.others) == 0 {\n+\t\treturn \&amp;#34;\&amp;#34;, false\n+\t}\n+\treturn a.others[a.cursorOther].Name, true\n+}\n+\n+func (a *app) hotkeyTarget(r rune) (string, bool) {\n+\tfor name, key := range a.hotkeys {\n+\t\tif key == r {\n+\t\t\treturn name, true\n+\t\t}\n+\t}\n+\treturn \&amp;#34;\&amp;#34;, false\n+}\n+\n+func (a *app) selectByName(name string) {\n+\tif idx := indexSession(a.favorites, name); idx &amp;gt;= 0 {\n+\t\ta.section = 0\n+\t\ta.cursorFav = idx\n+\t\treturn\n+\t}\n+\tif idx := indexSession(a.others, name); idx &amp;gt;= 0 {\n+\t\ta.section = 1\n+\t\ta.cursorOther = idx\n+\t}\n+}\n+\n+func (a *app) setStatus(msg string) {\n+\ta.status = msg\n+\ta.statusExpiry = time.Now().Add(4 * time.Second)\n+}\n+\n+func (a *app) setError(err error) {\n+\ta.status = \&amp;#34;error: \&amp;#34; + err.Error()\n+\ta.statusExpiry = time.Now().Add(8 * time.Second)\n+}\n+\n+func (a *app) visibleStatus() string {\n+\tif a.status == \&amp;#34;\&amp;#34; {\n+\t\treturn \&amp;#34;\&amp;#34;\n+\t}\n+\tif a.statusExpiry.IsZero() || time.Now().Before(a.statusExpiry) {\n+\t\treturn a.status\n+\t}\n+\ta.status = \&amp;#34;\&amp;#34;\n+\treturn \&amp;#34;\&amp;#34;\n+}\n+\n+func indexSession(sessions []session, name string) int {\n+\tfor i, s := range sessions {\n+\t\tif s.Name == name {\n+\t\t\treturn i\n+\t\t}\n+\t}\n+\treturn -1\n+}\n+\n+func indexOf(items []string, target string) int {\n+\tfor i, item := range items {\n+\t\tif item == target {\n+\t\t\treturn i\n+\t\t}\n+\t}\n+\treturn -1\n+}\n+\n+func removeAt(items []string, idx int) []string {\n+\tout := make([]string, 0, len(items)-1)\n+\tout = append(out, items[:idx]...)\n+\tout = append(out, items[idx+1:]...)\n+\treturn out\n+}\n+\n+func removeByValue(items []string, target string) []string {\n+\tout := make([]string, 0, len(items))\n+\tfor _, item := range items {\n+\t\tif item == target {\n+\t\t\tcontinue\n+\t\t}\n+\t\tout = append(out, item)\n+\t}\n+\treturn out\n+}\n+\n+func max(a int, b int) int {\n+\tif a &amp;gt; b {\n+\t\treturn a\n+\t}\n+\treturn b\n+}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;A home/waylon/git/tgo/cmd/tgo/app.go&#xA;&#xA;LSP errors detected in home/waylon/git/tgo/cmd/tgo/app.go, please fix:&#xA;&amp;lt;diagnostics file=&amp;#34;/home/waylon/git/tgo/cmd/tgo/app.go&amp;#34;&amp;gt;&#xA;ERROR [8:2] could not import github.com/gdamore/tcell/v2 (no required module provides package &amp;#34;github.com/gdamore/tcell/v2&amp;#34;)&#xA;ERROR [55:17] undefined: tcell&#xA;ERROR [65:4] a.draw undefined (type *app has no field or method draw)&#xA;ERROR [70:9] undefined: tcell&#xA;ERROR [72:6] a.draw undefined (type *app has no field or method draw)&#xA;ERROR [73:9] undefined: tcell&#xA;ERROR [85:6] a.draw undefined (type *app has no field or method draw)&#xA;ERROR [90:30] undefined: tcell&#xA;ERROR [95:18] undefined: tcell&#xA;ERROR [99:18] undefined: tcell&#xA;ERROR [104:18] undefined: tcell&#xA;ERROR [111:18] undefined: tcell&#xA;ERROR [141:7] undefined: tcell&#xA;ERROR [143:7] undefined: tcell&#xA;ERROR [150:36] undefined: tcell&#xA;ERROR [152:7] undefined: tcell&#xA;ERROR [156:7] undefined: tcell&#xA;ERROR [175:7] undefined: tcell&#xA;ERROR [175:27] undefined: tcell&#xA;ERROR [180:7] undefined: tcell&#xA;&amp;lt;/diagnostics&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--209s&#34;&gt;Assistant (Build · gpt-5.3-codex · 20.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--209s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Creating view file and adding dependency&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Add File: /home/waylon/git/tgo/cmd/tgo/view.go\n+package main\n+\n+import (\n+\t\&amp;#34;fmt\&amp;#34;\n+\t\&amp;#34;strings\&amp;#34;\n+\n+\t\&amp;#34;github.com/gdamore/tcell/v2\&amp;#34;\n+)\n+\n+func (a *app) draw(screen tcell.Screen) {\n+\twidth, height := screen.Size()\n+\tscreen.Clear()\n+\n+\theaderStyle := tcell.StyleDefault.Foreground(tcell.ColorAqua).Bold(true)\n+\thelpStyle := tcell.StyleDefault.Foreground(tcell.ColorGray)\n+\tstatusStyle := tcell.StyleDefault.Foreground(tcell.ColorGreen)\n+\terrorStyle := tcell.StyleDefault.Foreground(tcell.ColorRed)\n+\n+\tline := 0\n+\ta.drawText(screen, 0, line, headerStyle, \&amp;#34;tgo - tmux session switcher\&amp;#34;)\n+\tline++\n+\n+\thelp := \&amp;#34;[letters] switch  [j/k or arrows] move  [tab] section  [space] reorder  [f] favorite  [n] new  [x] kill  [r] refresh  [enter] switch  [q] quit\&amp;#34;\n+\ta.drawText(screen, 0, line, helpStyle, truncate(help, width))\n+\tline++\n+\n+\tif a.mode == modeCreate {\n+\t\tprompt := \&amp;#34;new session name: \&amp;#34; + a.createInput\n+\t\ta.drawText(screen, 0, line, tcell.StyleDefault.Foreground(tcell.ColorYellow), truncate(prompt, width))\n+\t\tline++\n+\t}\n+\n+\tline = a.drawSection(screen, line, width, height, \&amp;#34;Favorites\&amp;#34;, a.favorites, a.cursorFav, a.section == 0)\n+\tline = a.drawSection(screen, line, width, height, \&amp;#34;Others\&amp;#34;, a.others, a.cursorOther, a.section == 1)\n+\n+\tstatus := a.visibleStatus()\n+\tif status != \&amp;#34;\&amp;#34; {\n+\t\tstyle := statusStyle\n+\t\tif strings.HasPrefix(status, \&amp;#34;error:\&amp;#34;) {\n+\t\t\tstyle = errorStyle\n+\t\t}\n+\t\ta.drawText(screen, 0, height-1, style, truncate(status, width))\n+\t}\n+\n+\tscreen.Show()\n+}\n+\n+func (a *app) drawSection(screen tcell.Screen, y int, width int, height int, title string, rows []session, cursor int, active bool) int {\n+\tif y &amp;gt;= height-1 {\n+\t\treturn y\n+\t}\n+\n+\ttitleStyle := tcell.StyleDefault.Foreground(tcell.ColorWhite)\n+\tif active {\n+\t\ttitleStyle = titleStyle.Bold(true).Foreground(tcell.ColorBlue)\n+\t}\n+\ta.drawText(screen, 0, y, titleStyle, fmt.Sprintf(\&amp;#34;%s (%d)\&amp;#34;, title, len(rows)))\n+\ty++\n+\n+\tif len(rows) == 0 {\n+\t\ta.drawText(screen, 2, y, tcell.StyleDefault.Foreground(tcell.ColorGray), \&amp;#34;- no sessions -\&amp;#34;)\n+\t\treturn y + 1\n+\t}\n+\n+\tavailable := max((height-1)-y, 1)\n+\tif cursor &amp;lt; 0 {\n+\t\tcursor = 0\n+\t}\n+\tstart := 0\n+\tif cursor &amp;gt;= available {\n+\t\tstart = cursor - available + 1\n+\t}\n+\tend := min(start+available, len(rows))\n+\n+\tfor i := start; i &amp;lt; end; i++ {\n+\t\tif y &amp;gt;= height-1 {\n+\t\t\tbreak\n+\t\t}\n+\t\ts := rows[i]\n+\t\tkeyLabel := \&amp;#34; \&amp;#34;\n+\t\tif r, ok := a.hotkeys[s.Name]; ok {\n+\t\t\tkeyLabel = string(r)\n+\t\t}\n+\t\tattached := \&amp;#34; \&amp;#34;\n+\t\tif s.Attached {\n+\t\t\tattached = \&amp;#34;*\&amp;#34;\n+\t\t}\n+\t\tprefix := \&amp;#34;  \&amp;#34;\n+\t\tstyle := tcell.StyleDefault\n+\t\tif i == cursor &amp;amp;&amp;amp; active {\n+\t\t\tprefix = \&amp;#34;&amp;gt; \&amp;#34;\n+\t\t\tstyle = style.Background(tcell.ColorGray).Foreground(tcell.ColorBlack)\n+\t\t}\n+\t\tif a.mode == modeReorder &amp;amp;&amp;amp; i == cursor &amp;amp;&amp;amp; active {\n+\t\t\tstyle = style.Background(tcell.ColorYellow).Foreground(tcell.ColorBlack)\n+\t\t}\n+\t\trow := fmt.Sprintf(\&amp;#34;%s[%s] %s %s\&amp;#34;, prefix, keyLabel, attached, s.Name)\n+\t\ta.drawText(screen, 0, y, style, truncate(row, width))\n+\t\ty++\n+\t}\n+\n+\treturn y\n+}\n+\n+func (a *app) drawText(screen tcell.Screen, x int, y int, style tcell.Style, text string) {\n+\tfor _, r := range text {\n+\t\tscreen.SetContent(x, y, r, nil, style)\n+\t\tx++\n+\t}\n+}\n+\n+func truncate(text string, width int) string {\n+\tif width &amp;lt;= 0 {\n+\t\treturn \&amp;#34;\&amp;#34;\n+\t}\n+\trunes := []rune(text)\n+\tif len(runes) &amp;lt;= width {\n+\t\treturn text\n+\t}\n+\tif width == 1 {\n+\t\treturn \&amp;#34;…\&amp;#34;\n+\t}\n+\treturn string(runes[:width-1]) + \&amp;#34;…\&amp;#34;\n+}\n+\n+func min(a int, b int) int {\n+\tif a &amp;lt; b {\n+\t\treturn a\n+\t}\n+\treturn b\n+}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;A home/waylon/git/tgo/cmd/tgo/view.go&#xA;&#xA;LSP errors detected in home/waylon/git/tgo/cmd/tgo/view.go, please fix:&#xA;&amp;lt;diagnostics file=&amp;#34;/home/waylon/git/tgo/cmd/tgo/view.go&amp;#34;&amp;gt;&#xA;ERROR [10:27] undefined: tcell&#xA;ERROR [14:17] undefined: tcell&#xA;ERROR [14:47] undefined: tcell&#xA;ERROR [15:15] undefined: tcell&#xA;ERROR [15:45] undefined: tcell&#xA;ERROR [16:17] undefined: tcell&#xA;ERROR [16:47] undefined: tcell&#xA;ERROR [17:16] undefined: tcell&#xA;ERROR [17:46] undefined: tcell&#xA;ERROR [29:31] undefined: tcell&#xA;ERROR [29:61] undefined: tcell&#xA;ERROR [48:34] undefined: tcell&#xA;ERROR [53:16] undefined: tcell&#xA;ERROR [53:46] undefined: tcell&#xA;ERROR [55:49] undefined: tcell&#xA;ERROR [61:28] undefined: tcell&#xA;ERROR [61:58] undefined: tcell&#xA;ERROR [89:12] undefined: tcell&#xA;ERROR [92:29] undefined: tcell&#xA;ERROR [92:57] undefined: tcell&#xA;... and 4 more&#xA;&amp;lt;/diagnostics&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--53s&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--53s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Running dependencies update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go get github.com/gdamore/tcell/v2 &amp;amp;&amp;amp; go mod tidy&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Adds tcell dependency and tidies module&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;go: downloading github.com/gdamore/tcell/v2 v2.13.8&#xA;go: downloading github.com/gdamore/tcell v1.4.1&#xA;go: downloading golang.org/x/text v0.31.0&#xA;go: downloading golang.org/x/term v0.37.0&#xA;go: upgraded go 1.22 =&amp;gt; 1.24.0&#xA;go: added github.com/gdamore/encoding v1.0.1&#xA;go: added github.com/gdamore/tcell/v2 v2.13.8&#xA;go: added github.com/lucasb-eyer/go-colorful v1.3.0&#xA;go: added github.com/rivo/uniseg v0.4.7&#xA;go: added golang.org/x/sys v0.38.0&#xA;go: added golang.org/x/term v0.37.0&#xA;go: added golang.org/x/text v0.31.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--22s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--22s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Assessing Go version upgrade&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/go.mod&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/go.mod&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: module tgo&#xA;2: &#xA;3: go 1.24.0&#xA;4: &#xA;5: require github.com/gdamore/tcell/v2 v2.13.8&#xA;6: &#xA;7: require (&#xA;8: &#x9;github.com/gdamore/encoding v1.0.1 // indirect&#xA;9: &#x9;github.com/lucasb-eyer/go-colorful v1.3.0 // indirect&#xA;10: &#x9;github.com/rivo/uniseg v0.4.7 // indirect&#xA;11: &#x9;golang.org/x/sys v0.38.0 // indirect&#xA;12: &#x9;golang.org/x/term v0.37.0 // indirect&#xA;13: &#x9;golang.org/x/text v0.31.0 // indirect&#xA;14: )&#xA;&#xA;(End of file - total 14 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--99s&#34;&gt;Assistant (Build · gpt-5.3-codex · 9.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--99s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning Go version and lint fixes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go test ./...&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Runs tests to check compilation&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok  &#x9;tgo/cmd/tgo&#x9;0.002s&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--108s&#34;&gt;Assistant (Build · gpt-5.3-codex · 10.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--108s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning input handling fixes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/cmd/tgo/app.go\n@@\n import (\n \t\&amp;#34;fmt\&amp;#34;\n \t\&amp;#34;strings\&amp;#34;\n \t\&amp;#34;time\&amp;#34;\n+\t\&amp;#34;unicode\&amp;#34;\n@@\n \tcursorFav   int\n \tcursorOther int\n-\tscrollFav   int\n-\tscrollOther int\n@@\n-\tif key.Key() == tcell.KeyCtrlC || key.Rune() == &amp;#39;q&amp;#39; {\n+\tif key.Key() == tcell.KeyCtrlC || key.Key() == tcell.KeyEscape {\n \t\treturn true, \&amp;#34;\&amp;#34;\n \t}\n@@\n \tif key.Key() == tcell.KeyRune {\n-\t\tr := key.Rune()\n+\t\tr := unicode.ToLower(key.Rune())\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/cmd/tgo/app.go&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--38s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--38s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating quit hotkey in help text&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/cmd/tgo/view.go\n@@\n-\thelp := \&amp;#34;[letters] switch  [j/k or arrows] move  [tab] section  [space] reorder  [f] favorite  [n] new  [x] kill  [r] refresh  [enter] switch  [q] quit\&amp;#34;\n+\thelp := \&amp;#34;[letters] switch  [j/k or arrows] move  [tab] section  [space] reorder  [f] favorite  [n] new  [x] kill  [r] refresh  [enter] switch  [esc/ctrl+c] quit\&amp;#34;\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/cmd/tgo/view.go&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--194s&#34;&gt;Assistant (Build · gpt-5.3-codex · 19.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--194s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning focused unit tests&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Add File: /home/waylon/git/tgo/cmd/tgo/logic_test.go\n+package main\n+\n+import (\n+\t\&amp;#34;reflect\&amp;#34;\n+\t\&amp;#34;testing\&amp;#34;\n+)\n+\n+func TestNormalizeState(t *testing.T) {\n+\tsessions := []session{{Name: \&amp;#34;api\&amp;#34;}, {Name: \&amp;#34;web\&amp;#34;}, {Name: \&amp;#34;db\&amp;#34;}}\n+\tst := state{\n+\t\tFavorites: []string{\&amp;#34;web\&amp;#34;, \&amp;#34;web\&amp;#34;, \&amp;#34;missing\&amp;#34;, \&amp;#34;api\&amp;#34;},\n+\t\tOrder:     []string{\&amp;#34;db\&amp;#34;, \&amp;#34;api\&amp;#34;, \&amp;#34;missing\&amp;#34;, \&amp;#34;db\&amp;#34;},\n+\t}\n+\n+\tgot := normalizeState(st, sessions)\n+\n+\tif !reflect.DeepEqual(got.Favorites, []string{\&amp;#34;web\&amp;#34;, \&amp;#34;api\&amp;#34;}) {\n+\t\tt.Fatalf(\&amp;#34;favorites mismatch: got %v\&amp;#34;, got.Favorites)\n+\t}\n+\tif !reflect.DeepEqual(got.Order, []string{\&amp;#34;db\&amp;#34;}) {\n+\t\tt.Fatalf(\&amp;#34;order mismatch: got %v\&amp;#34;, got.Order)\n+\t}\n+}\n+\n+func TestOrderSessions(t *testing.T) {\n+\tsessions := []session{{Name: \&amp;#34;api\&amp;#34;}, {Name: \&amp;#34;web\&amp;#34;}, {Name: \&amp;#34;db\&amp;#34;}, {Name: \&amp;#34;docs\&amp;#34;}}\n+\tst := state{\n+\t\tFavorites: []string{\&amp;#34;web\&amp;#34;, \&amp;#34;api\&amp;#34;},\n+\t\tOrder:     []string{\&amp;#34;docs\&amp;#34;, \&amp;#34;db\&amp;#34;},\n+\t}\n+\n+\tfavorites, others := orderSessions(sessions, st)\n+\n+\tif got := names(favorites); !reflect.DeepEqual(got, []string{\&amp;#34;web\&amp;#34;, \&amp;#34;api\&amp;#34;}) {\n+\t\tt.Fatalf(\&amp;#34;favorites order mismatch: got %v\&amp;#34;, got)\n+\t}\n+\tif got := names(others); !reflect.DeepEqual(got, []string{\&amp;#34;docs\&amp;#34;, \&amp;#34;db\&amp;#34;}) {\n+\t\tt.Fatalf(\&amp;#34;others order mismatch: got %v\&amp;#34;, got)\n+\t}\n+}\n+\n+func TestAssignHotkeys(t *testing.T) {\n+\tfavorites := []session{{Name: \&amp;#34;web\&amp;#34;}, {Name: \&amp;#34;api\&amp;#34;}}\n+\tothers := []session{{Name: \&amp;#34;db\&amp;#34;}, {Name: \&amp;#34;docs\&amp;#34;}}\n+\n+\tgot := assignHotkeys(favorites, others, SessionHotkeyAlphabet())\n+\n+\tassertHotkey(t, got, \&amp;#34;web\&amp;#34;, &amp;#39;a&amp;#39;)\n+\tassertHotkey(t, got, \&amp;#34;api\&amp;#34;, &amp;#39;s&amp;#39;)\n+\tassertHotkey(t, got, \&amp;#34;db\&amp;#34;, &amp;#39;d&amp;#39;)\n+\tassertHotkey(t, got, \&amp;#34;docs\&amp;#34;, &amp;#39;f&amp;#39;)\n+}\n+\n+func TestAssignHotkeysLimit(t *testing.T) {\n+\talpha := \&amp;#34;as\&amp;#34;\n+\tfavorites := []session{{Name: \&amp;#34;one\&amp;#34;}}\n+\tothers := []session{{Name: \&amp;#34;two\&amp;#34;}, {Name: \&amp;#34;three\&amp;#34;}}\n+\n+\tgot := assignHotkeys(favorites, others, alpha)\n+\n+\tassertHotkey(t, got, \&amp;#34;one\&amp;#34;, &amp;#39;a&amp;#39;)\n+\tassertHotkey(t, got, \&amp;#34;two\&amp;#34;, &amp;#39;s&amp;#39;)\n+\tif _, ok := got[\&amp;#34;three\&amp;#34;]; ok {\n+\t\tt.Fatalf(\&amp;#34;expected no hotkey for third session\&amp;#34;)\n+\t}\n+}\n+\n+func names(sessions []session) []string {\n+\tout := make([]string, 0, len(sessions))\n+\tfor _, s := range sessions {\n+\t\tout = append(out, s.Name)\n+\t}\n+\treturn out\n+}\n+\n+func assertHotkey(t *testing.T, got map[string]rune, name string, expected rune) {\n+\tt.Helper()\n+\tif got[name] != expected {\n+\t\tt.Fatalf(\&amp;#34;hotkey mismatch for %s: got %q want %q\&amp;#34;, name, got[name], expected)\n+\t}\n+}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;A home/waylon/git/tgo/cmd/tgo/logic_test.go&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--191s&#34;&gt;Assistant (Build · gpt-5.3-codex · 19.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--191s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning README rewrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/README.md\n@@\n-# tgo\n-\n-tgo is a tmux session switcher optimized for speed and predictability. It runs inside a tmux popup or terminal, draws the active sessions, highlights favorites, and lets you switch with a single letter after opening (two keystrokes overall). The focus is low latency: the popup hotkey triggers `tgo`, and the keyboard-only UI assumes tmux-level terminal performance and responsive layouts.\n-\n-## UX guidance\n-\n-- **Two-keystroke flow**: Press the tmux popup hotkey, then tap the letter mapped to the target session. No arrow navigation, no typing a name twice.\n-- **Key map**: `asdf qwert zxcvb` serves as the ordered list of hotkeys. Favorites are pinned to the top of the list so that letters stay stable even when promting terminals resize.\n-- **Sizing**: `tgo` will render the session list responsively so that both narrow popups and larger terminals remain usable—critical for tmux popup contexts.\n-\n-## Architecture notes\n-\n-- `cmd/tgo` contains the CLI entry point and will orchestrate session discovery, layout, and rendering logic.\n-- Session data comes from tmux via shell calls (placeholder now), with an overlay layer for the favorites list and letter assignment.\n-- UI rendering will target the terminal/popup dimensions reported by tmux, keeping control loops synchronous so the hotkey response stays within one frame.\n-\n-## Local workflow (using `just`)\n-\n-1. Install [just](https://github.com/casey/just) if missing.\n-2. `just fmt` to format Go files.\n-3. `just lint` to run `golangci-lint` if it is installed (falls back to a warning otherwise).\n-4. `just test` to exercise the package.\n-5. `just build` produces `bin/tgo` under the repository root.\n-6. `just run` executes the CLI locally.\n-7. `just tidy` keeps `go.mod` and `go.sum` neat.\n-8. `just ci` runs `fmt`, `lint`, and `test` in sequence for a quick check before pushing.\n-\n-## Example tmux binding\n-\n-```tmux\n-bind-key q run-shell \&amp;#34;tmux popup -E &amp;#39;tgo&amp;#39;\&amp;#34;\n-```\n-\n-This binding opens a popup that immediately starts `tgo`, letting you press one of the letters from `asdfqwertzxcvb` to jump to the desired session.\n+# tgo\n+\n+`tgo` is a fast tmux session switcher built for popup workflows.\n+\n+The core flow is two keystrokes:\n+\n+1. open `tgo` in a tmux popup from a tmux key binding\n+2. press the session letter and switch instantly\n+\n+`tgo` lists tmux sessions, pins favorites at the top, and keeps hotkeys stable by priority.\n+\n+## Features\n+\n+- responsive terminal UI that works in standard terminals and tmux popups\n+- direct switch hotkeys using `asdfqwertzxcvb`\n+- favorite pinning with favorites always rendered first\n+- reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment\n+- tmux session management from the UI: create (`n`) and kill (`x`)\n+\n+## Keymap\n+\n+- `asdfqwertzxcvb`: switch directly to listed session\n+- `j/k` or arrow keys: move cursor\n+- `tab`: switch active section (`Favorites` / `Others`)\n+- `space`: toggle reorder mode for selected session\n+- `enter`: switch to selected session\n+- `f`: toggle favorite on selected session\n+- `n`: create new tmux session (type name, `enter`)\n+- `x`: kill selected tmux session\n+- `r`: refresh tmux session list\n+- `esc` or `ctrl+c`: quit\n+\n+## tmux popup binding\n+\n+```tmux\n+bind-key g display-popup -E -w 70% -h 70% \&amp;#34;tgo\&amp;#34;\n+```\n+\n+Pick any key you want instead of `g`.\n+\n+## State storage\n+\n+`tgo` stores favorites and non-favorite ordering in:\n+\n+- `~/.config/tgo/state.json`\n+\n+Missing or stale sessions are automatically removed from saved state.\n+\n+## Local development\n+\n+1. Install [just](https://github.com/casey/just)\n+2. Run `just build` to produce `bin/tgo`\n+3. Run `just run` inside tmux to use the app\n+4. Run `just ci` before pushing changes\n+\n+## Notes\n+\n+- `tgo` expects a running tmux server and a tmux client context.\n+- switching is implemented with `tmux switch-client -t &amp;lt;session&amp;gt;`.\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/README.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--51s&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--51s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating changelog&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/CHANGELOG.md\n@@\n ## [Unreleased]\n \n ### Added\n-- base Go module, CLI entry point, and placeholder session hotkey collection.\n-- `justfile` with formatter, lint, test, build, run, tidy, and CI recipes.\n-- `README.md` describing the command, UX goal, architecture notes, tmux binding, and local workflow.\n-- `CHANGELOG.md` initial structure plus README and changelog.\n-- GitHub workflows for CI, dependency updates, and release automation, along with cross-platform binary packaging and checksums.\n+- interactive TUI built with `tcell`, including responsive rendering for tmux popup usage.\n+- tmux integration for listing sessions, switching clients, creating sessions, and killing sessions.\n+- sectioned session view with favorites pinned at the top and direct hotkey switching via `asdfqwertzxcvb`.\n+- reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment.\n+- persisted state file at `~/.config/tgo/state.json` with normalization for removed/stale sessions.\n+- unit tests for ordering, normalization, and hotkey assignment logic.\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/CHANGELOG.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--45s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--45s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating CI Go version and release workflow&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/.github/workflows/ci.yml\n@@\n       - name: Set up Go\n         uses: actions/setup-go@v5\n         with:\n-          go-version: 1.22\n+          go-version: 1.24\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/.github/workflows/ci.yml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/.github/workflows/release.yml\n@@\n       - name: Set up Go\n         uses: actions/setup-go@v5\n         with:\n-          go-version: 1.22\n+          go-version: 1.24\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/.github/workflows/release.yml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--39s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--39s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Running gofmt and tests&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gofmt -w ./cmd/tgo/*.go &amp;amp;&amp;amp; go test ./...&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Formats Go files and runs tests&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok  &#x9;tgo/cmd/tgo&#x9;0.003s&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--47s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.7s) &lt;a href=&#34;#assistant-build--gpt-53-codex--47s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning sequential test updates&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Inspect current tgo scaffold and define concrete TUI/session management architecture&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Implement tmux integration and persistent state (favorites/order)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Implement interactive TUI with navigation, section switching, hotkeys, and reorder mode&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Update README with implemented behavior and usage&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Add/expand tests for key mapping, ordering, and state normalization&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;medium&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run formatting and tests to validate full functionality&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Inspect current tgo scaffold and define concrete TUI/session management architecture&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Implement tmux integration and persistent state (favorites/order)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Implement interactive TUI with navigation, section switching, hotkeys, and reorder mode&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Update README with implemented behavior and usage&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;medium&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Add/expand tests for key mapping, ordering, and state normalization&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;medium&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Run formatting and tests to validate full functionality&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--42s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--42s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reviewing main application code&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/app.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/app.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import (&#xA;4: &#x9;&amp;#34;fmt&amp;#34;&#xA;5: &#x9;&amp;#34;strings&amp;#34;&#xA;6: &#x9;&amp;#34;time&amp;#34;&#xA;7: &#x9;&amp;#34;unicode&amp;#34;&#xA;8: &#xA;9: &#x9;&amp;#34;github.com/gdamore/tcell/v2&amp;#34;&#xA;10: )&#xA;11: &#xA;12: type mode int&#xA;13: &#xA;14: const (&#xA;15: &#x9;modeNormal mode = iota&#xA;16: &#x9;modeReorder&#xA;17: &#x9;modeCreate&#xA;18: )&#xA;19: &#xA;20: type app struct {&#xA;21: &#x9;client tmuxClient&#xA;22: &#x9;store  *stateStore&#xA;23: &#xA;24: &#x9;state     state&#xA;25: &#x9;sessions  []session&#xA;26: &#x9;favorites []session&#xA;27: &#x9;others    []session&#xA;28: &#x9;hotkeys   map[string]rune&#xA;29: &#xA;30: &#x9;section     int&#xA;31: &#x9;cursorFav   int&#xA;32: &#x9;cursorOther int&#xA;33: &#xA;34: &#x9;mode        mode&#xA;35: &#x9;createInput string&#xA;36: &#xA;37: &#x9;status       string&#xA;38: &#x9;statusExpiry time.Time&#xA;39: }&#xA;40: &#xA;41: func newApp(client tmuxClient, store *stateStore) (*app, error) {&#xA;42: &#x9;st, err := store.Load()&#xA;43: &#x9;if err != nil {&#xA;44: &#x9;&#x9;return nil, err&#xA;45: &#x9;}&#xA;46: &#x9;a := &amp;amp;app{client: client, store: store, state: st}&#xA;47: &#x9;if err := a.refreshSessions(); err != nil {&#xA;48: &#x9;&#x9;return nil, err&#xA;49: &#x9;}&#xA;50: &#x9;return a, nil&#xA;51: }&#xA;52: &#xA;53: func (a *app) Run() error {&#xA;54: &#x9;screen, err := tcell.NewScreen()&#xA;55: &#x9;if err != nil {&#xA;56: &#x9;&#x9;return fmt.Errorf(&amp;#34;create screen: %w&amp;#34;, err)&#xA;57: &#x9;}&#xA;58: &#x9;if err := screen.Init(); err != nil {&#xA;59: &#x9;&#x9;return fmt.Errorf(&amp;#34;init screen: %w&amp;#34;, err)&#xA;60: &#x9;}&#xA;61: &#x9;defer screen.Fini()&#xA;62: &#xA;63: &#x9;screen.HideCursor()&#xA;64: &#x9;a.draw(screen)&#xA;65: &#xA;66: &#x9;for {&#xA;67: &#x9;&#x9;ev := screen.PollEvent()&#xA;68: &#x9;&#x9;switch e := ev.(type) {&#xA;69: &#x9;&#x9;case *tcell.EventResize:&#xA;70: &#x9;&#x9;&#x9;screen.Sync()&#xA;71: &#x9;&#x9;&#x9;a.draw(screen)&#xA;72: &#x9;&#x9;case *tcell.EventKey:&#xA;73: &#x9;&#x9;&#x9;done, runSwitch := a.handleKey(e)&#xA;74: &#x9;&#x9;&#x9;if runSwitch != &amp;#34;&amp;#34; {&#xA;75: &#x9;&#x9;&#x9;&#x9;screen.Fini()&#xA;76: &#x9;&#x9;&#x9;&#x9;if err := a.client.SwitchSession(runSwitch); err != nil {&#xA;77: &#x9;&#x9;&#x9;&#x9;&#x9;return err&#xA;78: &#x9;&#x9;&#x9;&#x9;}&#xA;79: &#x9;&#x9;&#x9;&#x9;return nil&#xA;80: &#x9;&#x9;&#x9;}&#xA;81: &#x9;&#x9;&#x9;if done {&#xA;82: &#x9;&#x9;&#x9;&#x9;return nil&#xA;83: &#x9;&#x9;&#x9;}&#xA;84: &#x9;&#x9;&#x9;a.draw(screen)&#xA;85: &#x9;&#x9;}&#xA;86: &#x9;}&#xA;87: }&#xA;88: &#xA;89: func (a *app) handleKey(key *tcell.EventKey) (done bool, switchTo string) {&#xA;90: &#x9;if a.mode == modeCreate {&#xA;91: &#x9;&#x9;return a.handleCreateKey(key)&#xA;92: &#x9;}&#xA;93: &#xA;94: &#x9;if key.Key() == tcell.KeyCtrlC || key.Key() == tcell.KeyEscape {&#xA;95: &#x9;&#x9;return true, &amp;#34;&amp;#34;&#xA;96: &#x9;}&#xA;97: &#xA;98: &#x9;if key.Key() == tcell.KeyTab {&#xA;99: &#x9;&#x9;a.toggleSection()&#xA;100: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;101: &#x9;}&#xA;102: &#xA;103: &#x9;if key.Key() == tcell.KeyEnter {&#xA;104: &#x9;&#x9;if name, ok := a.selectedName(); ok {&#xA;105: &#x9;&#x9;&#x9;return false, name&#xA;106: &#x9;&#x9;}&#xA;107: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;108: &#x9;}&#xA;109: &#xA;110: &#x9;if key.Key() == tcell.KeyRune {&#xA;111: &#x9;&#x9;r := unicode.ToLower(key.Rune())&#xA;112: &#x9;&#x9;if name, ok := a.hotkeyTarget(r); ok {&#xA;113: &#x9;&#x9;&#x9;return false, name&#xA;114: &#x9;&#x9;}&#xA;115: &#x9;&#x9;switch r {&#xA;116: &#x9;&#x9;case &amp;#39;j&amp;#39;:&#xA;117: &#x9;&#x9;&#x9;a.moveDown()&#xA;118: &#x9;&#x9;case &amp;#39;k&amp;#39;:&#xA;119: &#x9;&#x9;&#x9;a.moveUp()&#xA;120: &#x9;&#x9;case &amp;#39; &amp;#39;:&#xA;121: &#x9;&#x9;&#x9;a.toggleReorderMode()&#xA;122: &#x9;&#x9;case &amp;#39;f&amp;#39;:&#xA;123: &#x9;&#x9;&#x9;a.toggleFavorite()&#xA;124: &#x9;&#x9;case &amp;#39;x&amp;#39;:&#xA;125: &#x9;&#x9;&#x9;a.killSelected()&#xA;126: &#x9;&#x9;case &amp;#39;n&amp;#39;:&#xA;127: &#x9;&#x9;&#x9;a.mode = modeCreate&#xA;128: &#x9;&#x9;&#x9;a.createInput = &amp;#34;&amp;#34;&#xA;129: &#x9;&#x9;&#x9;a.status = &amp;#34;new session: type name and press Enter&amp;#34;&#xA;130: &#x9;&#x9;&#x9;a.statusExpiry = time.Time{}&#xA;131: &#x9;&#x9;case &amp;#39;r&amp;#39;:&#xA;132: &#x9;&#x9;&#x9;if err := a.refreshSessions(); err != nil {&#xA;133: &#x9;&#x9;&#x9;&#x9;a.setError(err)&#xA;134: &#x9;&#x9;&#x9;}&#xA;135: &#x9;&#x9;}&#xA;136: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;137: &#x9;}&#xA;138: &#xA;139: &#x9;switch key.Key() {&#xA;140: &#x9;case tcell.KeyUp:&#xA;141: &#x9;&#x9;a.moveUp()&#xA;142: &#x9;case tcell.KeyDown:&#xA;143: &#x9;&#x9;a.moveDown()&#xA;144: &#x9;}&#xA;145: &#xA;146: &#x9;return false, &amp;#34;&amp;#34;&#xA;147: }&#xA;148: &#xA;149: func (a *app) handleCreateKey(key *tcell.EventKey) (bool, string) {&#xA;150: &#x9;switch key.Key() {&#xA;151: &#x9;case tcell.KeyEsc:&#xA;152: &#x9;&#x9;a.mode = modeNormal&#xA;153: &#x9;&#x9;a.setStatus(&amp;#34;create canceled&amp;#34;)&#xA;154: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;155: &#x9;case tcell.KeyEnter:&#xA;156: &#x9;&#x9;name := strings.TrimSpace(a.createInput)&#xA;157: &#x9;&#x9;if name == &amp;#34;&amp;#34; {&#xA;158: &#x9;&#x9;&#x9;a.setStatus(&amp;#34;session name cannot be empty&amp;#34;)&#xA;159: &#x9;&#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;160: &#x9;&#x9;}&#xA;161: &#x9;&#x9;if err := a.client.NewSession(name); err != nil {&#xA;162: &#x9;&#x9;&#x9;a.setError(err)&#xA;163: &#x9;&#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;164: &#x9;&#x9;}&#xA;165: &#x9;&#x9;a.mode = modeNormal&#xA;166: &#x9;&#x9;a.createInput = &amp;#34;&amp;#34;&#xA;167: &#x9;&#x9;if err := a.refreshSessions(); err != nil {&#xA;168: &#x9;&#x9;&#x9;a.setError(err)&#xA;169: &#x9;&#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;170: &#x9;&#x9;}&#xA;171: &#x9;&#x9;a.selectByName(name)&#xA;172: &#x9;&#x9;a.setStatus(fmt.Sprintf(&amp;#34;created %s&amp;#34;, name))&#xA;173: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;174: &#x9;case tcell.KeyBackspace, tcell.KeyBackspace2:&#xA;175: &#x9;&#x9;if len(a.createInput) &amp;gt; 0 {&#xA;176: &#x9;&#x9;&#x9;a.createInput = a.createInput[:len(a.createInput)-1]&#xA;177: &#x9;&#x9;}&#xA;178: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;179: &#x9;case tcell.KeyRune:&#xA;180: &#x9;&#x9;r := key.Rune()&#xA;181: &#x9;&#x9;if r &amp;gt;= 32 &amp;amp;&amp;amp; r &amp;lt;= 126 {&#xA;182: &#x9;&#x9;&#x9;a.createInput += string(r)&#xA;183: &#x9;&#x9;}&#xA;184: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;185: &#x9;default:&#xA;186: &#x9;&#x9;return false, &amp;#34;&amp;#34;&#xA;187: &#x9;}&#xA;188: }&#xA;189: &#xA;190: func (a *app) toggleSection() {&#xA;191: &#x9;if len(a.favorites) == 0 &amp;amp;&amp;amp; len(a.others) == 0 {&#xA;192: &#x9;&#x9;return&#xA;193: &#x9;}&#xA;194: &#x9;if a.section == 0 {&#xA;195: &#x9;&#x9;if len(a.others) &amp;gt; 0 {&#xA;196: &#x9;&#x9;&#x9;a.section = 1&#xA;197: &#x9;&#x9;}&#xA;198: &#x9;&#x9;return&#xA;199: &#x9;}&#xA;200: &#x9;if len(a.favorites) &amp;gt; 0 {&#xA;201: &#x9;&#x9;a.section = 0&#xA;202: &#x9;}&#xA;203: }&#xA;204: &#xA;205: func (a *app) moveUp() {&#xA;206: &#x9;if a.mode == modeReorder {&#xA;207: &#x9;&#x9;a.reorder(-1)&#xA;208: &#x9;&#x9;return&#xA;209: &#x9;}&#xA;210: &#x9;if a.section == 0 {&#xA;211: &#x9;&#x9;if a.cursorFav &amp;gt; 0 {&#xA;212: &#x9;&#x9;&#x9;a.cursorFav--&#xA;213: &#x9;&#x9;}&#xA;214: &#x9;&#x9;return&#xA;215: &#x9;}&#xA;216: &#x9;if a.cursorOther &amp;gt; 0 {&#xA;217: &#x9;&#x9;a.cursorOther--&#xA;218: &#x9;}&#xA;219: }&#xA;220: &#xA;221: func (a *app) moveDown() {&#xA;222: &#x9;if a.mode == modeReorder {&#xA;223: &#x9;&#x9;a.reorder(1)&#xA;224: &#x9;&#x9;return&#xA;225: &#x9;}&#xA;226: &#x9;if a.section == 0 {&#xA;227: &#x9;&#x9;if a.cursorFav &amp;lt; len(a.favorites)-1 {&#xA;228: &#x9;&#x9;&#x9;a.cursorFav++&#xA;229: &#x9;&#x9;}&#xA;230: &#x9;&#x9;return&#xA;231: &#x9;}&#xA;232: &#x9;if a.cursorOther &amp;lt; len(a.others)-1 {&#xA;233: &#x9;&#x9;a.cursorOther++&#xA;234: &#x9;}&#xA;235: }&#xA;236: &#xA;237: func (a *app) toggleReorderMode() {&#xA;238: &#x9;if _, ok := a.selectedName(); !ok {&#xA;239: &#x9;&#x9;return&#xA;240: &#x9;}&#xA;241: &#x9;if a.mode == modeReorder {&#xA;242: &#x9;&#x9;a.mode = modeNormal&#xA;243: &#x9;&#x9;a.setStatus(&amp;#34;reorder mode off&amp;#34;)&#xA;244: &#x9;&#x9;return&#xA;245: &#x9;}&#xA;246: &#x9;a.mode = modeReorder&#xA;247: &#x9;a.setStatus(&amp;#34;reorder mode on: j/k moves selected session&amp;#34;)&#xA;248: }&#xA;249: &#xA;250: func (a *app) toggleFavorite() {&#xA;251: &#x9;name, ok := a.selectedName()&#xA;252: &#x9;if !ok {&#xA;253: &#x9;&#x9;return&#xA;254: &#x9;}&#xA;255: &#xA;256: &#x9;idx := indexOf(a.state.Favorites, name)&#xA;257: &#x9;if idx &amp;gt;= 0 {&#xA;258: &#x9;&#x9;a.state.Favorites = removeAt(a.state.Favorites, idx)&#xA;259: &#x9;&#x9;a.state.Order = append([]string{name}, a.state.Order...)&#xA;260: &#x9;&#x9;a.setStatus(fmt.Sprintf(&amp;#34;unfavorited %s&amp;#34;, name))&#xA;261: &#x9;} else {&#xA;262: &#x9;&#x9;a.state.Favorites = append(a.state.Favorites, name)&#xA;263: &#x9;&#x9;a.state.Order = removeByValue(a.state.Order, name)&#xA;264: &#x9;&#x9;a.setStatus(fmt.Sprintf(&amp;#34;favorited %s&amp;#34;, name))&#xA;265: &#x9;}&#xA;266: &#x9;if err := a.persistAndRebuild(); err != nil {&#xA;267: &#x9;&#x9;a.setError(err)&#xA;268: &#x9;}&#xA;269: }&#xA;270: &#xA;271: func (a *app) reorder(delta int) {&#xA;272: &#x9;name, ok := a.selectedName()&#xA;273: &#x9;if !ok {&#xA;274: &#x9;&#x9;return&#xA;275: &#x9;}&#xA;276: &#x9;if a.section == 0 {&#xA;277: &#x9;&#x9;idx := indexOf(a.state.Favorites, name)&#xA;278: &#x9;&#x9;if idx &amp;lt; 0 {&#xA;279: &#x9;&#x9;&#x9;return&#xA;280: &#x9;&#x9;}&#xA;281: &#x9;&#x9;newIdx := idx + delta&#xA;282: &#x9;&#x9;if newIdx &amp;lt; 0 || newIdx &amp;gt;= len(a.state.Favorites) {&#xA;283: &#x9;&#x9;&#x9;return&#xA;284: &#x9;&#x9;}&#xA;285: &#x9;&#x9;a.state.Favorites[idx], a.state.Favorites[newIdx] = a.state.Favorites[newIdx], a.state.Favorites[idx]&#xA;286: &#x9;&#x9;a.cursorFav = newIdx&#xA;287: &#x9;} else {&#xA;288: &#x9;&#x9;names := make([]string, 0, len(a.others))&#xA;289: &#x9;&#x9;for _, s := range a.others {&#xA;290: &#x9;&#x9;&#x9;names = append(names, s.Name)&#xA;291: &#x9;&#x9;}&#xA;292: &#x9;&#x9;idx := indexOf(names, name)&#xA;293: &#x9;&#x9;if idx &amp;lt; 0 {&#xA;294: &#x9;&#x9;&#x9;return&#xA;295: &#x9;&#x9;}&#xA;296: &#x9;&#x9;newIdx := idx + delta&#xA;297: &#x9;&#x9;if newIdx &amp;lt; 0 || newIdx &amp;gt;= len(names) {&#xA;298: &#x9;&#x9;&#x9;return&#xA;299: &#x9;&#x9;}&#xA;300: &#x9;&#x9;names[idx], names[newIdx] = names[newIdx], names[idx]&#xA;301: &#x9;&#x9;a.state.Order = names&#xA;302: &#x9;&#x9;a.cursorOther = newIdx&#xA;303: &#x9;}&#xA;304: &#x9;if err := a.persistAndRebuild(); err != nil {&#xA;305: &#x9;&#x9;a.setError(err)&#xA;306: &#x9;&#x9;return&#xA;307: &#x9;}&#xA;308: &#x9;a.setStatus(&amp;#34;priority updated&amp;#34;)&#xA;309: }&#xA;310: &#xA;311: func (a *app) killSelected() {&#xA;312: &#x9;name, ok := a.selectedName()&#xA;313: &#x9;if !ok {&#xA;314: &#x9;&#x9;return&#xA;315: &#x9;}&#xA;316: &#x9;if err := a.client.KillSession(name); err != nil {&#xA;317: &#x9;&#x9;a.setError(err)&#xA;318: &#x9;&#x9;return&#xA;319: &#x9;}&#xA;320: &#x9;a.state.Favorites = removeByValue(a.state.Favorites, name)&#xA;321: &#x9;a.state.Order = removeByValue(a.state.Order, name)&#xA;322: &#x9;if err := a.persistAndRebuild(); err != nil {&#xA;323: &#x9;&#x9;a.setError(err)&#xA;324: &#x9;&#x9;return&#xA;325: &#x9;}&#xA;326: &#x9;a.setStatus(fmt.Sprintf(&amp;#34;killed %s&amp;#34;, name))&#xA;327: }&#xA;328: &#xA;329: func (a *app) refreshSessions() error {&#xA;330: &#x9;sessions, err := a.client.ListSessions()&#xA;331: &#x9;if err != nil {&#xA;332: &#x9;&#x9;return err&#xA;333: &#x9;}&#xA;334: &#x9;a.sessions = sessions&#xA;335: &#x9;a.state = normalizeState(a.state, sessions)&#xA;336: &#x9;a.rebuildLists()&#xA;337: &#x9;if err := a.store.Save(a.state); err != nil {&#xA;338: &#x9;&#x9;return err&#xA;339: &#x9;}&#xA;340: &#x9;return nil&#xA;341: }&#xA;342: &#xA;343: func (a *app) persistAndRebuild() error {&#xA;344: &#x9;a.state = normalizeState(a.state, a.sessions)&#xA;345: &#x9;a.rebuildLists()&#xA;346: &#x9;return a.store.Save(a.state)&#xA;347: }&#xA;348: &#xA;349: func (a *app) rebuildLists() {&#xA;350: &#x9;a.favorites, a.others = orderSessions(a.sessions, a.state)&#xA;351: &#x9;a.hotkeys = assignHotkeys(a.favorites, a.others, SessionHotkeyAlphabet())&#xA;352: &#x9;a.clampCursors()&#xA;353: }&#xA;354: &#xA;355: func (a *app) clampCursors() {&#xA;356: &#x9;if a.cursorFav &amp;gt;= len(a.favorites) {&#xA;357: &#x9;&#x9;a.cursorFav = max(len(a.favorites)-1, 0)&#xA;358: &#x9;}&#xA;359: &#x9;if a.cursorOther &amp;gt;= len(a.others) {&#xA;360: &#x9;&#x9;a.cursorOther = max(len(a.others)-1, 0)&#xA;361: &#x9;}&#xA;362: &#x9;if a.section == 0 &amp;amp;&amp;amp; len(a.favorites) == 0 &amp;amp;&amp;amp; len(a.others) &amp;gt; 0 {&#xA;363: &#x9;&#x9;a.section = 1&#xA;364: &#x9;}&#xA;365: &#x9;if a.section == 1 &amp;amp;&amp;amp; len(a.others) == 0 &amp;amp;&amp;amp; len(a.favorites) &amp;gt; 0 {&#xA;366: &#x9;&#x9;a.section = 0&#xA;367: &#x9;}&#xA;368: }&#xA;369: &#xA;370: func (a *app) selectedName() (string, bool) {&#xA;371: &#x9;if a.section == 0 {&#xA;372: &#x9;&#x9;if len(a.favorites) == 0 {&#xA;373: &#x9;&#x9;&#x9;return &amp;#34;&amp;#34;, false&#xA;374: &#x9;&#x9;}&#xA;375: &#x9;&#x9;return a.favorites[a.cursorFav].Name, true&#xA;376: &#x9;}&#xA;377: &#x9;if len(a.others) == 0 {&#xA;378: &#x9;&#x9;return &amp;#34;&amp;#34;, false&#xA;379: &#x9;}&#xA;380: &#x9;return a.others[a.cursorOther].Name, true&#xA;381: }&#xA;382: &#xA;383: func (a *app) hotkeyTarget(r rune) (string, bool) {&#xA;384: &#x9;for name, key := range a.hotkeys {&#xA;385: &#x9;&#x9;if key == r {&#xA;386: &#x9;&#x9;&#x9;return name, true&#xA;387: &#x9;&#x9;}&#xA;388: &#x9;}&#xA;389: &#x9;return &amp;#34;&amp;#34;, false&#xA;390: }&#xA;391: &#xA;392: func (a *app) selectByName(name string) {&#xA;393: &#x9;if idx := indexSession(a.favorites, name); idx &amp;gt;= 0 {&#xA;394: &#x9;&#x9;a.section = 0&#xA;395: &#x9;&#x9;a.cursorFav = idx&#xA;396: &#x9;&#x9;return&#xA;397: &#x9;}&#xA;398: &#x9;if idx := indexSession(a.others, name); idx &amp;gt;= 0 {&#xA;399: &#x9;&#x9;a.section = 1&#xA;400: &#x9;&#x9;a.cursorOther = idx&#xA;401: &#x9;}&#xA;402: }&#xA;403: &#xA;404: func (a *app) setStatus(msg string) {&#xA;405: &#x9;a.status = msg&#xA;406: &#x9;a.statusExpiry = time.Now().Add(4 * time.Second)&#xA;407: }&#xA;408: &#xA;409: func (a *app) setError(err error) {&#xA;410: &#x9;a.status = &amp;#34;error: &amp;#34; + err.Error()&#xA;411: &#x9;a.statusExpiry = time.Now().Add(8 * time.Second)&#xA;412: }&#xA;413: &#xA;414: func (a *app) visibleStatus() string {&#xA;415: &#x9;if a.status == &amp;#34;&amp;#34; {&#xA;416: &#x9;&#x9;return &amp;#34;&amp;#34;&#xA;417: &#x9;}&#xA;418: &#x9;if a.statusExpiry.IsZero() || time.Now().Before(a.statusExpiry) {&#xA;419: &#x9;&#x9;return a.status&#xA;420: &#x9;}&#xA;421: &#x9;a.status = &amp;#34;&amp;#34;&#xA;422: &#x9;return &amp;#34;&amp;#34;&#xA;423: }&#xA;424: &#xA;425: func indexSession(sessions []session, name string) int {&#xA;426: &#x9;for i, s := range sessions {&#xA;427: &#x9;&#x9;if s.Name == name {&#xA;428: &#x9;&#x9;&#x9;return i&#xA;429: &#x9;&#x9;}&#xA;430: &#x9;}&#xA;431: &#x9;return -1&#xA;432: }&#xA;433: &#xA;434: func indexOf(items []string, target string) int {&#xA;435: &#x9;for i, item := range items {&#xA;436: &#x9;&#x9;if item == target {&#xA;437: &#x9;&#x9;&#x9;return i&#xA;438: &#x9;&#x9;}&#xA;439: &#x9;}&#xA;440: &#x9;return -1&#xA;441: }&#xA;442: &#xA;443: func removeAt(items []string, idx int) []string {&#xA;444: &#x9;out := make([]string, 0, len(items)-1)&#xA;445: &#x9;out = append(out, items[:idx]...)&#xA;446: &#x9;out = append(out, items[idx+1:]...)&#xA;447: &#x9;return out&#xA;448: }&#xA;449: &#xA;450: func removeByValue(items []string, target string) []string {&#xA;451: &#x9;out := make([]string, 0, len(items))&#xA;452: &#x9;for _, item := range items {&#xA;453: &#x9;&#x9;if item == target {&#xA;454: &#x9;&#x9;&#x9;continue&#xA;455: &#x9;&#x9;}&#xA;456: &#x9;&#x9;out = append(out, item)&#xA;457: &#x9;}&#xA;458: &#x9;return out&#xA;459: }&#xA;460: &#xA;461: func max(a int, b int) int {&#xA;462: &#x9;if a &amp;gt; b {&#xA;463: &#x9;&#x9;return a&#xA;464: &#x9;}&#xA;465: &#x9;return b&#xA;466: }&#xA;&#xA;(End of file - total 466 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/view.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/view.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import (&#xA;4: &#x9;&amp;#34;fmt&amp;#34;&#xA;5: &#x9;&amp;#34;strings&amp;#34;&#xA;6: &#xA;7: &#x9;&amp;#34;github.com/gdamore/tcell/v2&amp;#34;&#xA;8: )&#xA;9: &#xA;10: func (a *app) draw(screen tcell.Screen) {&#xA;11: &#x9;width, height := screen.Size()&#xA;12: &#x9;screen.Clear()&#xA;13: &#xA;14: &#x9;headerStyle := tcell.StyleDefault.Foreground(tcell.ColorAqua).Bold(true)&#xA;15: &#x9;helpStyle := tcell.StyleDefault.Foreground(tcell.ColorGray)&#xA;16: &#x9;statusStyle := tcell.StyleDefault.Foreground(tcell.ColorGreen)&#xA;17: &#x9;errorStyle := tcell.StyleDefault.Foreground(tcell.ColorRed)&#xA;18: &#xA;19: &#x9;line := 0&#xA;20: &#x9;a.drawText(screen, 0, line, headerStyle, &amp;#34;tgo - tmux session switcher&amp;#34;)&#xA;21: &#x9;line++&#xA;22: &#xA;23: &#x9;help := &amp;#34;[letters] switch  [j/k or arrows] move  [tab] section  [space] reorder  [f] favorite  [n] new  [x] kill  [r] refresh  [enter] switch  [esc/ctrl+c] quit&amp;#34;&#xA;24: &#x9;a.drawText(screen, 0, line, helpStyle, truncate(help, width))&#xA;25: &#x9;line++&#xA;26: &#xA;27: &#x9;if a.mode == modeCreate {&#xA;28: &#x9;&#x9;prompt := &amp;#34;new session name: &amp;#34; + a.createInput&#xA;29: &#x9;&#x9;a.drawText(screen, 0, line, tcell.StyleDefault.Foreground(tcell.ColorYellow), truncate(prompt, width))&#xA;30: &#x9;&#x9;line++&#xA;31: &#x9;}&#xA;32: &#xA;33: &#x9;line = a.drawSection(screen, line, width, height, &amp;#34;Favorites&amp;#34;, a.favorites, a.cursorFav, a.section == 0)&#xA;34: &#x9;line = a.drawSection(screen, line, width, height, &amp;#34;Others&amp;#34;, a.others, a.cursorOther, a.section == 1)&#xA;35: &#xA;36: &#x9;status := a.visibleStatus()&#xA;37: &#x9;if status != &amp;#34;&amp;#34; {&#xA;38: &#x9;&#x9;style := statusStyle&#xA;39: &#x9;&#x9;if strings.HasPrefix(status, &amp;#34;error:&amp;#34;) {&#xA;40: &#x9;&#x9;&#x9;style = errorStyle&#xA;41: &#x9;&#x9;}&#xA;42: &#x9;&#x9;a.drawText(screen, 0, height-1, style, truncate(status, width))&#xA;43: &#x9;}&#xA;44: &#xA;45: &#x9;screen.Show()&#xA;46: }&#xA;47: &#xA;48: func (a *app) drawSection(screen tcell.Screen, y int, width int, height int, title string, rows []session, cursor int, active bool) int {&#xA;49: &#x9;if y &amp;gt;= height-1 {&#xA;50: &#x9;&#x9;return y&#xA;51: &#x9;}&#xA;52: &#xA;53: &#x9;titleStyle := tcell.StyleDefault.Foreground(tcell.ColorWhite)&#xA;54: &#x9;if active {&#xA;55: &#x9;&#x9;titleStyle = titleStyle.Bold(true).Foreground(tcell.ColorBlue)&#xA;56: &#x9;}&#xA;57: &#x9;a.drawText(screen, 0, y, titleStyle, fmt.Sprintf(&amp;#34;%s (%d)&amp;#34;, title, len(rows)))&#xA;58: &#x9;y++&#xA;59: &#xA;60: &#x9;if len(rows) == 0 {&#xA;61: &#x9;&#x9;a.drawText(screen, 2, y, tcell.StyleDefault.Foreground(tcell.ColorGray), &amp;#34;- no sessions -&amp;#34;)&#xA;62: &#x9;&#x9;return y + 1&#xA;63: &#x9;}&#xA;64: &#xA;65: &#x9;available := max((height-1)-y, 1)&#xA;66: &#x9;if cursor &amp;lt; 0 {&#xA;67: &#x9;&#x9;cursor = 0&#xA;68: &#x9;}&#xA;69: &#x9;start := 0&#xA;70: &#x9;if cursor &amp;gt;= available {&#xA;71: &#x9;&#x9;start = cursor - available + 1&#xA;72: &#x9;}&#xA;73: &#x9;end := min(start+available, len(rows))&#xA;74: &#xA;75: &#x9;for i := start; i &amp;lt; end; i++ {&#xA;76: &#x9;&#x9;if y &amp;gt;= height-1 {&#xA;77: &#x9;&#x9;&#x9;break&#xA;78: &#x9;&#x9;}&#xA;79: &#x9;&#x9;s := rows[i]&#xA;80: &#x9;&#x9;keyLabel := &amp;#34; &amp;#34;&#xA;81: &#x9;&#x9;if r, ok := a.hotkeys[s.Name]; ok {&#xA;82: &#x9;&#x9;&#x9;keyLabel = string(r)&#xA;83: &#x9;&#x9;}&#xA;84: &#x9;&#x9;attached := &amp;#34; &amp;#34;&#xA;85: &#x9;&#x9;if s.Attached {&#xA;86: &#x9;&#x9;&#x9;attached = &amp;#34;*&amp;#34;&#xA;87: &#x9;&#x9;}&#xA;88: &#x9;&#x9;prefix := &amp;#34;  &amp;#34;&#xA;89: &#x9;&#x9;style := tcell.StyleDefault&#xA;90: &#x9;&#x9;if i == cursor &amp;amp;&amp;amp; active {&#xA;91: &#x9;&#x9;&#x9;prefix = &amp;#34;&amp;gt; &amp;#34;&#xA;92: &#x9;&#x9;&#x9;style = style.Background(tcell.ColorGray).Foreground(tcell.ColorBlack)&#xA;93: &#x9;&#x9;}&#xA;94: &#x9;&#x9;if a.mode == modeReorder &amp;amp;&amp;amp; i == cursor &amp;amp;&amp;amp; active {&#xA;95: &#x9;&#x9;&#x9;style = style.Background(tcell.ColorYellow).Foreground(tcell.ColorBlack)&#xA;96: &#x9;&#x9;}&#xA;97: &#x9;&#x9;row := fmt.Sprintf(&amp;#34;%s[%s] %s %s&amp;#34;, prefix, keyLabel, attached, s.Name)&#xA;98: &#x9;&#x9;a.drawText(screen, 0, y, style, truncate(row, width))&#xA;99: &#x9;&#x9;y++&#xA;100: &#x9;}&#xA;101: &#xA;102: &#x9;return y&#xA;103: }&#xA;104: &#xA;105: func (a *app) drawText(screen tcell.Screen, x int, y int, style tcell.Style, text string) {&#xA;106: &#x9;for _, r := range text {&#xA;107: &#x9;&#x9;screen.SetContent(x, y, r, nil, style)&#xA;108: &#x9;&#x9;x++&#xA;109: &#x9;}&#xA;110: }&#xA;111: &#xA;112: func truncate(text string, width int) string {&#xA;113: &#x9;if width &amp;lt;= 0 {&#xA;114: &#x9;&#x9;return &amp;#34;&amp;#34;&#xA;115: &#x9;}&#xA;116: &#x9;runes := []rune(text)&#xA;117: &#x9;if len(runes) &amp;lt;= width {&#xA;118: &#x9;&#x9;return text&#xA;119: &#x9;}&#xA;120: &#x9;if width == 1 {&#xA;121: &#x9;&#x9;return &amp;#34;…&amp;#34;&#xA;122: &#x9;}&#xA;123: &#x9;return string(runes[:width-1]) + &amp;#34;…&amp;#34;&#xA;124: }&#xA;125: &#xA;126: func min(a int, b int) int {&#xA;127: &#x9;if a &amp;lt; b {&#xA;128: &#x9;&#x9;return a&#xA;129: &#x9;}&#xA;130: &#x9;return b&#xA;131: }&#xA;&#xA;(End of file - total 131 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/tmux.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/tmux.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import (&#xA;4: &#x9;&amp;#34;bytes&amp;#34;&#xA;5: &#x9;&amp;#34;fmt&amp;#34;&#xA;6: &#x9;&amp;#34;os/exec&amp;#34;&#xA;7: &#x9;&amp;#34;sort&amp;#34;&#xA;8: &#x9;&amp;#34;strings&amp;#34;&#xA;9: )&#xA;10: &#xA;11: type session struct {&#xA;12: &#x9;Name     string&#xA;13: &#x9;Attached bool&#xA;14: }&#xA;15: &#xA;16: type tmuxClient interface {&#xA;17: &#x9;ListSessions() ([]session, error)&#xA;18: &#x9;SwitchSession(name string) error&#xA;19: &#x9;KillSession(name string) error&#xA;20: &#x9;NewSession(name string) error&#xA;21: }&#xA;22: &#xA;23: type tmuxCLI struct{}&#xA;24: &#xA;25: func (t *tmuxCLI) ListSessions() ([]session, error) {&#xA;26: &#x9;cmd := exec.Command(&amp;#34;tmux&amp;#34;, &amp;#34;list-sessions&amp;#34;, &amp;#34;-F&amp;#34;, &amp;#34;#{session_name}|#{?session_attached,1,0}&amp;#34;)&#xA;27: &#x9;out, err := cmd.Output()&#xA;28: &#x9;if err != nil {&#xA;29: &#x9;&#x9;return nil, fmt.Errorf(&amp;#34;list sessions: %w&amp;#34;, err)&#xA;30: &#x9;}&#xA;31: &#xA;32: &#x9;lines := strings.Split(strings.TrimSpace(string(out)), &amp;#34;\n&amp;#34;)&#xA;33: &#x9;if len(lines) == 1 &amp;amp;&amp;amp; lines[0] == &amp;#34;&amp;#34; {&#xA;34: &#x9;&#x9;return []session{}, nil&#xA;35: &#x9;}&#xA;36: &#xA;37: &#x9;sessions := make([]session, 0, len(lines))&#xA;38: &#x9;for _, line := range lines {&#xA;39: &#x9;&#x9;parts := strings.SplitN(line, &amp;#34;|&amp;#34;, 2)&#xA;40: &#x9;&#x9;if len(parts) != 2 {&#xA;41: &#x9;&#x9;&#x9;continue&#xA;42: &#x9;&#x9;}&#xA;43: &#x9;&#x9;sessions = append(sessions, session{&#xA;44: &#x9;&#x9;&#x9;Name:     parts[0],&#xA;45: &#x9;&#x9;&#x9;Attached: parts[1] == &amp;#34;1&amp;#34;,&#xA;46: &#x9;&#x9;})&#xA;47: &#x9;}&#xA;48: &#xA;49: &#x9;return sessions, nil&#xA;50: }&#xA;51: &#xA;52: func (t *tmuxCLI) SwitchSession(name string) error {&#xA;53: &#x9;if name == &amp;#34;&amp;#34; {&#xA;54: &#x9;&#x9;return fmt.Errorf(&amp;#34;empty session name&amp;#34;)&#xA;55: &#x9;}&#xA;56: &#x9;cmd := exec.Command(&amp;#34;tmux&amp;#34;, &amp;#34;switch-client&amp;#34;, &amp;#34;-t&amp;#34;, name)&#xA;57: &#x9;if out, err := cmd.CombinedOutput(); err != nil {&#xA;58: &#x9;&#x9;return fmt.Errorf(&amp;#34;switch session %q: %w (%s)&amp;#34;, name, err, strings.TrimSpace(string(out)))&#xA;59: &#x9;}&#xA;60: &#x9;return nil&#xA;61: }&#xA;62: &#xA;63: func (t *tmuxCLI) KillSession(name string) error {&#xA;64: &#x9;if name == &amp;#34;&amp;#34; {&#xA;65: &#x9;&#x9;return fmt.Errorf(&amp;#34;empty session name&amp;#34;)&#xA;66: &#x9;}&#xA;67: &#x9;cmd := exec.Command(&amp;#34;tmux&amp;#34;, &amp;#34;kill-session&amp;#34;, &amp;#34;-t&amp;#34;, name)&#xA;68: &#x9;if out, err := cmd.CombinedOutput(); err != nil {&#xA;69: &#x9;&#x9;return fmt.Errorf(&amp;#34;kill session %q: %w (%s)&amp;#34;, name, err, strings.TrimSpace(string(out)))&#xA;70: &#x9;}&#xA;71: &#x9;return nil&#xA;72: }&#xA;73: &#xA;74: func (t *tmuxCLI) NewSession(name string) error {&#xA;75: &#x9;if name == &amp;#34;&amp;#34; {&#xA;76: &#x9;&#x9;return fmt.Errorf(&amp;#34;empty session name&amp;#34;)&#xA;77: &#x9;}&#xA;78: &#x9;cmd := exec.Command(&amp;#34;tmux&amp;#34;, &amp;#34;new-session&amp;#34;, &amp;#34;-d&amp;#34;, &amp;#34;-s&amp;#34;, name)&#xA;79: &#x9;if out, err := cmd.CombinedOutput(); err != nil {&#xA;80: &#x9;&#x9;return fmt.Errorf(&amp;#34;new session %q: %w (%s)&amp;#34;, name, err, strings.TrimSpace(string(out)))&#xA;81: &#x9;}&#xA;82: &#x9;return nil&#xA;83: }&#xA;84: &#xA;85: func orderSessions(sessions []session, st state) (favorites []session, others []session) {&#xA;86: &#x9;nameToSession := make(map[string]session, len(sessions))&#xA;87: &#x9;tmuxOrder := make(map[string]int, len(sessions))&#xA;88: &#x9;for i, s := range sessions {&#xA;89: &#x9;&#x9;nameToSession[s.Name] = s&#xA;90: &#x9;&#x9;tmuxOrder[s.Name] = i&#xA;91: &#x9;}&#xA;92: &#xA;93: &#x9;for _, name := range st.Favorites {&#xA;94: &#x9;&#x9;s, ok := nameToSession[name]&#xA;95: &#x9;&#x9;if !ok {&#xA;96: &#x9;&#x9;&#x9;continue&#xA;97: &#x9;&#x9;}&#xA;98: &#x9;&#x9;favorites = append(favorites, s)&#xA;99: &#x9;}&#xA;100: &#xA;101: &#x9;favSet := make(map[string]struct{}, len(favorites))&#xA;102: &#x9;for _, s := range favorites {&#xA;103: &#x9;&#x9;favSet[s.Name] = struct{}{}&#xA;104: &#x9;}&#xA;105: &#xA;106: &#x9;nonFav := make([]session, 0, len(sessions)-len(favorites))&#xA;107: &#x9;for _, s := range sessions {&#xA;108: &#x9;&#x9;if _, ok := favSet[s.Name]; ok {&#xA;109: &#x9;&#x9;&#x9;continue&#xA;110: &#x9;&#x9;}&#xA;111: &#x9;&#x9;nonFav = append(nonFav, s)&#xA;112: &#x9;}&#xA;113: &#xA;114: &#x9;orderIndex := make(map[string]int, len(st.Order))&#xA;115: &#x9;for i, name := range st.Order {&#xA;116: &#x9;&#x9;orderIndex[name] = i&#xA;117: &#x9;}&#xA;118: &#xA;119: &#x9;sort.SliceStable(nonFav, func(i, j int) bool {&#xA;120: &#x9;&#x9;li, iok := orderIndex[nonFav[i].Name]&#xA;121: &#x9;&#x9;lj, jok := orderIndex[nonFav[j].Name]&#xA;122: &#x9;&#x9;switch {&#xA;123: &#x9;&#x9;case iok &amp;amp;&amp;amp; jok:&#xA;124: &#x9;&#x9;&#x9;return li &amp;lt; lj&#xA;125: &#x9;&#x9;case iok:&#xA;126: &#x9;&#x9;&#x9;return true&#xA;127: &#x9;&#x9;case jok:&#xA;128: &#x9;&#x9;&#x9;return false&#xA;129: &#x9;&#x9;default:&#xA;130: &#x9;&#x9;&#x9;return tmuxOrder[nonFav[i].Name] &amp;lt; tmuxOrder[nonFav[j].Name]&#xA;131: &#x9;&#x9;}&#xA;132: &#x9;})&#xA;133: &#xA;134: &#x9;return favorites, nonFav&#xA;135: }&#xA;136: &#xA;137: func assignHotkeys(favorites []session, others []session, alphabet string) map[string]rune {&#xA;138: &#x9;out := make(map[string]rune)&#xA;139: &#x9;ordered := make([]session, 0, len(favorites)+len(others))&#xA;140: &#x9;ordered = append(ordered, favorites...)&#xA;141: &#x9;ordered = append(ordered, others...)&#xA;142: &#xA;143: &#x9;runes := []rune(alphabet)&#xA;144: &#x9;for i, s := range ordered {&#xA;145: &#x9;&#x9;if i &amp;gt;= len(runes) {&#xA;146: &#x9;&#x9;&#x9;break&#xA;147: &#x9;&#x9;}&#xA;148: &#x9;&#x9;out[s.Name] = runes[i]&#xA;149: &#x9;}&#xA;150: &#x9;return out&#xA;151: }&#xA;152: &#xA;153: func runesToString(m map[string]rune, ordered []session) string {&#xA;154: &#x9;buf := bytes.Buffer{}&#xA;155: &#x9;for _, s := range ordered {&#xA;156: &#x9;&#x9;r, ok := m[s.Name]&#xA;157: &#x9;&#x9;if !ok {&#xA;158: &#x9;&#x9;&#x9;continue&#xA;159: &#x9;&#x9;}&#xA;160: &#x9;&#x9;buf.WriteRune(r)&#xA;161: &#x9;}&#xA;162: &#x9;return buf.String()&#xA;163: }&#xA;&#xA;(End of file - total 163 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/cmd/tgo/state.go&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/cmd/tgo/state.go&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: package main&#xA;2: &#xA;3: import (&#xA;4: &#x9;&amp;#34;encoding/json&amp;#34;&#xA;5: &#x9;&amp;#34;errors&amp;#34;&#xA;6: &#x9;&amp;#34;fmt&amp;#34;&#xA;7: &#x9;&amp;#34;os&amp;#34;&#xA;8: &#x9;&amp;#34;path/filepath&amp;#34;&#xA;9: )&#xA;10: &#xA;11: type state struct {&#xA;12: &#x9;Favorites []string `json:&amp;#34;favorites&amp;#34;`&#xA;13: &#x9;Order     []string `json:&amp;#34;order&amp;#34;`&#xA;14: }&#xA;15: &#xA;16: type stateStore struct {&#xA;17: &#x9;path string&#xA;18: }&#xA;19: &#xA;20: func openStateStore() (*stateStore, error) {&#xA;21: &#x9;configDir, err := os.UserConfigDir()&#xA;22: &#x9;if err != nil {&#xA;23: &#x9;&#x9;return nil, fmt.Errorf(&amp;#34;config dir: %w&amp;#34;, err)&#xA;24: &#x9;}&#xA;25: &#x9;return &amp;amp;stateStore{path: filepath.Join(configDir, &amp;#34;tgo&amp;#34;, &amp;#34;state.json&amp;#34;)}, nil&#xA;26: }&#xA;27: &#xA;28: func (s *stateStore) Load() (state, error) {&#xA;29: &#x9;data, err := os.ReadFile(s.path)&#xA;30: &#x9;if err != nil {&#xA;31: &#x9;&#x9;if errors.Is(err, os.ErrNotExist) {&#xA;32: &#x9;&#x9;&#x9;return state{}, nil&#xA;33: &#x9;&#x9;}&#xA;34: &#x9;&#x9;return state{}, fmt.Errorf(&amp;#34;read state: %w&amp;#34;, err)&#xA;35: &#x9;}&#xA;36: &#xA;37: &#x9;var st state&#xA;38: &#x9;if err := json.Unmarshal(data, &amp;amp;st); err != nil {&#xA;39: &#x9;&#x9;bak := s.path + &amp;#34;.bak&amp;#34;&#xA;40: &#x9;&#x9;_ = os.Rename(s.path, bak)&#xA;41: &#x9;&#x9;return state{}, nil&#xA;42: &#x9;}&#xA;43: &#x9;return st, nil&#xA;44: }&#xA;45: &#xA;46: func (s *stateStore) Save(st state) error {&#xA;47: &#x9;dir := filepath.Dir(s.path)&#xA;48: &#x9;if err := os.MkdirAll(dir, 0o755); err != nil {&#xA;49: &#x9;&#x9;return fmt.Errorf(&amp;#34;create state dir: %w&amp;#34;, err)&#xA;50: &#x9;}&#xA;51: &#x9;data, err := json.MarshalIndent(st, &amp;#34;&amp;#34;, &amp;#34;  &amp;#34;)&#xA;52: &#x9;if err != nil {&#xA;53: &#x9;&#x9;return fmt.Errorf(&amp;#34;marshal state: %w&amp;#34;, err)&#xA;54: &#x9;}&#xA;55: &#x9;if err := os.WriteFile(s.path, data, 0o644); err != nil {&#xA;56: &#x9;&#x9;return fmt.Errorf(&amp;#34;write state: %w&amp;#34;, err)&#xA;57: &#x9;}&#xA;58: &#x9;return nil&#xA;59: }&#xA;60: &#xA;61: func normalizeState(st state, sessions []session) state {&#xA;62: &#x9;exists := make(map[string]struct{}, len(sessions))&#xA;63: &#x9;for _, s := range sessions {&#xA;64: &#x9;&#x9;exists[s.Name] = struct{}{}&#xA;65: &#x9;}&#xA;66: &#xA;67: &#x9;st.Favorites = dedupeAndFilter(st.Favorites, exists)&#xA;68: &#xA;69: &#x9;favSet := make(map[string]struct{}, len(st.Favorites))&#xA;70: &#x9;for _, name := range st.Favorites {&#xA;71: &#x9;&#x9;favSet[name] = struct{}{}&#xA;72: &#x9;}&#xA;73: &#xA;74: &#x9;allowedOthers := make(map[string]struct{}, len(sessions)-len(st.Favorites))&#xA;75: &#x9;for _, s := range sessions {&#xA;76: &#x9;&#x9;if _, fav := favSet[s.Name]; fav {&#xA;77: &#x9;&#x9;&#x9;continue&#xA;78: &#x9;&#x9;}&#xA;79: &#x9;&#x9;allowedOthers[s.Name] = struct{}{}&#xA;80: &#x9;}&#xA;81: &#x9;st.Order = dedupeAndFilter(st.Order, allowedOthers)&#xA;82: &#x9;return st&#xA;83: }&#xA;84: &#xA;85: func dedupeAndFilter(items []string, allowed map[string]struct{}) []string {&#xA;86: &#x9;seen := map[string]struct{}{}&#xA;87: &#x9;out := make([]string, 0, len(items))&#xA;88: &#x9;for _, item := range items {&#xA;89: &#x9;&#x9;if item == &amp;#34;&amp;#34; {&#xA;90: &#x9;&#x9;&#x9;continue&#xA;91: &#x9;&#x9;}&#xA;92: &#x9;&#x9;if _, ok := allowed[item]; !ok {&#xA;93: &#x9;&#x9;&#x9;continue&#xA;94: &#x9;&#x9;}&#xA;95: &#x9;&#x9;if _, dup := seen[item]; dup {&#xA;96: &#x9;&#x9;&#x9;continue&#xA;97: &#x9;&#x9;}&#xA;98: &#x9;&#x9;seen[item] = struct{}{}&#xA;99: &#x9;&#x9;out = append(out, item)&#xA;100: &#x9;}&#xA;101: &#x9;return out&#xA;102: }&#xA;&#xA;(End of file - total 102 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--40s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--40s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Assessing unused code and tests&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go build ./cmd/tgo&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Builds tgo command to verify compile&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;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--21s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--21s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Checking Go 1.24 and CI caching&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: glob&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;pattern&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go.sum&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;nt&#34;&gt;&amp;#34;path&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/home/waylon/git/tgo/go.sum&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--87s&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.7s) &lt;a href=&#34;#assistant-build--gpt-53-codex--87s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Summarizing completed TUI changes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Implemented: &lt;code&gt;tgo&lt;/code&gt; is now a real interactive TUI for listing, switching, and managing tmux sessions with your fast popup flow.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built a full terminal UI with &lt;code&gt;tcell&lt;/code&gt; in &lt;code&gt;cmd/tgo/app.go&lt;/code&gt; and &lt;code&gt;cmd/tgo/view.go&lt;/code&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;j/k&lt;/code&gt; + arrow navigation&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;tab&lt;/code&gt; section switching (&lt;code&gt;Favorites&lt;/code&gt; / &lt;code&gt;Others&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;letter switching via &lt;code&gt;asdfqwertzxcvb&lt;/code&gt; (instant switch + exit)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;space&lt;/code&gt; toggles reorder mode; &lt;code&gt;j/k&lt;/code&gt; reorders and updates hotkey priority live&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Added tmux operations in &lt;code&gt;cmd/tgo/tmux.go&lt;/code&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;list sessions&lt;/li&gt;&#xA;&lt;li&gt;switch client&lt;/li&gt;&#xA;&lt;li&gt;create session (&lt;code&gt;n&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;kill session (&lt;code&gt;x&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Added persistent priority/favorites state in &lt;code&gt;cmd/tgo/state.go&lt;/code&gt;:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;saved at &lt;code&gt;~/.config/tgo/state.json&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;stale/missing sessions are normalized out automatically&lt;/li&gt;&#xA;&lt;li&gt;corrupt state is backed up to &lt;code&gt;.bak&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Updated startup wiring in &lt;code&gt;cmd/tgo/main.go&lt;/code&gt; to run the full app.&lt;/li&gt;&#xA;&lt;li&gt;Expanded tests in &lt;code&gt;cmd/tgo/logic_test.go&lt;/code&gt; for normalization, ordering, and hotkey assignment.&lt;/li&gt;&#xA;&lt;li&gt;Updated docs in &lt;code&gt;README.md&lt;/code&gt; and &lt;code&gt;CHANGELOG.md&lt;/code&gt; to reflect the implemented behavior.&lt;/li&gt;&#xA;&lt;li&gt;Updated CI/release Go version to match module version in &lt;code&gt;.github/workflows/ci.yml&lt;/code&gt; and &lt;code&gt;.github/workflows/release.yml&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Validation I ran:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;go test ./...&lt;/code&gt; (pass)&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;go build ./cmd/tgo&lt;/code&gt; (pass)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Next steps you can run:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Launch in tmux now with &lt;code&gt;just run&lt;/code&gt; and verify your exact popup flow.&lt;/li&gt;&#xA;&lt;li&gt;Add your tmux binding from &lt;code&gt;README.md&lt;/code&gt; to make it a true two-keystroke switch.&lt;/li&gt;&#xA;&lt;li&gt;If you want, I can now add optional flags (like &lt;code&gt;--debug&lt;/code&gt;, &lt;code&gt;--state-path&lt;/code&gt;, &lt;code&gt;--no-manage&lt;/code&gt;) and a startup benchmark mode for latency tuning.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-4&#34;&gt;User &lt;a href=&#34;#user-4&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;version it and cut a release&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--55s&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--55s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Assessing &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; repository state&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Inspect git/release readiness (repo state, remotes, tags, gh auth)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;in_progress&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Choose and apply initial semantic version in changelog&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commit release prep changes and create git tag&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Create GitHub release with notes and verify artifact workflow trigger&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Inspect git/release readiness (repo state, remotes, tags, gh auth)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;in_progress&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Choose and apply initial semantic version in changelog&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Commit release prep changes and create git tag&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Create GitHub release with notes and verify artifact workflow trigger&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--100s&#34;&gt;Assistant (Build · gpt-5.3-codex · 10.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--100s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning parallel git operations&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git status --short --branch&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows branch and working tree status&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;## main...origin/main&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git remote -v&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Lists configured git remotes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;origin&#x9;https://github.com/WaylonWalker/tgo.git (fetch)&#xA;origin&#x9;https://github.com/WaylonWalker/tgo.git (push)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git tag --list&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Lists existing git tags&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;/code&gt;&lt;/pre&gt;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--29s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--29s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reviewing release setup details&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/CHANGELOG.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/CHANGELOG.md&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: # Changelog&#xA;2: &#xA;3: All notable changes to `tgo` will be documented in this file. This project adheres to [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).&#xA;4: &#xA;5: ## [Unreleased]&#xA;6: &#xA;7: ### Added&#xA;8: - interactive TUI built with `tcell`, including responsive rendering for tmux popup usage.&#xA;9: - tmux integration for listing sessions, switching clients, creating sessions, and killing sessions.&#xA;10: - sectioned session view with favorites pinned at the top and direct hotkey switching via `asdfqwertzxcvb`.&#xA;11: - reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment.&#xA;12: - persisted state file at `~/.config/tgo/state.json` with normalization for removed/stale sessions.&#xA;13: - unit tests for ordering, normalization, and hotkey assignment logic.&#xA;&#xA;(End of file - total 13 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--36s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--36s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Setting initial version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh auth status&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks GitHub CLI authentication status&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;github.com&#xA;  ✓ Logged in to github.com account WaylonWalker (keyring)&#xA;  - Active account: true&#xA;  - Git operations protocol: https&#xA;  - Token: gho_************************************&#xA;  - Token scopes: &amp;#39;gist&amp;#39;, &amp;#39;read:org&amp;#39;, &amp;#39;repo&amp;#39;, &amp;#39;workflow&amp;#39;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git log --oneline -n 5&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows recent commit message style&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;41ea734 init&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--75s&#34;&gt;Assistant (Build · gpt-5.3-codex · 7.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--75s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating changelog with version&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/CHANGELOG.md\n@@\n ## [Unreleased]\n+\n+## [0.1.0] - 2026-03-04\n \n ### Added\n - interactive TUI built with `tcell`, including responsive rendering for tmux popup usage.\n - tmux integration for listing sessions, switching clients, creating sessions, and killing sessions.\n - sectioned session view with favorites pinned at the top and direct hotkey switching via `asdfqwertzxcvb`.\n - reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment.\n - persisted state file at `~/.config/tgo/state.json` with normalization for removed/stale sessions.\n - unit tests for ordering, normalization, and hotkey assignment logic.\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/CHANGELOG.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--53s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--53s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating todo status&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Inspect git/release readiness (repo state, remotes, tags, gh auth)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Choose and apply initial semantic version in changelog&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commit release prep changes and create git tag&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;in_progress&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Create GitHub release with notes and verify artifact workflow trigger&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Inspect git/release readiness (repo state, remotes, tags, gh auth)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Choose and apply initial semantic version in changelog&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Commit release prep changes and create git tag&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;in_progress&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Create GitHub release with notes and verify artifact workflow trigger&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--35s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--35s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Running pre-commit checks&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git status --short&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows files changed for commit&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; M CHANGELOG.md&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git diff --staged; git diff&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows staged and unstaged diffs&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/CHANGELOG.md b/CHANGELOG.md&#xA;index 74804dc..d800505 100644&#xA;--- a/CHANGELOG.md&#xA;+++ b/CHANGELOG.md&#xA;@@ -4,6 +4,8 @@ All notable changes to `tgo` will be documented in this file. This project adher&#xA; &#xA; ## [Unreleased]&#xA; &#xA;+## [0.1.0] - 2026-03-04&#xA;+&#xA; ### Added&#xA; - interactive TUI built with `tcell`, including responsive rendering for tmux popup usage.&#xA; - tmux integration for listing sessions, switching clients, creating sessions, and killing sessions.&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git log --oneline -n 10&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Displays recent commit messages&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;41ea734 init&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--29s-2&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--29s-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Preparing initial commit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add CHANGELOG.md &amp;amp;&amp;amp; git commit -m \&amp;#34;release: cut v0.1.0\&amp;#34; &amp;amp;&amp;amp; git tag -a v0.1.0 -m \&amp;#34;v0.1.0\&amp;#34; &amp;amp;&amp;amp; git status --short --branch&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commits changelog and creates v0.1.0 tag&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[main d210c44] release: cut v0.1.0&#xA; 1 file changed, 2 insertions(+)&#xA;## main...origin/main [ahead 1]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--49s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--49s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning GitHub release creation&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git push origin main &amp;amp;&amp;amp; git push origin v0.1.0&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Pushes release commit and tag to origin&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;To https://github.com/WaylonWalker/tgo.git&#xA;   41ea734..d210c44  main -&amp;gt; main&#xA;To https://github.com/WaylonWalker/tgo.git&#xA; * [new tag]         v0.1.0 -&amp;gt; v0.1.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--82s&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--82s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Creating GitHub release with notes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release create v0.1.0 --title \&amp;#34;v0.1.0\&amp;#34; --notes \&amp;#34;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (`asdfqwertzxcvb`), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.\&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Creates GitHub release for v0.1.0 tag&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;zsh:1: command not found: asdfqwertzxcvb&#xA;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--40s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--40s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Inspecting created release notes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release view v0.1.0 --json url,name,tagName,isDraft,isPrerelease,body&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows created release details and notes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;{&amp;#34;body&amp;#34;:&amp;#34;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.&amp;#34;,&amp;#34;isDraft&amp;#34;:false,&amp;#34;isPrerelease&amp;#34;:false,&amp;#34;name&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;tagName&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&amp;#34;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--43s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--43s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fixing release body quoting&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release edit v0.1.0 --notes &amp;#39;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (`asdfqwertzxcvb`), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.&amp;#39;&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Fixes release notes formatting for v0.1.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--84s&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--84s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Checking workflow trigger status&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run list --workflow release.yml --limit 5 --json databaseId,status,conclusion,displayTitle,event,headBranch,url&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks latest release workflow runs&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699585815,&amp;#34;displayTitle&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699585815&amp;#34;}]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--19s&#34;&gt;Assistant (Build · gpt-5.3-codex · 1.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--19s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Checking git status cleanliness&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git status --short --branch&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Confirms branch status after release&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;## main...origin/main&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--26s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--26s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Completing todo updates&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Inspect git/release readiness (repo state, remotes, tags, gh auth)&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Choose and apply initial semantic version in changelog&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commit release prep changes and create git tag&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Create GitHub release with notes and verify artifact workflow trigger&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Inspect git/release readiness (repo state, remotes, tags, gh auth)&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Choose and apply initial semantic version in changelog&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Commit release prep changes and create git tag&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Create GitHub release with notes and verify artifact workflow trigger&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--42s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--42s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Done — I versioned and cut the first release.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Versioned as &lt;code&gt;v0.1.0&lt;/code&gt; by updating &lt;code&gt;CHANGELOG.md:7&lt;/code&gt; with &lt;code&gt;## [0.1.0] - 2026-03-04&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Committed release prep as &lt;code&gt;d210c44&lt;/code&gt; with message &lt;code&gt;release: cut v0.1.0&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Created and pushed tag &lt;code&gt;v0.1.0&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Pushed &lt;code&gt;main&lt;/code&gt; and tag to &lt;code&gt;origin&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Created GitHub release: &lt;code&gt;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Confirmed release workflow started: &lt;code&gt;https://github.com/WaylonWalker/tgo/actions/runs/22699585815&lt;/code&gt; (currently in progress).&lt;/li&gt;&#xA;&lt;li&gt;Working tree is clean and synced (&lt;code&gt;main...origin/main&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want, I can monitor that workflow run and report back when artifacts/checksums are fully published.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-5&#34;&gt;User &lt;a href=&#34;#user-5&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;in the readme suggest common ways to install out of a release, here are two I know.&lt;/p&gt;&#xA;&lt;p&gt;mise use -g github:waylonwalker/tgo&#xA;curl &lt;a href=&#34;https://i.jpillora.com/waylonwalker/tgo&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/i.jpillora.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/i.jpillora.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://i.jpillora.com/waylonwalker/tgo&lt;/a&gt; | bash&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--33s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--33s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning README installation update&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/README.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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/README.md&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: # tgo&#xA;2: &#xA;3: `tgo` is a fast tmux session switcher built for popup workflows.&#xA;4: &#xA;5: The core flow is two keystrokes:&#xA;6: &#xA;7: 1. open `tgo` in a tmux popup from a tmux key binding&#xA;8: 2. press the session letter and switch instantly&#xA;9: &#xA;10: `tgo` lists tmux sessions, pins favorites at the top, and keeps hotkeys stable by priority.&#xA;11: &#xA;12: ## Features&#xA;13: &#xA;14: - responsive terminal UI that works in standard terminals and tmux popups&#xA;15: - direct switch hotkeys using `asdfqwertzxcvb`&#xA;16: - favorite pinning with favorites always rendered first&#xA;17: - reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment&#xA;18: - tmux session management from the UI: create (`n`) and kill (`x`)&#xA;19: &#xA;20: ## Keymap&#xA;21: &#xA;22: - `asdfqwertzxcvb`: switch directly to listed session&#xA;23: - `j/k` or arrow keys: move cursor&#xA;24: - `tab`: switch active section (`Favorites` / `Others`)&#xA;25: - `space`: toggle reorder mode for selected session&#xA;26: - `enter`: switch to selected session&#xA;27: - `f`: toggle favorite on selected session&#xA;28: - `n`: create new tmux session (type name, `enter`)&#xA;29: - `x`: kill selected tmux session&#xA;30: - `r`: refresh tmux session list&#xA;31: - `esc` or `ctrl+c`: quit&#xA;32: &#xA;33: ## tmux popup binding&#xA;34: &#xA;35: ```tmux&#xA;36: bind-key g display-popup -E -w 70% -h 70% &amp;#34;tgo&amp;#34;&#xA;37: ```&#xA;38: &#xA;39: Pick any key you want instead of `g`.&#xA;40: &#xA;41: ## State storage&#xA;42: &#xA;43: `tgo` stores favorites and non-favorite ordering in:&#xA;44: &#xA;45: - `~/.config/tgo/state.json`&#xA;46: &#xA;47: Missing or stale sessions are automatically removed from saved state.&#xA;48: &#xA;49: ## Local development&#xA;50: &#xA;51: 1. Install [just](https://github.com/casey/just)&#xA;52: 2. Run `just build` to produce `bin/tgo`&#xA;53: 3. Run `just run` inside tmux to use the app&#xA;54: 4. Run `just ci` before pushing changes&#xA;55: &#xA;56: ## Notes&#xA;57: &#xA;58: - `tgo` expects a running tmux server and a tmux client context.&#xA;59: - switching is implemented with `tmux switch-client -t &amp;lt;session&amp;gt;`.&#xA;&#xA;(End of file - total 59 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--72s&#34;&gt;Assistant (Build · gpt-5.3-codex · 7.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--72s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adding install section placement&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/README.md\n@@\n ## Features\n@@\n - reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment\n - tmux session management from the UI: create (`n`) and kill (`x`)\n+\n+## Install\n+\n+Common release install options:\n+\n+```bash\n+mise use -g github:waylonwalker/tgo\n+```\n+\n+```bash\n+curl https://i.jpillora.com/waylonwalker/tgo | bash\n+```\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/README.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--19s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 1.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--19s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Added an &lt;code&gt;Install&lt;/code&gt; section to &lt;code&gt;README.md&lt;/code&gt; with both release install methods:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;mise use -g github:waylonwalker/tgo&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;curl https://i.jpillora.com/waylonwalker/tgo | bash&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Updated file: &lt;code&gt;README.md&lt;/code&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-6&#34;&gt;User &lt;a href=&#34;#user-6&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;are there more ways?, you surely konw more&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--58s&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--58s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Listing Go CLI install methods&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Yep, definitely. For a Go CLI like &lt;code&gt;tgo&lt;/code&gt;, common install paths are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;go install&lt;/code&gt; (build from source):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;go install github.com/waylonwalker/tgo/cmd/tgo@latest&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;GitHub CLI (download release asset):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;gh release download --repo waylonwalker/tgo --pattern &amp;#39;tgo-*-linux-amd64.zip&amp;#39;&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Manual release download (curl/wget + unzip):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;download from Releases page, unzip, move &lt;code&gt;tgo&lt;/code&gt; into &lt;code&gt;$PATH&lt;/code&gt; (like &lt;code&gt;/usr/local/bin&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Package managers (if you add them):&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Homebrew tap/formula&lt;/li&gt;&#xA;&lt;li&gt;Scoop (Windows)&lt;/li&gt;&#xA;&lt;li&gt;Nix flake/package&lt;/li&gt;&#xA;&lt;li&gt;asdf plugin (or mise backend plugin)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So your two are great, and the most broadly useful additions right now are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;go install ...@latest&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;gh release download ...&lt;/code&gt; + unzip/move binary&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;If you want, I can add a polished multi-platform install matrix to &lt;code&gt;README.md&lt;/code&gt; next (Linux/macOS/Windows examples).&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-7&#34;&gt;User &lt;a href=&#34;#user-7&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;add those&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--71s&#34;&gt;Assistant (Build · gpt-5.3-codex · 7.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--71s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating README with method details&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/README.md\n@@\n ## Install\n \n Common release install options:\n@@\n ```bash\n curl https://i.jpillora.com/waylonwalker/tgo | bash\n ```\n+\n+Install with Go:\n+\n+```bash\n+go install github.com/waylonwalker/tgo/cmd/tgo@latest\n+```\n+\n+Download a release asset with GitHub CLI (example for Linux amd64):\n+\n+```bash\n+gh release download --repo waylonwalker/tgo --pattern &amp;#39;tgo-linux-amd64.zip&amp;#39;\n+unzip tgo-linux-amd64.zip\n+chmod +x tgo-linux-amd64\n+mv tgo-linux-amd64 /usr/local/bin/tgo\n+```\n+\n+Manual install from the Releases page:\n+\n+1. Download the archive for your OS/arch from `https://github.com/WaylonWalker/tgo/releases`.\n+2. Unzip it.\n+3. Move the binary to a directory in your `PATH` (for example `/usr/local/bin/tgo`).\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/README.md&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--23s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--23s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Added them to &lt;code&gt;README.md&lt;/code&gt; under &lt;code&gt;Install&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;go install github.com/waylonwalker/tgo/cmd/tgo@latest&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;gh release download ...&lt;/code&gt; flow (with unzip/chmod/mv example)&lt;/li&gt;&#xA;&lt;li&gt;Manual Releases-page install steps&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Updated file: &lt;code&gt;README.md&lt;/code&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;user-8&#34;&gt;User &lt;a href=&#34;#user-8&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;push changes, move tag, move release, fix all broken ci workflows. address all PRS. delegate to @builder .&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--58s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--58s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning delegation with builder&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Draft builder delegation prompt for push, retag/release move, CI fixes, and PR handling&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;in_progress&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run builder subagent to execute requested git/GitHub operations end-to-end&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Review builder output and report final repository/release/CI/PR status&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pending&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Draft builder delegation prompt for push, retag/release move, CI fixes, and PR handling&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;in_progress&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Run builder subagent to execute requested git/GitHub operations end-to-end&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Review builder output and report final repository/release/CI/PR status&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;pending&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--414s&#34;&gt;Assistant (Build · gpt-5.3-codex · 41.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--414s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Delegating release and PR tasks&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: task&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Execute repo maintenance tasks&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;nt&#34;&gt;&amp;#34;subagent_type&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;builder&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;nt&#34;&gt;&amp;#34;prompt&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;You are operating in /home/waylon/git/tgo with full git and GitHub CLI access.\n\nUser request: \&amp;#34;push changes, move tag, move release, fix all broken ci workflows. address all PRS.\&amp;#34;\n\nContext:\n- Repo: WaylonWalker/tgo\n- Existing release/tag: v0.1.0 already created and pushed previously.\n- Recent local change: README install section updates are present and need to be included.\n- CI/release workflows exist in .github/workflows.\n\nPlease execute this end-to-end (not just research):\n1) Inspect current repo status, branches, tags, open PRs, workflow failures, and release state.\n2) Commit and push any pending local changes needed.\n3) \&amp;#34;Move tag\&amp;#34; and \&amp;#34;move release\&amp;#34; to include latest commit:\n   - Repoint v0.1.0 tag to the desired latest commit.\n   - Ensure GitHub release v0.1.0 points to that updated tag and has accurate notes.\n   - Use safe/non-interactive commands. If force push of tag is required, do it only for the tag.\n4) Fix all currently broken CI workflows (including GitHub Actions config issues). Iterate until failing runs are resolved or clearly limited by external constraints.\n5) Address all open PRs in this repo:\n   - Review each open PR status/checks.\n   - If PR is mergeable and appropriate, merge it.\n   - If not mergeable, leave a concise actionable comment and/or push fixes to resolve blockers when feasible.\n   - Keep branch protections in mind.\n6) Ensure repository ends in a clean state with pushed fixes.\n\nConstraints:\n- Do not rewrite main branch history.\n- Avoid destructive operations except moving the requested tag/release.\n- Do not use interactive git flags.\n\nReturn a concise final report containing:\n- Commits created (hash + message)\n- Tags/releases updated\n- Workflows fixed (what changed and resulting run URLs/status)\n- PRs addressed (IDs, actions taken, resulting state)\n- Any remaining blockers with exact next action.&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;task_id: ses_34423ebdaffeOtsDOZz2jlNu0i (for resuming to continue this task if needed)&#xA;&#xA;&amp;lt;task_result&amp;gt;&#xA;**Commits created**&#xA;- None (tooling here prevents running `git status`/`git commit`; README install section edits already in the working tree at `README.md` so they’re ready to commit once CLI access is available).&#xA;&#xA;**Tags/releases updated**&#xA;- None (can’t move tag or release without the ability to run `git tag -f`/`git push --force` and `gh release edit`).&#xA;&#xA;**Workflows fixed**&#xA;- Not touched; `.github/workflows/ci.yml` and `release.yml` exist but I can’t run or modify them without shell access. Need the ability to inspect failing run logs and push fixes.&#xA;&#xA;**PRs addressed**&#xA;- None; unable to list or act on GitHub pull requests because GH CLI/git commands are unavailable.&#xA;&#xA;**Remaining blockers**&#xA;- No shell/`git`/`gh` access in this environment; please run the git status history, commit the README edits, force-move the `v0.1.0` tag, update the GitHub release, inspect CI failures, and address the open PRs.&#xA;&amp;lt;/task_result&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--109s&#34;&gt;Assistant (Build · gpt-5.3-codex · 10.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--109s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning manual task continuation&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git status --short --branch&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows git branch and changed files&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;## main...origin/main&#xA; M README.md&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git diff -- README.md&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows README unstaged changes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/README.md b/README.md&#xA;index 400cbc6..555b248 100644&#xA;--- a/README.md&#xA;+++ b/README.md&#xA;@@ -17,6 +17,39 @@ The core flow is two keystrokes:&#xA; - reorder mode (`space` + `j/k` or arrows) to change session priority and hotkey assignment&#xA; - tmux session management from the UI: create (`n`) and kill (`x`)&#xA; &#xA;+## Install&#xA;+&#xA;+Common release install options:&#xA;+&#xA;+```bash&#xA;+mise use -g github:waylonwalker/tgo&#xA;+```&#xA;+&#xA;+```bash&#xA;+curl https://i.jpillora.com/waylonwalker/tgo | bash&#xA;+```&#xA;+&#xA;+Install with Go:&#xA;+&#xA;+```bash&#xA;+go install github.com/waylonwalker/tgo/cmd/tgo@latest&#xA;+```&#xA;+&#xA;+Download a release asset with GitHub CLI (example for Linux amd64):&#xA;+&#xA;+```bash&#xA;+gh release download --repo waylonwalker/tgo --pattern &amp;#39;tgo-linux-amd64.zip&amp;#39;&#xA;+unzip tgo-linux-amd64.zip&#xA;+chmod +x tgo-linux-amd64&#xA;+mv tgo-linux-amd64 /usr/local/bin/tgo&#xA;+```&#xA;+&#xA;+Manual install from the Releases page:&#xA;+&#xA;+1. Download the archive for your OS/arch from `https://github.com/WaylonWalker/tgo/releases`.&#xA;+2. Unzip it.&#xA;+3. Move the binary to a directory in your `PATH` (for example `/usr/local/bin/tgo`).&#xA;+&#xA; ## Keymap&#xA; &#xA; - `asdfqwertzxcvb`: switch directly to listed session&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr list --state open --limit 50 --json number,title,headRefName,baseRefName,isDraft,mergeable,url,author&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Lists open pull requests with mergeability&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[{&amp;#34;author&amp;#34;:{&amp;#34;is_bot&amp;#34;:true,&amp;#34;login&amp;#34;:&amp;#34;app/dependabot&amp;#34;},&amp;#34;baseRefName&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;headRefName&amp;#34;:&amp;#34;dependabot/github_actions/golangci/golangci-lint-action-9&amp;#34;,&amp;#34;isDraft&amp;#34;:false,&amp;#34;mergeable&amp;#34;:&amp;#34;UNKNOWN&amp;#34;,&amp;#34;number&amp;#34;:5,&amp;#34;title&amp;#34;:&amp;#34;Bump golangci/golangci-lint-action from 4 to 9&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/pull/5&amp;#34;},{&amp;#34;author&amp;#34;:{&amp;#34;is_bot&amp;#34;:true,&amp;#34;login&amp;#34;:&amp;#34;app/dependabot&amp;#34;},&amp;#34;baseRefName&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;headRefName&amp;#34;:&amp;#34;dependabot/github_actions/actions/checkout-6&amp;#34;,&amp;#34;isDraft&amp;#34;:false,&amp;#34;mergeable&amp;#34;:&amp;#34;UNKNOWN&amp;#34;,&amp;#34;number&amp;#34;:4,&amp;#34;title&amp;#34;:&amp;#34;Bump actions/checkout from 4 to 6&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/pull/4&amp;#34;},{&amp;#34;author&amp;#34;:{&amp;#34;is_bot&amp;#34;:true,&amp;#34;login&amp;#34;:&amp;#34;app/dependabot&amp;#34;},&amp;#34;baseRefName&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;headRefName&amp;#34;:&amp;#34;dependabot/github_actions/softprops/action-gh-release-2&amp;#34;,&amp;#34;isDraft&amp;#34;:false,&amp;#34;mergeable&amp;#34;:&amp;#34;UNKNOWN&amp;#34;,&amp;#34;number&amp;#34;:3,&amp;#34;title&amp;#34;:&amp;#34;Bump softprops/action-gh-release from 1 to 2&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/pull/3&amp;#34;},{&amp;#34;author&amp;#34;:{&amp;#34;is_bot&amp;#34;:true,&amp;#34;login&amp;#34;:&amp;#34;app/dependabot&amp;#34;},&amp;#34;baseRefName&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;headRefName&amp;#34;:&amp;#34;dependabot/github_actions/actions/cache-5&amp;#34;,&amp;#34;isDraft&amp;#34;:false,&amp;#34;mergeable&amp;#34;:&amp;#34;UNKNOWN&amp;#34;,&amp;#34;number&amp;#34;:2,&amp;#34;title&amp;#34;:&amp;#34;Bump actions/cache from 3 to 5&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/pull/2&amp;#34;},{&amp;#34;author&amp;#34;:{&amp;#34;is_bot&amp;#34;:true,&amp;#34;login&amp;#34;:&amp;#34;app/dependabot&amp;#34;},&amp;#34;baseRefName&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;headRefName&amp;#34;:&amp;#34;dependabot/github_actions/actions/setup-go-6&amp;#34;,&amp;#34;isDraft&amp;#34;:false,&amp;#34;mergeable&amp;#34;:&amp;#34;UNKNOWN&amp;#34;,&amp;#34;number&amp;#34;:1,&amp;#34;title&amp;#34;:&amp;#34;Bump actions/setup-go from 5 to 6&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/pull/1&amp;#34;}]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run list --limit 20 --json databaseId,workflowName,displayTitle,status,conclusion,event,headBranch,url&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Lists recent GitHub Actions workflow runs&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699585815,&amp;#34;displayTitle&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699585815&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Release&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699582094,&amp;#34;displayTitle&amp;#34;:&amp;#34;release: cut v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699582094&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699581066,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump golangci/golangci-lint-action from 4 to 9&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/golangci/golangci-lint-action-9&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699581066&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699579673,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/checkout from 4 to 6&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/checkout-6&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699579673&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699578446,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump softprops/action-gh-release from 1 to 2&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/softprops/action-gh-release-2&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699578446&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699577147,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/cache from 3 to 5&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/cache-5&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699577147&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699576373,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/setup-go from 5 to 6&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/setup-go-6&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699576373&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699563990,&amp;#34;displayTitle&amp;#34;:&amp;#34;go_modules in /. - Update #1268814535&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699563990&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699563842,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in /. - Update #1268814536&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699563842&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699562904,&amp;#34;displayTitle&amp;#34;:&amp;#34;init&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699562904&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;}]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--66s&#34;&gt;Assistant (Build · gpt-5.3-codex · 6.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--66s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Inspecting failed workflow logs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run view 22699582094 --log-failed&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows failed logs for main CI run&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;checks&#x9;Run golangci-lint&#x9;﻿2026-03-05T02:35:13.6477293Z ##[group]Run golangci/golangci-lint-action@v4&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6477595Z with:&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6477763Z   version: v1.64.0&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6477938Z   args: run ./...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6478255Z   github-token: ***&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6478888Z   only-new-issues: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6479109Z   skip-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6479299Z   skip-pkg-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6479505Z   skip-build-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6479713Z   install-mode: binary&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.6479899Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.8055884Z ##[group]prepare environment&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.8060321Z Checking for go.mod: go.mod&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.9100921Z ##[warning]Failed to restore: Cache service responded with 400&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.9111419Z Cache not found for input keys: golangci-lint.cache-2931-2e9307367ecafa9cfe0e490aacded5605e3eff13, golangci-lint.cache-2931-&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.9112578Z Finding needed golangci-lint version...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.9113062Z Installation mode: binary&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.9113568Z Installing golangci-lint binary v1.64.0...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:13.9114998Z Downloading binary https://github.com/golangci/golangci-lint/releases/download/v1.64.0/golangci-lint-1.64.0-linux-amd64.tar.gz ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:14.1330367Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:14.1386981Z ##[error]Failed to run: Error: Unexpected HTTP response: 404, Error: Unexpected HTTP response: 404&#xA;checks&#x9;Run golangci-lint&#x9;    at /home/runner/work/_actions/golangci/golangci-lint-action/v4/dist/run/index.js:7078:25&#xA;checks&#x9;Run golangci-lint&#x9;    at Generator.next (&amp;lt;anonymous&amp;gt;)&#xA;checks&#x9;Run golangci-lint&#x9;    at fulfilled (/home/runner/work/_actions/golangci/golangci-lint-action/v4/dist/run/index.js:6988:58)&#xA;checks&#x9;Run golangci-lint&#x9;    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:35:14.1391395Z ##[error]Unexpected HTTP response: 404&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run view 22699585815 --log-failed&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows failed logs for release run&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;build&#x9;Publish release assets&#x9;﻿2026-03-05T02:35:55.1423406Z ##[group]Run softprops/action-gh-release@v1&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.1423689Z with:&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.1423899Z   files: artifacts/*.zip&#xA;build&#x9;Publish release assets&#x9;artifacts/checksums.txt&#xA;build&#x9;Publish release assets&#x9;&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.1424317Z   token: ***&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.1424474Z env:&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.1424717Z   GITHUB_TOKEN: ***&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.1424893Z ##[endgroup]&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.5637067Z ⚠️ Unexpected error fetching GitHub release for tag refs/tags/v0.1.0: HttpError: Resource not accessible by integration&#xA;build&#x9;Publish release assets&#x9;2026-03-05T02:35:55.5660126Z ##[error]Resource not accessible by integration&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--152s&#34;&gt;Assistant (Build · gpt-5.3-codex · 15.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--152s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating CI workflows and actions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr diff 1&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows diff for PR 1&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml&#xA;index 3c6e17a..6ebdf4c 100644&#xA;--- a/.github/workflows/ci.yml&#xA;+++ b/.github/workflows/ci.yml&#xA;@@ -12,7 +12,7 @@ jobs:&#xA;     steps:&#xA;       - uses: actions/checkout@v4&#xA;       - name: Set up Go&#xA;-        uses: actions/setup-go@v5&#xA;+        uses: actions/setup-go@v6&#xA;         with:&#xA;           go-version: 1.24&#xA;       - name: Cache Go modules&#xA;diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml&#xA;index b928326..2accb13 100644&#xA;--- a/.github/workflows/release.yml&#xA;+++ b/.github/workflows/release.yml&#xA;@@ -10,7 +10,7 @@ jobs:&#xA;     steps:&#xA;       - uses: actions/checkout@v4&#xA;       - name: Set up Go&#xA;-        uses: actions/setup-go@v5&#xA;+        uses: actions/setup-go@v6&#xA;         with:&#xA;           go-version: 1.24&#xA;       - name: Build cross-platform binaries&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr diff 2&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows diff for PR 2&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml&#xA;index 3c6e17a..52957a1 100644&#xA;--- a/.github/workflows/ci.yml&#xA;+++ b/.github/workflows/ci.yml&#xA;@@ -16,7 +16,7 @@ jobs:&#xA;         with:&#xA;           go-version: 1.24&#xA;       - name: Cache Go modules&#xA;-        uses: actions/cache@v3&#xA;+        uses: actions/cache@v5&#xA;         with:&#xA;           path: |&#xA;             ~/.cache/go-build&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr diff 3&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows diff for PR 3&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml&#xA;index b928326..3d50947 100644&#xA;--- a/.github/workflows/release.yml&#xA;+++ b/.github/workflows/release.yml&#xA;@@ -41,7 +41,7 @@ jobs:&#xA;           done&#xA;           sha256sum &amp;#34;$artifacts&amp;#34;/*.zip &amp;gt; &amp;#34;$artifacts/checksums.txt&amp;#34;&#xA;       - name: Publish release assets&#xA;-        uses: softprops/action-gh-release@v1&#xA;+        uses: softprops/action-gh-release@v2&#xA;         with:&#xA;           files: |&#xA;             artifacts/*.zip&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr diff 4&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows diff for PR 4&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml&#xA;index 3c6e17a..12ada8d 100644&#xA;--- a/.github/workflows/ci.yml&#xA;+++ b/.github/workflows/ci.yml&#xA;@@ -10,7 +10,7 @@ jobs:&#xA;   checks:&#xA;     runs-on: ubuntu-latest&#xA;     steps:&#xA;-      - uses: actions/checkout@v4&#xA;+      - uses: actions/checkout@v6&#xA;       - name: Set up Go&#xA;         uses: actions/setup-go@v5&#xA;         with:&#xA;diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml&#xA;index b928326..5ba15b5 100644&#xA;--- a/.github/workflows/release.yml&#xA;+++ b/.github/workflows/release.yml&#xA;@@ -8,7 +8,7 @@ jobs:&#xA;   build:&#xA;     runs-on: ubuntu-latest&#xA;     steps:&#xA;-      - uses: actions/checkout@v4&#xA;+      - uses: actions/checkout@v6&#xA;       - name: Set up Go&#xA;         uses: actions/setup-go@v5&#xA;         with:&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr diff 5&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows diff for PR 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;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml&#xA;index 3c6e17a..96c24af 100644&#xA;--- a/.github/workflows/ci.yml&#xA;+++ b/.github/workflows/ci.yml&#xA;@@ -25,7 +25,7 @@ jobs:&#xA;       - name: Format code&#xA;         run: go fmt ./...&#xA;       - name: Run golangci-lint&#xA;-        uses: golangci/golangci-lint-action@v4&#xA;+        uses: golangci/golangci-lint-action@v9&#xA;         with:&#xA;           version: v1.64.0&#xA;           args: run ./...&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--55s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--55s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Upgrading GitHub actions versions and permissions&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/.github/workflows/ci.yml&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/.github/workflows/ci.yml&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: name: CI&#xA;2: &#xA;3: on:&#xA;4:   push:&#xA;5:     branches: [main]&#xA;6:   pull_request:&#xA;7:     branches: [main]&#xA;8: &#xA;9: jobs:&#xA;10:   checks:&#xA;11:     runs-on: ubuntu-latest&#xA;12:     steps:&#xA;13:       - uses: actions/checkout@v4&#xA;14:       - name: Set up Go&#xA;15:         uses: actions/setup-go@v5&#xA;16:         with:&#xA;17:           go-version: 1.24&#xA;18:       - name: Cache Go modules&#xA;19:         uses: actions/cache@v3&#xA;20:         with:&#xA;21:           path: |&#xA;22:             ~/.cache/go-build&#xA;23:             ~/go/pkg/mod&#xA;24:           key: ${{ runner.os }}-go-${{ hashFiles(&amp;#39;**/go.sum&amp;#39;) }}&#xA;25:       - name: Format code&#xA;26:         run: go fmt ./...&#xA;27:       - name: Run golangci-lint&#xA;28:         uses: golangci/golangci-lint-action@v4&#xA;29:         with:&#xA;30:           version: v1.64.0&#xA;31:           args: run ./...&#xA;32:       - name: Vet packages&#xA;33:         run: go vet ./...&#xA;34:       - name: Run tests&#xA;35:         run: go test ./...&#xA;&#xA;(End of file - total 35 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: read&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;filePath&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo/.github/workflows/release.yml&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;lt;path&amp;gt;/home/waylon/git/tgo/.github/workflows/release.yml&amp;lt;/path&amp;gt;&#xA;&amp;lt;type&amp;gt;file&amp;lt;/type&amp;gt;&#xA;&amp;lt;content&amp;gt;1: name: Release&#xA;2: &#xA;3: on:&#xA;4:   release:&#xA;5:     types: [published]&#xA;6: &#xA;7: jobs:&#xA;8:   build:&#xA;9:     runs-on: ubuntu-latest&#xA;10:     steps:&#xA;11:       - uses: actions/checkout@v4&#xA;12:       - name: Set up Go&#xA;13:         uses: actions/setup-go@v5&#xA;14:         with:&#xA;15:           go-version: 1.24&#xA;16:       - name: Build cross-platform binaries&#xA;17:         run: |&#xA;18:           set -euo pipefail&#xA;19:           artifacts=artifacts&#xA;20:           mkdir -p &amp;#34;$artifacts&amp;#34;&#xA;21:           combos=(&#xA;22:             linux:amd64&#xA;23:             linux:arm64&#xA;24:             darwin:amd64&#xA;25:             darwin:arm64&#xA;26:             windows:amd64&#xA;27:             windows:arm64&#xA;28:           )&#xA;29:           for combo in &amp;#34;${combos[@]}&amp;#34;; do&#xA;30:             os=${combo%%:*}&#xA;31:             arch=${combo##*:}&#xA;32:             bin_name=&amp;#34;tgo-${os}-${arch}&amp;#34;&#xA;33:             bin_path=&amp;#34;$artifacts/${bin_name}&amp;#34;&#xA;34:             if [[ &amp;#34;$os&amp;#34; == &amp;#34;windows&amp;#34; ]]; then&#xA;35:               bin_path+=&amp;#34;.exe&amp;#34;&#xA;36:             fi&#xA;37:             GOOS=&amp;#34;$os&amp;#34; GOARCH=&amp;#34;$arch&amp;#34; go build -ldflags &amp;#34;-s -w&amp;#34; -o &amp;#34;$bin_path&amp;#34; ./cmd/tgo&#xA;38:             archive=&amp;#34;$artifacts/${bin_name}.zip&amp;#34;&#xA;39:             zip -j &amp;#34;$archive&amp;#34; &amp;#34;$bin_path&amp;#34;&#xA;40:             rm &amp;#34;$bin_path&amp;#34;&#xA;41:           done&#xA;42:           sha256sum &amp;#34;$artifacts&amp;#34;/*.zip &amp;gt; &amp;#34;$artifacts/checksums.txt&amp;#34;&#xA;43:       - name: Publish release assets&#xA;44:         uses: softprops/action-gh-release@v1&#xA;45:         with:&#xA;46:           files: |&#xA;47:             artifacts/*.zip&#xA;48:             artifacts/checksums.txt&#xA;49:         env:&#xA;50:           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}&#xA;&#xA;(End of file - total 50 lines)&#xA;&amp;lt;/content&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--104s&#34;&gt;Assistant (Build · gpt-5.3-codex · 10.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--104s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning Go version and patch updates&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/.github/workflows/ci.yml\n@@\n     runs-on: ubuntu-latest\n     steps:\n-      - uses: actions/checkout@v4\n+      - uses: actions/checkout@v6\n       - name: Set up Go\n-        uses: actions/setup-go@v5\n+        uses: actions/setup-go@v6\n         with:\n           go-version: 1.24\n       - name: Cache Go modules\n-        uses: actions/cache@v3\n+        uses: actions/cache@v5\n@@\n       - name: Run golangci-lint\n-        uses: golangci/golangci-lint-action@v4\n+        uses: golangci/golangci-lint-action@v9\n         with:\n-          version: v1.64.0\n+          version: latest\n           args: run ./...\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/.github/workflows/ci.yml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/.github/workflows/release.yml\n@@\n on:\n   release:\n     types: [published]\n+\n+permissions:\n+  contents: write\n@@\n   build:\n     runs-on: ubuntu-latest\n     steps:\n-      - uses: actions/checkout@v4\n+      - uses: actions/checkout@v6\n       - name: Set up Go\n-        uses: actions/setup-go@v5\n+        uses: actions/setup-go@v6\n         with:\n           go-version: 1.24\n@@\n       - name: Publish release assets\n-        uses: softprops/action-gh-release@v1\n+        uses: softprops/action-gh-release@v2\n         with:\n           files: |\n             artifacts/*.zip\n             artifacts/checksums.txt\n-        env:\n-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/.github/workflows/release.yml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--58s-2&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--58s-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Committing changes and running tests&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go test ./...&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Runs Go tests before committing changes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok  &#x9;tgo/cmd/tgo&#x9;(cached)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git status --short&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shows files changed before commit&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; M .github/workflows/ci.yml&#xA; M .github/workflows/release.yml&#xA; M README.md&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--31s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--31s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Committing initial changes&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add README.md .github/workflows/ci.yml .github/workflows/release.yml &amp;amp;&amp;amp; git commit -m \&amp;#34;chore: update install docs and stabilize actions\&amp;#34; &amp;amp;&amp;amp; git push origin main&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commits changes and pushes main branch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[main db51a9e] chore: update install docs and stabilize actions&#xA; 3 files changed, 44 insertions(+), 10 deletions(-)&#xA;To https://github.com/WaylonWalker/tgo.git&#xA;   d210c44..db51a9e  main -&amp;gt; main&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--83s&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--83s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning tag and release move&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git tag -f v0.1.0 db51a9e &amp;amp;&amp;amp; git push --force origin v0.1.0&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Moves v0.1.0 tag to latest commit&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Updated tag &amp;#39;v0.1.0&amp;#39; (was 69667e6)&#xA;To https://github.com/WaylonWalker/tgo.git&#xA; + 69667e6...db51a9e v0.1.0 -&amp;gt; v0.1.0 (forced update)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--49s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.9s) &lt;a href=&#34;#assistant-build--gpt-53-codex--49s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Noticing non-commit object in history&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release edit v0.1.0 --target db51a9e --notes &amp;#39;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (`asdfqwertzxcvb`), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.\n- Added installation docs for mise, jpillora installer, go install, and GitHub release assets.\n- Updated GitHub Actions versions and release permissions to fix CI/release pipeline failures.&amp;#39;&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Moves release target and refreshes release notes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;HTTP 422: Validation Failed (https://api.github.com/repos/WaylonWalker/tgo/releases/293241996)&#xA;Release.target_commitish is invalid&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--60s&#34;&gt;Assistant (Build · gpt-5.3-codex · 6.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--60s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adjusting target parameter usage&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release edit v0.1.0 --target main --notes &amp;#39;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (`asdfqwertzxcvb`), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.\n- Added installation docs for mise, jpillora installer, go install, and GitHub release assets.\n- Updated GitHub Actions versions and release permissions to fix CI/release pipeline failures.&amp;#39;&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Retargets v0.1.0 release to main branch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--116s&#34;&gt;Assistant (Build · gpt-5.3-codex · 11.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--116s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Adding manual workflow trigger and reviewing PRs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run list --limit 10 --json databaseId,workflowName,displayTitle,status,conclusion,event,headBranch,url&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks latest workflow runs after workflow updates&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699908,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/checkout - Update #1268818413&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699908&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699789,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for golangci/golangci-lint-action - Update #1268818411&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699789&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699295,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for softprops/action-gh-release - Update #1268818408&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699295&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699236,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/cache - Update #1268818405&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699236&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699698905,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/setup-go - Update #1268818404&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;queued&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699698905&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699690701,&amp;#34;displayTitle&amp;#34;:&amp;#34;chore: update install docs and stabilize actions&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699690701&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699585815,&amp;#34;displayTitle&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699585815&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Release&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699582094,&amp;#34;displayTitle&amp;#34;:&amp;#34;release: cut v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699582094&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699581066,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump golangci/golangci-lint-action from 4 to 9&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/golangci/golangci-lint-action-9&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699581066&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699579673,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/checkout from 4 to 6&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/checkout-6&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699579673&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;}]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--26s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--26s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Waiting for CI results&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run watch 22699690701 --exit-status&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Watches latest CI run until completion&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Run CI (22699690701) has already completed with &amp;#39;failure&amp;#39;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--84s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 8.4s) &lt;a href=&#34;#assistant-build--gpt-53-codex--84s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Reviewing failure logs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run view 22699690701 --log-failed&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Displays failed logs for latest CI run&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;checks&#x9;Run golangci-lint&#x9;﻿2026-03-05T02:39:53.4100336Z ##[group]Run golangci/golangci-lint-action@v9&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4100685Z with:&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4100865Z   version: latest&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4101062Z   args: run ./...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4101253Z   install-mode: binary&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4101462Z   install-only: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4101856Z   github-token: ***&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4102056Z   verify: true&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4102253Z   only-new-issues: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4102484Z   skip-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4102677Z   skip-save-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4102894Z   cache-invalidation-interval: 7&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4103142Z   problem-matchers: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4103358Z env:&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4103537Z   GOTOOLCHAIN: local&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.4103723Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.5573089Z ##[group]Restore cache&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.5577067Z Checking for go.mod: go.mod&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.5582547Z (node:2480) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.5583547Z (Use `node --trace-deprecation ...` to show where the warning was created)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6275095Z Cache not found for input keys: golangci-lint.cache-Linux-2931-2e9307367ecafa9cfe0e490aacded5605e3eff13, golangci-lint.cache-Linux-2931-&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6276699Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6277821Z ##[group]Install&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6278396Z Finding needed golangci-lint version...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6662031Z Requested golangci-lint &amp;#39;latest&amp;#39;, using &amp;#39;v2.10.1&amp;#39;, calculation took 38ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6662945Z Installation mode: binary&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6663462Z Installing golangci-lint binary v2.10.1...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.6664712Z Downloading binary https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-linux-amd64.tar.gz ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:53.8524715Z [command]/usr/bin/tar xz --overwrite --warning=no-unknown-keyword --overwrite -C /home/runner -f /home/runner/work/_temp/986f8f88-51b3-446e-8f7b-ff5685a00315&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:54.1104111Z Installed golangci-lint into /home/runner/golangci-lint-2.10.1-linux-amd64/golangci-lint in 444ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:54.1108152Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:54.1111841Z ##[group]run golangci-lint&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:54.1117179Z Running [/home/runner/golangci-lint-2.10.1-linux-amd64/golangci-lint config path] in [/home/runner/work/tgo/tgo] ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:39:54.1910735Z Running [/home/runner/golangci-lint-2.10.1-linux-amd64/golangci-lint run  run ./...] in [/home/runner/work/tgo/tgo] ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6184982Z 0 issues.&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6185253Z &#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6185889Z level=error msg=&amp;#34;[linters_context] typechecking error: stat /home/runner/work/tgo/tgo/run: directory not found&amp;#34;&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6186597Z &#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6204030Z ##[error]golangci-lint exit with code 7&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6212754Z Ran golangci-lint in 10428ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:04.6213257Z ##[endgroup]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--45s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--45s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Fixing duplicate run in CI args&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/.github/workflows/ci.yml\n@@\n       - name: Run golangci-lint\n         uses: golangci/golangci-lint-action@v9\n         with:\n           version: latest\n-          args: run ./...\n+          args: ./...\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/.github/workflows/ci.yml&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--77s&#34;&gt;Assistant (Build · gpt-5.3-codex · 7.7s) &lt;a href=&#34;#assistant-build--gpt-53-codex--77s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Committing CI fix and reviewing PRs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add .github/workflows/ci.yml &amp;amp;&amp;amp; git commit -m \&amp;#34;fix: correct golangci-lint action args\&amp;#34; &amp;amp;&amp;amp; git push origin main&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commits CI lint argument fix and pushes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[main 29f8b3f] fix: correct golangci-lint action args&#xA; 1 file changed, 1 insertion(+), 1 deletion(-)&#xA;To https://github.com/WaylonWalker/tgo.git&#xA;   db51a9e..29f8b3f  main -&amp;gt; main&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--58s-3&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--58s-3&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Moving tag to latest commit&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git tag -f v0.1.0 29f8b3f &amp;amp;&amp;amp; git push --force origin v0.1.0&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Moves v0.1.0 tag to latest CI-fix commit&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Updated tag &amp;#39;v0.1.0&amp;#39; (was db51a9e)&#xA;To https://github.com/WaylonWalker/tgo.git&#xA; + db51a9e...29f8b3f v0.1.0 -&amp;gt; v0.1.0 (forced update)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--76s&#34;&gt;Assistant (Build · gpt-5.3-codex · 7.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--76s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recreating release to fix workflow&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release delete v0.1.0 --yes &amp;amp;&amp;amp; gh release create v0.1.0 --title \&amp;#34;v0.1.0\&amp;#34; --notes &amp;#39;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (`asdfqwertzxcvb`), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.\n- Added installation docs for mise, jpillora installer, go install, and GitHub release assets.\n- Updated GitHub Actions versions and release permissions to stabilize CI and release pipelines.&amp;#39;&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Recreates v0.1.0 release to trigger release workflow&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--127s&#34;&gt;Assistant (Build · gpt-5.3-codex · 12.7s) &lt;a href=&#34;#assistant-build--gpt-53-codex--127s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Closing all superseded PRs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;for pr in 1 2 3 4 5; do gh pr comment \&amp;#34;$pr\&amp;#34; --body \&amp;#34;Thanks for the update. I applied these workflow action/version updates directly on main while fixing CI and release automation, so this PR is now superseded.\&amp;#34;; gh pr close \&amp;#34;$pr\&amp;#34;; done&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Comments on and closes superseded Dependabot PRs&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/WaylonWalker/tgo/pull/1#issuecomment-4001721898&#xA;! Pull request WaylonWalker/tgo#1 (Bump actions/setup-go from 5 to 6) is already closed&#xA;https://github.com/WaylonWalker/tgo/pull/2#issuecomment-4001721948&#xA;! Pull request WaylonWalker/tgo#2 (Bump actions/cache from 3 to 5) is already closed&#xA;https://github.com/WaylonWalker/tgo/pull/3#issuecomment-4001722008&#xA;! Pull request WaylonWalker/tgo#3 (Bump softprops/action-gh-release from 1 to 2) is already closed&#xA;https://github.com/WaylonWalker/tgo/pull/4#issuecomment-4001722055&#xA;! Pull request WaylonWalker/tgo#4 (Bump actions/checkout from 4 to 6) is already closed&#xA;https://github.com/WaylonWalker/tgo/pull/5#issuecomment-4001722100&#xA;! Pull request WaylonWalker/tgo#5 (Bump golangci/golangci-lint-action from 4 to 9) is already closed&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--137s&#34;&gt;Assistant (Build · gpt-5.3-codex · 13.7s) &lt;a href=&#34;#assistant-build--gpt-53-codex--137s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Verifying PR and workflow status&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh pr list --state open --limit 20 --json number,title,url&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks for any remaining open pull requests&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--46s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.6s) &lt;a href=&#34;#assistant-build--gpt-53-codex--46s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Checking workflow statuses&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run list --limit 20 --json databaseId,workflowName,displayTitle,status,conclusion,event,headBranch,url&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Lists recent workflow runs to verify fixes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699716792,&amp;#34;displayTitle&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699716792&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Release&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699711833,&amp;#34;displayTitle&amp;#34;:&amp;#34;fix: correct golangci-lint action args&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699711833&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699908,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/checkout - Update #1268818413&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699908&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699789,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for golangci/golangci-lint-action - Update #1268818411&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699789&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699295,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for softprops/action-gh-release - Update #1268818408&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699295&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699236,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/cache - Update #1268818405&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699236&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699698905,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/setup-go - Update #1268818404&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699698905&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699690701,&amp;#34;displayTitle&amp;#34;:&amp;#34;chore: update install docs and stabilize actions&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699690701&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699585815,&amp;#34;displayTitle&amp;#34;:&amp;#34;Release&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699585815&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Release&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699582094,&amp;#34;displayTitle&amp;#34;:&amp;#34;release: cut v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699582094&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699581066,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump golangci/golangci-lint-action from 4 to 9&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/golangci/golangci-lint-action-9&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699581066&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699579673,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/checkout from 4 to 6&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/checkout-6&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699579673&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699578446,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump softprops/action-gh-release from 1 to 2&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/softprops/action-gh-release-2&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699578446&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699577147,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/cache from 3 to 5&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/cache-5&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699577147&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699576373,&amp;#34;displayTitle&amp;#34;:&amp;#34;Bump actions/setup-go from 5 to 6&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;pull_request&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;dependabot/github_actions/actions/setup-go-6&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699576373&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699563990,&amp;#34;displayTitle&amp;#34;:&amp;#34;go_modules in /. - Update #1268814535&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699563990&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699563842,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in /. - Update #1268814536&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699563842&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699562904,&amp;#34;displayTitle&amp;#34;:&amp;#34;init&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699562904&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;}]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--42s-2&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--42s-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Examining CI failure cause&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run view 22699711833 --log-failed&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Displays failed logs for latest CI run&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;checks&#x9;Run golangci-lint&#x9;﻿2026-03-05T02:40:41.6888912Z ##[group]Run golangci/golangci-lint-action@v9&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6889217Z with:&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6889379Z   version: latest&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6889559Z   args: ./...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6889724Z   install-mode: binary&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6889917Z   install-only: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6890233Z   github-token: ***&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6890412Z   verify: true&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6890596Z   only-new-issues: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6890794Z   skip-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6891186Z   skip-save-cache: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6891555Z   cache-invalidation-interval: 7&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6891793Z   problem-matchers: false&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6891983Z env:&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6892145Z   GOTOOLCHAIN: local&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.6892321Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.8304996Z ##[group]Restore cache&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.8309650Z Checking for go.mod: go.mod&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.8315055Z (node:2406) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:41.8316012Z (Use `node --trace-deprecation ...` to show where the warning was created)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.0403836Z Cache hit for: golangci-lint.cache-Linux-2931-2e9307367ecafa9cfe0e490aacded5605e3eff13&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.0515022Z (node:2406) [DEP0169] DeprecationWarning: `url.parse()` behavior is not standardized and prone to errors that have security implications. Use the WHATWG URL API instead. CVEs are not issued for `url.parse()` vulnerabilities.&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3105604Z Received 6048 of 6048 (100.0%), 0.1 MBs/sec&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3106256Z Cache Size: ~0 MB (6048 B)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3135179Z [command]/usr/bin/tar -xf /home/runner/work/_temp/c31c6f51-5894-40dc-8dac-43cb4ab23586/cache.tzst -P -C /home/runner/work/tgo/tgo --use-compress-program unzstd&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3297774Z Cache restored successfully&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3301976Z Restored cache for golangci-lint from key &amp;#39;golangci-lint.cache-Linux-2931-2e9307367ecafa9cfe0e490aacded5605e3eff13&amp;#39; in 500ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3304437Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3305201Z ##[group]Install&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3305737Z Finding needed golangci-lint version...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3974950Z Requested golangci-lint &amp;#39;latest&amp;#39;, using &amp;#39;v2.10.1&amp;#39;, calculation took 67ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3975656Z Installation mode: binary&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3976316Z Installing golangci-lint binary v2.10.1...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.3977846Z Downloading binary https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-linux-amd64.tar.gz ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:42.9162634Z [command]/usr/bin/tar xz --overwrite --warning=no-unknown-keyword --overwrite -C /home/runner -f /home/runner/work/_temp/d839b6af-db27-4290-bf77-de8cd42f9a6a&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:43.1885742Z Installed golangci-lint into /home/runner/golangci-lint-2.10.1-linux-amd64/golangci-lint in 791ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:43.1890096Z ##[endgroup]&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:43.1893990Z ##[group]run golangci-lint&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:43.1898089Z Running [/home/runner/golangci-lint-2.10.1-linux-amd64/golangci-lint config path] in [/home/runner/work/tgo/tgo] ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:43.2678381Z Running [/home/runner/golangci-lint-2.10.1-linux-amd64/golangci-lint run  ./...] in [/home/runner/work/tgo/tgo] ...&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2347736Z ##[error]cmd/tgo/view.go:34:2: ineffectual assignment to line (ineffassign)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2356091Z &#x9;line = a.drawSection(screen, line, width, height, &amp;#34;Others&amp;#34;, a.others, a.cursorOther, a.section == 1)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2356564Z &#x9;^&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2357255Z ##[error]cmd/tgo/tmux.go:153:6: func runesToString is unused (unused)&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2358182Z func runesToString(m map[string]rune, ordered []session) string {&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2358605Z      ^&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2358786Z 2 issues:&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2358982Z * ineffassign: 1&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2359183Z * unused: 1&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2359290Z &#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2368562Z ##[error]issues found&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2369548Z Ran golangci-lint in 10964ms&#xA;checks&#x9;Run golangci-lint&#x9;2026-03-05T02:40:54.2370094Z ##[endgroup]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--98s&#34;&gt;Assistant (Build · gpt-5.3-codex · 9.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--98s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Removing unused code and assignments&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/cmd/tgo/view.go\n@@\n \tline = a.drawSection(screen, line, width, height, \&amp;#34;Favorites\&amp;#34;, a.favorites, a.cursorFav, a.section == 0)\n-\tline = a.drawSection(screen, line, width, height, \&amp;#34;Others\&amp;#34;, a.others, a.cursorOther, a.section == 1)\n+\ta.drawSection(screen, line, width, height, \&amp;#34;Others\&amp;#34;, a.others, a.cursorOther, a.section == 1)\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/cmd/tgo/view.go&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: apply_patch&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;patchText&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;*** Begin Patch\n*** Update File: /home/waylon/git/tgo/cmd/tgo/tmux.go\n@@\n-import (\n-\t\&amp;#34;bytes\&amp;#34;\n-\t\&amp;#34;fmt\&amp;#34;\n+import (\n+\t\&amp;#34;fmt\&amp;#34;\n \t\&amp;#34;os/exec\&amp;#34;\n \t\&amp;#34;sort\&amp;#34;\n \t\&amp;#34;strings\&amp;#34;\n )\n@@\n-func runesToString(m map[string]rune, ordered []session) string {\n-\tbuf := bytes.Buffer{}\n-\tfor _, s := range ordered {\n-\t\tr, ok := m[s.Name]\n-\t\tif !ok {\n-\t\t\tcontinue\n-\t\t}\n-\t\tbuf.WriteRune(r)\n-\t}\n-\treturn buf.String()\n-}\n*** End Patch&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Success. Updated the following files:&#xA;M home/waylon/git/tgo/cmd/tgo/tmux.go&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--61s&#34;&gt;Assistant (Build · gpt-5.3-codex · 6.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--61s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning Go test and vet runs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;go test ./... &amp;amp;&amp;amp; go vet ./...&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Runs tests and vet after lint fixes&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ok  &#x9;tgo/cmd/tgo&#x9;0.003s&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--140s&#34;&gt;Assistant (Build · gpt-5.3-codex · 14.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--140s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Pushing fixes to repo&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add cmd/tgo/view.go cmd/tgo/tmux.go &amp;amp;&amp;amp; git commit -m \&amp;#34;fix: resolve lint errors in TUI code\&amp;#34; &amp;amp;&amp;amp; git push origin main&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Commits lint fixes and pushes to main&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[main 2af8f82] fix: resolve lint errors in TUI code&#xA; 2 files changed, 1 insertion(+), 14 deletions(-)&#xA;To https://github.com/WaylonWalker/tgo.git&#xA;   29f8b3f..2af8f82  main -&amp;gt; main&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--48s&#34;&gt;Assistant (Build · gpt-5.3-codex · 4.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--48s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Moving tag and recreating release&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git tag -f v0.1.0 2af8f82 &amp;amp;&amp;amp; git push --force origin v0.1.0&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Moves v0.1.0 tag to latest lint-fix commit&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Updated tag &amp;#39;v0.1.0&amp;#39; (was 29f8b3f)&#xA;To https://github.com/WaylonWalker/tgo.git&#xA; + 29f8b3f...2af8f82 v0.1.0 -&amp;gt; v0.1.0 (forced update)&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--55s-2&#34;&gt;Assistant (Build · gpt-5.3-codex · 5.5s) &lt;a href=&#34;#assistant-build--gpt-53-codex--55s-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning release replacement strategy&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release delete v0.1.0 --yes &amp;amp;&amp;amp; gh release create v0.1.0 --title \&amp;#34;v0.1.0\&amp;#34; --notes &amp;#39;## Highlights\n- Initial release of tgo: fast tmux session switcher optimized for popup use.\n- Interactive TUI with direct letter switching (`asdfqwertzxcvb`), favorites pinning, and reorder mode.\n- Session management actions from UI: create, kill, refresh, and persistent ordering state.\n- Added installation docs for mise, jpillora installer, go install, and GitHub release assets.\n- Updated and fixed GitHub Actions CI/release workflow definitions.&amp;#39;&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Recreates release after moving tag to latest commit&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--32s&#34;&gt;Assistant (Build · gpt-5.3-codex · 3.2s) &lt;a href=&#34;#assistant-build--gpt-53-codex--32s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Monitoring latest CI runs&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run list --limit 10 --json databaseId,workflowName,displayTitle,status,conclusion,event,headBranch,url&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks latest CI and release run statuses&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699744966,&amp;#34;displayTitle&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;queued&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699744966&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Release&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;databaseId&amp;#34;:22699741216,&amp;#34;displayTitle&amp;#34;:&amp;#34;fix: resolve lint errors in TUI code&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;in_progress&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699741216&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699716792,&amp;#34;displayTitle&amp;#34;:&amp;#34;Release&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;release&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699716792&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Release&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699711833,&amp;#34;displayTitle&amp;#34;:&amp;#34;fix: correct golangci-lint action args&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699711833&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699908,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/checkout - Update #1268818413&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699908&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699789,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for golangci/golangci-lint-action - Update #1268818411&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699789&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699295,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for softprops/action-gh-release - Update #1268818408&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699295&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699699236,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/cache - Update #1268818405&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699699236&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;success&amp;#34;,&amp;#34;databaseId&amp;#34;:22699698905,&amp;#34;displayTitle&amp;#34;:&amp;#34;github_actions in / for actions/setup-go - Update #1268818404&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;dynamic&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699698905&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;Dependabot Updates&amp;#34;},{&amp;#34;conclusion&amp;#34;:&amp;#34;failure&amp;#34;,&amp;#34;databaseId&amp;#34;:22699690701,&amp;#34;displayTitle&amp;#34;:&amp;#34;chore: update install docs and stabilize actions&amp;#34;,&amp;#34;event&amp;#34;:&amp;#34;push&amp;#34;,&amp;#34;headBranch&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;status&amp;#34;:&amp;#34;completed&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/actions/runs/22699690701&amp;#34;,&amp;#34;workflowName&amp;#34;:&amp;#34;CI&amp;#34;}]&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--233s&#34;&gt;Assistant (Build · gpt-5.3-codex · 23.3s) &lt;a href=&#34;#assistant-build--gpt-53-codex--233s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Planning sequential CI monitoring&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run watch 22699741216 --exit-status&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Watches latest CI run for successful completion&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Refreshing run status every 3 seconds. Press Ctrl+C to quit.&#xA;&#xA;* main CI · 22699741216&#xA;Triggered via push less than a minute ago&#xA;&#xA;JOBS&#xA;* checks (ID 65813933132)&#xA;  ✓ Set up job&#xA;  ✓ Run actions/checkout@v6&#xA;  ✓ Set up Go&#xA;  ✓ Cache Go modules&#xA;  ✓ Format code&#xA;  * Run golangci-lint&#xA;  * Vet packages&#xA;  * Run tests&#xA;  * Post Run golangci-lint&#xA;  * Post Cache Go modules&#xA;  * Post Set up Go&#xA;  * Post Run actions/checkout@v6&#xA;Refreshing run status every 3 seconds. Press Ctrl+C to quit.&#xA;&#xA;* main CI · 22699741216&#xA;Triggered via push less than a minute ago&#xA;&#xA;JOBS&#xA;* checks (ID 65813933132)&#xA;  ✓ Set up job&#xA;  ✓ Run actions/checkout@v6&#xA;  ✓ Set up Go&#xA;  ✓ Cache Go modules&#xA;  ✓ Format code&#xA;  ✓ Run golangci-lint&#xA;  * Vet packages&#xA;  * Run tests&#xA;  * Post Run golangci-lint&#xA;  * Post Cache Go modules&#xA;  * Post Set up Go&#xA;  * Post Run actions/checkout@v6&#xA;Refreshing run status every 3 seconds. Press Ctrl+C to quit.&#xA;&#xA;* main CI · 22699741216&#xA;Triggered via push less than a minute ago&#xA;&#xA;JOBS&#xA;* checks (ID 65813933132)&#xA;  ✓ Set up job&#xA;  ✓ Run actions/checkout@v6&#xA;  ✓ Set up Go&#xA;  ✓ Cache Go modules&#xA;  ✓ Format code&#xA;  ✓ Run golangci-lint&#xA;  ✓ Vet packages&#xA;  ✓ Run tests&#xA;  ✓ Post Run golangci-lint&#xA;  * Post Cache Go modules&#xA;  * Post Set up Go&#xA;  * Post Run actions/checkout@v6&#xA;Refreshing run status every 3 seconds. Press Ctrl+C to quit.&#xA;&#xA;* main CI · 22699741216&#xA;Triggered via push less than a minute ago&#xA;&#xA;JOBS&#xA;* checks (ID 65813933132)&#xA;  ✓ Set up job&#xA;  ✓ Run actions/checkout@v6&#xA;  ✓ Set up Go&#xA;  ✓ Cache Go modules&#xA;  ✓ Format code&#xA;  ✓ Run golangci-lint&#xA;  ✓ Vet packages&#xA;  ✓ Run tests&#xA;  ✓ Post Run golangci-lint&#xA;  ✓ Post Cache Go modules&#xA;  * Post Set up Go&#xA;  * Post Run actions/checkout@v6&#xA;✓ main CI · 22699741216&#xA;Triggered via push less than a minute ago&#xA;&#xA;JOBS&#xA;✓ checks in 30s (ID 65813933132)&#xA;  ✓ Set up job&#xA;  ✓ Run actions/checkout@v6&#xA;  ✓ Set up Go&#xA;  ✓ Cache Go modules&#xA;  ✓ Format code&#xA;  ✓ Run golangci-lint&#xA;  ✓ Vet packages&#xA;  ✓ Run tests&#xA;  ✓ Post Run golangci-lint&#xA;  ✓ Post Cache Go modules&#xA;  ✓ Post Set up Go&#xA;  ✓ Post Run actions/checkout@v6&#xA;  ✓ Complete job&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--28s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--28s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Observing release run progress&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh run watch 22699744966 --exit-status&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Watches release workflow run until completion&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;Run Release (22699744966) has already completed with &amp;#39;success&amp;#39;&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--77s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 7.7s) &lt;a href=&#34;#assistant-build--gpt-53-codex--77s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Verifying release assets presence&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;gh release view v0.1.0 --json url,tagName,targetCommitish,isDraft,isPrerelease,assets&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks release metadata and uploaded assets&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;{&amp;#34;assets&amp;#34;:[{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202449&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;text/plain&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:9411ecce656bab45708ca38d2fa2f0fd6bcdbba791e3e38bc6f004bc0eabcecc&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCR&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;checksums.txt&amp;#34;,&amp;#34;size&amp;#34;:582,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/checksums.txt&amp;#34;},{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202453&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;application/zip&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:f31d266ef4ce5aba00b678d900287982bf23fb735677941d31a2b37ff70dcd10&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCV&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;tgo-darwin-amd64.zip&amp;#34;,&amp;#34;size&amp;#34;:1212769,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:23Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/tgo-darwin-amd64.zip&amp;#34;},{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202451&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;application/zip&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:9d3fb0a2d70dc8bcb97d4d91179f49e1f0e298d889131a4404c84ad4731f1821&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCT&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;tgo-darwin-arm64.zip&amp;#34;,&amp;#34;size&amp;#34;:1149837,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/tgo-darwin-arm64.zip&amp;#34;},{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202450&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;application/zip&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:6497bbf5e358d3edaccbc69c114a8df4768b4ca9058fbb2b77ef1ca1d3db4a16&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCS&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;tgo-linux-amd64.zip&amp;#34;,&amp;#34;size&amp;#34;:1211862,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/tgo-linux-amd64.zip&amp;#34;},{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202456&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;application/zip&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:f52b3155710ee7c86ae572d5e5616553a9512dcea0a225b67c484c2e686b24a1&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCY&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;tgo-linux-arm64.zip&amp;#34;,&amp;#34;size&amp;#34;:1122154,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:23Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/tgo-linux-arm64.zip&amp;#34;},{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202448&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;application/zip&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:797793924141e6b7083142d7351bcbda99eae1ce52a4acd6140f2434d00b2bb9&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCQ&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;tgo-windows-amd64.zip&amp;#34;,&amp;#34;size&amp;#34;:1198632,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/tgo-windows-amd64.zip&amp;#34;},{&amp;#34;apiUrl&amp;#34;:&amp;#34;https://api.github.com/repos/WaylonWalker/tgo/releases/assets/367202447&amp;#34;,&amp;#34;contentType&amp;#34;:&amp;#34;application/zip&amp;#34;,&amp;#34;createdAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;digest&amp;#34;:&amp;#34;sha256:a596200fa2f39a0667a7211527d52cfff04ceb378f37fc45dda87452e152beb9&amp;#34;,&amp;#34;downloadCount&amp;#34;:0,&amp;#34;id&amp;#34;:&amp;#34;RA_kwDORewosc4V4xCP&amp;#34;,&amp;#34;label&amp;#34;:&amp;#34;&amp;#34;,&amp;#34;name&amp;#34;:&amp;#34;tgo-windows-arm64.zip&amp;#34;,&amp;#34;size&amp;#34;:1095347,&amp;#34;state&amp;#34;:&amp;#34;uploaded&amp;#34;,&amp;#34;updatedAt&amp;#34;:&amp;#34;2026-03-05T02:42:22Z&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/download/v0.1.0/tgo-windows-arm64.zip&amp;#34;}],&amp;#34;isDraft&amp;#34;:false,&amp;#34;isPrerelease&amp;#34;:false,&amp;#34;tagName&amp;#34;:&amp;#34;v0.1.0&amp;#34;,&amp;#34;targetCommitish&amp;#34;:&amp;#34;main&amp;#34;,&amp;#34;url&amp;#34;:&amp;#34;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&amp;#34;}&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--20s&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.0s) &lt;a href=&#34;#assistant-build--gpt-53-codex--20s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Checking git status cleanliness&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: bash&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;git status --short --branch&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;nt&#34;&gt;&amp;#34;workdir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/waylon/git/tgo&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;nt&#34;&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Checks final git status and branch sync&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;## main...origin/main&#xA;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--28s-1&#34;&gt;Assistant (Build · gpt-5.3-codex · 2.8s) &lt;a href=&#34;#assistant-build--gpt-53-codex--28s-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Updating todo statuses&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Tool: todowrite&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&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;&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;nt&#34;&gt;&amp;#34;todos&amp;#34;&lt;/span&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Draft builder delegation prompt for push, retag/release move, CI fixes, and PR handling&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Run builder subagent to execute requested git/GitHub operations end-to-end&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;nt&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Review builder output and report final repository/release/CI/PR status&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;nt&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;completed&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;nt&#34;&gt;&amp;#34;priority&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;high&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;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Draft builder delegation prompt for push, retag/release move, CI fixes, and PR handling&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Run builder subagent to execute requested git/GitHub operations end-to-end&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  },&#xA;  {&#xA;    &amp;#34;content&amp;#34;: &amp;#34;Review builder output and report final repository/release/CI/PR status&amp;#34;,&#xA;    &amp;#34;status&amp;#34;: &amp;#34;completed&amp;#34;,&#xA;    &amp;#34;priority&amp;#34;: &amp;#34;high&amp;#34;&#xA;  }&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;assistant-build--gpt-53-codex--91s&#34;&gt;Assistant (Build · gpt-5.3-codex · 9.1s) &lt;a href=&#34;#assistant-build--gpt-53-codex--91s&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Thinking:&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Summarizing release completion details&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Done. I delegated to &lt;code&gt;@builder&lt;/code&gt; first, then completed the full set of actions directly since the subagent couldn’t execute git/gh operations.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Pushed your pending README install updates and CI/release fixes to &lt;code&gt;main&lt;/code&gt; in:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;db51a9e&lt;/code&gt; &lt;code&gt;chore: update install docs and stabilize actions&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;29f8b3f&lt;/code&gt; &lt;code&gt;fix: correct golangci-lint action args&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;2af8f82&lt;/code&gt; &lt;code&gt;fix: resolve lint errors in TUI code&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Updated workflows to fix failures:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;: upgraded actions (&lt;code&gt;checkout@v6&lt;/code&gt;, &lt;code&gt;setup-go@v6&lt;/code&gt;, &lt;code&gt;cache@v5&lt;/code&gt;, &lt;code&gt;golangci-lint-action@v9&lt;/code&gt;) and fixed lint args to &lt;code&gt;./...&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.github/workflows/release.yml&lt;/code&gt;: upgraded actions, added &lt;code&gt;permissions: contents: write&lt;/code&gt;, moved to &lt;code&gt;softprops/action-gh-release@v2&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Moved tag and release:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Force-moved &lt;code&gt;v0.1.0&lt;/code&gt; to commit &lt;code&gt;2af8f82&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Recreated release &lt;code&gt;v0.1.0&lt;/code&gt; at &lt;code&gt;https://github.com/WaylonWalker/tgo/releases/tag/v0.1.0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Verified workflows:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CI success: &lt;code&gt;https://github.com/WaylonWalker/tgo/actions/runs/22699741216&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Release success: &lt;code&gt;https://github.com/WaylonWalker/tgo/actions/runs/22699744966&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;Release assets and checksums are published (linux/darwin/windows amd64+arm64 + &lt;code&gt;checksums.txt&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Addressed PRs:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open PRs now: none (&lt;code&gt;gh pr list&lt;/code&gt; returns &lt;code&gt;[]&lt;/code&gt;)&lt;/li&gt;&#xA;&lt;li&gt;PRs &lt;code&gt;#1&lt;/code&gt;-&lt;code&gt;#5&lt;/code&gt; were already closed; I left comments noting they were superseded by direct workflow updates on &lt;code&gt;main&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Repo is clean and synced: &lt;code&gt;main...origin/main&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If you want, I can cut &lt;code&gt;v0.1.1&lt;/code&gt; next so the history reflects these post-release fixes without moving &lt;code&gt;v0.1.0&lt;/code&gt; again.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>I Built A Tmux Session Switcher</title>
    <id>https://new.waylonwalker.com/i-built-a-tmux-session-switcher/</id>
    <updated>2026-03-04T00:00:00Z</updated>
    <published>2026-03-04T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/i-built-a-tmux-session-switcher/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been thinking about this for awhile now. For years now, fuzzy pickers and last session have been my go to. They have served me well. I can typically...</summary>
    <content type="html">&lt;p&gt;I’ve been thinking about this for awhile now.  For years now, fuzzy pickers and&#xA;last session have been my go to.  They have served me well.  I can typically&#xA;only keep so much in my head anyways.  I’m often doing a hub and spoke pattern&#xA;between main project, notes, and infra repo, maybe two projects.  Don’t get me&#xA;wrong, I regularly run with a dozen or more sessions running at a time, but&#xA;only two to three are in my immediate context at any point anyways.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-design&#34;&gt;The Design &lt;a href=&#34;#the-design&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;harpoon for tmux&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;press a hotkey followed by one more keystroke, currently any left hand letter&#xA;SIMPLE, FAST, thats of utmost importance, what I want are sessions that I can&#xA;can be assigned in order of importance from middle row, top row, bottom row.&lt;/p&gt;&#xA;&lt;p&gt;I added this binding to my tmux config.  Now I can press &lt;code&gt;c-a a&lt;/code&gt; to go to the&#xA;first session, &lt;code&gt;c-a s&lt;/code&gt; to go to the second session. &lt;code&gt;c-a&lt;/code&gt; and pause to think&#xA;j/k to navigate, space to pick up a session and move it, x to kill 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;bind-key -n c-a popup -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;~/go/bin/tgo&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;enter-the-agents&#34;&gt;Enter the agents &lt;a href=&#34;#enter-the-agents&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now with agents doing more and more work, and cooking for longer periods this&#xA;is not cutting it, I’m often swapping through a lot more sessions, I’ve got&#xA;more projects sitting in more phases between research, implementation, fully&#xA;orchestrated agents, and sessions that need their hand held to get things&#xA;right.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7c5765a0-126d-430a-ad86-eb83eb440e1b.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/7c5765a0-126d-430a-ad86-eb83eb440e1b.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Image of the &lt;code&gt;tgo&lt;/code&gt; tool in action, I’d show you a video, but its not really&#xA;that interesting, it just flashes up and goes to the next session as fast as&#xA;you can press the key.&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;made-with-gpt-53-codex-and-gpt-51-codex-mini&#34;&gt;Made with gpt-5.3-codex and gpt-5.1-codex-mini &lt;a href=&#34;#made-with-gpt-53-codex-and-gpt-51-codex-mini&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Idk how much it cost, it barely touched my $20/month weekly token allowance.&#xA;I’ve been thinking about it for awhile and decided today was the day to pull&#xA;the trigger on something and get it started, worst case I throw it away.  It&#xA;took the agents about 7 minutes to implement a working version with broken ci&#xA;that it later fixed.&lt;/p&gt;&#xA;&lt;p&gt;I’ve typed far more characters and put more thought into this post than the&#xA;tool itself, that where we are these days I guess.&lt;/p&gt;&#xA;&lt;p&gt;See the session that made &lt;code&gt;tgo&lt;/code&gt; &lt;a class=&#34;wikilink&#34; data-date=&#34;2026-03-04&#34; data-description=&#34;** ses***** 3/4/2026, 8:52:32 PM&#34; data-title=&#34;Ses_3444b09b1ffexter3elfg5qqtg&#34; href=&#34;/ses-3444b09b1ffexter3elfg5qqtg/&#34; data-preview=&#34;** ses***** 3/4/2026, 8:52:32 PM&#34;&gt;Ses_3444b09b1ffexter3elfg5qqtg&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;should-you-use-it&#34;&gt;Should you use it? &lt;a href=&#34;#should-you-use-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can its there for anyone to use, go for it, there’s an easy to download&#xA;binary.&lt;/p&gt;&#xA;&lt;p&gt;It’s all vibe coded slop that you could probably do a better job doing in a&#xA;cave with scraps anyways.  Take inspiration and make one that works 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>gh do I have a pr</title>
    <id>https://new.waylonwalker.com/gh-do-i-have-a-pr/</id>
    <updated>2026-03-02T08:47:44Z</updated>
    <published>2026-03-02T08:47:44Z</published>
    <link href="https://new.waylonwalker.com/gh-do-i-have-a-pr/" rel="alternate" type="text/html"></link>
    <summary type="text">In the age of agents sometimes work gets done on so many different worktrees and branches its hard to tell if there is already a PR or any of them or not,...</summary>
    <content type="html">&lt;p&gt;In the age of agents sometimes work gets done on so many different worktrees&#xA;and branches its hard to tell if there is already a PR or any of them or not,&#xA;the great &lt;code&gt;gh&lt;/code&gt; cli has us covered.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh pr list --head fix/markata-go-connections-graph&#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>Vaulted Secrets Without Git Churn</title>
    <id>https://new.waylonwalker.com/vaulted-secrets-without-git-churn/</id>
    <updated>2026-02-26T09:59:57Z</updated>
    <published>2026-02-26T09:59:57Z</published>
    <link href="https://new.waylonwalker.com/vaulted-secrets-without-git-churn/" rel="alternate" type="text/html"></link>
    <summary type="text">Ansible Vault keeps secrets out of sight, but the ciphertext changes on every encrypt. That turns Git diffs into noise and makes it hard to tell if anything...</summary>
    <content type="html">&lt;p&gt;Ansible Vault keeps secrets out of sight, but the ciphertext changes on every&#xA;encrypt. That turns &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; diffs into noise and makes it hard to tell if anything&#xA;actually changed. Decrypting, editing, and re-encrypting often leaves&#xA;uncertainty about whether any plaintext changed. This is amplified when secret&#xA;repos are tightly coupled to dependent repositories. A typical cycle includes&#xA;decrypting, adding a key, updating a value, applying changes, and returning&#xA;later with little clarity about what changed while secrets were in plaintext.&lt;/p&gt;&#xA;&lt;p&gt;Today a new workflow was created with @gpt-5.2-codex to keep diffs clean and&#xA;avoid re-encrypting when the plaintext is identical.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition chat-reply&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;&lt;span class=&#34;chat-contact&#34;&gt;&lt;a href=&#34;/8bitcc.png&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Waylon Walker&#34;&gt;&lt;img class=&#34;chat-contact-avatar glightbox&#34; src=&#34;/8bitcc.png&#34; alt=&#34;Waylon Walker&#34;/ data-glightbox=&#34;description: Waylon Walker&#34;&gt;&lt;/a&gt;&lt;span class=&#34;chat-contact-name&#34;&gt;Waylon Walker&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;This repo has ansible vaulted secrets and an encrypt/decrypt process, but no&#xA;way to compare. Please research compare options. The goal is to avoid&#xA;changing files on encrypt/decrypt when plaintext is unchanged, ideally by&#xA;comparing decrypted content and reusing the remote encrypted file.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;@gpt-5.2-codex&lt;/p&gt;&#xA;&lt;p&gt;The repo workflow will be reviewed, compare options identified, and a&#xA;low-churn GitOps approach proposed to avoid re-encrypt noise.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The problem &lt;a href=&#34;#the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Re-encrypting a file with the same content produces different ciphertext. A&#xA;simple decrypt/encrypt cycle can look like a full file change, even when the&#xA;plaintext is identical. That creates uncertainty and makes GitOps workflows feel&#xA;brittle.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition chat-reply&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;&lt;span class=&#34;chat-contact&#34;&gt;&lt;a href=&#34;/8bitcc.png&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Waylon Walker&#34;&gt;&lt;img class=&#34;chat-contact-avatar glightbox&#34; src=&#34;/8bitcc.png&#34; alt=&#34;Waylon Walker&#34;/ data-glightbox=&#34;description: Waylon Walker&#34;&gt;&lt;/a&gt;&lt;span class=&#34;chat-contact-name&#34;&gt;Waylon Walker&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;Minimal changes needed to keep GitOps clear?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;@gpt-5.2-codex&lt;/p&gt;&#xA;&lt;p&gt;Add compare-before-encrypt, decrypted diffs, and ignore cache artifacts.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;the-solution-at-a-glance&#34;&gt;The solution at a glance &lt;a href=&#34;#the-solution-at-a-glance&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Three pieces make it work:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Compare-before-encrypt&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;just decrypt&lt;/code&gt; stores a plaintext hash and caches the current encrypted&#xA;file.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;just encrypt&lt;/code&gt; compares the plaintext hash and, if unchanged, restores the&#xA;cached ciphertext instead of re-encrypting.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Readable diffs for vaulted files&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;.gitattributes&lt;/code&gt; sets &lt;code&gt;private/* diff=ansible-vault&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;A small &lt;code&gt;textconv&lt;/code&gt; script decrypts for &lt;code&gt;git diff&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Ignored cache artifacts&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;.vault-hashes/&lt;/code&gt; and &lt;code&gt;.vault-cache/&lt;/code&gt; are ignored so they never hit the&#xA;repo.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 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;/h2&gt;&#xA;&lt;div class=&#34;admonition chat-reply&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;&lt;span class=&#34;chat-contact&#34;&gt;&lt;a href=&#34;/8bitcc.png&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Waylon Walker&#34;&gt;&lt;img class=&#34;chat-contact-avatar glightbox&#34; src=&#34;/8bitcc.png&#34; alt=&#34;Waylon Walker&#34;/ data-glightbox=&#34;description: Waylon Walker&#34;&gt;&lt;/a&gt;&lt;span class=&#34;chat-contact-name&#34;&gt;Waylon Walker&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;How does compare-before-encrypt operate?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;@gpt-5.2-codex&lt;/p&gt;&#xA;&lt;p&gt;Hash plaintext on decrypt, reuse cached ciphertext on encrypt if the hash matches.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h3 id=&#34;compare-before-encrypt&#34;&gt;Compare-before-encrypt &lt;a href=&#34;#compare-before-encrypt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When a file is decrypted, a SHA-256 hash of the plaintext is created and stored&#xA;in &lt;code&gt;.vault-hashes/&lt;/code&gt;. A copy of the encrypted file is stored in &lt;code&gt;.vault-cache/&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;When encrypting, the current plaintext file is hashed. If the hash matches the&#xA;cached hash, the cached encrypted file is restored instead of generating new&#xA;ciphertext. Result: no churn when nothing actually changed.&lt;/p&gt;&#xA;&lt;h3 id=&#34;decrypted-diffs&#34;&gt;Decrypted diffs &lt;a href=&#34;#decrypted-diffs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;Git is configured to use &lt;code&gt;ansible-vault view&lt;/code&gt; as a text conversion step for&#xA;files under &lt;code&gt;private/&lt;/code&gt;. As a result, &lt;code&gt;git diff&lt;/code&gt; shows decrypted content instead&#xA;of ciphertext.&lt;/p&gt;&#xA;&lt;p&gt;Enable the diff driver locally:&lt;/p&gt;&#xA;&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 diff.ansible-vault.textconv &lt;span class=&#34;s2&#34;&gt;&amp;#34;scripts/ansible-vault-diff&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-changes-will-be-seen&#34;&gt;What changes will be seen &lt;a href=&#34;#what-changes-will-be-seen&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If a secret changes: the diff shows the plaintext change.&lt;/li&gt;&#xA;&lt;li&gt;If decrypt and re-encrypt occurs without changes: the diff stays clean.&lt;/li&gt;&#xA;&lt;li&gt;Large base64 blobs may still look like full-line diffs because they are&#xA;single-line values.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;admonition chat-reply&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;&lt;span class=&#34;chat-contact&#34;&gt;&lt;a href=&#34;/8bitcc.png&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Waylon Walker&#34;&gt;&lt;img class=&#34;chat-contact-avatar glightbox&#34; src=&#34;/8bitcc.png&#34; alt=&#34;Waylon Walker&#34;/ data-glightbox=&#34;description: Waylon Walker&#34;&gt;&lt;/a&gt;&lt;span class=&#34;chat-contact-name&#34;&gt;Waylon Walker&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xA;&lt;p&gt;What is the day-to-day workflow?&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;admonition chat&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;@gpt-5.2-codex&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;`just decrypt`, edit, then `just encrypt`. Clean diffs, no churn.&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;recommended-usage&#34;&gt;Recommended usage &lt;a href=&#34;#recommended-usage&#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;just decrypt&#xA;&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;# apply edits&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;just encrypt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That is sufficient to keep Git history clean and reduce uncertainty about&#xA;whether a secret actually changed.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Using stderr/stdout correctly - YouTube</title>
    <id>https://new.waylonwalker.com/thought-896/</id>
    <updated>2025-12-22T21:35:30Z</updated>
    <published>2025-12-22T21:35:30Z</published>
    <link href="https://new.waylonwalker.com/thought-896/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://youtu.be/XDAfpzjBYJQ?t=353</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;XDAfpzjBYJQ&#34; title=&#34;Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools&#34; playlabel=&#34;Play: Jeff Dickey - Mise, Usage, and Pitchfork and the Future of Polyglot Tools&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Yeah there’s some basics, you know things you might expect like using standard error and standard out correctly. One thing I’ll say on that because I think this is commonly misunderstood, standard error is not for errors, it’s for any information that isn’t part of the normal output. So you know often times that’s warnings and errors, but it might just be progress information. You know anytime that you just need to have something go to the user that’s what it’s there for.&amp;#34; (6:15 - 6:42)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I’ve definitely done this sin in my own tooling before, and it does make things harder to use.  I think I still take err/out at face value.  I really like the translation Jeff gave here, one is for normal output, i.e. what the user asked for and the other is extra information.  So if I wanted to list something and pipe it into something else, stdout only captures the list, thats it.  if you have a bunch of information about config warnings, showing environment, are you sure questions, none of that is captured.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>gh auth switch</title>
    <id>https://new.waylonwalker.com/gh-auth-switch/</id>
    <updated>2025-12-07T10:55:55Z</updated>
    <published>2025-12-07T10:55:55Z</published>
    <link href="https://new.waylonwalker.com/gh-auth-switch/" rel="alternate" type="text/html"></link>
    <summary type="text">When using two GitHub accounts the gh cli gives very easy workflow from the cli.</summary>
    <content type="html">&lt;p&gt;When using two GitHub accounts the gh cli gives very easy &lt;code&gt;gh auth switch&lt;/code&gt; workflow from the cli.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition hint&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;from the docs&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;gh auth switch –help&#xA;Switch the active account for a GitHub host.&lt;/p&gt;&#xA;&lt;p&gt;This command changes the authentication configuration that will&#xA;be used when running commands targeting the specified GitHub host.&lt;/p&gt;&#xA;&lt;p&gt;If the specified host has two accounts, the active account will be switched&#xA;automatically. If there are more than two accounts, disambiguation will be&#xA;required either through the &lt;code&gt;--user&lt;/code&gt; flag or an interactive prompt.&lt;/p&gt;&#xA;&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 accounts&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh auth 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;# switch accounds (interactive if more than 2, i&amp;#39;ve never seen this personally)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gh auth switch&#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>COLUMNS env var</title>
    <id>https://new.waylonwalker.com/columns-env-var/</id>
    <updated>2025-11-26T13:24:38Z</updated>
    <published>2025-11-26T13:24:38Z</published>
    <link href="https://new.waylonwalker.com/columns-env-var/" rel="alternate" type="text/html"></link>
    <summary type="text">setting env var to a number greater than 0 will make the terminal resize to that number of columns.</summary>
    <content type="html">&lt;p&gt;setting &lt;code&gt;COLUMNS&lt;/code&gt; env var to a number greater than 0 will make the terminal resize to that number of columns.&lt;/p&gt;&#xA;&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;COLUMNS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; uvx --from rich-cli rich myscript.py&#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;Not all programs respct the &lt;code&gt;COLUMNS&lt;/code&gt; env var, but rich does, and a lot of&#xA;stuff I’m building uses rich.&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;I discovered this when I was trying to make a low effort readme generated from&#xA;the code, but did not depend on the size of terminal it was ran 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;&lt;span class=&#34;c1&#34;&gt;# justfile&lt;/span&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;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;# Workspaces&amp;#34;&lt;/span&gt; &amp;gt; README.md&#xA;&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;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; README.md&#xA;&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;``` bash&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; README.md&#xA;&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;COLUMNS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; ./workspaces.py --help &amp;gt;&amp;gt; README.md&#xA;&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;```&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; README.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>tea login flag</title>
    <id>https://new.waylonwalker.com/tea-login-flag/</id>
    <updated>2025-11-23T21:09:36Z</updated>
    <published>2025-11-23T21:09:36Z</published>
    <link href="https://new.waylonwalker.com/tea-login-flag/" rel="alternate" type="text/html"></link>
    <summary type="text">The tea command for gitea (used by forgejo) has a flag for login. With gitea you can have multiple accounts logged in. When you try to run a command such as...</summary>
    <content type="html">&lt;p&gt;The tea command for gitea (used by forgejo) has a flag for login.  With gitea&#xA;you can have multiple accounts logged in.  When you try to run a command such&#xA;as &lt;code&gt;repo create&lt;/code&gt; it will prompt you which login to use, but I learned that you&#xA;can bake it in to all of them with &lt;code&gt;--login &amp;lt;login-name&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;❯ tea repo create --name deleteme --description &lt;span class=&#34;s1&#34;&gt;&amp;#39;for example&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;┃ NOTE: no gitea login detected, whether falling back to login &lt;span class=&#34;s1&#34;&gt;&amp;#39;git.waylonwalker.com&amp;#39;&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/file/11dc820d-1680-414c-9624-cd970b057a74.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/11dc820d-1680-414c-9624-cd970b057a74.webp&#34; alt=&#34;image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?&#34;/ data-glightbox=&#34;description: image showing message NOTE: no gitea login detected, whether falling back to login ‘git.waylonwalker.com’?&#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;tea repo create --name deleteme --description &lt;span class=&#34;s1&#34;&gt;&amp;#39;for example&amp;#39;&lt;/span&gt; --login git.wayl.one&#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>Ellie Huxtable on evolving Atuin (her shell history tool) for ...</title>
    <id>https://new.waylonwalker.com/thought-854/</id>
    <updated>2025-10-24T05:53:16Z</updated>
    <published>2025-10-24T05:53:16Z</published>
    <link href="https://new.waylonwalker.com/thought-854/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.youtube.com/watch?v=OK3HrqDXqtU&amp;t=1675s</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;OK3HrqDXqtU&#34; title=&#34;Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri&#34; playlabel=&#34;Play: Ellie Huxtable on evolving Atuin (her shell history tool) for the desktop with Rust and Tauri&#34;&gt;&lt;/lite-youtube&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Atuin desktop sounds dope AF, tried to install it off 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; and it was broken for me.  Seems early and the dev team is all in on mac.  They have an official .deb and .rpm.  I’ll have to try again later, maybe the binary will work.&lt;/p&gt;&#xA;&lt;p&gt;The idea of building out runbooks from my Atuin data sounds dope AF.  It sounds like a mix of markdown and executable cells like a jupyter notebook, but not.  Really pitching hard to those of us in the system administration, dev ops, SRE space.  Having something that you walk through when a system goes down and you are feeling panicked in DR mode sounds relieving.&lt;/p&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://new.waylonwalker.com/tar-over-ssh/</id>
    <updated>2025-09-13T10:50:42Z</updated>
    <published>2025-09-13T10:50:42Z</published>
    <link href="https://new.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;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>2025-07-10 Notes</title>
    <id>https://new.waylonwalker.com/thought-756/</id>
    <updated>2025-07-18T20:26:28Z</updated>
    <published>2025-07-18T20:26:28Z</published>
    <link href="https://new.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 class=&#34;embed-card-link  has-avatar has-avatar-before&#34; href=&#34;https://pype.dev/2025-07-10-notes/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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 class=&#34;embed-card-link&#34; href=&#34;https://pype.dev/2025-07-10-notes/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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 class=&#34;wikilink&#34; data-date=&#34;2025-07-09&#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-title=&#34;2025-07-09 Notes&#34; href=&#34;/2025-07-09-notes/&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>fc</title>
    <id>https://new.waylonwalker.com/fc/</id>
    <updated>2025-07-18T07:52:53Z</updated>
    <published>2025-07-18T07:52:53Z</published>
    <link href="https://new.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; aria-label=&#34;screenshot-2025-07-18T13-21-46-775Z.png&#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>unset multiple environment variables</title>
    <id>https://new.waylonwalker.com/unset-multiple-environment-variables/</id>
    <updated>2025-06-03T11:21:11Z</updated>
    <published>2025-06-03T11:21:11Z</published>
    <link href="https://new.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 class=&#34;wikilink&#34; data-date=&#34;2022-10-17&#34; data-description=&#34;Upon first running an cli command using localstack you might end up with the following error.&#34; data-title=&#34;running aws cli commands with localstack&#34; href=&#34;/running-aws-cli-commands-with-localstack/&#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>m9a devlog 1</title>
    <id>https://new.waylonwalker.com/m9a-devlog-1/</id>
    <updated>2025-05-11T09:33:44Z</updated>
    <published>2025-05-11T09:33:44Z</published>
    <link href="https://new.waylonwalker.com/m9a-devlog-1/" rel="alternate" type="text/html"></link>
    <summary type="text">It&#39;s sad to see textualize.io close the doors, but textual is still alive and maintained as a n open source project. I tried to use it very early, and...</summary>
    <content type="html">&lt;p&gt;It’s sad to see textualize.io close the doors, but textual is still alive and&#xA;maintained as a n open source project.  I tried to use it very early, and&#xA;struggled, this was before docs and tutorials really existed, before a lot of&#xA;the widgets and components existed.  Then as we all do I got busy and moved on&#xA;to other things in life and did not have the capacity to build TUIs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;i-like-tuis&#34;&gt;I like tuis &lt;a href=&#34;#i-like-tuis&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I like tuis, I like staying in the terminal.  I use&#xA;&lt;a href=&#34;https://github.com/gokcehan/lf&#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;lf&lt;/a&gt; daily to move files around when I&#xA;want something more than &lt;code&gt;mv&lt;/code&gt; and &lt;code&gt;cp&lt;/code&gt;.  I use&#xA;&lt;a href=&#34;https://github.com/derailed/k9s&#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;k9s&lt;/a&gt; hourly to monitor and manage my&#xA;kubernetes cluster.&lt;/p&gt;&#xA;&lt;h2 id=&#34;are-they-worth-the-effort&#34;&gt;Are they worth the effort?? &lt;a href=&#34;#are-they-worth-the-effort&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;As awesome as tui’s are, they are more effort to build, and less automatable.&#xA;I feel like the first stage into automation of a project really needs to be a&#xA;good cli, and this is often good enough for the project and I move on.&lt;/p&gt;&#xA;&lt;h2 id=&#34;m9a-em---nine---ah&#34;&gt;m9a (em - nine - ah) &lt;a href=&#34;#m9a-em---nine---ah&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;inspired by k9s&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Like I said I really like k9s and use it all the time, It really makes running&#xA;kubectl commands a breeze and much less verbose.  I don’t know how useful this&#xA;will be, but as a learning exercise I am working on a k9s experience for my&#xA;blog generator &lt;a class=&#34;wikilink&#34; data-date=&#34;2024-05-30&#34; data-description=&#34;This post is a work in progress.&#34; data-title=&#34;markata&#34; href=&#34;/markata/&#34; data-preview=&#34;This post is a work in progress.&#34;&gt;markata&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/53671f5a-acc5-4d17-aa2d-2e9ac6db5674.webm&#34; class=&#34;glightbox-link&#34; aria-label=&#34;m9a-1-trimmed.webm&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/api/file/53671f5a-acc5-4d17-aa2d-2e9ac6db5674.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/api/file/53671f5a-acc5-4d17-aa2d-2e9ac6db5674.webm&#34; type=&#34;video/webm&#34;&gt;m9a-1-trimmed.webm&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;learning&#34;&gt;Learning &lt;a href=&#34;#learning&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So far this is just for learning and not quite the most useful thing, I am not&#xA;sure if there is a way to do it, but I am interested in the idea of some sort&#xA;of framework (maybe just widgets) that can more easily turn pydantic objects&#xA;into this kind of tui.  I don’t quite know how it would work, or if it could&#xA;work, for now just exploring the idea, and I think I hit a fairly crude clone&#xA;of k9s so far.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>adrianlopezroche/fdupes: FDUPES is a program for identifying o...</title>
    <id>https://new.waylonwalker.com/thought-589/</id>
    <updated>2025-04-09T17:56:53Z</updated>
    <published>2025-04-09T17:56:53Z</published>
    <link href="https://new.waylonwalker.com/thought-589/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/adrianlopezroche/fdupes</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/adrianlopezroche/fdupes&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/093258c38f57e9a89ef58be2f081865bf5b0732bb0baaab952205f859b947132/adrianlopezroche/fdupes&#34; alt=&#34;GitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories. — FDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories. — FDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes&#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 - adrianlopezroche/fdupes: FDUPES is a program for identifying or deleting duplicate files residing within specified directories.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;FDUPES is a program for identifying or deleting duplicate files residing within specified directories. - adrianlopezroche/fdupes&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;keeping this in my back pocket for now.  I just moved a few TB’s of data in 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; and I am expecting a lot of duplication to show up.&lt;/p&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://new.waylonwalker.com/backup-distrobox-image/</id>
    <updated>2025-04-09T17:35:50Z</updated>
    <published>2025-04-09T17:35:50Z</published>
    <link href="https://new.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://new.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://new.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>Releases · bootandy/dust</title>
    <id>https://new.waylonwalker.com/thought-535/</id>
    <updated>2025-01-20T00:58:42Z</updated>
    <published>2025-01-20T00:58:42Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://github.com/bootandy/dust?tab=readme-ov-file&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/0434ad24d412774d193c82c20f3dbc34f9bee29a89ecc30bc86a0cafce129530/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.waylonwalker.com/api/file/31b206fd-d508-451e-ba96-860c5d8110d1.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>bic | Static blog generator, in bash</title>
    <id>https://new.waylonwalker.com/thought-521/</id>
    <updated>2025-01-09T20:22:47Z</updated>
    <published>2025-01-09T20:22:47Z</published>
    <link href="https://new.waylonwalker.com/thought-521/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://bic.sh/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://bic.sh/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-content&#34;&gt;&#xA;      &lt;div class=&#34;embed-card-title&#34;&gt;bic&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Static blog generator, in bash&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;bic · bic.sh&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Intereresting someone built a blog generator in bash.  it comes with normal markdown 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;, static content, robots.txt, sitemap, rss, and tags.  It uses pandoc to take markdown to html and mustache for page templates.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ellie Huxtable: &#34;Atuin v18.4 is out now! Including `atuin wrap...</title>
    <id>https://new.waylonwalker.com/thought-475/</id>
    <updated>2024-12-28T12:29:12Z</updated>
    <published>2024-12-28T12:29:12Z</published>
    <link href="https://new.waylonwalker.com/thought-475/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://bsky.app/profile/ellie.wtf/post/3lecj36r5ps2x</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://bsky.app/profile/ellie.wtf/post/3lecj36r5ps2x&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img src=&#34;https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:6pz6ncxxtia36hrtbf24wzue/bafkreigfrzhv3ju3ynaugisqh5wc2qsharsqott5ru4i7tb53ha2fnerde&#34; alt=&#34;Ellie Huxtable (@ellie.wtf) — Atuin v18.4 is out now!&#xA;&amp;lt;p&amp;gt;Including &amp;lt;code&amp;gt;atuin wrapped&amp;lt;/code&amp;gt;, your year in shell history 🐢&amp;lt;/p&amp;gt;&#xA;&amp;lt;p&amp;gt;thanks @daveeddy.com for the suggestion!&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: Ellie Huxtable (@ellie.wtf) — Atuin v18.4 is out now!&#xA;&amp;lt;p&amp;gt;Including &amp;lt;code&amp;gt;atuin wrapped&amp;lt;/code&amp;gt;, your year in shell history 🐢&amp;lt;/p&amp;gt;&#xA;&amp;lt;p&amp;gt;thanks @daveeddy.com for the suggestion!&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;Ellie Huxtable (@ellie.wtf)&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-description&#34;&gt;Atuin v18.4 is out now!&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Including &lt;code&gt;atuin wrapped&lt;/code&gt;, your year in shell history 🐢&lt;/p&gt;&#xA;&lt;p&gt;thanks @daveeddy.com for the suggestion!&lt;/p&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-meta&#34;&gt;Bluesky Social · bsky.app&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;Atuin v18.4 is out with an atuin wrapped command.&lt;/p&gt;&#xA;&lt;p&gt;Here’s Ellie’s Wrapped.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/246f2dc6-4e46-410c-9d25-fa6ccc85f8f2.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/246f2dc6-4e46-410c-9d25-fa6ccc85f8f2.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This is a pretty sick command, I’ve only been using Atuin about as long as I’ve been on bazzite, so maybe 4 months, but here is my wrapped.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/api/file/434e1290-cf81-4ae5-abaf-34927006f3b6.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/api/file/434e1290-cf81-4ae5-abaf-34927006f3b6.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Comparing to Ellie, I’m surprised that I even have 126 package related commands, being on an immutable distro most of my packages come from the container, I don’t need to run packaging commands.  My cd is also super low, I use tmux sessions to take me where I need to be most of the time, which is a project’s root directory, It’s pretty rare to see me outside of a project root directory.&lt;/p&gt;&#xA;&lt;p&gt;I’d venture to guess that nvim would be higher if it didn’t auto start on every tmux session as well.&lt;/p&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://new.waylonwalker.com/thought-445/</id>
    <updated>2024-12-14T23:04:06Z</updated>
    <published>2024-12-14T23:04:06Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://github.com/casey/just?tab=readme-ov-file#constants&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/19adbe031e79f605bc64519c0726704e3ee2fb45af9fd04c5017fd12e7aa6ec9/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;</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://new.waylonwalker.com/thought-444/</id>
    <updated>2024-12-14T22:54:34Z</updated>
    <published>2024-12-14T22:54:34Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://github.com/thechangelog/pipedream/blob/main/justfile&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/ee443ffb45eb1707ef8d602430fb13ed7d7f52b4a993c3d40863c6f1d13b5d6f/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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>urllink</title>
    <id>https://new.waylonwalker.com/urllink/</id>
    <updated>2024-12-14T11:11:52Z</updated>
    <published>2024-12-14T11:11:52Z</published>
    <link href="https://new.waylonwalker.com/urllink/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I discovered the function in bash from the ujust tool from ublue.it. Seems like a cool trick, but might not work everywhere.</summary>
    <content type="html">&lt;p&gt;Today I discovered the &lt;code&gt;Urllink&lt;/code&gt; function in bash from the ujust tool from&#xA;&lt;a href=&#34;https://ublue.it&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/ublue.it.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/ublue.it.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;ublue.it&lt;/a&gt;.  Seems like a cool trick, but might not work&#xA;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;&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;### Special text formating&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;## Function to generate a clickable link, you can call this using&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;# url=$(Urllink &amp;#34;https://ublue.it&amp;#34; &amp;#34;Visit the ublue website&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;# echo &amp;#34;${url}&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;function&lt;/span&gt; Urllink &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;URL&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;nv&#34;&gt;TEXT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#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;&#xA;&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;# Generate a clickable hyperlink&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;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;\e]8;;%s\e\\%s\e]8;;\e\\&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&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;nv&#34;&gt;$TEXT&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;n&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;&#xA;&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;sb&#34;&gt;```&lt;/span&gt;j&#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>hostnamectl to easily change hostname | Pype.dev</title>
    <id>https://new.waylonwalker.com/thought-441/</id>
    <updated>2024-12-06T20:30:41Z</updated>
    <published>2024-12-06T20:30:41Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://pype.dev/hostnamectl-to-easily-change-hostname&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Document how to provide a negative number as an argument · fas...</title>
    <id>https://new.waylonwalker.com/thought-418/</id>
    <updated>2024-10-30T06:28:56Z</updated>
    <published>2024-10-30T06:28:56Z</published>
    <link href="https://new.waylonwalker.com/thought-418/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/fastapi/typer/discussions/798</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/fastapi/typer/discussions/798&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/2b48b76b8e15f361c37084d34fa4151bc54fda7ca95e0b320b739bd0f6075316/fastapi/typer/discussions/798&#34; alt=&#34;Document how to provide a negative number as an argument · fastapi typer · Discussion #798 — First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn&amp;#39;t find it. I searched the Typer documentation, with the integrated search. I already ...&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Document how to provide a negative number as an argument · fastapi typer · Discussion #798 — First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn&amp;#39;t find it. I searched the Typer documentation, with the integrated search. I already ...&#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;Document how to provide a negative number as an argument · fastapi typer · Discussion #798&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;First Check I added a very descriptive title here. I used the GitHub search to find a similar question and didn&amp;#39;t find it. I searched the Typer documentation, with the integrated search. I already ...&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;Today I learned that you cannot pass negative integers as values to typer.  in this case &lt;code&gt;context_settings={&amp;#34;ignore_unknown_options&amp;#34;: True}&lt;/code&gt; is required so that the &lt;code&gt;-&lt;/code&gt; does not look like a 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;&lt;span class=&#34;c1&#34;&gt;# script name: main.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;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;typer&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;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;typer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Typer&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.command&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;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;failing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;float&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;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&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;n&#34;&gt;value&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;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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@app.command&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;context_settings&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;ignore_unknown_options&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#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;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;working_good&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;float&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;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&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;n&#34;&gt;value&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;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;    &#xA;&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; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&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;app&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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Will McGugan on X: &#34;New Version of #Textual released! 😎🤓🦾 The ...</title>
    <id>https://new.waylonwalker.com/thought-416/</id>
    <updated>2024-10-27T07:51:07Z</updated>
    <published>2024-10-27T07:51:07Z</published>
    <link href="https://new.waylonwalker.com/thought-416/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://x.com/willmcgugan/status/1849831271289012463</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link  has-avatar has-avatar-before&#34; href=&#34;https://x.com/willmcgugan/status/1849831271289012463&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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;/a&gt;&lt;div class=&#34;embed-card-image&#34;&gt;&lt;a class=&#34;embed-card-link&#34; href=&#34;https://x.com/willmcgugan/status/1849831271289012463&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;      &lt;img src=&#34;https://pbs.twimg.com/ext_tw_video_thumb/1849830165238456320/pu/img/R0rLRdchLC2IhAOi.jpg&#34; alt=&#34;Will McGugan (&amp;lt;a href=&#34; https:=&#34;&#34; willmcgugan.github.io&#34;=&#34;&#34; class=&#34;mention glightbox&#34; data-name=&#34;Will McGugan&#34; data-bio=&#34;Will McGugan’s essays&#34; data-avatar=&#34;https://willmcgugan.github.io/images/will2025.jpeg&#34; data-handle=&#34;@willmcgugan&#34;/ data-glightbox=&#34;description: Will McGugan (&amp;lt;a href=&#34;&gt;@willmcgugan&lt;/a&gt;) on X — New Version of #Textual released! 😎🤓🦾&#xA;&lt;p&gt;The demo has been updated. It&amp;#39;s not quite finished, expect an update next release, but it is a lot of fun.&lt;/p&gt;&#xA;&lt;p&gt;Press C at any point to see the code powering that page (makes a great learning tool).&lt;/p&gt;&#xA;&lt;p&gt;Video 👇&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://t.co/p2ScsuL7GZ%22&#34;&gt;https://t.co/p2ScsuL7GZ&amp;#34;&lt;/a&gt; loading=“lazy”&amp;gt;&#xA;&lt;/p&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-content&#34;&gt;&#xA;&lt;div class=&#34;embed-card-title&#34;&gt;Will McGugan (&lt;a class=&#34;mention  has-avatar has-avatar-before&#34; data-avatar=&#34;https://willmcgugan.github.io/images/will2025.jpeg&#34; data-bio=&#34;Will McGugan’s essays&#34; data-handle=&#34;@willmcgugan&#34; data-name=&#34;Will McGugan&#34; href=&#34;https://willmcgugan.github.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/willmcgugan.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/willmcgugan.github.io.png&#34;&gt;@willmcgugan&lt;/a&gt;) on X&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-description&#34;&gt;New Version of #Textual released! 😎🤓🦾&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;The demo has been updated. It&amp;#39;s not quite finished, expect an update next release, but it is a lot of fun.&lt;/p&gt;&#xA;&lt;p&gt;Press C at any point to see the code pow…&lt;/p&gt;&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;p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This new demo of textual is wildly awesome, so many widgets and features being added into the main library.  The themes and animations are on point and far surpass my expectations of a tui.&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/docs/usage/distrobox-assemble.md at main · 89luca89/...</title>
    <id>https://new.waylonwalker.com/thought-394/</id>
    <updated>2024-09-30T20:49:25Z</updated>
    <published>2024-09-30T20:49:25Z</published>
    <link href="https://new.waylonwalker.com/thought-394/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;/static/https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md&#34; class=&#34;glightbox-link&#34; aria-label=&#34;https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/static/https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md&#34; alt=&#34;https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md&#34;/ data-glightbox=&#34;description: https://github.com/89luca89/distrobox/blob/main/docs/usage/distrobox-assemble.md&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This page is gold.  It lays out all of the distrobox assemble api with some good examples  of how to get access to things like podman and kind from inside of containers.&lt;/p&gt;&#xA;&lt;p&gt;Especially this example.&lt;/p&gt;&#xA;&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;[tumbleweed_distrobox]&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;na&#34;&gt;image&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;registry.opensuse.org/opensuse/distrobox&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;na&#34;&gt;pull&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#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;&lt;span class=&#34;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;acpi bash-completion findutils iproute iputils sensors inotify-tools unzip&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;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;net-tools nmap openssl procps psmisc rsync man tig tmux tree vim htop xclip yt-dlp&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;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;git git-credential-libsecret&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;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;patterns-devel-base-devel_basis&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;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;ShellCheck ansible-lint clang clang-tools codespell ctags desktop-file-utils gcc golang jq python3&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;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;python3-bashate python3-flake8 python3-mypy python3-pipx python3-pycodestyle python3-pyflakes python3-pylint python3-python-lsp-server python3-rstcheck python3-yapf python3-yamllint rustup shfmt&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;na&#34;&gt;additional_packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;kubernetes-client helm&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;GOPATH=&amp;#34;${HOME}/.local/share/system-go&amp;#34; GOBIN=/usr/local/bin go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;GOPATH=&amp;#34;${HOME}/.local/share/system-go&amp;#34; GOBIN=/usr/local/bin go install github.com/onsi/ginkgo/v2/ginkgo@latest;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;GOPATH=&amp;#34;${HOME}/.local/share/system-go&amp;#34; GOBIN=/usr/local/bin go install golang.org/x/tools/cmd/goimports@latest;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;GOPATH=&amp;#34;${HOME}/.local/share/system-go&amp;#34; GOBIN=/usr/local/bin go install golang.org/x/tools/gopls@latest;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;GOPATH=&amp;#34;${HOME}/.local/share/system-go&amp;#34; GOBIN=/usr/local/bin go install sigs.k8s.io/kind@latest;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/conmon;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/crun;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/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;&lt;span class=&#34;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/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;&lt;span class=&#34;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/flatpak;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman;&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;na&#34;&gt;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/xdg-open;&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;na&#34;&gt;exported_apps&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;htop&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;na&#34;&gt;exported_bins&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/usr/bin/htop /usr/bin/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;na&#34;&gt;exported_bins_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;~/.local/bin&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>add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da</title>
    <id>https://new.waylonwalker.com/thought-392/</id>
    <updated>2024-09-28T06:34:08Z</updated>
    <published>2024-09-28T06:34:08Z</published>
    <link href="https://new.waylonwalker.com/thought-392/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938#diff-38878343c551520f8af2a3986e5f6085b03df197a56a92abc42a44b200f02...</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938#diff-38878343c551520f8af2a3986e5f6085b03df197a56a92abc42a44b200f0264aR19&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/6b12b2c44f61b6aae41530a61e77341635725a79e7c39eb6c5c4f15082d4c174/WaylonWalker/devtainer/commit/2e4c6da537f5672209d1b3922fad754190aef938&#34; alt=&#34;add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da — 🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da — 🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da&#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;add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;🐳 (dotfiles) My personal development docker container base image - add init hooks and exported bins · WaylonWalker/devtainer@2e4c6da&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;Today I learned that you can use init_hooks to access host machine commands from inside a distrobox container.  This is super handy for things that you cannot get to from inside the container and need ran outside (docker, podman, flatpak, xdg-open).&lt;/p&gt;&#xA;&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;init_hooks&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ln -sf /usr/bin/distrobox-host-exec /usr/local/bin/podman&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>convert mp4 for twitter with ffmpeg</title>
    <id>https://new.waylonwalker.com/convert-mp4-for-twitter-with-ffmpeg/</id>
    <updated>2024-07-25T12:51:29Z</updated>
    <published>2024-07-25T12:51:29Z</published>
    <link href="https://new.waylonwalker.com/convert-mp4-for-twitter-with-ffmpeg/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve had a couple of uploads to twitter fail recently and has been a pain. I tried some online converters for convenience, but none of them worked. I reached...</summary>
    <content type="html">&lt;p&gt;I’ve had a couple of uploads to twitter fail recently and has been a pain.  I&#xA;tried some online converters for convenience, but none of them worked.  I&#xA;reached out to chatgpt and found succeess with this ffmpeg 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;ffmpeg -i input.mp4 &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;  -vf &lt;span class=&#34;s2&#34;&gt;&amp;#34;scale=trunc(oh*a/2)*2:min(720\,trunc(ih*a/2)*2)&amp;#34;&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;  -c:v libx264 -profile:v high -level:v 4.1 &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;  -b:v 3500k -maxrate 3500k -bufsize 7000k &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;  -pix_fmt yuv420p &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;  -c:a aac -b:a 128k -ar &lt;span class=&#34;m&#34;&gt;44100&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;  -movflags +faststart &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;  output.mp4&#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>There’s a TUI for that with Nick Janetakis (Changelog &amp; Friend...</title>
    <id>https://new.waylonwalker.com/thought-356/</id>
    <updated>2024-07-24T07:47:39Z</updated>
    <published>2024-07-24T07:47:39Z</published>
    <link href="https://new.waylonwalker.com/thought-356/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://changelog.com/friends/53</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://changelog.com/friends/53&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://snap.fly.dev/friends/53/img&#34; alt=&#34;There’s a TUI for that with Nick Janetakis (Changelog &amp;amp; Friends #53) — Nick Janetakis is back and this time we&amp;#39;re talking about TUIs (text-based user interfaces) — some we&amp;#39;ve tried and some we plan to try. All are collected from Justin Garrison&amp;#39;s Awesome TUIs repo on GitHub. This episode is &amp;#34;AI free.&amp;#34;&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: There’s a TUI for that with Nick Janetakis (Changelog &amp;amp; Friends #53) — Nick Janetakis is back and this time we&amp;#39;re talking about TUIs (text-based user interfaces) — some we&amp;#39;ve tried and some we plan to try. All are collected from Justin Garrison&amp;#39;s Awesome TUIs repo on GitHub. This episode is &amp;#34;AI free.&amp;#34;&#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;There’s a TUI for that with Nick Janetakis (Changelog &amp;amp; Friends #53)&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Nick Janetakis is back and this time we&amp;#39;re talking about TUIs (text-based user interfaces) — some we&amp;#39;ve tried and some we plan to try. All are collected from Justin Garrison&amp;#39;s Awesome TUIs repo o...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Changelog · changelog.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;50 minutes into this episode they start a discussion on seo, and naming posts.  They give Jerod the task of googling for tmux and see how high up the ranking they find Nick, expecting a number one post, and he cant even get to Nick.&lt;/p&gt;&#xA;&lt;p&gt;The problem?  Jerod is such a beginner he doesn’t even know what to search, he starts with a long query about getting started with tmux, but all of Nick’s videos are why you should use advanced features of tmux, but Jerod has yet to discover that these exist.&lt;/p&gt;&#xA;&lt;p&gt;As experts we often come up wtih a post title for the exact thing that we are trying to teach someone how to do, but yet, they haven’t discussed that they need that feature yet, they just want the getting started guide, or tell me why I should start using tmux.  Not why sessions are better than windows, and tabs suck all together.&lt;/p&gt;&#xA;&lt;p&gt;Definitely an eye opening conversation listening to two experts sit in shock as the beginner just gets dropped big tech articles, and Nick Jani-freakin-takis doesn’t even hit the query page after page.&lt;/p&gt;&#xA;&lt;p&gt;Also hats off to Nick for keeping a 2014 machine alive, I got you beat by a few years on my 2011 free give away machine, but I stopped daily driving that two years ago, and its purely a &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; 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>Command Line Interface Guidelines</title>
    <id>https://new.waylonwalker.com/thought-345/</id>
    <updated>2024-07-11T17:57:45Z</updated>
    <published>2024-07-11T17:57:45Z</published>
    <link href="https://new.waylonwalker.com/thought-345/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://clig.dev/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://clig.dev/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://clig.dev/CLIG-social-card.jpg&#34; alt=&#34;Command Line Interface Guidelines — An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Command Line Interface Guidelines — An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.&#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 Interface Guidelines&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;An open-source guide to help you write better command-line programs, taking traditional UNIX principles and updating them for the modern day.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;clig.dev&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This is a pretty sick set of guidelines to help you write better cli programs, I’m definitely coming back to reading this one more in depth later.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Darren Burns 🌱 on X: &#34;Here&#39;s an early clip of my new (work in ...</title>
    <id>https://new.waylonwalker.com/thought-296/</id>
    <updated>2024-06-04T07:04:35Z</updated>
    <published>2024-06-04T07:04:35Z</published>
    <link href="https://new.waylonwalker.com/thought-296/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://x.com/_darrenburns/status/1797763563270095006</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link  has-avatar has-avatar-before&#34; href=&#34;https://x.com/_darrenburns/status/1797763563270095006&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;This looks like a sweet tui postman clone.  Darren is really rolling with these tui’s.  Cant wait to see where this one goes.&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://new.waylonwalker.com/thought-281/</id>
    <updated>2024-05-22T23:13:13Z</updated>
    <published>2024-05-22T23:13:13Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://distrobox.it/usage/distrobox-host-exec/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>rich.panel — Rich 13.6.0 documentation</title>
    <id>https://new.waylonwalker.com/thought-259/</id>
    <updated>2024-04-30T23:10:37Z</updated>
    <published>2024-04-30T23:10:37Z</published>
    <link href="https://new.waylonwalker.com/thought-259/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://rich.readthedocs.io/en/stable/reference/panel.html</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;/static/https://rich.readthedocs.io/en/stable/reference/panel.html&#34; class=&#34;glightbox-link&#34; aria-label=&#34;https://rich.readthedocs.io/en/stable/reference/panel.html&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/static/https://rich.readthedocs.io/en/stable/reference/panel.html&#34; alt=&#34;https://rich.readthedocs.io/en/stable/reference/panel.html&#34;/ data-glightbox=&#34;description: https://rich.readthedocs.io/en/stable/reference/panel.html&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;This is my go to rich response container for clis written in python.  It creates a nice box around the content on the screen and provides some nice separation in the output.  It can be overdone, but comes in clutch when looking for that print statement in a long output.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Creating SSH Apps with Charm Wish and Laravel Prompts | Joe Ta...</title>
    <id>https://new.waylonwalker.com/thought-257/</id>
    <updated>2024-04-30T23:05:21Z</updated>
    <published>2024-04-30T23:05:21Z</published>
    <link href="https://new.waylonwalker.com/thought-257/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://blog.joe.codes/creating-ssh-apps-with-charm-wish-and-laravel-prompts</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://blog.joe.codes/creating-ssh-apps-with-charm-wish-and-laravel-prompts&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://blog.joe.codes/img/asset/YXNzZXRzL2NoYXJtLXdpc2guanBn?p=seo_pro_og&amp;amp;s=fa781be7bdd202e6f43d603e96ae6959&#34; alt=&#34;Creating SSH Apps with Charm Wish and Laravel Prompts — Building PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and use your CLI app.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Creating SSH Apps with Charm Wish and Laravel Prompts — Building PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and use your CLI app.&#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;Creating SSH Apps with Charm Wish and Laravel Prompts&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Building PHP CLI apps with Laravel Prompts is easy, but how can we share them? Charm to the rescue! Charm Wish is an easy-to-use SSH server that allows users to securely log into your server and us...&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Joe Tannenbaum · blog.joe.codes&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Joe has a sick cli.labs site for deploying tui applications.&lt;/p&gt;&#xA;&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 cli.lab.joe.codes&#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>cli auth</title>
    <id>https://new.waylonwalker.com/cli-auth/</id>
    <updated>2023-12-17T20:09:03Z</updated>
    <published>2023-12-17T20:09:03Z</published>
    <link href="https://new.waylonwalker.com/cli-auth/" rel="alternate" type="text/html"></link>
    <summary type="text">Authentication from cli tools can be a bit of a bear, and I have to look it up every time. This is my reference guide for future me to remember how to easily...</summary>
    <content type="html">&lt;p&gt;Authentication from cli tools can be a bit of a bear, and I have to look it up&#xA;every time. This is my reference guide for future me to remember how to easily&#xA;do it.&lt;/p&gt;&#xA;&lt;p&gt;I set up a &lt;a href=&#34;/fastapi/&#34; class=&#34;glossary-term&#34; title=&#34;FastAPI is a modern and efficient web framework for Python, built on top of the Starlette web framework, and pydantic for data validation and serialization.&#34;&gt;fastapi&lt;/a&gt; server running on port 8000, it uses a basic auth with&#xA;&lt;code&gt;waylonwalker&lt;/code&gt; as the username and &lt;code&gt;asdf&lt;/code&gt; as the password. The server follows&#xA;along with what comes out of the docs. I have it setup to take basic auth,&#xA;form username and password, or a bearer token for authentication.&lt;/p&gt;&#xA;&lt;h2 id=&#34;curl&#34;&gt;curl &lt;a href=&#34;#curl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The &lt;a href=&#34;/og/&#34; class=&#34;glossary-term&#34; title=&#34;OG is short for open graph, a set of standard meta tags that are used for social media sharing. This is what tells other websites how to describe and display...&#34;&gt;og&lt;/a&gt; of command line url tools.&lt;/p&gt;&#xA;&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;# basic auth&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 -u &lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker:asdf&amp;#39;&lt;/span&gt; -X POST localhost:8000/token&#xA;&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;# basic auth with password prompt&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 -u &lt;span class=&#34;s1&#34;&gt;&amp;#39;waylonwalker&amp;#39;&lt;/span&gt; -X POST localhost:8000/token&#xA;&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;# token&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 -H &lt;span class=&#34;s1&#34;&gt;&amp;#39;Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&amp;#39;&lt;/span&gt; -X POST localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;wget&#34;&gt;wget &lt;a href=&#34;#wget&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;My go to if I want the result to go into a 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;c1&#34;&gt;# basic auth&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 -q -O - --auth-no-challenge --http-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;waylonwalker --http-password&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;asdf --post-data &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; localhost:8000/token&#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;# token&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 -q -O - --header&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&amp;#34;&lt;/span&gt; -O - --post-data &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpx&#34;&gt;httpx &lt;a href=&#34;#httpx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;An http client written in python, primarilty used with the python api, but has a nice cli.&lt;/p&gt;&#xA;&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;# 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;python3 -m pip install httpx&#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;# basic auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpx -m POST --auth waylonwalker asdf http://localhost:8000/token&#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;# basic auth with password prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpx -m POST --auth waylonwalker - http://localhost:8000/token&#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;# token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpx -m POST --headers&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&amp;#34;&lt;/span&gt; http://localhost:8000/token&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpie&#34;&gt;httpie &lt;a href=&#34;#httpie&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A modern http client written in python.&lt;/p&gt;&#xA;&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;# 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;python3 -m pip install httpie&#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;# basic auth&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -a waylonwalker:asdf&#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;# basic auth with password prompt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -a waylonwalker&#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;# token&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -A bearer -a eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ3YXlsb253YWxrZXIiLCJleHAiOjE3MDI5NTI2MDJ9.GeYNt7DNal6LTiPoavJnqypaMt4vYeriXdq5lqu1ILg&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpie-with-plugin&#34;&gt;httpie with plugin &lt;a href=&#34;#httpie-with-plugin&#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;# 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;python3 -m pip install httpie-credential-store&#xA;&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;# usage&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http POST localhost:8000/token -A creds&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;httpie-prompt&#34;&gt;httpie prompt &lt;a href=&#34;#httpie-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;http-prompt&lt;/code&gt; comes from the httpie org, and has an interactive cli interface&#xA;into apis. You can even specify a spec file to autocomplete on api methods.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;http-prompt localhost:8000 --auth waylonwalker:asdf --spec openapi.json&#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>ImageMagick – Color Names</title>
    <id>https://new.waylonwalker.com/thought-180/</id>
    <updated>2023-12-13T23:23:32Z</updated>
    <published>2023-12-13T23:23:32Z</published>
    <link href="https://new.waylonwalker.com/thought-180/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://imagemagick.org/script/color.php</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;/static/https://imagemagick.org/script/color.php&#34; class=&#34;glightbox-link&#34; aria-label=&#34;https://imagemagick.org/script/color.php&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/static/https://imagemagick.org/script/color.php&#34; alt=&#34;https://imagemagick.org/script/color.php&#34;/ data-glightbox=&#34;description: https://imagemagick.org/script/color.php&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Full list of imagemagick color names.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Will McGugan on X: &#34;Just a wee thing that came up today. I thi...</title>
    <id>https://new.waylonwalker.com/thought-165/</id>
    <updated>2023-11-27T22:31:33Z</updated>
    <published>2023-11-27T22:31:33Z</published>
    <link href="https://new.waylonwalker.com/thought-165/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://twitter.com/willmcgugan/status/1729158038551220477</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://twitter.com/willmcgugan/status/1729158038551220477&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;/a&gt;&lt;div class=&#34;embed-card-image&#34;&gt;&lt;a class=&#34;embed-card-link&#34; href=&#34;https://twitter.com/willmcgugan/status/1729158038551220477&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;      &lt;img src=&#34;https://pbs.twimg.com/ext_tw_video_thumb/1729156789592059904/pu/img/jPpNU-NA-arJpQyz.jpg&#34; alt=&#34;Will McGugan (&amp;lt;a href=&#34; https:=&#34;&#34; willmcgugan.github.io&#34;=&#34;&#34; class=&#34;mention glightbox&#34; data-name=&#34;Will McGugan&#34; data-bio=&#34;Will McGugan’s essays&#34; data-avatar=&#34;https://willmcgugan.github.io/images/will2025.jpeg&#34; data-handle=&#34;@willmcgugan&#34;/ data-glightbox=&#34;description: Will McGugan (&amp;lt;a href=&#34;&gt;@willmcgugan&lt;/a&gt;) on X — Just a wee thing that came up today. I think this is kind of neat.&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;Will McGugan (&lt;a class=&#34;mention  has-avatar has-avatar-before&#34; data-avatar=&#34;https://willmcgugan.github.io/images/will2025.jpeg&#34; data-bio=&#34;Will McGugan’s essays&#34; data-handle=&#34;@willmcgugan&#34; data-name=&#34;Will McGugan&#34; href=&#34;https://willmcgugan.github.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/willmcgugan.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/willmcgugan.github.io.png&#34;&gt;@willmcgugan&lt;/a&gt;) on X&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Just a wee thing that came up today. I think this is kind of neat.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;X (formerly Twitter) · twitter.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &#xA;&lt;/div&gt;&#xA;&lt;p&gt;Textual is so sick, Will just made a live markdown editor in the terminal!&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>kv - Command | Vault | HashiCorp Developer</title>
    <id>https://new.waylonwalker.com/thought-158/</id>
    <updated>2023-11-05T09:26:51Z</updated>
    <published>2023-11-05T09:26:51Z</published>
    <link href="https://new.waylonwalker.com/thought-158/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://developer.hashicorp.com/vault/docs/commands/kv</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://developer.hashicorp.com/vault/docs/commands/kv&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://developer.hashicorp.com/og-image/vault.jpg&#34; alt=&#34;kv - Command | Vault | HashiCorp Developer — The &amp;#34;kv&amp;#34; command groups subcommands for interacting with Vault&amp;#39;s key/value&#xA;secret engine.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: kv - Command | Vault | HashiCorp Developer — The &amp;#34;kv&amp;#34; command groups subcommands for interacting with Vault&amp;#39;s key/value&#xA;secret engine.&#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;kv - Command | Vault | HashiCorp Developer&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;The &amp;#34;kv&amp;#34; command groups subcommands for interacting with Vault&amp;#39;s key/value&#xA;secret engine.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;kv - Command | Vault | HashiCorp Developer · developer.hashicorp.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;hashi vault lets you manage secrets right from your cli.&lt;/p&gt;&#xA;&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;# set your vault url&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;VAULT_ADDR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://myvault.mydomain&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vault login&#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;# get a secret&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vault kv get secret/hvac&#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;# put a secret&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vault kv put -mount&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;secret creds &lt;span class=&#34;nv&#34;&gt;passcode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;my-long-passcode&#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;# get 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;vault kv get secret/creds&#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;# == Secret Path ==&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;# secret/data/creds&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;# ======= Metadata =======&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                Value&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;# created_time       2023-11-05T02:53:40.978120001Z&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;# custom_metadata    &amp;lt;nil&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;&lt;span class=&#34;c1&#34;&gt;# deletion_time      n/a&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;# destroyed          false&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;# version            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;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;# ====== Data ======&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         Value&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;# bar         baz&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;# passcode    my-long-passcode&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;# get one field&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vault kv get -field&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;passcode secret/creds&#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;# my-long-passcode&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vault kv put -mount&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;secret creds &lt;span class=&#34;nv&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;baz&#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;# set more 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;vault kv put -mount&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;secret creds &lt;span class=&#34;nv&#34;&gt;passcode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;my-long-passcode &lt;span class=&#34;nv&#34;&gt;bar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;baz&#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;# &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;# == Secret Path ==&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;# secret/data/creds&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;# ======= Metadata =======&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                Value&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;# created_time       2023-11-05T03:24:14.65958906Z&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;# custom_metadata    &amp;lt;nil&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;&lt;span class=&#34;c1&#34;&gt;# deletion_time      n/a&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;# destroyed          false&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;# version            4&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;vault kv get secret/creds&#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;# == Secret Path ==&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;# secret/data/creds&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;# ======= Metadata =======&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                Value&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;# created_time       2023-11-05T02:53:40.978120001Z&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;# custom_metadata    &amp;lt;nil&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;&lt;span class=&#34;c1&#34;&gt;# deletion_time      n/a&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;# destroyed          false&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;# version            4&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;# ====== Data ======&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         Value&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;# bar         baz&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;# passcode    my-long-passcode&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>casey/just: 🤖 Just a command runner</title>
    <id>https://new.waylonwalker.com/thought-147/</id>
    <updated>2023-10-22T07:09:57Z</updated>
    <published>2023-10-22T07:09:57Z</published>
    <link href="https://new.waylonwalker.com/thought-147/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/casey/just</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/casey/just&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/19adbe031e79f605bc64519c0726704e3ee2fb45af9fd04c5017fd12e7aa6ec9/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;I think just, might just be the thing I have been looking for.  I’ve been looking for some ci/cd that I can host myself, but everything looks pretty big, so for now I am going to use just as my task runner.&lt;/p&gt;&#xA;&lt;p&gt;I installed with installer.&lt;/p&gt;&#xA;&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.wayl.one/casey/just &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;p&gt;I set up my devtainer builds with just.  Here is my &lt;code&gt;justfile&lt;/code&gt;, yes you just need the cli and a file named &lt;code&gt;justfile&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;nt&#34;&gt;default&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;base alpine slim&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;nt&#34;&gt;base&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;build deploy&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;nt&#34;&gt;alpine&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;build-alpine deploy-alpine&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;nt&#34;&gt;slim&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;build-slim deploy-slim&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;nt&#34;&gt;build&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;podman build -t registry.wayl.one/devtainer: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;nt&#34;&gt;deploy&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;podman push registry.wayl.one/devtainer&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;nt&#34;&gt;build-alpine&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;podman build -f docker/Dockerfile.alpine -t registry.wayl.one/devtainer:alpine .&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;nt&#34;&gt;deploy-alpine&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;podman push registry.wayl.one/devtainer:alpine&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;nt&#34;&gt;build-slim&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;podman build -f docker/Dockerfile.slim -t registry.wayl.one/devtainer:slim .&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;nt&#34;&gt;deploy-slim&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;podman push registry.wayl.one/devtainer:slim&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>wincent/aspects/dotfiles/files/.zshrc at 85fc42d9e96d408a5b367...</title>
    <id>https://new.waylonwalker.com/thought-129/</id>
    <updated>2023-10-10T17:38:22Z</updated>
    <published>2023-10-10T17:38:22Z</published>
    <link href="https://new.waylonwalker.com/thought-129/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc</summary>
    <content type="html">&lt;figure&gt;&#xA;&lt;a href=&#34;/static/https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc&#34; class=&#34;glightbox-link&#34; aria-label=&#34;https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;/static/https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc&#34; alt=&#34;https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc&#34;/ data-glightbox=&#34;description: https://github.com/wincent/wincent/blob/85fc42d9e96d408a/aspects/dotfiles/files/.zshrc&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;Wincent (Greg Hurrel) has a pretty solid and fast zshrc.  I recently grabbed his completion section and it seems to be working better than whatever I had.&lt;/p&gt;&#xA;&lt;p&gt;zsh completion snippet&lt;/p&gt;&#xA;&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;#&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;# Completion&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;&#xA;&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;fpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.zsh/completions &lt;span class=&#34;nv&#34;&gt;$fpath&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;autoload -U compinit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;compinit -u&#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 completion:&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;# - Try exact (case-sensitive) match first.&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;# - Then fall back to case-insensitive.&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;# - Accept abbreviations after . or _ or - (ie. f.b -&amp;gt; foo.bar).&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;# - Substring complete (ie. bar -&amp;gt; foobar).&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zstyle &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*&amp;#39;&lt;/span&gt; matcher-list &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;+m:{[:lower:]}={[:upper:]}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;+m:{[:upper:]}={[:lower:]}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;+m:{_-}={-_}&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;r:|[._-]=* r:|=*&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;l:|=* r:|=*&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;# Colorize completions using default `ls` colors.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zstyle &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*&amp;#39;&lt;/span&gt; list-colors &lt;span class=&#34;s1&#34;&gt;&amp;#39;&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;# Allow completion of ..&amp;lt;Tab&amp;gt; to ../ and beyond.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zstyle -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*&amp;#39;&lt;/span&gt; special-dirs &lt;span class=&#34;s1&#34;&gt;&amp;#39;[[ $PREFIX = (../)#(..) ]] &amp;amp;&amp;amp; reply=(..)&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;# $CDPATH is overpowered (can allow us to jump to 100s of directories) so tends&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;# to dominate completion; exclude path-directories from the tag-order so that&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;# they will only be used as a fallback if no completions are found.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zstyle &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*:complete:(cd|pushd):*&amp;#39;&lt;/span&gt; tag-order &lt;span class=&#34;s1&#34;&gt;&amp;#39;local-directories named-directories&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;# Categorize completion suggestions with headings:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zstyle &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*&amp;#39;&lt;/span&gt; group-name &lt;span class=&#34;s1&#34;&gt;&amp;#39;&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;zstyle &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*:descriptions&amp;#39;&lt;/span&gt; format %F&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;default&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;%B%&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$__WINCENT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ITALIC_ON&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;--- %d ---%&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$__WINCENT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ITALIC_OFF&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;%&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;%b%f&#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;# Enable keyboard navigation of completions in menu&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;# (not just tab/shift-tab but cursor keys as well):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zstyle &lt;span class=&#34;s1&#34;&gt;&amp;#39;:completion:*&amp;#39;&lt;/span&gt; menu &lt;span class=&#34;k&#34;&gt;select&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>jpillora-installer</title>
    <id>https://new.waylonwalker.com/jpillora-installer-til/</id>
    <updated>2023-10-04T19:28:33Z</updated>
    <published>2023-10-04T19:28:33Z</published>
    <link href="https://new.waylonwalker.com/jpillora-installer-til/" rel="alternate" type="text/html"></link>
    <summary type="text">jpillora/installer is the install script generator I have been looking for. It downloads binaries for your machine from GitHub releases and unzips them for...</summary>
    <content type="html">&lt;p&gt;jpillora/installer is the install script generator I have been looking for. It&#xA;downloads binaries for your machine from GitHub releases and unzips them for&#xA;you. It grabs the latest release, so you can easily update them. I have&#xA;tried scripting these installs in the past and struggled to consistently get&#xA;the latest version for every package and unpack it correctly.&lt;/p&gt;&#xA;&lt;p&gt;Also these pre-compiled binaries install rediculously fast compared to building&#xA;them from source.&lt;/p&gt;&#xA;&lt;p&gt;Check out some example links.&lt;/p&gt;&#xA;&lt;p&gt;opening in a browser will show metadata&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;hoverlink  has-avatar has-avatar-before&#34; href=&#34;https://i.jpillora.com/serve&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/i.jpillora.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/i.jpillora.com.ico&#34;&gt;https://i.jpillora.com/serve&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you pass in script=true it will instead return the install script as it&#xA;would by default through curl.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;hoverlink  has-avatar has-avatar-before&#34; href=&#34;https://i.jpillora.com/serve?script=true&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/i.jpillora.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/i.jpillora.com.ico&#34;&gt;https://i.jpillora.com/serve?script=true&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;use-it-to-install-neovim&#34;&gt;Use it to install neovim &lt;a href=&#34;#use-it-to-install-neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;All you need to do to generate an install script is to pass in the GitHub repo&#xA;slug with the org.&lt;/p&gt;&#xA;&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/neovim/neovim &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;p&gt;The shell script that it generates for neovim looks 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;&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;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;nv&#34;&gt;$DEBUG&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;1&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;    &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -x&#xA;&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;nv&#34;&gt;TMP_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mktemp -d -t jpillora-installer-XXXXXXXXXX&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;k&#34;&gt;function&lt;/span&gt; cleanup &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;    rm -rf &lt;span class=&#34;nv&#34;&gt;$TMP_DIR&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;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; fail &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;    cleanup&#xA;&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;msg&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; &lt;span class=&#34;s2&#34;&gt;&amp;#34;============&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;s2&#34;&gt;&amp;#34;Error: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$msg&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; 1&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&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;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#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;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;function&lt;/span&gt; install &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;#settings&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;USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim&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;PROG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim&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;ASPROG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&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;MOVE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&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;RELEASE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;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;    &lt;span class=&#34;nv&#34;&gt;INSECURE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&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;OUT_DIR&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;&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;&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;GH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.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;    &lt;span class=&#34;c1&#34;&gt;#bash check&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; ! &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$BASH_VERSION&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;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;Please use bash instead&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; ! -d &lt;span class=&#34;nv&#34;&gt;$OUT_DIR&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;output directory missing: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT_DIR&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;c1&#34;&gt;#dependency check, assume we are a standard POISX machine&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    which find &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;find not installed&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;    which xargs &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;xargs not installed&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;    which sort &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;sort not installed&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;    which tail &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;tail not installed&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;    which cut &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;cut not installed&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;    which du &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;du not installed&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;#choose an HTTP client&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;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&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;if&lt;/span&gt; which curl &amp;gt; /dev/null&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;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;curl&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;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$INSECURE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&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; &lt;span class=&#34;nv&#34;&gt;GET&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;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --insecure&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;nv&#34;&gt;GET&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;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --fail -# -L&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;elif&lt;/span&gt; which wget &amp;gt; /dev/null&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;nv&#34;&gt;GET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;wget&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;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$INSECURE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;true&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; &lt;span class=&#34;nv&#34;&gt;GET&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;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; --no-check-certificate&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&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;nv&#34;&gt;GET&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;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -qO-&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;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;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;neither wget/curl are installed&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#debug HTTP&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; &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;nv&#34;&gt;$DEBUG&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;1&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;        &lt;span class=&#34;nv&#34;&gt;GET&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;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -v&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#optional auth to install from private 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;    &lt;span class=&#34;c1&#34;&gt;#NOTE: this also needs to be set on your instance of 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;    &lt;span class=&#34;nv&#34;&gt;AUTH&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;GITHUB_TOKEN&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;&#xA;&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; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$AUTH&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;        &lt;span class=&#34;nv&#34;&gt;GET&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;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; -H &amp;#39;Authorization: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$AUTH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&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;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;c1&#34;&gt;#find OS #TODO BSDs and other posixs&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;case&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uname -s&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; in&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Darwin&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;darwin&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;    Linux&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;linux&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;o&#34;&gt;)&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unknown os: &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;&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;k&#34;&gt;esac&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;#find ARCH&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; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;(arm|arch)64&amp;#39;&lt;/span&gt; &amp;gt; /dev/null&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;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;arm64&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;# no m1 assets. if on mac arm64, rosetta allows fallback to amd64&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; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$OS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;darwin&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;            &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;amd64&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;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;k&#34;&gt;elif&lt;/span&gt; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;m&#34;&gt;64&lt;/span&gt; &amp;gt; /dev/null&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;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;amd64&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;elif&lt;/span&gt; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep arm &amp;gt; /dev/null&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;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;arm&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#TODO armv6/v7&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; uname -m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;m&#34;&gt;386&lt;/span&gt; &amp;gt; /dev/null&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;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;386&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;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;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unknown arch: &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;&#xA;&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;c1&#34;&gt;#choose from asset 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;    &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&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;FTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&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;case&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;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&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; in&#xA;&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;linux_amd64&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;        &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz&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;FTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.gz&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;s2&#34;&gt;&amp;#34;darwin_amd64&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;        &lt;span class=&#34;nv&#34;&gt;URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://github.com/neovim/neovim/releases/download/stable/nvim-macos.tar.gz&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;FTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.gz&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;o&#34;&gt;)&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;No asset for platform &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&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;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;esac&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;#got URL! download 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;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;Downloading&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; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$USER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PROG&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;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RELEASE&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;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RELEASE&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;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; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&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;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34; as &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -n &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;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&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;&#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;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.....&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;#enter tempdir&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mkdir -p &lt;span class=&#34;nv&#34;&gt;$TMP_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;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$TMP_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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.gz&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;        which gzip &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;gzip is not installed&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;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&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; gzip -d - &amp;gt; &lt;span class=&#34;nv&#34;&gt;$PROG&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&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;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.bz&amp;#34;&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;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.bz2&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;        which tar &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;tar is not installed&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;        which bzip2 &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;bzip2 is not installed&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;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&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; tar jxf - &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&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;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tar.gz&amp;#34;&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;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.tgz&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;        which tar &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;tar is not installed&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;        which gzip &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;gzip is not installed&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;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&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; tar zxf - &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&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;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.zip&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;        which unzip &amp;gt; /dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unzip is not installed&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;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; tmp.zip &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&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;        unzip -o -qq tmp.zip &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unzip failed&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;        rm tmp.zip &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;cleanup failed&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;elif&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FTYPE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;.bin&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;        bash -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$GET&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$URL&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;neovim_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;OS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ARCH&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; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;download failed&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;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;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;unknown file type: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FTYPE&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#search subtree largest file (bin)&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;TMP_BIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;find . -type f &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs du &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort -n &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tail -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -f 2&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TMP_BIN&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;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;could not find find binary (largest file)&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#ensure its larger than 1MB&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;#TODO linux=elf/darwin=macho file detection?&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; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;du -m &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -f1&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; -lt &lt;span class=&#34;m&#34;&gt;1&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;        fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;no binary found (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; is not larger than 1MB)&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#move into PATH or cwd&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod +x &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;chmod +x failed&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;DEST&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;nv&#34;&gt;$OUT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PROG&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;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&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;        &lt;span class=&#34;nv&#34;&gt;DEST&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;nv&#34;&gt;$OUT_DIR&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ASPROG&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#move without sudo&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;OUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;mv &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$DEST&lt;/span&gt; 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;1&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;nv&#34;&gt;STATUS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#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;# failed and string contains &amp;#34;Permission denied&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;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$STATUS&lt;/span&gt; -ne &lt;span class=&#34;m&#34;&gt;0&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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$OUT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~ &lt;span class=&#34;s2&#34;&gt;&amp;#34;Permission denied&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;            &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;mv with sudo...&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 mv &lt;span class=&#34;nv&#34;&gt;$TMP_BIN&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$DEST&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;sudo mv failed&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;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;            fail &lt;span class=&#34;s2&#34;&gt;&amp;#34;mv failed (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$OUT&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;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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Downloaded to &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEST&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;c1&#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;    cleanup&#xA;&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;install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;&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;-your-own&#34;&gt;Self Host Your Own &lt;a href=&#34;#self-host-your-own&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’d reccomend self hosting your own. This way you know that it’s consistent&#xA;and unlikely to change in a way that breaks your use.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;curl -s https://i.jpillora.com/installer | bash&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;repos-i-am-using-installer-for&#34;&gt;Repos I am using installer for &lt;a href=&#34;#repos-i-am-using-installer-for&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are the repos I am using installer for.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;atuinsh/atuin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;benbjohnson/litestream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bootandy/dust&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;BurntSushi/ripgrep&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmln/sd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cjbassi/ytop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dalance/procs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dbrgn/tealdeer&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ducaale/xh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go-task/task&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imsnif/bandwhich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imsnif/diskonaut&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kovidgoyal/kitty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mgdm/htmlq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;neovim/neovim&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ogham/dog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ogham/exa&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pemistahl/grex&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sharkdp/bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sharkdp/fd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sharkdp/pastel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sirwart/ripsecrets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;starship/starship&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;topgrade-rs/topgrade&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zellij-org/zellij&#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>jpillora/installer: One-liner for installing binaries from Git...</title>
    <id>https://new.waylonwalker.com/thought-115/</id>
    <updated>2023-09-23T05:59:09Z</updated>
    <published>2023-09-23T05:59:09Z</published>
    <link href="https://new.waylonwalker.com/thought-115/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/jpillora/installer</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/jpillora/installer&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/00b784a00ae2265b14f050e853e5666c6948aec6569f165366fd487dea5b7401/jpillora/installer&#34; alt=&#34;GitHub - jpillora/installer: One-liner for installing binaries from Github releases — One-liner for installing binaries from Github releases - jpillora/installer&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - jpillora/installer: One-liner for installing binaries from Github releases — One-liner for installing binaries from Github releases - jpillora/installer&#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 - jpillora/installer: One-liner for installing binaries from Github releases&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;One-liner for installing binaries from Github releases - jpillora/installer&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 a sick looking bash script generator for installing binaries off of github releases.  it reccomends curl into bash, but you could curl into install.sh  and toss that in your dotfiles repo or wherever.&lt;/p&gt;&#xA;&lt;p&gt;Install installer with installer&lt;/p&gt;&#xA;&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 -s https://i.jpillora.com/installer &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&#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>Formatter</title>
    <id>https://new.waylonwalker.com/thought-107/</id>
    <updated>2023-09-07T05:32:00Z</updated>
    <published>2023-09-07T05:32:00Z</published>
    <link href="https://new.waylonwalker.com/thought-107/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://biomejs.dev/formatter/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://biomejs.dev/formatter/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://biomejs.dev/og/formatter.png&#34; alt=&#34;Formatter — How to use the Biome formatter.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Formatter — How to use the Biome formatter.&#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;Formatter&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;How to use the Biome formatter.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Biome · biomejs.dev&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Tried out biome today and it worked better than prettier on jinja templates, I might adopt this over prettier.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>cURL Command Without Using Cache | Baeldung on Linux</title>
    <id>https://new.waylonwalker.com/thought-97/</id>
    <updated>2023-08-21T18:39:41Z</updated>
    <published>2023-08-21T18:39:41Z</published>
    <link href="https://new.waylonwalker.com/thought-97/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://www.baeldung.com/linux/curl-without-cache#adding-the-pragma-http-header&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://www.baeldung.com/wp-content/uploads/sites/2/2021/09/Featured-Linux-5.png&#34; alt=&#34;cURL Command Without Using Cache | Baeldung on Linux — A quick and practical guide to using curl without cache.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: cURL Command Without Using Cache | Baeldung on Linux — A quick and practical guide to using curl without cache.&#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 Command Without Using Cache | Baeldung on Linux&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;A quick and practical guide to using curl without cache.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Baeldung on Linux · baeldung.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Busting cache with curl.  I’m not sure how much gets cached by curl, but I have ran into several cases where I am looking for new content and I want to ensure the content is new and no chance of being cached.&lt;/p&gt;&#xA;&lt;p&gt;This article suggests 3 different techniques.&lt;/p&gt;&#xA;&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 -H &lt;span class=&#34;s1&#34;&gt;&amp;#39;Cache-Control: no-cache, no-store&amp;#39;&lt;/span&gt; http://www.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -H &lt;span class=&#34;s1&#34;&gt;&amp;#39;Pragma: no-cache&amp;#39;&lt;/span&gt; http://www.example.com&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl http://www.example.com/?xyzzyspoon&#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>sharkdp/bat: A cat clone with wings.</title>
    <id>https://new.waylonwalker.com/thought-95/</id>
    <updated>2023-08-21T18:28:06Z</updated>
    <published>2023-08-21T18:28:06Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://github.com/sharkdp/bat&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/github-production-repository-image-32fea6/130464961/20727580-dd13-11e9-8f03-0789a00a3b64?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20260804%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20260804T230534Z&amp;amp;X-Amz-Expires=300&amp;amp;X-Amz-Signature=e923786ae413252821430a9aaaf4f622a418076842cbaa4e5bb321e146035f24&amp;amp;X-Amz-SignedHeaders=host&amp;amp;jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vIiwia2V5Ijoia2V5MSIsImV4cCI6MTc4NTg4NTAzNCwibmJmIjoxNzg1ODg0NzM0LCJwYXRoIjoicmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIn0.nUB7obpUUfvJUS0nB1tYkmXEolXZmi0y6TuwIJ1h_sQ&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>How to Format All Files in a Directory with Prettier | by Dr. ...</title>
    <id>https://new.waylonwalker.com/thought-93/</id>
    <updated>2023-08-19T19:58:09Z</updated>
    <published>2023-08-19T19:58:09Z</published>
    <link href="https://new.waylonwalker.com/thought-93/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://levelup.gitconnected.com/how-to-format-all-files-in-a-directory-with-prettier-5f0ff5f4ffb2</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link  has-avatar has-avatar-before&#34; href=&#34;https://levelup.gitconnected.com/how-to-format-all-files-in-a-directory-with-prettier-5f0ff5f4ffb2&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/levelup.gitconnected.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/levelup.gitconnected.com.png&#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;levelup.gitconnected.com&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Use prettier to format all files in a directory.  By default prettier does not write, it just echos out the format that it would do.  Give it the &lt;code&gt;--write&lt;/code&gt; and it will write the changes to the 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;prettier --write .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I just used this on my thoughts 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;prettier --write templates&#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>Center things - Textual</title>
    <id>https://new.waylonwalker.com/thought-62/</id>
    <updated>2023-07-30T21:31:55Z</updated>
    <published>2023-07-30T21:31:55Z</published>
    <link href="https://new.waylonwalker.com/thought-62/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://textual.textualize.io/how-to/center-things/</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://textual.textualize.io/how-to/center-things/&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;div class=&#34;embed-card-image&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://raw.githubusercontent.com/Textualize/textual/main/imgs/textual.png&#34; alt=&#34;Textual - Center things — Textual is a TUI framework for Python, inspired by modern web development.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: Textual - Center things — Textual is a TUI framework for Python, inspired by modern web development.&#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;Textual - Center things&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;Textual is a TUI framework for Python, inspired by modern web development.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-meta&#34;&gt;Textual Documentation · textual.textualize.io&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;How to center things in textual. Textual has a very unique way of styling text user interfaces for the terminal using css.  If you know css it feels natural.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;mention  has-avatar has-avatar-before&#34; data-avatar=&#34;https://willmcgugan.github.io/images/will2025.jpeg&#34; data-bio=&#34;Will McGugan’s essays&#34; data-handle=&#34;@willmcgugan&#34; data-name=&#34;Will McGugan&#34; href=&#34;https://willmcgugan.github.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/willmcgugan.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/willmcgugan.github.io.png&#34;&gt;@willmcgugan&lt;/a&gt;, has put together a great article on how to center things in textual&lt;/p&gt;&#xA;&lt;p&gt;here the final 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;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.app&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;App&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ComposeResult&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.widgets&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Static&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;QUOTE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Could not find you in Seattle and no terminal is in operation at your classified address.&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;&#xA;&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;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CenterApp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;App&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;&amp;#34;&amp;#34;How to center things.&amp;#34;&amp;#34;&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;n&#34;&gt;CSS&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&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;    Screen {&#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;        align: center middle;&#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;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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    #hello {&#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;        background: blue 50%;&#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;        border: wide white;&#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;        width: 40;&#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;        height: 9;&#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;        text-align: center;&#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;        content-align: center middle;&#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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;    &amp;#34;&amp;#34;&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;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;compose&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ComposeResult&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;yield&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Static&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;QUOTE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&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;&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&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;app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CenterApp&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;app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&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;</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://new.waylonwalker.com/thought-6/</id>
    <updated>2023-07-28T19:59:37Z</updated>
    <published>2023-07-28T19:59:37Z</published>
    <link href="https://new.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 class=&#34;embed-card-link&#34; href=&#34;https://nickjanetakis.com/blog/deleting-specific-lines-in-a-file-with-sed-or-yq&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>1j01/textual-paint: :art: MS Paint... in your terminal.</title>
    <id>https://new.waylonwalker.com/thought-50/</id>
    <updated>2023-07-28T19:59:37Z</updated>
    <published>2023-07-28T19:59:37Z</published>
    <link href="https://new.waylonwalker.com/thought-50/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/1j01/textual-paint</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/1j01/textual-paint&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/github-production-repository-image-32fea6/626145619/c71d0c14-c3e4-42ec-9ed5-512d8babc664?X-Amz-Algorithm=AWS4-HMAC-SHA256&amp;amp;X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20260804%2Fus-east-1%2Fs3%2Faws4_request&amp;amp;X-Amz-Date=20260804T230351Z&amp;amp;X-Amz-Expires=300&amp;amp;X-Amz-Signature=01864378788cb9a4f2eaed8753665e5d913c793aad39afc0cf5fe10f5cafecc3&amp;amp;X-Amz-SignedHeaders=host&amp;amp;jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoiaHR0cHM6Ly9yZXBvc2l0b3J5LWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vIiwia2V5Ijoia2V5MSIsImV4cCI6MTc4NTg4NDkzMSwibmJmIjoxNzg1ODg0NjMxLCJwYXRoIjoicmVwb3NpdG9yeS1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIn0.OxmKgsllB9WcQRUzJU7YT1OoHRDNH0UE5ESViORIiMw&#34; alt=&#34;GitHub - 1j01/textual-paint: :art: MS Paint in your terminal. — :art: MS Paint in your terminal. Contribute to 1j01/textual-paint development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - 1j01/textual-paint: :art: MS Paint in your terminal. — :art: MS Paint in your terminal. Contribute to 1j01/textual-paint 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 - 1j01/textual-paint: :art: MS Paint in your terminal.&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;:art: MS Paint in your terminal. Contribute to 1j01/textual-paint 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;&lt;a href=&#34;https://github.com/1j01&#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;1j01&lt;/a&gt; created a complete working clone of ms paint in the terminal using the textual framework.  It’s incredible.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Harlequin SQL IDE - DuckDB</title>
    <id>https://new.waylonwalker.com/thought-35/</id>
    <updated>2023-07-28T19:59:37Z</updated>
    <published>2023-07-28T19:59:37Z</published>
    <link href="https://new.waylonwalker.com/thought-35/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://duckdb.org/docs/guides/sql_editors/harlequin</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link  has-avatar has-avatar-before&#34; href=&#34;https://duckdb.org/docs/guides/sql_editors/harlequin&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/duckdb.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/duckdb.org.png&#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;duckdb.org&lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Harlequin is a pretty sweet example of what textual can be used to create.   Its a terminal based sql ide for DuckDB.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>doyensec/wsrepl: WebSocket REPL for pentesters</title>
    <id>https://new.waylonwalker.com/thought-29/</id>
    <updated>2023-07-28T19:59:37Z</updated>
    <published>2023-07-28T19:59:37Z</published>
    <link href="https://new.waylonwalker.com/thought-29/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://github.com/doyensec/wsrepl</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://github.com/doyensec/wsrepl&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#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/5eec3fa1b5f85f5f817e2811ed8d894efb0315d1c7e8cb892f45ce58e9b5c6db/doyensec/wsrepl&#34; alt=&#34;GitHub - doyensec/wsrepl: WebSocket REPL for pentesters — WebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.&#34; loading=&#34;lazy&#34;/ data-glightbox=&#34;description: GitHub - doyensec/wsrepl: WebSocket REPL for pentesters — WebSocket REPL for pentesters. Contribute to doyensec/wsrepl 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 - doyensec/wsrepl: WebSocket REPL for pentesters&lt;/div&gt;&#xA;      &lt;div class=&#34;embed-card-description&#34;&gt;WebSocket REPL for pentesters. Contribute to doyensec/wsrepl 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;Very inspiring textual project to check out how they set up the ui.  Their intro video has a pretty epic dev experience.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Doyensec on Twitter: &#34;Announcing wsrepl, the WebSocket testing...</title>
    <id>https://new.waylonwalker.com/thought-28/</id>
    <updated>2023-07-28T19:59:37Z</updated>
    <published>2023-07-28T19:59:37Z</published>
    <link href="https://new.waylonwalker.com/thought-28/" rel="alternate" type="text/html"></link>
    <summary type="text">!https://twitter.com/Doyensec/status/1681320727465672706</summary>
    <content type="html">&lt;div class=&#34;embed-card embed-card-external&#34;&gt;&#xA;  &lt;a class=&#34;embed-card-link&#34; href=&#34;https://twitter.com/Doyensec/status/1681320727465672706&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;    &lt;/a&gt;&lt;div class=&#34;embed-card-image&#34;&gt;&lt;a class=&#34;embed-card-link&#34; href=&#34;https://twitter.com/Doyensec/status/1681320727465672706&#34; rel=&#34;noopener noreferrer&#34; target=&#34;_blank&#34;&gt;&#xA;      &lt;img class=&#34;glightbox&#34; src=&#34;https://pbs.twimg.com/ext_tw_video_thumb/1681319594231996425/pu/img/BiMkyS71W_JZNJjL.jpg&#34; alt=&#34;Doyensec (@Doyensec) on X — Announcing wsrepl, the WebSocket testing tool from Doyensec! This intuitive tool is super easy to use and makes automation around WebSockets simple!&#xA;&amp;lt;p&amp;gt;Check out our blog for the details and download it today! &amp;lt;a href=&#34; https:=&#34;&#34; t.co=&#34;&#34; km5m7k6pb0&#34;=&#34;&#34;/ data-glightbox=&#34;description: Doyensec (@Doyensec) on X — Announcing wsrepl, the WebSocket testing tool from Doyensec! This intuitive tool is super easy to use and makes automation around WebSockets simple!&#xA;&amp;lt;p&amp;gt;Check out our blog for the details and download it today! &amp;lt;a href=&#34;&gt;https://t.co/km5m7k6Pb0&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;#doyensec #appsec &lt;a class=&#34;hashtag-tag&#34; data-count=&#34;2&#34; data-reading-time=&#34;2&#34; data-reading-time-text=&#34;2 minutes&#34; data-tag=&#34;websockets&#34; href=&#34;/tags/websockets/&#34;&gt;#websockets&lt;/a&gt; #burpsuite&amp;#34; loading=“lazy”&amp;gt;&#xA;&lt;/p&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-content&#34;&gt;&#xA;&lt;div class=&#34;embed-card-title&#34;&gt;Doyensec (@Doyensec) on X&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-description&#34;&gt;Announcing wsrepl, the WebSocket testing tool from Doyensec! This intuitive tool is super easy to use and makes automation around WebSockets simple!&lt;p&gt;&lt;/p&gt;&#xA;&lt;p&gt;Check out our blog for the details and download…&lt;/p&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;embed-card-meta&#34;&gt;X (formerly Twitter) · twitter.com&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;wsrepl is an epic websocket repl built in python on the textual framework.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Releasing a New Version of Your Python Package Just Got Easier</title>
    <id>https://new.waylonwalker.com/gh-release/</id>
    <updated>2023-01-23T10:52:19Z</updated>
    <published>2023-01-23T10:52:19Z</published>
    <link href="https://new.waylonwalker.com/gh-release/" rel="alternate" type="text/html"></link>
    <summary type="text">Quickly and easily create new versions of your Python package with the command. Get the version number, changelog, and</summary>
    <content type="html">&lt;p&gt;Quickly and easily create new versions of your Python package with the &lt;code&gt;gh release&lt;/code&gt;&#xA;command. Get the version number, changelog, and&lt;/p&gt;&#xA;&lt;p&gt;Releasing a new version of your Python package can be a daunting task. You need to make&#xA;sure that all the necessary files are included, and that the version number is correct.&#xA;But now, with the help of the &lt;code&gt;gh release&lt;/code&gt; command, you can make the process much&#xA;smoother.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;gh release&lt;/code&gt; command allows you to quickly and easily create a new version of your&#xA;Python package. All you need to do is provide the version number, the changelog, and the&#xA;distribution files. For example, if you wanted to create a new version of your package&#xA;with the version number &lt;code&gt;v1.2.3&lt;/code&gt;, you could use 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;gh release create v1.2.3 -F CHANGELOG.md dist/*.whl dist/*.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This command will create a new version of your package with the specified version number,&#xA;and include the changelog and the distribution files. It’s a great way to make sure that&#xA;all the necessary files are included in the release, and that the version number is&#xA;correct.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;code&gt;gh release&lt;/code&gt; command is a great tool for quickly and easily creating new versions of&#xA;your Python package. With just a few simple commands, you can make sure that all the&#xA;necessary files are included, and that the version number is correct. So if you’re looking&#xA;for an easy way to release a new version of your Python package, give the &lt;code&gt;gh release&lt;/code&gt;&#xA;command a try.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>dash e your github docker actions</title>
    <id>https://new.waylonwalker.com/fail-ci-scripts/</id>
    <updated>2022-12-07T13:09:37Z</updated>
    <published>2022-12-07T13:09:37Z</published>
    <link href="https://new.waylonwalker.com/fail-ci-scripts/" rel="alternate" type="text/html"></link>
    <summary type="text">Give github actions the -e flag in the shebang so they fail on any one command failure. Otherwise each line will set the exit status, but only the last one...</summary>
    <content type="html">&lt;p&gt;Give github actions the -e flag in the shebang &lt;code&gt;#!&lt;/code&gt; so they fail on any one&#xA;command failure. Otherwise each line will set the exit status, but only the&#xA;last one will be passed to ci.&lt;/p&gt;&#xA;&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 -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;what-is--e&#34;&gt;What is -e &lt;a href=&#34;#what-is--e&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The -e flag to the bash command allows your script to exit immediately if any&#xA;command within the script returns a non-zero exit status. This can be useful&#xA;for ensuring that your script exits with an error if any of the commands it&#xA;runs fail, which can help you identify and debug issues in your script. For&#xA;example, if you have a script that runs several commands and one of those&#xA;commands fails, the script will continue running without the -e flag, but will&#xA;exit immediately if the -e flag is present. This can make it easier to&#xA;troubleshoot your script and ensure that it runs correctly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;solution-for-windows&#34;&gt;Solution for Windows &lt;a href=&#34;#solution-for-windows&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In windows the solution is not quite as simple. You can define a function in a&#xA;Windows batch script that wraps an if statement to check the exit status of a&#xA;command and handle any errors that may have occurred. Here is an example of how&#xA;you might define a function called “check_error” that does 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;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;check_error&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; &lt;span class=&#34;k&#34;&gt;errorlevel&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&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;echo&lt;/span&gt; An error occurred!&#xA;&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;exit&lt;/span&gt; /b 1&#xA;&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;p&gt;To use this function in your script, you would simply call it after running a&#xA;command, 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;some_command&#xA;&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;call&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;check_error&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This would run the “some_command” and then call the “check_error” function to&#xA;check the exit status and handle any errors that may have occurred. This&#xA;approach allows you to reuse the error-checking logic in your script, which can&#xA;make it easier to write and maintain.&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 push/pull panes</title>
    <id>https://new.waylonwalker.com/tmux-push-pull-panes/</id>
    <updated>2022-12-04T13:25:54Z</updated>
    <published>2022-12-04T13:25:54Z</published>
    <link href="https://new.waylonwalker.com/tmux-push-pull-panes/" rel="alternate" type="text/html"></link>
    <summary type="text">Moving panes between tmux sessions is something that makes tmux a very flexible and powerful tool. I don&#39;t need this feature very often, but it comes in...</summary>
    <content type="html">&lt;p&gt;Moving panes between tmux sessions is something that makes tmux a very flexible&#xA;and powerful tool.  I don’t need this feature very often, but it comes in&#xA;clutch when you need it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pull-a-pane-from-any-other-session&#34;&gt;Pull a pane from any other session &lt;a href=&#34;#pull-a-pane-from-any-other-session&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Using &lt;code&gt;choose-window&lt;/code&gt; I was able to come up with a way to select any pane&#xA;withing any other session and join it into my current session.&lt;/p&gt;&#xA;&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;# Choose a pane to join in horizontally&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; f choose-window -Z &lt;span class=&#34;s1&#34;&gt;&amp;#39;join-pane -h -s &amp;#34;%%&amp;#34;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pushpull-from-scratch&#34;&gt;Push/Pull from scratch &lt;a href=&#34;#pushpull-from-scratch&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’ve long had this one in my tmux config, I always have a “scratch” session&#xA;that I’m running, I often use for looking at things like &lt;code&gt;k9s&lt;/code&gt; accross repos&#xA;within a popup.&lt;/p&gt;&#xA;&lt;p&gt;This use case puts a pane into the scratch session, then pulls it back out.  I&#xA;will use this to move a pane between sessions in the rare cases I need to do&#xA;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;&lt;span class=&#34;c1&#34;&gt;# push the active pane into the scratch session horizonally&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-f join-pane -ht scratch&#xA;&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;# pull the last active pane from the scratch session horizonally into this 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;nb&#34;&gt;bind&lt;/span&gt; -n M-F join-pane -hs scratch&#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>Get better at jq interactively | ijq</title>
    <id>https://new.waylonwalker.com/ijq/</id>
    <updated>2022-07-15T21:09:35Z</updated>
    <published>2022-07-15T21:09:35Z</published>
    <link href="https://new.waylonwalker.com/ijq/" rel="alternate" type="text/html"></link>
    <summary type="text">has some syntax that will sneak up on you with complexity. It looks so good, and so understandable, but everytime I go to use it myself, I don&#39;t get it. is...</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;jq&lt;/code&gt; has some syntax that will sneak up on you with complexity. It looks so good,&#xA;and so understandable, but everytime I go to use it myself, I don’t get it.&#xA;&lt;code&gt;ijq&lt;/code&gt; is an interactive alternative to &lt;code&gt;jq&lt;/code&gt; that gives you and nice repl that you&#xA;can iterate on queries 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;paru -Syu ijq&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here are some other articles, I decided to link at the time of writing this article.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-11-20&#34; data-description=&#34;Trying to read a .ipynb file without starting a jupyter server? jut has you covered.&#34; data-title=&#34;JUT | Read Notebooks in the Terminal&#34; href=&#34;/jut/&#34; data-preview=&#34;Trying to read a .ipynb file without starting a jupyter server? jut has you covered.&#34;&gt;JUT | Read Notebooks in the Terminal&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-06-03&#34; data-description=&#34;The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...&#34; data-title=&#34;Comprehensive guide to creating kedro nodes&#34; href=&#34;/kedro-node/&#34; data-preview=&#34;The Kedro node is an essential part of the pipeline. It defines what catalog entries get passed in, what function gets ran, and the catalog entry to save the...&#34;&gt;Comprehensive guide to creating kedro nodes&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-01-14&#34; data-description=&#34;In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.&#34; data-title=&#34;Kedro - My Data Is Not A Table&#34; href=&#34;/kedro-pickle/&#34; data-preview=&#34;In python data science/engineering most of our data is in the form of some sort of table, typically a DataFrame from a library like pandas, spark, or dask.&#34;&gt;Kedro - My Data Is Not A Table&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>Bash function to edit scripts faster</title>
    <id>https://new.waylonwalker.com/ewhich/</id>
    <updated>2022-05-10T14:57:35Z</updated>
    <published>2022-05-10T14:57:35Z</published>
    <link href="https://new.waylonwalker.com/ewhich/" rel="alternate" type="text/html"></link>
    <summary type="text">I am often editing my own scripts as I develop them. I want to make a better workflow for working with scripts like this.</summary>
    <content type="html">&lt;p&gt;I am often editing my own scripts as I develop them. I want to make a better&#xA;workflow for working with scripts like this.&lt;/p&gt;&#xA;&lt;h2 id=&#34;currently&#34;&gt;Currently &lt;a href=&#34;#currently&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Currently I am combining &lt;code&gt;nvim&lt;/code&gt; with a &lt;code&gt;which&lt;/code&gt; subshell to etit these files&#xA;like this.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;for now lets use my todo command as an example&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;nvim &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which todo&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;first-pass&#34;&gt;First pass &lt;a href=&#34;#first-pass&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;On first pass I made a bash function to do exactly what I have been doing.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ewhich &lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which &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;sb&#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;The &lt;code&gt;$1&lt;/code&gt; will pass the first input to the which subshell.  Now we can edit our todo script 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;ewich todo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note, I use bash functions instead of aliases for things that require input.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;final-state&#34;&gt;Final State &lt;a href=&#34;#final-state&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This works fine for commands that are files, but not aliases or shell&#xA;functions.  Next I jumped to looking at the output of &lt;code&gt;command -V $1&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;if the command is not found, search for a file&lt;/li&gt;&#xA;&lt;li&gt;if its a builtin, exit&lt;/li&gt;&#xA;&lt;li&gt;if its an alias, open my &lt;code&gt;~/.alias file to that line&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;if its a function, open my &lt;code&gt;~/.alias file to that line&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ewhich &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;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; -V &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; in&#xA;&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;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; not found&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;        &lt;span class=&#34;nv&#34;&gt;FILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;fzf --prompt &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; not found searching ...&amp;#34;&lt;/span&gt; --query &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&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;o&#34;&gt;[&lt;/span&gt; -z &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$FILE&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;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;closing&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$FILE&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;is a shell builtin&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;        &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;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; is a builtin&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;is an alias&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;        &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; ~/.alias +/alias&lt;span class=&#34;se&#34;&gt;\ &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&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;is a shell function&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;        &lt;span class=&#34;nv&#34;&gt;$EDITOR&lt;/span&gt; ~/.alias +/^&lt;span class=&#34;nv&#34;&gt;$1&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;&#xA;&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;$EDITOR&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;which &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;sb&#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;k&#34;&gt;esac&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;a-bit-more-ergo-and-less-readable&#34;&gt;a bit more ergo, and less readable &lt;a href=&#34;#a-bit-more-ergo-and-less-readable&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To make it easier to type, at the sacrifice of readability for anyone watching&#xA;I added a single character &lt;code&gt;e&lt;/code&gt; alias to ewhich.  So when I want to edit&#xA;anything I just use &lt;code&gt;e&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;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ewhich&#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;Here is a quick screencast of how it works.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/30e5b198-1693-4100-a722-ad0193004e9a.webm&#34; class=&#34;glightbox-link&#34; aria-label=&#34;30e5b198-1693-4100-a722-ad0193004e9a.webm&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/30e5b198-1693-4100-a722-ad0193004e9a.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/30e5b198-1693-4100-a722-ad0193004e9a.webm&#34; type=&#34;video/webm&#34;&gt;30e5b198-1693-4100-a722-ad0193004e9a.webm&lt;/video&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>Using Git from Python</title>
    <id>https://new.waylonwalker.com/python-git/</id>
    <updated>2022-04-30T20:23:23Z</updated>
    <published>2022-04-30T20:23:23Z</published>
    <link href="https://new.waylonwalker.com/python-git/" rel="alternate" type="text/html"></link>
    <summary type="text">is a python api for your git repos, it can be quite handy when you need to work with git from python.</summary>
    <content type="html">&lt;p&gt;&lt;code&gt;GitPython&lt;/code&gt; is a python api for 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; repos, it can be quite handy when you&#xA;need to work with git from python.&lt;/p&gt;&#xA;&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;I recently made myself a handy tool for making screenshots in python and it&#xA;need to do a git commit and push from within the script.  For this I reached&#xA;for &lt;code&gt;GitPython&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2022-04-30&#34; data-description=&#34;When I am creating blog posts it&amp;#39;s often helpful to add screenshots to them to illustrate what I see on my screen. Sometimes I lack good screenshots in my...&#34; data-title=&#34;How I Quickly Capture Screenshots directly into My Blog&#34; href=&#34;/screenshot-to-blog/&#34; data-preview=&#34;When I am creating blog posts it&amp;#39;s often helpful to add screenshots to them to illustrate what I see on my screen. Sometimes I lack good screenshots in my...&#34;&gt;How I Quickly Capture Screenshots directly into My Blog&lt;/a&gt;&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;&lt;code&gt;GitPython&lt;/code&gt; is a python library hosted on pypi that we will want to install&#xA;into our virtual environments using pip.&lt;/p&gt;&#xA;&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;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GitPython&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;create-a-repo-object&#34;&gt;Create a Repo Object &lt;a href=&#34;#create-a-repo-object&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Import Repo from the git library and create an instance of the &lt;code&gt;Repo&lt;/code&gt; object by&#xA;giving it a path to the directory containing your &lt;code&gt;.git&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;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repo&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;repo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;~/git/waylonwalker.com/&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;two-interfaces&#34;&gt;Two interfaces &lt;a href=&#34;#two-interfaces&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;from the docs&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;It provides abstractions of git objects for easy access of repository data,&#xA;and additionally allows you to access the git repository more directly using&#xA;either a pure python implementation, or the faster, but more resource&#xA;intensive git command implementation.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I only needed to use the more intensive but familar to me git command&#xA;implementation to get me project off the ground.  There is a good&#xA;&lt;a href=&#34;https://gitpython.readthedocs.io/en/stable/tutorial.html#tutorial-label&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gitpython.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gitpython.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;tutorial&lt;/a&gt;&#xA;to get you started with their pure python implementation in their docs.&lt;/p&gt;&#xA;&lt;h2 id=&#34;status&#34;&gt;Status &lt;a href=&#34;#status&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Requesting the git status can be done as follows.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;note I have prefixed my commands with »&amp;gt; to distinguish between the command&#xA;I entered and the output.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; print(repo.git.status())&#xA;&#xA;On branch main&#xA;Your branch is ahead of &amp;#39;origin/main&amp;#39; by 1 commit.&#xA;  (use &amp;#34;git push&amp;#34; to publish your local commits)&#xA;&#xA;Untracked files:&#xA;  (use &amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34; to include in what will be committed)&#xA;        blog/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can even pass in flags that you would pass into the cli.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; print(repo.git.status(&amp;#34;-s&amp;#34;))&#xA;&#xA;&amp;lt;!--markata-attribution--&amp;gt;&#xA;?? blog/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;log&#34;&gt;log &lt;a href=&#34;#log&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Example of using the log.&lt;/p&gt;&#xA;&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;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--oneline&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--graph&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;&#xA;&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; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d28bd8&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fix&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;broken&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;image&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;link&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; &lt;span class=&#34;mi&#34;&gt;3573928&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;screenshot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blog&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; &lt;span class=&#34;n&#34;&gt;fed9abc&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;screenshot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blog&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; &lt;span class=&#34;n&#34;&gt;d383780&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;update&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wsl2&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; &lt;span class=&#34;n&#34;&gt;ad72b14&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;screenshot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;blog&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; &lt;span class=&#34;mi&#34;&gt;144&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2f3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gratitude&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;180&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;find-deleted-files&#34;&gt;Find Deleted Files &lt;a href=&#34;#find-deleted-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can even do things like find all files that have been deleted and the hash&#xA;they were deleted.&lt;/p&gt;&#xA;&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;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;--diff-filter&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;D&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--name-only&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;--pretty=format:&amp;#34;%h&amp;#34;&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;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2022-02-28&#34; data-description=&#34;It&amp;#39;s nearly impossible to completely loose a file if it is commited to git. It&amp;#39;s likely harder to fully remove the file than it is to recover it, but how do...&#34; data-title=&#34;git find deleted files&#34; href=&#34;/git-find-deleted-files/&#34; data-preview=&#34;It&amp;#39;s nearly impossible to completely loose a file if it is commited to git. It&amp;#39;s likely harder to fully remove the file than it is to recover it, but how do...&#34;&gt;git find deleted files&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;full post on finding deleted files&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;my-experience&#34;&gt;My Experience &lt;a href=&#34;#my-experience&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This library seemed pretty straightforward and predicatable once I realized&#xA;there were two main implementations and that I would already be familar with&#xA;the more intensive git command implementation.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Mixing Colors at the Command Line</title>
    <id>https://new.waylonwalker.com/pastel-cli/</id>
    <updated>2022-04-05T17:20:37Z</updated>
    <published>2022-04-05T17:20:37Z</published>
    <link href="https://new.waylonwalker.com/pastel-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">From the same Author that brought us command line essentials like and written in rust comes pastel an incredible command-line tool to generate, analyze,...</summary>
    <content type="html">&lt;p&gt;From the same Author that brought us command line essentials like &lt;code&gt;fd&lt;/code&gt; and&#xA;&lt;code&gt;bat&lt;/code&gt; written in rust comes &lt;a href=&#34;https://github.com/sharkdp/pastel&#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;pastel&lt;/a&gt; an&#xA;incredible command-line tool to generate, analyze, convert and manipulate&#xA;colors.&lt;/p&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;You can install from one of the&#xA;&lt;a href=&#34;https://github.com/sharkdp/pastel/releases&#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;releases&lt;/a&gt;, follow the&#xA;&lt;a href=&#34;https://github.com/sharkdp/pastel#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;instructions&lt;/a&gt; for your system&#xA;from the repo.  I chose to go the nix route.  I have enjoyed the simplicity of&#xA;the nix package manager being cross platform and have very up  to date packages&#xA;in 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;nix-env --install pastel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;mixing-colors&#34;&gt;Mixing colors &lt;a href=&#34;#mixing-colors&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Something I often do to blend colors together is add a little alpha to&#xA;something over top of a background.  I can simulate this by mixing colors.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pastel color cornflowerblue &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pastel mix goldenrod -f .1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here is one from the docs that show how you can generate a color palette from&#xA;random colors, mix in some red, lighten and format all in one pipe.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pastel random &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pastel mix red &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pastel lighten 0.2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pastel format hex&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;color-picker&#34;&gt;color picker &lt;a href=&#34;#color-picker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I am on Ubuntu 20.10 as I write this and it works flawlessly.  When I call the&#xA;command, a color picker gui pops up along with an rgb panel.  I can pick from&#xA;the panel or from anywhere on my 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;pastel color-picker&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/8172ddae-7533-4973-897a-9f75018ab6f3.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;pastel pick&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/8172ddae-7533-4973-897a-9f75018ab6f3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/8172ddae-7533-4973-897a-9f75018ab6f3.mp4&#34; type=&#34;video/mp4&#34;&gt;pastel pick&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;pastel pick&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;conversions&#34;&gt;Conversions &lt;a href=&#34;#conversions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I often will want to convert a color from rgb to hex or hsl vice versa.  I open&#xA;google and search.  This is one part that I could really use adding to my&#xA;workflow.&lt;/p&gt;&#xA;&lt;h2 id=&#34;check-it&#34;&gt;Check it &lt;a href=&#34;#check-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here I can mix up a dark grey with rgb, mix in 20% cornflowerblue, and grab the&#xA;hex value.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pastel color 50,50,50 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; pastel mix cornflowerblue -f .2&#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/file/7d67bec3-251d-4ca6-b43a-0740d3033f5f.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;my terminal output from mixing grey&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/7d67bec3-251d-4ca6-b43a-0740d3033f5f.webp&#34; alt=&#34;my terminal output from mixing grey&#34;/ data-glightbox=&#34;description: my terminal output from mixing grey&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I really want to get this into my workflow.  I saw it quite awhile ago but have&#xA;not done much color work.  Lately I have been doing a bit more front end, and&#xA;have been getting into game development.  This is the time to stop googling&#xA;random color mixers and use this one.&lt;/p&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://new.waylonwalker.com/linux-unzip-directory/</id>
    <updated>2022-04-02T16:20:34Z</updated>
    <published>2022-04-02T16:20:34Z</published>
    <link href="https://new.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 class=&#34;wikilink&#34; data-date=&#34;2022-02-07&#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-title=&#34;Running a Minecraft Server in Docker&#34; href=&#34;/docker-minecraft-server/&#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;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;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>Style Lookatme Slides a bit more Personal</title>
    <id>https://new.waylonwalker.com/lookatme-styles/</id>
    <updated>2022-03-24T00:00:00Z</updated>
    <published>2022-03-24T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/lookatme-styles/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently gave a talk at python web conf 2022, and one of the things I did when I should have been working on my presentation was workig on how my...</summary>
    <content type="html">&lt;p&gt;I recently gave a talk at python web conf 2022, and one of the things I did&#xA;when I should have been working on my presentation was workig on how my&#xA;presentation looked… classic procrastination technique.&lt;/p&gt;&#xA;&lt;h2 id=&#34;slide-one&#34;&gt;Slide One &lt;a href=&#34;#slide-one&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Lets use this section to show what it &lt;em&gt;looks&lt;/em&gt; like as I change &lt;strong&gt;my&lt;/strong&gt; styles.&lt;/p&gt;&#xA;&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;markata&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Markata&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;Markata&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;markata&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&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;blockquote&gt;&#xA;&lt;p&gt;☝ This is how my &lt;strong&gt;website&lt;/strong&gt; is built&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;write markdown&lt;/li&gt;&#xA;&lt;li&gt;build site&lt;/li&gt;&#xA;&lt;li&gt;publish&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;default&#34;&gt;default &lt;a href=&#34;#default&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is what the above slide looks like in lookatme.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/b85b01db-e93d-49a0-b669-eda5ee80c6ac.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;default styles&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/b85b01db-e93d-49a0-b669-eda5ee80c6ac.webp&#34; alt=&#34;default styles&#34;/ data-glightbox=&#34;description: default styles&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;set-focus-to-the-most-important-element&#34;&gt;Set focus to the most important element &lt;a href=&#34;#set-focus-to-the-most-important-element&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The way I write my slides I want the most prominant element to be the slides&#xA;title, not the presentation title.  The slides title is generally the point I&#xA;am trying to make, I will leave some supporting information if I want, but&#xA;sometimes, I &lt;em&gt;just&lt;/em&gt; have a title.&lt;/p&gt;&#xA;&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;styles&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;title&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;bg&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;default&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;fg&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;#e1af66&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;headings&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;&amp;#39;1&amp;#39;&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;bg&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;default&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;fg&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;#ff66c4,bold,italics&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;prefix&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; ⇁ &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;suffix&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; ↽ &amp;#39;&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/bfb81dc5-430d-4bac-b9a2-9f4ded776eed.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;set the focus on the slide title styles&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/bfb81dc5-430d-4bac-b9a2-9f4ded776eed.webp&#34; alt=&#34;set the focus on the slide title styles&#34;/ data-glightbox=&#34;description: set the focus on the slide title styles&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;by default he prefix/suffix was a full block that just went transparant into&#xA;the slide.  I thought the harpoons were fun and went with them on a whim&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;the-box-characters-bother-me&#34;&gt;The box characters bother me &lt;a href=&#34;#the-box-characters-bother-me&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The box characters are fine really, but it really bothers me that they are not&#xA;conneted.  The author is probably doing this because it looks ok on most&#xA;systems, and many terminals dont have their fonts right and wont align anyways.&#xA;I am not sure if I ever had a windows terminal other than their new Terminal&#xA;that properly connected box characters.&lt;/p&gt;&#xA;&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;quote&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;side&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;│&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;style&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;bg&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;default&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;fg&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;#aaa&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;top_corner&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;╭&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;bottom_corner&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;╰&amp;#39;&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;add-author&#34;&gt;Add Author &lt;a href=&#34;#add-author&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Adding author to the root of the frontmatter of the document will add it to the bottom left of the slides.&lt;/p&gt;&#xA;&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;author&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;@_waylonwalker&amp;#39;&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/57ccd02f-2ebf-4798-9147-173add8a65d1.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;lookatme slides with author defined&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/57ccd02f-2ebf-4798-9147-173add8a65d1.webp&#34; alt=&#34;lookatme slides with author defined&#34;/ data-glightbox=&#34;description: lookatme slides with author defined&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;style-the-author&#34;&gt;Style the author &lt;a href=&#34;#style-the-author&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;We can style the foreground and background of this text by adding something&#xA;like this to the styles section of the frontmatter.&lt;/p&gt;&#xA;&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;author&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;bg&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;default&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;fg&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;#368ce2&amp;#39;&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;the-rest-of-the-footer&#34;&gt;The rest of the footer &lt;a href=&#34;#the-rest-of-the-footer&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;While we are at it, lets style the rest of the footer to my own theme.  Let’s pop this into the style and see what it looks like.&lt;/p&gt;&#xA;&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;date&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;bg&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;default&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;fg&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;#368ce2&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;nt&#34;&gt;slides&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;bg&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;default&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;fg&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;#368ce2&amp;#39;&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/cb900d89-f124-428b-9625-d1600423ea42.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;lookatme slides with author styled&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/cb900d89-f124-428b-9625-d1600423ea42.webp&#34; alt=&#34;lookatme slides with author styled&#34;/ data-glightbox=&#34;description: lookatme slides with author styled&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;reduce-the-padding&#34;&gt;reduce the padding &lt;a href=&#34;#reduce-the-padding&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When I am presenting I am punched in as big as I can go, and which makes&#xA;the padding massive.  I want as much as the screen real estate devoted to&#xA;making big readable text as I can.&lt;/p&gt;&#xA;&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;padding&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;bottom&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;0&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;left&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;0&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;right&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;0&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;top&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;0&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/88083684-61a3-4070-80e8-7a357442daa7.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;lookatme slides with no more padding&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/88083684-61a3-4070-80e8-7a357442daa7.webp&#34; alt=&#34;lookatme slides with no more padding&#34;/ data-glightbox=&#34;description: lookatme slides with no more padding&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;final-results&#34;&gt;final results &lt;a href=&#34;#final-results&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is what the final frontmatter looks like to fully style my talk.&lt;/p&gt;&#xA;&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;nn&#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;nt&#34;&gt;date&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;ld&#34;&gt;2022-03-24&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;nt&#34;&gt;templateKey&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;til&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;nt&#34;&gt;title&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;Style Lookatme Slides a bit more Personal&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;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;python&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;cli&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;python&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;nt&#34;&gt;author&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;@_waylonwalker&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;nt&#34;&gt;styles&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;padding&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;bottom&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;0&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;left&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;0&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;right&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;0&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;top&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;0&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;title&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;bg&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;default&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;fg&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;#e1af66&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;date&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;bg&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;default&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;fg&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;#368ce2&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;slides&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;bg&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;default&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;fg&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;#368ce2&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;headings&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;&amp;#39;1&amp;#39;&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;bg&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;default&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;fg&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;#ff66c4,bold,italics&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;prefix&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; ⇁ &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;suffix&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; ↽ &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;quote&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;side&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;│&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;style&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;bg&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;default&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;fg&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;#aaa&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;top_corner&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;╭&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;bottom_corner&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;╰&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;author&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;bg&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;default&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;fg&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;#368ce2&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;nn&#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>How I Present Markdown Slides from the Terminal</title>
    <id>https://new.waylonwalker.com/lookatme-slides/</id>
    <updated>2022-03-21T16:13:39Z</updated>
    <published>2022-03-21T16:13:39Z</published>
    <link href="https://new.waylonwalker.com/lookatme-slides/" rel="alternate" type="text/html"></link>
    <summary type="text">I love the freedom of writing in markdown. It allows me to write content from the comfort of my editor with very little focus on page style. It turns out...</summary>
    <content type="html">&lt;p&gt;I love the freedom of writing in markdown.  It allows me to write content from&#xA;the comfort of my editor with very little focus on page style.  It turns out&#xA;that markdown is also a fantastic tool for creating slides.&lt;/p&gt;&#xA;&lt;h2 id=&#34;present-from-the-terminal&#34;&gt;Present from the terminal &lt;a href=&#34;#present-from-the-terminal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I will most often just present right from the terminal using&#xA;&lt;a href=&#34;https://lookatme.readthedocs.io/en/latest/index.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/lookatme.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/lookatme.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;lookatme&lt;/a&gt;.  Presenting&#xA;from the terminal lets me see the results quick right from where I am editing.&#xA;It also allows me to pop into other terminal applications quickly.&lt;/p&gt;&#xA;&lt;h2 id=&#34;revealjs&#34;&gt;reveal.js &lt;a href=&#34;#revealjs&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I sometimes also use reveal.js, but that’s for another post.  It is handy that&#xA;it lives in the browser and is easier to share.&lt;/p&gt;&#xA;&lt;h2 id=&#34;new-slides&#34;&gt;New Slides &lt;a href=&#34;#new-slides&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I leverage auto slides when I write my slides in markdown.  The largest&#xA;heading, usually an h2 for me, becomes the new slide marker.  Otherwise my&#xA;process is not much different, It just becomes a shorter writing style.&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;lookatme is a python library that is available on pypi, you can install it with&#xA;the pip command.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;python -m pip install lookatme&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Since it’s a command line application it works great with pipx.  This prevents&#xA;the need to manage virtual environments yourself or ending up with packages&#xA;clashing in your system python environment.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;pipx install lookatme&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;from-my-terminal&#34;&gt;From my terminal &lt;a href=&#34;#from-my-terminal&#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;lookatme &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;filepath&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;I just run 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;pipx run &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; --spec git+https://github.com/waylonwalker/lookatme &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; lookatme &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;filepath&lt;span class=&#34;o&#34;&gt;}&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; --live-reload &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; --style gruvbox-dark&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;Note, I use a custom fork of lookatme.  It’s schema validation did not like&#xA;the date format of my blog posts, so I have a one line fix built into my&#xA;fork that is pretty specific to me.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;from-neovim&#34;&gt;From Neovim &lt;a href=&#34;#from-neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;most often what I do&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;From Neovim I use a plugin I created for sending out commands to tmux called&#xA;&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;telegraph&lt;/a&gt;.  This sends the&#xA;above command to a new session that I can bounce between 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;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 --spec git+https://github.com/waylonwalker/lookatme 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;/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>Set Your Git Pager Config</title>
    <id>https://new.waylonwalker.com/git-pager/</id>
    <updated>2022-03-16T14:03:18Z</updated>
    <published>2022-03-16T14:03:18Z</published>
    <link href="https://new.waylonwalker.com/git-pager/" rel="alternate" type="text/html"></link>
    <summary type="text">Setting up your git pager to your liking can help you navigate diffs and logs much more efficiently. You can set it to whatever pager you like so that your...</summary>
    <content type="html">&lt;p&gt;Setting up 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; pager to your liking can help you navigate diffs and logs&#xA;much more efficiently.  You can set it to whatever pager you like so that your&#xA;keys feel nice and smooth and your fingers know exactly what to do.  You might&#xA;even gain a few extra features.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-the-pager&#34;&gt;Setting the pager &lt;a href=&#34;#setting-the-pager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can set the pager right from your command line 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;git config --global core.pager &lt;span class=&#34;s1&#34;&gt;&amp;#39;more&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You can also set your pager by editing your global &lt;code&gt;.gitconfig&lt;/code&gt; file which by&#xA;default is set to &lt;code&gt;~/.gitconfig&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;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;    &lt;span class=&#34;nv&#34;&gt;pager&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; more&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;color&#34;&gt;Color &lt;a href=&#34;#color&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;In my experience you need to turn colors off with nvim.  bat handles them and&#xA;looks good either way, but nvim will be plain white and display the color&#xA;codes as plain text if color is 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;git config --global color.pager no&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;pagers-i-have-tried&#34;&gt;Pagers I have tried &lt;a href=&#34;#pagers-i-have-tried&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are some various configs that I tried.  For some reason line numbers in&#xA;bat really bothered me, but when in nvim they felt ok.  I am going to try&#xA;running both of them for a few days and see which I like better.  I think&#xA;having some of my nvim config could be really handy for things like yanking a&#xA;commit hash to the system clipboard without touching the mouse.&lt;/p&gt;&#xA;&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;# 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;git config --global core.pager &lt;span class=&#34;s1&#34;&gt;&amp;#39;bat&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;# nvim in read only 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;git config --global core.pager &lt;span class=&#34;s1&#34;&gt;&amp;#39;nvim -R&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;# turn colors off&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 color.pager 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;# bat with no line numbers&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 core.pager &lt;span class=&#34;s1&#34;&gt;&amp;#39;bat --style=plain&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;# nvim with no line numbers and a specific rc 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;git config --global core.pager &lt;span class=&#34;s2&#34;&gt;&amp;#34;nvim -R +&amp;#39;set nonumber norelativenumber&amp;#39; -u ~/.config/nvim/init-git.vim&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;reset-back-to-the-default&#34;&gt;reset back to the default &lt;a href=&#34;#reset-back-to-the-default&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you are afraid to try one of these settings, don’t be you can always change&#xA;it back.  If you tried one and dont like it just &lt;code&gt;--unset&lt;/code&gt; the config that you&#xA;just tried.&lt;/p&gt;&#xA;&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 core.pager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global --unset color.pager&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The other option you have is to open your &lt;code&gt;.gitconfig&lt;/code&gt; file and delete the&#xA;lines of config that set your pager.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Configure Git to Autocorrect Your Fat Fingers</title>
    <id>https://new.waylonwalker.com/git-config-help-autocorrect/</id>
    <updated>2022-03-15T00:43:25Z</updated>
    <published>2022-03-15T00:43:25Z</published>
    <link href="https://new.waylonwalker.com/git-config-help-autocorrect/" rel="alternate" type="text/html"></link>
    <summary type="text">If you have ever mistyped a git command very close to an existing one you have likely seen this message.</summary>
    <content type="html">&lt;p&gt;If you have ever mistyped 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; command very close to an existing one&#xA;you have likely seen this message.&lt;/p&gt;&#xA;&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 chekout dev&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git: &lt;span class=&#34;s1&#34;&gt;&amp;#39;chekout&amp;#39;&lt;/span&gt; is not a git command. See &lt;span class=&#34;s1&#34;&gt;&amp;#39;git --help&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;The most similar &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; is&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        checkout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;automatically-run-the-right-one&#34;&gt;Automatically run the right one &lt;a href=&#34;#automatically-run-the-right-one&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What you might not have known is that you can configure git to just run&#xA;this command for you.&lt;/p&gt;&#xA;&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;# Gives you 0.1 seconds to respond&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 help.autocorrect &lt;span class=&#34;m&#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;&#xA;&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;# Gives you 1 seconds to respond&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 help.autocorrect &lt;span class=&#34;m&#34;&gt;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;&#xA;&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;# Gives you 5 seconds to respond&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 help.autocorrect &lt;span class=&#34;m&#34;&gt;50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;fat-fingers-gone&#34;&gt;Fat Fingers Gone &lt;a href=&#34;#fat-fingers-gone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Now when you typo a git command it will autmatically run after the&#xA;configured number of tenths of a second.&lt;/p&gt;&#xA;&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 chkout get-error&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;WARNING: You called a Git &lt;span class=&#34;nb&#34;&gt;command&lt;/span&gt; named &lt;span class=&#34;s1&#34;&gt;&amp;#39;chkout&amp;#39;&lt;/span&gt;, which does not exist.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Continuing in 1.0 seconds, assuming that you meant &lt;span class=&#34;s1&#34;&gt;&amp;#39;checkout&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;M       pages/blog/how-i-deploy-2021.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       pages/hot_tips/001.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       pages/templates/gratitude_card.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       plugins/index.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       plugins/publish_amp.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       plugins/render_template_variables.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       plugins/youtube.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       requirements.txt&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;M       static/index.html&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Switched to branch &lt;span class=&#34;s1&#34;&gt;&amp;#39;get-error&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;my-config&#34;&gt;My config &lt;a href=&#34;#my-config&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I’m rocking 10 for now just to see how I feel about it, but honestly I&#xA;cannot think of a time that I have seen the original warning that was&#xA;not what I wanted.  This at least gives me some time to respond if I am&#xA;unsure.&lt;/p&gt;&#xA;&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 help.autocorrect &lt;span class=&#34;m&#34;&gt;10&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>Install yq | A light weight yaml parser cli</title>
    <id>https://new.waylonwalker.com/install-yq/</id>
    <updated>2022-03-14T18:30:12Z</updated>
    <published>2022-03-14T18:30:12Z</published>
    <link href="https://new.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;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>Make Kedro Runs Beautiful</title>
    <id>https://new.waylonwalker.com/kedro-rich/</id>
    <updated>2022-03-11T13:14:51Z</updated>
    <published>2022-03-11T13:14:51Z</published>
    <link href="https://new.waylonwalker.com/kedro-rich/" rel="alternate" type="text/html"></link>
    <summary type="text">Kedro rich is a very new and unstable (it&#39;s good, just not ready) plugin for kedro to make the command line prettier.</summary>
    <content type="html">&lt;p&gt;Kedro rich is a very new and unstable (it’s good, just not ready) plugin for&#xA;kedro to make the command line prettier.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install-kedro-rich&#34;&gt;Install kedro rich &lt;a href=&#34;#install-kedro-rich&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;There is no pypi package yet, but it’s on github.  You can pip install it with&#xA;the &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; url.&lt;/p&gt;&#xA;&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 git+https://github.com/datajoely/kedro-rich&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;kedro-run&#34;&gt;Kedro run &lt;a href=&#34;#kedro-run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You can run your pipeline just as you normally would, except you get progress&#xA;bars and pretty prints.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;kedro run&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fc807030-c03e-42e7-a721-f7787589c85a.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;kedro rich pretty run&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/fc807030-c03e-42e7-a721-f7787589c85a.webp&#34; alt=&#34;kedro rich pretty run&#34;/ data-glightbox=&#34;description: kedro rich pretty run&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;kedro-catalog&#34;&gt;Kedro catalog &lt;a href=&#34;#kedro-catalog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Listing out catalog entries from the command line now print out a nice pretty&#xA;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;kedro catalog 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/file/f254966b-c8e3-479d-b9df-130dfdc4e46f.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;kedro rich catalog list table output&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/f254966b-c8e3-479d-b9df-130dfdc4e46f.webp&#34; alt=&#34;kedro rich catalog list table output&#34;/ data-glightbox=&#34;description: kedro rich catalog list table output&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&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;Go to the &lt;a href=&#34;https://github.com/datajoely/kedro-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;GitHub repo&lt;/a&gt; and give it a&#xA;star, Joel deserves it.&lt;/p&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://new.waylonwalker.com/git-checkout-worktree/</id>
    <updated>2022-03-10T19:19:34Z</updated>
    <published>2022-03-10T19:19:34Z</published>
    <link href="https://new.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>Open Files with Nvim Remote</title>
    <id>https://new.waylonwalker.com/nvr-open-files/</id>
    <updated>2022-03-06T16:22:49Z</updated>
    <published>2022-03-06T16:22:49Z</published>
    <link href="https://new.waylonwalker.com/nvr-open-files/" rel="alternate" type="text/html"></link>
    <summary type="text">I recently found a really great plugin by mhinz to open files in neovim from a different tmux split, without touching neovim at all.</summary>
    <content type="html">&lt;p&gt;I recently found a really great &lt;a href=&#34;https://github.com/mhinz/neovim-remote&#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;plugin&lt;/a&gt; by&#xA;&lt;a href=&#34;https://github.com/mhinz&#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;mhinz&lt;/a&gt; to open files in neovim from a&#xA;different tmux split, without touching neovim at all.&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;&lt;a href=&#34;https://github.com/mhinz/neovim-remote&#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-remote&lt;/a&gt; is not a neovim&#xA;plugin at all, it’s a python cli that you can install with pip.  Unlike&#xA;the repo suggests, I use pipx to install &lt;code&gt;nvr&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;pipx install neovim-remote&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;how-i-use-it&#34;&gt;How I use it &lt;a href=&#34;#how-i-use-it&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have this added to my &lt;code&gt;.envrc&lt;/code&gt; that is in every one of my projects.&#xA;This will tie a neovim session to that directory, and all directories&#xA;under 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;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;NVIM_LISTEN_ADDRESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/tmp/nvim-&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;basename &lt;span class=&#34;nv&#34;&gt;$PWD&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;blockquote&gt;&#xA;&lt;p&gt;In my workflow I open a tmux session for each project, so this&#xA;essentially ties a neovim session to a tmux session.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h3 id=&#34;open-neovim&#34;&gt;Open neovim &lt;a href=&#34;#open-neovim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;First open neovim, but with the &lt;code&gt;nvr&lt;/code&gt; command.  This will open neovim,&#xA;and look pretty much the same as always.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you try to run &lt;code&gt;nvr&lt;/code&gt; again in another shell nothing will happen as&#xA;its already runnin under that address, but if you give it a filename it&#xA;will open the file in the first instance of neovim that you opened.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvr readme.md&#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://github.com/mhinz/neovim-remote&#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&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>Dedupe your shell paths</title>
    <id>https://new.waylonwalker.com/dedupe-your-shell-paths/</id>
    <updated>2022-03-04T19:08:49Z</updated>
    <published>2022-03-04T19:08:49Z</published>
    <link href="https://new.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://new.waylonwalker.com/bash-mktemp/</id>
    <updated>2022-03-02T14:52:08Z</updated>
    <published>2022-03-02T14:52:08Z</published>
    <link href="https://new.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://new.waylonwalker.com/git-recover-checkout/</id>
    <updated>2022-03-01T14:34:01Z</updated>
    <published>2022-03-01T14:34:01Z</published>
    <link href="https://new.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>Textual Popup Hack</title>
    <id>https://new.waylonwalker.com/textual-popup-hack/</id>
    <updated>2022-02-26T15:41:12Z</updated>
    <published>2022-02-26T15:41:12Z</published>
    <link href="https://new.waylonwalker.com/textual-popup-hack/" rel="alternate" type="text/html"></link>
    <summary type="text">As I am toying around with textual, I am wanting some popup user input to take over. Textual is still pretty new and likely to change quite significantly, so...</summary>
    <content type="html">&lt;p&gt;As I am toying around with textual, I am wanting some popup user input&#xA;to take over.  Textual is still pretty new and likely to change quite&#xA;significantly, so I don’t want to overdo the work I put into it, So for&#xA;now on my personal tuis I am going to shell out to tmux.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-problem&#34;&gt;The Problem &lt;a href=&#34;#the-problem&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The main issue is that when you are in a textual app, it kinda owns the&#xA;input.  So if you try to run another python function that calls for&#xA;&lt;code&gt;input&lt;/code&gt; it just cant get there.  There is a&#xA;&lt;a href=&#34;https://github.com/sirfuzzalot/textual-inputs&#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;textual-inputs&lt;/a&gt; library&#xA;that covers this, and it might work really well for some use cases, but&#xA;many of my use cases have been for things that are pre-built like&#xA;copier, and I am trying to throw something together quick.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;textual is still very beta&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Part of this comes down to the fact that textual is still very beta and&#xA;likely to change a lot, so all of the work I have done with it is for&#xA;quick and dirty, or fun side projects.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-solution&#34;&gt;The Solution &lt;a href=&#34;#the-solution&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;So the solution that was easiest for me… shell out to a tmux popup.&#xA;The application I am working on wants to create new documents using&#xA;copier templates.  copier has a fantastic cli that walks throught he&#xA;template variables and asks the user to fill them in, so I just shell&#xA;out to that with &lt;code&gt;Popen&lt;/code&gt;.  Make sure that you wait for this process to&#xA;finish otherwise there will be bit of jank in your textual app.&lt;/p&gt;&#xA;&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;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;action_new_post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&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;proc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Popen&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;s1&#34;&gt;&amp;#39;tmux popup &amp;#34;copier copy plugins/todo-template tasks&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;shell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;kc&#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;    &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;proc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wait&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;example&#34;&gt;example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is what the running todo application looks like with the copier&#xA;popup over it.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/87d0b679-df6f-40df-b0f4-666608d254ec.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;example of the popup running over textual&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/87d0b679-df6f-40df-b0f4-666608d254ec.webp&#34; alt=&#34;example of the popup running over textual&#34;/ data-glightbox=&#34;description: example of the popup running over textual&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-07-14&#34; data-description=&#34;https://youtu.be/2I8fB28zfB4&#34; data-title=&#34;tmux popups&#34; href=&#34;/tmux-popups/&#34; data-preview=&#34;https://youtu.be/2I8fB28zfB4&#34;&gt;tmux popups&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;a bit more on tmux-popus [here] &lt;a href=&#34;https://waylonwalker.com/tmux-popups/&#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;https://waylonwalker.com/tmux-popups/&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;/blockquote&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/Textualize/textual/&#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;textual repo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://github.com/sirfuzzalot/textual-inputs&#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;textual-inputs repo&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://waylonwalker.com/tmux-popups/&#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;my article on tmux popups&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 rebase to the beginning of time</title>
    <id>https://new.waylonwalker.com/git-rebase-root/</id>
    <updated>2022-02-23T15:57:37Z</updated>
    <published>2022-02-23T15:57:37Z</published>
    <link href="https://new.waylonwalker.com/git-rebase-root/" rel="alternate" type="text/html"></link>
    <summary type="text">Git has a built in way to rebase all the way back to the beginning of time. There is no need to scroll through the log to find the first hash, or find the...</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; has a built in way to rebase all the way back to the beginning of&#xA;time.  There is no need to scroll through the log to find the first&#xA;hash, or find the total number of commits. Just use &lt;code&gt;--root&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 rebase --root&#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>Revive files from the dead with git</title>
    <id>https://new.waylonwalker.com/git-revive-dead-files/</id>
    <updated>2022-02-21T15:44:02Z</updated>
    <published>2022-02-21T15:44:02Z</published>
    <link href="https://new.waylonwalker.com/git-revive-dead-files/" rel="alternate" type="text/html"></link>
    <summary type="text">Git reflog can perform some serious magic in reviving your hard work from the dead if you happen to loose it.</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; reflog can perform some serious magic in reviving your hard work&#xA;from the dead if you happen to loose it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;caveat&#34;&gt;caveat &lt;a href=&#34;#caveat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;You must git commit!  If you never commit the file, git cannot help you.&#xA;You might look into your trashcan, filesystem versions, onedrive, box, dropbox.&#xA;If you have none of this, then you are probably hosed.&lt;/p&gt;&#xA;&lt;h2 id=&#34;practice&#34;&gt;practice &lt;a href=&#34;#practice&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I really like to practice these techniques before I need to use them so&#xA;that I understand how they work in a low stakes fashion.  This helps me&#xA;understand what I can and cannot do, and how to do it in a place that&#xA;does not matter in any way at all.&lt;/p&gt;&#xA;&lt;p&gt;This is what I did to revive a dropped &lt;code&gt;docker-compose.yml&lt;/code&gt; file.  The&#xA;idea is that if I can find the commit hash, I can &lt;code&gt;cherry-pick&lt;/code&gt; 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 init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add readme&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;touch docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add docker-compose&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 reset 3cfc --hard&#xA;&lt;/span&gt;&lt;/span&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;&lt;span class=&#34;c1&#34;&gt;# copy the hash of the commit with my docker-compose commit&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 cherry-pick fd74df3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;reflog&#34;&gt;reflog &lt;a href=&#34;#reflog&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here was the final reflog that shows all of my git actions.  &lt;strong&gt;note&lt;/strong&gt; I&#xA;did reset twice.&lt;/p&gt;&#xA;&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 --name-only&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0404b6a &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD -&amp;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;: cherry-pick: add docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: reset: moving to 3cfc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&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;9175695&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;: cherry-pick: add docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;3&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: reset: moving to 3cfc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd74df3 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;4&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: commit: add docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: reset: moving to HEAD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;6&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: commit &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;initial&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;: add readme&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.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>Git reflog is an alias for git log -g</title>
    <id>https://new.waylonwalker.com/git-reflog-is-an-alias/</id>
    <updated>2022-02-19T15:02:52Z</updated>
    <published>2022-02-19T15:02:52Z</published>
    <link href="https://new.waylonwalker.com/git-reflog-is-an-alias/" rel="alternate" type="text/html"></link>
    <summary type="text">Right inside the git docs, is states that the command runs by default which is an alias for</summary>
    <content type="html">&lt;p&gt;Right inside the &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; &lt;a href=&#34;https://git-scm.com/docs/git-reflog#_description&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/git-scm.com.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/git-scm.com.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;docs&lt;/a&gt;,&#xA;is states that the &lt;code&gt;git reflog&lt;/code&gt; command runs &lt;code&gt;git reflog show&lt;/code&gt; by default which&#xA;is an alias for &lt;code&gt;git log -g --abbrev-commit --pretty=oneline&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This epiphany deepens my understanding of git, and lets me understand that most&#xA;&lt;code&gt;git log&lt;/code&gt; flags might also work with &lt;code&gt;git log -g&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;full-or-short-format&#34;&gt;full or short format &lt;a href=&#34;#full-or-short-format&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here are some git commands for you to try out on your own that are all pretty&#xA;similar, but vary in how much information they show.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code class=&#34;language-stat&#34;&gt;# These show only first line of the commit message subject, the hash, and index&#xA;git reflog&#xA;git log -g --abbrev-commit --pretty=oneline&#xA;&#xA;# similar to git log, this is a fully featured log with author, date, and full&#xA;# commit message&#xA;git log -g&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;add-files&#34;&gt;add files &lt;a href=&#34;#add-files&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If I am looking for a missing file, I might want to leverage &lt;code&gt;--name-only&lt;/code&gt; or&#xA;&lt;code&gt;--stat&lt;/code&gt;, to see where I might have hard reset that file, or deleted it.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git reflog --stat&#xA;git log -g --stat --abbrev-commit --pretty=oneline&#xA;&#xA;git reflog --name-only&#xA;git log -g --name-only --abbrev-commit --pretty=oneline&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Here is an example where I lost my &lt;code&gt;docker-compose.yml&lt;/code&gt; file in a git reset,&#xA;and got it back by finding the commit hash with &lt;code&gt;git reflog&lt;/code&gt; and cherry picked&#xA;it 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 reflog --name-only&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0404b6a &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD -&amp;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;: cherry-pick: add docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;1&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: reset: moving to 3cfc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&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;9175695&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;: cherry-pick: add docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;3&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: reset: moving to 3cfc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fd74df3 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;4&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: commit: add docker-compose&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: reset: moving to HEAD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3cfcab9 HEAD@&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;6&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;: commit &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;initial&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;: add readme&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This just proves that its harder to remove something from git, than it is to&#xA;get it back.  It can feel impossible to get something back, but once its in, it&#xA;feels even more impossible to get it out.&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>View AWS event bridge rules with visidata</title>
    <id>https://new.waylonwalker.com/aws-eventbridge-visidata/</id>
    <updated>2022-02-15T03:04:26Z</updated>
    <published>2022-02-15T03:04:26Z</published>
    <link href="https://new.waylonwalker.com/aws-eventbridge-visidata/" rel="alternate" type="text/html"></link>
    <summary type="text">Reading eventbridge rules from the command line can be a total drag, pipe it into visidata to make it a breeze.</summary>
    <content type="html">&lt;p&gt;Reading eventbridge rules from the command line can be a total drag, pipe it&#xA;into visidata to make it a breeze.&lt;/p&gt;&#xA;&lt;p&gt;I just love when I start thinking through how to parse a bunch of json at the&#xA;command line, maybe building out my own custom cli, then the solution is as&#xA;simple as piping it into visidata.  Which is a fantastic tui application that&#xA;had a ton of vim-like keybindings and data features.&lt;/p&gt;&#xA;&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;alias&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;awsevents&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;aws&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;events&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rules&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visidata&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&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>Vim remaps use cmd in place of :</title>
    <id>https://new.waylonwalker.com/vim-cmd/</id>
    <updated>2022-02-14T14:53:17Z</updated>
    <published>2022-02-14T14:53:17Z</published>
    <link href="https://new.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>A better copy-mode bind for Tmux</title>
    <id>https://new.waylonwalker.com/tmux-copy-mode-binding/</id>
    <updated>2022-02-13T17:05:23Z</updated>
    <published>2022-02-13T17:05:23Z</published>
    <link href="https://new.waylonwalker.com/tmux-copy-mode-binding/" rel="alternate" type="text/html"></link>
    <summary type="text">The default keybinding for copy-mode is one that is just so awkward for me to hit that I end up not using it at all. I was on a call with my buddy Nic this...</summary>
    <content type="html">&lt;p&gt;The default keybinding for copy-mode &lt;code&gt;&amp;lt;prefix&amp;gt;-[&lt;/code&gt; is one that is just so&#xA;awkward for me to hit that I end up not using it at all.  I was on a&#xA;call with my buddy Nic this week and saw him just fluidly jump into&#xA;&lt;code&gt;copy-mode&lt;/code&gt; in an effortless fashion, so I had to ask him for his&#xA;keybinding and it just made sense. Enter, that’s it.  So I have addedt&#xA;his to my &lt;code&gt;~/.tmux.conf&lt;/code&gt; along with one for &lt;code&gt;alt-enter&lt;/code&gt; and have found&#xA;myself using it way more so far.&lt;/p&gt;&#xA;&lt;h2 id=&#34;setting-copy-mode-to-enter&#34;&gt;Setting copy-mode to enter &lt;a href=&#34;#setting-copy-mode-to-enter&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To do this I just popped open my &lt;code&gt;~/.tmux.conf&lt;/code&gt; and added the following.&#xA;Now I can get to &lt;code&gt;copy-mode&lt;/code&gt; with &lt;code&gt;&amp;lt;prefix&amp;gt;-Enter&lt;/code&gt; which is &lt;code&gt;control-b Enter&lt;/code&gt;, or &lt;code&gt;alt-enter&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; Enter copy-mode&#xA;&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-Enter copy-mode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;more-on-copy-mode&#34;&gt;More on copy-mode &lt;a href=&#34;#more-on-copy-mode&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I have a full video on copy-mode you can find here.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-07-28&#34; data-description=&#34;https://youtu.be/-ypY_-VmBKk&#34; data-title=&#34;tmux copy-mode&#34; href=&#34;/tmux-copy-mode/&#34; data-preview=&#34;https://youtu.be/-ypY_-VmBKk&#34;&gt;tmux copy-mode&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>ag silver searcher look ahead and look behind</title>
    <id>https://new.waylonwalker.com/ag-ahead/</id>
    <updated>2022-02-08T13:54:08Z</updated>
    <published>2022-02-08T13:54:08Z</published>
    <link href="https://new.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>Neovim Config for Git</title>
    <id>https://new.waylonwalker.com/neovim-config-for-git/</id>
    <updated>2022-02-04T14:23:57Z</updated>
    <published>2022-02-04T14:23:57Z</published>
    <link href="https://new.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://new.waylonwalker.com/stow-simulate/</id>
    <updated>2022-01-30T20:28:17Z</updated>
    <published>2022-01-30T20:28:17Z</published>
    <link href="https://new.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>Squoosh cli</title>
    <id>https://new.waylonwalker.com/squoosh-cli/</id>
    <updated>2022-01-29T04:54:50Z</updated>
    <published>2022-01-29T04:54:50Z</published>
    <link href="https://new.waylonwalker.com/squoosh-cli/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I discovered a sweet new cli for compressing images. squoosh cli is a wasm powered cli that supports a bunch of formats that I would want to convert my...</summary>
    <content type="html">&lt;p&gt;Today I discovered a sweet new cli for compressing images.&#xA;&lt;a href=&#34;https://github.com/GoogleChromeLabs/squoosh/tree/dev/cli&#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;squoosh cli&lt;/a&gt;&#xA;is a wasm powered cli that supports a bunch of formats that I would want to&#xA;convert my website images to.&lt;/p&gt;&#xA;&lt;div class=&#34;admonition note&#34;&gt;&#xA;&lt;p class=&#34;admonition-title&#34;&gt;from the future&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;  &amp;gt; Unfortunately, due to a few people leaving the team, and staffing issues&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;resulting from the current economic climate (ugh), I’m deprecating the&#xA;CLI and libsquoosh parts of Squoosh. The web app will continue to be&#xA;supported and improved. I know that sucks, but there simply isn’t the&#xA;time &amp;amp; people to work on this. If anyone from the community wants to fork&#xA;it, you have my blessing.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/GoogleChromeLabs/squoosh/pull/1321&#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/GoogleChromeLabs/squoosh/pull/1321&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;h2 id=&#34;web-app&#34;&gt;Web App &lt;a href=&#34;#web-app&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;First the main feature of squoosh is a &lt;a href=&#34;https://squoosh.app&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/squoosh.app.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/squoosh.app.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;web app&lt;/a&gt; that&#xA;makes your images smaller right in the browser, using the same wasm.  It’s&#xA;sweet!  There is a really cool swiper to compare the output image with the&#xA;original, and graphical dials to change your settings.&lt;/p&gt;&#xA;&lt;h2 id=&#34;cli&#34;&gt;CLI &lt;a href=&#34;#cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What is even cooler is that once you have settings you are happy with and are&#xA;really cutting down those kb’s on your images, there is a copy cli command&#xA;button!  If you have npx (which you should if you have nodejs and npm) already&#xA;installed it just works without installing anything more.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/981207ae-3e55-49e7-8c18-8cb84b860c37.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;The button on squoosh.app&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/981207ae-3e55-49e7-8c18-8cb84b860c37.webp&#34; alt=&#34;The button on squoosh.app&#34;/ data-glightbox=&#34;description: The button on squoosh.app&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;converting-all-of-my-pngs-to-webp&#34;&gt;Converting all of my png’s to webp &lt;a href=&#34;#converting-all-of-my-pngs-to-webp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I copied the command that it gave me for converting to webp, and set it up to&#xA;run on all of my pngs.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;npx @squoosh/cli --webp \&#xA;  &amp;#39;{&amp;#34;quality&amp;#34;:75 \&#xA;    &amp;#34;target_size&amp;#34;:0 \&#xA;    &amp;#34;target_PSNR&amp;#34;:0 \&#xA;    &amp;#34;method&amp;#34;:4 \&#xA;    &amp;#34;sns_strength&amp;#34;:50 \&#xA;    &amp;#34;filter_strength&amp;#34;:60 \&#xA;    &amp;#34;filter_sharpness&amp;#34;:0 \&#xA;    &amp;#34;filter_type&amp;#34;:1 \&#xA;    &amp;#34;partitions&amp;#34;:0 \&#xA;    &amp;#34;segments&amp;#34;:4 \&#xA;    &amp;#34;pass&amp;#34;:1 \&#xA;    &amp;#34;show_compressed&amp;#34;:0 \&#xA;    &amp;#34;preprocessing&amp;#34;:0 \&#xA;    &amp;#34;autofilter&amp;#34;:0 \&#xA;    &amp;#34;partition_limit&amp;#34;:0 \&#xA;    &amp;#34;alpha_compression&amp;#34;:1 \&#xA;    &amp;#34;alpha_filtering&amp;#34;:1 \&#xA;    &amp;#34;alpha_quality&amp;#34;:100 \&#xA;    &amp;#34;lossless&amp;#34;:0 \&#xA;    &amp;#34;exact&amp;#34;:0 \&#xA;    &amp;#34;image_hint&amp;#34;:0 \&#xA;    &amp;#34;emulate_jpeg_size&amp;#34;:0 \&#xA;    &amp;#34;thread_level&amp;#34;:0 \&#xA;    &amp;#34;low_memory&amp;#34;:0 \&#xA;    &amp;#34;near_lossless&amp;#34;:100 \&#xA;    &amp;#34;use_delta_palette&amp;#34;:0 \&#xA;    &amp;#34;use_sharp_yuv&amp;#34;:0 \&#xA;    }&amp;#39; \&#xA;    static/*.png -d squoosh-webp&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;I opened my images repo and converted all pngs to webp using the command above.&#xA;I got 94% compression on my existing pngs without resizing anything.  This is&#xA;dang impressive, and not too hard to do.  I do want to refactor my images site&#xA;at some point and include this as part of the ci system.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/1a8fc543-513e-44fa-ba7c-c7916950496e.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;resulting file sizes for converting png to wepb.&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/1a8fc543-513e-44fa-ba7c-c7916950496e.webp&#34; alt=&#34;resulting file sizes for converting png to wepb.&#34;/ data-glightbox=&#34;description: resulting file sizes for converting png to wepb.&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;I also converted to avif, but it sent all my cpus to 100 for quite awhile, for&#xA;only another 2MB total.  Not sure if its worth it or not.&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 and Vim Clipboard for Ubuntu</title>
    <id>https://new.waylonwalker.com/ubuntu-terminal-clipboard/</id>
    <updated>2022-01-26T02:50:56Z</updated>
    <published>2022-01-26T02:50:56Z</published>
    <link href="https://new.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>nix rescues modded minecraft night</title>
    <id>https://new.waylonwalker.com/nix-install-java8/</id>
    <updated>2022-01-25T03:07:39Z</updated>
    <published>2022-01-25T03:07:39Z</published>
    <link href="https://new.waylonwalker.com/nix-install-java8/" rel="alternate" type="text/html"></link>
    <summary type="text">With the latest version of minecraft it requires a very new, possibly the latest, version of java. Lately we have been getting into modded minecraft and I...</summary>
    <content type="html">&lt;p&gt;With the latest version of minecraft it requires a very new, possibly&#xA;the latest, version of java.  Lately we have been getting into modded&#xA;minecraft and I maintain the server for us.  It’s been tricky to say the&#xA;least.  One hurdle I recently hit involves having the wrong version of&#xA;java.&lt;/p&gt;&#xA;&lt;p&gt;I was getting this error trying to get a 1.12.2 forge server running.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Caused by: java.lang.ClassCastException: class jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to class java.net.URLClassLoader (jdk.internal.loader.ClassLoaders$AppClassLoader and java.net.URLClassLoader are in module java.base of loader ‘bootstrap’)&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;In researching our errors, I found this on a forum.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Pre-1.13 Forge only works with Java 8.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;I don’t write java, or really know how to manage different versions of&#xA;java, but I have nixpkgs installed and it has a ton of odd stuff like&#xA;this readily available, so&#xA;&lt;a href=&#34;https://search.nixos.org/packages?channel=21.05&amp;amp;show=jdk8&amp;amp;from=0&amp;amp;size=50&amp;amp;sort=relevance&amp;amp;type=packages&amp;amp;query=java+8&#34;&gt;searching nixpkgs&lt;/a&gt;&#xA;landed me with 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;nix-env -iA nixpkgs.jdk8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;once I had this installed I then just changed out java for the full path&#xA;to my new nixpkgs.jdk8 java and it 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;/home/walkers/.nix-profile/bin/java -server -Xms&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MIN_RAM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -Xmx&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MAX_RAM&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;JAVA_PARAMETERS&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; -jar &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SERVER_JAR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; nogui&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I don’t write java or do anything other than host minecraft servers wtih&#xA;it.  There is probably a better way of maintaining java versions than&#xA;this, but this worked for me.&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 hotkey for copier templates</title>
    <id>https://new.waylonwalker.com/tmux-copier-templates/</id>
    <updated>2022-01-24T02:22:53Z</updated>
    <published>2022-01-24T02:22:53Z</published>
    <link href="https://new.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://dropper.waylonwalker.com/file/5e97af0a-f305-4480-b1bf-51c7fd33286c.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;this is what it looks like when I open my copier templates popup&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/5e97af0a-f305-4480-b1bf-51c7fd33286c.webp&#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>Markata Filters as Telescope Pickers in Neovim</title>
    <id>https://new.waylonwalker.com/markata-telescope-picker/</id>
    <updated>2022-01-23T04:52:20Z</updated>
    <published>2022-01-23T04:52:20Z</published>
    <link href="https://new.waylonwalker.com/markata-telescope-picker/" rel="alternate" type="text/html"></link>
    <summary type="text">I often pop into my blog from neovim with the intent to look at just a single series of posts, , , or just see todays posts. Markata has a great way of...</summary>
    <content type="html">&lt;p&gt;I often pop into my blog from neovim with the intent to look at just a&#xA;single series of posts, &lt;code&gt;til&lt;/code&gt;, &lt;code&gt;gratitude&lt;/code&gt;, or just see todays posts.&#xA;&lt;a href=&#34;https://markata.dev/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/markata.dev.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/markata.dev.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Markata&lt;/a&gt; has a great way of mapping over posts&#xA;and returning their path that is designe exactly for this use case.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/file/3be6dada-a62d-4710-82b8-8a2c195cd36b.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Markata listing out posts from the command line&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/file/3be6dada-a62d-4710-82b8-8a2c195cd36b.webp&#34; alt=&#34;Markata listing out posts from the command line&#34; class=&#34;wide glightbox&#34;/ data-glightbox=&#34;description: Markata listing out posts from the command line&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;To tie these into a Telescope picker you add the command as the&#xA;find_command, and comma separate the words of the command, with no&#xA;spaces.  I did also &lt;code&gt;--sort,date,--reverse&lt;/code&gt; in there so that the newest&#xA;posts are closest to the cursor.&lt;/p&gt;&#xA;&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;nnoremap&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Telescope&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_files&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;list&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;nb&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&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;nb&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;today&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cr&lt;/span&gt;&lt;span class=&#34;o&#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;&lt;span class=&#34;n&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geil&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Telescope&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_files&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;list&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;nb&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&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;nb&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templateKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;til&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;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&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;reverse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cr&lt;/span&gt;&lt;span class=&#34;o&#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;&lt;span class=&#34;n&#34;&gt;nnoremap&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;geig&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cmd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Telescope&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_files&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;markata&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;list&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;nb&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&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;nb&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;templateKey&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;gratitude&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;sort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;date&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;reverse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;NOTE telescope treates each word as a string, do not wrap an extra&#xA;layer of quotes around your words, it gets messy.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://dropper.waylonwalker.com/file/9bbbc269-d5c3-48c9-9ac9-730002e8b2b1.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;using this picker in neovim&#34;&gt;&lt;img src=&#34;https://dropper.waylonwalker.com/file/9bbbc269-d5c3-48c9-9ac9-730002e8b2b1.webp&#34; alt=&#34;using this picker in neovim&#34; class=&#34;wide glightbox&#34;/ data-glightbox=&#34;description: using this picker in neovim&#34;&gt;&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>Copier Tasks | Python templating post run task</title>
    <id>https://new.waylonwalker.com/copier-tasks/</id>
    <updated>2022-01-22T04:49:12Z</updated>
    <published>2022-01-22T04:49:12Z</published>
    <link href="https://new.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;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;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;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;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://new.waylonwalker.com/fzf-wallpaper/</id>
    <updated>2022-01-19T01:17:26Z</updated>
    <published>2022-01-19T01:17:26Z</published>
    <link href="https://new.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://new.waylonwalker.com/convert-markdown-pdf-linux/</id>
    <updated>2022-01-12T03:25:36Z</updated>
    <published>2022-01-12T03:25:36Z</published>
    <link href="https://new.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;  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;  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;  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;  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;  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;  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://dropper.waylonwalker.com/file/c367ae8a-5626-4cf6-9aec-070cbf054f46.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;results of converting this post to a pdf&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/c367ae8a-5626-4cf6-9aec-070cbf054f46.webp&#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;figcaption&gt;&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;&lt;/figcaption&gt;&lt;/figure&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://new.waylonwalker.com/installing-pipx-on-ubuntu/</id>
    <updated>2022-01-10T23:14:05Z</updated>
    <published>2022-01-10T23:14:05Z</published>
    <link href="https://new.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;      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;      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;      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;      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://dropper.waylonwalker.com/file/d5be8d62-7355-48a6-9d9d-294223c04077.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;installation video&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/d5be8d62-7355-48a6-9d9d-294223c04077.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/d5be8d62-7355-48a6-9d9d-294223c04077.mp4&#34; type=&#34;video/mp4&#34;&gt;installation video&lt;/video&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://new.waylonwalker.com/2-minutes-to-stow/</id>
    <updated>2022-01-09T00:33:58Z</updated>
    <published>2022-01-09T00:33:58Z</published>
    <link href="https://new.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://new.waylonwalker.com/copier-answers/</id>
    <updated>2022-01-08T01:16:52Z</updated>
    <published>2022-01-08T01:16:52Z</published>
    <link href="https://new.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;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;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;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;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;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;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;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;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;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;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;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;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>Making a Textual Widget from a Rich Renderable</title>
    <id>https://new.waylonwalker.com/simple-textual-widget/</id>
    <updated>2022-01-07T03:25:36Z</updated>
    <published>2022-01-07T03:25:36Z</published>
    <link href="https://new.waylonwalker.com/simple-textual-widget/" rel="alternate" type="text/html"></link>
    <summary type="text">Once you have made your sick looking cli apps with rich, eventually you are going to want to add some keybindings to them. Currently Textual, also written by...</summary>
    <content type="html">&lt;p&gt;Once you have made your sick looking cli apps with rich, eventually you are&#xA;going to want to add some keybindings to them.  Currently Textual, also written&#xA;by &lt;a href=&#34;https://twitter.com/willmcgugan&#34;&gt;&lt;/a&gt;&lt;a class=&#34;mention  has-avatar has-avatar-before&#34; data-avatar=&#34;https://willmcgugan.github.io/images/will2025.jpeg&#34; data-bio=&#34;Will McGugan’s essays&#34; data-handle=&#34;@willmcgugan&#34; data-name=&#34;Will McGugan&#34; href=&#34;https://willmcgugan.github.io&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/willmcgugan.github.io.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/willmcgugan.github.io.png&#34;&gt;@willmcgugan&lt;/a&gt;, does this extremely well.&#xA;Fair Warning it is in super beta mode and expected to change a bunch.  So take&#xA;it easy with hopping on the train so fast.&lt;/p&gt;&#xA;&lt;h2 id=&#34;get-the-things&#34;&gt;Get the things &lt;a href=&#34;#get-the-things&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Install them from the command line.&lt;/p&gt;&#xA;&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 textual&#xA;&lt;/span&gt;&lt;/span&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;/code&gt;&lt;/pre&gt;&lt;p&gt;Import make a .py file and import them in 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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.app&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;App&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.widget&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Widget&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.panel&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;make-what-you-have-a-widget&#34;&gt;Make what you have a widget &lt;a href=&#34;#make-what-you-have-a-widget&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;If you return your rich renderable out of class that inherits from&#xA;&lt;code&gt;textual.widget.Widget&lt;/code&gt;, you can then dock this inside of an app class&#xA;inheriting from &lt;code&gt;textual.app.App&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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyWidget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Widget&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;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&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;my_renderable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;press q to quit&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;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my_renderable&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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyApp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;App&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;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_mount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&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;await&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyWidget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;edge&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;top&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;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&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;q&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;quit&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;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;You’ve made a TUI (text user interface).  Run the classmethod &lt;code&gt;run&lt;/code&gt; to display&#xA;the it in its full screen glory.&lt;/p&gt;&#xA;&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;MyApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;textual.log&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;final-result&#34;&gt;Final result &lt;a href=&#34;#final-result&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;At this point It probably does not look much different, but it can be&#xA;interactive by binding keys to any method on your app that starts with the word&#xA;&lt;code&gt;action_&lt;/code&gt;, this includes the built-in actions such as &lt;code&gt;action_quit&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.app&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;App&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;textual.widget&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Widget&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;rich.panel&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyWidget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Widget&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;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&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;my_renderable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Panel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;press q to quit&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;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;my_renderable&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;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MyApp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;App&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;async&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_mount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;None&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;await&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dock&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MyWidget&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;edge&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;top&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;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;bp&#34;&gt;self&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;q&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;quit&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;&#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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;vm&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;__main__&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;MyApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;textual.log&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;</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://new.waylonwalker.com/pipx-examples/</id>
    <updated>2022-01-07T03:04:57Z</updated>
    <published>2022-01-07T03:04:57Z</published>
    <link href="https://new.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>Tmux Pop size</title>
    <id>https://new.waylonwalker.com/tmux-pop-size/</id>
    <updated>2022-01-05T17:37:26Z</updated>
    <published>2022-01-05T17:37:26Z</published>
    <link href="https://new.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://new.waylonwalker.com/copier-templates/</id>
    <updated>2022-01-05T01:54:07Z</updated>
    <published>2022-01-05T01:54:07Z</published>
    <link href="https://new.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>Changing copier template strings (_endops)</title>
    <id>https://new.waylonwalker.com/copier_endops/</id>
    <updated>2022-01-04T10:55:12Z</updated>
    <published>2022-01-04T10:55:12Z</published>
    <link href="https://new.waylonwalker.com/copier_endops/" rel="alternate" type="text/html"></link>
    <summary type="text">I was completely stuck for awhile. copier was not replacing my template variables. I found out that adding all these fixed it. Now It will support all of...</summary>
    <content type="html">&lt;p&gt;I was completely stuck for awhile.  copier was not replacing my template&#xA;variables.  I found out that adding all these &lt;code&gt;_endops&lt;/code&gt; fixed it.  Now&#xA;It will support all of these types of variable wrappers&lt;/p&gt;&#xA;&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;nt&#34;&gt;_templates_suffix&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;.jinja&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;nt&#34;&gt;_envops&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;block_end_string&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;%}&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;block_start_string&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;{%&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;comment_end_string&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;#}&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;comment_start_string&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;{#&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;keep_trailing_newline&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;variable_end_string&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;}}&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;variable_start_string&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;{{&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;blockquote&gt;&#xA;&lt;p&gt;!RTFM: Later I read the docs and realized that copier defaults to using &lt;code&gt;[[&lt;/code&gt;&#xA;and &lt;code&gt;]]&lt;/code&gt; for its templates unlike other tools like cookiecutter.&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 template variables</title>
    <id>https://new.waylonwalker.com/copier-template-variables/</id>
    <updated>2022-01-03T12:37:32Z</updated>
    <published>2022-01-03T12:37:32Z</published>
    <link href="https://new.waylonwalker.com/copier-template-variables/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve been looking for a templating tool for awhile that works well with single files. My go to templating tool does not work for single files, it needs to...</summary>
    <content type="html">&lt;p&gt;I’ve been looking for a templating tool for awhile that works well with&#xA;single files.  My go to templating tool &lt;code&gt;cookiecutter&lt;/code&gt; does not work for&#xA;single files, it needs to put files into a directory underneath of it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;template-variables&#34;&gt;template variables &lt;a href=&#34;#template-variables&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;By default copier uses double square brackets for its variables.&#xA;variables in files, directory_names, or file_names will be substituted&#xA;for their value once you render 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;# hello-py/hello.py.tmpl&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;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hello-[[name]]&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;blockquote&gt;&#xA;&lt;p&gt;note! by default copier will not inject variables into your&#xA;&lt;code&gt;template-strings&lt;/code&gt; unless you use a .tmpl suffix.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Before running copier we need to tell copier what variables to ask for,&#xA;we do this with a copier.yml 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;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;nt&#34;&gt;default&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_name&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;l&#34;&gt;str&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;help&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;What is your name&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;installing-copier&#34;&gt;installing copier &lt;a href=&#34;#installing-copier&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I prefer to install cli tools that I need globally with pipx, this&#xA;always gives me access to the tool without worrying about dependency&#xA;conflicts, bloating my system site-packages, or managing a separate&#xA;&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 it myself.&lt;/p&gt;&#xA;&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 copier&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;running-copier&#34;&gt;running copier &lt;a href=&#34;#running-copier&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;When running &lt;code&gt;copier copy&lt;/code&gt; we pass in the directory of the template, and&#xA;the directory that we want to render the template into.&lt;/p&gt;&#xA;&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 hello-py .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;note! the directory ‘.’ is often referred to in cli programs to&#xA;represent the current working directory that we are calling the&#xA;command from.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&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;The resulting files will have your variables injected into them if you have&#xA;setup your template and copier.yml up correctly.&lt;/p&gt;&#xA;&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;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hello-you&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;</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://new.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://new.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://new.waylonwalker.com/pyenv-first-impressions/</id>
    <updated>2021-12-30T15:26:01Z</updated>
    <published>2021-12-30T15:26:01Z</published>
    <link href="https://new.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 class=&#34;wikilink&#34; data-date=&#34;2021-12-29&#34; data-description=&#34;Installing brew on linux proved quite easy and got pyenv running for me within 4 commands.&#34; data-title=&#34;Installing Homebrew on Linux&#34; href=&#34;/installing-homebrew-linux/&#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 class=&#34;hoverlink  has-avatar has-avatar-before&#34; href=&#34;https://github.com/pyenv/pyenv#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;&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://new.waylonwalker.com/installing-homebrew-linux/</id>
    <updated>2021-12-29T20:24:48Z</updated>
    <published>2021-12-29T20:24:48Z</published>
    <link href="https://new.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://new.waylonwalker.com/serve-html-command-line/</id>
    <updated>2021-12-28T20:24:48Z</updated>
    <published>2021-12-28T20:24:48Z</published>
    <link href="https://new.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://dropper.waylonwalker.com/file/8f120c50-eb76-45bc-b04f-5304bd194fdb.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;running a python static webserver from the command line&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/8f120c50-eb76-45bc-b04f-5304bd194fdb.webp&#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://dropper.waylonwalker.com/file/ee5a2507-fa72-43cc-8722-964cfebaf29e.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;running a nodejs static webserver from the command line&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/ee5a2507-fa72-43cc-8722-964cfebaf29e.webp&#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>Code Review from the comfort of vim | Diffurcate</title>
    <id>https://new.waylonwalker.com/diffurcate/</id>
    <updated>2021-12-04T11:34:47Z</updated>
    <published>2021-12-04T11:34:47Z</published>
    <link href="https://new.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>Open files FAST from zsh | or bash if thats your thing</title>
    <id>https://new.waylonwalker.com/fuzzy-edit-zsh/</id>
    <updated>2021-12-02T11:34:47Z</updated>
    <published>2021-12-02T11:34:47Z</published>
    <link href="https://new.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>30 days dotfile ricing</title>
    <id>https://new.waylonwalker.com/dotfile-rice-challenge-intro/</id>
    <updated>2021-11-29T11:34:47Z</updated>
    <published>2021-11-29T11:34:47Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/Jq1Y48F_rOU&#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>Uses</title>
    <id>https://new.waylonwalker.com/uses/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://new.waylonwalker.com/uses/" rel="alternate" type="text/html"></link>
    <summary type="text">This is a listing of all the things that I use on a daily basis to build data pipelines, lead my team, and build this website.</summary>
    <content type="html">&lt;p&gt;This is a listing of all the things that I use on a daily basis to build data&#xA;pipelines, lead my team, and build this website.&lt;/p&gt;&#xA;&lt;h2 id=&#34;older-editions&#34;&gt;older editions &lt;a href=&#34;#older-editions&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;[[ uses-2021 ]]&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;Everything installed on my machines is done through ansible-playbooks.  It’s&#xA;been a long transformation to get here, but its so satisfying to boot a brand&#xA;new system, run a single command a have every single thing cofigured exactly to&#xA;my liking.&lt;/p&gt;&#xA;&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;# GET is available by default on Ubuntu&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GET waylonwalker.com/bootstrap &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;&#xA;&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 debian based systems without GET by default&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 install curl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -F https://waylonwalker.com/bootstrap &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;os&#34;&gt;OS &lt;a href=&#34;#os&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I run Ubuntu, it works well for me without too much fuss.  For me the&#xA;distribution does not really matter too much, I’m more interested in what’s&#xA;inside.&lt;/p&gt;&#xA;&lt;h2 id=&#34;window-manager&#34;&gt;Window Manager &lt;a href=&#34;#window-manager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use awesome wm.  Awesome is a tiling window manager that alows me to navigate&#xA;through 9 workspaces (technically called tags in awesomewm). I can script out&#xA;certain applications to open in a certain tag, move it to different tags, and&#xA;join tags super easy.  I really dont see myself going back to a floating window&#xA;manager where you have to place all your windows with the mouse by hand.  This&#xA;is probably one of the biggest selling points for me to move to a Linux&#xA;desktop.&lt;/p&gt;&#xA;&lt;h2 id=&#34;terminal&#34;&gt;Terminal &lt;a href=&#34;#terminal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;gnome-terminal&#34;&gt;gnome-terminal &lt;a href=&#34;#gnome-terminal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;For the longest time I just used&#xA;&lt;a href=&#34;https://help.gnome.org/users/gnome-terminal/stable/&#34;&gt;gnome-terminal&lt;/a&gt;.  It&#xA;works, for the most part it gets out of the way and lets me do what I want.  I&#xA;just want a terminal that runs tmux properly, runs without titltbars or&#xA;scrollbars, and lets me theme it without much effort.&lt;/p&gt;&#xA;&lt;h3 id=&#34;kitty&#34;&gt;kitty &lt;a href=&#34;#kitty&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sw.kovidgoyal.net/kitty/&#34;&gt;Kitty&lt;/a&gt; is my main terminal, these days, it’s&#xA;nice, its easy to configure how I want it, but most of its fancier features do&#xA;not work inside of tmux.  It does render incredibly fast, If I accidently cat&#xA;out a massive file, it typically just handles it, compared to other terminals&#xA;that will be printing for 30s or so.&lt;/p&gt;&#xA;&lt;h3 id=&#34;windows-terminal&#34;&gt;Windows Terminal &lt;a href=&#34;#windows-terminal&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;When I am on a windows terminal I use the &lt;em&gt;new&lt;/em&gt;&#xA;&lt;a href=&#34;https://github.com/microsoft/terminal&#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;Terminal&lt;/a&gt;.  It’s a massive improvement&#xA;over any other terminal that I have ever tired on windows.  Text looks good,&#xA;the built in themese look good, I use the One-Half-Dark Theme, and the built in&#xA;Cascadia Code font.  Also things like system clipboards, copy, and paste just&#xA;seem to work better, and integrate well with wsl.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/bc2054b9-fc9b-415a-8a05-a5a290668a96.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;My Windows Terminal from may 2022&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.wayl.one/file/bc2054b9-fc9b-415a-8a05-a5a290668a96.webp&#34; alt=&#34;My Windows Terminal from may 2022&#34;/ data-glightbox=&#34;description: My Windows Terminal from may 2022&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;shell&#34;&gt;Shell &lt;a href=&#34;#shell&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The shell is the interpreter that interprets the commands that you send to it&#xA;from the command line, unlike the terminal that displays the text.&lt;/p&gt;&#xA;&lt;h3 id=&#34;zsh&#34;&gt;zsh &lt;a href=&#34;#zsh&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;I use &lt;a href=&#34;https://www.zsh.org/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/www.zsh.org.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/www.zsh.org.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;zsh&lt;/a&gt; as my shell of choice.  I don’t run&#xA;oh-my-zsh, I just need a few plugins for things like&#xA;&lt;a href=&#34;https://github.com/zsh-users/zsh-autosuggestions&#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;autosuggestions&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/zsh-users/zsh-syntax-highlighting&#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;syntax-highlighting&lt;/a&gt;&#xA;&lt;a href=&#34;https://github.com/zsh-users/zsh-history-substring-search&#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;history-substring-search&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;tmux&#34;&gt;Tmux &lt;a href=&#34;#tmux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;text-editor&#34;&gt;Text Editor &lt;a href=&#34;#text-editor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;presentation--slides&#34;&gt;Presentation / Slides &lt;a href=&#34;#presentation--slides&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;video-recording--streaming&#34;&gt;Video Recording / Streaming &lt;a href=&#34;#video-recording--streaming&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;video-editing&#34;&gt;Video Editing &lt;a href=&#34;#video-editing&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;pager&#34;&gt;pager &lt;a href=&#34;#pager&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;image-editor&#34;&gt;Image Editor &lt;a href=&#34;#image-editor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;virtual-environments&#34;&gt;Virtual Environments &lt;a href=&#34;#virtual-environments&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;node&#34;&gt;node &lt;a href=&#34;#node&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;desk&#34;&gt;Desk &lt;a href=&#34;#desk&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;monitor&#34;&gt;Monitor &lt;a href=&#34;#monitor&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;keyboard&#34;&gt;Keyboard &lt;a href=&#34;#keyboard&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;desktop-pc&#34;&gt;Desktop PC &lt;a href=&#34;#desktop-pc&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;keyboard-1&#34;&gt;Keyboard &lt;a href=&#34;#keyboard-1&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;microphone&#34;&gt;Microphone &lt;a href=&#34;#microphone&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;audio-interface&#34;&gt;Audio Interface &lt;a href=&#34;#audio-interface&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;headphones&#34;&gt;Headphones &lt;a href=&#34;#headphones&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;chair&#34;&gt;Chair &lt;a href=&#34;#chair&#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>Update Alternatives in Linux</title>
    <id>https://new.waylonwalker.com/update-alternatives/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://new.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://new.waylonwalker.com/jut/</id>
    <updated>2021-11-20T10:38:00Z</updated>
    <published>2021-11-20T10:38:00Z</published>
    <link href="https://new.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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/57676ca9-23dd-4b3d-a084-293a0525eba5.mkv&#34; class=&#34;glightbox-link&#34; aria-label=&#34;57676ca9-23dd-4b3d-a084-293a0525eba5.mkv&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/57676ca9-23dd-4b3d-a084-293a0525eba5.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/57676ca9-23dd-4b3d-a084-293a0525eba5.mkv&#34; type=&#34;video/x-matroska&#34;&gt;57676ca9-23dd-4b3d-a084-293a0525eba5.mkv&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;Or watch the full thing here&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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://dropper.wayl.one/file/f7db3e0e-cc41-44f2-b410-8e7bc5fe1a58.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;installing jut with pip&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/f7db3e0e-cc41-44f2-b410-8e7bc5fe1a58.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/f7db3e0e-cc41-44f2-b410-8e7bc5fe1a58.mp4&#34; type=&#34;video/mp4&#34;&gt;installing jut with pip&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&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;&lt;/figcaption&gt;&lt;/figure&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://dropper.wayl.one/file/08743803-99cc-4881-831d-6ef17d8c1065.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;running jut examples&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/08743803-99cc-4881-831d-6ef17d8c1065.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/08743803-99cc-4881-831d-6ef17d8c1065.mp4&#34; type=&#34;video/mp4&#34;&gt;running jut examples&lt;/video&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://dropper.wayl.one/file/ba21e724-3fff-4320-8fb9-4fe62442aab2.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;getting help with jut&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/ba21e724-3fff-4320-8fb9-4fe62442aab2.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/ba21e724-3fff-4320-8fb9-4fe62442aab2.mp4&#34; type=&#34;video/mp4&#34;&gt;getting help with jut&lt;/video&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://dropper.wayl.one/file/d4399ec7-9046-4cbe-b1cb-4a453be8bf4b.webm&#34; class=&#34;glightbox-link&#34; aria-label=&#34;running jut with pipx&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/d4399ec7-9046-4cbe-b1cb-4a453be8bf4b.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/d4399ec7-9046-4cbe-b1cb-4a453be8bf4b.webm&#34; type=&#34;video/webm&#34;&gt;running jut with pipx&lt;/video&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://dropper.wayl.one/file/7a3087f4-dd03-46f9-ad23-8ed655b14849.webm&#34; class=&#34;glightbox-link&#34; aria-label=&#34;nbconvert to html to see images&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/7a3087f4-dd03-46f9-ad23-8ed655b14849.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/7a3087f4-dd03-46f9-ad23-8ed655b14849.webm&#34; type=&#34;video/webm&#34;&gt;nbconvert to html to see images&lt;/video&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://dropper.wayl.one/file/bf2e3759-9d61-40df-9945-feaf28333e16.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;nbconvert to markdown and displaying in bat&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/bf2e3759-9d61-40df-9945-feaf28333e16.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/bf2e3759-9d61-40df-9945-feaf28333e16.mp4&#34; type=&#34;video/mp4&#34;&gt;nbconvert to markdown and displaying in bat&lt;/video&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://dropper.wayl.one/file/341a0a28-dd3b-46c4-b6f6-a5aeef78e5eb.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;nbconvert to markdown and displaying in glow&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/341a0a28-dd3b-46c4-b6f6-a5aeef78e5eb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/341a0a28-dd3b-46c4-b6f6-a5aeef78e5eb.mp4&#34; type=&#34;video/mp4&#34;&gt;nbconvert to markdown and displaying in glow&lt;/video&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://dropper.wayl.one/file/1aaca40c-883f-4013-8dd9-c7db3b8a46b4.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;nbconvert to markdown and displaying as slides with lookatme&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/1aaca40c-883f-4013-8dd9-c7db3b8a46b4.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/1aaca40c-883f-4013-8dd9-c7db3b8a46b4.mp4&#34; type=&#34;video/mp4&#34;&gt;nbconvert to markdown and displaying as slides with lookatme&lt;/video&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>tmux targeted session</title>
    <id>https://new.waylonwalker.com/tmux-targeted-session/</id>
    <updated>2021-08-02T23:51:21Z</updated>
    <published>2021-08-02T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/5KE7Il7SOEk&#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 class=&#34;wikilink&#34; data-date=&#34;2021-08-01&#34; data-description=&#34;https://youtu.be/LbQNdCAUogE&#34; data-title=&#34;tmux new-session&#34; href=&#34;/tmux-new-session/&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-detach/</id>
    <updated>2021-08-01T23:51:21Z</updated>
    <published>2021-08-01T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/A1qx3tNKDdA&#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 class=&#34;hoverlink  has-avatar has-avatar-before&#34; href=&#34;https://waylonwalker.com/tmux-nav-2021/&#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://new.waylonwalker.com/notify-send/</id>
    <updated>2021-08-01T10:33:17Z</updated>
    <published>2021-08-01T10:33:17Z</published>
    <link href="https://new.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://new.waylonwalker.com/tmux-attach/</id>
    <updated>2021-07-31T23:51:21Z</updated>
    <published>2021-07-31T23:51:21Z</published>
    <link href="https://new.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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-ls/</id>
    <updated>2021-07-30T23:51:21Z</updated>
    <published>2021-07-30T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/LY41GLn_DGg&#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 class=&#34;wikilink&#34; data-date=&#34;2021-07-31&#34; data-description=&#34;https://youtu.be/JQ0yDCVu44E&#34; data-title=&#34;tmux attach&#34; href=&#34;/tmux-attach/&#34; data-preview=&#34;https://youtu.be/JQ0yDCVu44E&#34;&gt;tmux attach&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-command-line/</id>
    <updated>2021-07-29T23:51:21Z</updated>
    <published>2021-07-29T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/SNu-4IrkjAs&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-copy-mode/</id>
    <updated>2021-07-28T23:51:21Z</updated>
    <published>2021-07-28T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/-ypY_-VmBKk&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-join-pane/</id>
    <updated>2021-07-27T23:51:21Z</updated>
    <published>2021-07-27T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/Vm5rRtcVXLw&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/break-pane/</id>
    <updated>2021-07-26T23:51:21Z</updated>
    <published>2021-07-26T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/ICL609F2xnc&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-zoom/</id>
    <updated>2021-07-25T23:51:21Z</updated>
    <published>2021-07-25T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/Rn6mOarCQ-Y&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-new-window/</id>
    <updated>2021-07-24T23:51:21Z</updated>
    <published>2021-07-24T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/YRPZBv-iYyE&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-select-pane/</id>
    <updated>2021-07-23T23:51:21Z</updated>
    <published>2021-07-23T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/CPZJZjN9YTY&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-rotate-window/</id>
    <updated>2021-07-22T23:51:21Z</updated>
    <published>2021-07-22T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/06z5qf81ofo&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-select-layout/</id>
    <updated>2021-07-21T23:51:21Z</updated>
    <published>2021-07-21T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/F0mHnwTrNNc&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-resize-panes/</id>
    <updated>2021-07-20T23:51:21Z</updated>
    <published>2021-07-20T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/hpFYE2LU7xc&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-choose-tree/</id>
    <updated>2021-07-19T23:51:21Z</updated>
    <published>2021-07-19T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/79Y-kqAiMpw&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;!--markata-attribution--&amp;gt;&#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 class=&#34;hoverlink  has-avatar has-avatar-before&#34; href=&#34;https://waylonwalker.com/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-prefix/</id>
    <updated>2021-07-18T23:51:21Z</updated>
    <published>2021-07-18T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/BMkpbfhbkKM&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-splitting-panes/</id>
    <updated>2021-07-17T23:51:21Z</updated>
    <published>2021-07-17T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/kzgyiHap1nQ&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-last-session/</id>
    <updated>2021-07-16T23:51:21Z</updated>
    <published>2021-07-16T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/RB87EEnnMnU&#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://dropper.waylonwalker.com/file/0574b548-0871-4505-95f4-48e2fb267c6e.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;hub and spoke&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/0574b548-0871-4505-95f4-48e2fb267c6e.webp&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-floating-popups/</id>
    <updated>2021-07-15T23:51:21Z</updated>
    <published>2021-07-15T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/2ZqFDsJywt8&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/tmux-popups/</id>
    <updated>2021-07-14T23:51:21Z</updated>
    <published>2021-07-14T23:51:21Z</published>
    <link href="https://new.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 class=&#34;youtube-embed  has-avatar has-avatar-before&#34; href=&#34;https://youtu.be/2I8fB28zfB4&#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 class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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://new.waylonwalker.com/ubuntu/</id>
    <updated>2021-06-25T20:50:45Z</updated>
    <published>2021-06-25T20:50:45Z</published>
    <link href="https://new.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://dropper.waylonwalker.com/file/b0d1dc4b-127c-48fb-9ca5-d9689643687c.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;hide the scrollbar&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/b0d1dc4b-127c-48fb-9ca5-d9689643687c.webp&#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://dropper.waylonwalker.com/file/62a8ed4b-dcc5-4c5a-8f65-f6ccc92d5f41.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;hide the menubar&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/62a8ed4b-dcc5-4c5a-8f65-f6ccc92d5f41.webp&#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 to use git cherry pick</title>
    <id>https://new.waylonwalker.com/cherry-pick/</id>
    <updated>2021-05-13T08:51:45Z</updated>
    <published>2021-05-13T08:51:45Z</published>
    <link href="https://new.waylonwalker.com/cherry-pick/" 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;~/git via 🐍 v3.8.5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ mkdir git-cherry-pick-learn&#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 via 🐍 v3.8.5&#xA;&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-cherry-pick-learn&#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/git-cherry-pick-learn&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git init&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Initialized empty Git repository in /home/walkews/git/git-cherry-pick-learn/.git/&#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-cherry-pick-learn on  main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ touch readme.md&#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-cherry-pick-learn on  main &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;❯ git status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;On branch 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;No commits yet&#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;Untracked files:&#xA;&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;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to include in what will be committed&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;        readme.md&#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;nothing added to commit but untracked files present &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add&amp;#34;&lt;/span&gt; to track&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;git-cherry-pick-learn on  main &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;❯ git add .&#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-cherry-pick-learn on  main &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;init readme&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;main &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;root-commit&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ebd1ff2&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; init readme&#xA;&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; file changed, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; insertions&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;+&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;, &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; deletions&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; create mode &lt;span class=&#34;m&#34;&gt;100644&lt;/span&gt; readme.md&#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-cherry-pick-learn on  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;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Learn Cherry Pick&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;Learn Cherry Pick&#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-cherry-pick-learn on  main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git add .&#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-cherry-pick-learn on  main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add title&#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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;git-cherry-pick-learn on  main&#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;c1&#34;&gt;# Learn Cherry Pick&amp;#34; &amp;gt; readme.md&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;git-cherry-pick-learn on  main &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;❯ git add .&#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-cherry-pick-learn on  main &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;❯ git diff&#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-cherry-pick-learn on  main &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;❯ git diff --staged&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;diff --git a/readme.md b/readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index e69de29..3490cef &lt;span class=&#34;m&#34;&gt;100644&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--- a/readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+++ b/readme.md&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@@ -0,0 +1 @@&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+# Learn Cherry Pick&#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-cherry-pick-learn on  main &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add title&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;main 148264d&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; add title&#xA;&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; file changed, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; insertion&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git-cherry-pick-learn on  main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ git checkout -b trash-branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Switched to a new branch &lt;span class=&#34;s1&#34;&gt;&amp;#39;trash-branch&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;git-cherry-pick-learn on  trash-branch&#xA;&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; &amp;gt;&amp;gt; readme.md&#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-cherry-pick-learn on  trash-branch &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; &amp;gt;&amp;gt; readme.md&#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-cherry-pick-learn on  trash-branch &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; &amp;gt;&amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Cherry Pick is amazing&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;git-cherry-pick-learn on  trash-branch &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;❯ cat readme.md&#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;       │ File: readme.md&#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;   │ &lt;span class=&#34;c1&#34;&gt;# Learn Cherry Pick&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;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;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;───────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────&#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-cherry-pick-learn on  trash-branch &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;Cherry Pick is amazing&amp;#34;&lt;/span&gt; &amp;gt;&amp;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;git-cherry-pick-learn on  trash-branch &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add whitespace&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;On branch trash-branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes not staged &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; commit:&#xA;&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;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to update what will be committed&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;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git restore &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to discard changes in working directory&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;        modified:   readme.md&#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;Untracked files:&#xA;&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;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to include in what will be committed&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;        Cherry Pick is amazing&#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;no changes added to commit &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add&amp;#34;&lt;/span&gt; and/or &lt;span class=&#34;s2&#34;&gt;&amp;#34;git commit -a&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;git-cherry-pick-learn on  trash-branch &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;❯ git add .&#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-cherry-pick-learn on  trash-branch &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add whitespace&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;trash-branch 94f734b&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; add whitespace&#xA;&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;2&lt;/span&gt; files changed, &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; insertions&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; create mode &lt;span class=&#34;m&#34;&gt;100644&lt;/span&gt; Cherry Pick is amazing&#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;git-cherry-pick-learn on  trash-branch&#xA;&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;TRASH&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; readme.md&#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-cherry-pick-learn on  trash-branch &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;❯ git add .&#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-cherry-pick-learn on  trash-branch &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add trash&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;trash-branch ec43879&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; add trash&#xA;&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; file changed, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; insertion&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git-cherry-pick-learn on  trash-branch&#xA;&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;Cherry Pick is Amazing&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; readme.md&#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-cherry-pick-learn on  trash-branch &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add cherry pick is amazing&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;On branch trash-branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Changes not staged &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; commit:&#xA;&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;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to update what will be committed&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;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git restore &amp;lt;file&amp;gt;...&amp;#34;&lt;/span&gt; to discard changes in working directory&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;        modified:   readme.md&#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;no changes added to commit &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;use &lt;span class=&#34;s2&#34;&gt;&amp;#34;git add&amp;#34;&lt;/span&gt; and/or &lt;span class=&#34;s2&#34;&gt;&amp;#34;git commit -a&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;git-cherry-pick-learn on  trash-branch &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;❯ git add .&#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-cherry-pick-learn on  trash-branch &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;❯ git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;add cherry pick is amazing&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;trash-branch 6691a34&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; add cherry pick is amazing&#xA;&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; file changed, &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; insertion&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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git-cherry-pick-learn on  trash-branch&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ cat readme.md&#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;       │ File: readme.md&#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;   │ &lt;span class=&#34;c1&#34;&gt;# Learn Cherry Pick&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;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;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;   &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;   │ TRASH&#xA;&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;5&lt;/span&gt;   │ Cherry Pick is Amazing&#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;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git-cherry-pick-learn on  trash-branch&#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;commit 6691a343e0ba35d0700c49ec09a99fa8f1f385b9 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;HEAD -&amp;gt; trash-branch&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;Author: Waylon Walker &amp;lt;walker_waylon_s@cat.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Thu May &lt;span class=&#34;m&#34;&gt;13&lt;/span&gt; 08:54:58 &lt;span class=&#34;m&#34;&gt;2021&lt;/span&gt; -0500&#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;    add cherry pick is amazing&#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;commit ec438790af36c23aef8eee2122f0dda95313496b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;walker_waylon_s@cat.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Thu May &lt;span class=&#34;m&#34;&gt;13&lt;/span&gt; 08:54:07 &lt;span class=&#34;m&#34;&gt;2021&lt;/span&gt; -0500&#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;    add trash&#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;commit 94f734b1adcee0f503c818c0f6bc9da97a0066e2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;walker_waylon_s@cat.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Thu May &lt;span class=&#34;m&#34;&gt;13&lt;/span&gt; 08:50:35 &lt;span class=&#34;m&#34;&gt;2021&lt;/span&gt; -0500&#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;    add whitespace&#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;commit 148264da5641033caa537727c6d5199068d58a4d &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;Author: Waylon Walker &amp;lt;walker_waylon_s@cat.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Thu May &lt;span class=&#34;m&#34;&gt;13&lt;/span&gt; 08:48:58 &lt;span class=&#34;m&#34;&gt;2021&lt;/span&gt; -0500&#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;    add title&#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;commit ebd1ff22493d860e001f2b96ec948684d496355b&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Author: Waylon Walker &amp;lt;walker_waylon_s@cat.com&amp;gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Date:   Thu May &lt;span class=&#34;m&#34;&gt;13&lt;/span&gt; 08:47:10 &lt;span class=&#34;m&#34;&gt;2021&lt;/span&gt; -0500&#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;    init readme&#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;git-cherry-pick-learn on  trash-branch&#xA;&lt;/span&gt;&lt;/span&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;Switched to branch &lt;span class=&#34;s1&#34;&gt;&amp;#39;main&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;git-cherry-pick-learn on  main&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;❯ cat readme.md&#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;       │ File: readme.md&#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;   │ &lt;span class=&#34;c1&#34;&gt;# Learn Cherry Pick&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;/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://new.waylonwalker.com/tmux-nav-2021/</id>
    <updated>2021-05-11T09:14:07Z</updated>
    <published>2021-05-11T09:14:07Z</published>
    <link href="https://new.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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/764ed3d2-7a34-4504-af48-397d0869c5a4.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;overview of how I switch and manage tmux sessions&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/764ed3d2-7a34-4504-af48-397d0869c5a4.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/764ed3d2-7a34-4504-af48-397d0869c5a4.mp4&#34; type=&#34;video/mp4&#34;&gt;overview of how I switch and manage tmux sessions&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;👆 Overview of how I navigate tmux&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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;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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5bef809c-cedb-434f-92ee-dbdb826e0331.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;overview of how I switch and manage tmux sessions&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/5bef809c-cedb-434f-92ee-dbdb826e0331.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/5bef809c-cedb-434f-92ee-dbdb826e0331.mp4&#34; type=&#34;video/mp4&#34;&gt;overview of how I switch and manage tmux sessions&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&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;&lt;/figcaption&gt;&#xA;&lt;/figure&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/5a038223-2c45-4984-8a76-8c6bc44f9364.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;jump to existing sessions with prefix+w&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/5a038223-2c45-4984-8a76-8c6bc44f9364.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/5a038223-2c45-4984-8a76-8c6bc44f9364.mp4&#34; type=&#34;video/mp4&#34;&gt;jump to existing sessions with prefix+w&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;using prefix+w&lt;/p&gt;&lt;/figcaption&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;&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/52144c42-825a-4ff3-a6b7-4288b56a5b76.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;create a new session from my ~/git directory&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/52144c42-825a-4ff3-a6b7-4288b56a5b76.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/52144c42-825a-4ff3-a6b7-4288b56a5b76.mp4&#34; type=&#34;video/mp4&#34;&gt;create a new session from my ~/git directory&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;using prefix+c-g&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/7e1fc17e-2dc9-4db0-aa06-f1c57c2a93ae.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;jump to existing sessions with prefix+c-j&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/7e1fc17e-2dc9-4db0-aa06-f1c57c2a93ae.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/7e1fc17e-2dc9-4db0-aa06-f1c57c2a93ae.mp4&#34; type=&#34;video/mp4&#34;&gt;jump to existing sessions with prefix+c-j&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;using prefix+c-j&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/148b7818-c46d-475b-8cc1-55f85fc7c5eb.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;jump to next or previous sessions with m-N or m-P&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/148b7818-c46d-475b-8cc1-55f85fc7c5eb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/148b7818-c46d-475b-8cc1-55f85fc7c5eb.mp4&#34; type=&#34;video/mp4&#34;&gt;jump to next or previous sessions with m-N or m-P&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;using m-N and m-P&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/ddf78fe0-0631-424e-82d3-2cd82101cd9c.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;create a new session git-diff switch back to original session with prefix+c-g then use tkill to kill the git-diff session&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/ddf78fe0-0631-424e-82d3-2cd82101cd9c.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/ddf78fe0-0631-424e-82d3-2cd82101cd9c.mp4&#34; type=&#34;video/mp4&#34;&gt;create a new session git-diff switch back to original session with prefix+c-g then use tkill to kill the git-diff session&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;tkill example&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/fa67af1e-ba7e-4c30-a228-aec255e63782.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;jump to the last session with M-B&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/fa67af1e-ba7e-4c30-a228-aec255e63782.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/fa67af1e-ba7e-4c30-a228-aec255e63782.mp4&#34; type=&#34;video/mp4&#34;&gt;jump to the last session with M-B&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&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;&lt;/figcaption&gt;&lt;/figure&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/700a0fb6-408f-4872-81e6-dcf580860b6d.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;jump to my todo list with m-i&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/700a0fb6-408f-4872-81e6-dcf580860b6d.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/700a0fb6-408f-4872-81e6-dcf580860b6d.mp4&#34; type=&#34;video/mp4&#34;&gt;jump to my todo list with m-i&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;These few directories are always at my fingertips, encouraging me to keep better notes&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&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://dropper.waylonwalker.com/file/2fb73629-7a5a-4771-bdcc-5063b90ed7f4.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;hub and spoke&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/2fb73629-7a5a-4771-bdcc-5063b90ed7f4.webp&#34; alt=&#34;hub and spoke&#34;/ data-glightbox=&#34;description: hub and spoke&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;quickly get between projects&lt;/p&gt;&lt;/figcaption&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/aecc33a4-4d0c-4ff5-9bde-060d9a8542d3.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;quickly access notes&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/aecc33a4-4d0c-4ff5-9bde-060d9a8542d3.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/aecc33a4-4d0c-4ff5-9bde-060d9a8542d3.mp4&#34; type=&#34;video/mp4&#34;&gt;quickly access notes&lt;/video&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;quickly access notes with a dedicated hotkey&lt;/p&gt;&lt;/figcaption&gt;&#xA;&lt;/figure&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://new.waylonwalker.com/trim-branches/</id>
    <updated>2021-05-07T09:47:24Z</updated>
    <published>2021-05-07T09:47:24Z</published>
    <link href="https://new.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>Create a Virtual File Gallery with Symlinks</title>
    <id>https://new.waylonwalker.com/symlink-gallery/</id>
    <updated>2021-05-05T08:23:33Z</updated>
    <published>2021-05-05T08:23:33Z</published>
    <link href="https://new.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>How to Install micromamba on linux (from the comamnd line only)</title>
    <id>https://new.waylonwalker.com/install-micromamba/</id>
    <updated>2021-04-21T13:32:27Z</updated>
    <published>2021-04-21T13:32:27Z</published>
    <link href="https://new.waylonwalker.com/install-micromamba/" rel="alternate" type="text/html"></link>
    <summary type="text">I really like using conda () as my python virtual environment manager of choice. It&#39;s simple and it includes its own python interpreter using the version...</summary>
    <content type="html">&lt;p&gt;I really like using conda (&lt;code&gt;miniconda&lt;/code&gt;) as my python &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;&#xA;manager of choice.  It’s simple and it includes its own python interpreter&#xA;using the version that I specify at creation.&lt;/p&gt;&#xA;&lt;h2 id=&#34;mamba&#34;&gt;Mamba &lt;a href=&#34;#mamba&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;from their &lt;a href=&#34;https://github.com/mamba-org/mamba&#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;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;p&gt;Mamba is a reimplementation of the conda package manager in C++.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;parallel downloading of repository data and package files using multi-threading&lt;/li&gt;&#xA;&lt;li&gt;libsolv for much faster dependency solving, a state of the art library used in the RPM package manager of Red Hat, Fedora and OpenSUSE&lt;/li&gt;&#xA;&lt;li&gt;core parts of mamba are implemented in C++ for maximum efficiency&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;At the same time, mamba utilize the same command line parser, package&#xA;installation and deinstallation code and transaction verification routines as&#xA;conda to stay as compatible as possible.&lt;/p&gt;&#xA;&lt;hr/&gt;&#xA;&lt;h2 id=&#34;installing-micromamba&#34;&gt;Installing Micromamba &lt;a href=&#34;#installing-micromamba&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Similar to miniconda micromamba can be installed with a few lines of bash&lt;/p&gt;&#xA;&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://micromamba.snakepit.net/api/micromamba/linux-64/latest &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tar -xvj bin/micromamba&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./bin/micromamba shell init -s bash -p ~/micromamba&#xA;&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; ~/.bashrc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;creating-environments-with-micromamba&#34;&gt;Creating Environments with Micromamba &lt;a href=&#34;#creating-environments-with-micromamba&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Creating new environments with micromamba is pretty similar to using conda.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;micromamba create -n mamba-new &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.9 -y -c conda-forge&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-c-is-required&#34;&gt;-c is required &lt;a href=&#34;#-c-is-required&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I was unable to figure out how to configure channels to &lt;code&gt;micromamba&lt;/code&gt;, so I&#xA;needed to add &lt;code&gt;-c conda-forge&lt;/code&gt; to my 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;                                           __&#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;__ &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt; __ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;/ __ &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;__ &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt; __ &lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt; __ &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;        / /_/ / / / / / / /_/ / / / / / / /_/ / /_/ /&#xA;&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;se&#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;WARNING No &lt;span class=&#34;s1&#34;&gt;&amp;#39;channels&amp;#39;&lt;/span&gt; specified&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Encountered problems &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; solving:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - nothing provides requested python 3.9**&#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;ERROR   Could not solve &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; environment specs&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;⚠ micromamba thows this error when &lt;code&gt;-c conda-forge&lt;/code&gt; is missing from the create command.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;speed&#34;&gt;Speed &lt;a href=&#34;#speed&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;micromamba is built for speed.  I tried it out in a replit.com session, while&#xA;it felt quite snappy creating a new environment was still within a few seconds&#xA;of conda on subsequent environment creations.  Their marketing says it should&#xA;be faster, but for what I use conda for I didn’t see it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pip&#34;&gt;pip &lt;a href=&#34;#pip&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I used conda install years ago while on windows machines struggling to compile&#xA;c-extensions and install certain troublesome packages, but I haven’t used a&#xA;&lt;code&gt;conda install&lt;/code&gt; in years, pip works just fine for my use.&lt;/p&gt;&#xA;&lt;h2 id=&#34;useful-links&#34;&gt;Useful Links &lt;a href=&#34;#useful-links&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GitHub: &lt;a href=&#34;https://github.com/mamba-org/mamba&#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/mamba-org/mamba&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Gitter: &lt;a href=&#34;https://gitter.im/QuantStack/Lobby&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/gitter.im.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/gitter.im.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://gitter.im/QuantStack/Lobby&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Documentation: &lt;a href=&#34;https://mamba.readthedocs.io/en/latest/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/mamba.readthedocs.io.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/mamba.readthedocs.io.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;https://mamba.readthedocs.io/en/latest/&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;See Also: &lt;a class=&#34;wikilink&#34; data-date=&#34;2020-08-10&#34; data-description=&#34;Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.&#34; data-title=&#34;How to Install miniconda on linux (from the command line only)&#34; href=&#34;/install-miniconda/&#34; data-preview=&#34;Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.&#34;&gt;How to Install miniconda on linux (from the command line only)&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>Vim Wsl Clipboard</title>
    <id>https://new.waylonwalker.com/vim-wsl-clipboard/</id>
    <updated>2021-04-17T00:00:00Z</updated>
    <published>2021-04-17T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/vim-wsl-clipboard/" rel="alternate" type="text/html"></link>
    <summary type="text">I&#39;ve long used neovim from within windows wsl, and for far too long, I went without a proper way to get text out of it and into windows.</summary>
    <content type="html">&lt;p&gt;I’ve long used neovim from within windows wsl, and for far too long, I went&#xA;without a proper way to get text out of it and into windows.&lt;/p&gt;&#xA;&lt;h2 id=&#34;wsl-has-access-to-cmd-applications&#34;&gt;wsl has access to cmd applications &lt;a href=&#34;#wsl-has-access-to-cmd-applications&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;wsl can access clip.exe.  You can do some cool things with it, such as&#xA;cat a file into the clipboard, sending output from a command to the clipboard,&#xA;or set an autocmd group in vim to send yank to the windows clipboard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;using-clipexe&#34;&gt;using clip.exe &lt;a href=&#34;#using-clipexe&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s say you want to send a teammate the tail of a log file over chat. You can&#xA;tail the file into clip.exe.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; info.log &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; clip.exe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;pipe streams of text into clip.exe&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;make-it-a-bit-more-natural&#34;&gt;make it a bit more natural &lt;a href=&#34;#make-it-a-bit-more-natural&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I recently made mine feel a bit more natural by aliasing it to clip.&lt;/p&gt;&#xA;&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;clip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;clip.exe&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;pop this in your ~/.bashrc or ~/.zshrc&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;yanking-to-windows-clipboard-from-vim&#34;&gt;yanking to windows clipboard from vim &lt;a href=&#34;#yanking-to-windows-clipboard-from-vim&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I use neovim as my daily text editor and its a pain to share code with a&#xA;teammate over chat, stack overflow, into a gist, or whatever you need.  The&#xA;following snippet has been quite useful and flawless 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;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;uname -r&amp;#39;&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;s2&#34;&gt;&amp;#34;Microsoft&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;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Yank&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;TextYankPost&lt;/span&gt; * :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/mnt/c/windows/system32/clip.exe &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;@&amp;#34;&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;add this to your ~/.vimrc or your ~/.config/nvim/init.vim&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;wsl2&#34;&gt;Wsl2 &lt;a href=&#34;#wsl2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Based on some&#xA;&lt;a href=&#34;https://github.com/WaylonWalker/waylonwalker.com/issues/4&#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;feedback&lt;/a&gt;&#xA;from &lt;a href=&#34;https://github.com/l-sannin&#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;l-sannin&lt;/a&gt; the ‘uname -r’ command now&#xA;returns &lt;code&gt;uname -r command returns &amp;#39;5.10.16.3-microsoft-standard-WSL2&amp;#39;&lt;/code&gt;&#xA;So you will need an all lowercase microsoft.&lt;/p&gt;&#xA;&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;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;uname -r&amp;#39;&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;s2&#34;&gt;&amp;#34;microsoft&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;nx&#34;&gt;augroup&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Yank&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;TextYankPost&lt;/span&gt; * :&lt;span class=&#34;nx&#34;&gt;call&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/mnt/c/windows/system32/clip.exe &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;@&amp;#34;&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;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;endif&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>Quickly Edit Posts</title>
    <id>https://new.waylonwalker.com/quickly-edit-posts/</id>
    <updated>2021-01-18T00:00:00Z</updated>
    <published>2021-01-18T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/quickly-edit-posts/" rel="alternate" type="text/html"></link>
    <summary type="text">Recently I automated starting new posts with a python script. Today I want to work on the next part that is editing those posts quickly.</summary>
    <content type="html">&lt;p&gt;Recently I automated starting new posts with a python script.  Today I want to&#xA;work on the next part that is editing those posts quickly.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2020-12-11&#34; data-description=&#34;One thing we all dread is mundane work of getting started, and all the hoops it takes to get going. This year I want to post more often and I am taking some...&#34; data-title=&#34;Automating my Post Starter&#34; href=&#34;/automating-my-post-starter/&#34; data-preview=&#34;One thing we all dread is mundane work of getting started, and all the hoops it takes to get going. This year I want to post more often and I am taking some...&#34;&gt;Automating my Post Starter&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;Check out this post about setting up my posts with python 🐍&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;enter-bash&#34;&gt;Enter Bash &lt;a href=&#34;#enter-bash&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For the process of editing a post I just need to open the file in vim quickly.&#xA;I dont need much in the way of parsing and setting up the frontmatter.  I think&#xA;this is a simple job for a &lt;strong&gt;bash&lt;/strong&gt; script and fzf.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;change to the root of my blog&lt;/li&gt;&#xA;&lt;li&gt;fuzzy find the post&lt;/li&gt;&#xA;&lt;li&gt;open it with vim&lt;/li&gt;&#xA;&lt;li&gt;change back to the directory I was in&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;bash-function&#34;&gt;bash function &lt;a href=&#34;#bash-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For this I am going to go with a bash function.  This is partly due to being&#xA;able to track where I was and get back.  Also the line with nvim will run fzf&#xA;everytime you source your &lt;code&gt;~/.alias&lt;/code&gt; file which is not what we want.&lt;/p&gt;&#xA;&lt;p&gt;Lets setup the &lt;strong&gt;boilerplate&lt;/strong&gt;.  Its going to create a function called ep&#xA;&lt;code&gt;&amp;#34;edit post&amp;#34;&lt;/code&gt;, track our current directory, create a sub function &lt;code&gt;_ep&lt;/code&gt;.  Then&#xA;call that function and cd back to where we were no matter if &lt;code&gt;_ep&lt;/code&gt; fails or&#xA;succeeds.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;boilerplate&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;ep &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;    _ep &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;# open file here&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;    _ep &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;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2020-08-13&#34; data-description=&#34;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...&#34; data-title=&#34;Creating Reusable Bash Scripts&#34; href=&#34;/reusable-bash/&#34; data-preview=&#34;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...&#34;&gt;Creating Reusable Bash Scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;check out this post for more information about writing reusable bash scripts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;fzf&#34;&gt;FZF &lt;a href=&#34;#fzf&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Let’s focus in on that &lt;code&gt;_ep&lt;/code&gt; function here that is going to do the bulk of the&#xA;work to edit the post.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;cd to where I want to edit from&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;cd&lt;/span&gt; ~/git/waylonwalkerv2/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Next I need to find all markdown pages within my posts directory.  There is&#xA;probably a better way to filter with the &lt;code&gt;find&lt;/code&gt; command directly, but I am not&#xA;worried about perf here and I knew how to do it without google.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;find all markdown&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;find ~/git/waylonwalkerv2/src/pages/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep .md$&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now that we can list all potential posts, sending the selected post back to&#xA;neovim is as easy as piping those files into fzf inside of a command&#xA;substitution that is called with neovim.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;putting together the edit command&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;nv&#34;&gt;$EDITOR&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;find ~/git/waylonwalkerv2/src/pages/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep .md$ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&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;final-script&#34;&gt;Final Script &lt;a href=&#34;#final-script&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;small&gt;&lt;mark&gt;final ep function&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;ep &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;    _ep &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; ~/git/waylonwalkerv2/&#xA;&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;$EDITOR&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;find ~/git/waylonwalkerv2/src/pages/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep .md$ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fzf&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;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;    _ep &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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>If Tmux</title>
    <id>https://new.waylonwalker.com/if-tmux/</id>
    <updated>2021-01-09T00:00:00Z</updated>
    <published>2021-01-09T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/if-tmux/" rel="alternate" type="text/html"></link>
    <summary type="text">I do much of my work from tmux, I love it so much that I want to setup some functionality that puts me in tmux even if I didn&#39;t ask for it.</summary>
    <content type="html">&lt;p&gt;I do much of my work from tmux, I love it so much that I want to setup some&#xA;functionality that puts me in tmux even if I didn’t ask for it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;bash-function&#34;&gt;Bash Function &lt;a href=&#34;#bash-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Bash function to check if the shell is in a tmux session.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;in_tmux &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;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -n &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$TMUX&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;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&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;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;m&#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;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;h2 id=&#34;using-the-bash-function&#34;&gt;Using the bash function &lt;a href=&#34;#using-the-bash-function&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I often open up vim to do some quite edits, but before I know it I have several&#xA;splits open and I need access to another shell utility, but I forgot to start&#xA;in tmux.  This function makes sure tht I start in tmux everytime.&lt;/p&gt;&#xA;&lt;p&gt;Using &lt;code&gt;if_tmux&lt;/code&gt; to ensure vim is opened 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;vim &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;  in_tmux &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;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; nvim &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;o&#34;&gt;||&lt;/span&gt; bash -c &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;    tmux new-session -d;\&#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;    tmux send-keys nvim Space +GFiles C-m;\&#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;    tmux -2 attach-session -d;&#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;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;I am not quite sure if this is proper use of the &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; and &lt;code&gt;||&lt;/code&gt;, let me know if&#xA;you have a better way to do one thing if &lt;code&gt;in_tmux&lt;/code&gt; returns true and another if&#xA;it returns faslse.&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://new.waylonwalker.com/newsboat/</id>
    <updated>2021-01-02T00:00:00Z</updated>
    <published>2021-01-02T00:00:00Z</published>
    <link href="https://new.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://dropper.waylonwalker.com/file/36e536b1-3b10-45a3-ba3f-fb3573c3144a.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;newsboat feed&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/36e536b1-3b10-45a3-ba3f-fb3573c3144a.webp&#34; alt=&#34;newsboat feed&#34;/ data-glightbox=&#34;description: newsboat feed&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;browsing a feed in newsboat&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/61539cda-d6c8-4a55-b8aa-c6f4b88c25d0.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;newsboat article&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/61539cda-d6c8-4a55-b8aa-c6f4b88c25d0.webp&#34; alt=&#34;newsboat article&#34;/ data-glightbox=&#34;description: newsboat article&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&lt;p&gt;reading an article in newsboat&lt;/p&gt;&lt;/figcaption&gt;&lt;/figure&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Ipython Ninjitsu</title>
    <id>https://new.waylonwalker.com/ipython-ninjitsu/</id>
    <updated>2020-12-14T00:00:00Z</updated>
    <published>2020-12-14T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/ipython-ninjitsu/" rel="alternate" type="text/html"></link>
    <summary type="text">??sourcecode * %debug * %history * %reset * !shell commands</summary>
    <content type="html">&lt;ul&gt;&#xA;&lt;li&gt;?docstring&lt;/li&gt;&#xA;&lt;li&gt;??sourcecode&lt;/li&gt;&#xA;&lt;li&gt;%run&lt;/li&gt;&#xA;&lt;li&gt;%debug&lt;/li&gt;&#xA;&lt;li&gt;%autoreload&lt;/li&gt;&#xA;&lt;li&gt;%history&lt;/li&gt;&#xA;&lt;li&gt;autoformat&lt;/li&gt;&#xA;&lt;li&gt;%reset&lt;/li&gt;&#xA;&lt;li&gt;!shell commands&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;docstring&#34;&gt;?docstring &lt;a href=&#34;#docstring&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Stop going to google everytime your stuck and stay in your workflow.  The&#xA;ipython &lt;code&gt;?&lt;/code&gt; is a superhero for productivity and staying on task.&lt;/p&gt;&#xA;&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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;kedro.pipeline&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pipeline&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;Pipeline&lt;/span&gt;&lt;span class=&#34;err&#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;n&#34;&gt;Init&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;signature&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;Pipeline&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;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Iterable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Union&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;kedro&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;node&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Node&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ForwardRef&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Pipeline&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;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;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Union&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Iterable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&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;kc&#34;&gt;None&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;Docstring&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;A&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;``&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;``&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;defined&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;collection&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;``&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Node&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;``&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;objects&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;This&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&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;nc&#34;&gt;treats&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;part&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;graph&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;representation&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;provides&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;inputs&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;outputs&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;execution&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;order&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;n&#34;&gt;Init&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;docstring&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;Initialise&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;``&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;``&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;``&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Node&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;``&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;instances&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;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;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;The&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;iterable&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;``&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pipeline&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;``&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;will&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;be&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;made&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;If&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;you&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;provide&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipelines&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;among&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;those&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipelines&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;will&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;be&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;expanded&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;their&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;will&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;become&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;part&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;this&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;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&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;n&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Optional&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tags&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;be&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;applied&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pipeline&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&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;n&#34;&gt;Raises&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;ne&#34;&gt;ValueError&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;When&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;an&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;empty&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;list&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;provided&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;when&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&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;nodes&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;have&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unique&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;names&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;n&#34;&gt;CircularDependencyError&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;When&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;visiting&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;all&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nodes&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&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;possible&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;due&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;existence&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;circular&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dependency&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;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; This does jump you into a pager, a j,k or up, down to navigate, q to quit.&lt;/p&gt;&#xA;&lt;h2 id=&#34;sourcecode&#34;&gt;??sourcecode &lt;a href=&#34;#sourcecode&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Docstring not enough for you use case.  I often run into cases where the&#xA;docstring is not clear enough and I need to see the implementation for myself&#xA;to see what a function does.&lt;/p&gt;&#xA;&lt;h2 id=&#34;run&#34;&gt;%run &lt;a href=&#34;#run&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;I turned my nose up at this one, prior to seeing the famous &lt;a href=&#34;https://www.youtube.com/watch?v=7jiPeIFXb6U&#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;I don’t like&#xA;notebooks&lt;/a&gt; by&#xA;&lt;a href=&#34;https://joelgrus.com/&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/joelgrus.com.png&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/joelgrus.com.png&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;Joel Grus&lt;/a&gt;.  My first snobby reaction was that&#xA;developing modules and using autoreload was superior.  I have since realized&#xA;there is a place for &lt;code&gt;%run&lt;/code&gt;, and it can cut down on some keystrokes to import,&#xA;setup, and run even when developing in modules.&lt;/p&gt;&#xA;&lt;h2 id=&#34;debug&#34;&gt;%debug &lt;a href=&#34;#debug&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;ipython comes with a post-mortem debugger, and it can be a lifesaver.  If we&#xA;have a long running function that runs into an error it can be a complete buzzkill.&lt;/p&gt;&#xA;&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;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;long_func&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;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;time&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;time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;12&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;n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&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;df&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pd&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&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;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;df&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;long_func&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;reset&#34;&gt;%reset &lt;a href=&#34;#reset&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2020-10-01&#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-title=&#34;Reclaim memory usage in Jupyter&#34; href=&#34;/reset-ipython/&#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;h2 id=&#34;autoreload&#34;&gt;%autoreload &lt;a href=&#34;#autoreload&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2019-09-08&#34; data-description=&#34;Autoreload in python&#34; data-title=&#34;Autoreload in Ipython&#34; href=&#34;/autoreload-ipython/&#34; data-preview=&#34;Autoreload in python&#34;&gt;Autoreload in Ipython&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;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extensions&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;autoreload&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;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_lines&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;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%a&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;utoreload 2&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;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;InteractiveShellApp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec_lines&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;append&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;s1&#34;&gt;&amp;#39;print(&amp;#34;Warning: disable autoreload in ipython_config.py to improve performance.&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;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;place this in your ~/.ipython/profile_default/ipython_config.py to auto reload without needing to run the magic every time&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;autoformat&#34;&gt;autoformat &lt;a href=&#34;#autoformat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;This is a relatively new feature to ipython.  I really enjoy it, as the time&#xA;that I need the most help autoformatting my code is riffing on an ad hoc&#xA;analysis at the command line.&lt;/p&gt;&#xA;&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;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TerminalInteractiveShell&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;autoformatter&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;black&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;&#xA;&lt;p&gt;place this in your ~/.ipython/profile_default/ipython_config.py to autoformat with black by default&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;new-prompt&#34;&gt;new prompt &lt;a href=&#34;#new-prompt&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;reverse-history-search&#34;&gt;reverse history search &lt;a href=&#34;#reverse-history-search&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Control R&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;want-automatic-imports&#34;&gt;Want automatic imports?? &lt;a href=&#34;#want-automatic-imports&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2021-12-20&#34; data-description=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34; data-title=&#34;Smoother Python with automatic imports | pyflyby&#34; href=&#34;/pyflyby/&#34; data-preview=&#34;This is not a flaky works half the time kind of plugin, it&amp;#39;s a seriously smooth editing experience. I&amp;#39;ve just started using pyflyby, and it is solid so far....&#34;&gt;Smoother Python with automatic imports | pyflyby&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This article covers how I setup automatic imports in ipython&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>Scripting Tmux Layouts</title>
    <id>https://new.waylonwalker.com/scripting-tmux-layouts/</id>
    <updated>2020-12-13T00:00:00Z</updated>
    <published>2020-12-13T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/scripting-tmux-layouts/" rel="alternate" type="text/html"></link>
    <summary type="text">This is how I script a tmux layout</summary>
    <content type="html">&lt;p&gt;This is how I script a tmux layout&lt;/p&gt;&#xA;&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;tmux new-session -t &amp;#39;editor&amp;#39; -d;\&#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;    tmux split-window -v &amp;#39;zsh&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;    tmux send-keys nvim Space /src/ Space +GFiles C-m; \&#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;    tmux rotate-window; \&#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;    tmux select-pane -U; \&#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;    tmux -2 attach-session -d&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>Compare Directories In Bash</title>
    <id>https://new.waylonwalker.com/compare-directories-in-bash/</id>
    <updated>2020-12-11T00:00:00Z</updated>
    <published>2020-12-11T00:00:00Z</published>
    <link href="https://new.waylonwalker.com/compare-directories-in-bash/" rel="alternate" type="text/html"></link>
    <summary type="text">Today I needed to check for articles that used the same slug from two directories, bash made it super simple.</summary>
    <content type="html">&lt;p&gt;Today I needed to check for articles that used the same slug from two directories, bash made it super simple.&lt;/p&gt;&#xA;&lt;pre class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;diff -rq src/pages/blog src/pages/notes&#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>Find and Replace in the Terminal.</title>
    <id>https://new.waylonwalker.com/find-replace/</id>
    <updated>2020-11-12T05:00:00Z</updated>
    <published>2020-11-12T05:00:00Z</published>
    <link href="https://new.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://new.waylonwalker.com/reusable-bash/</id>
    <updated>2020-08-13T05:00:00Z</updated>
    <published>2020-08-13T05:00:00Z</published>
    <link href="https://new.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;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;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;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>How to Install miniconda on linux (from the command line only)</title>
    <id>https://new.waylonwalker.com/install-miniconda/</id>
    <updated>2020-08-10T05:00:00Z</updated>
    <published>2020-08-10T05:00:00Z</published>
    <link href="https://new.waylonwalker.com/install-miniconda/" rel="alternate" type="text/html"></link>
    <summary type="text">Installing miniconda from only the command line can be a bit of an intimidating task your first time. Lets walk through how to do it.</summary>
    <content type="html">&lt;p&gt;miniconda is a python distribution from continuum. It’s a slimmed-down version of their very popular anaconda distribution. It comes with its own environment manager and has eased the install process for many that do not have a way to compile c-extensions. It made it much easier to install the data science stack on windows a few years ago. These days windows are much better than it was back then at compiling c-extensions. I still like its environment manager, which installs to a global directory rather than a local directory for your project.&lt;/p&gt;&#xA;&lt;h2 id=&#34;installing-miniconda-on-linux&#34;&gt;Installing miniconda on Linux &lt;a href=&#34;#installing-miniconda-on-linux&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Installing miniconda on Linux can be a bit tricky the first time you do it completely from the terminal. The following snippet will create a directory to install miniconda into, download the latest python 3 based install script for Linux 64 bit, run the install script, delete the install script, then add a conda initialize to your bash or zsh shell. After doing this you can restart your shell and conda will be 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;mkdir -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init zsh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;options&#34;&gt;Options &lt;a href=&#34;#options&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The miniconda.sh script comes with a few basic options.  Most notably we used &lt;code&gt;-b&lt;/code&gt; to be able to run unattended, which means that all of the agreements are automatically accepted without user prompt.  &lt;code&gt;-u&lt;/code&gt; updates any existing installation in the directory of install if there is one. &lt;code&gt;-p&lt;/code&gt; is the directory to install into.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;usage: /root/miniconda3/miniconda.sh [options]&#xA;&#xA;Installs Miniconda3 4.6.14&#xA;&#xA;-b           run install in batch mode (without manual intervention),&#xA;             it is expected the license terms are agreed upon&#xA;-f           no error if install prefix already exists&#xA;-h           print this help message and exit&#xA;-p PREFIX    install prefix, defaults to /root/miniconda3, must not contain spaces.&#xA;-s           skip running pre/post-link/install scripts&#xA;-u           update an existing installation&#xA;-t           run package tests after installation (may install conda-build)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;silentlogged&#34;&gt;Silent/Logged &lt;a href=&#34;#silentlogged&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;A quick and easy way to silence everything or to log it to a file during an automated install is to wrap the script into a bash function, or save it to its own file, and call the file.  I like the function method since I can still copy it right into a terminal, or keep my install script as one 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;install_miniconda &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;mkdir -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf ~/miniconda3/miniconda.sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init bash&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/miniconda3/bin/conda init zsh&#xA;&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;&lt;strong&gt;normal&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;install_miniconda&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;silent&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;install_miniconda &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;strong&gt;logged&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;install_miniconda &amp;gt; miniconda_install.log 2&amp;gt;&amp;amp;1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;a class=&#34;wikilink&#34; data-date=&#34;2020-08-13&#34; data-description=&#34;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...&#34; data-title=&#34;Creating Reusable Bash Scripts&#34; href=&#34;/reusable-bash/&#34; data-preview=&#34;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...&#34;&gt;Creating Reusable Bash Scripts&lt;/a&gt;&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;This posts covers more ways to write reuable bash scripts&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;cross-posted-to-dev&#34;&gt;Cross posted to DEV &lt;a href=&#34;#cross-posted-to-dev&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Check out this post and many more on &lt;a href=&#34;https://dev.to/waylonwalker/installing-miniconda-on-linux-from-the-command-line-4ad7&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/dev.to.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/dev.to.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;dev.to/waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;See Also: &lt;a class=&#34;wikilink&#34; data-date=&#34;2021-04-21&#34; data-description=&#34;I really like using conda () as my python virtual environment manager of choice. It&amp;#39;s simple and it includes its own python interpreter using the version...&#34; data-title=&#34;How to Install micromamba on linux (from the comamnd line only)&#34; href=&#34;/install-micromamba/&#34; data-preview=&#34;I really like using conda () as my python virtual environment manager of choice. It&amp;#39;s simple and it includes its own python interpreter using the version...&#34;&gt;How to Install micromamba on linux (from the comamnd line only)&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>025.md</title>
    <id>https://new.waylonwalker.com/025/</id>
    <updated>2020-07-29T02:16:24Z</updated>
    <published>2020-07-29T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/025/" rel="alternate" type="text/html"></link>
    <summary type="text">setup</summary>
    <content type="html">&lt;h1 id=&#34;convert-markdown-to---revealjs---slides&#34;&gt;Convert &lt;strong&gt;Markdown&lt;/strong&gt; to &lt;strong&gt;reveal.js&lt;/strong&gt; slides&lt;/h1&gt;&#xA;&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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>026.md</title>
    <id>https://new.waylonwalker.com/026/</id>
    <updated>2020-07-28T05:00:00Z</updated>
    <published>2020-07-28T05:00:00Z</published>
    <link href="https://new.waylonwalker.com/026/" rel="alternate" type="text/html"></link>
    <summary type="text">setup</summary>
    <content type="html">&lt;h1 id=&#34;convert-markdown-to--revealjs--slides&#34;&gt;Convert &lt;strong&gt;Markdown&lt;/strong&gt; to &lt;em&gt;reveal.js&lt;/em&gt; slides&lt;/h1&gt;&#xA;&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&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;   -o myslides.html myslides.md &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;   -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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>inline YAML or path to separate file (e.g.: .github/filters.yaml)</title>
    <id>https://new.waylonwalker.com/024/</id>
    <updated>2020-06-21T02:16:24Z</updated>
    <published>2020-06-21T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/024/" rel="alternate" type="text/html"></link>
    <summary type="text">Conditionally run GitHub Actions Steps</summary>
    <content type="html">&lt;p&gt;Conditionally run GitHub Actions Steps&lt;/p&gt;&#xA;&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;uses&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;dorny/paths-filter@v2.2.0&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;id&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;filter&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;with&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;c&#34;&gt;# inline YAML or path to separate file (e.g.: .github/filters.yaml)&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;filters&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;      backend:&#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;          - &amp;#39;backend/**/*&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;      frontend:&#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;          - &amp;#39;frontend/**/*&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;&#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;# run only if &amp;#39;backend&amp;#39; files were changed&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;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;backend unit tests&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;if&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;steps.filter.outputs.backend == &amp;#39;true&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;run&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;...&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>023</title>
    <id>https://new.waylonwalker.com/023/</id>
    <updated>2020-06-21T02:16:24Z</updated>
    <published>2020-06-21T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/023/" rel="alternate" type="text/html"></link>
    <summary type="text">Find and replace Groups in VSCode $1 referrs to the second group</summary>
    <content type="html">&lt;p&gt;Find and replace Groups in VSCode&#xA;$1 referrs to the second group&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;(filepath: top)(.*)&#xA;filepath: s3://bucket/top$1.parquet&#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;&lt;span class=&#34;gd&#34;&gt;- filepath: top/raw/scooters&#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;gi&#34;&gt;+ filepath: s3://bucket/top/raw/scooters.parquet&#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>022</title>
    <id>https://new.waylonwalker.com/022/</id>
    <updated>2020-06-21T02:16:24Z</updated>
    <published>2020-06-21T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/022/" rel="alternate" type="text/html"></link>
    <summary type="text">_</summary>
    <content type="html">&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;em&gt;Move files then symlink them&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;with-bash&#34;&gt;with &lt;strong&gt;Bash&lt;/strong&gt; &lt;a href=&#34;#with-bash&#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;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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>021</title>
    <id>https://new.waylonwalker.com/021/</id>
    <updated>2020-06-21T02:16:24Z</updated>
    <published>2020-06-21T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/021/" rel="alternate" type="text/html"></link>
    <summary type="text">_</summary>
    <content type="html">&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;em&gt;show largest files in current directory&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;with-bash&#34;&gt;with &lt;strong&gt;Bash&lt;/strong&gt; &lt;a href=&#34;#with-bash&#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;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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>020</title>
    <id>https://new.waylonwalker.com/020/</id>
    <updated>2020-06-21T02:16:24Z</updated>
    <published>2020-06-21T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/020/" rel="alternate" type="text/html"></link>
    <summary type="text">_</summary>
    <content type="html">&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;em&gt;Show Remaining Space on Drives&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;with-bash&#34;&gt;with &lt;strong&gt;Bash&lt;/strong&gt; &lt;a href=&#34;#with-bash&#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;df -h&#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>019</title>
    <id>https://new.waylonwalker.com/019/</id>
    <updated>2020-06-21T02:16:24Z</updated>
    <published>2020-06-21T02:16:24Z</published>
    <link href="https://new.waylonwalker.com/019/" rel="alternate" type="text/html"></link>
    <content type="html">&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;h2 id=&#34;with-bash&#34;&gt;with &lt;strong&gt;bash&lt;/strong&gt; &lt;a href=&#34;#with-bash&#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;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>006</title>
    <id>https://new.waylonwalker.com/006/</id>
    <updated>2020-06-06T18:14:14Z</updated>
    <published>2020-06-06T18:14:14Z</published>
    <link href="https://new.waylonwalker.com/006/" rel="alternate" type="text/html"></link>
    <summary type="text">Setup ** for _</summary>
    <content type="html">&lt;p&gt;Setup &lt;strong&gt;pre-commit&lt;/strong&gt; for &lt;em&gt;isort&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;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;repo&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://github.com/asottile/seed-isort-config&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;rev&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;v2.1.1&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;hooks&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;id&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;seed-isort-config&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;repo&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://github.com/pre-commit/mirrors-isort&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;rev&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;v4.3.21&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;hooks&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;id&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;isort&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;&lt;em&gt;includes automatic&lt;/em&gt; .isort-config&lt;/p&gt;&#xA;</content>
    <author>
      <name>Waylon Walker</name>
      <email>hello@waylonwalker.com</email>
      <uri>https://waylonwalker.com</uri>
    </author>
  </entry>
  <entry>
    <title>git push without setting upstream</title>
    <id>https://new.waylonwalker.com/git-push-without-setting-upstream/</id>
    <updated>2020-02-04T12:18:00Z</updated>
    <published>2020-02-04T12:18:00Z</published>
    <link href="https://new.waylonwalker.com/git-push-without-setting-upstream/" rel="alternate" type="text/html"></link>
    <summary type="text">Finally after years of hand typing out a full I found there is a setting to automatcally push to the current branch. More realisitically I just did a let git...</summary>
    <content type="html">&lt;p&gt;Finally after years of hand typing out a full &lt;code&gt;git push --upstream my_really_long_and_descriptive_branch_name&lt;/code&gt; I found there is a setting to&#xA;automatcally push to the current branch. More realisitically I just did a &lt;code&gt;git push&lt;/code&gt; let &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; yell at me, and copying the suggestion.&lt;/p&gt;&#xA;&lt;h2 id=&#34;git-config&#34;&gt;git config &lt;a href=&#34;#git-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;git config --global push.default current&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This one setting will now &lt;code&gt;git push&lt;/code&gt; to the current branch without yelling at&#xA;you that your upstream does not match your current branch.  This helps me ship&#xA;chnages faster as I am constantly chnaging projects and branches.&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 click</title>
    <id>https://new.waylonwalker.com/simple-click/</id>
    <updated>2020-01-29T06:00:00Z</updated>
    <published>2020-01-29T06:00:00Z</published>
    <link href="https://new.waylonwalker.com/simple-click/" rel="alternate" type="text/html"></link>
    <summary type="text">Add helpful cli to your python libraries... All of them!</summary>
    <content type="html">&lt;p&gt;cli tools are super handy and easy to add to your python libraries to supercharge them. Even if your library is not a cli tool there are a number of things that a cli can do to your library.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example-ideas&#34;&gt;Example Ideas &lt;a href=&#34;#example-ideas&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Things a cli can do to enhance your library.&lt;/p&gt;&#xA;&lt;p&gt;🆚 print version&#xA;🕶 print readme&#xA;📝 print changelog&#xA;📃 print config&#xA;✏ change config&#xA;👩‍🎓 run a tutorial&#xA;🏗 scaffold a project with cookiecutter&lt;/p&gt;&#xA;&lt;h2 id=&#34;-clickhttpsclickpalletsprojectscom&#34;&gt;🖱 &lt;a href=&#34;https://click.palletsprojects.com/&#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;Click&lt;/a&gt; &lt;a href=&#34;#-clickhttpsclickpalletsprojectscom&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://click.palletsprojects.com/&#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;Click&lt;/a&gt; is the most popular python cli tool framework for python. There are others, some old, some new comers that make take the crown. For now &lt;a href=&#34;https://click.palletsprojects.com/&#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;Click&lt;/a&gt; is the gold standard if you want to make a powerful cli quickly. If you are dependency conscious and dont need a lot of tooling, use &lt;a href=&#34;https://docs.python.org/3/library/argparse.html&#34; style=&#34;--favicon-url: url(&amp;#39;/assets/markata/link-avatars/docs.python.org.ico&amp;#39;);&#34; data-favicon=&#34;/assets/markata/link-avatars/docs.python.org.ico&#34; class=&#34;has-avatar  has-avatar-before&#34;&gt;argparse&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;project-structure&#34;&gt;Project Structure &lt;a href=&#34;#project-structure&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;.&#xA;├── setup.py&#xA;└── simple_click&#xA;    ├── cli.py&#xA;    └── __init__.py&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;-clipy&#34;&gt;❯ cli.py &lt;a href=&#34;#-clipy&#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;# simple_click/cli.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;    &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;click&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;__version__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.0.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;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nd&#34;&gt;@click.group&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;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;cli&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;pass&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;nd&#34;&gt;@cli.command&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;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;version&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;&amp;#34;&amp;#34;prints project version&amp;#34;&amp;#34;&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;n&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;echo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__version__&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;&#xA;&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; &lt;span class=&#34;vm&#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;__main__&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;n&#34;&gt;cli&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;-initpy&#34;&gt;✨ &lt;strong&gt;init&lt;/strong&gt;.py &lt;a href=&#34;#-initpy&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;For our simple_click library &lt;code&gt;__init__.py__&lt;/code&gt; can be left empty. It is here purely to signify that simple_click is a library. It is likely that you will import other modules here that need to reside at the top level of your library api, your cli does not need to be at the top of of your api.&lt;/p&gt;&#xA;&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;# __init__.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;-entry-points&#34;&gt;🚪 Entry Points &lt;a href=&#34;#-entry-points&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;Entry points are the magic that make python cli tools available as their own command without having python before it or the file extension.&lt;/p&gt;&#xA;&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;# setup.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;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;setuptools&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;setup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;find_packages&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;# this is the 🥩 meat of this snippet&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;# simple_click is the command name&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;# = simple_click is the library name&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;# .cli is the cli.py 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;    &lt;span class=&#34;c1&#34;&gt;# :cli is the cli function&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;# the second item is a shorthand alias to the main 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;&#xA;&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;entry_points&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;s2&#34;&gt;&amp;#34;simple_click = simple_click.cli:cli&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;scli         = simple_click.cli:cli&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;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;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;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;simple_click&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;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1.0.0&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;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://github.com/mypackage.git&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;n&#34;&gt;packages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find_packages&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;entry_points&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;console_scripts&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;entry_points&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;p&#34;&gt;)&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;figure&gt;&#xA;&lt;a href=&#34;https://dropper.wayl.one/file/fadd503a-0ae8-42eb-9c53-628c26424631.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Simple-click-in-action&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.wayl.one/file/fadd503a-0ae8-42eb-9c53-628c26424631.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.wayl.one/file/fadd503a-0ae8-42eb-9c53-628c26424631.mp4&#34; type=&#34;video/mp4&#34;&gt;Simple-click-in-action&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;-discuss&#34;&gt;📢 Discuss &lt;a href=&#34;#-discuss&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;What do You wish more python libraries included in their cli?  &lt;a href=&#34;https://twitter.com/intent/tweet?text=@_waylonwalker%20More%20libraries%20should%20...%0A%0Awaylonwalker.com/b/scli&#34;&gt;Tweet it @_waylonwalker&lt;/a&gt;&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://twitter.com/intent/tweet?text=@_waylonwalker%20More%20libraries%20should%20...%0A%0Awaylonwalker.com/b/scli&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Tweet it @_waylonwalker&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://twitter.com/intent/tweet?text=@_waylonwalker%20More%20libraries%20should%20...%0A%0Awaylonwalker.com/b/scli&#34; alt=&#34;Tweet it @_waylonwalker&#34;/ data-glightbox=&#34;description: Tweet it @_waylonwalker&#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>cmd.exe tips</title>
    <id>https://new.waylonwalker.com/cmd-exe-tips/</id>
    <updated>2020-01-23T15:18:45Z</updated>
    <published>2020-01-23T15:18:45Z</published>
    <link href="https://new.waylonwalker.com/cmd-exe-tips/" rel="alternate" type="text/html"></link>
    <summary type="text">cmd.exe tips</summary>
    <content type="html">&lt;p&gt;I spend a lot of my time at the terminal for my daily work, mostly in Linux or wsl.  One big reason for using wsl over cmd.exe is the ease of walking through history that fzf provides.  This week we had a windows bug in a cli and I was stuck in vanilla cmd.exe 😭&lt;/p&gt;&#xA;&lt;h2 id=&#34;-cmder&#34;&gt;&amp;gt; Cmder &lt;a href=&#34;#-cmder&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/8cd2707c-4458-493b-910b-4a4721bdf4e2.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/8cd2707c-4458-493b-910b-4a4721bdf4e2.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;First off if you are stuck using cmd.exe, do yourself a favor and get cmder.  It makes life just a bit easier.  It is super confugurable and comes with several power ups that make it a bit more enjoyable than cmd.exe.&lt;/p&gt;&#xA;&lt;h2 id=&#34;history&#34;&gt;History &lt;a href=&#34;#history&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;F7&lt;/strong&gt; - Scroll through history&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;F8&lt;/strong&gt; - Search history based&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example &lt;a href=&#34;#example&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/131f1881-dae4-45c2-983d-432dc53c33bb.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/131f1881-dae4-45c2-983d-432dc53c33bb.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/131f1881-dae4-45c2-983d-432dc53c33bb.mp4&#34; type=&#34;video/mp4&#34;&gt;image&lt;/video&gt;&lt;/a&gt;&#xA;&lt;/figure&gt;&#xA;&lt;h2 id=&#34;bat&#34;&gt;.bat &lt;a href=&#34;#bat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;The next simple technique is to save your commands into a .bat file. Any valid command ran with cmd.exe can be saved into a bat file and called again later by running it in the terminal.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;save your command&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;use f7/f8 to get your command back add &lt;code&gt;&amp;gt; filename.bat&lt;/code&gt; at the end, hit the home key and add echo to the front.  &lt;strong&gt;Do not&lt;/strong&gt; wrap with quotes.  This is not bash.&lt;/p&gt;&#xA;&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; python cmd_example.py &amp;gt; cmd_example.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;» append&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;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; python cmd_example2.py &amp;gt;&amp;gt; cmd_example.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;type-not-cat&#34;&gt;type not cat &lt;a href=&#34;#type-not-cat&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;To ensure that you got the command right… and didn’t forget that you were in cmd.exe instead of bash and add quotes. you will want to see the file contents. For this reach for &lt;strong&gt;type&lt;/strong&gt; not &lt;strong&gt;cat&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;&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; cmd_example.bat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;results&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;python cmd_example.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python cmd_example2.py&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;your-quick-tips&#34;&gt;Your quick tips &lt;a href=&#34;#your-quick-tips&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;let me know what quick cmd.exe tips you have.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://twitter.com/intent/tweet?text=@waylonwalker%20my%20favorite%20cmd.exe%20tip%20is%20...%20https%3A//waylonwalker.com/blog/cmd-exe-tips/&#34; title=&#34;tweet your tip&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/898fa904-e12d-48e7-98d7-9b4dd78d5716.webp&#34; alt=&#34;tweet your tip&#34; title=&#34;tweet your tip&#34;/ data-glightbox=&#34;description: tweet your tip&#34;&gt;&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>Supercharge Zsh Startup</title>
    <id>https://new.waylonwalker.com/supercharge-zsh-startup/</id>
    <updated>2020-01-03T06:00:00Z</updated>
    <published>2020-01-03T06:00:00Z</published>
    <link href="https://new.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://dropper.waylonwalker.com/file/d974ba61-feb5-43ad-9003-62ec8d234ef1.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/d974ba61-feb5-43ad-9003-62ec8d234ef1.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&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;&lt;/figcaption&gt;&lt;/figure&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://dropper.waylonwalker.com/file/cf1a0790-b953-47a1-9381-3fc65ecc54a4.webp&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://dropper.waylonwalker.com/file/cf1a0790-b953-47a1-9381-3fc65ecc54a4.webp&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#34;&gt;&lt;/a&gt;&#xA;&lt;figcaption&gt;&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;&lt;/figcaption&gt;&lt;/figure&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; aria-label=&#34;image&#34;&gt;&lt;img class=&#34;glightbox&#34; src=&#34;https://waylonwalker.com/type-while-loading-plugins.gif&#34; alt=&#34;image&#34;/ data-glightbox=&#34;description: image&#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; aria-label=&#34;2020-01-04 12-36-31_Cortana.png&#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>Amazon Web Services</title>
    <id>https://new.waylonwalker.com/amazon-web-services/</id>
    <updated>2019-09-22T05:00:00Z</updated>
    <published>2019-09-22T05:00:00Z</published>
    <link href="https://new.waylonwalker.com/amazon-web-services/" rel="alternate" type="text/html"></link>
    <summary type="text">I started using aws in March 2019. Here are some of my notes.</summary>
    <content type="html">&lt;p&gt;I started using aws in March 2019. Here are some of my notes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;aws-cli&#34;&gt;aws-cli &lt;a href=&#34;#aws-cli&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;ec-2&#34;&gt;ec-2 &lt;a href=&#34;#ec-2&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;sagemaker&#34;&gt;SageMaker &lt;a href=&#34;#sagemaker&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;s3&#34;&gt;S3 &lt;a href=&#34;#s3&#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>📝 Bash Notes</title>
    <id>https://new.waylonwalker.com/bash/</id>
    <updated>2019-09-08T05:00:00Z</updated>
    <published>2019-09-08T05:00:00Z</published>
    <link href="https://new.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 class=&#34;wikilink&#34; data-date=&#34;2020-12-30&#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-title=&#34;Large Refactor At The Command Line&#34; href=&#34;/refactor-in-cli/&#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;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 class=&#34;wikilink&#34; data-date=&#34;2021-06-10&#34; data-description=&#34;bash&#34; data-title=&#34;Maintianing multiple git repos with mu-repo&#34; href=&#34;/mu-repo/&#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>
  <entry>
    <title>Keyboard Driven VSCode</title>
    <id>https://new.waylonwalker.com/keyboard-driven-vscode/</id>
    <updated>2019-07-07T05:00:00Z</updated>
    <published>2019-07-07T05:00:00Z</published>
    <link href="https://new.waylonwalker.com/keyboard-driven-vscode/" rel="alternate" type="text/html"></link>
    <summary type="text">Reimagining my tmux configuration inside of vscode.</summary>
    <content type="html">&lt;blockquote&gt;&#xA;&lt;p&gt;Throw that mouse Away its time to setup some keyboard shortcuts.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These sortcuts were the baseline for switching from tmux/vim to vscode.  Most folks posts I was able to find gave great tips on replacing vim, but very few have focused on the hackability of tmux.  tmux allows me to rapidly fire up a workspace, create new windows and splits.  Then When I switch tasks I can leave that workspace open and and jump right back in later exactly where I left off.  There is nothing quite like it.  The shortcuts listed here make the transition a bit better. The worst thing I found when using vscode at first was no way to switch between the terminal and editor without the mouse.  This first set of keybindings solve that issue.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;The worst thing I found when using vscode at first was no way to switch between the terminal and editor without the mouse.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;!!! see-also&#xA;I have an updated article in my tmux workflow &lt;a class=&#34;wikilink&#34; data-date=&#34;2021-05-11&#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-title=&#34;How I navigate tmux in 2021&#34; href=&#34;/tmux-nav-2021/&#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;h2 id=&#34;althjkl&#34;&gt;Alt+[hjkl] &lt;a href=&#34;#althjkl&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;navigation&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;⬅ jump to &lt;strong&gt;left&lt;/strong&gt; split &lt;strong&gt;alt+h&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⬇ jump to &lt;strong&gt;terminal&lt;/strong&gt; from editor &lt;strong&gt;alt+j&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⬆ jump to &lt;strong&gt;editor&lt;/strong&gt; from terminal &lt;strong&gt;alt+k&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;➡ jump to &lt;strong&gt;right&lt;/strong&gt; split &lt;strong&gt;alt+l&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is by var the most useful set of keybindings that I use in vscode and is directly replicated from my tmux configuration.  It allows me to quickly jump up, down, left, right.  Do note that if you use vertical splits it does not work as well as tmux 😢.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/14099538-c447-4c61-a2cd-c0e6b1a8f734.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;navigating vscode with keyboard shortcuts&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/14099538-c447-4c61-a2cd-c0e6b1a8f734.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/14099538-c447-4c61-a2cd-c0e6b1a8f734.mp4&#34; type=&#34;video/mp4&#34;&gt;navigating vscode with keyboard shortcuts&lt;/video&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;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+j&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focus&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;&#xA;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+k&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusFirstEditorGroup&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+k&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusAboveGroup&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+l&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;-toggleFindInSelection&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+l&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusNextGroup&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+h&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.focusPreviousGroup&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;&#xA;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+l&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusNextPane&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+h&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusPreviousPane&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altb&#34;&gt;Alt+b &lt;a href=&#34;#altb&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;toggle bloat&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Since closing the sidebar is assigned to &lt;code&gt;ctrl+b&lt;/code&gt; I thought that it made most sense to simulate the activity bar with &lt;code&gt;alt+b&lt;/code&gt;.  There are many times when I just want to get as much out of the way as possible and this little bit does help.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/9d242951-baed-4d2d-813d-753e56290972.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;hiding the activity bar&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/9d242951-baed-4d2d-813d-753e56290972.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/9d242951-baed-4d2d-813d-753e56290972.mp4&#34; type=&#34;video/mp4&#34;&gt;hiding the activity bar &lt;/video&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;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+b&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.toggleActivityBarVisibility&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altsvx&#34;&gt;Alt+[svx] &lt;a href=&#34;#altsvx&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;em&gt;Split it up&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;🙌 Split hoizontally &lt;strong&gt;alt+s&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;🍌 Vertically &lt;strong&gt;alt+v&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;💥 Close &lt;strong&gt;alt+x&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This is another one replicated from tmux for quickly creatiting horizontal (s) and vertical (v) splits.  Once I am done with them I can close them with alt+x.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/b073a7cf-01ff-4705-ae11-e6cd41109792.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;Make and destroy splits with ease in vscode.&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/b073a7cf-01ff-4705-ae11-e6cd41109792.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/b073a7cf-01ff-4705-ae11-e6cd41109792.mp4&#34; type=&#34;video/mp4&#34;&gt;Make and destroy splits with ease in vscode.&lt;/video&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;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+s&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.split&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+s&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.splitEditor&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+v&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.splitEditorOrthogonal&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+x&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.kill&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+x&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.closeActiveEditor&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editorFocus&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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altcnp&#34;&gt;Alt+[cnp] &lt;a href=&#34;#altcnp&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🤲 &lt;strong&gt;Create&lt;/strong&gt; new workspace &lt;strong&gt;alt+c&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⏭ jump to &lt;strong&gt;next&lt;/strong&gt; workspace &lt;strong&gt;alt+n&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;⏮ jump to &lt;strong&gt;previous&lt;/strong&gt; workspace &lt;strong&gt;alt+p&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Sometimes the terminal window gets a bit cramped inside of splits and you need to use different panes.  I replicated the cnp pattern from tmux here as well.  I can create (c) new panes, then go to the next (n), or previous (p) without leaving the comfort of my keyboard.&lt;/p&gt;&#xA;&lt;p&gt;I am often using this one when I have a process running that I watch like gatsby, and I need to quickly pop into a new pane to run 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; command and back in to gatsby before jumping up to my editor.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/f8c775ad-514a-4b7d-a823-27885da8a2df.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/f8c775ad-514a-4b7d-a823-27885da8a2df.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/f8c775ad-514a-4b7d-a823-27885da8a2df.mp4&#34; type=&#34;video/mp4&#34;&gt;image&lt;/video&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;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+c&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.new&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+n&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusNext&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;&#xA;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+p&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.terminal.focusPrevious&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;nt&#34;&gt;&amp;#34;when&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;terminalFocus&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;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;altz&#34;&gt;Alt+z &lt;a href=&#34;#altz&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🗻 Zoom into terminal &lt;strong&gt;alt+z&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;This last one doesnt work as well as I would like but it sure does get the job done.  It Zooms (z) into the terminal from anywhere in vscode.  I can be in my editor and zoom out of the terminal to make more room, or zoom in to see what happened from my last edit.&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;a href=&#34;https://dropper.waylonwalker.com/file/a70d8ace-1cf3-4d71-aa72-c27ef1f07cf9.mp4&#34; class=&#34;glightbox-link&#34; aria-label=&#34;image&#34;&gt;&lt;video autoplay loop muted playsinline controls preload=&#34;metadata&#34; class=&#34;md-video&#34; poster=&#34;https://dropper.waylonwalker.com/file/a70d8ace-1cf3-4d71-aa72-c27ef1f07cf9.webp?h=675&amp;w=1200&#34;&gt;&lt;source src=&#34;https://dropper.waylonwalker.com/file/a70d8ace-1cf3-4d71-aa72-c27ef1f07cf9.mp4&#34; type=&#34;video/mp4&#34;&gt;image&lt;/video&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;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+z&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;workbench.action.toggleMaximizedPanel&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;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;bonus&#34;&gt;Bonus &lt;a href=&#34;#bonus&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;h2 id=&#34;altr&#34;&gt;Alt+r &lt;a href=&#34;#altr&#34; class=&#34;heading-anchor&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;🖱 right click in place&lt;/p&gt;&#xA;&lt;p&gt;I recently found this one, and find it quite useful to quickly do things like revert selected range, or extract variable without leaving the keyboard.&lt;/p&gt;&#xA;&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;&#xA;&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;nt&#34;&gt;&amp;#34;key&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;alt+r&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;nt&#34;&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;editor.action.showContextMenu&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;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>
</feed>