<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Josh Medeski</title><description>Building tools for focus and creative flow.</description><link>https://joshmedeski.com/</link><item><title>Tuning Your Claude Code Settings</title><link>https://joshmedeski.com/posts/tuning-your-claude-code-settings/</link><guid isPermaLink="true">https://joshmedeski.com/posts/tuning-your-claude-code-settings/</guid><description>A short guide to the Claude Code settings I&apos;ve changed, why I changed them, and the community tips I evaluated but skipped.</description><pubDate>Mon, 20 Jul 2026 12:00:00 GMT</pubDate><category>claude-code</category></item><item><title>The Case for Breaks in the AI Era</title><link>https://joshmedeski.com/posts/the-case-for-breaks-in-the-ai-era/</link><guid isPermaLink="true">https://joshmedeski.com/posts/the-case-for-breaks-in-the-ai-era/</guid><description>The science on why rest, sleep, and hobbies aren&apos;t slacking — they&apos;re the highest-leverage move you have in the AI era.</description><pubDate>Fri, 29 May 2026 12:00:00 GMT</pubDate><category>growth</category><category>ai</category></item><item><title>The Hidden Cost of Node.js Flexibility</title><link>https://joshmedeski.com/posts/the-hidden-cost-of-nodejs-flexibility/</link><guid isPermaLink="true">https://joshmedeski.com/posts/the-hidden-cost-of-nodejs-flexibility/</guid><description>How circular dependencies cause intermittent test failures and what to do about them</description><pubDate>Wed, 28 Jan 2026 15:00:00 GMT</pubDate><content:encoded>&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;ReferenceError:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;someFunction&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;is&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;not&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;defined&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ReferenceError: someFunction is not defined&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;That error haunted me for weeks. It showed up intermittently in our Vitest runs - sometimes tests passed, sometimes they didn’t. No code changes between runs. Just… chaos.&lt;/p&gt;
&lt;p&gt;After more debugging than I’d like to admit, I found the culprit: circular dependencies.&lt;/p&gt;
&lt;h2 id=&quot;nodejs-doesnt-care-until-it-does&quot;&gt;Node.js Doesn’t Care (Until It Does)&lt;/h2&gt;
&lt;p&gt;Here’s the thing about Node.js - it’s incredibly permissive. You can create modules and import them in any direction you want. Module A imports Module B? Fine. Module B imports Module A right back? Also fine. No warnings, no errors at build time.&lt;/p&gt;
&lt;p&gt;Until your test runner loads modules in a slightly different order and suddenly a function that &lt;em&gt;should&lt;/em&gt; exist… doesn’t.&lt;/p&gt;
&lt;p&gt;The real gut punch came when I ran &lt;a href=&quot;https://github.com/pahen/madge&quot;&gt;madge&lt;/a&gt; on our codebase:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;madge&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--circular&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--extensions&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;ts&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;src/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;npx madge --circular --extensions ts src/&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Hundreds. Hundreds of circular dependencies.&lt;/p&gt;
&lt;h3 id=&quot;the-order-problem&quot;&gt;The Order Problem&lt;/h3&gt;
&lt;p&gt;The reason these failures are intermittent comes down to module loading order. Imagine three modules with circular dependencies. When your test runner loads &lt;code&gt;userService.test.ts&lt;/code&gt;, it might resolve dependencies in order X→Y→Z. But when it loads &lt;code&gt;billingService.test.ts&lt;/code&gt;, those same underlying modules might load in order Y→X→Z.&lt;/p&gt;
&lt;p&gt;In a circular dependency, that order difference determines whether an export is defined or &lt;code&gt;undefined&lt;/code&gt; at the exact moment it’s accessed. Same code, different execution path, different result.&lt;/p&gt;
&lt;h2 id=&quot;why-this-happens&quot;&gt;Why This Happens&lt;/h2&gt;
&lt;p&gt;It’s not always bad code. Sometimes it’s just… reality.&lt;/p&gt;
&lt;p&gt;At &lt;a href=&quot;https://www.nutiliti.com/&quot;&gt;nutiliti&lt;/a&gt;, we work with bills and houses. Bills belong to houses. But houses also have bills. The domain relationships are genuinely circular. When you’re modeling real-world concepts, clean one-directional dependencies aren’t always possible.&lt;/p&gt;
&lt;p&gt;But more often, circular dependencies sneak in through:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Barrel files.&lt;/strong&gt; Those convenient &lt;code&gt;index.ts&lt;/code&gt; files that re-export everything from a directory. Your tsconfig might even auto-suggest the barrel import instead of the direct file. You import from &lt;code&gt;@/features/billing&lt;/code&gt; instead of &lt;code&gt;@/features/billing/calculateTotal&lt;/code&gt;, and suddenly you’ve pulled in the entire module graph.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Organic growth.&lt;/strong&gt; Developer A adds a utility to Module X. Developer B needs that utility in Module Y, which Module X already imports. Quick fix: import it anyway. The cycle is born.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Convenience over structure.&lt;/strong&gt; It’s faster to import what you need from wherever it exists than to think about whether that import makes architectural sense.&lt;/p&gt;
&lt;h2 id=&quot;but-it-works-in-production&quot;&gt;But It Works in Production…&lt;/h2&gt;
&lt;p&gt;If circular dependencies are such a problem, why does the application run fine in production?&lt;/p&gt;
&lt;p&gt;Because your production environment is hiding the fragility.&lt;/p&gt;
&lt;p&gt;Traditional build tools - a simple &lt;code&gt;tsc&lt;/code&gt; compile, legacy bundlers, straightforward Node.js execution - load modules synchronously in a deterministic order. They figure out &lt;em&gt;an&lt;/em&gt; order that works and stick with it. Every deploy, same order, same result.&lt;/p&gt;
&lt;p&gt;Modern tooling doesn’t give you that safety net. Vitest, built on Vite’s philosophy of native ESM and on-demand module loading, isolates each test file with its own module context. Modules load lazily as tests request them. That isolation means each test can stumble into a different - and potentially broken - loading order.&lt;/p&gt;
&lt;p&gt;Vitest became our canary in the coal mine. The intermittent test failures weren’t a bug in the test runner. They were revealing fragility that our production environment happened to hide.&lt;/p&gt;
&lt;p&gt;This matters beyond testing. If you want to adopt modern build systems - faster bundlers, better treeshaking, improved hot module replacement - circular dependencies become a blocker. The tools that enable those features also enable the chaos. Addressing circular dependencies isn’t just about fixing flaky tests. It’s about keeping your options open for the future.&lt;/p&gt;
&lt;h2 id=&quot;what-good-actually-looks-like&quot;&gt;What Good Actually Looks Like&lt;/h2&gt;
&lt;p&gt;I know strict dependency injection is possible because I’ve done it - just not in Node.js.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/joshmedeski/sesh&quot;&gt;Sesh&lt;/a&gt; is a terminal session manager I built in Go. When I rewrote it for version 2, I used the dependency injection patterns that Go’s ecosystem actively encourages. The architecture has four distinct layers:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;CLI Layer (commands, flags, user interaction)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Domain Layer (lister, connector, namer - core business logic)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Integration Layer (tmux, zoxide, git wrappers)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;Wrapper Layer (execwrap, oswrap - system abstractions)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;CLI Layer (commands, flags, user interaction)    ↓Domain Layer (lister, connector, namer - core business logic)    ↓Integration Layer (tmux, zoxide, git wrappers)    ↓Wrapper Layer (execwrap, oswrap - system abstractions)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Dependencies flow in one direction: down. The CLI layer depends on the domain layer, which depends on integrations, which depend on wrappers. Never the reverse. All instantiation happens in one place, with constructor functions wiring everything together.&lt;/p&gt;
&lt;p&gt;The result? Exhaustive mocking. Structured unit tests for every piece of the application. When I need to test the &lt;code&gt;Connector&lt;/code&gt;, I inject mock implementations of &lt;code&gt;Tmux&lt;/code&gt; and &lt;code&gt;Zoxide&lt;/code&gt;. The boundaries are crystal clear.&lt;/p&gt;
&lt;p&gt;But here’s the uncomfortable truth: &lt;strong&gt;this required a complete rewrite.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Version 1 of Sesh wasn’t architected this way. Getting to this level of structure meant starting over with the pattern in mind from day one. Go’s community expects this approach - interfaces, constructor injection, clear layer boundaries. The language and tooling reinforce it.&lt;/p&gt;
&lt;p&gt;Node.js doesn’t.&lt;/p&gt;
&lt;h2 id=&quot;the-gap-between-ideal-and-reality&quot;&gt;The Gap Between Ideal and Reality&lt;/h2&gt;
&lt;p&gt;What I learned from Sesh is that other communities &lt;em&gt;do&lt;/em&gt; care about this. They have real solutions. But those solutions require either:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Starting with strict patterns from the beginning, or&lt;/li&gt;
&lt;li&gt;Committing to a significant rewrite&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In a real-world Node.js codebase with multiple developers, competing business goals, and years of organic growth? Expecting that level of organization is… unlikely. Not impossible. But unlikely.&lt;/p&gt;
&lt;p&gt;The pressure to ship features will always conflict with the desire for architectural cleanliness. And unlike Go, nothing in the Node.js ecosystem pushes back when you take the convenient path.&lt;/p&gt;
&lt;h2 id=&quot;the-compounding-problem&quot;&gt;The Compounding Problem&lt;/h2&gt;
&lt;p&gt;Here’s what made this genuinely difficult: I couldn’t just fix it.&lt;/p&gt;
&lt;p&gt;With hundreds of existing circular dependencies, I couldn’t enable any tooling that would block new ones. No ESLint rule, no pre-commit hook. Every new PR would fail against issues that predated it.&lt;/p&gt;
&lt;p&gt;So while I worked through the backlog with madge, new developers were unknowingly creating more cycles. Two steps forward, one step back.&lt;/p&gt;
&lt;p&gt;Tools that can help:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pahen/madge&quot;&gt;madge&lt;/a&gt; - Visualize and detect circular dependencies&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/vite-plugin-circular-dependency&quot;&gt;vite-plugin-circular-dependency&lt;/a&gt; - Catch cycles in your Vite build&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sergiocarracedo.es/circular-dependencies/&quot;&gt;ESLint import/no-cycle&lt;/a&gt; - Block new cycles (once you’ve cleared existing ones)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-actual-fix-think-top-down&quot;&gt;The Actual Fix: Think Top-Down&lt;/h2&gt;
&lt;p&gt;The solution isn’t a tool. It’s a mental model.&lt;/p&gt;
&lt;p&gt;Dependency injection. Understanding which code depends on which. Always passing dependencies &lt;em&gt;down&lt;/em&gt;, never reaching back up.&lt;/p&gt;
&lt;p&gt;Think of your codebase as a tree. Data flows from trunk to branches to leaves. A leaf can use what the branch provides, but it should never reach back to grab something from the trunk directly.&lt;/p&gt;
&lt;p&gt;In practice:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Core utilities at the bottom, imported by everything, importing nothing domain-specific&lt;/li&gt;
&lt;li&gt;Domain modules in the middle, importing utilities, exporting to features&lt;/li&gt;
&lt;li&gt;Features at the top, importing from domains, never imported by them&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you’re about to add an import, ask: “Am I reaching up or down?”&lt;/p&gt;
&lt;h2 id=&quot;what-i-havent-solved&quot;&gt;What I Haven’t Solved&lt;/h2&gt;
&lt;p&gt;I’ll be honest - the barrel file problem still bites us.&lt;/p&gt;
&lt;p&gt;TypeScript’s auto-import suggestions often prefer the &lt;code&gt;index.ts&lt;/code&gt; path over the direct file path. It’s more convenient, the import looks cleaner. But it pulls in more than you need and dramatically increases cycle risk.&lt;/p&gt;
&lt;p&gt;I don’t have a great answer yet. We’re experimenting with being more intentional about what barrel files export, but it’s friction against developer convenience.&lt;/p&gt;
&lt;p&gt;Some problems don’t have clean solutions. You just… manage them.&lt;/p&gt;
&lt;h2 id=&quot;the-takeaway&quot;&gt;The Takeaway&lt;/h2&gt;
&lt;p&gt;Node.js gives you freedom. That freedom has a cost.&lt;/p&gt;
&lt;p&gt;If your tests are failing intermittently with bizarre “not defined” errors, check for circular dependencies. If you find some, assume there are more. And if you’re starting a new project, set up detection &lt;em&gt;before&lt;/em&gt; the cycles accumulate.&lt;/p&gt;
&lt;p&gt;The best time to prevent circular dependencies was at project start. The second best time is now - before that number grows from dozens to hundreds.&lt;/p&gt;</content:encoded><category>development</category></item><item><title>How To Use Git Worktrees to Switch Contexts Quickly and Easily</title><link>https://joshmedeski.com/posts/how-to-use-git-worktrees/</link><guid isPermaLink="true">https://joshmedeski.com/posts/how-to-use-git-worktrees/</guid><description>How I set up my Git Worktrees and how I use them to stay productive.</description><pubDate>Mon, 05 Jan 2026 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Git Worktrees have become an invaluable piece of my workflow. They allow me to switch between contexts quickly and easily, isolate breaking changes, and do code reviews without disrupting my current work. In this post, I’m going to break down how I set up my Git Worktrees and how I use them to stay productive.&lt;/p&gt;
&lt;h2 id=&quot;why-use-git-worktrees&quot;&gt;Why Use Git Worktrees?&lt;/h2&gt;
&lt;p&gt;Not every repository needs to be using the worktree system. If a project is simple, strictly for research, or something you visit only once in a blue moon, the standard structure works fine. However, you should consider worktrees if you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Do code reviews:&lt;/strong&gt; You need to check out other people’s branches frequently without messing up your current state.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handle breaking changes:&lt;/strong&gt; You work on dependency upgrades or architecture changes that are hard to switch back and forth from.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work in Monorepos:&lt;/strong&gt; You have sub-projects within one repo and want to isolate specific areas of code.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Context switch often:&lt;/strong&gt; You are patching production, doing hotfixes, or working on multiple branches throughout the same day with incomplete states.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are a full-time programmer, you will likely find worktrees beneficial for managing these different areas of responsibility seamlessly.&lt;/p&gt;
&lt;p&gt;My friend, Nick Nisi, has an &lt;a href=&quot;https://nicknisi.com/posts/git-worktrees/&quot;&gt;in-depth guide&lt;/a&gt; that I recommend reading as well. Let’s get into my specific setup and how I use Git Worktrees in my daily workflow. I will cover how I set up the directory structure, how I create worktrees, and how I manage branches and sessions with tools like Sesh, GH Dash, Octo, and Treekanga to optimize my workflow.&lt;/p&gt;
&lt;p&gt;By the end of this post, you should have a clear understanding of how to implement Git Worktrees in your own projects effectively. Let’s dive in!&lt;/p&gt;
&lt;h2 id=&quot;setting-up-the-directory-structure&quot;&gt;Setting Up the Directory Structure&lt;/h2&gt;
&lt;p&gt;First, decide where to clone repositories. I keep it simple with a directory called &lt;code&gt;C&lt;/code&gt; (for code) in my home directory. When creating worktrees, I recommend creating a parent folder with a simplified name for the project.&lt;/p&gt;
&lt;p&gt;For example, for my project &lt;a href=&quot;https://github.com/joshmedeski/sesh&quot;&gt;Sesh&lt;/a&gt;, I would run:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/c&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;sesh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;sesh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;cd ~/cmkdir seshcd sesh&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Inside this directory, I clone the repository as a bare repo. I prefer naming the folder &lt;code&gt;.git&lt;/code&gt; rather than &lt;code&gt;.bare&lt;/code&gt; to keep it consistent with standard Git conventions.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--bare&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&amp;#x3C;repo-url&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git clone --bare &lt;repo-url&gt; .git&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;tip-cleaner-shell-history&quot;&gt;Tip: Cleaner shell history&lt;/h3&gt;
&lt;p&gt;If you replace the URL contents by evaluating &lt;code&gt;pbpaste&lt;/code&gt; (for macOS), it will paste the URL directly from your clipboard without adding extra characters or formatting that can clutter your shell history. This keeps your command history clean and makes it easier to reuse commands in the future.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--bare&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;pbpaste&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# zsh bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--bare&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; (pbpaste) .git &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git clone --bare $(pbpaste) .git # zsh bashgit clone --bare (pbpaste) .git # fish&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;creating-worktrees&quot;&gt;Creating Worktrees&lt;/h2&gt;
&lt;p&gt;Once cloned, you will see that the &lt;code&gt;.git&lt;/code&gt; folder contains hooks, info, refs, config, etc. To create the actual working directories, you use the &lt;code&gt;worktree&lt;/code&gt; command:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;worktree&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git worktree add main&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This creates a folder named &lt;code&gt;main&lt;/code&gt; where that branch lives. You can create additional worktrees for specific features or versions, such as:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;worktree&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tui&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;worktree&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;v1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git worktree add tuigit worktree add v1&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;naming-conventions-and-branch-management&quot;&gt;Naming Conventions and Branch Management&lt;/h2&gt;
&lt;p&gt;I like to have a dedicated worktree called &lt;code&gt;review&lt;/code&gt; specifically for code reviews.&lt;/p&gt;
&lt;p&gt;One limitation to note is that you cannot check out the same branch twice in a worktree environment. If you try to check out &lt;code&gt;main&lt;/code&gt; in your &lt;code&gt;review&lt;/code&gt; folder while it is checked out in your &lt;code&gt;main&lt;/code&gt; folder, Git will throw an error.&lt;/p&gt;
&lt;p&gt;To get around this, I often create a branch called &lt;code&gt;_main&lt;/code&gt;. This allows me to fetch the latest changes or reference the main branch without conflicting with the actual &lt;code&gt;main&lt;/code&gt; worktree.&lt;/p&gt;
&lt;p&gt;I also avoid using the worktree name as the branch name for complex features. Instead, I name worktrees based on the area of responsibility, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ui&lt;/code&gt; (for a UI package)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pm-portal&lt;/code&gt; (for a specific area of the business)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;add-bill-page&lt;/code&gt; (for a large feature requiring multiple PRs)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;optimizing-your-workflow-with-tools&quot;&gt;Optimizing Your Workflow with Tools&lt;/h2&gt;
&lt;h3 id=&quot;session-management-with-sesh&quot;&gt;Session Management with Sesh&lt;/h3&gt;
&lt;p&gt;I use &lt;a href=&quot;https://github.com/joshmedeski/sesh&quot;&gt;Sesh&lt;/a&gt; to manage my Tmux sessions. It easily identifies the parent folder structure we set up.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When I select &lt;code&gt;sesh main&lt;/code&gt;, the session is named &lt;code&gt;sesh/main&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;I can jump to &lt;code&gt;sesh/tui&lt;/code&gt; or &lt;code&gt;sesh/review&lt;/code&gt; instantly.&lt;/li&gt;
&lt;li&gt;In monorepos, I can target specific sub-projects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;code-reviews-with-gh-dash-and-octo&quot;&gt;Code Reviews with GH Dash and Octo&lt;/h3&gt;
&lt;p&gt;For reviews, I use &lt;a href=&quot;https://github.com/dlvhdr/gh-dash&quot;&gt;&lt;code&gt;gh-dash&lt;/code&gt;&lt;/a&gt;, a terminal UI for GitHub issues and PRs. I configure gh-dash by adding the following entry to my config:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/gh-dash/config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;repoPaths&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;joshmedeski/sesh&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/c/sesh/review&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;repoPaths:  joshmedeski/sesh: ~/c/sesh/review&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;In my Sesh config, I set up a specific session for reviews:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/sesh/sesh.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;session&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;sesh reviews&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;path = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/C/sesh/review&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;startup_command = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;gh dash&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[[session]]name = &amp;#x22;sesh reviews&amp;#x22;path = &amp;#x22;~/C/sesh/review&amp;#x22;startup_command = &amp;#x22;gh dash&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I also use a tool called &lt;strong&gt;Octo&lt;/strong&gt; with custom keybindings. If I press &lt;code&gt;Shift+O&lt;/code&gt;, it opens the PR in Octo, where I can see comments, add reviews, and manage the PR, all within the &lt;code&gt;review&lt;/code&gt; worktree.&lt;/p&gt;
&lt;h3 id=&quot;cleaning-up-with-treekanga&quot;&gt;Cleaning Up with Treekanga&lt;/h3&gt;
&lt;p&gt;One downside of worktrees is that they can bloat your hard drive, similar to cloning a project multiple times (especially with &lt;code&gt;node_modules&lt;/code&gt;). It is important to prune your work when features are complete.&lt;/p&gt;
&lt;p&gt;I use a tool called &lt;a href=&quot;https://github.com/garrettkrohn/treekanga&quot;&gt;Treekanga&lt;/a&gt; to help with this. You can configure it to recognize your bare repo structure.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/treekanga/treekanga.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;repos&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;sesh&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;defaultBranch&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;main&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;worktreeTargetDir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;/c/sesh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;listDisplayMode&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;directory&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;bareRepoName&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.git&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;repos:  sesh:    defaultBranch: main    worktreeTargetDir: /c/sesh    listDisplayMode: directory    bareRepoName: .git&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Treekanga allows you to list your worktrees and use a &lt;code&gt;delete&lt;/code&gt; command to delete stale or orphaned branches that are no longer needed.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;treekanga delete --stale&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;treekanga delete --stale&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Worktrees have changed my relationship with Git. They make it less frustrating to handle complex workflows, dependency updates, and frequent context switching. While I still use standard clones for simple repositories, worktrees are my go-to for big projects and complicated work sets.&lt;/p&gt;
&lt;p&gt;Start simple, build the muscle memory, and give it a try.&lt;/p&gt;</content:encoded><category>git</category><category>terminal</category></item><item><title>Instantly Open Any Website Using Raycast</title><link>https://joshmedeski.com/posts/instantly-open-any-website-using-raycast/</link><guid isPermaLink="true">https://joshmedeski.com/posts/instantly-open-any-website-using-raycast/</guid><description>Using an open-source search engine and Raycast, I can get to any website I want instantly.</description><pubDate>Tue, 20 May 2025 21:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Using an open-source search engine and Raycast, I can get to any website I want instantly. In this post, I’ll show you how it works and why it’s changed the way I browse the web.&lt;/p&gt;
&lt;h2 id=&quot;searchxng&quot;&gt;SearchXNG&lt;/h2&gt;
&lt;p&gt;The search engine I use is called &lt;a href=&quot;https://github.com/searxng/searxng&quot;&gt;SearXNG&lt;/a&gt;. It’s open-source and runs as a Docker container on your machine. You simply forward port 8080, and you’re ready to go.&lt;/p&gt;
&lt;p&gt;See the &lt;a href=&quot;https://docs.searxng.org/admin/installation-docker.html&quot;&gt;SearXNG Docker Container instructions&lt;/a&gt; for how to set it up.&lt;/p&gt;
&lt;p&gt;For example, if you search for &lt;code&gt;GitHub NeoVim&lt;/code&gt;, you’d expect the first result to be &lt;code&gt;github.com/neovim/neovim&lt;/code&gt;. This works for a variety of queries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Searching my own name, “joshmedeski”, puts my website first.&lt;/li&gt;
&lt;li&gt;Searching for “joshmedeski blazing fast window management” brings up my blog post as the top result.&lt;/li&gt;
&lt;li&gt;Typing in “imdb andor” quickly brings up the IMDB page for the TV show, Andor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;leveraging-search-engine-skills&quot;&gt;Leveraging Search Engine Skills&lt;/h2&gt;
&lt;p&gt;Most of us use search engines every day and have developed a sense for what results our keywords will produce. When you know you always want the first result, many search engines offer a “get lucky” feature—essentially rolling the dice to jump straight to the top hit.&lt;/p&gt;
&lt;h2 id=&quot;introducing-bangs-and-auto-redirects&quot;&gt;Introducing “Bangs” and Auto Redirects&lt;/h2&gt;
&lt;p&gt;A key part of this workflow is the use of bangs. &lt;a href=&quot;https://duckduckgo.com/bangs&quot;&gt;DuckDuckGo popularized the concept&lt;/a&gt; with exclamation points that redirect your search to specific sites.&lt;/p&gt;
&lt;p&gt;But SearXNG takes it further with a &lt;strong&gt;double bang auto redirect&lt;/strong&gt;. When you use &lt;code&gt;!!&lt;/code&gt; at the start of your query, you’re automatically redirected to the first result.&lt;/p&gt;
&lt;h3 id=&quot;example-searches&quot;&gt;Example Searches&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;!! GitHub NeoVim&lt;/code&gt; → Instantly opens the NeoVim GitHub page.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!! Paris France&lt;/code&gt; → Redirects to the Wikipedia entry for France.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even if the first result isn’t perfect, it’s almost always contextual and relevant.&lt;/p&gt;
&lt;h2 id=&quot;setting-up-with-raycast&quot;&gt;Setting Up with Raycast&lt;/h2&gt;
&lt;p&gt;Here’s how I have it configured:&lt;/p&gt;
&lt;p&gt;Create a quicklink in Raycast with the following URL:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;http://localhost:8080/search?q=!!%20{argument name=&quot;term&quot;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;http://localhost:8080/search?q=!!%20{argument name=&amp;#x22;term&amp;#x22;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Double bangs&lt;/strong&gt; (&lt;code&gt;!!&lt;/code&gt;) trigger the auto-redirect.&lt;/li&gt;
&lt;li&gt;The search engine runs locally on &lt;code&gt;localhost:8080&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The API endpoint is &lt;code&gt;/search&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The query includes &lt;code&gt;!!&lt;/code&gt; and the search term as arguments, which you can pass into Raycast.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When I type &lt;code&gt;!!&lt;/code&gt; and hit tab, Raycast prompts for the term. I enter what I want, and ARC gives me a preview window with the result.&lt;/p&gt;
&lt;h2 id=&quot;supercharging-with-a-keyboard-shortcut&quot;&gt;Supercharging with a Keyboard Shortcut&lt;/h2&gt;
&lt;p&gt;I took it a step further by binding the command to &lt;strong&gt;⌥ + 1&lt;/strong&gt;. Since the exclamation point is on the &lt;code&gt;1&lt;/code&gt; key, it’s a fast, muscle-memory shortcut to trigger a search.&lt;/p&gt;
&lt;p&gt;Now, I just type the shortcut, enter my keywords, and instantly jump to the page I want—like T-Mux’s documentation or any other site.&lt;/p&gt;
&lt;h2 id=&quot;why-this-workflow-works-for-me&quot;&gt;Why This Workflow Works for Me&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No need for bookmarks:&lt;/strong&gt; If I know what I want, I can get to it with keywords.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minimal management:&lt;/strong&gt; I don’t have to organize or maintain anything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accuracy:&lt;/strong&gt; I rarely end up on irrelevant pages.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficiency:&lt;/strong&gt; This method is fast, smart, and leverages my existing search skills.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Traditional search engines have almost disappeared from my workflow. For research-heavy browsing, I use a different tool (which I’ll cover in a future post).&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;That’s an overview of how I use “searching” and Raycast together to instantly redirect to any website.&lt;/p&gt;</content:encoded><category>macos</category><category>productivity</category></item><item><title>I made my favorite tmux feature better with sesh</title><link>https://joshmedeski.com/posts/i-made-my-favorite-tmux-feature-better-with-sesh/</link><guid isPermaLink="true">https://joshmedeski.com/posts/i-made-my-favorite-tmux-feature-better-with-sesh/</guid><description>Use the last command in tmux to switch between sessions easily, and learn how to improve it with sesh.</description><pubDate>Mon, 24 Mar 2025 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I made one of my favorite tmux sessions even better, so let’s talk about it.&lt;/p&gt;
&lt;h2 id=&quot;tmux-last-command&quot;&gt;tmux last command&lt;/h2&gt;
&lt;p&gt;So let’s talk about the last command. It is bound to &lt;code&gt;&amp;#x3C;prefix&gt;&lt;/code&gt; capital L and it allows you to switch the attached client back to the last session.&lt;/p&gt;
&lt;p&gt;So think of this like a command tab kind of feature, but for tmux. So if I was to open up a second session and we were to hit &lt;code&gt;&amp;#x3C;prefix&gt;&lt;/code&gt; capital L, you’ll see that I’ll be able to switch very easily back to the previous session.&lt;/p&gt;
&lt;h2 id=&quot;macos-keybinding&quot;&gt;macOS keybinding&lt;/h2&gt;
&lt;p&gt;I have done an extra step here and I have bound this to command L. And if you want to know about how I did that, I have a video all about how I can &lt;a href=&quot;/posts/macos-keyboard-shortcuts-for-tmux&quot;&gt;bind macOS key bindings to tmux&lt;/a&gt;. And so this is fantastic. Maybe I’m working on the front end and the back end of something and I want to have two sessions open and quickly switch between them. Or maybe I’m messing with my configs, right? And I want to play around with that.&lt;/p&gt;
&lt;h2 id=&quot;the-problem&quot;&gt;The problem&lt;/h2&gt;
&lt;p&gt;However, this starts to quickly fall apart when there’s a third introduced. And so now my workflow is I want to be able to quickly and easily close a tmux session. And then there’s this detach on destroy feature that’s really helpful.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;detach-on-destroy&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# don&apos;t exit from tmux when closing a session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set -g detach-on-destroy off # don&amp;#x27;t exit from tmux when closing a session&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;So if I’m in neovim and I decide I don’t want it anymore, I can close the final window. And when I do that, the last command actually stops working. You see that when I hit &lt;code&gt;⌘+l&lt;/code&gt;, it says can’t find last session. And so the feature sort of falls apart very quickly as soon as you start closing sessions, right? And so the way to fix that is you can switch back to one of the other sessions manually and then the feature comes back. And that’s all right. But further it falls apart when we detach and we reattach. And so if we detach from a tmux session and come back, the idea of last goes away in tmux mind. And so you’ll see that this feature still doesn’t work. Can’t find last session.&lt;/p&gt;
&lt;p&gt;And so I thought, hey, you know, we know the attached order with the timestamp from tmux. tmux stores that data and tells us when we’ve attached to something for every session forever. It’s one of those things that they have the information, but they’re choosing not to use it with this command. And so I decided, hey, it doesn’t work right now, right? Can’t find last session.&lt;/p&gt;
&lt;h2 id=&quot;introducing-sesh-last&quot;&gt;Introducing &lt;code&gt;sesh last&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;However, if I was to type sesh last, I was able to solve the problem. And so now &lt;code&gt;sesh last&lt;/code&gt; can switch to the previous session no matter what it is. And now if I was to have a third session, I was to close it, right? Then I can do sesh last and it’s able to switch to back to fish. And so you can see pretty easily this thing works as you’d expect it to. And the way that you end up binding it, it’s sort of up to you. But I recommend that you just overwrite the default behavior.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-N&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;⌘+l last-session (via sesh) &quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;L&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;run-shell&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;sesh last || tmux display-message -d 1000 &apos;Only one session&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;bind -N &amp;#x22;⌘+l last-session (via sesh) &amp;#x22; L run-shell &amp;#x22;sesh last || tmux display-message -d 1000 &amp;#x27;Only one session&amp;#x27;&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And so you use the bind command in your tmux config. It’s called run shell and you can run shell. You can say sesh last. And then optionally, I like this. You can have this double, this double pipe for or and you can say, you know, if sesh last fails, basically it’s because there’s only one session. And so I’ll show you really quickly how that works. But basically when you make this kind of change, usually it’s best to restart tmux. So we’ll go ahead and kill it and restart it.&lt;/p&gt;
&lt;p&gt;And then we’ll reopen it up. And you’ll see the fallback where only one session, that makes sense. But if I open up more than one, right, it works as expected. And if I open up a third and was to close it, I’m still able to switch back. And if I was to detach and reattach, the feature still works.&lt;/p&gt;
&lt;h2 id=&quot;in-conclusion&quot;&gt;In conclusion&lt;/h2&gt;
&lt;p&gt;And so this has been a huge time saver for me. I really love this feature. I just wanted it to always work. I haven’t yet taken the time to contribute to the tmux source code. And so I just decided to extend my tmux session manager to include this feature.&lt;/p&gt;
&lt;p&gt;And so if you’re not using it already, I highly recommend you take a look at my &lt;a href=&quot;/posts/smart-tmux-sessions-with-sesh&quot;&gt;video on sesh&lt;/a&gt; and how it works and all of its inner workings. This is a new feature, so I wanted to show it off. And I hope that you use the last command more and let me know if there’s anything else that you want to know about this workflow.&lt;/p&gt;</content:encoded><category>tmux</category></item><item><title>AI in Neovim (NeovimConf 2024)</title><link>https://joshmedeski.com/posts/ai-in-neovim-neovimconf-2024/</link><guid isPermaLink="true">https://joshmedeski.com/posts/ai-in-neovim-neovimconf-2024/</guid><description>Discover how AI plugins using LLMs are transforming Neovim into a cutting-edge tool for developers</description><pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Discover how AI plugins using LLMs are transforming Neovim into a cutting-edge tool for developers. This talk will explore the latest AI-powered plugins and integrations that enhance coding efficiency, streamline workflows, and elevate your development experience. Whether you’re a seasoned Neovim user or new to the editor, learn how AI can revolutionize your coding practices and prepare you for the future of software development.&lt;/p&gt;
&lt;h2 id=&quot;completion&quot;&gt;Completion&lt;/h2&gt;
&lt;p&gt;Code completion is a feature in which the editor suggests completions for the current word
or symbol. This can be helpful for writing code faster and with fewer errors. There are many
plugins available for code completion in Neovim.&lt;/p&gt;
&lt;h3 id=&quot;my-choice&quot;&gt;My Choice&lt;/h3&gt;
&lt;a href=&quot;https://github.com/github/copilot.vim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;github/copilot.vim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Neovim plugin for GitHub Copilot&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;alternatives&quot;&gt;Alternatives&lt;/h3&gt;
&lt;a href=&quot;https://github.com/zbirenbaum/copilot-cmp&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;zbirenbaum/copilot-cmp&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Lua plugin to turn github copilot into a cmp source&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/codota/tabnine-nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;codota/tabnine-nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Tabnine Client for Neovim&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/Exafunction/codeium.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;Exafunction/codeium.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A native neovim extension for Codeium&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/milanglacier/minuet-ai.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;milanglacier/minuet-ai.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Dance with Intelligence in Your Code. Minuet offers code completion as-you-type from popular LLMs including OpenAI, Gemini, Claude, Ollama, Llama.cpp, Codestral, and more.&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;configuration&quot;&gt;Configuration&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;github/copilot.vim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;dependencies &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;catppuccin/nvim&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;event &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;VimEnter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;copilot_no_tab_map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;copilot_workspace_folders&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;getcwd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;keys &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;github/copilot.vim&amp;#x22;,  dependencies = { &amp;#x22;catppuccin/nvim&amp;#x22; },  event = &amp;#x22;VimEnter&amp;#x22;,  init = function()    vim.g.copilot_no_tab_map = false    vim.g.copilot_workspace_folders = { vim.fn.getcwd() }  end,  keys = {},}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;chat&quot;&gt;Chat&lt;/h2&gt;
&lt;p&gt;AI Chat in the editor is a feature that allows you to chat with an
AI assistant directly in your editor. This can be helpful for generating
code snippets, writing documentation, or even just having a conversation.&lt;/p&gt;
&lt;h3 id=&quot;my-choice-1&quot;&gt;My Choice&lt;/h3&gt;
&lt;a href=&quot;https://github.com/CopilotC-Nvim/CopilotChat.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;CopilotC-Nvim/CopilotChat.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Chat with GitHub Copilot in Neovim&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;alternatives-1&quot;&gt;Alternatives&lt;/h3&gt;
&lt;a href=&quot;https://github.com/yetone/avante.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;yetone/avante.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Use your Neovim like using Cursor AI IDE!&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/jackMort/ChatGPT.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;jackMort/ChatGPT.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;ChatGPT Neovim Plugin: Effortless Natural Language Generation with OpenAI&apos;s ChatGPT API&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;configuration-1&quot;&gt;Configuration&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;CopilotC-Nvim/CopilotChat.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- NOTE: configured via LazyVim 💤&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- https://www.lazyvim.org/extras/ai/copilot-chat&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;CopilotC-Nvim/CopilotChat.nvim&amp;#x22;,  -- NOTE: configured via LazyVim 💤  -- https://www.lazyvim.org/extras/ai/copilot-chat}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;generation&quot;&gt;Generation&lt;/h2&gt;
&lt;p&gt;AI code generation is a feature that allows you to generate code snippets using AI models.
This can be helpful for
writing code faster and with fewer errors.&lt;/p&gt;
&lt;h3 id=&quot;my-choice-2&quot;&gt;My Choice&lt;/h3&gt;
&lt;a href=&quot;https://github.com/robitx/gp.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;robitx/gp.nvim&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;alternatives-2&quot;&gt;Alternatives&lt;/h3&gt;
&lt;a href=&quot;https://github.com/David-Kunz/gen.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;David-Kunz/gen.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Neovim plugin to generate text using LLMs with customizable prompts&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/gsuuon/model.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;gsuuon/model.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Neovim plugin for interacting with LLM&apos;s and building editor integrated prompts.&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;configuration-2&quot;&gt;Configuration&lt;/h3&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;robitx/gp.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;gp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;event &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;BufEnter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;gp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;openai_api_key &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;os.getenv&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;OPENAI_API_KEY&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;providers &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;anthropic &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;endpoint &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;https://api.anthropic.com/v1/messages&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;secret &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;os.getenv&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ANTHROPIC_API_KEY&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;copilot &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;endpoint &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;https://api.githubcopilot.com/chat/completions&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;secret &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;bash&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;-c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;cat ~/.config/github-copilot/hosts.json | sed -e &apos;s/.*oauth_token...//;s/&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.*//&apos;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;ollama &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;endpoint &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;http://localhost:11434/v1/chat/completions&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;openai &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;endpoint &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;https://api.openai.com/v1/chat/completions&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;secret &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;fn&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;getenv&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;OPENAI_API_KEY&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;whisper &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- you can disable whisper completely by whisper = {disable = true}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disable &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- OpenAI audio/transcriptions api endpoint to transcribe audio to text&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;endpoint &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;https://api.openai.com/v1/audio/transcriptions&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- directory for storing whisper files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;store_dir &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;os.getenv&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;TMPDIR&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;os.getenv&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;TEMP&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;/tmp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;/gp_whisper&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- multiplier of RMS level dB for threshold used by sox to detect silence vs speech&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- decibels are negative, the recording is normalized to -3dB =&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- increase this number to pick up more (weaker) sounds as possible speech&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- decrease this number to pick up only louder sounds as possible speech&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- you can disable silence trimming by setting this a very high number (like 1000.0)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;silence &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;1.75&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- whisper tempo (1.0 is normal speed)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;tempo &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;1.75&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- The language of the input audio, in ISO-639-1 format.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;language &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- command to use for recording can be nil (unset) for automatic selection&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- string (&quot;sox&quot;, &quot;arecord&quot;, &quot;ffmpeg&quot;) or table with command and arguments:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- sox is the most universal, but can have start/end cropping issues caused by latency&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- arecord is linux only, but has no cropping issues and is faster&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- ffmpeg in the default configuration is macos only, but can be used on any platform&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- (see https://trac.ffmpeg.org/wiki/Capture/Desktop for more info)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- below is the default configuration for all three commands:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- whisper_rec_cmd = {&quot;sox&quot;, &quot;-c&quot;, &quot;1&quot;, &quot;--buffer&quot;, &quot;32&quot;, &quot;-d&quot;, &quot;rec.wav&quot;, &quot;trim&quot;, &quot;0&quot;, &quot;60:00&quot;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- whisper_rec_cmd = {&quot;arecord&quot;, &quot;-c&quot;, &quot;1&quot;, &quot;-f&quot;, &quot;S16_LE&quot;, &quot;-r&quot;, &quot;48000&quot;, &quot;-d&quot;, &quot;3600&quot;, &quot;rec.wav&quot;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- whisper_rec_cmd = {&quot;ffmpeg&quot;, &quot;-y&quot;, &quot;-f&quot;, &quot;avfoundation&quot;, &quot;-i&quot;, &quot;:0&quot;, &quot;-t&quot;, &quot;3600&quot;, &quot;rec.wav&quot;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;rec_cmd &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;agents &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Qwen2.5:32b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;chat &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;command &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;provider &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ollama&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;qwen2.5:32b&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;I am an AI meticulously crafted to provide programming guidance and code assistance. &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;To best serve you as a computer programmer, please provide detailed inquiries and code snippets when necessary, &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;and expect precise, technical responses tailored to your development needs.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Codellama&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;chat &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;command &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;provider &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ollama&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;codellama&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;I am an AI meticulously crafted to provide programming guidance and code assistance. &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;To best serve you as a computer programmer, please provide detailed inquiries and code snippets when necessary, &quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;and expect precise, technical responses tailored to your development needs.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ChatGPT4&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;chat &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;command &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- string with model name or table with model name and parameters&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;gpt-4-1106-preview&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, temperature &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1.1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, top_p &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- system prompt (use this to specify the persona/role of the AI)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;You are a general AI assistant.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;The user provided the additional info about how they would like you to respond:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- If you&apos;re unsure don&apos;t guess and say you don&apos;t know instead.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Ask question if you need clarification to provide better answer.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Think deeply and carefully from first principles step by step.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Zoom out first to see the big picture and then zoom in to details.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Use Socratic method to improve your thinking and coding skills.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Don&apos;t elide any code from your output if the answer requires coding.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Take a deep breath; You&apos;ve got this!&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;CodeGPT4&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;chat &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;command &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- string with model name or table with model name and parameters&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;gpt-4-1106-preview&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, temperature &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0.8&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, top_p &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- system prompt (use this to specify the persona/role of the AI)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;You are an AI working as a code editor.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Please AVOID COMMENTARY OUTSIDE OF THE SNIPPET RESPONSE.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;START AND END YOUR ANSWER WITH:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;```&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Claude3Haiku&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;chat &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;command &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;provider &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;anthropic&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { model &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;claude-3-haiku-20240307&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;system_prompt &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;You are a general AI assistant.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;The user provided the additional info about how they would like you to respond:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- If you&apos;re unsure don&apos;t guess and say you don&apos;t know instead.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Ask question if you need clarification to provide better answer.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Think deeply and carefully from first principles step by step.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Zoom out first to see the big picture and then zoom in to details.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Use Socratic method to improve your thinking and coding skills.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Don&apos;t elide any code from your output if the answer requires coding.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;- Take a deep breath; You&apos;ve got this!&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;hooks &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- example of usig enew as a function specifying type for the new buffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;CodeReview&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(gp, params)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; template &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;I have the following code from {{filename}}:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;```{{filetype}}&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;{{selection}}&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;```&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Please analyze for code smells and suggest improvements.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; agent &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; gp.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;get_chat_agent&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gp.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Prompt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(params, gp.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;enew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;markdown&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), agent, template)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- example of making :%GpChatNew a dedicated command which&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- opens new chat with the entire current buffer as a context&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;BufferChatNew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(gp, _)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- call GpChatNew command in range mode on whole buffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nvim_command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;%&quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; gp.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;cmd_prefix&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ChatNew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;ReactIconSvg&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(gp, params)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; buf &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nvim_get_current_buf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; lines &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nvim_buf_get_lines&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(buf, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; content &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;table.concat&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(lines, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; template &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;The following SVG code needs to be converted into a valid React component:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;INPUT:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;```tsx&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; content&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;```&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Remove the `width` and `height` props from the `&amp;#x3C;svg&gt;` element&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Add `{...props}` to the bottom of the `&amp;#x3C;svg&gt;` element&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Replace all `fill` values with `currentColor`&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Replace all props that are dash-separated (ex: `fill-rule`) with camelCase (ex: `fillRule`)&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Don&apos;t remove any other props or attributes&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Preserve the indentation rules&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Only include the code snippet, no additional context or explanation is needed.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; agent &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; gp.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;get_command_agent&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gp.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Updating React SVG: &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; agent.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gp.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Prompt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(params, gp.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;rewrite&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, agent, template, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;UiIconExport&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(gp, params)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; template &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;The following React modules need to be refactored and properly exported:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;```tsx&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;{{selection}}&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;```&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Take the unused import at the bottom of the file and move it up to the other imports in the alphabetical orrder&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Export the unsed import in the `icons` array in alphabetical order&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Export the unsed import in the `export {` object in alphabetical order&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;  - Only include the code snippet, no additional context or explanation is needed.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; agent &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; gp.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;get_command_agent&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gp.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;info&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Updating React SVG: &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; agent.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gp.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Prompt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(params, gp.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Target&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;rewrite&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, agent, template, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nil&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keys&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;which-key&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- VISUAL mode mappings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- s, x, v modes are handled the same way by which_key&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;mode &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;v&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;nowait &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;remap &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-t&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpChatNew tabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ChatNew tabnew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-v&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpChatNew vsplit&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ChatNew vsplit&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-x&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpChatNew split&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ChatNew split&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;a&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpAppend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Append (after)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpPrepend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Prepend (before)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpChatNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Chat New&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, group &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;generate into new ..&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;ge&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpEnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual GpEnew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gn&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual GpNew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpPopup&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Popup&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpTabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual GpTabnew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gv&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpVnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual GpVnew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;i&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpImplement&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Implement selection&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpNextAgent&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Agent&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;p&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpChatPaste&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Chat Paste&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;r&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpRewrite&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Rewrite&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;s&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpStop&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpStop&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;t&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpChatToggle&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual Toggle Chat&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;w&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, group &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wa&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperAppend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Append&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wb&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperPrepend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Prepend&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;we&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperEnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Enew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wn&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper New&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperPopup&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Popup&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wr&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperRewrite&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Rewrite&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperTabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Tabnew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wv&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisperVnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Vnew&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;ww&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpWhisper&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;x&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-u&gt;&apos;&amp;#x3C;,&apos;&gt;GpContext&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Visual GpContext&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- NORMAL mode mappings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;mode &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;nowait &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;remap &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-t&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew tabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat tabnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-v&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew vsplit&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat vsplit&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-x&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew split&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat split&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;a&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpAppend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Append (after)&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpPrepend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prepend (before)&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatFinder&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Chat Finder&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, group &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;generate into new ..&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;ge&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpEnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpEnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gn&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpNew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpPopup&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Popup&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpTabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpTabnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gv&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpVnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpVnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpNextAgent&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Agent&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;r&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpRewrite&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Inline Rewrite&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;s&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpStop&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpStop&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;t&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatToggle&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Toggle Chat&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;w&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, group &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, icon &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;󰗋&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wa&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperAppend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper [A]ppend&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wb&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperPrepend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper [P]repend&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;we&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperEnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper Enew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wn&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper New&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperPopup&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper Popup&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wr&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperRewrite&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper Inline Rewrite&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperTabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper Tabnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wv&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperVnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper Vnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;ww&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisper&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[W]hisper&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;x&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpContext&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Toggle GpContext&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- INSERT mode mappings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;mode &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;i&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;nowait &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;remap &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-t&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew tabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat tabnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-v&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew vsplit&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat vsplit&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;&amp;#x3C;C-x&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew split&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat split&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;a&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpAppend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Append (after)&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpPrepend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prepend (before)&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;New Chat&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatFinder&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Chat Finder&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, group &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;generate into new ..&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;ge&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpEnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpEnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gn&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpNew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpPopup&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Popup&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpTabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpTabnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;gv&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpVnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpVnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpNextAgent&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Agent&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;r&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpRewrite&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Inline Rewrite&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;s&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpStop&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GpStop&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;t&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpChatToggle&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Toggle Chat&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;w&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, group &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wa&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperAppend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Append (after)&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wb&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperPrepend&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Prepend (before)&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;we&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperEnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Enew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wn&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperNew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper New&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperPopup&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Popup&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wr&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperRewrite&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Inline Rewrite&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperTabnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Tabnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;wv&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisperVnew&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper Vnew&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;ww&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpWhisper&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Whisper&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;C-g&gt;x&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;GpContext&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Toggle GpContext&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;robitx/gp.nvim&amp;#x22;,  name = &amp;#x22;gp&amp;#x22;,  event = &amp;#x22;BufEnter&amp;#x22;,  config = function()    require(&amp;#x22;gp&amp;#x22;).setup({      openai_api_key = os.getenv(&amp;#x22;OPENAI_API_KEY&amp;#x22;),      providers = {        anthropic = {          endpoint = &amp;#x22;https://api.anthropic.com/v1/messages&amp;#x22;,          secret = os.getenv(&amp;#x22;ANTHROPIC_API_KEY&amp;#x22;),        },        copilot = {          endpoint = &amp;#x22;https://api.githubcopilot.com/chat/completions&amp;#x22;,          secret = {            &amp;#x22;bash&amp;#x22;,            &amp;#x22;-c&amp;#x22;,            &amp;#x22;cat ~/.config/github-copilot/hosts.json | sed -e &amp;#x27;s/.*oauth_token...//;s/\&amp;#x22;.*//&amp;#x27;&amp;#x22;,          },        },        ollama = {          endpoint = &amp;#x22;http://localhost:11434/v1/chat/completions&amp;#x22;,        },        openai = {          endpoint = &amp;#x22;https://api.openai.com/v1/chat/completions&amp;#x22;,          secret = vim.fn.getenv(&amp;#x22;OPENAI_API_KEY&amp;#x22;),        },      },      whisper = {        -- you can disable whisper completely by whisper = {disable = true}        disable = false,        -- OpenAI audio/transcriptions api endpoint to transcribe audio to text        endpoint = &amp;#x22;https://api.openai.com/v1/audio/transcriptions&amp;#x22;,        -- directory for storing whisper files        store_dir = (os.getenv(&amp;#x22;TMPDIR&amp;#x22;) or os.getenv(&amp;#x22;TEMP&amp;#x22;) or &amp;#x22;/tmp&amp;#x22;) .. &amp;#x22;/gp_whisper&amp;#x22;,        -- multiplier of RMS level dB for threshold used by sox to detect silence vs speech        -- decibels are negative, the recording is normalized to -3dB =&gt;        -- increase this number to pick up more (weaker) sounds as possible speech        -- decrease this number to pick up only louder sounds as possible speech        -- you can disable silence trimming by setting this a very high number (like 1000.0)        silence = &amp;#x22;1.75&amp;#x22;,        -- whisper tempo (1.0 is normal speed)        tempo = &amp;#x22;1.75&amp;#x22;,        -- The language of the input audio, in ISO-639-1 format.        language = &amp;#x22;en&amp;#x22;,        -- command to use for recording can be nil (unset) for automatic selection        -- string (&amp;#x22;sox&amp;#x22;, &amp;#x22;arecord&amp;#x22;, &amp;#x22;ffmpeg&amp;#x22;) or table with command and arguments:        -- sox is the most universal, but can have start/end cropping issues caused by latency        -- arecord is linux only, but has no cropping issues and is faster        -- ffmpeg in the default configuration is macos only, but can be used on any platform        -- (see https://trac.ffmpeg.org/wiki/Capture/Desktop for more info)        -- below is the default configuration for all three commands:        -- whisper_rec_cmd = {&amp;#x22;sox&amp;#x22;, &amp;#x22;-c&amp;#x22;, &amp;#x22;1&amp;#x22;, &amp;#x22;--buffer&amp;#x22;, &amp;#x22;32&amp;#x22;, &amp;#x22;-d&amp;#x22;, &amp;#x22;rec.wav&amp;#x22;, &amp;#x22;trim&amp;#x22;, &amp;#x22;0&amp;#x22;, &amp;#x22;60:00&amp;#x22;},        -- whisper_rec_cmd = {&amp;#x22;arecord&amp;#x22;, &amp;#x22;-c&amp;#x22;, &amp;#x22;1&amp;#x22;, &amp;#x22;-f&amp;#x22;, &amp;#x22;S16_LE&amp;#x22;, &amp;#x22;-r&amp;#x22;, &amp;#x22;48000&amp;#x22;, &amp;#x22;-d&amp;#x22;, &amp;#x22;3600&amp;#x22;, &amp;#x22;rec.wav&amp;#x22;},        -- whisper_rec_cmd = {&amp;#x22;ffmpeg&amp;#x22;, &amp;#x22;-y&amp;#x22;, &amp;#x22;-f&amp;#x22;, &amp;#x22;avfoundation&amp;#x22;, &amp;#x22;-i&amp;#x22;, &amp;#x22;:0&amp;#x22;, &amp;#x22;-t&amp;#x22;, &amp;#x22;3600&amp;#x22;, &amp;#x22;rec.wav&amp;#x22;},        rec_cmd = nil,      },      agents = {        {          name = &amp;#x22;Qwen2.5:32b&amp;#x22;,          chat = true,          command = true,          provider = &amp;#x22;ollama&amp;#x22;,          model = { model = &amp;#x22;qwen2.5:32b&amp;#x22; },          system_prompt = &amp;#x22;I am an AI meticulously crafted to provide programming guidance and code assistance. &amp;#x22;            .. &amp;#x22;To best serve you as a computer programmer, please provide detailed inquiries and code snippets when necessary, &amp;#x22;            .. &amp;#x22;and expect precise, technical responses tailored to your development needs.\n&amp;#x22;,        },        {          name = &amp;#x22;Codellama&amp;#x22;,          chat = true,          command = true,          provider = &amp;#x22;ollama&amp;#x22;,          model = { model = &amp;#x22;codellama&amp;#x22; },          system_prompt = &amp;#x22;I am an AI meticulously crafted to provide programming guidance and code assistance. &amp;#x22;            .. &amp;#x22;To best serve you as a computer programmer, please provide detailed inquiries and code snippets when necessary, &amp;#x22;            .. &amp;#x22;and expect precise, technical responses tailored to your development needs.\n&amp;#x22;,        },        {          name = &amp;#x22;ChatGPT4&amp;#x22;,          chat = true,          command = false,          -- string with model name or table with model name and parameters          model = { model = &amp;#x22;gpt-4-1106-preview&amp;#x22;, temperature = 1.1, top_p = 1 },          -- system prompt (use this to specify the persona/role of the AI)          system_prompt = &amp;#x22;You are a general AI assistant.\n\n&amp;#x22;            .. &amp;#x22;The user provided the additional info about how they would like you to respond:\n\n&amp;#x22;            .. &amp;#x22;- If you&amp;#x27;re unsure don&amp;#x27;t guess and say you don&amp;#x27;t know instead.\n&amp;#x22;            .. &amp;#x22;- Ask question if you need clarification to provide better answer.\n&amp;#x22;            .. &amp;#x22;- Think deeply and carefully from first principles step by step.\n&amp;#x22;            .. &amp;#x22;- Zoom out first to see the big picture and then zoom in to details.\n&amp;#x22;            .. &amp;#x22;- Use Socratic method to improve your thinking and coding skills.\n&amp;#x22;            .. &amp;#x22;- Don&amp;#x27;t elide any code from your output if the answer requires coding.\n&amp;#x22;            .. &amp;#x22;- Take a deep breath; You&amp;#x27;ve got this!\n&amp;#x22;,        },        {          name = &amp;#x22;CodeGPT4&amp;#x22;,          chat = false,          command = true,          -- string with model name or table with model name and parameters          model = { model = &amp;#x22;gpt-4-1106-preview&amp;#x22;, temperature = 0.8, top_p = 1 },          -- system prompt (use this to specify the persona/role of the AI)          system_prompt = &amp;#x22;You are an AI working as a code editor.\n\n&amp;#x22;            .. &amp;#x22;Please AVOID COMMENTARY OUTSIDE OF THE SNIPPET RESPONSE.\n&amp;#x22;            .. &amp;#x22;START AND END YOUR ANSWER WITH:\n\n&amp;#x60;&amp;#x60;&amp;#x60;&amp;#x22;,        },        {          name = &amp;#x22;Claude3Haiku&amp;#x22;,          chat = true,          command = true,          provider = &amp;#x22;anthropic&amp;#x22;,          model = { model = &amp;#x22;claude-3-haiku-20240307&amp;#x22; },          system_prompt = &amp;#x22;You are a general AI assistant.\n\n&amp;#x22;            .. &amp;#x22;The user provided the additional info about how they would like you to respond:\n\n&amp;#x22;            .. &amp;#x22;- If you&amp;#x27;re unsure don&amp;#x27;t guess and say you don&amp;#x27;t know instead.\n&amp;#x22;            .. &amp;#x22;- Ask question if you need clarification to provide better answer.\n&amp;#x22;            .. &amp;#x22;- Think deeply and carefully from first principles step by step.\n&amp;#x22;            .. &amp;#x22;- Zoom out first to see the big picture and then zoom in to details.\n&amp;#x22;            .. &amp;#x22;- Use Socratic method to improve your thinking and coding skills.\n&amp;#x22;            .. &amp;#x22;- Don&amp;#x27;t elide any code from your output if the answer requires coding.\n&amp;#x22;            .. &amp;#x22;- Take a deep breath; You&amp;#x27;ve got this!\n&amp;#x22;,        },      },      hooks = {        -- example of usig enew as a function specifying type for the new buffer        CodeReview = function(gp, params)          local template = &amp;#x22;I have the following code from {{filename}}:\n\n&amp;#x22;            .. &amp;#x22;&amp;#x60;&amp;#x60;&amp;#x60;{{filetype}}\n{{selection}}\n&amp;#x60;&amp;#x60;&amp;#x60;\n\n&amp;#x22;            .. &amp;#x22;Please analyze for code smells and suggest improvements.&amp;#x22;          local agent = gp.get_chat_agent()          gp.Prompt(params, gp.Target.enew(&amp;#x22;markdown&amp;#x22;), agent, template)        end,        -- example of making :%GpChatNew a dedicated command which        -- opens new chat with the entire current buffer as a context        BufferChatNew = function(gp, _)          -- call GpChatNew command in range mode on whole buffer          vim.api.nvim_command(&amp;#x22;%&amp;#x22; .. gp.config.cmd_prefix .. &amp;#x22;ChatNew&amp;#x22;)        end,        ReactIconSvg = function(gp, params)          local buf = vim.api.nvim_get_current_buf()          local lines = vim.api.nvim_buf_get_lines(buf, 0, -1, false)          local content = table.concat(lines, &amp;#x22;\n&amp;#x22;)          local template = &amp;#x22;The following SVG code needs to be converted into a valid React component:\n\n&amp;#x22;            .. &amp;#x22;INPUT:\n&amp;#x22;            .. &amp;#x22;&amp;#x60;&amp;#x60;&amp;#x60;tsx\n&amp;#x22;            .. content            .. &amp;#x22;&amp;#x60;&amp;#x60;&amp;#x60;\n\n&amp;#x22;            .. &amp;#x22;  - Remove the &amp;#x60;width&amp;#x60; and &amp;#x60;height&amp;#x60; props from the &amp;#x60;&lt;svg&gt;&amp;#x60; element\n&amp;#x22;            .. &amp;#x22;  - Add &amp;#x60;{...props}&amp;#x60; to the bottom of the &amp;#x60;&lt;svg&gt;&amp;#x60; element\n&amp;#x22;            .. &amp;#x22;  - Replace all &amp;#x60;fill&amp;#x60; values with &amp;#x60;currentColor&amp;#x60;\n&amp;#x22;            .. &amp;#x22;  - Replace all props that are dash-separated (ex: &amp;#x60;fill-rule&amp;#x60;) with camelCase (ex: &amp;#x60;fillRule&amp;#x60;)\n&amp;#x22;            .. &amp;#x22;  - Don&amp;#x27;t remove any other props or attributes\n&amp;#x22;            .. &amp;#x22;  - Preserve the indentation rules\n&amp;#x22;            .. &amp;#x22;  - Only include the code snippet, no additional context or explanation is needed.&amp;#x22;          local agent = gp.get_command_agent()          gp.logger.info(&amp;#x22;Updating React SVG: &amp;#x22; .. agent.name)          gp.Prompt(params, gp.Target.rewrite, agent, template, nil)        end,        UiIconExport = function(gp, params)          local template = &amp;#x22;The following React modules need to be refactored and properly exported:\n\n&amp;#x22;            .. &amp;#x22;&amp;#x60;&amp;#x60;&amp;#x60;tsx\n{{selection}}\n&amp;#x60;&amp;#x60;&amp;#x60;\n\n&amp;#x22;            .. &amp;#x22;  - Take the unused import at the bottom of the file and move it up to the other imports in the alphabetical orrder\n&amp;#x22;            .. &amp;#x22;  - Export the unsed import in the &amp;#x60;icons&amp;#x60; array in alphabetical order\n&amp;#x22;            .. &amp;#x22;  - Export the unsed import in the &amp;#x60;export {&amp;#x60; object in alphabetical order\n&amp;#x22;            .. &amp;#x22;  - Only include the code snippet, no additional context or explanation is needed.&amp;#x22;          local agent = gp.get_command_agent()          gp.logger.info(&amp;#x22;Updating React SVG: &amp;#x22; .. agent.name)          gp.Prompt(params, gp.Target.rewrite, agent, template, nil)        end,      },    })  end,  keys = function()    require(&amp;#x22;which-key&amp;#x22;).add({      -- VISUAL mode mappings      -- s, x, v modes are handled the same way by which_key      {        mode = { &amp;#x22;v&amp;#x22; },        nowait = true,        remap = false,        { &amp;#x22;&lt;C-g&gt;&lt;C-t&gt;&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpChatNew tabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;ChatNew tabnew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;&lt;C-v&gt;&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpChatNew vsplit&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;ChatNew vsplit&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;&lt;C-x&gt;&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpChatNew split&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;ChatNew split&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;a&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpAppend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Append (after)&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;b&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpPrepend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Prepend (before)&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;c&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpChatNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Chat New&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;g&amp;#x22;, group = &amp;#x22;generate into new ..&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;ge&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpEnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual GpEnew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gn&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual GpNew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gp&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpPopup&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Popup&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gt&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpTabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual GpTabnew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gv&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpVnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual GpVnew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;i&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpImplement&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Implement selection&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;n&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpNextAgent&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Next Agent&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;p&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpChatPaste&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Chat Paste&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;r&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpRewrite&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Rewrite&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;s&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpStop&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpStop&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;t&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpChatToggle&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual Toggle Chat&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;w&amp;#x22;, group = &amp;#x22;Whisper&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wa&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperAppend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Append&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wb&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperPrepend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Prepend&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;we&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperEnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Enew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wn&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper New&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wp&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperPopup&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Popup&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wr&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperRewrite&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Rewrite&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wt&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperTabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Tabnew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wv&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisperVnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Vnew&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;ww&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpWhisper&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;x&amp;#x22;, &amp;#x22;:&lt;C-u&gt;&amp;#x27;&lt;,&amp;#x27;&gt;GpContext&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Visual GpContext&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },      },      -- NORMAL mode mappings      {        mode = { &amp;#x22;n&amp;#x22; },        nowait = true,        remap = false,        { &amp;#x22;&lt;C-g&gt;&lt;C-t&gt;&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew tabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat tabnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;&lt;C-v&gt;&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew vsplit&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat vsplit&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;&lt;C-x&gt;&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew split&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat split&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;a&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpAppend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Append (after)&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;b&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpPrepend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Prepend (before)&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;c&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;f&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatFinder&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Chat Finder&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;g&amp;#x22;, group = &amp;#x22;generate into new ..&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;ge&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpEnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpEnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gn&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpNew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gp&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpPopup&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Popup&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gt&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpTabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpTabnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gv&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpVnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpVnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;n&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpNextAgent&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Next Agent&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;r&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpRewrite&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Inline Rewrite&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;s&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpStop&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpStop&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;t&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatToggle&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Toggle Chat&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;w&amp;#x22;, group = &amp;#x22;Whisper&amp;#x22;, icon = &amp;#x22;󰗋&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wa&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperAppend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper [A]ppend&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wb&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperPrepend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper [P]repend&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;we&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperEnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper Enew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wn&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper New&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wp&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperPopup&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper Popup&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wr&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperRewrite&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper Inline Rewrite&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wt&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperTabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper Tabnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wv&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperVnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper Vnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;ww&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisper&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;[W]hisper&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;x&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpContext&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Toggle GpContext&amp;#x22; },      },      -- INSERT mode mappings      {        mode = { &amp;#x22;i&amp;#x22; },        nowait = true,        remap = false,        { &amp;#x22;&lt;C-g&gt;&lt;C-t&gt;&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew tabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat tabnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;&lt;C-v&gt;&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew vsplit&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat vsplit&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;&lt;C-x&gt;&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew split&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat split&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;a&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpAppend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Append (after)&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;b&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpPrepend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Prepend (before)&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;c&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;New Chat&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;f&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatFinder&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Chat Finder&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;g&amp;#x22;, group = &amp;#x22;generate into new ..&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;ge&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpEnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpEnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gn&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpNew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gp&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpPopup&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Popup&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gt&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpTabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpTabnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;gv&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpVnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpVnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;n&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpNextAgent&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Next Agent&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;r&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpRewrite&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Inline Rewrite&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;s&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpStop&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;GpStop&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;t&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpChatToggle&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Toggle Chat&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;w&amp;#x22;, group = &amp;#x22;Whisper&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wa&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperAppend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Append (after)&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wb&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperPrepend&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Prepend (before)&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;we&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperEnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Enew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wn&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperNew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper New&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wp&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperPopup&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Popup&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wr&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperRewrite&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Inline Rewrite&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wt&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperTabnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Tabnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;wv&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisperVnew&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper Vnew&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;ww&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpWhisper&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Whisper&amp;#x22; },        { &amp;#x22;&lt;C-g&gt;x&amp;#x22;, &amp;#x22;&lt;cmd&gt;GpContext&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Toggle GpContext&amp;#x22; },      },    })  end,}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I hope you enjoyed this talk and learned something new about AI in Neovim. If you have any questions or comments, feel free to reach out to me on social media.&lt;/p&gt;</content:encoded><category>neovim</category><category>ai</category></item><item><title>Carlos Beckers&apos;s Dev Workflow</title><link>https://joshmedeski.com/posts/carlos-beckers-dev-workflow/</link><guid isPermaLink="true">https://joshmedeski.com/posts/carlos-beckers-dev-workflow/</guid><description>In this interview I talk with Carlos, creator of Go Releaser, about his workflow</description><pubDate>Sat, 24 Aug 2024 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;In this interview I talk with Carlos, creator of Go Releaser, about his developer workflow including tmux, neovim, nix, and more on macOS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses (hardware and software): &lt;a href=&quot;https://carlosbecker.com/uses/&quot;&gt;carlosbecker.com/uses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creator of Go Releaser: &lt;a href=&quot;https://goreleaser.com/&quot;&gt;goreleaser.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Works for Charm: &lt;a href=&quot;https://charm.sh/&quot;&gt;charm.sh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://configure.zsa.io/moonlander/layouts/KZdRz/latest/0&quot;&gt;Moonlander keyboard config&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>terminal</category></item><item><title>Smart tmux sessions with sesh</title><link>https://joshmedeski.com/posts/smart-tmux-sessions-with-sesh/</link><guid isPermaLink="true">https://joshmedeski.com/posts/smart-tmux-sessions-with-sesh/</guid><description>Make your tmux workflow smarter and faster with the sesh session manager.</description><pubDate>Fri, 10 May 2024 11:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The way I use Tmux has changed a lot in the last year, so let’s talk about it.&lt;/p&gt;
&lt;h2 id=&quot;intro&quot;&gt;Intro&lt;/h2&gt;
&lt;p&gt;I rewrote my &lt;a href=&quot;https://github.com/joshmedeski/t-smart-tmux-session-manager?tab=readme-ov-file&quot;&gt;tmux plugin called ‘t’&lt;/a&gt; in early 2024 into a new cli called &lt;a href=&quot;https://github.com/joshmedeski/sesh&quot;&gt;sesh&lt;/a&gt;, written in Go. It offers more features and performance boosts compared to the original bash version.&lt;/p&gt;
&lt;p&gt;Here’s the video that started it all, breaking down the idea of combining zoxide and fzf for a more efficient workflow:&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/l_TTxc0AcCw?si=l45yI5udbkD0pY8I&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;how-to-install&quot;&gt;How to install&lt;/h2&gt;
&lt;p&gt;Instead of using &lt;a href=&quot;https://github.com/tmux-plugins/tpm&quot;&gt;tpm&lt;/a&gt; to install it as a tmux plugin, &lt;a href=&quot;https://github.com/joshmedeski/sesh&quot;&gt;sesh&lt;/a&gt; is a binary that you install on your machine using Homebrew or Nix.&lt;/p&gt;
&lt;p&gt;Run the following command to install it via &lt;a href=&quot;https://brew.sh/&quot;&gt;homebrew&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;joshmedeski/sesh/sesh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install joshmedeski/sesh/sesh&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Other installation methods are available on the &lt;a href=&quot;https://github.com/joshmedeski/sesh?tab=readme-ov-file#how-to-install&quot;&gt;sesh GitHub page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;
&lt;p&gt;Sesh combines &lt;a href=&quot;https://github.com/ajeetdsouza/zoxide&quot;&gt;zoxide&lt;/a&gt; and &lt;a href=&quot;https://github.com/tmux/tmux&quot;&gt;tmux sessions&lt;/a&gt; to create a powerful and efficient workflow. The two main commands are &lt;code&gt;sesh list&lt;/code&gt; to list zoxide records, custom config records, and running tmux Sessions, and &lt;code&gt;sesh connect&lt;/code&gt; to connect to a directory and create a Tmux Session.&lt;/p&gt;
&lt;p&gt;My YouTuber friend, &lt;a href=&quot;https://www.youtube.com/@dreamsofautonomy&quot;&gt;Dreams of Autonomy&lt;/a&gt;, has a great video explaining how zoxide works.&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/aghxkpyRVDY?si=-UVPNsGrslVNPP0c&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;getting-started&quot;&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;Using &lt;code&gt;sesh connect&lt;/code&gt; with &lt;code&gt;sesh list&lt;/code&gt; and tools like &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;fzf&lt;/a&gt; or &lt;a href=&quot;https://github.com/charmbracelet/gum&quot;&gt;gum&lt;/a&gt; allows for quick selection and creation of Tmux Sessions based on the chosen project or directory.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;sesh&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;$(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;sesh&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; list &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;fzf&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;sesh connect &amp;#x22;$(sesh list | fzf)&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I prefer gum as I find it faster and prettier.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;sesh&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;connect&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;$(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;sesh&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; list &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-i&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gum&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; filter &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--limit&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--placeholder&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &apos;Pick a sesh&apos; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--prompt=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;⚡&apos;)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;sesh connect &amp;#x22;$(sesh list -i | gum filter --limit 1 --placeholder &amp;#x27;Pick a sesh&amp;#x27; --prompt=&amp;#x27;⚡&amp;#x27;)&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;startup&quot;&gt;Startup&lt;/h2&gt;
&lt;p&gt;Creating custom Tmux Bindings like &lt;code&gt;K&lt;/code&gt; displays a pop-up to switch between or create new tmux Sessions on the fly using a keybinding, similar to command palettes in Discord and GitHub.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/tmux/tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;K&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;popup &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;E &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;w &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;sesh connect &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;$(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;sesh list &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;i | gum filter &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--limit 1 --placeholder &apos;Pick a sesh&apos; --prompt=&apos;⚡&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)\&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;bind-key &amp;#x22;K&amp;#x22; display-popup -E -w 40% &amp;#x22;sesh connect \&amp;#x22;$(  sesh list -i | gum filter --limit 1 --placeholder &amp;#x27;Pick a sesh&amp;#x27; --prompt=&amp;#x27;⚡&amp;#x27;)\&amp;#x22;&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you want a more complex setup, you can use fzf to add keybindings to filter by category or even take actions like kill tmux sessions from within the popup.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/tmux/tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;J&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shell&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;sesh connect &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;$(&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;sesh list &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;i | fzf&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;tmux &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;p &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;55&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;%&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--no-sort --border-label &apos; sesh &apos; --prompt &apos;⚡  &apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--header &apos;  ^a all ^t tmux ^x zoxide ^g config ^d tmux kill ^f find&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;tab:down,btab:up&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;ctrl-a:change-prompt(⚡  )+reload(sesh list -i)&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;ctrl-t:change-prompt(🪟  )+reload(sesh list -it)&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;ctrl-g:change-prompt(⚙️  )+reload(sesh list -ic)&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;ctrl-x:change-prompt(📁  )+reload(sesh list -iz)&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;ctrl-f:change-prompt(🔎  )+reload(fd -H -d 2 -t d -E .Trash . ~)&apos; \&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;--bind &apos;ctrl-d:execute(tmux kill-session -t {})+change-prompt(⚡  )+reload(sesh list)&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)\&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;bind-key &amp;#x22;J&amp;#x22; run-shell &amp;#x22;sesh connect \&amp;#x22;$(  sesh list -i | fzf-tmux -p 55%,60% \    --no-sort --border-label &amp;#x27; sesh &amp;#x27; --prompt &amp;#x27;⚡  &amp;#x27; \    --header &amp;#x27;  ^a all ^t tmux ^x zoxide ^g config ^d tmux kill ^f find&amp;#x27; \    --bind &amp;#x27;tab:down,btab:up&amp;#x27; \    --bind &amp;#x27;ctrl-a:change-prompt(⚡  )+reload(sesh list -i)&amp;#x27; \    --bind &amp;#x27;ctrl-t:change-prompt(🪟  )+reload(sesh list -it)&amp;#x27; \    --bind &amp;#x27;ctrl-g:change-prompt(⚙️  )+reload(sesh list -ic)&amp;#x27; \    --bind &amp;#x27;ctrl-x:change-prompt(📁  )+reload(sesh list -iz)&amp;#x27; \    --bind &amp;#x27;ctrl-f:change-prompt(🔎  )+reload(fd -H -d 2 -t d -E .Trash . ~)&amp;#x27; \    --bind &amp;#x27;ctrl-d:execute(tmux kill-session -t {})+change-prompt(⚡  )+reload(sesh list)&amp;#x27;)\&amp;#x22;&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;macos-keybinding&quot;&gt;macOS keybinding&lt;/h2&gt;
&lt;p&gt;Binding Sesh to a macOS keybinding like &lt;code&gt;command+K&lt;/code&gt; creates a command bar to move between Sessions quickly and easily.&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/BLp61-Lq0kQ?si=PUHMQb_vQgIgn2As&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;naming-sessions&quot;&gt;Naming Sessions&lt;/h2&gt;
&lt;p&gt;Sesh uses the folder name as the session name by default, but can create more contextualized session names based on the directory structure or git work trees.&lt;/p&gt;
&lt;p&gt;For example, the &lt;code&gt;~/c/Downloads&lt;/code&gt; directory can be named &lt;code&gt;Downloads&lt;/code&gt; in Tmux, while the &lt;code&gt;~/c/github.com/joshmedeski/sesh&lt;/code&gt; directory can be named &lt;code&gt;sesh&lt;/code&gt; in Tmux.&lt;/p&gt;
&lt;p&gt;In a git repository like &lt;code&gt;~/c/joshmedeski.com/src/content&lt;/code&gt;, sesh will automatically detect the root of the git repository and name the tmux session &lt;code&gt;joshmedeski_com/src/content&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you’re working with git worktrees, sesh will use the root of the worktree on the session name. So if I’m working with the directory &lt;code&gt;~/c/sesh/v2&lt;/code&gt; where &lt;code&gt;v2&lt;/code&gt; is a worktree, the session name will be &lt;code&gt;sesh/v2&lt;/code&gt;, making it easy to contextualize all sesh wokrtrees in your workflow.&lt;/p&gt;
&lt;h2 id=&quot;custom-configs&quot;&gt;Custom configs&lt;/h2&gt;
&lt;p&gt;Custom configurations can be created using a toml file in the &lt;code&gt;~/.config/sesh&lt;/code&gt; directory. Sessions can be defined with a location, name, startup command, and startup script to automate actions like opening a file picker or starting a website.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/sesh/sesh.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open the file manager&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;session&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Downloads 📥&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;path = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/Downloads&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;startup_command = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;yazi&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open a file&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;session&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;tmux config&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;path = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/c/dotfiles/tmux&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;startup_command = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim tmux.conf&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# run a script to startup a node project&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;session&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;path = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/c/joshmedeski.com&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;startup_script = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/.config/sesh/scripts/node_dev&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;# open the file manager[[session]]name = &amp;#x22;Downloads 📥&amp;#x22;path = &amp;#x22;~/Downloads&amp;#x22;startup_command = &amp;#x22;yazi&amp;#x22;# open a file[[session]]name = &amp;#x22;tmux config&amp;#x22;path = &amp;#x22;~/c/dotfiles/tmux&amp;#x22;startup_command = &amp;#x22;nvim tmux.conf&amp;#x22;# run a script to startup a node project[[session]]path = &amp;#x22;~/c/joshmedeski.com&amp;#x22;startup_script = &amp;#x22;~/.config/sesh/scripts/node_dev&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The script is a executable bash file with some simple tmux commands.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/sesh/scripts/node_dev&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;tmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;split-window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-v&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-l&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;tmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;select-pane&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-t&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:.+&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;tmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;send-keys&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim +GoToFile&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Enter&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;#!/usr/bin/env bashtmux split-window -v -l 10 devtmux select-pane -t :.+tmux send-keys &amp;#x22;nvim +GoToFile&amp;#x22; Enter&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can also import other toml files if you want to break up your configs.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/sesh/sesh.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;import = [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/c/joshmedeski.com/.sesh.toml&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import = [&amp;#x22;~/c/joshmedeski.com/.sesh.toml&amp;#x22;]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;default-startup&quot;&gt;Default Startup&lt;/h2&gt;
&lt;p&gt;Setting a default startup command like opening NeoVim with a file picker allows for quick access to recently used files whenever switching between sessions and projects for all your projects that don’t have a custom configuration.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/sesh/sesh.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;default_session&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;startup_command = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim -c &apos;:Telescope find_files&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[default_session]startup_command = &amp;#x22;nvim -c &amp;#x27;:Telescope find_files&amp;#x27;&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;raycast&quot;&gt;Raycast&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.raycast.com/joshmedeski/sesh&quot;&gt;sesh companion extension&lt;/a&gt; for &lt;a href=&quot;https://www.raycast.com/&quot;&gt;Raycast&lt;/a&gt; makes it easy to use sesh outside of the terminal.&lt;/p&gt;
&lt;p&gt;Here are limitations to keep in mind:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tmux has to be running before you can use the extension&lt;/li&gt;
&lt;li&gt;The extension caches results for a few seconds, so it may not always be up to date&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://www.raycast.com/joshmedeski/sesh&quot; title=&quot;Install sesh Raycast Extension&quot;&gt;&lt;img src=&quot;https://www.raycast.com/joshmedeski/sesh/install_button@2x.png?v=1.1&quot; alt=&quot;Install sesh Raycast Extension&quot; height=&quot;64&quot; style=&quot;height: 64px;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;adding-to-zoxide&quot;&gt;Adding to Zoxide&lt;/h2&gt;
&lt;p&gt;To make Sesh more useful, it’s important to add records to Zoxide. This can be done by &lt;code&gt;cd&lt;/code&gt;ing into directories or using a shortcut like &lt;code&gt;zad&lt;/code&gt; to list and add multiple directories at once.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-d&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;xargs&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-I&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;{}&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;zoxide&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;{}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;ls -d */ | xargs -I {} zoxide add {}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;/h2&gt;
&lt;p&gt;Sesh is a powerful tool that combines zoxide and tmux sessions to create a more efficient workflow. It allows for quick selection and creation of tmux sessions based on the chosen project or directory, and can be customized with custom configurations and startup scripts to automate actions.&lt;/p&gt;
&lt;p&gt;Please give it a star and share it with your friends if you find it useful!&lt;/p&gt;
&lt;a href=&quot;https://github.com/joshmedeski/sesh&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;joshmedeski/sesh&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Smart session manager for the terminal&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;</content:encoded><category>tmux</category></item><item><title>Switching from Mackup to Stow Dotfiles Manager</title><link>https://joshmedeski.com/posts/moving-from-mackup-to-stow/</link><guid isPermaLink="true">https://joshmedeski.com/posts/moving-from-mackup-to-stow/</guid><description>My journey to a new, simpler, dotfiles manager from Mackup to GNU Stow.</description><pubDate>Mon, 15 Apr 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For many years, I used mackup to manage my dotfiles. However, its opinionated and complicated system started feeling more burdensome than beneficial. Craving simplicity, I switched gears towards GNU Stow. This article chronicles my transition from Mackup to the minimalist environment of Stow, demonstrating how simplicity can streamline your workflow.&lt;/p&gt;
&lt;p&gt;As someone who spends all of their time in the terminal. It is important for me to able to manage my dotfiles. Symbolic links are the easiest way to achieve this so it can commit and push changes to a single repository.&lt;/p&gt;
&lt;h2 id=&quot;the-challenge-with-mackup&quot;&gt;The Challenge with Mackup&lt;/h2&gt;
&lt;p&gt;Mackup is a popular dotfiles manager that allows users to synchronize application settings across multiple devices. It is a powerful tool that can back up and restore your dotfiles to cloud storage services like Dropbox and Google Drive. However, as I delved deeper into Mackup, I found its complexity and opinionated nature to be a hindrance.&lt;/p&gt;
&lt;p&gt;At a high level, Mackup would copy the file in the application’s configuration directory to a backup directory. It would then create a symbolic link to the backup file in the application’s configuration directory. This process was repeated for each application, using a configuration file to determine which files to back up. This approach was effective but came with its own set of challenges. Especially when something went wrong, it was difficult to troubleshoot and fix.&lt;/p&gt;
&lt;p&gt;Over the years, I saw many people complain about Mackup’s complexity which often caused confusion. I also saw community members suggest features and improvements to Mackup, which were never implemented. This led me to question the sustainability of using Mackup as my dotfiles manager. I even reached out the moderator of the Mackup repository to see if I could help maintain the project. However, I never received a response.&lt;/p&gt;
&lt;p&gt;This left me wanting more from my dotfiles manager. There are many choices out there but I craved something simple, strait-forward, and easy to use. Which is when I discovered GNU Stow.&lt;/p&gt;
&lt;h2 id=&quot;introducing-gnu-stow&quot;&gt;Introducing GNU Stow&lt;/h2&gt;
&lt;p&gt;GNU Stow is a symlink farm manager which takes dotfiles from my git repository and symlink them to the correct location. It is a simple and lightweight tool that allows me to manage my dotfiles with ease. This requires that I have my dotfiles in a specific directory structure, but this is a small price to pay for the simplicity that Stow provides. Plus after a decade of being used to dotfiles, the idea of starting from a repo and sending my dotfiles to the correct location was all I needed.&lt;/p&gt;
&lt;p&gt;Stow works as one step for me. I can clone my dotfiles repo and run &lt;code&gt;stow -t ~&lt;/code&gt; and all my dotfiles will be symlinked to the correct location. This is a much simpler process than Mackup and has been a game changer for me.&lt;/p&gt;
&lt;p&gt;Stow is also unopinionated (unlike Mackup). I have control to symlink what I want and where to place them. This has been a huge benefit for me as I can now manage my dotfiles the way I want to and no longer have to work against the tool, or add boilerplate configuration logic to extend it to my needs (like I did with Mackup).&lt;/p&gt;
&lt;h2 id=&quot;moving-dotfiles-from-mackup-to-stow&quot;&gt;Moving Dotfiles from Mackup to Stow&lt;/h2&gt;
&lt;p&gt;Since I had already moved all my dotfiles to a git repository, the transition from Mackup to Stow was relatively straightforward. I followed these steps to migrate my dotfiles. Which only took a few minutes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run &lt;code&gt;mackup uninstall&lt;/code&gt; to remove all the symlinks created by Mackup&lt;/li&gt;
&lt;li&gt;Remove all the config files and directories in my home diretory&lt;/li&gt;
&lt;li&gt;Install stow (&lt;code&gt;brew install stow&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;stow -t ~&lt;/code&gt; in my dotfiles directory&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s it! Because Mackup and Stow both use symlinks and store files in the same structure, the transition was seamless. I was able to maintain my existing dotfiles structure and continue managing them with Stow. The added bonus was that I could now manage my dotfiles with greater flexibility and control.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I spent many weeks researching, contemplating, and asking for advice for which tool to transition to. There are many interesting and powerful tools out there for managing dotfiles. I was unhappy with Mackup’s complexity and stale development, so I decided to switch to Stow. The transition was smooth, and I am now enjoying the simplicity and flexibility that Stow provides which has made my workflow more efficient.&lt;/p&gt;
&lt;p&gt;Stow is a great tool for managing dotfiles. It is simple, lightweight, and unopinionated. It allows me to manage my dotfiles the way I want to, without any unnecessary complexity. I am happy with my decision to switch to Stow and would recommend it to anyone looking for a simple and efficient way to manage their dotfiles.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.gnu.org/software/stow/&quot;&gt;Check out GNU Stow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Check out my dotfiles:&lt;/p&gt;
&lt;a href=&quot;https://github.com/joshmedeski/dotfiles&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;joshmedeski/dotfiles&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Josh&apos;s dotfiles for his developer environment&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;</content:encoded><category>terminal</category><category>macos</category></item><item><title>Top 4 Fuzzy CLIs</title><link>https://joshmedeski.com/posts/top-4-fuzzy-clis/</link><guid isPermaLink="true">https://joshmedeski.com/posts/top-4-fuzzy-clis/</guid><description>My list of the top 4 fuzzy command-line interfaces that I&apos;ve used and like.</description><pubDate>Mon, 22 Jan 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Command-line interfaces (CLIs) are great for productivity, but they often Fuzzy CLIs make it easier to use the command line by providing a fuzzy search interface that allows you to find commands quickly and easily.&lt;/p&gt;
&lt;p&gt;Thankfully, there are many to choose from, some standing out more than others. Here is my list of the top 5 fuzzy CLIs that I’ve used.&lt;/p&gt;
&lt;h2 id=&quot;installation&quot;&gt;Installation&lt;/h2&gt;
&lt;p&gt;All of these CLIs can be installed with homebrew. So they all pass my first test of being easy to install.&lt;/p&gt;
&lt;h2 id=&quot;4-zf&quot;&gt;4. zf&lt;/h2&gt;
&lt;a href=&quot;https://github.com/natecraddock/zf&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;natecraddock/zf&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;a commandline fuzzy finder and zig module designed for filtering filepaths&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Written in Zig, zf is fast and simple. It’s a little more minimal than the others, but it gets the job done. It is the least popular on this list, but has a focus on file paths and I discovered it while looking for a way to improve the fuzzy results for Neovim’s Telescope plugin.&lt;/p&gt;
&lt;a href=&quot;https://github.com/natecraddock/telescope-zf-native.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;natecraddock/telescope-zf-native.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;native telescope bindings to zf for sorting results&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Overall this is bottom of the list because you can’t do much to change the look of it and the configuration options are pretty limited as a CLI. But in Telescope, it’s great.&lt;/p&gt;
&lt;h2 id=&quot;3-gum&quot;&gt;3. gum&lt;/h2&gt;
&lt;a href=&quot;https://github.com/charmbracelet/gum&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;charmbracelet/gum&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A tool for glamorous shell scripts&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Gum is the most feature-filled CLI that I use, but as a fuzzy CLI it ranks 3rd on my list. It’s written in Go and is apart of the Charmbracelet suite of CLI tools. The fuzzy feature is a subcommand called “filter” and most of the configuration options are focused on the way it looks.&lt;/p&gt;
&lt;p&gt;I think the fuzzy algorithm and the visuals make it one of my favorites, personally, but it’s lack of configuration options compared to the next two put it in 3rd place.&lt;/p&gt;
&lt;h2 id=&quot;2-skim&quot;&gt;2. skim&lt;/h2&gt;
&lt;a href=&quot;https://github.com/lotabout/skim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;lotabout/skim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Fuzzy Finder in rust!&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Skim is a one I recently discovered and it is written in Rust, a fan favorite language for terminal tools. It offers many great features and is fast.&lt;/p&gt;
&lt;h2 id=&quot;1-fzf&quot;&gt;1. fzf&lt;/h2&gt;
&lt;a href=&quot;https://github.com/junegunn/fzf&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;junegunn/fzf&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A command-line fuzzy finder&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;fzf is the most popular (by a lot) in the fuzzy CLI space, I have been using it for many years and it’s very feature rich including keybindings to update the list and execute commands. It’s written in Go and is a crowd favorite.&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>Make Your Yearly Review Easier with AI</title><link>https://joshmedeski.com/posts/make-your-yearly-review-easier-with-ai/</link><guid isPermaLink="true">https://joshmedeski.com/posts/make-your-yearly-review-easier-with-ai/</guid><description>AI tools like ChatGPT can make the process of doing a yearly review much easier! I&apos;ll go over the AI prompt and process that I used this year for my yearly review.</description><pubDate>Mon, 08 Jan 2024 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;AI tools like ChatGPT can make the process of doing a yearly review much easier! I’ll go over the AI prompt and process that I used this year for my yearly review.&lt;/p&gt;
&lt;p&gt;AI has made my life a lot easier and I’m excited to share with you how I used it to make my yearly review easier.&lt;/p&gt;
&lt;h2 id=&quot;the-tools&quot;&gt;The Tools&lt;/h2&gt;
&lt;p&gt;I use &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt; for all my note-taking, including journaling my yearly review, and &lt;a href=&quot;https://www.raycast.com/pro&quot;&gt;Raycast AI&lt;/a&gt; for ChatGPT integration on macOS.&lt;/p&gt;
&lt;h2 id=&quot;prompt&quot;&gt;Prompt&lt;/h2&gt;
&lt;p&gt;The following prompt will generate questions for your yearly review:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;You are a productivity coach, you will help me align&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;my life with what&apos;s most important to me. I am doing&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;a yearly review and I will be reflecting on the last&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;year and thinking about the year ahead. Give me a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;group of questions that will help me with each area&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;of my life. Wait until I give you an area then give&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;me the questions as bullet points in markdown.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;You are a productivity coach, you will help me alignmy life with what&amp;#x27;s most important to me. I am doinga yearly review and I will be reflecting on the lastyear and thinking about the year ahead. Give me agroup of questions that will help me with each areaof my life. Wait until I give you an area then giveme the questions as bullet points in markdown.&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then provide it with an area of your life, such as: “health”, “fitness”, or “hobbies” and it will generate a list of questions for you to answer.&lt;/p&gt;
&lt;h2 id=&quot;areas&quot;&gt;Areas&lt;/h2&gt;
&lt;p&gt;Ali Abdaal’s video discussing his wheel of life:&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/c_DOG_mXz5w?si=DwEhS3fIhHb3yvlu&amp;#x26;start=136&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;p&gt;Also check out Tiago Forte’s &lt;a href=&quot;https://www.buildingasecondbrain.com/&quot;&gt;Building A Second Brain&lt;/a&gt; to learn more about the PARA method and how to organize your life, including creating areas of responsibility.&lt;/p&gt;
&lt;h2 id=&quot;bonus-prompt-formula&quot;&gt;Bonus prompt formula&lt;/h2&gt;
&lt;p&gt;Creating a prompt forumla will help your results be more consistent and focused on your needs. Here is the formula I use to generate better results.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;{role} {purpose} {context} {instructions} {conditions}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{role} {purpose} {context} {instructions} {conditions}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;</content:encoded><category>ai</category><category>growth</category></item><item><title>More fun in the terminal with Wezterm!</title><link>https://joshmedeski.com/posts/more-fun-in-the-terminal-with-wezterm/</link><guid isPermaLink="true">https://joshmedeski.com/posts/more-fun-in-the-terminal-with-wezterm/</guid><description>Wezterm is a my new favorite terminal emulator. It&apos;s been fun to create</description><pubDate>Thu, 14 Dec 2023 16:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Wezterm is a my new favorite terminal emulator. It’s been fun to create some customizations for it using the lua programming language. In this video, I’ll show you how I swap out background images, fonts, and color schemes using lua. I’ll also show you a tip for how to get rid of the notch if you have a MacBook.&lt;/p&gt;
&lt;p&gt;Here’s the helper function I created to get a random entry from a table:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;.config/wezterm/utils/helpers.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; wezterm &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;wezterm&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; M &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;M.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;get_random_entry&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(tbl)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; keys &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; key, _ &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;ipairs&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(tbl) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;table.insert&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(keys, key)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; randomKey &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; keys[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;math.random&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;keys)]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; tbl[randomKey]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; M&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;local wezterm = require(&amp;#x22;wezterm&amp;#x22;)local M = {}M.get_random_entry = function(tbl)  local keys = {}  for key, _ in ipairs(tbl) do    table.insert(keys, key)  end  local randomKey = keys[math.random(1, #keys)]  return tbl[randomKey]endreturn M&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can view all of my Wezterm configure here:
&lt;a href=&quot;https://github.com/joshmedeski/dotfiles/tree/main/.config/wezterm&quot;&gt;github.com/joshmedeski/dotfiles/.config/wezterm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you want to learn more about Wezterm, check out the official docs:
&lt;a href=&quot;https://wezfurlong.org/wezterm/&quot;&gt;wezfurlong.org/wezterm&lt;/a&gt;&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>The Underrated Square Bracket (NeoVim Conf 2023)</title><link>https://joshmedeski.com/posts/underrated-square-bracket/</link><guid isPermaLink="true">https://joshmedeski.com/posts/underrated-square-bracket/</guid><description>This vim motion offers many useful vim motions that make navigating code a breeze</description><pubDate>Tue, 05 Dec 2023 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s talk about the underrated square bracket. I don’t think it’s a very popular Vim motion but I hope that after this talk you add it to your workflow. It’s a really simple Vim motion that helps me be more efficient, which is all we want with NeoVim right, I’m excited to show you how it works so let’s get into it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; the following configuration snippets are all compatible with the &lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt; package manager.&lt;/p&gt;
&lt;h2 id=&quot;references--&quot;&gt;References (&lt;code&gt;]]&lt;/code&gt; &amp;#x26; &lt;code&gt;[[&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;The simplest version of this motion is hitting the right square bracket twice (&lt;code&gt;]]&lt;/code&gt;) which will jump you to the next reference under your cursor. Conversely, if you go to the left square brackets twice (&lt;code&gt;[[&lt;/code&gt;) it can go backwards.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/vim-illuminate.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;RRethy/vim-illuminate&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;event &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;LazyFile&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opts &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;delay &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;large_file_cutoff &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;2000&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;large_file_overrides &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;providers &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;lsp&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(_, opts)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;illuminate&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;configure&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(opts)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(key, dir, buffer)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, key, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;illuminate&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)[&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;goto_&quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; dir &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;_reference&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;](&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;dir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;sub&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;upper&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;dir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;sub&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot; Reference&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, buffer &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; buffer })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]]&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;next&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[[&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;prev&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- also set it after loading ftplugins, since a lot overwrite [[ and ]]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nvim_create_autocmd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;FileType&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;callback&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; buffer &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;api&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nvim_get_current_buf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]]&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;next&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, buffer)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[[&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;prev&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, buffer)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;keys &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]]&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Reference&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[[&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev Reference&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;  return {    &amp;#x22;RRethy/vim-illuminate&amp;#x22;,    event = &amp;#x22;LazyFile&amp;#x22;,    opts = {      delay = 200,      large_file_cutoff = 2000,      large_file_overrides = {        providers = { &amp;#x22;lsp&amp;#x22; },      },    },    config = function(_, opts)      require(&amp;#x22;illuminate&amp;#x22;).configure(opts)      local function map(key, dir, buffer)        vim.keymap.set(&amp;#x22;n&amp;#x22;, key, function()          require(&amp;#x22;illuminate&amp;#x22;)[&amp;#x22;goto_&amp;#x22; .. dir .. &amp;#x22;_reference&amp;#x22;](false)        end, { desc = dir:sub(1, 1):upper() .. dir:sub(2) .. &amp;#x22; Reference&amp;#x22;, buffer = buffer })      end      map(&amp;#x22;]]&amp;#x22;, &amp;#x22;next&amp;#x22;)      map(&amp;#x22;[[&amp;#x22;, &amp;#x22;prev&amp;#x22;)      -- also set it after loading ftplugins, since a lot overwrite [[ and ]]      vim.api.nvim_create_autocmd(&amp;#x22;FileType&amp;#x22;, {        callback = function()          local buffer = vim.api.nvim_get_current_buf()          map(&amp;#x22;]]&amp;#x22;, &amp;#x22;next&amp;#x22;, buffer)          map(&amp;#x22;[[&amp;#x22;, &amp;#x22;prev&amp;#x22;, buffer)        end,      })    end,    keys = {      { &amp;#x22;]]&amp;#x22;, desc = &amp;#x22;Next Reference&amp;#x22; },      { &amp;#x22;[[&amp;#x22;, desc = &amp;#x22;Prev Reference&amp;#x22; },    },  },&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;buffers-b--b&quot;&gt;Buffers (&lt;code&gt;]b&lt;/code&gt; &amp;#x26; &lt;code&gt;[b&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;You can move forward and backward through buffers using the square bracket and “b” (&lt;code&gt;]b&lt;/code&gt;) so we can go forward and we can go back (&lt;code&gt;[b&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/init.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;bprevious&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev buffer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;bnext&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next buffer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;vim.keymap.set(&amp;#x22;n&amp;#x22;, &amp;#x22;[b&amp;#x22;, &amp;#x22;&lt;cmd&gt;bprevious&lt;cr&gt;&amp;#x22;, {  desc = &amp;#x22;Prev buffer&amp;#x22;,})vim.keymap.set(&amp;#x22;n&amp;#x22;, &amp;#x22;]b&amp;#x22;, &amp;#x22;&lt;cmd&gt;bnext&lt;cr&gt;&amp;#x22;, {  desc = &amp;#x22;Next buffer&amp;#x22;,})&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;git-hunks-g--g&quot;&gt;Git Hunks (&lt;code&gt;]g&lt;/code&gt; &amp;#x26; &lt;code&gt;[g&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;One of my favorites is jumping between Git hunks hunks using square bracket and “g” (&lt;code&gt;]g&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/gitsigns.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;lewis6991/gitsigns.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;event &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;BufReadPre&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;opts&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt; @type&lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Gitsigns.Config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; C &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;on_attach&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(buffer)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; gs &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;package.loaded&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gitsigns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(mode, l, r, desc)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(mode, l, r, { buffer &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; buffer, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; desc })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#c2a8f3&quot;&gt;next_hunk&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#c2a8f3&quot;&gt;prev_hunk&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;lewis6991/gitsigns.nvim&amp;#x22;,  event = &amp;#x22;BufReadPre&amp;#x22;,  opts = function()    --- @type Gitsigns.Config    local C = {      on_attach = function(buffer)        local gs = package.loaded.gitsigns        local function map(mode, l, r, desc)          vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc })        end        map(&amp;#x22;n&amp;#x22;, &amp;#x22;]g&amp;#x22;, gs.next_hunk, &amp;#x22;Next Hunk&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;[g&amp;#x22;, gs.prev_hunk, &amp;#x22;Prev Hunk&amp;#x22;)      end,    }    return C  end,}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;lsp&quot;&gt;LSP&lt;/h2&gt;
&lt;h3 id=&quot;lsp-diagnostics-d--d&quot;&gt;LSP Diagnostics (&lt;code&gt;]d&lt;/code&gt; &amp;#x26; &lt;code&gt;[d&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;My most common use with using the square bracket motion is with LSPs and so in this case we can see two diagnoses showing and so I can do bracket “d” (&lt;code&gt;]d&lt;/code&gt;) for “diagnostic”.&lt;/p&gt;
&lt;h3 id=&quot;lsp-errors-e--e&quot;&gt;LSP Errors (&lt;code&gt;]e&lt;/code&gt; &amp;#x26; &lt;code&gt;[e&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Similarly if I want to go directly to the first error I can do bracket “e” (&lt;code&gt;]e&lt;/code&gt;) .&lt;/p&gt;
&lt;h3 id=&quot;lsp-warnings-w--w&quot;&gt;LSP Warnings (&lt;code&gt;]w&lt;/code&gt; &amp;#x26; &lt;code&gt;[w&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;And if I want to go to warning specifically I can do bracket “w” (&lt;code&gt;]w&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Here are all the mappings I use for this:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/init.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(next, severity)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; go &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;diagnostic&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;goto_next&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;diagnostic&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;goto_prev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;severity &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; severity &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;and&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;diagnostic&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;severity&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[severity] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;nil&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;go&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ severity &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; severity })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]d&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Diagnostic&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[d&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev Diagnostic&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]e&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ERROR&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Error&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[e&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ERROR&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev Error&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]w&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;WARN&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Warning&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[w&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diagnostic_goto&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;WARN&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;), { desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev Warning&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;local diagnostic_goto = function(next, severity)  local go = next and vim.diagnostic.goto_next or vim.diagnostic.goto_prev  severity = severity and vim.diagnostic.severity[severity] or nil  return function()    go({ severity = severity })  endendmap(&amp;#x22;n&amp;#x22;, &amp;#x22;]d&amp;#x22;, diagnostic_goto(true), { desc = &amp;#x22;Next Diagnostic&amp;#x22; })map(&amp;#x22;n&amp;#x22;, &amp;#x22;[d&amp;#x22;, diagnostic_goto(false), { desc = &amp;#x22;Prev Diagnostic&amp;#x22; })map(&amp;#x22;n&amp;#x22;, &amp;#x22;]e&amp;#x22;, diagnostic_goto(true, &amp;#x22;ERROR&amp;#x22;), { desc = &amp;#x22;Next Error&amp;#x22; })map(&amp;#x22;n&amp;#x22;, &amp;#x22;[e&amp;#x22;, diagnostic_goto(false, &amp;#x22;ERROR&amp;#x22;), { desc = &amp;#x22;Prev Error&amp;#x22; })map(&amp;#x22;n&amp;#x22;, &amp;#x22;]w&amp;#x22;, diagnostic_goto(true, &amp;#x22;WARN&amp;#x22;), { desc = &amp;#x22;Next Warning&amp;#x22; })map(&amp;#x22;n&amp;#x22;, &amp;#x22;[w&amp;#x22;, diagnostic_goto(false, &amp;#x22;WARN&amp;#x22;), { desc = &amp;#x22;Prev Warning&amp;#x22; })&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;todo-comments-t--t&quot;&gt;TODO Comments (&lt;code&gt;]t&lt;/code&gt; &amp;#x26; &lt;code&gt;[t&lt;/code&gt;)&lt;/h2&gt;
&lt;p&gt;If you like to use to-do comments I have it set up so I can use square bracket “t” (&lt;code&gt;]t&lt;/code&gt;) to switch between different to-do comments.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/todo-comments.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;folke/todo-comments.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;cmd &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;TodoTrouble&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;TodoTelescope&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;event &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;LazyFile&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;config &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;keys &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]t&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;todo-comments&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;jump_next&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next todo comment&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line highlight mark&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[t&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;todo-comments&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;jump_prev&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#fb99a3&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Previous todo comment&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;folke/todo-comments.nvim&amp;#x22;,  cmd = { &amp;#x22;TodoTrouble&amp;#x22;, &amp;#x22;TodoTelescope&amp;#x22; },  event = &amp;#x22;LazyFile&amp;#x22;,  config = true,  keys = {    { &amp;#x22;]t&amp;#x22;, function() require(&amp;#x22;todo-comments&amp;#x22;).jump_next() end, desc = &amp;#x22;Next todo comment&amp;#x22; },    { &amp;#x22;[t&amp;#x22;, function() require(&amp;#x22;todo-comments&amp;#x22;).jump_prev() end, desc = &amp;#x22;Previous todo comment&amp;#x22; },  }}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;treesitter&quot;&gt;Treesitter&lt;/h2&gt;
&lt;h3 id=&quot;classes--functions-c--c&quot;&gt;Classes &amp;#x26; Functions (&lt;code&gt;]c&lt;/code&gt; &amp;#x26; &lt;code&gt;[c&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Another motion I use that is a bit less common than the others is using square bracket “c” (&lt;code&gt;]c&lt;/code&gt;) to jump up to the parent are of a class.&lt;/p&gt;
&lt;h3 id=&quot;functions-f--f&quot;&gt;Functions (&lt;code&gt;]f&lt;/code&gt; &amp;#x26; &lt;code&gt;[f&lt;/code&gt;)&lt;/h3&gt;
&lt;p&gt;Similarly, if we want to go up in a function we can use the square bracket “f” motion (&lt;code&gt;]f&lt;/code&gt;).&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/nvim-treesitter.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim-treesitter/nvim-treesitter&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opts &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;textobjects &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;move &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;enable &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;goto_next_start &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@function.outer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@class.outer&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;goto_next_end &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]F&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@function.outer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]C&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@class.outer&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;goto_previous_start &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@function.outer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@class.outer&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;goto_previous_end &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[F&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@function.outer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[C&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;] &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;@class.outer&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;nvim-treesitter/nvim-treesitter&amp;#x22;,  opts = {    textobjects = {      move = {        enable = true,        goto_next_start = { [&amp;#x22;]f&amp;#x22;] = &amp;#x22;@function.outer&amp;#x22;, [&amp;#x22;]c&amp;#x22;] = &amp;#x22;@class.outer&amp;#x22; },        goto_next_end = { [&amp;#x22;]F&amp;#x22;] = &amp;#x22;@function.outer&amp;#x22;, [&amp;#x22;]C&amp;#x22;] = &amp;#x22;@class.outer&amp;#x22; },        goto_previous_start = { [&amp;#x22;[f&amp;#x22;] = &amp;#x22;@function.outer&amp;#x22;, [&amp;#x22;[c&amp;#x22;] = &amp;#x22;@class.outer&amp;#x22; },        goto_previous_end = { [&amp;#x22;[F&amp;#x22;] = &amp;#x22;@function.outer&amp;#x22;, [&amp;#x22;[C&amp;#x22;] = &amp;#x22;@class.outer&amp;#x22; },      },    },  }&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;note-on-complex-motions&quot;&gt;Note on complex motions&lt;/h2&gt;
&lt;p&gt;I’d like to point out that in general this motion is a lot more simple than the ones that we might be used to where we can prepend numbers in front of our motions (ex: &lt;code&gt;w2&lt;/code&gt; to jump to the second word) in order to be even more accurate or to skip references. In this case if I were to do two bracket bracket (&lt;code&gt;2]]&lt;/code&gt;) we can see that it only honors the second part of that motion and goes to the next entry which is unfortunate. But, once you get used to it, I find it very useful to be in my workflow.&lt;/p&gt;
&lt;h2 id=&quot;jumping-out-of-view&quot;&gt;Jumping out of view&lt;/h2&gt;
&lt;p&gt;So far I’ve shown some rather contrived, albeit very short, examples where everything is on the screen but the real power of this motion is that you can get to things that you want even when they’re not visible so if this error is 50 lines down I can just use my motion of square bracket “e” (&lt;code&gt;]e&lt;/code&gt;) and I can jump all the way to anywhere in the file in which I’m looking for a particular thing albeit it warnings or motions or references or whatever it might be.&lt;/p&gt;
&lt;h2 id=&quot;customizing&quot;&gt;Customizing&lt;/h2&gt;
&lt;p&gt;Now let’s look at an example of how you would set this so in this case we’re just using the Vim keymap set command um and you set the mode you set the key mapping you set the command you want to fire on that key mapping and the description is really helpful for if you use tools like &lt;a href=&quot;https://github.com/folke/which-key.nvim&quot;&gt;which key&lt;/a&gt; which I do.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;bprevious&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev buffer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]b&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;bnext&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next buffer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;vim.keymap.set(&amp;#x22;n&amp;#x22;, &amp;#x22;[b&amp;#x22;, &amp;#x22;&lt;cmd&gt;bprevious&lt;cr&gt;&amp;#x22;, {  desc = &amp;#x22;Prev buffer&amp;#x22;,})vim.keymap.set(&amp;#x22;n&amp;#x22;, &amp;#x22;]b&amp;#x22;, &amp;#x22;&lt;cmd&gt;bnext&lt;cr&gt;&amp;#x22;, {  desc = &amp;#x22;Next buffer&amp;#x22;,})&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;And that’s my lightning talk on the underrated square bracket motion I don’t see people using this motion very much but I use it every day and I find it incredibly helpful and so I hope that it will help you as well.&lt;/p&gt;
&lt;p&gt;A big thanks to the NeoVim conf team for putting on this conference and for inviting me to speak. Thanks so much for inviting me I really appreciate it.&lt;/p&gt;
&lt;p&gt;Now it’s your turn go start using this underrated square bracket motion and I’ll see you guys next time.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;This was a lightning talk given at NeoVim Conf, 2023. Learn more about it here:
&lt;a href=&quot;https://neovimconf.live/&quot;&gt;neovimconf.live&lt;/a&gt;&lt;/p&gt;</content:encoded><category>neovim</category></item><item><title>Using bun with astro</title><link>https://joshmedeski.com/posts/using-bun-with-astro/</link><guid isPermaLink="true">https://joshmedeski.com/posts/using-bun-with-astro/</guid><description>Experimenting with the new bun runtime with the astro framework.</description><pubDate>Wed, 13 Sep 2023 19:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Experimenting with the new bun runtime with the astro framework.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; I ultimately didn’t deploy Astro with bun because of bun’s current limitations. You can watch the stream to see me work through the issues, or read the highlights below.&lt;/p&gt;
&lt;h2 id=&quot;highlights&quot;&gt;Highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Bun is fast! Install times are significantly faster&lt;/li&gt;
&lt;li&gt;Sharp isn’t supported by bun yet, so I had back to Squoosh to get images working&lt;/li&gt;
&lt;li&gt;Netlify can’t build, there seems to be something wrong with how dependencies are installed&lt;/li&gt;
&lt;li&gt;Vercel can build, but the View Transitions API doesn’t work on the deployed site&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.astro.build/en/recipes/bun/&quot;&gt;Astro Docs: Using Astro with Bun&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/JLarky/bun-netlify&quot;&gt;Example of React app that you can deploy to netlify using bun (bun.js, oven.sh)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/withastro/astro/issues/8489&quot;&gt;Sharp error issue on Astro’s Github&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>development</category></item><item><title>Upgrading to Astro v3</title><link>https://joshmedeski.com/posts/upgrading-to-astro-v3/</link><guid isPermaLink="true">https://joshmedeski.com/posts/upgrading-to-astro-v3/</guid><description>Code along with me as I upgrade my website to Astro 3.0! It&apos;s 30% faster</description><pubDate>Thu, 31 Aug 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Code along with me as I upgrade my website to Astro 3.0! It’s 30% faster and more powerful than ever. We’ll explore new features like view transitions, image optimization, JSX Fast Refresh, and so much more.&lt;/p&gt;
&lt;p&gt;Here are the highlights of what we’ll cover:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Upgrade packages:&lt;/strong&gt; We’ll upgrade all our Astro dependencies to the latest version of 3.0. We’ll also make sure the site still builds, runs locally, and deploys successfully. This update includes a 30-75% performance boost for Astro components and a 30% build time reduction.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Image Optimization:&lt;/strong&gt; Astro now supports image optimization out of the box. We’ll update the site to use the new built-in &lt;code&gt;&amp;#x3C;Image&gt;&lt;/code&gt; component and explore the new image optimization features. I ended up reducing the size of some of my images by over 90%!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;View Transitions&lt;/strong&gt;: We’ll experiment with the new web platform API that unlocks native browser transition effects between pages, without any JavaScript required. The goal is to morph the post thumbnails between page routes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Overall it was a fun stream! I had some hiccups with the new View Transitions API but once we figured it out it turned out great! You can view all of the work in the pull request.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/joshmedeski/joshmedeski.com/pull/23&quot;&gt;View pull request&lt;/a&gt;&lt;/p&gt;</content:encoded><category>development</category></item><item><title>Dolev Hadar&apos;s Dev Workflow</title><link>https://joshmedeski.com/posts/dolev-hadars-dev-workflow/</link><guid isPermaLink="true">https://joshmedeski.com/posts/dolev-hadars-dev-workflow/</guid><description>Learn about Dolev&apos;s, creator of gh-dash, tmux and neovim setup on macOS.</description><pubDate>Fri, 18 Aug 2023 12:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Learn about Dolev’s, creator of gh-dash, tmux and neovim setup on macOS.&lt;/p&gt;
&lt;a href=&quot;https://github.com/dlvhdr/dotfiles&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;dlvhdr/dotfiles&lt;/strong&gt;&lt;/div&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;terminal-emulator&quot;&gt;Terminal Emulator&lt;/h2&gt;
&lt;a href=&quot;https://github.com/kovidgoyal/kitty&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;kovidgoyal/kitty&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Cross-platform, fast, feature-rich, GPU based terminal&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;shell&quot;&gt;Shell&lt;/h2&gt;
&lt;a href=&quot;https://github.com/fish-shell/fish-shell&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;fish-shell/fish-shell&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;The user-friendly command line shell.&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;prompt&quot;&gt;Prompt&lt;/h2&gt;
&lt;a href=&quot;https://github.com/starship/starship&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;starship/starship&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;The minimal, blazing-fast, and infinitely customizable prompt for any shell!&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;multiplexer&quot;&gt;Multiplexer&lt;/h2&gt;
&lt;a href=&quot;https://github.com/tmux/tmux&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;tmux/tmux&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;tmux source code&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;tmux-plugins&quot;&gt;Tmux Plugins&lt;/h3&gt;
&lt;a href=&quot;https://github.com/joshmedeski/t-smart-tmux-session-manager&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;joshmedeski/t-smart-tmux-session-manager&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;t - the smart tmux session manager&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/joshmedeski/tmux-nerd-font-window-name&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;joshmedeski/tmux-nerd-font-window-name&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Nerd Font icons for your tmux windows&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;code-editor&quot;&gt;Code Editor&lt;/h2&gt;
&lt;a href=&quot;https://github.com/neovim/neovim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;neovim/neovim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Vim-fork focused on extensibility and usability&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h3 id=&quot;neovim-plugins&quot;&gt;Neovim Plugins&lt;/h3&gt;
&lt;a href=&quot;https://github.com/folke/lazy.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;folke/lazy.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A modern plugin manager for Neovim&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/DNLHC/glance.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;DNLHC/glance.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Peek preview window for LSP locations in Neovim&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/ggandor/leap.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;ggandor/leap.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Neovim&apos;s answer to the mouse&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/prochri/telescope-all-recent.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;prochri/telescope-all-recent.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;(F)recency sorting for all Telescope pickers.&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/aaronhallaert/advanced-git-search.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;aaronhallaert/advanced-git-search.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Search your git history by commit message, content and author in Neovim&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/pwntester/octo.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;pwntester/octo.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Edit and review GitHub issues and pull requests from the comfort of your favorite editor&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/dlvhdr/gh-dash&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;dlvhdr/gh-dash&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A beautiful CLI dashboard for GitHub&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/extrawurst/gitui&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;extrawurst/gitui&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Blazing fast terminal-ui for git written in rust&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;additional-resources&quot;&gt;Additional Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://arc.net/&quot;&gt;https://arc.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.raycast.com/&quot;&gt;https://www.raycast.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/ThePrimeagen&quot;&gt;https://www.youtube.com/ThePrimeagen&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was great being able to talk to Dolev and learn more about how he gets things done with his terminal emulator. You can check out &lt;a href=&quot;https://www.dlvhdr.me/&quot;&gt;his website&lt;/a&gt; to learn more about him and connect with him.&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>GitHub In The Terminal</title><link>https://joshmedeski.com/posts/github-in-the-terminal/</link><guid isPermaLink="true">https://joshmedeski.com/posts/github-in-the-terminal/</guid><description>Let&apos;s integrate GitHub into the terminal using the GitHub CLI, gh-dash, and the Octo Neovim plugin.</description><pubDate>Wed, 16 Aug 2023 21:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Let’s integrate GitHub into the terminal using the GitHub CLI, gh-dash, and the Octo Neovim plugin. In this live stream I experiment with adding new features to my tools to improve my experience with using GitHub on the command line.&lt;/p&gt;
&lt;h2 id=&quot;gh-dash&quot;&gt;gh-dash&lt;/h2&gt;
&lt;a href=&quot;https://github.com/dlvhdr/gh-dash&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;dlvhdr/gh-dash&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A beautiful CLI dashboard for GitHub&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Here are a couple of features I added to gh-dash:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/gh-dash/config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;keybindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;issues&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;e&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tmux display-popup -d {{.RepoPath}} -w 80% -h 90% -E &apos;nvim -c &quot;:Octo issue edit {{.IssueNumber}}&quot;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;i&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tmux display-popup -d {{.RepoPath}} -w 80% -h 90% -E &apos;nvim -c &quot;:Octo issue create&quot;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;prs&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;O&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tmux new-window -c {{.RepoPath}} &apos;nvim -c &quot;:Octo pr edit {{.PrNumber}}&quot;&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;keybindings:  issues:    - key: e      command: &gt;        tmux display-popup -d {{.RepoPath}} -w 80% -h 90% -E &amp;#x27;nvim -c &amp;#x22;:Octo issue edit {{.IssueNumber}}&amp;#x22;&amp;#x27;    - key: i      command: &gt;        tmux display-popup -d {{.RepoPath}} -w 80% -h 90% -E &amp;#x27;nvim -c &amp;#x22;:Octo issue create&amp;#x22;&amp;#x27;  prs:    - key: O      command: &gt;        tmux new-window -c {{.RepoPath}} &amp;#x27;nvim -c &amp;#x22;:Octo pr edit {{.PrNumber}}&amp;#x22;&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Also, in order to keep gh dash up-to-date, run the following command:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gh&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;extension&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;upgrade&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;gh extension upgrade --all&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;octonvim&quot;&gt;Octo.nvim&lt;/h2&gt;
&lt;a href=&quot;https://github.com/pwntester/octo.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;pwntester/octo.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Edit and review GitHub issues and pull requests from the comfort of your favorite editor&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Here is how I configure Octo.nvim using the Lazy.nvim plugin manager:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/octo.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;pwntester/octo.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;cmd &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Octo&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;dependencies &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim-lua/plenary.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim-telescope/telescope.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim-tree/nvim-web-devicons&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;octo&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;setup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ enable_builtin &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;cmd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;[[hi OctoEditable guibg=none]]&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;keys &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;o&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;Octo&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Octo&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;pwntester/octo.nvim&amp;#x22;,  cmd = &amp;#x22;Octo&amp;#x22;,  dependencies = {    &amp;#x22;nvim-lua/plenary.nvim&amp;#x22;,    &amp;#x22;nvim-telescope/telescope.nvim&amp;#x22;,    &amp;#x22;nvim-tree/nvim-web-devicons&amp;#x22;,  },  config = function()    require(&amp;#x22;octo&amp;#x22;).setup({ enable_builtin = true })    vim.cmd([[hi OctoEditable guibg=none]])  end,  keys = {    { &amp;#x22;&lt;leader&gt;o&amp;#x22;, &amp;#x22;&lt;cmd&gt;Octo&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;Octo&amp;#x22; },  },}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I had previously created many custom leader key bindings but found I wasn’t using them. So, thanks to &lt;a href=&quot;https://github.com/pwntester/octo.nvim/issues/377&quot;&gt;this issue I opened&lt;/a&gt;, I can simplify it down to &lt;code&gt;&amp;#x3C;leader&gt;o&lt;/code&gt; which opens Telescope with all the potential Octo commands.&lt;/p&gt;
&lt;h2 id=&quot;gitlinkernvim&quot;&gt;gitlinker.nvim&lt;/h2&gt;
&lt;a href=&quot;https://github.com/ruifm/gitlinker.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;ruifm/gitlinker.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A lua neovim plugin to generate shareable file permalinks (with line ranges) for several git web frontend hosts. Inspired by tpope/vim-fugitive&apos;s :GBrowse&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;This plugin makes it easy to get a unique GitHub URL to a line of code in a repo. You can use the following lines to install it with lazy.nvim:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/gitlinker.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ruifm/gitlinker.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;dependencies &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim-lua/plenary.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opts &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;ruifm/gitlinker.nvim&amp;#x22;,  dependencies = &amp;#x22;nvim-lua/plenary.nvim&amp;#x22;,  opts = {},}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now, you can press &lt;code&gt;&amp;#x3C;leader&gt;gy&lt;/code&gt; and it will automatically detect the line your cursor is on and copy a unique GitHub URL to that source code to your clipboard.&lt;/p&gt;
&lt;h2 id=&quot;gitsignsnvim&quot;&gt;gitsigns.nvim&lt;/h2&gt;
&lt;a href=&quot;https://github.com/lewis6991/gitsigns.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;lewis6991/gitsigns.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Git integration for buffers&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;This is my favorite git plugin for Neovim. It has many features, primarily showing git diff status in the sign column. Here is how I configure it using lazy.nvim:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&quot;~/.config/nvim/lua/plugins/gitsigns.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;lewis6991/gitsigns.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;event &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;BufReadPre&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;opts&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; icons &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;config.icons&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt; @type&lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Gitsigns.Config&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; C &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;on_attach&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(buffer)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; gs &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;package.loaded&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gitsigns&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(mode, l, r, desc)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vim.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;keymap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(mode, l, r, { buffer &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; buffer, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; desc })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;]g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;next_hunk&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Next Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;prev_hunk&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Prev Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;v&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gg&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:Gitsigns stage_hunk&amp;#x3C;CR&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Stage Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;v&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gx&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:Gitsigns reset_hunk&amp;#x3C;CR&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Reset Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gG&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;stage_buffer&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Stage Buffer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gu&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;undo_stage_hunk&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Undo Stage Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gX&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;reset_buffer&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Reset Buffer&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gp&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;preview_hunk&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Preview Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gb&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gs.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;blame_line&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ full &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Blame Line&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gd&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, gs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;diffthis&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Diff This&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;gD&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;gs.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;diffthis&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Diff This ~&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;o&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;x&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;ih&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:&amp;#x3C;C-U&gt;Gitsigns select_hunk&amp;#x3C;CR&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;GitSigns Select Hunk&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; C&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;lewis6991/gitsigns.nvim&amp;#x22;,  event = &amp;#x22;BufReadPre&amp;#x22;,  opts = function()    local icons = require(&amp;#x22;config.icons&amp;#x22;)    --- @type Gitsigns.Config    local C = {      on_attach = function(buffer)        local gs = package.loaded.gitsigns        local function map(mode, l, r, desc)          vim.keymap.set(mode, l, r, { buffer = buffer, desc = desc })        end        map(&amp;#x22;n&amp;#x22;, &amp;#x22;]g&amp;#x22;, gs.next_hunk, &amp;#x22;Next Hunk&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;[g&amp;#x22;, gs.prev_hunk, &amp;#x22;Prev Hunk&amp;#x22;)        map({ &amp;#x22;n&amp;#x22;, &amp;#x22;v&amp;#x22; }, &amp;#x22;&lt;leader&gt;gg&amp;#x22;, &amp;#x22;:Gitsigns stage_hunk&lt;CR&gt;&amp;#x22;, &amp;#x22;Stage Hunk&amp;#x22;)        map({ &amp;#x22;n&amp;#x22;, &amp;#x22;v&amp;#x22; }, &amp;#x22;&lt;leader&gt;gx&amp;#x22;, &amp;#x22;:Gitsigns reset_hunk&lt;CR&gt;&amp;#x22;, &amp;#x22;Reset Hunk&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gG&amp;#x22;, gs.stage_buffer, &amp;#x22;Stage Buffer&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gu&amp;#x22;, gs.undo_stage_hunk, &amp;#x22;Undo Stage Hunk&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gX&amp;#x22;, gs.reset_buffer, &amp;#x22;Reset Buffer&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gp&amp;#x22;, gs.preview_hunk, &amp;#x22;Preview Hunk&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gb&amp;#x22;, function()          gs.blame_line({ full = true })        end, &amp;#x22;Blame Line&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gd&amp;#x22;, gs.diffthis, &amp;#x22;Diff This&amp;#x22;)        map(&amp;#x22;n&amp;#x22;, &amp;#x22;&lt;leader&gt;gD&amp;#x22;, function()          gs.diffthis(&amp;#x22;~&amp;#x22;)        end, &amp;#x22;Diff This ~&amp;#x22;)        map({ &amp;#x22;o&amp;#x22;, &amp;#x22;x&amp;#x22; }, &amp;#x22;ih&amp;#x22;, &amp;#x22;:&lt;C-U&gt;Gitsigns select_hunk&lt;CR&gt;&amp;#x22;, &amp;#x22;GitSigns Select Hunk&amp;#x22;)      end,    }    return C  end,}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The commands I hightlight in the live stream are &lt;code&gt;]g&lt;/code&gt; and &lt;code&gt;[g&lt;/code&gt; to navigate between hunks, &lt;code&gt;&amp;#x3C;leader&gt;gg&lt;/code&gt; and &lt;code&gt;&amp;#x3C;leader&gt;gx&lt;/code&gt; to stage and reset hunks, and &lt;code&gt;&amp;#x3C;leader&gt;gG&lt;/code&gt; to stage the entire buffer.&lt;/p&gt;
&lt;h2 id=&quot;lazygit&quot;&gt;lazygit&lt;/h2&gt;
&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;jesseduffield/lazygit&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;simple terminal UI for git commands&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Lastly, I integrated Octo more into my favorite git CLI tool, lazygit, by overwritting the “o” command with a custom command and setting the origional command to “O”.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&quot;~/Library/Application&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;customCommands&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;o&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim -c &apos;:Octo pr create&apos;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;localBranches&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;loadingText&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;Loading Octo&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;Open pull request with Octo&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;subprocess&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;keybinding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;branches&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;createPullRequest&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;O&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;customCommands:  - key: &amp;#x27;o&amp;#x27;    command: &amp;#x22;nvim -c &amp;#x27;:Octo pr create&amp;#x27;&amp;#x22;    context: &amp;#x27;localBranches&amp;#x27;    loadingText: &amp;#x27;Loading Octo&amp;#x27;    description: &amp;#x27;Open pull request with Octo&amp;#x27;    subprocess: truekeybinding:  branches:    createPullRequest: &amp;#x27;O&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;Overall this was fun exploring these tools on the live stream. Each of the tools explored have different features to offer and I can see myself replacing a lot of my time on github.com with gh-dash, octo.nvim, and lazygit.&lt;/p&gt;</content:encoded><category>terminal</category><category>git</category></item><item><title>Building MDX GitHub Embeds with Astro</title><link>https://joshmedeski.com/posts/building-mdx-github-embeds-with-astro/</link><guid isPermaLink="true">https://joshmedeski.com/posts/building-mdx-github-embeds-with-astro/</guid><description>Learn how to easily create MDX GitHub embeds using Astro in this step-by-step tutorial.</description><pubDate>Thu, 10 Aug 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Learn how to easily create MDX GitHub embeds using Astro in this step-by-step tutorial. Enhance your blog posts with dynamic GitHub content for a seamless and interactive reading experience. Here’s how to build an MDX GitHub embed with Astro!&lt;/p&gt;
&lt;p&gt;Here’s an outline of the steps needed to build an MDX GitHub embed with Astro:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a &lt;code&gt;&amp;#x3C;GhRepo /&gt;&lt;/code&gt; Astro component&lt;/li&gt;
&lt;li&gt;Use the component in an MDX file&lt;/li&gt;
&lt;li&gt;Cache data to sqlite with Prisma and sqlite&lt;/li&gt;
&lt;li&gt;Deploy to Netlify&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;1-create-a-ghrepo--astro-component&quot;&gt;1. Create a &lt;code&gt;&amp;#x3C;GhRepo /&gt;&lt;/code&gt; Astro component&lt;/h2&gt;
&lt;p&gt;Astro components are a great way to create reusable components and share them across your application. In this case, we’ll create a &lt;code&gt;&amp;#x3C;GhRepo /&gt;&lt;/code&gt; component that uses &lt;a href=&quot;https://github.com/octokit/octokit.js&quot;&gt;Ocotokit&lt;/a&gt; to pull repo datat from the GitHub API and display it in a card.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;GhRepo.astro&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;astro&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { GitHubIcon } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;./icons/index.astro&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Props&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;string&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; Astro.props&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getRepoData&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;octokit&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Octokit&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ auth: process.env.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;GH_TOKEN&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;repoSplit&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; repo.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;split&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;/&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; octokit.rest.repos.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;owner: repoSplit[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;repo: repoSplit[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; data&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;full_name&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;fullName&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;stargazers_count&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;stargazersCount&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;html_url&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getRepo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;href&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;={url} &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;target&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;_blank&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;not-prose mb-4 block no-underline&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;section&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;flex flex-col gap-2 rounded bg-gh-light p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;GitHubIcon&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;w-8 text-gh-dark sm:w-16&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;strong&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;sm:text-lg&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;{fullName}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;strong&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;sm:text-md text-sm leading-none text-gh-dark&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;{description}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;text-gh-dark&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;🔭 {stargazersCount.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;toLocaleString&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()}&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;div&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;section&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;/&lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;a&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;---import { GitHubIcon } from &amp;#x27;./icons/index.astro&amp;#x27;interface Props {  repo: string}const { repo } = Astro.propsasync function getRepoData(repo: string) {  const octokit = new Octokit({ auth: process.env.GH_TOKEN })  const repoSplit = repo.split(&amp;#x27;/&amp;#x27;)  const { data } = await octokit.rest.repos.get({    owner: repoSplit[0],    repo: repoSplit[1],  })  return data}const {  full_name: fullName,  description,  stargazers_count: stargazersCount,  html_url: url,} = await getRepo(repo)---&lt;a href={url} target=&amp;#x22;_blank&amp;#x22; class=&amp;#x22;not-prose mb-4 block no-underline&amp;#x22;&gt;  &lt;section    class=&amp;#x22;flex flex-col gap-2 rounded bg-gh-light p-2 sm:flex-row sm:gap-4 sm:p-4&amp;#x22;  &gt;    &lt;GitHubIcon class=&amp;#x22;w-8 text-gh-dark sm:w-16&amp;#x22; /&gt;    &lt;div&gt;      &lt;strong class=&amp;#x22;sm:text-lg&amp;#x22;&gt;{fullName}&lt;/strong&gt;      &lt;p class=&amp;#x22;sm:text-md text-sm leading-none text-gh-dark&amp;#x22;&gt;{description}&lt;/p&gt;      &lt;div class=&amp;#x22;text-gh-dark&amp;#x22;&gt;🔭 {stargazersCount.toLocaleString()}&lt;/div&gt;    &lt;/div&gt;  &lt;/section&gt;&lt;/a&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It will look something like this:&lt;/p&gt;
&lt;a href=&quot;https://github.com/octokit/octokit.js&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;octokit/octokit.js&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;The all-batteries-included GitHub SDK for Browsers, Node.js, and Deno.&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;p&gt;Note, I’m using TailwindCSS, and emoji, and an SVG icon component that I created. You can use whatever you want to style your component.&lt;/p&gt;
&lt;h2 id=&quot;2-use-the-component-in-an-mdx-file&quot;&gt;2. Use the component in an MDX file&lt;/h2&gt;
&lt;p&gt;To use the &lt;code&gt;&amp;#x3C;GhRepo /&gt;&lt;/code&gt; component in a MDX file, we will define it as a reusable component in the blog post layout’s Astro file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;PostLayout.astro&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;astro&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { getCollection } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;astro:content&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { CollectionEntry } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;astro:content&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { components } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;../../components/MdxComponents&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;import&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; GhRepo &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;./GhRepo.astro&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getStaticPaths&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;posts&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getCollection&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;posts&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; posts.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;((&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;params: { slug: post.slug },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;props: { post },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;interface&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Props&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;CollectionEntry&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;posts&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;post&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; Astro.props&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Content&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; post.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;render&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Content&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;components&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;={{ GhRepo }} /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;---import { getCollection } from &amp;#x27;astro:content&amp;#x27;import type { CollectionEntry } from &amp;#x27;astro:content&amp;#x27;import { components } from &amp;#x27;../../components/MdxComponents&amp;#x27;import GhRepo from &amp;#x27;./GhRepo.astro&amp;#x27;export async function getStaticPaths() {  const posts = await getCollection(&amp;#x27;posts&amp;#x27;)  return posts.map((post) =&gt; {    return {      params: { slug: post.slug },      props: { post },    }  })}interface Props {  post: CollectionEntry&lt;&amp;#x27;posts&amp;#x27;&gt;}const { post } = Astro.propsconst { Content } = await post.render()---&lt;Content components={{ GhRepo }} /&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Thanks to Stefan Imhoff (@kogakure) for the &lt;a href=&quot;https://twitter.com/kogakure/status/1689527906098114560&quot;&gt;tip on twitter&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;I highly recommend you check out &lt;a href=&quot;https://docs.astro.build/en/guides/content-collections/&quot;&gt;Astro’s content collections guide&lt;/a&gt; to learn more about how to build type-safe markdown content.&lt;/p&gt;
&lt;p&gt;Now, you can call the &lt;code&gt;&amp;#x3C;GhRepo /&gt;&lt;/code&gt; component in your markdown file, making sure to include the repo prop we defined.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;building-mdx-github-embeds-with-astro.mdx&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;mdx&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Building MDX GitHub Embeds with Astro&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;It will look something like this:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;GhRepo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;octokit/octokit.js&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;---title: Building MDX GitHub Embeds with Astro---It will look something like this:&lt;GhRepo repo=&amp;#x22;octokit/octokit.js&amp;#x22; /&gt;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;3-cache-data-to-sqlite-with-prisma-and-sqlite&quot;&gt;3. Cache data to sqlite with Prisma and sqlite&lt;/h2&gt;
&lt;p&gt;Next, we’ll want to create a Prisma model and service to cache the data from the GitHub API to sqlite. This will allow us to make fewer API calls and speed up our application.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;schema.prisma&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;prisma&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;model&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;GhRepo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;fullName        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;@unique&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;description     &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;?&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;stargazersCount &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;Int&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;@default&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;url             &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;@unique&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;updatedAt       &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;DateTime&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;@updatedAt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;@map&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;updated_at&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;model GhRepo {  fullName        String   @unique  description     String?  stargazersCount Int      @default(0)  url             String   @unique  updatedAt       DateTime @updatedAt @map(&amp;#x22;updated_at&amp;#x22;)}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can learn more about how to use Prisma with sqlite in &lt;a href=&quot;https://www.prisma.io/docs/concepts/database-connectors/sqlite&quot;&gt;this guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Then, we’ll update the &lt;code&gt;GhRepo&lt;/code&gt; component logic to handle the API calls and caching.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;GhRepo.astro&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;ts&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;addRepoToCache&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;data&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getRepoData&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;dataToSave&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;fullName: data.full_name,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;...&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(data.description &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;?&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { description: data.description } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {}),&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;stargazersCount: data.stargazers_count,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;url: data.html_url,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; prisma.ghRepo.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;upsert&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;where: { fullName: data.full_name },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;update: dataToSave,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;create: dataToSave,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getRepo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#FFAB70&quot;&gt;repo&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;string&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;cachedRepo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; prisma.ghRepo.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;findFirst&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;where: { fullName: repo },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; (&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;cachedRepo &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;||&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;cachedRepo.updatedAt &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;Date&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;().&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getTime&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;() &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;60&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;24&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;addRepoToCache&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;} &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; cachedRepo&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;const&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;fullName&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;description&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;stargazersCount&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;url&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;getRepo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(repo)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;async function addRepoToCache(repo: string) {  const data = await getRepoData(repo)  const dataToSave = {    fullName: data.full_name,    ...(data.description ? { description: data.description } : {}),    stargazersCount: data.stargazers_count,    url: data.html_url,  }  return await prisma.ghRepo.upsert({    where: { fullName: data.full_name },    update: dataToSave,    create: dataToSave,  })}async function getRepo(repo: string) {  const cachedRepo = await prisma.ghRepo.findFirst({    where: { fullName: repo },  })  if (    !cachedRepo ||    cachedRepo.updatedAt &lt;      new Date(new Date().getTime() - 1000 * 60 * 60 * 24 * 7)  ) {    return await addRepoToCache(repo)  } else {    return cachedRepo  }}const { fullName, description, stargazersCount, url } = await getRepo(repo)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A couple of things to notice here:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Using an &lt;code&gt;upsert&lt;/code&gt; allows us to update the repo if it already exists, or create it if it doesn’t.&lt;/li&gt;
&lt;li&gt;A simple conditional check allows us to only call the GitHub API if the repo doesn’t exist in the database, or if it hasn’t been updated in the last week.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;4-deploy-to-netlify&quot;&gt;4. Deploy to Netlify&lt;/h2&gt;
&lt;p&gt;Finally, we can deploy the application to Netlify. It’s important to configure your Netlify configuration to run prisma’s migrate command before building the Astro app.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;netlify.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;environment&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;NPM_FLAGS = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;--version&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# prevent Netlify npm install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;build&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;command = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;npx pnpm i --store=node_modules/.pnpm-store &amp;#x26;&amp;#x26; prisma migrate dev &amp;#x26;&amp;#x26; npm run build&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;publish = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;dist&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[build.environment]  NPM_FLAGS = &amp;#x22;--version&amp;#x22; # prevent Netlify npm install[build]  command = &amp;#x27;npx pnpm i --store=node_modules/.pnpm-store &amp;#x26;&amp;#x26; prisma migrate dev &amp;#x26;&amp;#x26; npm run build&amp;#x27;  publish = &amp;#x27;dist&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr&gt;
&lt;p&gt;That’s how you can build an MDX GitHub Embed with Astro, Prisma, and sqlite! We created a &lt;code&gt;&amp;#x3C;GhRepo /&gt;&lt;/code&gt; Astro component and styled it with TailwindCSS, pulled the data from the GitHu API using Octokit, cached it to local sqlite with Prisma, and deployed it to Netlify.&lt;/p&gt;
&lt;p&gt;All the code can be found on the &lt;a href=&quot;https://github.com/joshmedeski/joshmedeski.com/pull/19&quot;&gt;pull request from the live stream&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Thanks for reading! There are more Astro posts on the way, so make sure to subscribe to the newsletter to get notified when they’re published.&lt;/p&gt;</content:encoded><category>development</category></item><item><title>Create a Neovim IDE with LazyVim</title><link>https://joshmedeski.com/posts/create-a-neovim-ide-with-lazyvim/</link><guid isPermaLink="true">https://joshmedeski.com/posts/create-a-neovim-ide-with-lazyvim/</guid><description>LazyVim allows you to quickly setup an IDE for Neovim.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.lazyvim.org/&quot;&gt;LazyVim&lt;/a&gt; is a Neovim setup powered by &lt;a href=&quot;&quot;&gt;💤 lazy.nvim&lt;/a&gt; to make it easy to customize and extend your config. It turns Neovim into a IDE with very little effort and offers a simple and flexible structure to modify and extend it to your liking.&lt;/p&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;First, you need to install neovim.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;neovim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install neovim&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I recommend going to the &lt;a href=&quot;https://www.lazyvim.org/installation&quot;&gt;LazyVim installation page&lt;/a&gt; to get the complete and up-to-date instructions, but here’s a quick overview of how to set it up. You have to clone the starter repo, remove the &lt;code&gt;.git&lt;/code&gt; folder, then run neovim with the &lt;code&gt;nvim&lt;/code&gt; command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;https://github.com/LazyVim/starter&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/nvim&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# clone&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-rf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/nvim/.git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# remove .git folder&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;nvim&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# start neovim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git clone https://github.com/LazyVim/starter ~/.config/nvim # clonerm -rf ~/.config/nvim/.git # remove .git foldernvim # start neovim&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;LazyVim will automatically begin to install all it’s plugins and boot up.&lt;/p&gt;
&lt;h2 id=&quot;configure&quot;&gt;Configure&lt;/h2&gt;
&lt;p&gt;LazyVim is configured with the following structure.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/lazy.lua&lt;/code&gt; is the entry file to setup LazyVim and default options.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/config/*&lt;/code&gt; holds other files that help setup basic configurations for Neovim.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.config/nvim/lua/plugins/*&lt;/code&gt; holds files that can automatically be read by LazyVim to manage plugins.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;catppuccin-theme&quot;&gt;Catppuccin Theme&lt;/h3&gt;
&lt;p&gt;The default theme that ships with LazyVim doesn’t work well with Alacritty’s semi-transparent styling that we &lt;a href=&quot;/posts/setting-up-alacritty-for-a-fast-minimal-terminal-emulator&quot;&gt;set up previously&lt;/a&gt;. I recommend the popular scheme &lt;a href=&quot;https://github.com/catppuccin/nvim&quot;&gt;catppuccin&lt;/a&gt; which offers great transparency support. You’ll also learn some basics for overwriting the LazyVim configuration and adding new plugins.&lt;/p&gt;
&lt;p&gt;First, you have to install the catppuccin plugin by adding the following content to a new &lt;code&gt;catppuccin.lua&lt;/code&gt; file in the &lt;code&gt;plugins&lt;/code&gt; folder.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/catppuchin.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;catppuccin/nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;name &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;catppuccin&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;priority &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1000&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;---&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;@class&lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;CatppuccinOptions&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opts &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;transparent_background &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;catppuccin/nvim&amp;#x22;,  name = &amp;#x22;catppuccin&amp;#x22;,  priority = 1000,  ---@class CatppuccinOptions  opts = {    transparent_background = true,  },}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then, you need to overwrite the default colorscheme defined by LazyVim by adding the following plugin file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/nvim/lua/plugins/lazyvim.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;LazyVim/LazyVim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opts &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;colorscheme &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;catppuccin&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;LazyVim/LazyVim&amp;#x22;,  opts = {    colorscheme = &amp;#x22;catppuccin&amp;#x22;,  },}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Restart Neovim and you should now have the catppuccin theme enabled with transparency support. You can learn more about how to configure catppuccin, including adding additional integration support, on it’s &lt;a href=&quot;https://github.com/catppuccin/nvim&quot;&gt;GitHub page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;deep-dive&quot;&gt;Deep Dive&lt;/h2&gt;
&lt;p&gt;There is so much to cover with LazyVim, if you want to get a solid overview of all the features it offers, I recommend my friend Elijah Manor’s video.&lt;/p&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; class=&quot;aspect-video w-full&quot; src=&quot;https://www.youtube.com/embed/N93cTbtLCIM&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; allowfullscreen&gt;&lt;/iframe&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;LazyVim allows you to quickly setup an IDE for Neovim. It’s a great starting point for beginners and offers a simple and flexible structure to modify and extend it to your liking. We covered how to install it and overwrite the theme with Catppuccin. If you want to learn more about LazyVim, I recommend checking the following resources.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lazyvim.org/&quot;&gt;LazyVim documentation&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshmedeski/dotfiles-nvim&quot;&gt;My Neovim config&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>neovim</category></item><item><title>Manage Files with lf</title><link>https://joshmedeski.com/posts/manage-files-with-lf/</link><guid isPermaLink="true">https://joshmedeski.com/posts/manage-files-with-lf/</guid><description>LazyVim allows you to quickly setup an IDE for Neovim.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://pkg.go.dev/github.com/gokcehan/lf&quot;&gt;&lt;code&gt;lf&lt;/code&gt;&lt;/a&gt; is a terminal file manager. Having to constantly change directories with the &lt;code&gt;cd&lt;/code&gt; command and preview files with &lt;code&gt;cat&lt;/code&gt; can be slow and repetitive. &lt;code&gt;lf&lt;/code&gt; allows you to quickly navigate your filesystem and preview files with a single vim-like commands.&lt;/p&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;Install it homebrew with the following command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;lf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install lf&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;using&quot;&gt;Using&lt;/h2&gt;
&lt;p&gt;Using &lt;code&gt;lf&lt;/code&gt; is as simple as running the &lt;code&gt;lf&lt;/code&gt; command which will pull up the file manager. You can use &lt;code&gt;hjkl&lt;/code&gt; as arrow keys to navigate the files. You can also press &lt;code&gt;o&lt;/code&gt; to open up a file in your editor.&lt;/p&gt;
&lt;h2 id=&quot;configuration&quot;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;lf&lt;/code&gt; is configured with a file located at &lt;code&gt;~/.config/lf&lt;/code&gt;. Here are some simple default options that I like to set.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/lf/lfrc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;hidden&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;icons&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;number&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;relativenumber&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;shell&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;promptfmt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\033[34;1m%d\033[0m\033[1m%f\033[0m&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set hiddenset iconsset numberset relativenumberset shell fishset promptfmt &amp;#x22;\033[34;1m%d\033[0m\033[1m%f\033[0m&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can add icon support by install my fish plugin:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;fisher&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;joshmedeski/fish-lf-icons&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;fisher install joshmedeski/fish-lf-icons&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Here’s a preview of what it looks like:&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;lf preview&quot; width=&quot;1200&quot; height=&quot;675&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;/_astro/lf-preview.BhIlQXWW_Zk12qI.webp&quot; &gt;&lt;/p&gt;
&lt;p&gt;I also like to have access to lf while inside neovim, so you can add the following plugin to your LazyVim setup.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;return&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;lmburns/lf.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;cmd &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Lf&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;dependencies &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;nvim-lua/plenary.nvim&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;akinsho/toggleterm.nvim&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opts &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;winblend &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;highlights &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { NormalFloat &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { guibg &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;NONE&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;} },&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;border &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;single&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;escape_quit &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;keys &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;leader&gt;ff&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&amp;#x3C;cmd&gt;Lf&amp;#x3C;cr&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, desc &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;NeoTree&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;},&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;return {  &amp;#x22;lmburns/lf.nvim&amp;#x22;,  cmd = &amp;#x22;Lf&amp;#x22;,  dependencies = { &amp;#x22;nvim-lua/plenary.nvim&amp;#x22;, &amp;#x22;akinsho/toggleterm.nvim&amp;#x22; },  opts = {    winblend = 0,    highlights = { NormalFloat = { guibg = &amp;#x22;NONE&amp;#x22; } },    border = &amp;#x22;single&amp;#x22;,    escape_quit = true,  },  keys = {    { &amp;#x22;&lt;leader&gt;ff&amp;#x22;, &amp;#x22;&lt;cmd&gt;Lf&lt;cr&gt;&amp;#x22;, desc = &amp;#x22;NeoTree&amp;#x22; },  },}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You’ll have to restart LazyVim, but after that you can press &lt;code&gt;&amp;#x3C;space&gt;+f+f&lt;/code&gt; to open lf as a floating window in the directory of the file you have open.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;lf preview&quot; width=&quot;1200&quot; height=&quot;675&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;/_astro/lf-preview-in-neovim.IG8Zbgsp_28eETn.webp&quot; &gt;&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I prefer &lt;code&gt;lf&lt;/code&gt; over sidebar style file mangers and it is infinitely customizable for your needs. We discussed install it with homebrew, configuring it to show icons, and how to use it in Neovim. Check out the &lt;a href=&quot;https://github.com/gokcehan/lf/wiki&quot;&gt;lf wiki&lt;/a&gt; to learn how to customize it more.&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>Manage macOS packages with Homebrew</title><link>https://joshmedeski.com/posts/manage-macos-packages-with-homebrew/</link><guid isPermaLink="true">https://joshmedeski.com/posts/manage-macos-packages-with-homebrew/</guid><description>Homebrew is a package manager for macOS that allows users to easily install and manage packages and libraries.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://brew.sh/&quot;&gt;Homebrew&lt;/a&gt; is a package manager for macOS that allows users to easily install and manage software packages and libraries. It uses a command-line interface and a simple formula system to download and install packages from pre-configured sources, making it easy to keep software up to date and manage dependencies. To install Homebrew, open Terminal and run the following command:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/bash&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-c&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;$(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-fsSL&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;/bin/bash -c &amp;#x22;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This will download and run the Homebrew installation script. Once installed, you can use Homebrew to install packages by running commands like &lt;code&gt;brew install &amp;#x3C;package&gt;&lt;/code&gt;. For example, to install the &lt;code&gt;wget&lt;/code&gt; package, you would run:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;wget&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install wget&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you’re unsure of the name of the package, or if it is available from homebrew, you can search for it using &lt;code&gt;brew search &amp;#x3C;package&gt;&lt;/code&gt;, including applications like Google Chrome.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;search&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;chrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# returns the following results&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Formulae&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;chrome-cli&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;chrome-export&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;chroma&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rome&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;chrony&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;==&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Casks&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;chrome-devtools&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;chromedriver&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;epichrome&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mkchromecast&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;chrome-remote-desktop-host&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;chromium&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;google-chrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew search chrome==&gt; Formulaechrome-cli   chrome-export    chroma     rome  chrony==&gt; Caskschrome-devtools    chromedriver      epichrome   mkchromecastchrome-remote-desktop-host      chromium     google-chrome&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;google-chrome&lt;/code&gt; is listed under the &lt;code&gt;Casks&lt;/code&gt; section, which means it is a graphical application. To install it, you run the install command with the cask flag:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--cask&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;google-chrome&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install --cask google-chrome&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;adding-a-custom-tap&quot;&gt;Adding a custom tap&lt;/h2&gt;
&lt;p&gt;A Homebrew tap is a repository of additional formulae that are not included in the main Homebrew repository. Adding a custom Homebrew tap allows you to install software that is not available in the main repository. Here’s how to add a custom Homebrew tap:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;arl/arl/gitmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# owner/tap/formulae&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install arl/arl/gitmux # owner/tap/formulae&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can also create your own tap to add homebrew support to your favorite packages and applications.&lt;/p&gt;
&lt;h2 id=&quot;keeping-homebrew-up-to-date&quot;&gt;Keeping Homebrew up-to-date&lt;/h2&gt;
&lt;p&gt;To keep your packages and libraries up-to-date, Homebrew offers multiple commands. I recommend running the following commands in this order to ensure you have the latest versions of your packages and libraries.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;brew update&lt;/code&gt; updates the local Homebrew repository with the latest version of package information from the remote repository. This ensures that you have the latest versions and dependencies of packages available to install or upgrade on your system.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew outdated&lt;/code&gt; lists all installed packages that have a newer version available in the remote repository. This command helps you identify which packages are outdated and need to be updated. This is optional but provides a preview of how many packages are going to update when running the next command.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew upgrade&lt;/code&gt; upgrades all outdated packages installed on your system to their latest versions available in the remote repository. This command updates the packages to their latest versions, including all their dependencies, and ensures that your system has the most up-to-date software.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew cleanup --prune=all&lt;/code&gt; removes old versions of installed packages and their associated files, freeing up disk space. The &lt;code&gt;--prune=all&lt;/code&gt; option removes all packages and their associated files, including those that are currently installed and those that are no longer needed. This command is useful when you want to reclaim disk space on your system by removing old and unused packages. However, it is recommended to use this command with caution, as it can potentially remove files that are still needed by other packages or applications.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;brew doctor&lt;/code&gt; diagnoses potential issues with your Homebrew installation. This command checks your Homebrew installation for common issues, such as outdated packages, broken symlinks, and other configuration problems. It also provides suggestions on how to fix any issues that it finds.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;update-script&quot;&gt;Update script&lt;/h2&gt;
&lt;p&gt;I have wrapped everything you need to keep homebrew up-to-date. I will typically run this script a few times per week. Here’s how to create it.&lt;/p&gt;
&lt;p&gt;The only dependency is a CLI tool called gum, which is a tool for glamorous shell scripts. Install it running the following command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;gum&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install gum&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then, create a file name &lt;code&gt;b&lt;/code&gt; in the &lt;code&gt;~/.config/bin&lt;/code&gt; directory. I find this to be a useful place to create custom scripts to automate repetitive tasks.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/bin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/bin/b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;mkdir -p ~/.config/bin &amp;#x26;&amp;#x26; touch ~/.config/bin/b&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then, add the following content to the file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/bin/b&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#!/usr/bin/env bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gum&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--foreground&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--border-foreground&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;12&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--border&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;double&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--align&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;center&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--width&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--margin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;1 0&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;1 2&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;██████╗ ██████╗ ███████╗██╗    ██╗&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;██╔══██╗██╔══██╗██╔════╝██║    ██║&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;██████╔╝██████╔╝█████╗  ██║ █╗ ██║&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;██╔══██╗██╔══██╗██╔══╝  ██║███╗██║&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;██████╔╝██║  ██║███████╗╚███╔███╔╝&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;╚═════╝ ╚═╝  ╚═╝╚══════╝ ╚══╝╚══╝&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gum&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;spin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--show-output&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--spinner&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;minidot&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Updating brew...&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;update&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;OUTDATED&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gum&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;spin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--show-output&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--spinner&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;minidot&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Checking for outdated brew packages&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;outdated&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; [[ &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;-n&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;$OUTDATED&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; ]]; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;then&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;$OUTDATED&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gum&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;confirm&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--selected.background=2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--selected.foreground=0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Upgrade the outdated formulae above?&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;upgrade&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;cleanup&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--prune=all&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;else&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;All brew packages are up to date.&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;printf&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\n&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;fi&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;gum&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;spin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--show-output&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--spinner&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;minidot&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--title&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Checking for brew issues...&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;doctor&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;#!/usr/bin/env bashgum style \  --foreground 12 --border-foreground 12 --border double \  --align center --width 50 --margin &amp;#x22;1 0&amp;#x22; --padding &amp;#x22;1 2&amp;#x22; \  &amp;#x27;██████╗ ██████╗ ███████╗██╗    ██╗██╔══██╗██╔══██╗██╔════╝██║    ██║██████╔╝██████╔╝█████╗  ██║ █╗ ██║██╔══██╗██╔══██╗██╔══╝  ██║███╗██║██████╔╝██║  ██║███████╗╚███╔███╔╝╚═════╝ ╚═╝  ╚═╝╚══════╝ ╚══╝╚══╝&amp;#x27;gum spin --show-output --spinner minidot --title &amp;#x22;Updating brew...&amp;#x22; -- brew updateprintf &amp;#x22;\n&amp;#x22;OUTDATED=$(gum spin --show-output --spinner minidot --title &amp;#x22;Checking for outdated brew packages&amp;#x22; -- brew outdated)if [[ -n &amp;#x22;$OUTDATED&amp;#x22; ]]; then  echo &amp;#x22;$OUTDATED&amp;#x22;  gum confirm --selected.background=2 --selected.foreground=0 &amp;#x22;Upgrade the outdated formulae above?&amp;#x22; &amp;#x26;&amp;#x26; brew upgrade  printf &amp;#x22;\n&amp;#x22;  brew cleanup --prune=all  printf &amp;#x22;\n&amp;#x22;else  echo &amp;#x22;All brew packages are up to date.&amp;#x22;  printf &amp;#x22;\n&amp;#x22;figum spin --show-output --spinner minidot --title &amp;#x22;Checking for brew issues...&amp;#x22; -- brew doctor&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You need to make the &lt;code&gt;b&lt;/code&gt; script executable, add the &lt;code&gt;~/.config/bin&lt;/code&gt; directory to your path, on the default macOS shell, then source the zshrc for the PATH to reflect the new directory.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;chmod&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+x&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/bin/b&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;export PATH=&quot;~/.config/bin:$PATH&quot;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;&gt;&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.zshrc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.zshrc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;chmod +x ~/.config/bin/becho &amp;#x27;export PATH=&amp;#x22;~/.config/bin:$PATH&amp;#x22;&amp;#x27; &gt;&gt; ~/.zshrcsource ~/.zshrc&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Finally, you can run the &lt;code&gt;b&lt;/code&gt; command in your terminal to ensure you have the latest versions of my favorite packages and applications which includes bug fixes, security updates, and new features. But be careful, if there are breaking changes to a package, you may need to update your configuration to support the new version. You can visit the package’s release notes to see what has changed.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;In summary, Homebrew is a package manager for macOS that simplifies the installation and management of software packages and libraries. It uses a command-line interface and a simple formula system to download and install packages from pre-configured sources using &lt;code&gt;brew install&lt;/code&gt;, making it easy to keep software up-to-date and manage dependencies. To add a custom tap, you can use the &lt;code&gt;brew tap&lt;/code&gt; command to add a repository of additional formulae that are not included in the main Homebrew repository. To keep Homebrew up-to-date, you can use &lt;code&gt;brew update&lt;/code&gt;, &lt;code&gt;brew outdated&lt;/code&gt;, &lt;code&gt;brew upgrade&lt;/code&gt;, &lt;code&gt;brew cleanup&lt;/code&gt;, and &lt;code&gt;brew doctor&lt;/code&gt; commands. I also showed you a simple &lt;code&gt;b&lt;/code&gt; script that automates these commands for an easy way to stay up-to-date.&lt;/p&gt;</content:encoded><category>macos</category><category>terminal</category></item><item><title>Manage Terminal Sessions with tmux</title><link>https://joshmedeski.com/posts/manage-terminal-sessions-with-tmux/</link><guid isPermaLink="true">https://joshmedeski.com/posts/manage-terminal-sessions-with-tmux/</guid><description>tmux is a terminal multiplexer with lets you create multiple terminal session.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://github.com/tmux/tmux/wiki&quot;&gt;tmux&lt;/a&gt; is a terminal multiplexer that allows you to create and manage multiple terminal sessions within a single window. It enables you to run multiple programs or shell sessions simultaneously, switch between them easily, and detach and reattach sessions, even if you disconnect from the terminal.&lt;/p&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;To install tmux, run the following brew command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tmux&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install tmux&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;creating-sessions&quot;&gt;Creating sessions&lt;/h2&gt;
&lt;p&gt;tmux works by creating sessions, you can create your first session by running the following command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;tmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;new&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-s&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;hello-world&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;tmux new -s &amp;#x22;hello-world&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You’ll notice a green bar at the bottom of your terminal with the words &lt;code&gt;hello-world&lt;/code&gt; to the far right, this is the tmux status bar!&lt;/p&gt;
&lt;p&gt;To detach from tmux, run the detach command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;tmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;detach-client&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;tmux detach-client&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You’ll notice the green bar at the bottom disappears, but tmux is still running in the background! To reattach, you can run the attach command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;tmux&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;attach&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;tmux attach&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;And just like that, you will end up back where you were before. Detaching from tmux sessions becomes very powerful as you create multiple sessions at the same time. Unlike graphical applications, like VSCode, tmux runs like a server and allows you to switch between different sessions quickly and easily with very little overhead on your computer. We’ll get more into that later.&lt;/p&gt;
&lt;h2 id=&quot;window-commands&quot;&gt;Window commands&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; commands are driven by the prefix key binding which is &lt;code&gt;ctrl+b&lt;/code&gt;. Press &lt;code&gt;ctrl+b&lt;/code&gt; (aka &lt;code&gt;&amp;#x3C;prefix&gt;&lt;/code&gt;) and then &lt;code&gt;c&lt;/code&gt; to “create” a tmux window. Think of these as macOS tabs that are common in browsers and file managers.&lt;/p&gt;
&lt;p&gt;Windows can then be split into panes with &lt;code&gt;&amp;#x3C;prefix&gt;%&lt;/code&gt; and killed with &lt;code&gt;&amp;#x3C;prefix&gt;x&lt;/code&gt;. Note, when there are multiple panes the kill command will close the active pane, if there is only one pane the kill command will close the window entirely and switch to the previous window in the session, if there are no windows left it will kill the entire session.&lt;/p&gt;
&lt;p&gt;The prefix key is my least favorite feature of tmux. Thankfully, Alacritty allows us to create custom keybindings to recreate common macOS-style shortcuts to make tmux much easier to use. Add the following to your &lt;code&gt;alacritty.yml&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key_bindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# split tmux window vertically&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;%&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# split tmux window horizontally&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# create a new tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;W&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;x&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# kill the current pane&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Tab&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Control&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to next tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;LBracket&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;p&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to next tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;RBracket&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to previous tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;key_bindings:  - { key: E, mods: Command, chars: &amp;#x22;\x02\&amp;#x22;&amp;#x22; } # split tmux window vertically  - { key: E, mods: Command|Shift, chars: &amp;#x22;\x02%&amp;#x22; } # split tmux window horizontally  - { key: T, mods: Command, chars: &amp;#x22;\x02c&amp;#x22; } # create a new tmux window  - { key: W, mods: Command, chars: &amp;#x22;\x02x&amp;#x22; } # kill the current pane  - { key: Tab, mods: Control, chars: &amp;#x22;\x02n&amp;#x22; } # switch to next tmux window  - { key: LBracket, mods: Command|Shift, chars: &amp;#x22;\x02p&amp;#x22; } # switch to next tmux window  - { key: RBracket, mods: Command|Shift, chars: &amp;#x22;\x02n&amp;#x22; } # switch to previous tmux window&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Give these a try! These familiar shortcuts, like &lt;code&gt;cmd+t&lt;/code&gt; will create a new tmux window and &lt;code&gt;ctrl+w&lt;/code&gt; will close it. I have a whole video explaining all my &lt;a href=&quot;/posts/macos-keyboard-shortcuts-for-tmux&quot;&gt;macOS Keyboard Shortcuts for tmux&lt;/a&gt; if you want to learn more about how this works.&lt;/p&gt;
&lt;h2 id=&quot;configuration&quot;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;I think tmux isn’t very pretty by default, and there are multiple options I prefer to change. All of tmux’s configuration is stored in a &lt;code&gt;~/.config/tmux/tmux.conf&lt;/code&gt; file. Create it and add the following options.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/tmux/tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;base-index&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# start indexing windows at 1 instead of 0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;detach-on-destroy&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# don&apos;t exit from tmux when closing a session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;escape-time&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;         &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# zero-out escape time delay&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;history-limit&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1000000&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# increase history size (from 2,000)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mouse&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;              &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# enable mouse support&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;renumber-windows&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# renumber all windows when any window is closed&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;set-clipboard&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;on&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# use system clipboard&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;status-interval&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;     &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# update the status bar every 3 seconds&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;bind-key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;kill-pane&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;         &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# skip &quot;kill-pane 1? (y/n)&quot; prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set -g base-index 1          # start indexing windows at 1 instead of 0set -g detach-on-destroy off # don&amp;#x27;t exit from tmux when closing a sessionset -g escape-time 0         # zero-out escape time delayset -g history-limit 1000000 # increase history size (from 2,000)set -g mouse on              # enable mouse supportset -g renumber-windows on   # renumber all windows when any window is closedset -g set-clipboard on      # use system clipboardset -g status-interval 3     # update the status bar every 3 secondsbind-key x kill-pane         # skip &amp;#x22;kill-pane 1? (y/n)&amp;#x22; prompt&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;To style the tmux status bar, I prefer a transparent, top-aligned bar, with minimal items display.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/tmux/tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;status-left&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;#[fg=blue,bold]#S&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# session name&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;status-left-length&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;200&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# increase length (from 10)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;status-position&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;top&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;             &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# macOS / darwin style&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;status-right&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                 &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# blank&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;status-style&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;bg=default&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;       &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# transparent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set -g status-left &amp;#x22;#[fg=blue,bold]#S&amp;#x22; # session nameset -g status-left-length 200          # increase length (from 10)set -g status-position top             # macOS / darwin styleset -g status-right &amp;#x27;&amp;#x27;                 # blankset -g status-style &amp;#x27;bg=default&amp;#x27;       # transparent&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The session name is style using &lt;code&gt;#[fg=blue,bold]&lt;/code&gt; to make it blue and bolded to match our &lt;a href=&quot;/posts/shell-customization-with-starship&quot;&gt;starship&lt;/a&gt; configuration and create a more consistent look.&lt;/p&gt;
&lt;h3 id=&quot;plugins&quot;&gt;Plugins&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; plugins can be managed by &lt;a href=&quot;https://github.com/tmux-plugins/tpm&quot;&gt;tpm, the tmux plugin manager&lt;/a&gt;. To install it you first have to clone tpm to your machine.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;https://github.com/tmux-plugins/tpm&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.tmux/plugins/tpm&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Add the following to your tmux config file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/tmux/tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# List of plugins&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;@plugin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;tmux-plugins/tpm&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;@plugin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;joshmedeski/tmux-fzf-url&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;run&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;~/.tmux/plugins/tpm/tpm&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;# List of pluginsset -g @plugin &amp;#x27;tmux-plugins/tpm&amp;#x27;set -g @plugin &amp;#x27;joshmedeski/tmux-fzf-url&amp;#x27;# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)run &amp;#x27;~/.tmux/plugins/tpm/tpm&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Save the file and run &lt;code&gt;&amp;#x3C;prefix&gt;I&lt;/code&gt; to install the tmux plugins.&lt;/p&gt;
&lt;h3 id=&quot;open-urls&quot;&gt;Open URLs&lt;/h3&gt;
&lt;p&gt;Notice in the snippet above a &lt;code&gt;joshmedeski/tmux-fzf-url&lt;/code&gt; plugin was added. This plugin allows you to open URLS visible in your tmux buffer. Once installed, you will need fzf installed to use it.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;fzf&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install fzf&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;&amp;#x3C;prefix&gt;u&lt;/code&gt; will open a fzf window that lists all available URLs that can be opened. Including GitHub style strings (“username/repo”)! But as mentioned earlier, you can add an Alacritty keybinding to map this command to &lt;code&gt;cmd+o&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key_bindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# ... existing keybindings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;O&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;u&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open URLs &apos;joshmedeski/tmux-fzf-url&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;key_bindings:  # ... existing keybindings  - { key: O, mods: Command, chars: &amp;#x22;\x02u&amp;#x22; } # open URLs &amp;#x27;joshmedeski/tmux-fzf-url&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;tmux&lt;/code&gt; is extremely powerful. We covered the basic commands for creating sessions, configuring options, setting up macOS shortcuts with Alacritty, and adding your first plugin. There is much more to cover so I recommend checking out my other content on tmux, like &lt;a href=&quot;/posts/smart-tmux-sessions-with-zoxide-and-fzf&quot;&gt;Smart tmux sessions with zoxide and fzf &lt;/a&gt;. You can also run &lt;code&gt;man tmux&lt;/code&gt; in the terminal to open the tmux manual and dive deep into everything tmux has to offer.&lt;/p&gt;</content:encoded><category>tmux</category></item><item><title>Quick Git Management with Lazygit</title><link>https://joshmedeski.com/posts/quick-git-management-with-lazygit/</link><guid isPermaLink="true">https://joshmedeski.com/posts/quick-git-management-with-lazygit/</guid><description>Lazygit makes it quick to run git commands.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Git is a central part of the development workflow. It’s important to have a good understanding of how it works and how to use it. &lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;&lt;code&gt;lazygit&lt;/code&gt;&lt;/a&gt; is a terminal UI for git that makes it easy to run common git commands efficiently and with ease.&lt;/p&gt;
&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;jesseduffield/lazygit&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;simple terminal UI for git commands&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;To install lazygit, you guessed it, run the following homebrew command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;lazygit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install lazygit&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;It can be opened by moving to a in your teriminal to a git repository and run the &lt;code&gt;lazygit&lt;/code&gt; command. It will open a terminal UI that offers a lot of useful git commands. You can view the available commands by pressing &lt;code&gt;?&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;lazygit preview&quot; width=&quot;1200&quot; height=&quot;754&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;/_astro/lazygit-preview.CuCP2oh__B16CA.webp&quot; &gt;&lt;/p&gt;
&lt;h3 id=&quot;custom-shortcut&quot;&gt;Custom shortcut&lt;/h3&gt;
&lt;p&gt;As mentioned in the &lt;a href=&quot;/posts/manage-terminal-sessions-with-tmux&quot;&gt;tmux intro&lt;/a&gt;, we can setup lazygit to a custom macOS style shortcut &lt;code&gt;cmd+g&lt;/code&gt;. This can be done by adding the following to your &lt;code&gt;~/.tmux.conf&lt;/code&gt; file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/tmux/tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;new-window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-n&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;lazygit&apos;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;lazygit&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;bind g new-window -n &amp;#x27;lazygit&amp;#x27; lazygit&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This will bind lazygit to &lt;code&gt;&amp;#x3C;prefix&gt;g&lt;/code&gt; in tmux. To map that to &lt;code&gt;cmd+g&lt;/code&gt; add the following to your alacritty config file in the &lt;code&gt;key_bindings&lt;/code&gt; section.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key_bindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# ... existing keybindings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open git manager &apos;jesseduffield/lazygit&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;key_bindings:  # ... existing keybindings  - { key: G, mods: Command, chars: &amp;#x22;\x02g&amp;#x22; } # open git manager &amp;#x27;jesseduffield/lazygit&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now, you can press &lt;code&gt;cmd+g&lt;/code&gt; to open lazygit from anywhere in your terminal. You can press &lt;code&gt;q&lt;/code&gt; while in lazygit to close it and return to wherever you where previously.&lt;/p&gt;
&lt;h2 id=&quot;configure&quot;&gt;Configure&lt;/h2&gt;
&lt;p&gt;For macOS, the configuration is located in the user application support file. Here are a few basic configuration options.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;/Users/josh/Library/Application Support/lazygit/config.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;gui&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;showIcons&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;theme&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;activeBorderColor&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;magenta&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;bold&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;inactiveBorderColor&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;black&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;showFileTree&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# for rendering changes files in a tree format&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;os&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;editCommand&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;nvim&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;editCommandTemplate&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;{{editor}} {{filename}}&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;keybinding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;universal&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;quit&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;q&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;gui:  showIcons: true  theme:    activeBorderColor:      - magenta      - bold    inactiveBorderColor:      - black  showFileTree: true # for rendering changes files in a tree formatos:  editCommand: &amp;#x27;nvim&amp;#x27;  editCommandTemplate: &amp;#x27;{{editor}} {{filename}}&amp;#x27;keybinding:  universal:    quit: &amp;#x27;q&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;how-to-use&quot;&gt;How to use&lt;/h2&gt;
&lt;p&gt;Using lazygit is pretty straight forward. Here are a few common commands that I use often.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;space&lt;/code&gt; toggles the selected file to the staging area&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c&lt;/code&gt; opens the commit window, which lets you write a commit message and commit the staged changes&lt;/li&gt;
&lt;li&gt;&lt;code&gt;P&lt;/code&gt; pushes the current branch to the remote&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many more commands including branch management, interacting with history, and more.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;lazygit&lt;/code&gt; is the quickest and easier way to manage git repositories. It’s a great tool to have in your toolbelt and I highly recommend it. Binding to &lt;code&gt;cmd+g&lt;/code&gt; makes it very quick to open and close. I recommend looking through the &lt;a href=&quot;https://github.com/jesseduffield/lazygit/wiki&quot;&gt;lazygit wiki&lt;/a&gt; to learn more about creating custom commands and more.&lt;/p&gt;</content:encoded><category>git</category><category>terminal</category></item><item><title>Customized Shell Prompt with Starship</title><link>https://joshmedeski.com/posts/shell-customization-with-starship/</link><guid isPermaLink="true">https://joshmedeski.com/posts/shell-customization-with-starship/</guid><description>Starship is a minimal, blazing-fast, and infinitely customizable prompt for any shell.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://starship.rs/&quot;&gt;Starship&lt;/a&gt; is a minimal, blazing-fast, and infinitely customizable prompt for any shell. I’ve been &lt;a href=&quot;https://www.youtube.com/playlist?list=PLdtuRouvdurxRCLs_PnVBVxd9pc2po1em&quot;&gt;interviewing developers&lt;/a&gt; recently and the majority of them are using Starship! It’s easy to setup and configure. Here’s how to get started.&lt;/p&gt;
&lt;h2 id=&quot;install&quot;&gt;Install&lt;/h2&gt;
&lt;p&gt;Install starship by running the following brew command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;starship&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install starship&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now that starship is installed, you have to source it in your &lt;code&gt;config.fish&lt;/code&gt; by adding the following line.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;starship&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;init&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;fish&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;source&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;starship init fish | source&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;configuration&quot;&gt;Configuration&lt;/h2&gt;
&lt;p&gt;To configure starship, create a &lt;code&gt;~/.config/starship.toml&lt;/code&gt; and add the following content.&lt;/p&gt;
&lt;p&gt;First, swap out some of the characters with custom Nerd Font options. You can find more on &lt;a href=&quot;https://www.nerdfonts.com/cheat-sheet&quot;&gt;Nerd Font’s website&lt;/a&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/starship.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;character&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;success_symbol = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\uf054&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;](white)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;vicmd_symbol = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\ue62b&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;](white)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;error_symbol = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;[&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\uf467&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;](red)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[character]success_symbol = &amp;#x22;[\uf054](white)&amp;#x22; # vicmd_symbol = &amp;#x22;[\ue62b](white)&amp;#x22; # error_symbol = &amp;#x22;[\uf467](red)&amp;#x22; # &quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Next, I prefer changing the directory name to blue, since we’ll be updating tmux in a future post to the same color as well, creating a consistent style.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/starship.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;directory&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;style = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;blue bold&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[directory]style = &amp;#x22;blue bold&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Finally, I prefer a more minimal approach to my prompt, so I prefer disabling many of the built in modules.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/starship.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;package&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;username&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;hostname&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;aws&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;docker_context&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git_branch&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git_commit&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git_state&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git_metrics&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git_status&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;disabled = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[package]disabled = true[username]disabled = true[hostname]disabled = true[aws]disabled = true[docker_context]disabled = true[git_branch]disabled = true[git_commit]disabled = true[git_state]disabled = true[git_metrics]disabled = true[git_status]disabled = true&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Check out all the &lt;a href=&quot;https://starship.rs/config/&quot;&gt;configuration options&lt;/a&gt; to figure out which modules you can configure or customize to your liking.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;That’s it! Starship works great out-of-the-box and has a low learning-curve. It is smart and will provide contextual information related to where you are in the terminal. With a few customizations it has a minimal and consistent look making it a great addition to my dev workflow.&lt;/p&gt;</content:encoded><category>terminal</category><category>fish</category></item><item><title>Set up fish, the user-friendly interactive shell</title><link>https://joshmedeski.com/posts/set-up-fish-the-user-friendly-interactive-shell/</link><guid isPermaLink="true">https://joshmedeski.com/posts/set-up-fish-the-user-friendly-interactive-shell/</guid><description>Fish (Friendly Interactive SHell) is a Unix shell designed to be user-friendly and interactive. It features syntax highlighting, autosuggestions</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Fish (Friendly Interactive SHell) is a Unix shell designed to be user-friendly and interactive. It features syntax highlighting, autosuggestions, and a built-in help system, among other features. Fish aims to be more intuitive and easier to use than traditional Unix shells like Bash, while still providing powerful scripting capabilities. Modern macOS computers ship with zsh as the default shell, you can check out &lt;a href=&quot;/posts/why-i-switched-from-zsh-to-fish&quot;&gt;Why I Switched from zsh to fish&lt;/a&gt; but the main reasons are the speed, simplicity, autosuggestions and vim mode that the fish shell offers.&lt;/p&gt;
&lt;h2 id=&quot;installing-fish&quot;&gt;Installing fish&lt;/h2&gt;
&lt;p&gt;Fish does not come pre-installed on macOS, you have to install it with Homebrew by running the following command in the terminal.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install fish&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you’re not familiar with Homebrew, check out &lt;a href=&quot;/posts/manage-macos-packages-with-homebrew&quot;&gt;Managing macOS packages with Homebrew&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;making-fish-your-default-shell&quot;&gt;Making fish your default shell&lt;/h2&gt;
&lt;p&gt;Now that the fish shell is installed, you have to manually change the default shell by completing the following steps.&lt;/p&gt;
&lt;p&gt;First, you will need to get the path to the fish shell executable. If you’re unfamiliar with how executables in the terminal work, I recommend checking out &lt;a href=&quot;/posts/what-is-the-terminal&quot;&gt;What is the terminal?&lt;/a&gt;. Run the following &lt;code&gt;which&lt;/code&gt; command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;which&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;which fish&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The command will output something similar to &lt;code&gt;/opt/homebrew/bin/fish&lt;/code&gt;. Copy the value from your terminal and add it to the &lt;code&gt;/etc/shells&lt;/code&gt; file. You’ll want to edit the file using the &lt;code&gt;sudo&lt;/code&gt; command, since this is an system-level file that lists valid login shells for user accounts. Here is how to update it using &lt;code&gt;vi&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;vi&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;/etc/shells&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;sudo vi /etc/shells&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Enter your user password to open the file then add the fish shell’s path as an new line in the file and save it.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;/etc/shells&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# List of acceptable shells for chpass(1).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# Ftpd will not allow users to connect who are not using&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# one of these shells.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/opt/homebrew/bin/fish&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# use output from `which fish`&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/csh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/dash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/ksh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/tcsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;/bin/zsh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;# List of acceptable shells for chpass(1).# Ftpd will not allow users to connect who are not using# one of these shells./opt/homebrew/bin/fish # use output from &amp;#x60;which fish&amp;#x60;/bin/bash/bin/csh/bin/dash/bin/ksh/bin/sh/bin/tcsh/bin/zsh&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you’re unfamiliar with &lt;code&gt;vi&lt;/code&gt;, I recommend running &lt;code&gt;vimtutor&lt;/code&gt; in your terminal which will guide you through the basics of how to edit text from inside the terminal.&lt;/p&gt;
&lt;p&gt;Now that you’ve added fish as a valid login shell for macOS, you can run the &lt;code&gt;chsh&lt;/code&gt; (change shell) command to change the default login shell.&lt;/p&gt;
&lt;p&gt;Copy the command below and run all three commands at once to quickly change your default shell to fish.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;basename&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;pwd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;pbcopy&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;chsh&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-s&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;/opt/homebrew/bin/fish&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;pbpaste&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;cd ~basename $(pwd) | pbcopychsh -s /opt/homebrew/bin/fish $(pbpaste)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You may be prompted, again, to enter your user password and when the command is completed your login shell is now switched to fish. In order for your changes to take effect, you’ll need to log out and log back in to your user account. I recommend you &lt;strong&gt;restart your computer&lt;/strong&gt; for good measure. When you log back in fish will be your default shell, congrats!&lt;/p&gt;
&lt;h2 id=&quot;configuring-fish&quot;&gt;Configuring fish&lt;/h2&gt;
&lt;p&gt;Fish configuration is written in &lt;a href=&quot;https://fishshell.com/docs/current/language.html#language&quot;&gt;its own scripting language&lt;/a&gt;. The entry point for configuring the fish shell is the &lt;code&gt;config.fish&lt;/code&gt; file which can be created with the following command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/fish&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;mkdir -p ~/.config/fish &amp;#x26;&amp;#x26; touch ~/.config/fish/config.fish&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This command first creates the &lt;code&gt;~/.config/fish&lt;/code&gt; directory with the &lt;code&gt;-p&lt;/code&gt; option, which creates any parent directories that do not exist. Then it creates the &lt;code&gt;config.fish&lt;/code&gt; file inside the &lt;code&gt;~/.config/fish&lt;/code&gt; directory using the &lt;code&gt;touch&lt;/code&gt; command. Note: all of fish’s configuration files are stored in &lt;code&gt;~/.config/fish&lt;/code&gt; more of which will explore later.&lt;/p&gt;
&lt;h3 id=&quot;configure-homebrew&quot;&gt;Configure homebrew&lt;/h3&gt;
&lt;p&gt;I highly recommend you &lt;a href=&quot;/posts/manage-macos-packages-with-homebrew&quot;&gt;Manage macOS packages with Homebrew&lt;/a&gt;. Add the following eval code to your config file to configure homebrew with the fish shell.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;fish&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; (/opt/homebrew/bin/brew shellenv)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;eval (/opt/homebrew/bin/brew shellenv)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Evaluating a command in the shell is typically done with &lt;code&gt;$(cmd)&lt;/code&gt; but fish uses &lt;code&gt;(/cmd)&lt;/code&gt; instead, dropping in the &lt;code&gt;$&lt;/code&gt;. Some developers I’ve talked have chosen not to use fish because of the subtle syntax differences from more traditional shells, but I think it’s worth it.&lt;/p&gt;
&lt;h3 id=&quot;add-directories-to-path&quot;&gt;Add directories to &lt;code&gt;PATH&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;In fish, the &lt;code&gt;fish_add_path&lt;/code&gt; function is used to add directories to the &lt;code&gt;PATH&lt;/code&gt; environment variable. Adding directories to your system’s &lt;code&gt;PATH&lt;/code&gt; environment variable allows you to run programs located in those directories from anywhere on your system without specifying the full path. By doing so, you extend the list of directories that the shell searches for executables, making it more convenient to run programs and execute commands.&lt;/p&gt;
&lt;p&gt;To add support for Homebrew executables to the fish shell, add the following lines to your &lt;code&gt;~/.config.fish&lt;/code&gt; file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;fish&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;fish_add_path&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; ~/.config/bin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;fish_add_path ~/.config/bin&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I recommend creating a &lt;code&gt;~/.config/bin&lt;/code&gt; directory to store any custom scripts you make come up to improve your workflow or automate tasks.&lt;/p&gt;
&lt;h3 id=&quot;setting-environment-variables&quot;&gt;Setting environment variables&lt;/h3&gt;
&lt;p&gt;In the Fish shell, the &lt;code&gt;set&lt;/code&gt; command is used to create and modify shell variables. Shell variables are used to store values that can be referenced and reused throughout a shell session or script. Here are some common variables that are helpful.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;fish&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; -U fish_greeting &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# disable fish greeting&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; -U fish_key_bindings fish_vi_key_bindings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set -U fish_greeting # disable fish greetingset -U fish_key_bindings fish_vi_key_bindings&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;-U&lt;/code&gt; flag is used with the &lt;code&gt;set&lt;/code&gt; command to create or modify a universal variable. Universal variables are similar to regular variables, but they have a global scope and can be accessed from any shell session or script.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;fish_greeting&lt;/code&gt; variable is used to customize the greeting message that is displayed when a new shell session is started. By default, the greeting message includes the Fish version number and a welcome message. Since I am constantly spinning up new shells in my development workflow, I prefer to disable the fish greeting by setting it with not value.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;fish_vi_key_bindings&lt;/code&gt; variable allows you to hit escape while writing a command in fish to switch to a vi-mode to easily manipulate your command before running it. Just like vi, you can hit &lt;code&gt;i&lt;/code&gt; to get back to insert mode.
There are many other variables you can set to customize your shell, check out &lt;a href=&quot;https://fishshell.com/docs/current/index.html#variables&quot;&gt;the fish documentation&lt;/a&gt; for more information.
The next most common variable to change is the default editor for your shell. This is set with the &lt;code&gt;EDITOR&lt;/code&gt; variable.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;fish&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; -Ux EDITOR nvim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set -Ux EDITOR nvim&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Note the &lt;code&gt;-x&lt;/code&gt; flag is used with the &lt;code&gt;set&lt;/code&gt; command to export a variable as an environment variable. When a variable is exported, it becomes available to child processes and can be accessed by programs and utilities that use environment variables. This is helpful as you extend your development environment with other tools that can generate sub processes&lt;/p&gt;
&lt;h2 id=&quot;abbreviations&quot;&gt;Abbreviations&lt;/h2&gt;
&lt;p&gt;One of my favorite features of fish is the ability to create abbreviations. This works similar to a shell aliasm but the main difference is the abbreviation will expand when ran.&lt;/p&gt;
&lt;p&gt;You can create abbreviations with the &lt;code&gt;abbr&lt;/code&gt; command in your &lt;code&gt;config.fish&lt;/code&gt; file. Let’s add a few helpful ones for homebrew.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;fish&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; bi &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;brew install&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; bic &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;brew install --cask&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; bin &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;brew info&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; binc &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;brew info --cask&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; bs &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;brew search&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;abbr bi &amp;#x22;brew install&amp;#x22;abbr bic &amp;#x22;brew install --cask&amp;#x22;abbr bin &amp;#x22;brew info&amp;#x22;abbr binc &amp;#x22;brew info --cask&amp;#x22;abbr bs &amp;#x22;brew search&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You’ll have to source your &lt;code&gt;config.fish&lt;/code&gt; file for the change to be reflected in your shell.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;source ~/.config/fish/config.fish&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now, you type &lt;code&gt;bs&amp;#x3C;space&gt;&lt;/code&gt; and you’ll see the prompt quickly expand to &lt;code&gt;brew search &lt;/code&gt; to allow you to create commands quickly using a simple mnemonic-style abbreviations. Abbreviations speed up my dev workflow significantly and are one of my favorite features of the fish shell.&lt;/p&gt;
&lt;h2 id=&quot;plugins&quot;&gt;Plugins&lt;/h2&gt;
&lt;p&gt;There is a large community of plugins for the fish shell. I recommend using &lt;a href=&quot;https://github.com/jorgebucaran/fisher&quot;&gt;fisher&lt;/a&gt; to manage them.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-sL&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;fisher&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;jorgebucaran/fisher&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source &amp;#x26;&amp;#x26; fisher install jorgebucaran/fisher&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A great starter plugin for fish is &lt;a href=&quot;https://github.com/meaningful-ooo/sponge&quot;&gt;sponge&lt;/a&gt;, which cleans your fish history from typos automatically. It can be installed with the fisher command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;fisher&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;meaningful-ooo/sponge&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;fisher install meaningful-ooo/sponge&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You’ll notice two things.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A &lt;code&gt;~/.config/fish/fish_plugins&lt;/code&gt; file was created and added sponge as a plugin. This is how fisher manages plugins.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;~/.config/fish/functions&lt;/code&gt; directory was created and multiple &lt;code&gt;_sponge_*.fish&lt;/code&gt; files were added to it. This is the plugin code which fish will automatically read to extend the shell. This folder will contain more files as you add more plugins, you can even create your own!&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;The fish shell is a simple, fast, and intuitive shell alternative for macOS. In this post we installed fish, set it as your default user shell, configured homebrew, added a directory to your path, customized some of fish’s options, create abbreviations, and installed your first plugin.&lt;/p&gt;</content:encoded><category>fish</category></item><item><title>Set up Alacritty for a fast, minimal, terminal emulator</title><link>https://joshmedeski.com/posts/setting-up-alacritty-for-a-fast-minimal-terminal-emulator/</link><guid isPermaLink="true">https://joshmedeski.com/posts/setting-up-alacritty-for-a-fast-minimal-terminal-emulator/</guid><description>Alacritty is a terminal emulator for macOS that is fast, and can be configured to a minimal look.</description><pubDate>Mon, 26 Jun 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Choosing a good terminal emulator is important because it serves as the foundation for a productive and efficient workflow in a command-line environment. A good terminal emulator should provide a fast and responsive interface, support for various customization options, and compatibility with a wide range of programs and tools. It should also have features such as keyboard shortcuts to help users streamline their tasks and navigate the command-line interface with ease. Overall, a good terminal emulator can greatly enhance the user’s experience and make working in a command-line environment more efficient and enjoyable.&lt;/p&gt;
&lt;p&gt;I have experimented with many terminal emulators over the years, and have ultimately decided Alacritty to be the best choice for me. It is a GPU-accelerated terminal emulator which means it is incredibly fast and efficient. It also allows you to customize fonts and spacing, as well as a semi-transparent and borderless visual which providers a minimalist look which is the biggest selling point for me.&lt;/p&gt;
&lt;h2 id=&quot;how-to-install&quot;&gt;How to install&lt;/h2&gt;
&lt;p&gt;The easiest way to add the Alacritty terminal emulator is to your computer is to install it with Homebrew by running the following command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--cask&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alacritty&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install --cask alacritty&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you’re not familiar with Homebrew check out &lt;a href=&quot;/posts/manage-macos-packages-with-homebrew&quot;&gt;manage macOS packages with Homebrew&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;how-to-configure&quot;&gt;How to configure&lt;/h2&gt;
&lt;p&gt;The Alacritty terminal emulator can be configured by a hidden TOML file in your home directory. Create a &lt;code&gt;~/.config/alacritty/alacritty.toml&lt;/code&gt; file using the following command.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;mkdir&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/alacritty&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;touch&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/alacritty/alacritty.toml&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;mkdir -p ~/.config/alacritty &amp;#x26;&amp;#x26; touch ~/.config/alacritty/alacritty.toml&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This command first creates the &lt;code&gt;~/.config/alacritty&lt;/code&gt; directory with the &lt;code&gt;-p&lt;/code&gt; option, which creates any parent directories that do not exist. Then it creates the &lt;code&gt;alacritty.conf&lt;/code&gt; file inside the &lt;code&gt;~/.config/alacritty&lt;/code&gt; directory using the &lt;code&gt;touch&lt;/code&gt; command.&lt;/p&gt;
&lt;p&gt;Alacritty can automatically reload the configuration file when the file is changed by setting the &lt;code&gt;live_config_reload&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;live_config_reload = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;live_config_reload = true&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;TERM&lt;/code&gt; shell environmental variable specifies the type of terminal emulator that is being used to interact with the shell. It tells Alacritty what features and capabilities are available. I recommend using &lt;code&gt;xterm-256color&lt;/code&gt;. &lt;code&gt;xterm&lt;/code&gt; supports a wide range of terminal features, including color, mouse support, and support for multiple fonts and character sets. It also supports many of the standard terminal control sequences used by Unix-like systems. &lt;code&gt;256color&lt;/code&gt; supports 256 colors by using an extended color palette, which allows for a greater range of colors to be displayed than the standard 16 colors supported by many terminals. This is achieved by using escape sequences to set the foreground and background colors of text.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;TERM&lt;/code&gt; variable is put under the &lt;code&gt;env&lt;/code&gt; key which sets environment variables that are passed to the shell when Alacritty is launched.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;env&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;TERM = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;xterm-256color&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[env]TERM = &amp;#x22;xterm-256color&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;By default, Alacritty looks the same as any other terminal emulators for macOS. But there are a handful of options that give it a semi-transparent minimalist look that I find aesthetically pleasing and unique.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;decorations = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;buttonless&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;dynamic_padding = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;opacity = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0.9&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;x = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;25&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;y = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;20&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[window]decorations = &amp;#x22;buttonless&amp;#x22;dynamic_padding = falseopacity = 0.9[window.padding]x = 25y = 20&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;buttonless&lt;/code&gt; decorations key removes the macOS title bar and border, giving it a minimal and distraction-free look. The &lt;code&gt;opacity&lt;/code&gt; key takes a value between &lt;code&gt;0-1&lt;/code&gt; and makes the window semi-transparent. I’ve found that this value will vary based on your wallpaper. The &lt;code&gt;dynamic_padding&lt;/code&gt; and &lt;code&gt;padding&lt;/code&gt; keys offer hard-coded spacing between the end of the window and the content. I use predictable spacing with the values above.&lt;/p&gt;
&lt;h2 id=&quot;using-a-custom-font&quot;&gt;Using a custom font&lt;/h2&gt;
&lt;p&gt;One of the most important customization features for any terminal emulator is picking and setting up a custom font! I’m a big fan of &lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Fonts&lt;/a&gt; and I use lots of icons throughout my development environment. There are dozens of Nerd Fonts to choose from but as a macOS user I’ve prefer Apple’s San Francisco font which is a neutral, flexible, sans-serif typeface used as the system font for all Apple devices. Thankfully, Aditya has patched the &lt;a href=&quot;https://github.com/epk/SF-Mono-Nerd-Font&quot;&gt;SF Mono font with Nerd Font&lt;/a&gt;. You can download it via homebrew.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;epk/epk/font-sf-mono-nerd-font&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install epk/epk/font-sf-mono-nerd-font&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can download the “JetBrainsMono Nerd Font” font from the &lt;a href=&quot;https://www.nerdfonts.com/font-downloads&quot;&gt;Nerd Fonts website&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once the font is downloaded and installed, add the following to your config file:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;size = &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;20.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;bold&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;family = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;JetBrainsMono Nerd Font&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;style = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Heavy&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;bold_italic&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;family = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;JetBrainsMono Nerd Font&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;style = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Heavy Italic&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;italic&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;family = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;JetBrainsMono Nerd Font&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;style = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Medium Italic&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;[&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;normal&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;family = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;JetBrainsMono Nerd Font&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;style = &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;Medium&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;[font]size = 20.0[font.bold]family = &amp;#x22;JetBrainsMono Nerd Font&amp;#x22;style = &amp;#x22;Heavy&amp;#x22;[font.bold_italic]family = &amp;#x22;JetBrainsMono Nerd Font&amp;#x22;style = &amp;#x22;Heavy Italic&amp;#x22;[font.italic]family = &amp;#x22;JetBrainsMono Nerd Font&amp;#x22;style = &amp;#x22;Medium Italic&amp;#x22;[font.normal]family = &amp;#x22;JetBrainsMono Nerd Font&amp;#x22;style = &amp;#x22;Medium&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;I prefer the font styles of &lt;code&gt;Medium&lt;/code&gt; and &lt;code&gt;Heavy&lt;/code&gt; to add more weight to the font, I find this helps with the make it more legible with the semi-transparent window. As well as a font size of &lt;code&gt;20&lt;/code&gt;. These values can be adjusted that best fit your monitor and workflow.&lt;/p&gt;
&lt;h2 id=&quot;colorizing&quot;&gt;Colorizing&lt;/h2&gt;
&lt;p&gt;Another important area to customize your development environment is choosing a color palette. A popular color pallet is &lt;a href=&quot;https://github.com/catppuccin/alacritty&quot;&gt;Catppuccin&lt;/a&gt;, which is “a community-driven pastel theme that aims to be the middle ground between low and high contrast themes”.&lt;/p&gt;
&lt;p&gt;To get the Catppuccin themes, you can clone the TOML files to your Alacritty config directory.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;clone&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;https://github.com/catppuccin/alacritty.git&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;~/.config/alacritty/catppuccin&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;git clone https://github.com/catppuccin/alacritty.git ~/.config/alacritty/catppuccin&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Next, Alacritty’s &lt;code&gt;TOML&lt;/code&gt; configuration supports the ability to import other &lt;code&gt;TOML&lt;/code&gt; files to extend customization. You can add entries to a &lt;code&gt;import&lt;/code&gt; key:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.toml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;import = [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;~/.config/alacritty/catppuccin/catppuccin-mocha.toml&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;import = [&amp;#x22;~/.config/alacritty/catppuccin/catppuccin-mocha.toml&amp;#x22;]&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;If you want to explore more color schemes, check out the &lt;a href=&quot;https://github.com/alacritty/alacritty-theme&quot;&gt;Alacritty Theme repository&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;
&lt;p&gt;Choosing a good terminal emulator is important for productivity in a command-line environment. A good terminal emulator should be fast, customizable, and compatible with a variety of programs. Alacritty is a GPU-accelerated terminal emulator that allows for customization of fonts, spacing, and visual appearance. We have installed Alacritty, customized it’s appearance with a &lt;code&gt;yaml&lt;/code&gt; file including the terminal environment, window style, fonts, and colors.&lt;/p&gt;
&lt;p&gt;This is just the starting point for customizing Alacrity. If you want to explore all of the features Alacritty has to offer, check out the &lt;a href=&quot;https://github.com/alacritty/alacritty&quot;&gt;GitHub repository&lt;/a&gt; for more info. You can also view my full Alacritty configuration &lt;a href=&quot;https://github.com/joshmedeski/dotfiles/blob/main/.config/alacritty/alacritty.toml&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>Mark Huggins&apos; Dev Workflow</title><link>https://joshmedeski.com/posts/mark-huggins-dev-workflow/</link><guid isPermaLink="true">https://joshmedeski.com/posts/mark-huggins-dev-workflow/</guid><description>Mark shares his Neovim and tmux dev workflow and Moonlander keyboard layout. I share my dev workflow as well.</description><pubDate>Sat, 20 May 2023 16:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Mark and I talk about our Moonlander keyboard layouts and developer workflows using tmux and neovim including plugins and shortcuts we used for coding and navigating our environments. We mention various tools and plugins that we had use to customize our workflows, such as LazyVim, gitmux, and fzf. We also discuss how we use copilot in Neovim, and why we prefer minimal setups. Our conversation emphasize the importance of continually experimenting with and adapting our workflows to find what works best for us.&lt;/p&gt;
&lt;h2 id=&quot;marks-stuff&quot;&gt;Mark’s Stuff&lt;/h2&gt;
&lt;a href=&quot;https://github.com/mhuggins7278/dotfiles&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;mhuggins7278/dotfiles&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;my .files - powered by Ansible&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;joshs-stuff&quot;&gt;Josh’s Stuff&lt;/h2&gt;
&lt;a href=&quot;https://github.com/joshmedeski/dotfiles&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;joshmedeski/dotfiles&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Josh&apos;s dotfiles for his developer environment&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;neovim&quot;&gt;neovim&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lazyvim.org/&quot;&gt;LazyVim - neovim setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.lunarvim.org/&quot;&gt;LunarVim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;a href=&quot;https://github.com/nvim-lua/kickstart.nvim&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;nvim-lua/kickstart.nvim&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;A launch point for your personal nvim configuration&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/ThePrimeagen/harpoon&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;ThePrimeagen/harpoon&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Getting you where you want with the fewest keystrokes.&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/zbirenbaum/copilot-cmp&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;zbirenbaum/copilot-cmp&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Lua plugin to turn github copilot into a cmp source&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;h2 id=&quot;tmux&quot;&gt;tmux&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joshmedeski.com/posts/macos-keyboard-shortcuts-for-tmux/&quot;&gt;macOS Keyboard Shortcuts for tmux - video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joshmedeski.com/posts/smart-tmux-sessions-with-zoxide-and-fzf/&quot;&gt;Smart tmux sessions with zoxide and fzf - video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshmedeski/t-smart-tmux-session-manager&quot;&gt;t-smart-tmux-session-manager - tmux plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/arl/gitmux&quot;&gt;gitmux - git for tmux status bar&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshmedeski/tmux-fzf-url&quot;&gt;tmux-fzf-url - tmux plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joshmedeski.com/posts/tmux-nerd-font-window-name-plugin/&quot;&gt;tmux Nerd Font window name plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.joshmedeski.com/posts/popup-history-with-tmux-and-fzf/&quot;&gt;Popup history with tmux and fzf - popup&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;terminal&quot;&gt;Terminal&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://starship.rs/&quot;&gt;starship - shell prompt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Mu4frtvHPOY&quot;&gt;A Pretty Terminal in 5 minutes! - video&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;lazygit - git terminal user interface (TUI)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>terminal</category><category>keyboards</category></item><item><title>Customize Yabai with Lua</title><link>https://joshmedeski.com/posts/customizing-yabai-with-lua/</link><guid isPermaLink="true">https://joshmedeski.com/posts/customizing-yabai-with-lua/</guid><description>Easily create custom keyboard shortcuts to control yabai with Hammerspoon and the Lua programming language</description><pubDate>Sat, 06 May 2023 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;If you’re a macOS user who enjoys using the &lt;a href=&quot;https://duckduckgo.com/?q=yabai&amp;#x26;ia=web&quot;&gt;yabai window manager&lt;/a&gt;, you may find yourself wanting to customize your keyboard bindings to better suit your workflow. Luckily, with the help of &lt;a href=&quot;https://www.hammerspoon.org/&quot;&gt;Hammerspoon&lt;/a&gt; and the &lt;a href=&quot;https://www.lua.org/&quot;&gt;Lua programming language&lt;/a&gt;, you can easily create custom keyboard shortcuts to control yabai.&lt;/p&gt;
&lt;h2 id=&quot;what-is-yabai&quot;&gt;What is yabai?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/koekeishiya/yabai&quot;&gt;yabai&lt;/a&gt; is a window management utility for macOS that allows you to organize your windows in a customizable and efficient way. It provides a range of features, including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Expanding windows to fill all the available space on the screen, automatically&lt;/li&gt;
&lt;li&gt;Splitting windows into multiple panes, automatically&lt;/li&gt;
&lt;li&gt;Stacking windows on top of each other&lt;/li&gt;
&lt;li&gt;Moving windows between different desktops&lt;/li&gt;
&lt;li&gt;Resizing and positioning windows with precision&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have a video on&lt;/p&gt;
&lt;p&gt;yabai is controlled through a command-line interface and can be customized using a configuration file, there is a common solution for yabai users called &lt;a href=&quot;https://github.com/koekeishiya/skhd&quot;&gt;skhd&lt;/a&gt;. I used it for years but recently discovered a new tool that allows me to write the configuration in a proper programming language and offer some improvements and additional features called Hammerspoon.&lt;/p&gt;
&lt;h2 id=&quot;what-is-hammerspoon&quot;&gt;What is Hammerspoon?&lt;/h2&gt;
&lt;p&gt;Hammerspoon is a powerful automation tool for macOS that allows you to write Lua scripts to control various aspects of your system. With Hammerspoon, you can create custom keyboard shortcuts, automate repetitive tasks, and even control other applications. I will show you how to use Lua to write simple reusable functions, as well as leverage loops to make configuring yabai easier and more fun!&lt;/p&gt;
&lt;h2 id=&quot;setting-up-hammerspoon&quot;&gt;Setting up Hammerspoon&lt;/h2&gt;
&lt;p&gt;To get started with Hammerspoon, can download and install it from the official website, or run the following command if you have &lt;a href=&quot;https://brew.sh/&quot;&gt;homebrew&lt;/a&gt; installed on your machine.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;hammerspoon&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--cask&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install hammerspoon --cask&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Once you’ve installed Hammerspoon, you can open the Hammerspoon console by pressing &lt;code&gt;Command + Option + Control + H&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;setting-up-the-hammerspoon-configuration-file&quot;&gt;Setting up the Hammerspoon Configuration File&lt;/h2&gt;
&lt;p&gt;To set up the Hammerspoon Configuration File:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open or create a file named ﻿&lt;code&gt;~/.hammerspoon/init.lua&lt;/code&gt; in your Hammerspoon configuration directory. You can find the directory by opening Hammerspoon and selecting “Open Config” from the menu bar.&lt;/li&gt;
&lt;li&gt;Add your desired configuration code to the ﻿init.lua file. This can include defining hotkeys, creating window management functions, and more. You can find examples and documentation on the Hammerspoon website. We will be adding yabai hotkeys in the next step.&lt;/li&gt;
&lt;li&gt;Save the ﻿init.lua file and reload your Hammerspoon configuration by selecting “Reload Config” from the Hammerspoon menu bar. Your changes should now take effect.&lt;/li&gt;
&lt;li&gt;Optionally, you can also use a third-party tool like Spoons to manage your Hammerspoon configuration more easily. Spoons are modular extensions that can be loaded into Hammerspoon to provide additional functionality. For now, I will show you how to create your own keybindings with Lua.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;defining-configuration-file-for-yabai&quot;&gt;Defining configuration file for yabai&lt;/h2&gt;
&lt;p&gt;Since hammerspoon can be used to configure more than just yabai keybindings, I prefer separating it. Thankfully, Lua offers a &lt;code&gt;require&lt;/code&gt; function to import a separate file. Add this to your &lt;code&gt;~/.hammerspoon&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.hammerspoon/keyboard/init.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;require&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;keyboard.yabai&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;require(&amp;#x22;keyboard.yabai&amp;#x22;)&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;creating-reusable-functions-for-configuration&quot;&gt;Creating reusable functions for configuration&lt;/h2&gt;
&lt;p&gt;Now, you can create a directory in your &lt;code&gt;~/.hammerspoon&lt;/code&gt; directory called &lt;code&gt;keyboard&lt;/code&gt;, then create a file called &lt;code&gt;~/.hammerspoon/keyboard/yabai.lua&lt;/code&gt; .&lt;/p&gt;
&lt;h3 id=&quot;sending-yabai-messages&quot;&gt;Sending Yabai Messages&lt;/h3&gt;
&lt;p&gt;In the &lt;code&gt;yabai.lua&lt;/code&gt; config, create a reusable function called &lt;code&gt;yabai&lt;/code&gt; that will execute the binary and run a message, make sure to run &lt;code&gt;which yabai&lt;/code&gt; to confirm the path to your binary is &lt;code&gt;/opt/homebrew/bin/yabai&lt;/code&gt;. Replace it if you get a different value.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.hammerspoon/keyboard/yabai.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- Send message(s) to a running instance of yabai.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(commands)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; _, cmd &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;ipairs&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(commands) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;os.execute&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;/opt/homebrew/bin/yabai -m &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; cmd)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;-- Send message(s) to a running instance of yabai.local function yabai(commands)  for _, cmd in ipairs(commands) do    os.execute(&amp;#x22;/opt/homebrew/bin/yabai -m &amp;#x22; .. cmd)  endend&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;The &lt;code&gt;for&lt;/code&gt; loop is being used so we can pass multiple messages in one function. For example, moving windows to a new desktop and focusing the desktop at the same time.&lt;/p&gt;
&lt;h3 id=&quot;configure-altkey-keybindings&quot;&gt;Configure &lt;code&gt;alt+{key}&lt;/code&gt; Keybindings&lt;/h3&gt;
&lt;p&gt;I prefer using the &lt;code&gt;alt&lt;/code&gt; key to drive all of my yabai commands, here is a reusable function for binding to &lt;code&gt;alt+{key}&lt;/code&gt; and an argument to pass the yabai commands.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.hammerspoon/keyboard/yabai.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(key, commands)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;hs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;hotkey&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;alt&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}, key, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(commands)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- alpha&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --toggle zoom-fullscreen&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;l&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --focus recent&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;m&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --toggle mission-control&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;p&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --toggle pip&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --toggle padding&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --toggle gap&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;r&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --rotate 90&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;t&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --toggle float&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --grid 4:4:1:1:2:2&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;-- special characters&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&apos;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --layout stack&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --layout bsp&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;tab&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --focus recent&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;})&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;local function alt(key, commands)  hs.hotkey.bind({ &amp;#x22;alt&amp;#x22; }, key, function()    yabai(commands)  end)end-- alphaalt(&amp;#x22;f&amp;#x22;, { &amp;#x22;window --toggle zoom-fullscreen&amp;#x22; })alt(&amp;#x22;l&amp;#x22;, { &amp;#x22;space --focus recent&amp;#x22; })alt(&amp;#x22;m&amp;#x22;, { &amp;#x22;space --toggle mission-control&amp;#x22; })alt(&amp;#x22;p&amp;#x22;, { &amp;#x22;window --toggle pip&amp;#x22; })alt(&amp;#x22;g&amp;#x22;, { &amp;#x22;space --toggle padding&amp;#x22;, &amp;#x22;space --toggle gap&amp;#x22; })alt(&amp;#x22;r&amp;#x22;, { &amp;#x22;space --rotate 90&amp;#x22; })alt(&amp;#x22;t&amp;#x22;, { &amp;#x22;window --toggle float&amp;#x22;, &amp;#x22;window --grid 4:4:1:1:2:2&amp;#x22; })-- special charactersalt(&amp;#x22;&amp;#x27;&amp;#x22;, { &amp;#x22;space --layout stack&amp;#x22; })alt(&amp;#x22;;&amp;#x22;, { &amp;#x22;space --layout bsp&amp;#x22; })alt(&amp;#x22;tab&amp;#x22;, { &amp;#x22;space --focus recent&amp;#x22; })&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;configure-altnumber-keybindings-for-spaces&quot;&gt;Configure &lt;code&gt;alt+{number}&lt;/code&gt; Keybindings for Spaces&lt;/h2&gt;
&lt;p&gt;In order to configure numbers 1-9 with keybindings, we will add a &lt;code&gt;altShift&lt;/code&gt; function and &lt;code&gt;altShiftNumber&lt;/code&gt; then loop through those numbers with a &lt;code&gt;for&lt;/code&gt; loop turn each number into a string and enable the configurations to focus a desktop space with &lt;code&gt;alt+{number}&lt;/code&gt; and move the current window in focus to another desktop space and then focus on the new space the window is now on. This second function, triggered by &lt;code&gt;alt+shift+{number}&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; System Integrity Protection needs to be disable in order for yabai to focus a different desktop space. It is a helpful use-case but I realize some people can’t disable this feature. Please be aware of the security risks involved when disabling this feature.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.hammerspoon/keyboard/yabai.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;altShift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(key, commands)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;hs.&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;hotkey&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;bind&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;({ &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;alt&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;shift&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}, key, &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;()&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(commands)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;altShiftNumber&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(number)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;altShift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(number, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --space &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; number, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --focus &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; number })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; i &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; num &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;tostring&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(i)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(num, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;space --focus &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; num })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;altShiftNumber&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(num)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;local function altShift(key, commands)  hs.hotkey.bind({ &amp;#x22;alt&amp;#x22;, &amp;#x22;shift&amp;#x22; }, key, function()    yabai(commands)  end)endlocal function altShiftNumber(number)  altShift(number, { &amp;#x22;window --space &amp;#x22; .. number, &amp;#x22;space --focus &amp;#x22; .. number })endfor i = 1, 9 do  local num = tostring(i)  alt(num, { &amp;#x22;space --focus &amp;#x22; .. num })  altShiftNumber(num)end&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;configure-althjkl-keybindings-as-arrow-keys&quot;&gt;Configure &lt;code&gt;alt+{hjkl}&lt;/code&gt; Keybindings as Arrow Keys&lt;/h2&gt;
&lt;p&gt;Finally, use &lt;code&gt;hjkl&lt;/code&gt; to focus on or move to a different window on your desktop. Holding &lt;code&gt;alt+shift&lt;/code&gt; will swap the window instead.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.hammerspoon/keyboard/yabai.lua&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;lua&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;local&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; homeRow &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; { h &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;west&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, j &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;south&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, k &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;north&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, l &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;east&quot; &lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;for&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; key, direction &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;pairs&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(homeRow) &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;do&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(key, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --focus &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; direction })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;altShift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;(key, { &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;window --swap &quot; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;..&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; direction })&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;end&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;local homeRow = { h = &amp;#x22;west&amp;#x22;, j = &amp;#x22;south&amp;#x22;, k = &amp;#x22;north&amp;#x22;, l = &amp;#x22;east&amp;#x22; }for key, direction in pairs(homeRow) do  alt(key, { &amp;#x22;window --focus &amp;#x22; .. direction })  altShift(key, { &amp;#x22;window --swap &amp;#x22; .. direction })end&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Save the &lt;code&gt; init.lua&lt;/code&gt; and &lt;code&gt;yabai.lua&lt;/code&gt; files and reload your Hammerspoon configuration by selecting “Reload Config” from the Hammerspoon menu bar. Your changes should now take effect.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;You can customize this script to create your own keyboard bindings for yabai. For example, you could bind a key combination to change the size of a window or toggle between layouts. &lt;code&gt;man yabai&lt;/code&gt; can be run in your terminal to read more about the available messages that are supported.&lt;/p&gt;
&lt;p&gt;Customizing your keyboard bindings for yabai using Hammerspoon and the Lua programming language improves my workflow productivity, making it easy to use reusable functions and loops to quickly create and update my keybindings.&lt;/p&gt;
&lt;p&gt;You can check out the &lt;a href=&quot;https://github.com/joshmedeski/dotfiles/blob/a1713162226f770fdd27178947fefbdefc6fff2f/.hammerspoon/keyboard/yabai.lua#L12&quot;&gt;whole &lt;code&gt;yabai.lua&lt;/code&gt; config here&lt;/a&gt; or checkout my &lt;a href=&quot;https://github.com/joshmedeski/dotfiles/blob/main/.hammerspoon/keyboard/yabai.lua&quot;&gt;latest config here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;With Hammerspoon, you can create custom keyboard shortcuts to control yabai in any way you see fit, I recommend making it your own and adding and removing whatever works best for your workflow.&lt;/p&gt;
&lt;p&gt;Thanks for getting to the end, I recommend checking out my introduction to yabai and how I use it in: &lt;a href=&quot;/posts/blazing-fast-window-management-on-macos/&quot;&gt;Blazing Fast Window Management on macOS&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>macos</category></item><item><title>Optimizing Obsidian for Content Creation</title><link>https://joshmedeski.com/posts/optimizing-obsidian-for-content-creation/</link><guid isPermaLink="true">https://joshmedeski.com/posts/optimizing-obsidian-for-content-creation/</guid><description>A bunch of tips and best practices for getting the most out of Obsidian for content creation and digital gardening</description><pubDate>Fri, 14 Apr 2023 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My friend, &lt;a href=&quot;https://brandonkboswell.com/&quot;&gt;Brandon Boswell&lt;/a&gt;, recently sat down again with me. I’m in the process of adopting &lt;a href=&quot;https://obsidian.md/&quot;&gt;Obsidian&lt;/a&gt;. We cover what Brandon has learned over the last 2 years of using Obsidian and some tips he’s found for finishing the creative process to actually deliver more content. We also cover a bunch of tips and best practices for getting the most out of Obsidian.&lt;/p&gt;</content:encoded><category>obsidian</category><category>productivity</category></item><item><title>Abhishek Keshri&apos;s Dev Workflow</title><link>https://joshmedeski.com/posts/abhishek-keshris-dev-workflow/</link><guid isPermaLink="true">https://joshmedeski.com/posts/abhishek-keshris-dev-workflow/</guid><description>Abhishek shares his Neovim and tmux dev workflow. We discuss our use of various tools and plugins to be productive as developers.</description><pubDate>Thu, 23 Mar 2023 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The conversation is about me and Abhishek’s developer environment setup. We discuss our use of various tools and plugins, including Lazygit, fuzzy-finder, and Catppuccin for transparency. We also discuss different key bindings for Git and file management, and our use of abbreviations in our shell environment. We share tips and tricks for optimizing our workflow, and express an interest in trying out each other’s favorite tools. The conversation ends with an agreement to keep in touch and share updates on our respective setups.&lt;/p&gt;
&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@2kabhishek&quot;&gt;Abhishek’s YouTube channel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/2KAbhishek/Dotfiles&quot;&gt;Abhishek’s Dotfiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshmedeski/dotfiles&quot;&gt;Josh’s Dotfiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=QMVIJhC9Veg&quot;&gt;PDE: A different take on editing code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshmedeski/t-smart-tmux-session-manager&quot;&gt;t-smart-tmux-session-manager&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/pwntester/octo.nvim&quot;&gt;octo.nvim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/ldelossa/gh.nvim&quot;&gt;gh.nvim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/2kabhishek/tmux-tilit/&quot;&gt;Abhishek’s tmux-tilit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/renerocksai/telekasten.nvim&quot;&gt;telekasten.nvim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/features/copilot&quot;&gt;GitHub Copilot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/2KAbhishek/co-author.nvim&quot;&gt;Abhishek’s co-author.nvim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Maan2003/lsp_lines.nvim&quot;&gt;lsp_lines.nvim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/folke/which-key.nvim&quot;&gt;which-key.nvim plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/joshmedeski/tmux-fzf-url&quot;&gt;Josh’s tmux-fzf-url plugin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>terminal</category></item><item><title>tmux Nerd Font window name plugin</title><link>https://joshmedeski.com/posts/tmux-nerd-font-window-name-plugin/</link><guid isPermaLink="true">https://joshmedeski.com/posts/tmux-nerd-font-window-name-plugin/</guid><description>Automatically rename your tmux windows to Nerd Font icons. It is a tmux plugin that you can install in minutes</description><pubDate>Wed, 01 Mar 2023 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Automatically rename your tmux windows to Nerd Font icons.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/joshmedeski/tmux-nerd-font-window-name&quot;&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tmux/tmux&quot;&gt;tmux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tmux-plugins/tpm&quot;&gt;tpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.nerdfonts.com/&quot;&gt;Nerd Font&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-to-install&quot;&gt;How to install&lt;/h2&gt;
&lt;h3 id=&quot;1-install-tpm-plugin&quot;&gt;1. Install tpm plugin&lt;/h3&gt;
&lt;p&gt;This script can be installed with the &lt;a href=&quot;https://github.com/tmux-plugins/tpm&quot;&gt;Tmux Plugin Manager (tpm)&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Add the following line to your &lt;code&gt;~/.tmux.conf&lt;/code&gt; file:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;@plugin&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;joshmedeski/tmux-nerd-font-window-name&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set -g @plugin &amp;#x27;joshmedeski/tmux-nerd-font-window-name&amp;#x27;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;how-it-works&quot;&gt;How it works&lt;/h2&gt;
&lt;p&gt;When installed, your window names will automatically update to a Nerd Font that matches the activity (ex: vim, bash, node, ect…).&lt;/p&gt;
&lt;h2 id=&quot;contributing&quot;&gt;Contributing&lt;/h2&gt;
&lt;p&gt;I encourage contributors! I want to make this plugin the best it can be. Feel free to fork it and submit pull requests with any new ideas or improvements you have.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/joshmedeski/tmux-nerd-font-window-name&quot;&gt;View on GitHub&lt;/a&gt;&lt;/p&gt;</content:encoded><category>tmux</category></item><item><title>vim + tmux with Nick Nisi</title><link>https://joshmedeski.com/posts/vim-tmux-with-nick-nisi/</link><guid isPermaLink="true">https://joshmedeski.com/posts/vim-tmux-with-nick-nisi/</guid><description>Nick and I talk about our developer workflows and what tools we&apos;re finding interesting with tmux and neovim.</description><pubDate>Thu, 23 Feb 2023 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Nick and I talk about our developer workflows and what tools we’re finding interesting in the world of tmux and neovim.&lt;/p&gt;
&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;
&lt;a href=&quot;https://github.com/nicknisi/dotfiles&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;nicknisi/dotfiles&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;vim, zsh, git, homebrew, neovim - my whole world&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;a href=&quot;https://github.com/joshmedeski/dotfiles&quot; target=&quot;_blank&quot; class=&quot;not-prose mb-4 block no-underline text-gh-light&quot;&gt;&lt;section class=&quot;flex flex-col gap-2 rounded bg-gh-dark p-2 sm:flex-row sm:gap-4 sm:p-4&quot;&gt;&lt;div&gt;&lt;div class=&quot;flex items-center gap-2&quot;&gt;&lt;svg aria-hidden=&quot;true&quot; focusable=&quot;false&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; display=&quot;inline-block&quot; overflow=&quot;visible&quot; style=&quot;vertical-align:text-bottom&quot; class=&quot;h-6 w-6&quot;&gt;&lt;path d=&quot;M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;strong class=&quot;sm:text-lg&quot;&gt;joshmedeski/dotfiles&lt;/strong&gt;&lt;/div&gt;&lt;p class=&quot;sm:text-md text-sm leading-none text-white&quot;&gt;Josh&apos;s dotfiles for his developer environment&lt;/p&gt;&lt;/div&gt;&lt;/section&gt;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=5r6yzFEXajQ&quot;&gt;vim + tmux - OMG!Code video&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://git-scm.com/docs/git-worktree&quot;&gt;Git worktree docs&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2uEqYw-N8uE&quot;&gt;ThePrimeagen’s git worktree video&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=l_TTxc0AcCw&quot;&gt;Josh’s Smart tmux sessions with zoxide and fzf video&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=fYsCAOfGjxE&quot;&gt;Josh’s Blazing Fast Window Management on macOS video&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=BLp61-Lq0kQ&quot;&gt;Josh’s macos keyboard shortcuts for tmux video&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>neovim</category><category>tmux</category></item><item><title>Clutter Free macOS</title><link>https://joshmedeski.com/posts/clutter-free-macos/</link><guid isPermaLink="true">https://joshmedeski.com/posts/clutter-free-macos/</guid><description>I&apos;ve set up a clutter free environment for myself on macOS. I&apos;ll show you a few tips on how.</description><pubDate>Wed, 14 Dec 2022 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I have a minimal, clutter-free, setup on my macOS environment, using tools like tmux and Vim. I have customized my settings to hide the dock and menu bar, and I prefer to use keyboard shortcuts rather than menu items. I also use a window manager and a transparent border for my terminal. I find this setup to be peaceful and conducive to focus, as it removes distractions and allows me to be more productive.&lt;/p&gt;
&lt;p&gt;The two most helpful settings for making macOS clutter free are in the “Desktop &amp;#x26; Dock” settings in macOS Ventura.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;macOS setting screenshot&quot; width=&quot;1654&quot; height=&quot;1932&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;/_astro/clutter-free-macos-settings.CcMdyxI4_11QBlD.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>macos</category></item><item><title>What is the terminal?</title><link>https://joshmedeski.com/posts/what-is-the-terminal/</link><guid isPermaLink="true">https://joshmedeski.com/posts/what-is-the-terminal/</guid><description>Terminology related to the terminal are often misinterpreted. The terminal is</description><pubDate>Thu, 27 Oct 2022 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Terminology related to the terminal are often misinterpreted. The terminal is kind of a scary thing for some people. So I want to demystify how it works and break down the different terms.&lt;/p&gt;
&lt;h2 id=&quot;terminal-app&quot;&gt;Terminal App&lt;/h2&gt;
&lt;p&gt;A terminal application is a computer program that emulates the terminal environment on your computer. Every operating system comes with a built-in terminal application, but there are many third-party applications that can be found online (both open-source and paid).&lt;/p&gt;
&lt;h2 id=&quot;shell-environment&quot;&gt;Shell Environment&lt;/h2&gt;
&lt;p&gt;Next, the shell is an environment to interact with your computer. There are multiple shell environments to choose from, but they all have a base set of commands (like &lt;code&gt;cd&lt;/code&gt;, &lt;code&gt;ls&lt;/code&gt;, and &lt;code&gt;pwd&lt;/code&gt;) that allows you to interact with your computer at a lower-level.&lt;/p&gt;
&lt;p&gt;The most basic shell environment is &lt;code&gt;sh&lt;/code&gt; and the most common is &lt;code&gt;bash&lt;/code&gt;. In recent years, Apple decided to make &lt;code&gt;zsh&lt;/code&gt; their default shell and I, personally, use one called &lt;code&gt;fish&lt;/code&gt;. Each one offers different features and each can be customized in different ways.&lt;/p&gt;
&lt;p&gt;If your not sure which shell environment you are using, running &lt;code&gt;echo $SHELL&lt;/code&gt; will output your shell.&lt;/p&gt;
&lt;h2 id=&quot;extending-functionality&quot;&gt;Extending Functionality&lt;/h2&gt;
&lt;p&gt;Once you have chosen and setup your shell environment, you can continue to extend the functionality of your terminal by adding third-party scripts called binaries. For example, &lt;a href=&quot;https://github.com/junegunn/fzf&quot;&gt;&lt;code&gt;fzf&lt;/code&gt;&lt;/a&gt; a fuzzy finder CLI (command-line interface). To install it, I recommend the &lt;a href=&quot;https://brew.sh&quot;&gt;homebrew&lt;/a&gt; package manager for macOS (&lt;code&gt;brew install fzf&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Once installed, the &lt;code&gt;fzf&lt;/code&gt; binary (which is a file) is stored to your path. The path is a set of directories for your shell environment to look for files that can run. This is defined in your shell environment and tools downloaded from brew are typically stored at &lt;code&gt;/opt/homebrew/bin&lt;/code&gt;. There are also many binaries pre-installed on your computer (beyond &lt;code&gt;zsh&lt;/code&gt;) in &lt;code&gt;/usr/sbin&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The most important thing to know is that these scripts that your run have full access to your computer, so make sure to download them responsibly!&lt;/p&gt;
&lt;h2 id=&quot;closing-thoughts&quot;&gt;Closing Thoughts&lt;/h2&gt;
&lt;p&gt;Binaries or we can use third party package tools like home brew to install additional binaries onto our computer. I hope all of this makes sense. Let’s chat for a second.&lt;/p&gt;
&lt;p&gt;I think the terminal is an interesting and exciting environment to do, complex things. You can automate your life in a lot of ways with this. Most importantly, as a programmer, you can develop and extend it. I recommend you ease into it, and take it one step at a time.&lt;/p&gt;
&lt;p&gt;So that’s the terminal. Feel free to head to YouTube and leave a comment if you have any questions.&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>Smart tmux sessions with zoxide and fzf</title><link>https://joshmedeski.com/posts/smart-tmux-sessions-with-zoxide-and-fzf/</link><guid isPermaLink="true">https://joshmedeski.com/posts/smart-tmux-sessions-with-zoxide-and-fzf/</guid><description>Create and manage tmux sessions automatically with a custom script</description><pubDate>Fri, 12 Aug 2022 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Create and manage tmux sessions automatically with a custom script that uses zoxide and fzf.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; I’ve created an official tmux plugin called to make it easy to set this up in your workflow. &lt;a href=&quot;https://github.com/joshmedeski/t-smart-tmux-session-manager&quot;&gt;View “t - smart tmux session manager” tmux plugin&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;zoxide&quot;&gt;zoxide&lt;/h1&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;zoxide&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install zoxide&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/ajeetdsouza/zoxide&quot;&gt;View zoxide on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;tmux&quot;&gt;tmux&lt;/h1&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tmux&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;brew install tmux&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/tmux/tmux&quot;&gt;View tmux on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/fish/config.fish&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;fish&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;abbr&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; tn &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;tmux new -s (pwd | sed &apos;s/.*\///g&apos;)&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;abbr tn &amp;#x22;tmux new -s (pwd | sed &amp;#x27;s/.*\///g&amp;#x27;)&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;You can turn off the detach-on-destroy option in your &lt;code&gt;tmux.conf&lt;/code&gt; to allow tmux to switch to an existing session when you close the final window on a session.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.tmux.conf&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;set-option&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;detach-on-destroy&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;set-option -g detach-on-destroy off&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h1 id=&quot;macos-binding&quot;&gt;macOS Binding&lt;/h1&gt;
&lt;p&gt;This is the macOS binding I use (cmd+j) to open the session manager popup.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.yaml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key_bindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;K&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02\x54&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;key_bindings:  - { key: K, mods: Command, chars: &amp;#x22;\x02\x54&amp;#x22; }&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;/posts/macos-keyboard-shortcuts-for-tmux&quot;&gt;Watch “macOS Keyboard Shortcuts for tmux”&lt;/a&gt; for more details.&lt;/p&gt;</content:encoded><category>tmux</category></item><item><title>A Pretty Terminal in 5 minutes!</title><link>https://joshmedeski.com/posts/a-pretty-terminal-in-5-minutes/</link><guid isPermaLink="true">https://joshmedeski.com/posts/a-pretty-terminal-in-5-minutes/</guid><description>Here&apos;s a quick guide on how to take your ugly terminal and make it pretty in just 5 minutes!</description><pubDate>Tue, 05 Jul 2022 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Here’s a quick guide on how to take your ugly terminal and make it pretty in just 5 minutes!&lt;/p&gt;
&lt;p&gt;Here are all the important links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://alacritty.org&quot;&gt;Alacritty&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/epk/SF-Mono-Nerd-Font&quot;&gt;San Francisco Mono Nerd Font&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://starship.rs&quot;&gt;Starship prompt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;live_config_reload&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;opacity&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0.85&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;x&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;18&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;y&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;16&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;dynamic_padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;decorations&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;buttonless&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;font&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;normal&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;family&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&apos;SFMono Nerd Font&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Regular&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;size&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;22.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;use_thin_strokes&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;live_config_reload: truewindow:  opacity: 0.85  padding:    x: 18    y: 16  dynamic_padding: false  decorations: buttonlessfont:  normal:    family: &amp;#x27;SFMono Nerd Font&amp;#x27;    style: Regular  size: 22.0  use_thin_strokes: true&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://gist.github.com/joshmedeski/d695b0d2ea64ab2c1b79286862070b00&quot;&gt;https://gist.github.com/joshmedeski/d695b0d2ea64ab2c1b79286862070b00&lt;/a&gt;&lt;/p&gt;</content:encoded><category>terminal</category></item><item><title>Blazing Fast Window Management on macOS</title><link>https://joshmedeski.com/posts/blazing-fast-window-management-on-macos/</link><guid isPermaLink="true">https://joshmedeski.com/posts/blazing-fast-window-management-on-macos/</guid><description>An overview of how to manage macOS windows and desktops at blazing speeds!</description><pubDate>Sun, 22 May 2022 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;An overview of how to manage macOS windows and desktops at blazing speeds!&lt;/p&gt;
&lt;p&gt;Here is my yabai configuration (&lt;code&gt;.yabairc&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.yabairc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#!/usr/bin/env sh&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--load-sa&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;signal&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;event=dock_did_restart&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;action=&quot;sudo yabai --load-sa&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# global settings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mouse_follows_focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;focus_follows_mouse&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_origin_display&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;default&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_placement&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;             &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;second_child&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_topmost&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_shadow&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;on&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_opacity&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_opacity_duration&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;      &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;active_window_opacity&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1.0&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;normal_window_opacity&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0.90&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_border&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_border_width&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;active_window_border_color&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0xff775759&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;normal_window_border_color&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0xff555555&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;insert_feedback_color&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;        &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0xffd75f5f&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;split_ratio&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0.50&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;auto_balance&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                 &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mouse_modifier&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;fn&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mouse_action1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;move&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mouse_action2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;resize&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;mouse_drop_action&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;            &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;swap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# general space settings&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;layout&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                       &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;bsp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;top_padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;bottom_padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;               &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;left_padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                 &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# NOTE: for OBS floating head&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# yabai -m config left_padding                 450&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;right_padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;config&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window_gap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                   &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;15&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# apps to not manage (ignore)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^System Settings$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Archive Utility$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Wally$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Pika$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^balenaEtcher$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Creative Cloud$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Logi Options$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Alfred Preferences$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;Raycast&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;rule&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--add&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;app=&quot;^Music$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;manage=off&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;yabai configuration loaded..&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;#!/usr/bin/env shsudo yabai --load-sayabai -m signal --add event=dock_did_restart action=&amp;#x22;sudo yabai --load-sa&amp;#x22;# global settingsyabai -m config mouse_follows_focus          offyabai -m config focus_follows_mouse          offyabai -m config window_origin_display        defaultyabai -m config window_placement             second_childyabai -m config window_topmost               offyabai -m config window_shadow                onyabai -m config window_opacity               offyabai -m config window_opacity_duration      0.0yabai -m config active_window_opacity        1.0yabai -m config normal_window_opacity        0.90yabai -m config window_border                offyabai -m config window_border_width          6yabai -m config active_window_border_color   0xff775759yabai -m config normal_window_border_color   0xff555555yabai -m config insert_feedback_color        0xffd75f5fyabai -m config split_ratio                  0.50yabai -m config auto_balance                 offyabai -m config mouse_modifier               fnyabai -m config mouse_action1                moveyabai -m config mouse_action2                resizeyabai -m config mouse_drop_action            swap# general space settingsyabai -m config layout                       bspyabai -m config top_padding                  15yabai -m config bottom_padding               15yabai -m config left_padding                 15# NOTE: for OBS floating head# yabai -m config left_padding                 450yabai -m config right_padding                15yabai -m config window_gap                   15# apps to not manage (ignore)yabai -m rule --add app=&amp;#x22;^System Settings$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Archive Utility$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Wally$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Pika$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^balenaEtcher$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Creative Cloud$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Logi Options$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Alfred Preferences$&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;Raycast&amp;#x22; manage=offyabai -m rule --add app=&amp;#x22;^Music$&amp;#x22; manage=offecho &amp;#x22;yabai configuration loaded..&amp;#x22;&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;This is my skhd configuration (&lt;code&gt;.skhdrc&lt;/code&gt;)&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.skhdrc&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# focus window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;west&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;south&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;north&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;east&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# swap managed window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--swap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;west&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--swap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;south&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--swap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;north&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--swap&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;east&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# move managed window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;ctrl&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;h&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--warp&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;west&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;ctrl&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;j&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--warp&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;south&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;ctrl&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;k&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--warp&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;north&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;ctrl&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--warp&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;east&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# rotate tree&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;r&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--rotate&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;90&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# toggle window fullscreen zoom&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;f&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;zoom-fullscreen&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# alt - s : yabai -m window --toggle&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;s&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;sticky&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;topmost&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;pip&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# toggle padding and gap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;padding&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;gap&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# float / unfloat window and center on screen&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;t&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;float&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;          &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--grid&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;4:4:1:1:2:2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# toggle window split type&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;e&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--toggle&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;split&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# balance size of windows&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--balance&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# move window and focus desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;7&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;9&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# create desktop, move window and follow focus - uses jq for parsing json (brew install jq)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--create&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;                   &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;$(&lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; query &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--spaces&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--display&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;jq&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt; &apos;map(select(.&quot;native-fullscreen&quot; == 0))[-1].index&apos;)&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                   &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;${&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;}&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &amp;#x26;&amp;#x26; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;                   &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;${&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;index&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;}&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# fast focus desktop&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;tab&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;space&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;recent&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# send window to monitor and follow focus&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;n&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--display&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;next&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;alt&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;window&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--display&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;previous&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;; &lt;/span&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;yabai&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-m&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;display&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--focus&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;previous&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;# focus windowalt - h : yabai -m window --focus westalt - j : yabai -m window --focus southalt - k : yabai -m window --focus northalt - l : yabai -m window --focus east# swap managed windowshift + alt - h : yabai -m window --swap westshift + alt - j : yabai -m window --swap southshift + alt - k : yabai -m window --swap northshift + alt - l : yabai -m window --swap east# move managed windowshift + alt + ctrl - h : yabai -m window --warp westshift + alt + ctrl - j : yabai -m window --warp southshift + alt + ctrl - k : yabai -m window --warp northshift + alt + ctrl - l : yabai -m window --warp east# rotate treealt - r : yabai -m space --rotate 90# toggle window fullscreen zoomalt - f : yabai -m window --toggle zoom-fullscreen# alt - s : yabai -m window --togglealt - s : yabai -m window --toggle sticky;\          yabai -m window --toggle topmost;\          yabai -m window --toggle pip# toggle padding and gapalt - g : yabai -m space --toggle padding; yabai -m space --toggle gap# float / unfloat window and center on screenalt - t : yabai -m window --toggle float;\          yabai -m window --grid 4:4:1:1:2:2# toggle window split typealt - e : yabai -m window --toggle split# balance size of windowsshift + alt - 0 : yabai -m space --balance# move window and focus desktopshift + alt - 1 : yabai -m window --space 1; yabai -m space --focus 1shift + alt - 2 : yabai -m window --space 2; yabai -m space --focus 2shift + alt - 3 : yabai -m window --space 3; yabai -m space --focus 3shift + alt - 4 : yabai -m window --space 4; yabai -m space --focus 4shift + alt - 5 : yabai -m window --space 5; yabai -m space --focus 5shift + alt - 6 : yabai -m window --space 6; yabai -m space --focus 6shift + alt - 7 : yabai -m window --space 7; yabai -m space --focus 7shift + alt - 8 : yabai -m window --space 8; yabai -m space --focus 8shift + alt - 9 : yabai -m window --space 9; yabai -m space --focus 9# create desktop, move window and follow focus - uses jq for parsing json (brew install jq)shift + alt - n : yabai -m space --create &amp;#x26;&amp;#x26; \                   index=&amp;#x22;$(yabai -m query --spaces --display | jq &amp;#x27;map(select(.&amp;#x22;native-fullscreen&amp;#x22; == 0))[-1].index&amp;#x27;)&amp;#x22; &amp;#x26;&amp;#x26; \                   yabai -m window --space &amp;#x22;${index}&amp;#x22; &amp;#x26;&amp;#x26; \                   yabai -m space --focus &amp;#x22;${index}&amp;#x22;# fast focus desktopalt - tab : yabai -m space --focus recent# send window to monitor and follow focusshift + alt - n : yabai -m window --display next; yabai -m display --focus nextshift + alt - p : yabai -m window --display previous; yabai -m display --focus previous&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;resources&quot;&gt;Resources&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/koekeishiya/yabai&quot;&gt;yabai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/koekeishiya/skhd&quot;&gt;skhd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dotfiles.joshmedeski.com/yabai.html&quot;&gt;My Dotfiles&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://spacelauncherapp.com&quot;&gt;SpaceLauncher&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;additional-links&quot;&gt;Additional Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://brew.sh&quot;&gt;Homebrew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://support.apple.com/guide/mac-help/work-in-multiple-spaces-mh14112/mac&quot;&gt;Work in multiple spaces on Mac&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://youtu.be/BLp61-Lq0kQ&quot;&gt;macos keyboard shortcuts for tmux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://configure.zsa.io/moonlander/layouts/3qe37/latest/0&quot;&gt;My moonlander layout&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; In macOS Ventura, it has been moved to a “Mission Control” dropdown in the keyboard shortcut section.&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;switch to desktop keyboard shortcut ventura&quot; width=&quot;1654&quot; height=&quot;1164&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;/_astro/switch-to-desktop-keyboard-shortcut-ventura.kSn19XKP_1XOfLn.webp&quot; &gt;&lt;/p&gt;</content:encoded><category>macos</category><category>productivity</category></item><item><title>My Dev Workflow - How I use fish, tmux, lazygit and neovim</title><link>https://joshmedeski.com/posts/my-dev-workflow-how-i-use-fish-tmux-lazygit-and-neovim/</link><guid isPermaLink="true">https://joshmedeski.com/posts/my-dev-workflow-how-i-use-fish-tmux-lazygit-and-neovim/</guid><description>A quick tour of my terminal-based development workflow built around fish, tmux, lazygit, and Neovim.</description><pubDate>Wed, 11 May 2022 03:09:27 GMT</pubDate><content:encoded>&lt;p&gt;This is a quick, raw walkthrough of my development workflow — all of it living in the terminal. I combine a few tools that each do one job well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://fishshell.com&quot;&gt;&lt;strong&gt;fish&lt;/strong&gt;&lt;/a&gt; as my interactive shell&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tmux/tmux&quot;&gt;&lt;strong&gt;tmux&lt;/strong&gt;&lt;/a&gt; for managing terminal sessions and windows&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/jesseduffield/lazygit&quot;&gt;&lt;strong&gt;lazygit&lt;/strong&gt;&lt;/a&gt; for fast, visual version control&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://neovim.io&quot;&gt;&lt;strong&gt;Neovim&lt;/strong&gt;&lt;/a&gt; as my editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together they let me move quickly without leaving the keyboard. Watch the video for a tour of how it all fits together.&lt;/p&gt;</content:encoded><category>terminal</category><category>fish</category><category>tmux</category><category>neovim</category><category>git</category></item><item><title>How to add macOS Custom Keyboard App Shortcuts</title><link>https://joshmedeski.com/posts/how-to-add-macos-custom-keyboard-app-shortcuts/</link><guid isPermaLink="true">https://joshmedeski.com/posts/how-to-add-macos-custom-keyboard-app-shortcuts/</guid><description>Here&apos;s a quick way to add custom keyboard shortcuts to any macOS application using the built-in System Preferences — no extra tools required.</description><pubDate>Tue, 11 Jan 2022 22:16:20 GMT</pubDate><content:encoded>&lt;p&gt;macOS lets you assign your own keyboard shortcut to almost any menu command, in almost any app, right from System Preferences. It’s one of those built-in features that’s easy to overlook but pays off every day once you set it up.&lt;/p&gt;
&lt;p&gt;In this quick video I’ll show you how to create custom app shortcuts so you can trigger the commands you use most without reaching for the mouse or hunting through menus.&lt;/p&gt;</content:encoded><category>macos</category><category>productivity</category></item><item><title>How I Set Up Prettier</title><link>https://joshmedeski.com/posts/how-i-set-up-prettier/</link><guid isPermaLink="true">https://joshmedeski.com/posts/how-i-set-up-prettier/</guid><description>Prettier is a opinionated code formatter that makes it easy to create more consistent code automatically</description><pubDate>Tue, 28 Dec 2021 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Prettier is a opinionated code formatter that allows you to create more consistent code automatically.&lt;/p&gt;
&lt;p&gt;In this post, we are going to install, configure, and test Prettier on a TypeScript project.&lt;/p&gt;
&lt;h2 id=&quot;install-prettier&quot;&gt;Install Prettier&lt;/h2&gt;
&lt;p&gt;First, install the prettier package:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-D&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;prettier&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;npm install -D prettier&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;install-plugin-to-sort-imports&quot;&gt;Install plugin to sort imports&lt;/h2&gt;
&lt;p&gt;Next, install the sort imports Prettier plugin. I have found that being consistent with the order in which imports are imported goes a long way in a project.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;install&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-D&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;@trivago/prettier-plugin-sort-imports&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;npm install -D @trivago/prettier-plugin-sort-imports&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;configure-prettier&quot;&gt;Configure Prettier&lt;/h2&gt;
&lt;p&gt;Create a &lt;code&gt;.prettierrc.json&lt;/code&gt; file in the root of your project&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;.prettierrc.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;importOrder&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;^@/(.*)$&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;^[./]&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;importOrderSeparation&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;importOrderSortSpecifiers&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;printWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;80&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;proseWrap&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;always&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;semi&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;singleQuote&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;tabWidth&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;trailingComma&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;none&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#x22;importOrder&amp;#x22;: [&amp;#x22;^@/(.*)$&amp;#x22;, &amp;#x22;^[./]&amp;#x22;],  &amp;#x22;importOrderSeparation&amp;#x22;: true,  &amp;#x22;importOrderSortSpecifiers&amp;#x22;: true,  &amp;#x22;printWidth&amp;#x22;: 80,  &amp;#x22;proseWrap&amp;#x22;: &amp;#x22;always&amp;#x22;,  &amp;#x22;semi&amp;#x22;: false,  &amp;#x22;singleQuote&amp;#x22;: true,  &amp;#x22;tabWidth&amp;#x22;: 2,  &amp;#x22;trailingComma&amp;#x22;: &amp;#x22;none&amp;#x22;}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;A few points about the rules I like to use:&lt;/p&gt;
&lt;p&gt;80 characters as the print width works great for split screen windows and general legibility.
2 spaces as the tab width is enough to get the job done without sacrificing width space.
The sort import plugin has ^@/(.*)$ in the first position of the array. You can map the root of your project to @/ by adding the following path to your &lt;code&gt;tsconfig.json&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;tsconfig.json&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;baseUrl&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;  &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;paths&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;&quot;@/_&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;./_&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;{  &amp;#x22;baseUrl&amp;#x22;: &amp;#x22;.&amp;#x22;,  &amp;#x22;paths&amp;#x22;: {    &amp;#x22;@/_&amp;#x22;: [&amp;#x22;./_&amp;#x22;]  }}&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;add-prettier-ignore&quot;&gt;Add Prettier Ignore&lt;/h2&gt;
&lt;p&gt;The quickest and safest way to have Prettier ignore files is by copying your .gitignore file:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.gitignore&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.prettierignore&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;cp .gitignore .prettierignore&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;format-all-files&quot;&gt;Format all files&lt;/h2&gt;
&lt;p&gt;To format all files using Prettier, you can run the following CLI command. I highly recommend committing the work you’ve done so far to version control since this command will most likely change most of the files in your project.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;prettier&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;--write&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;npx prettier --write .&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2 id=&quot;final-thoughts&quot;&gt;Final Thoughts&lt;/h2&gt;
&lt;p&gt;Prettier is an amazing solution for keeping your files formatted. I often don’t write my code in a prettier way, and have Prettier setup to run on save to auto format my files for me. You don’t have to deal with bad spacing, extra line breaks, and even the order of imports in your TypeScript files. This has been a huge time-saving tool for me over the last 5+ years and I now install Prettier in this way on all my projects.&lt;/p&gt;</content:encoded><category>development</category></item><item><title>Abbreviate Everything: Lessons from a Stenographer</title><link>https://joshmedeski.com/posts/abbreviate-everything/</link><guid isPermaLink="true">https://joshmedeski.com/posts/abbreviate-everything/</guid><description>An overview of how to manage macOS windows and desktops at blazing speeds!</description><pubDate>Mon, 15 Nov 2021 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;From Vimconf 2021.&lt;/p&gt;
&lt;p&gt;I hope it inspired you to start using text expanders and shorthand to start typing less and getting more done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The promotion in the video has expired, but reach to me on social media if you want to talk about your personal shorthand dictionary!&lt;/p&gt;</content:encoded><category>fish</category><category>productivity</category></item><item><title>macOS Keyboard Shortcuts for tmux</title><link>https://joshmedeski.com/posts/macos-keyboard-shortcuts-for-tmux/</link><guid isPermaLink="true">https://joshmedeski.com/posts/macos-keyboard-shortcuts-for-tmux/</guid><description>It&apos;s easy to create custom macOS keyboard shortcuts with tmux key bindings using hex codes and Alacritty.</description><pubDate>Fri, 16 Jul 2021 17:55:00 GMT</pubDate><content:encoded>&lt;p&gt;As a longtime macOS user, I am used to using the command key to get a lot done. You’re probably familiar with &lt;code&gt;cmd+c&lt;/code&gt; for copying to the clipboard, and &lt;code&gt;cmd+t&lt;/code&gt; to create a new tab in Safari. Most power users agree that staying away from the mouse and keeping your hands on the keyboard for as long as possible will help you be faster and more efficient while working.&lt;/p&gt;
&lt;p&gt;Unfortunately, tmux is a tool used in the terminal that doesn’t leverage the command key at all, but rather all of it’s commands are prefixed with the keystroke &lt;code&gt;ctrl+b&lt;/code&gt; followed by a letter (ex: new window is &lt;code&gt;ctrl+b c&lt;/code&gt;). I spent months building the muscle memory for the tmux keybindings, but it always felt slow compared to the macOS keyboard shortcuts.&lt;/p&gt;
&lt;p&gt;So, using the &lt;a href=&quot;https://github.com/alacritty/alacritty&quot;&gt;Alacritty terminal emulator&lt;/a&gt;, I found a way to customize tmux with my own macOS style keyboard shortcuts using the command key.&lt;/p&gt;
&lt;p&gt;In this article, I’m going to show you how to create your own keyboard shortcut for tmux. We will go through the following steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Decide the keyboard shortcut&lt;/li&gt;
&lt;li&gt;Get the hex code&lt;/li&gt;
&lt;li&gt;Assign it to Alacritty&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;1-decide-the-keyboard-shortcut&quot;&gt;1. Decide the keyboard shortcut&lt;/h2&gt;
&lt;p&gt;Before you can assign the keyboard shortcut you have to decide what you want it to do. tmux uses a prefix (default: &lt;code&gt;control+b&lt;/code&gt;) followed by a key to run a key binding. In macOS, keyboard shortcuts are driven by the command key plus an additional key.&lt;/p&gt;
&lt;p&gt;As an example, you can create a new tmux window with &lt;code&gt;prefix+c&lt;/code&gt;. tmux windows share the same UI pattern as tabs in macOS (ex: Safari tabs or Finder tabs). New tabs in macOS are created with the &lt;code&gt;cmd+t&lt;/code&gt; keyboard shortcut.&lt;/p&gt;
&lt;p&gt;So let’s bind new tmux window to &lt;code&gt;cmd+t&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;2-get-the-hex-code&quot;&gt;2. Get the hex code&lt;/h2&gt;
&lt;p&gt;In order to simulate a keystroke, Alacritty uses hex codes, which is simply a combination of characters.&lt;/p&gt;
&lt;p&gt;For our example, we need to get the hex code values for &lt;code&gt;&amp;#x3C;ctrl+b&gt; c&lt;/code&gt;. We will use &lt;code&gt;xxd&lt;/code&gt; to record our keystrokes and dump the hex codes we need.&lt;/p&gt;
&lt;p&gt;First run the following command (outside of tmux):&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;/_astro/ec.gsqrj.css&quot;&gt;&lt;script type=&quot;module&quot; src=&quot;/_astro/ec.8zarh.js&quot;&gt;&lt;/script&gt;&lt;figure class=&quot;frame is-terminal&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sr-only&quot;&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#B392F0&quot;&gt;xxd&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; &lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;-psd&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;xxd -psd&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Then type &lt;code&gt;ctrl+b&lt;/code&gt;, &lt;code&gt;c&lt;/code&gt;, then press the return key (aka &lt;code&gt;enter&lt;/code&gt;). You will see the following data output in your terminal:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;^Bc&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#e1e4e8&quot;&gt;02630a&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;^Bc02630a&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Press &lt;code&gt;ctrl+c&lt;/code&gt; to escape the xxd listener. You now have the hex code &lt;code&gt;02630a&lt;/code&gt;, which stands for &lt;code&gt;ctrl+b c return&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;3-assign-it-to-alacritty&quot;&gt;3. Assign it to Alacritty&lt;/h2&gt;
&lt;p&gt;Keystroke hex codes are bound to two character at a time. So from our code &lt;code&gt;02630a&lt;/code&gt;, &lt;code&gt;02&lt;/code&gt; stands for &lt;code&gt;ctrl+b&lt;/code&gt;, &lt;code&gt;63&lt;/code&gt; stands for &lt;code&gt;c&lt;/code&gt;, and &lt;code&gt;0a&lt;/code&gt; stands for &lt;code&gt;return&lt;/code&gt;. Since we don’t need the return key, we can drop it. Alacritty also wants us to escape each code with &lt;code&gt;\x{hex}&lt;/code&gt; so the &lt;code&gt;chars&lt;/code&gt; we want to use for &lt;code&gt;&amp;#x3C;prefix-b&gt; c&lt;/code&gt; will be &lt;code&gt;\x02\x63&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Finally, we will use the &lt;code&gt;key&lt;/code&gt; and &lt;code&gt;mods&lt;/code&gt; keys to define the custom key binding. Add the following code to your &lt;code&gt;~/.config/alacritty/alacritty.yml&lt;/code&gt; config file.&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key_bindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02\x63&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;key_bindings:  - { key: T, mods: Command, chars: &amp;#x22;\x02\x63&amp;#x22; }&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Now, while inside tmux, you can hit &lt;code&gt;cmd+t&lt;/code&gt; to create a new window! The principles learned here can be applied to any key binding with any keystroke combination you can think of.&lt;/p&gt;
&lt;h2 id=&quot;bonus-additional-shortcuts&quot;&gt;Bonus: Additional Shortcuts&lt;/h2&gt;
&lt;p&gt;Here are some of the tmux keybindings I have set up with Alacritty to create more macOS like keyboard shortcuts:&lt;/p&gt;
&lt;div class=&quot;expressive-code&quot;&gt;&lt;figure class=&quot;frame has-title&quot;&gt;&lt;figcaption class=&quot;header&quot;&gt;&lt;span class=&quot;title&quot;&gt;~/.config/alacritty/alacritty.yml&lt;/span&gt;&lt;/figcaption&gt;&lt;pre data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key_bindings&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02\&quot;&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# split tmux window vertically&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;E&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;%&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# split tmux window horizontally&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;lfcd&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open file manager &apos;gokcehan/lf&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;F&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;\x5b\x2f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# start tmux search mode&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;G&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;g&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open git manager &apos;jesseduffield/lazygit&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;J&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02\x54&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open t - tmux smart session manager&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;K&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;s&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open interactive tmux session client&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;L&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;L&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to the last tmux session&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;O&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;u&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# open URLs &apos;joshmedeski/tmux-fzf-url&apos;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;P&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:GoToFile&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# files&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;P&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:GoToCommand&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# commands&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Q&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;:q&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\n&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# quit vim&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;S&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\x1b\x3a&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x77&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;\x0a&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# save vim buffer&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;T&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;c&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# create a new tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;W&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;x&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# kill the current pane&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Z&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;z&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# toggle zoom state of the current tmux pane&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Tab&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Control&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to next tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Grave&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Control&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;p&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to previous tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Comma&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;,&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# rename the current tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;LBracket&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;\x0f&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# navigate back in vim (ctrl+o)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;LBracket&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;p&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to next tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;RBracket&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x09&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# navigate forward in vim (ctrl+i)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;RBracket&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command|Shift&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;n&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# switch to previous tmux window&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Semicolon&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;:&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# enter the tmux command prompt&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key1&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;1&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;# select tmux window 1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key2&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;2&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 2&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key3&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;3&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 3&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key4&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;4&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key5&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;5&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key6&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;6&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 6&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key7&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;7&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 7&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key8&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;8&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 8&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;ec-line&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;span class=&quot;indent&quot;&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;- { &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Key9&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;mods&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;Command&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;--0:#85E89D&quot;&gt;chars&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;--0:#79B8FF&quot;&gt;\x02&lt;/span&gt;&lt;span style=&quot;--0:#9ECBFF&quot;&gt;9&quot;&lt;/span&gt;&lt;span style=&quot;--0:#E1E4E8&quot;&gt; } &lt;/span&gt;&lt;span style=&quot;--0:#99A0A6&quot;&gt;#                ... 9&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class=&quot;copy&quot;&gt;&lt;button title=&quot;Copy to clipboard&quot; data-copied=&quot;Copied!&quot; data-code=&quot;key_bindings:  - { key: E, mods: Command, chars: &amp;#x22;\x02\&amp;#x22;&amp;#x22; } # split tmux window vertically  - { key: E, mods: Command|Shift, chars: &amp;#x22;\x02%&amp;#x22; } # split tmux window horizontally  - { key: F, mods: Command, chars: &amp;#x22;lfcd\n&amp;#x22; } # open file manager &amp;#x27;gokcehan/lf&amp;#x27;  - { key: F, mods: Command|Shift, chars: &amp;#x22;\x02\x5b\x2f&amp;#x22; } # start tmux search mode  - { key: G, mods: Command, chars: &amp;#x22;\x02g&amp;#x22; } # open git manager &amp;#x27;jesseduffield/lazygit&amp;#x27;  - { key: J, mods: Command, chars: &amp;#x22;\x02\x54&amp;#x22; } # open t - tmux smart session manager  - { key: K, mods: Command, chars: &amp;#x22;\x02s&amp;#x22; } # open interactive tmux session client  - { key: L, mods: Command, chars: &amp;#x22;\x02L&amp;#x22; } # switch to the last tmux session  - { key: O, mods: Command, chars: &amp;#x22;\x02u&amp;#x22; } # open URLs &amp;#x27;joshmedeski/tmux-fzf-url&amp;#x27;  - { key: P, mods: Command, chars: &amp;#x22;:GoToFile\n&amp;#x22; } # files  - { key: P, mods: Command|Shift, chars: &amp;#x22;:GoToCommand\n&amp;#x22; } # commands  - { key: Q, mods: Command, chars: &amp;#x22;:q\n&amp;#x22; } # quit vim  - { key: S, mods: Command, chars: &amp;#x22;\x1b\x3a\x77\x0a&amp;#x22; } # save vim buffer  - { key: T, mods: Command, chars: &amp;#x22;\x02c&amp;#x22; } # create a new tmux window  - { key: W, mods: Command, chars: &amp;#x22;\x02x&amp;#x22; } # kill the current pane  - { key: Z, mods: Command, chars: &amp;#x22;\x02z&amp;#x22; } # toggle zoom state of the current tmux pane  - { key: Tab, mods: Control, chars: &amp;#x22;\x02n&amp;#x22; } # switch to next tmux window  - { key: Grave, mods: Control, chars: &amp;#x22;\x02p&amp;#x22; } # switch to previous tmux window  - { key: Comma, mods: Command, chars: &amp;#x22;\x02,&amp;#x22; } # rename the current tmux window  - { key: LBracket, mods: Command, chars: &amp;#x22;\x0f&amp;#x22; } # navigate back in vim (ctrl+o)  - { key: LBracket, mods: Command|Shift, chars: &amp;#x22;\x02p&amp;#x22; } # switch to next tmux window  - { key: RBracket, mods: Command, chars: &amp;#x22;\x09&amp;#x22; } # navigate forward in vim (ctrl+i)  - { key: RBracket, mods: Command|Shift, chars: &amp;#x22;\x02n&amp;#x22; } # switch to previous tmux window  - { key: Semicolon, mods: Command, chars: &amp;#x22;\x02:&amp;#x22; } # enter the tmux command prompt  - { key: Key1, mods: Command, chars: &amp;#x22;\x021&amp;#x22; } # select tmux window 1  - { key: Key2, mods: Command, chars: &amp;#x22;\x022&amp;#x22; } #                ... 2  - { key: Key3, mods: Command, chars: &amp;#x22;\x023&amp;#x22; } #                ... 3  - { key: Key4, mods: Command, chars: &amp;#x22;\x024&amp;#x22; } #                ... 4  - { key: Key5, mods: Command, chars: &amp;#x22;\x025&amp;#x22; } #                ... 5  - { key: Key6, mods: Command, chars: &amp;#x22;\x026&amp;#x22; } #                ... 6  - { key: Key7, mods: Command, chars: &amp;#x22;\x027&amp;#x22; } #                ... 7  - { key: Key8, mods: Command, chars: &amp;#x22;\x028&amp;#x22; } #                ... 8  - { key: Key9, mods: Command, chars: &amp;#x22;\x029&amp;#x22; } #                ... 9&quot;&gt;&lt;div&gt;&lt;/div&gt;&lt;/button&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;To see my latest keybindings, check out my full &lt;a href=&quot;https://github.com/joshmedeski/dotfiles/blob/main/.config/alacritty/alacritty.yml&quot;&gt;&lt;code&gt;alacritty.yml&lt;/code&gt; file on GitHub&lt;/a&gt;&lt;/p&gt;</content:encoded><category>tmux</category><category>macos</category></item><item><title>How to Make an IKEA Hack Standing Desk</title><link>https://joshmedeski.com/posts/how-to-make-an-ikea-hack-standing-desk/</link><guid isPermaLink="true">https://joshmedeski.com/posts/how-to-make-an-ikea-hack-standing-desk/</guid><description>Standing desks have gained a lot of popularity in the last few years. At a previous job, I had a nice standing desk from</description><pubDate>Wed, 19 May 2021 12:00:00 GMT</pubDate><category>hardware</category></item><item><title>Popup history with tmux and fzf</title><link>https://joshmedeski.com/posts/popup-history-with-tmux-and-fzf/</link><guid isPermaLink="true">https://joshmedeski.com/posts/popup-history-with-tmux-and-fzf/</guid><description>ctrl-r is a great keyboard shortcut for viewing your terminal history and rerun commands.</description><pubDate>Wed, 30 Dec 2020 12:00:00 GMT</pubDate><category>tmux</category></item><item><title>Why I Switched from zsh to fish</title><link>https://joshmedeski.com/posts/why-i-switched-from-zsh-to-fish/</link><guid isPermaLink="true">https://joshmedeski.com/posts/why-i-switched-from-zsh-to-fish/</guid><description>My experience using zsh and changing to using the friendly interactive shell to improve performance</description><pubDate>Tue, 30 Jul 2019 12:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been using the &lt;code&gt;zsh&lt;/code&gt; terminal with the infamous &lt;a href=&quot;https://github.com/robbyrussell/oh-my-zsh&quot;&gt;oh-my-zsh&lt;/a&gt; framework for many years now. The features and improvements it makes on plain old bash are impressive. But as my needs change, so does my shell. I made the switch to the &lt;code&gt;fish&lt;/code&gt; shell almost a year ago and here is why I switched.&lt;/p&gt;
&lt;h2 id=&quot;speed&quot;&gt;Speed&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;fish&lt;/code&gt; is faster than &lt;code&gt;zsh&lt;/code&gt;. Especially when using &lt;code&gt;zsh&lt;/code&gt; plugins the loading time alone is significantly slower. But more than that, the overall experience for me feels snappier and more responsive in the &lt;code&gt;fish&lt;/code&gt; shell. Since I’m using the terminal to be more efficient and get things done faster than a GUI, speed is one of my top requirements for my shell.&lt;/p&gt;
&lt;h2 id=&quot;simplicity&quot;&gt;Simplicity&lt;/h2&gt;
&lt;p&gt;The oh-my-zsh configuration and plugins tend to add complexity to the terminal environment, especially custom aliases. Overall, I have found &lt;code&gt;fish&lt;/code&gt; to be much simpler regarding configuration and usage. My config file is only a few lines long and I’m only using one or two plugins for third party utilities (ex: &lt;a href=&quot;https://github.com/clvv/fasd&quot;&gt;&lt;code&gt;fasd&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://github.com/nvm-sh/nvm&quot;&gt;&lt;code&gt;nvm&lt;/code&gt;&lt;/a&gt;). I also found a very simple theme that only shows me what I need, similar to my previous &lt;code&gt;zsh&lt;/code&gt; theme.&lt;/p&gt;
&lt;h2 id=&quot;autosuggestion&quot;&gt;Autosuggestion&lt;/h2&gt;
&lt;p&gt;This is the main reason I moved to &lt;code&gt;fish&lt;/code&gt;. I originally was using the &lt;a href=&quot;https://github.com/zsh-users/zsh-autosuggestions&quot;&gt;zsh-autosuggestions&lt;/a&gt; which is “Fish-like autosuggestions for zsh”. This is what drew me to fish, this is by far my most used feature. If I mistype a command, it will show in red to indicate that it’s an invalid command. But, more importantly, while I type the prompt auto-suggests my previous commands (by recent and most used). This is far quicker than &lt;code&gt;ctrl+r&lt;/code&gt; and usually shows me the command I want 80%+ of the time. Again, this is the main reason I use &lt;code&gt;fish&lt;/code&gt; and one of my favorite productivity tools on my computer, period.&lt;/p&gt;
&lt;h2 id=&quot;vim-mode&quot;&gt;Vim Mode&lt;/h2&gt;
&lt;p&gt;I’ve been a vim user for many years now. What I love about vim is it’s intuitiveness and efficiency (once you’ve really gotten it down). I know &lt;code&gt;zsh&lt;/code&gt; offers a vim-mode but I was happy to learn &lt;code&gt;fish&lt;/code&gt; has one as well. It a sort of simplified &lt;code&gt;vi&lt;/code&gt; hybrid but it does all I need it to do.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;fish&lt;/code&gt; is fast, simple, offers powerful autosuggestion and a vim mode. These are the most important thing for me right now in the terminal so I proudly made the switch to this friendly interactive shell and haven’t looked back.&lt;/p&gt;</content:encoded><category>fish</category></item><item><title>Navigate the Web with Vim Keybindings</title><link>https://joshmedeski.com/posts/navigate-the-web-with-vim/</link><guid isPermaLink="true">https://joshmedeski.com/posts/navigate-the-web-with-vim/</guid><description>I&apos;ve been using a tool for probably over a year now that helps let&apos;s me navigate the web with Vim. It&apos;s a chrome extension</description><pubDate>Sun, 06 Mar 2016 23:59:00 GMT</pubDate><category>productivity</category></item><item><title>How to Solve a Rubik&apos;s Cube</title><link>https://joshmedeski.com/posts/how-to-solve-a-rubik-s-cube/</link><guid isPermaLink="true">https://joshmedeski.com/posts/how-to-solve-a-rubik-s-cube/</guid><description>A beginner-friendly walkthrough of the layer-by-layer method for solving a standard 3x3 Rubik&apos;s Cube.</description><pubDate>Thu, 11 Feb 2016 04:48:54 GMT</pubDate><content:encoded>&lt;p&gt;One of my earliest videos: a straightforward, beginner-friendly guide to solving a standard 3x3 Rubik’s Cube.&lt;/p&gt;
&lt;p&gt;I walk through the layer-by-layer method one step at a time — solving the first layer, then the middle, and finally the last layer — so you can go from scrambled to solved without memorizing pages of notation.&lt;/p&gt;</content:encoded><category>growth</category></item><item><title>This Four Letter Word Kills Productivity</title><link>https://joshmedeski.com/posts/four-letter-word-kills-productivity/</link><guid isPermaLink="true">https://joshmedeski.com/posts/four-letter-word-kills-productivity/</guid><description>Let&apos;s face it, there are a lot of things that can kill productivity; meetings, email, urgent matters given by co-workers</description><pubDate>Thu, 08 Jan 2015 16:18:00 GMT</pubDate><category>productivity</category></item><item><title>The Eisenhower Matrix and Todoist</title><link>https://joshmedeski.com/posts/eisenhower-matrix-todoist/</link><guid isPermaLink="true">https://joshmedeski.com/posts/eisenhower-matrix-todoist/</guid><description>The Eisenhower matrix is a productivity method to help you evaluate your work and decide what needs done in a more efficient manner.</description><pubDate>Wed, 22 Oct 2014 09:20:00 GMT</pubDate><category>productivity</category></item><item><title>Can&apos;t Keep up? Make a Waiting For List</title><link>https://joshmedeski.com/posts/waiting-for/</link><guid isPermaLink="true">https://joshmedeski.com/posts/waiting-for/</guid><description>You live in a world that depends on other people to get work done. On any day you could be waiting for a handful of people to take action</description><pubDate>Thu, 26 Jun 2014 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;You live in a world that depends on other people to get work done. On any day you could be waiting for a handful of people to take action on something before you can take the next step on a project. So how do you keep track of all those items?&lt;/p&gt;
&lt;p&gt;In Getting Things Done (GTD), David Allen recommends creating a “waiting for” list that shows everything you are waiting for others to do. It’s recommended you date each item so that if you have to follow up with someone, you have a solid timeline.  Remember this list is for items that require your attention after you have completed your part. (Sometimes you delegate work and you don’t have to follow up.)&lt;/p&gt;
&lt;p&gt;Last month I won free tickets to a play at a local theater in town. The theater said I would receive an email with instructions for ordering my tickets. The day I won the tickets, I put “email from Stages Theater about free tickets won at Creative Mornings” in my “waiting for” list. Notice how specific I got, which also included the date I won the tickets as a reference.&lt;/p&gt;
&lt;p&gt;Almost a full month later I still had not received the email, so I went to the theater website and filled out a contact form requesting information for my free tickets. The next day I got an email with clear instructions and an apology from the theater because the person in charge of my tickets was on vacation.&lt;/p&gt;
&lt;p&gt;If I had not put this item on my “waiting for” list, I might have forgotten about the show. Thanks to this helpful tool, I was able to see a great show because it wasn’t forgotten.&lt;/p&gt;
&lt;p&gt;There are more important items that can go on your “waiting for” list than free tickets to a play. What if you’re waiting for a proposal to be written, an invoice to be paid, or a doctor’s report to come in? The “waiting for” list becomes a necessity in cases like these.&lt;/p&gt;
&lt;p&gt;And most importantly, if you have multiple items pending at the same time, this tool is a worry-free alternative to ensure things aren’t missed.&lt;/p&gt;
&lt;p&gt;To get started, get out a blank piece of paper, set a timer for ten minutes and write down everything you are waiting for from someone else. Feel free to move this list into your to-do app and make sure you visit this list at regularly scheduled intervals, or set reminders on your calendar for those time-sensitive items.&lt;/p&gt;
&lt;p&gt;You will be amazed at how smart you look when you follow up with a cold lead, a delayed email, or a software update when the rest of the world around you lets these little things get missed in this busy world.&lt;/p&gt;</content:encoded><category>productivity</category></item><item><title>Bullet Journal Didn&apos;t Work for Me</title><link>https://joshmedeski.com/posts/bullet-journal-didnt-work/</link><guid isPermaLink="true">https://joshmedeski.com/posts/bullet-journal-didnt-work/</guid><description>The Bullet Journal is an analog productivity system used for capturing everything during your day (todos, appointments, notes).</description><pubDate>Mon, 16 Jun 2014 15:24:00 GMT</pubDate><content:encoded>&lt;p&gt;The Bullet Journal is an &lt;a href=&quot;http://bulletjournal.com&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;analog productivity system&lt;/a&gt; used for capturing everything during your day (todos, appointments, notes). Everything is written down in one chronological list. Each month you clean up your list and sort through whatever todos haven’t been check off yet. The creator, Ryder Carroll, described it as…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;…an analog system for the digital age that will help you organize the present, record the past, and plan for the future.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Using this system for a couple weeks, I quickly learned the Bullet Journal is not for me. Here are a few reasons why.&lt;/p&gt;
&lt;h2 id=&quot;legibility&quot;&gt;Legibility&lt;/h2&gt;
&lt;p&gt;My handwriting isn’t terrible, but it’s also not great so having to figure out what I wrote tends to slow down my productive momentum. You could argue my handwriting would improve if I practiced using the Bullet Journal, but I’d rather separate handwriting skills from my productivity system, that’s just me.&lt;/p&gt;
&lt;h2 id=&quot;gtd&quot;&gt;GTD&lt;/h2&gt;
&lt;p&gt;The #1 reason why the Bullet Journal didn’t work for me is because I’m a avid Getting Things Done (GTD) user. In GTD, you collect any/every thought, idea, project, and reference material into an inbox. You then process the inbox and sort each item according to it’s purpose and refining everything in the weekly review. With the Bullet Journal, everything goes into a single journal with no opportunity to sort the items. I found it really hard to differentiate next actions, appointments, projects, someday/maybes, waiting for items, etc…&lt;/p&gt;
&lt;p&gt;An argument could be made against the GTD system, because people like the Bullet Journal’s simplicity. I totally understand that, but I’ve been living by the GTD system for years, which makes transitioning to the Bullet Journal practices extremely difficult and not worth my time.&lt;/p&gt;
&lt;h2 id=&quot;search&quot;&gt;Search&lt;/h2&gt;
&lt;p&gt;The awesome thing about the productivity apps I currently use (Todoist, Trello, Evernote, Dropbox) is the power of search. I can quickly and easily write notes, add tags, attach images, and with Evernote I can scan in my handwritten notes and everything is searchable.&lt;/p&gt;
&lt;p&gt;With the Bullet Journal, you create a table of contents and label every page for “easy” access. It felt like I was in middle school again trying to review for a test by constantly referencing the table of content and skimming the journal to find what I wanted.&lt;/p&gt;
&lt;p&gt;Again, some people love analog systems and the ability to flip through pages and see their life in action. Before my Bullet Journal experiment, I created a Done Journal, writing down the day’s accomplishments and meaningful events. It was fun being able to flip though pages and remember the past, but I stopped the done journal after a couple months because it sucked up time and energy I thought could be better spent on my digital journal. The Bullet Journal is a similar situation because it sucks up a lot of time and energy but I don’t feel it is the best use of my time and energy.&lt;/p&gt;
&lt;h2 id=&quot;speed&quot;&gt;Speed&lt;/h2&gt;
&lt;p&gt;I can type 100 word per minute. So you can imagine that physically writing on paper can slows me down. Bullet Journal users claim that having to write things down intentionally slows them down so they have time to evaluate if the task is worth their efforts. For me, GTD has taught me how to properly write a good todo item. It doesn’t matter if I write it down on paper or type it into a todo app.&lt;/p&gt;
&lt;h2 id=&quot;revisions&quot;&gt;Revisions&lt;/h2&gt;
&lt;p&gt;50% of my thoughts that get collected don’t go in my todo app, and even the remaining 50% of tasks get revised for more clarity. It would take me forever to write a task 2-3 times on a piece of paper which usually happens digitally.&lt;/p&gt;
&lt;p&gt;It’s possible I’m not great at writing todos, and the Bullet Journal could help me improve, but I don’t think that’s the case. It’s not a matter of being good or bad at assembling todo items, it’s about revising todos as clarity and purpose for a project evolves.  The GTD practice of daily and weekly evaluation helps me stay on top of my todos with a far greater degree of productivity than the Bullet Journal did.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Well that’s my thoughts on why the Bullet Journal didn’t work for me. I’m a strong GTD user and really like the workflow David Allen created, which I have not found to be benefitted by Bullet Journal practices.&lt;/p&gt;
&lt;p&gt;I find the power of search with digital solutions extremely helpful, I prefer typing to hand writing, I want to bring revisions to my todos more frequently and I want to be able to easily read, and understand my tasks at a glance. All of these things are unfortunately not compatible with the Bullet Journal.&lt;/p&gt;</content:encoded><category>productivity</category></item><item><title>How I Do my Weekly Review</title><link>https://joshmedeski.com/posts/weekly-review/</link><guid isPermaLink="true">https://joshmedeski.com/posts/weekly-review/</guid><description>A good weekly review is important in my productivity. It allows me to evaluate my recent actions and plan out the following week.</description><pubDate>Thu, 01 May 2014 20:24:00 GMT</pubDate><content:encoded>&lt;p&gt;A good weekly review is important in my productivity. It allows me to evaluate my recent actions and plan out the following week. The weekly review also gives me a chance to catch up with everything.&lt;/p&gt;
&lt;p&gt;I’ve been a big GTD (Getting Things Done) user for many years now, but I never set realistic expectation on my weekly review, and to be honest, I didn’t consistently do it. Over the past few months that perspective has changed and I have created a set routine and dedication to the weekly routine. It has completely transformed my productivity and focus.&lt;/p&gt;
&lt;p&gt;Let me tell you about what my weekly review looks like. And show you why it’s so important to be intentional and dedicated to the weekly review.&lt;/p&gt;
&lt;h2 id=&quot;friday-afternoon&quot;&gt;Friday Afternoon&lt;/h2&gt;
&lt;p&gt;My weekly review is every Friday, without fail. I’ve been able to do this for a few months now and I schedule my entire week around it. I usually do interesting things Friday morning (like &lt;a href=&quot;http://creativemornings.com/cities/hou&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Creative Mornings&lt;/a&gt; or spend time with friends). But I never schedule meetings or appointments Friday afternoon, it’s my day.&lt;/p&gt;
&lt;h2 id=&quot;cleanup&quot;&gt;Cleanup&lt;/h2&gt;
&lt;p&gt;Before I sit down and do the review, I have also made it house cleaning day. So I start the laundry, clean the dishes, clean up loose paperwork, recycling, and whatever else is not where it’s supposed to be.&lt;/p&gt;
&lt;p&gt;Now that I have a clean house I’m ready to start.&lt;/p&gt;
&lt;h2 id=&quot;catching-up&quot;&gt;Catching Up&lt;/h2&gt;
&lt;p&gt;I use &lt;a href=&quot;https://todoist.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Todoist&lt;/a&gt; as my todo app. I’ve scheduled a weekly task called “Weekly Review” and inside of it I have the following sub-tasks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pull out all loose papers, receipts, posts-its, etc…&lt;/li&gt;
&lt;li&gt;Clear off desk&lt;/li&gt;
&lt;li&gt;Empty paper inbox&lt;/li&gt;
&lt;li&gt;Empty email inbox&lt;/li&gt;
&lt;li&gt;Review todo emails&lt;/li&gt;
&lt;li&gt;Empty “Downloads” folder&lt;/li&gt;
&lt;li&gt;Empty voicemail&lt;/li&gt;
&lt;li&gt;Review Feedly&lt;/li&gt;
&lt;li&gt;Review Pocket&lt;/li&gt;
&lt;li&gt;Budget in YNAB&lt;/li&gt;
&lt;li&gt;Review previous &amp;#x26; upcoming events&lt;/li&gt;
&lt;li&gt;Review completed items&lt;/li&gt;
&lt;li&gt;Go through the collection triggers (brain dump)&lt;/li&gt;
&lt;li&gt;Review projects&lt;/li&gt;
&lt;li&gt;Review next actions (are the accurate? Can all of it be done this coming week?)&lt;/li&gt;
&lt;li&gt;Review waiting for (is it still worth waiting for? Is there a next action?)&lt;/li&gt;
&lt;li&gt;Review someday/maybe (could I do it this week? Or ever?)&lt;/li&gt;
&lt;li&gt;Review goals (what have I done to get closer to those goals?)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is useful because I don’t have to remember what to do in my weekly review, and I don’t have to go looking for it when it comes time to start reviewing. It’s also a great reminder in case my morning is busy (because Todoist is almost always open on my computer).&lt;/p&gt;
&lt;p&gt;The list is pretty strait forward, and many of the items only take a few seconds to do. It’s meant to be thorough so that I don’t have to think during this process. I go through and check of each item. If something doesn’t make sense to me or I skip the task more than one week, I make revision for the future weekly review.&lt;/p&gt;
&lt;p&gt;If you noticed, most of the tasks have to do with emptying. That’s because during the week I don’t want to have to deal with this stuff. But every week I want a fresh start. Plus I tend to miss less things if I check these places every week.&lt;/p&gt;
&lt;h2 id=&quot;brain-dump&quot;&gt;Brain Dump&lt;/h2&gt;
&lt;p&gt;Part of my weekly review involves a brain dump. I go through the following list with Todoist’s collection trigger feature and try to think of anything that’s on my mind.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Open projects (websites, part-time, other)&lt;/li&gt;
&lt;li&gt;Upcoming events (work, family, community)&lt;/li&gt;
&lt;li&gt;Communication (calls, emails)&lt;/li&gt;
&lt;li&gt;Errands (groceries, recycling, Walmart, car)&lt;/li&gt;
&lt;li&gt;Home (cleaning, laundry, fixing, sort)&lt;/li&gt;
&lt;li&gt;Tech (software, hardware, updates)&lt;/li&gt;
&lt;li&gt;Health (hair, medicine, doctor, dentist)&lt;/li&gt;
&lt;li&gt;Hobbies (art, music, Rubik’s cube)&lt;/li&gt;
&lt;li&gt;Media (movies, books, podcasts)&lt;/li&gt;
&lt;li&gt;Community (volunteering, relationships)&lt;/li&gt;
&lt;li&gt;Community (teaching, volunteering)&lt;/li&gt;
&lt;li&gt;Someday (art, products, trip, event)&lt;/li&gt;
&lt;li&gt;Houston (Meetups, events)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’m not totally happy with these triggers at this point. So I may try to reevaluate how to phrase these tricks (possibly putting them in question form?). Overall I do my best to write something down the minute I think of it, but in the weekly review there are always a few things that come up! Sometimes it’s the weirdest things, like that restaurant I want to go eat at, that hobby I’ve been neglecting, or the invoice that I need to follow up on. I’m sure the brain dump can happen more than once a week, but it’s been the right amount of time for my brain to handle.&lt;/p&gt;
&lt;h2 id=&quot;reflecting&quot;&gt;Reflecting&lt;/h2&gt;
&lt;p&gt;This last part I learned from my life coach, Whitney Hutten. I ask myself the following questions to make sure that I’m actually focusing on what’s most important and aligning my tasks with my values. This is the higher thinking GTD talks about, and I’ve found it to be the missing link for me from being busy vs being productive.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What went well?&lt;/li&gt;
&lt;li&gt;What could be adjusted?&lt;/li&gt;
&lt;li&gt;What to stop doing?&lt;/li&gt;
&lt;li&gt;What to start doing?&lt;/li&gt;
&lt;li&gt;What to continue doing?&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;That’s my weekly review! It adapts and changes over time, but the principles remain the same. Schedule a consistent time, catch up, brain dump, reflect. I’ve found it invaluable and I hope looking into my weekly review will shape your weekly review or get you started on actually making it happen!&lt;/p&gt;</content:encoded><category>productivity</category><category>growth</category></item><item><title>3 Tips to Overcome Perfectionism</title><link>https://joshmedeski.com/posts/overcome-perfectionism/</link><guid isPermaLink="true">https://joshmedeski.com/posts/overcome-perfectionism/</guid><description>Perfectionism is stopping you from growing your business, building your cause, and doing what you love.</description><pubDate>Sun, 20 Apr 2014 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Perfectionism is stopping you from growing your business, building your cause, and doing what you love. It’s important to face this problem head on. Here are 3 tips to overcome perfectionism.&lt;/p&gt;
&lt;h2 id=&quot;get-yourself-out-there&quot;&gt;Get yourself out there&lt;/h2&gt;
&lt;p&gt;My advice to overcome perfectionism is remind yourself that nothing’s perfect the first time around. You just have to get your product, opt-in, blog post, podcast, video, newsletter, book, performance out there and see what happens. Getting yourself out there is the first step.&lt;/p&gt;
&lt;h2 id=&quot;people-dont-like-perfect-be-authentic-instead&quot;&gt;People don’t like perfect (be authentic instead)&lt;/h2&gt;
&lt;p&gt;I’ve been working on a personal project for over 6 months now and I realize that people don’t like perfect. In fact, authenticity is more important than perfection. It something is too “perfect” it comes off as too-good-to-be-true and unauthentic (or even sleazy). You have to do you best work and allow your flaws to show in order to win people’s trust.&lt;/p&gt;
&lt;h2 id=&quot;there-is-no-right-way&quot;&gt;There is no “RIGHT” way&lt;/h2&gt;
&lt;p&gt;There is always more than one way to do something, and your never going to know which way is best for you until you make mistakes and learn the wrong way to do it.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;I have not failed. I’ve just found 10,000 ways that won’t work.&lt;/p&gt;&lt;p&gt;&lt;cite&gt;Thomas Edison&lt;/cite&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Well that’s just a few ways for you to overcome perfectionism.&lt;/p&gt;</content:encoded><category>growth</category></item><item><title>Deleting Mac Apps in Record Time</title><link>https://joshmedeski.com/posts/deleting-mac-apps/</link><guid isPermaLink="true">https://joshmedeski.com/posts/deleting-mac-apps/</guid><description>Here&apos;s a quick and simple solution for deleting Mac apps in record time! It uses Alfred, my favorite productivity app</description><pubDate>Fri, 11 Apr 2014 08:00:00 GMT</pubDate><category>macos</category></item></channel></rss>