<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Saar Shechter</title>
    <description>The latest articles on DEV Community by Saar Shechter (@saarshechter).</description>
    <link>https://dev.to/saarshechter</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3241922%2F5da19160-9d46-44c7-acf4-b3fbf4ae70b7.jpeg</url>
      <title>DEV Community: Saar Shechter</title>
      <link>https://dev.to/saarshechter</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saarshechter"/>
    <language>en</language>
    <item>
      <title>Why Alfred Is the First App You Should Install on Your Mac</title>
      <dc:creator>Saar Shechter</dc:creator>
      <pubDate>Sat, 19 Jul 2025 08:34:44 +0000</pubDate>
      <link>https://dev.to/saarshechter/why-alfred-is-the-first-app-you-should-install-on-your-mac-3gok</link>
      <guid>https://dev.to/saarshechter/why-alfred-is-the-first-app-you-should-install-on-your-mac-3gok</guid>
      <description>&lt;p&gt;Let's face it - Macs are very powerful, but the default Spotlight search is... meh 🤷‍♂.&lt;/p&gt;

&lt;p&gt;Spotlight is that little search bar you summon with &lt;code&gt;⌘ + Space&lt;/code&gt; that is meant to help you quickly open apps, find files and search the web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem&lt;/strong&gt;? It rarely does what you actually want.&lt;br&gt;
How many times have you &lt;strong&gt;tried opening the "Downloads" folder&lt;/strong&gt; and ended up in a Google search or the App Store instead?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkjie4lvdf6qfwvuyi2f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdkjie4lvdf6qfwvuyi2f.png" alt="Spotlight search" width="800" height="217"&gt;&lt;/a&gt;&lt;/p&gt;
Why the hell would this be the first suggestion?



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofhu5oapmdg0tap5hc1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofhu5oapmdg0tap5hc1q.png" alt="downloads-google-search" width="775" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;Alfred&lt;/strong&gt; comes in - a &lt;strong&gt;faster&lt;/strong&gt;, &lt;strong&gt;smarter&lt;/strong&gt; and &lt;strong&gt;more flexible&lt;/strong&gt; alternative to Spotlight.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7cmtj2xv3y0aywc5svh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7cmtj2xv3y0aywc5svh.png" alt="search-downloads-alfred" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;
That's better... 😎🎩



&lt;p&gt;By the way — &lt;strong&gt;this isn’t sponsored&lt;/strong&gt;. Just a genuinely happy user sharing a tool I love.&lt;/p&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🎩 What is Alfred?
&lt;/li&gt;
&lt;li&gt;⚛ Core Features (Free &amp;amp; Paid)
&lt;/li&gt;
&lt;li&gt;⏳ Real-World Example: Looking Up Invoices (10 Steps -&amp;gt; 1)
&lt;/li&gt;
&lt;li&gt;🛠️ Install Alfred
&lt;/li&gt;
&lt;li&gt;✨ Create Your First Custom Web Search
&lt;/li&gt;
&lt;li&gt;📝 Final Notes
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎩 What is Alfred?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Alfred is an award-winning app for macOS which boosts your efficiency with hotkeys, keywords, text expansion and more. Search your Mac and the web, and be more productive with custom actions to control your Mac &lt;br&gt;
(from &lt;a href="https://www.alfredapp.com/" rel="noopener noreferrer"&gt;Alfred's official website&lt;/a&gt;)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Alfred &lt;strong&gt;launches apps&lt;/strong&gt; instantly, &lt;strong&gt;finds files&lt;/strong&gt; reliably, &lt;strong&gt;learns your habits&lt;/strong&gt; and even lets you create &lt;strong&gt;custom search shortcuts&lt;/strong&gt; for the websites, flows and tools you use every day.&lt;br&gt;
All of that - &lt;strong&gt;for free&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The cool thing is, Alfred &lt;strong&gt;adapts to you&lt;/strong&gt;. The more you use it - the better its suggestions become.&lt;/p&gt;

&lt;p&gt;Alfred is &lt;strong&gt;free to use&lt;/strong&gt;, with &lt;strong&gt;optional advanced paid features&lt;/strong&gt; in the &lt;strong&gt;Powerpack&lt;/strong&gt; (a one-time purchase, not a subscription).&lt;br&gt;
But even if you stick with the free version - &lt;strong&gt;&lt;em&gt;value is guaranteed&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I couldn't recommend it more.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚛ Core Features (Free &amp;amp; Paid)
&lt;/h2&gt;

&lt;p&gt;Even in the free version, Alfred offers powerful tools that make your mac feel snappier and smarter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🚀 App Launcher&lt;/strong&gt; – Type part of an app’s name, hit Enter, and it’s open. Super fast.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yyiy7oj9835cbm4zk55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0yyiy7oj9835cbm4zk55.png" alt="open slack with alfred" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🔍 File Search&lt;/strong&gt; – Quickly find files and folders on your Mac. You can &lt;strong&gt;open a file&lt;/strong&gt; directly, &lt;strong&gt;reveal it in Finder&lt;/strong&gt;, &lt;strong&gt;search by tags&lt;/strong&gt; and even &lt;strong&gt;search by file content&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g247oqd2htbzs1vynov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7g247oqd2htbzs1vynov.png" alt="file search" width="800" height="201"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;🌐 Custom Web Search&lt;/strong&gt; – Search any website straight from Alfred (more on this in the next section 👀).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;⚙ System Commands&lt;/strong&gt; – Sleep, restart, empty trash, lock your screen — all from Alfred.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklnsewd4f40o65gy7e42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fklnsewd4f40o65gy7e42.png" alt="custom web search" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;✏ Learns as You Go&lt;/strong&gt; – Alfred remembers your habits and boosts your most-used results.&lt;/p&gt;
&lt;h3&gt;
  
  
  A few extra features are included in the &lt;strong&gt;Powerpack&lt;/strong&gt; (paid 💰):
&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;🕥 Clipboard History&lt;/strong&gt; – Search your copy history and paste anything you've ever copied.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm using another app called Paste, you can read about it in &lt;a href="https://medium.com/wix-engineering/why-you-should-start-using-a-clipboard-manager-today-0fd1f9bda2cc" rel="noopener noreferrer"&gt;my article about clipboard managers&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;📋 Snippets&lt;/strong&gt; – Create custom text shortcuts to save time typing.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;As a free replacement you can use &lt;a href="https://support.apple.com/en-sa/guide/mac-help/mh35735/mac" rel="noopener noreferrer"&gt;macOS's text replacements&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;🔄 Workflows&lt;/strong&gt; – Build advanced automations (but that's material for another article 🗒️).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;👉 Everything in this article works 100% in the &lt;strong&gt;free version&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⏳ Real-World Example: Looking Up Invoices (10 Steps -&amp;gt; 1)
&lt;/h2&gt;

&lt;p&gt;Let's take a look at an actual example from my day-to-day that demonstrates &lt;strong&gt;how much time I save&lt;/strong&gt; using Alfred.&lt;/p&gt;

&lt;p&gt;At work, I often need to find a customer invoice using just its ID. Some days, I do this dozens of times.&lt;br&gt;
Let's say our invoice ID is &lt;code&gt;123456789&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The usual process looks like this:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open our internal back office system and wait for it to load (⌨️⏱️)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select "Search by Invoice ID" (🖱)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09eg7gee5h58044oorgj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F09eg7gee5h58044oorgj.png" alt="search by invoice id" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Paste the invoice ID  (⌨)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ifghei795ksp3kdprj6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ifghei795ksp3kdprj6.png" alt="paste invoice id" width="344" height="58"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Press &lt;code&gt;Enter&lt;/code&gt; and wait (⌨⏱️)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click the matched account (🖱)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgoq6ccnyulamki0fzwhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgoq6ccnyulamki0fzwhg.png" alt="click matched account" width="560" height="178"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Navigate to the "Invoices" tab (🖱)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5iu41w9e18ltvmsvthkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5iu41w9e18ltvmsvthkd.png" alt="navigate to invoices tab" width="208" height="84"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;⌘ + F&lt;/code&gt; and search for the specific invoice (⌨)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find the correct invoice in the list &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click it (🖱)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42s33om1sx75zjw4m8kv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F42s33om1sx75zjw4m8kv.png" alt="click invoice" width="500" height="134"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally — the invoice page loads 😫&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s &lt;strong&gt;10 steps&lt;/strong&gt;, dozens of clicks, and constant switching between keyboard and mouse.&lt;/p&gt;

&lt;p&gt;This process takes around 10-20 seconds, depending on how old the invoice is (older invoices require more scrolling to load).&lt;/p&gt;

&lt;p&gt;Let's say it takes &lt;strong&gt;15 seconds on average&lt;/strong&gt;, and I do this &lt;strong&gt;20 times per day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;15 seconds × 20 = 300 seconds = 5 minutes/day.&lt;/p&gt;

&lt;p&gt;5 minutes × 250 workdays = 1250 minutes/year = &lt;strong&gt;20+ hours/year&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔥 With Alfred, I turned all that into one line:
&lt;/h3&gt;

&lt;p&gt;I open Alfred with &lt;code&gt;⌘ + Space&lt;/code&gt;, type:&lt;br&gt;
&lt;code&gt;invoice 123456789&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i06xdshbvzj6paw9wx3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8i06xdshbvzj6paw9wx3.png" alt="invoice command" width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...and it instantly opens the correct invoice page.&lt;br&gt;
Just one step (or two, if you count opening Alfred).&lt;/p&gt;

&lt;p&gt;Even better? Alfred &lt;strong&gt;learns&lt;/strong&gt;. Since I use this often, typing &lt;code&gt;i&lt;/code&gt; is enough - it autocompletes to &lt;code&gt;invoice&lt;/code&gt;, and I just paste the ID and hit &lt;code&gt;Enter&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xrzev0zcrw108e0x1ib.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xrzev0zcrw108e0x1ib.png" alt="i autocompletes to invoice" width="719" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(As you can see, I use it more than I open my terminal. And I open my terminal &lt;strong&gt;a lot&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;This entire flow takes &lt;strong&gt;less than a second&lt;/strong&gt;.&lt;br&gt;
That’s &lt;em&gt;dozens of hours&lt;/em&gt; saved every year — with just one tiny automation.&lt;br&gt;
And I didn't even need to upgrade to the paid version for it.&lt;/p&gt;

&lt;h3&gt;
  
  
  How Did I Do It?
&lt;/h3&gt;

&lt;p&gt;I created a &lt;strong&gt;custom web search&lt;/strong&gt; - a free feature - using this URL format:&lt;br&gt;
&lt;code&gt;https://{OUR_BACKOFFICE_URL}/invoices/ui/details?invoiceId={query}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;So in our case, the URL was:&lt;br&gt;
&lt;code&gt;https://{OUR_BACKOFFICE_URL}/invoices/ui/details?invoiceId=123456789&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This works because our system uses a &lt;strong&gt;URL parameter&lt;/strong&gt; (&lt;code&gt;invoiceId&lt;/code&gt;) to load a specific invoice.&lt;br&gt;
I can use the keyword &lt;code&gt;{query}&lt;/code&gt; to get a parameter from the Alfred command straight to the URL and open it instantly.&lt;/p&gt;

&lt;p&gt;Luckily - most modern websites nowadays use query parameters - including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;YouTube&lt;/li&gt;
&lt;li&gt;Amazon&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;li&gt;Google Maps&lt;/li&gt;
&lt;li&gt;Urban Dictionary&lt;/li&gt;
&lt;li&gt;And many internal tools at work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means we can create these custom web searches for each of these services.&lt;br&gt;
Alfred even has built-in web searches for many of these already.&lt;br&gt;
You can also create your own, specific to &lt;em&gt;your&lt;/em&gt; tools and workflows.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Alfred becomes a &lt;strong&gt;search-anything launcher&lt;/strong&gt; — for your browser, tools, docs, and more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After the next installation section - we will build our very first custom web search together.&lt;br&gt;
If you already have Alfred, you can skip straight to action.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ Install Alfred
&lt;/h2&gt;

&lt;p&gt;The installation process is very simple.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go to &lt;a href="https://www.alfredapp.com/" rel="noopener noreferrer"&gt;Alfred's website&lt;/a&gt; and click on the "Download Alfred 5" button.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jpvfn85h32euqydme8i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jpvfn85h32euqydme8i.png" alt="download alfred" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go through the simple installation process (you can skip the part in which it asks for a license key and just use the free version).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;That's it&lt;/strong&gt;! Alfred is ready for you to use.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The default command to launch Alfred is &lt;code&gt;Option (⌥) + Space&lt;/code&gt;.&lt;br&gt;
  Try hitting &lt;code&gt;⌥ + Space&lt;/code&gt;, type an app's name and hit Enter to launch it! 🚀&lt;/p&gt;

&lt;p&gt;You can change the Alfred's launch hotkey to be &lt;code&gt;⌘ + Space&lt;/code&gt; like I did, but this hotkey is already taken by Spotlight (which you don't need anymore).&lt;/p&gt;

&lt;p&gt;Let's change that.&lt;/p&gt;

&lt;p&gt;Go into your Mac's settings (you can use Alfred for that 😎. hit &lt;code&gt;⌥ + Space&lt;/code&gt;, write &lt;code&gt;settings&lt;/code&gt; and hit Enter).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fodfewdvxrbt6dviufts4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fodfewdvxrbt6dviufts4.png" alt="open settings" width="718" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search for &lt;code&gt;keyboard&lt;/code&gt; in the settings' search, and click &lt;code&gt;keyboard shortcuts&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F750i1kgo7cxxyiz4l0h3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F750i1kgo7cxxyiz4l0h3.png" alt="search for keyboard" width="422" height="694"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now look for &lt;code&gt;Spotlight&lt;/code&gt; on the left, and uncheck &lt;code&gt;Show Spotlight search&lt;/code&gt; to disable it from popping when pressing &lt;code&gt;⌘ + Space&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ka7hiek55de57g2vgui.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ka7hiek55de57g2vgui.png" alt="spotlight settings" width="800" height="714"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's make Alfred open when pressing &lt;code&gt;⌘ + Space&lt;/code&gt;.&lt;br&gt;
Open Alfred settings by opening Alfred and pressing &lt;code&gt;⌘ + ,&lt;/code&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Pro tip: most of macOS apps allow you to open their settings by pressing &lt;code&gt;⌘ + ,&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open the &lt;code&gt;General&lt;/code&gt; tab and select a hotkey for opening Alfred.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5emrahjasg7693h0j8uq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5emrahjasg7693h0j8uq.png" alt="Alfred general tab" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And Alfred is ready for action 🎩🔥.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ Create Your First Custom Web Search
&lt;/h2&gt;

&lt;p&gt;First, open Alfred's settings  (open Alfred, then hit &lt;code&gt;⌘ + ,&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Go to the &lt;code&gt;Features&lt;/code&gt; tab, then to the &lt;code&gt;Web Search&lt;/code&gt; tab.&lt;/p&gt;

&lt;p&gt;As you can see here, there are many web searches that are already defined by default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyybm0ndscn3194x4e1nj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyybm0ndscn3194x4e1nj.png" alt="Alfred web searches" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you like - you can edit the keywords used to trigger the custom web search by double clicking it (as I renamed &lt;code&gt;youtube&lt;/code&gt; to &lt;code&gt;yt&lt;/code&gt; for maximum efficiency 📈).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxkewplzhyzetkdk7eup.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxkewplzhyzetkdk7eup.png" alt="youtube web search" width="800" height="169"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gq4oxn26lx4c4ld9g5h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gq4oxn26lx4c4ld9g5h.png" alt="alfred youtube keyword" width="764" height="172"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo09sh2vikfjytdumsz12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo09sh2vikfjytdumsz12.png" alt="youtube 'rick roll' search" width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's create a new custom web search, which is a very simple process.&lt;br&gt;
The example we'll use is a custom search that searches icons in &lt;a href="https://www.iconfinder.com/" rel="noopener noreferrer"&gt;Iconfinder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Iconfinder use a search query in their URL, very similar to our internal system in which I search for invoices daily.&lt;br&gt;
For example - to search "car" on Iconfinder, I would need to navigate to:&lt;br&gt;
&lt;code&gt;https://www.iconfinder.com/search?q=car&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;See that little &lt;code&gt;q=car&lt;/code&gt; at the end?&lt;br&gt;
&lt;code&gt;car&lt;/code&gt; is our query, and this is how we'll build our web search.&lt;/p&gt;

&lt;p&gt;Click on the &lt;code&gt;Add Custom Search&lt;/code&gt; on the bottom right corner of the table.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5492glztj1px3mxirky2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5492glztj1px3mxirky2.png" alt="add custom search button" width="494" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The window that opens contains of 4 important parts:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fip7wo3djpv4f2806renu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fip7wo3djpv4f2806renu.png" alt="add custom search modal" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Search URL&lt;/code&gt;: The actual URL that will be used in the search. Note that &lt;code&gt;{query}&lt;/code&gt; parameter, this will be replaced by anything you type after the keyword.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Title&lt;/code&gt;: The title of the search in Alfred's UI.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Keyword&lt;/code&gt;: What you need to write in Alfred's UI in order to provoke this web search.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Image&lt;/code&gt; (optional): The image that will be shown for that search in Alfred's UI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are my values for easy copying:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Search URL&lt;/code&gt;: &lt;code&gt;https://www.iconfinder.com/search?q={query}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Title&lt;/code&gt;: &lt;code&gt;Search Iconfinder for {query}&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Keyword&lt;/code&gt;: &lt;code&gt;icon&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Image&lt;/code&gt;: The &lt;a href="https://cdn.freebiesupply.com/logos/large/2x/iconfinder-logo-png-transparent.png" rel="noopener noreferrer"&gt;Iconfinder logo&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's it! &lt;br&gt;
Just click &lt;code&gt;Save&lt;/code&gt; and your first web search is ready for use!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ngql79857t8z8smbcga.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ngql79857t8z8smbcga.png" alt="icon search" width="719" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6tlgw4pbfy8f8ax847z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi6tlgw4pbfy8f8ax847z.png" alt="iconfinder" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course - you can go wild here.&lt;br&gt;
I have over 50 custom web searches for our back office and monitoring tools, complex flows that I occasionally do and save me time, calendar, Gmail, GitHub, Gemini, ChatGPT, Google docs, and many more.&lt;br&gt;
All of these save me lots of time every day, but most of all - make my workflow snappier and more fun.&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 Final Notes
&lt;/h2&gt;

&lt;p&gt;Alfred is one of those rare tools that starts out simple - just replacing Spotlight - but quickly becomes &lt;strong&gt;a core part of your workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You don’t need to pay a cent to start getting serious value out of it.&lt;br&gt;
The powerpack offers a lot of value, and I'll get deeper into it on another post.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Alfred doesn’t just make your Mac faster — it makes you faster.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;If you found this helpful, share it with a friend or teammate 🤝.&lt;br&gt;
If you're feeling like supercharging your terminal as well - check out my &lt;a href="https://medium.com/wix-engineering/supercharging-your-terminal-a-deep-dive-into-my-zshrc-ea57757a1d23" rel="noopener noreferrer"&gt;article&lt;/a&gt; about it.&lt;br&gt;
Want a walkthrough on Alfred’s clipboard manager or custom workflows? Let me know in the comments 👇.&lt;br&gt;
And of course - stay tuned for future guides on Alfred and other productivity tools!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>software</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The One Productivity Tool You Didn't Know You Can't Live Without</title>
      <dc:creator>Saar Shechter</dc:creator>
      <pubDate>Sun, 22 Jun 2025 14:44:15 +0000</pubDate>
      <link>https://dev.to/saarshechter/the-one-productivity-tool-you-didnt-know-you-cant-live-without-4378</link>
      <guid>https://dev.to/saarshechter/the-one-productivity-tool-you-didnt-know-you-cant-live-without-4378</guid>
      <description>&lt;p&gt;&lt;em&gt;Why You Should Start Using a Clipboard Manager Today&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Pain Everyone Ignores 😫
&lt;/h2&gt;

&lt;p&gt;You copy something important, copy something else... aaand it's gone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxa333tdwrf08ys40qqik.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxa333tdwrf08ys40qqik.gif" alt="aaand it's gone" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ever &lt;strong&gt;lost a long message&lt;/strong&gt; you spent 10 minutes writing? Had to keep &lt;strong&gt;switching between apps&lt;/strong&gt; to re-copy five different values? Or filled a &lt;strong&gt;long form&lt;/strong&gt; just for the browser to refresh and for you to &lt;strong&gt;lose all the work&lt;/strong&gt; you've done? &lt;/p&gt;

&lt;p&gt;We've all been there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxwv18uhkgdvu5gjmw3q.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxwv18uhkgdvu5gjmw3q.gif" alt="angry panda breaking keyboard" width="250" height="198"&gt;&lt;/a&gt;&lt;/p&gt;
How I feel when losing a long message because I copied a meme.



&lt;p&gt;That’s where clipboard managers come in - saving your day (and your sanity).&lt;/p&gt;

&lt;h2&gt;
  
  
  So... What Exactly Is a Clipboard Manager? 🤔
&lt;/h2&gt;

&lt;p&gt;A clipboard manager is an app that, well... manages your clipboard.&lt;/p&gt;

&lt;p&gt;Every time you &lt;strong&gt;copy&lt;/strong&gt; something (&lt;code&gt;Ctrl+C&lt;/code&gt; / &lt;code&gt;⌘+C&lt;/code&gt;) - it's saved in a special place among the stars called "the clipboard".&lt;/p&gt;

&lt;p&gt;When you &lt;strong&gt;paste&lt;/strong&gt; (&lt;code&gt;Ctrl+V&lt;/code&gt; / &lt;code&gt;⌘+V&lt;/code&gt;) - the most recent item from the clipboard is pasted in the foremost app.&lt;/p&gt;

&lt;p&gt;By default - your clipboard only remembers the &lt;em&gt;last&lt;/em&gt; item you copied - just one at a time, that's it.&lt;br&gt;
That's how you end up in the kind of hell we opened with, making you question your every life decision that brought you to this miserable moment.&lt;/p&gt;

&lt;p&gt;A clipboard manager lets you &lt;strong&gt;store many items&lt;/strong&gt;, &lt;strong&gt;search&lt;/strong&gt; through them, and even &lt;strong&gt;pin&lt;/strong&gt; the ones you use most.&lt;/p&gt;

&lt;p&gt;Think of it as a &lt;strong&gt;Time Machine&lt;/strong&gt;, but for everything you’ve copied.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Use a Clipboard Manager Every Day 💡
&lt;/h2&gt;

&lt;p&gt;I don't even think about using the clipboard manager - and that's the beauty of it.&lt;/p&gt;

&lt;p&gt;I use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy a piece of text, then &lt;strong&gt;copy another without overwriting the first&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy17gn8nbi491wnx4jnu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy17gn8nbi491wnx4jnu.gif" alt="Copy one by one" width="600" height="293"&gt;&lt;/a&gt;&lt;/p&gt;
Copying and pasting one by one SUCKS 💩.



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzj03tv9yu6adfq2ylnc1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzj03tv9yu6adfq2ylnc1.gif" alt="Copy all" width="720" height="351"&gt;&lt;/a&gt;&lt;/p&gt;
Copying everything then pasting in whatever order we like ROCKS 🪨🔥.



&lt;ul&gt;
&lt;li&gt;Keep an &lt;strong&gt;infinite history&lt;/strong&gt; of my clipboard - everything I copy stays there, ready for immediate access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search&lt;/strong&gt; through my copied items and &lt;strong&gt;find them instantly&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5j1jdetyy17cjq3k7ss.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5j1jdetyy17cjq3k7ss.gif" alt="Search in clipboard" width="720" height="342"&gt;&lt;/a&gt;&lt;/p&gt;
Searching in my clipboard history is easy and blazing fast ⚡️



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Organize&lt;/strong&gt; important notes, code snippets, AI prompts, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  OK, You Convinced Me. Now What? 🚀
&lt;/h2&gt;

&lt;p&gt;Glad you asked! Getting started with a clipboard manager is ridiculously easy.&lt;/p&gt;

&lt;p&gt;All you have to do is pick a clipboard manager and install it.&lt;/p&gt;

&lt;h3&gt;
  
  
  But What Clipboard Manager Should I Pick?
&lt;/h3&gt;

&lt;p&gt;The short answer is - it doesn't really matter! Just pick one and try it out.&lt;/p&gt;

&lt;p&gt;I use &lt;code&gt;Paste&lt;/code&gt;, a very feature rich clipboard manager for Mac with gorgeous UI. It's not free, but it comes along with a &lt;a href="https://setapp.com/" rel="noopener noreferrer"&gt;&lt;code&gt;Setapp&lt;/code&gt;&lt;/a&gt; license that I got from work, so if you already have a license you can use it to install &lt;code&gt;Paste&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You can visit their &lt;a href="https://pasteapp.io/" rel="noopener noreferrer"&gt;website&lt;/a&gt; for pricing information.&lt;/p&gt;

&lt;h4&gt;
  
  
  Other Great Options
&lt;/h4&gt;

&lt;p&gt;💸 &lt;strong&gt;Free and Open Source:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://maccy.app/" rel="noopener noreferrer"&gt;Maccy&lt;/a&gt; (Mac) - Lightweight, open source and fast. Minimal and effective.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.raycast.com/" rel="noopener noreferrer"&gt;Raycast&lt;/a&gt; (Mac) - A very strong utility tool, a big competitor to Alfred. On the free tier, it stores up to 3 months of clipboard history (older items are automatically removed as new ones are added).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://ditto-cp.sourceforge.io/" rel="noopener noreferrer"&gt;Ditto&lt;/a&gt; (Windows) - One of the most popular clipboard managers for Windows. Free, efficient and gets the job done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Windows Clipboard History (Windows) – Built right into Windows 10 and 11. Just press Win + V to open your clipboard history. Simple, free, and already installed, but limited to 25 items.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔥 &lt;strong&gt;More Paid / Premium Options:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pasteapp.io/" rel="noopener noreferrer"&gt;Paste&lt;/a&gt; (Mac) - This is what I use in my day-to-day. I recommend it only if you already have a Setapp license, as it can be a little pricy on its own.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.alfredapp.com/" rel="noopener noreferrer"&gt;Alfred&lt;/a&gt; 🎩 (Mac) - A very powerful clipboard manager that comes along with the Alfred Powerpack (if you're interested, I wrote a begginer's guide to Alfred, read it &lt;a href="https://dev.to/saarshechter/why-alfred-is-the-first-app-you-should-install-on-your-mac-3gok"&gt;here&lt;/a&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Bottom Line ⚡️
&lt;/h2&gt;

&lt;p&gt;A clipboard manager is one of those tools you try once and instantly wonder how you ever lived without it.&lt;/p&gt;

&lt;p&gt;Whether you're coding, writing, designing, researching, filling out annoying forms or just making memes - having a searchable history of everything you copied can be a &lt;em&gt;HUGE&lt;/em&gt; upgrade to your workflow.&lt;/p&gt;

&lt;p&gt;Pick one. Try it for a day.&lt;/p&gt;

&lt;p&gt;You'll never go back.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you’re into productivity tools, &lt;a href="https://dev.to/saarshechter/supercharging-your-terminal-a-deep-dive-into-my-zshrc-186i"&gt;you might enjoy this deep dive into my .zshrc&lt;/a&gt;, where I share how I’ve optimized my terminal.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tooling</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Supercharging Your Terminal: A Deep Dive into My .zshrc</title>
      <dc:creator>Saar Shechter</dc:creator>
      <pubDate>Thu, 05 Jun 2025 14:42:22 +0000</pubDate>
      <link>https://dev.to/saarshechter/supercharging-your-terminal-a-deep-dive-into-my-zshrc-186i</link>
      <guid>https://dev.to/saarshechter/supercharging-your-terminal-a-deep-dive-into-my-zshrc-186i</guid>
      <description>&lt;p&gt;A friend recently watched me jump between projects - and asked, "&lt;em&gt;Wait, how did you do that so &lt;strong&gt;fast&lt;/strong&gt;?&lt;/em&gt;".&lt;/p&gt;

&lt;p&gt;That moment made me realize just how much of my workflow is powered by my customized .zshrc (and &lt;a href="https://alfred.app/" rel="noopener noreferrer"&gt;Alfred&lt;/a&gt; 🎩, but that's a topic for another article).&lt;/p&gt;

&lt;p&gt;Below, you'll find an overview of &lt;strong&gt;tools&lt;/strong&gt;, &lt;strong&gt;plugins&lt;/strong&gt;, and &lt;strong&gt;custom scripts&lt;/strong&gt; I use to make my development workflow more efficient.&lt;/p&gt;

&lt;p&gt;Whether you're setting up your terminal for the &lt;strong&gt;first time&lt;/strong&gt; or an &lt;strong&gt;experienced developer&lt;/strong&gt; looking for inspiration, this guide has something for you.&lt;/p&gt;

&lt;p&gt;⚡️ &lt;strong&gt;Best of all&lt;/strong&gt;: each section is modular and easy to follow - jump in wherever you're curious and &lt;strong&gt;skip&lt;/strong&gt; what you don't need.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🧭 Note: This guide is written for &lt;strong&gt;macOS&lt;/strong&gt;  and other Unix-like environments. Some parts may not work as-is on Windows without WSL or similar tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📚 Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;🔧 What is .zshrc and Why Do We Need It?&lt;/li&gt;
&lt;li&gt;⚙️ Terminal Framework: Oh My Zsh&lt;/li&gt;
&lt;li&gt;🎨 Theme: Powerlevel10k&lt;/li&gt;
&lt;li&gt;
🔌 Plugins

&lt;ul&gt;
&lt;li&gt;git&lt;/li&gt;
&lt;li&gt;zsh-autosuggestions&lt;/li&gt;
&lt;li&gt;zsh-syntax-highlighting&lt;/li&gt;
&lt;li&gt;fzf and fzf-tab&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;⚡️ Aliases&lt;/li&gt;

&lt;li&gt;

💻 Custom Scripts

&lt;ul&gt;
&lt;li&gt;grepo — Go to Repo&lt;/li&gt;
&lt;li&gt;Git Garbage Collection (ggc)&lt;/li&gt;
&lt;li&gt;Git Branch Switch (gbs)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;📝 Final Notes&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔧 What is .zshrc and Why Do We Need It?
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;code&gt;zsh&lt;/code&gt; is short for Z Shell: a powerful, highly customizable Unix shell that helps you interact with your operating system.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;.zshrc&lt;/code&gt; file is your main &lt;code&gt;zsh&lt;/code&gt; configuration file. It runs every time you start a new terminal session.&lt;br&gt;
It defines the &lt;strong&gt;environment&lt;/strong&gt;, sets up &lt;strong&gt;shortcuts&lt;/strong&gt;, loads &lt;strong&gt;plugins&lt;/strong&gt;, and controls how your terminal behaves.&lt;br&gt;
A well-configured &lt;code&gt;.zshrc&lt;/code&gt; makes your terminal more powerful and easier to use, but most importantly - more fun!&lt;br&gt;
So without further ado - let's dive in 💪🏼.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5u0omvijam7y7m3cvqzp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5u0omvijam7y7m3cvqzp.gif" alt=" " width="500" height="297"&gt;&lt;/a&gt;&lt;br&gt;From giphy.com
  &lt;/p&gt;
&lt;h2&gt;
  
  
  ⚙️ Terminal Framework: Oh My Zsh
&lt;/h2&gt;

&lt;p&gt;I use &lt;a href="https://ohmyz.sh/" rel="noopener noreferrer"&gt;Oh My Zsh&lt;/a&gt; to manage my Zsh configuration. It makes Zsh far more powerful and customizable than the default setup, thanks to its plugin system and theming capabilities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9tiqn4zfbnoc8up0lm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo9tiqn4zfbnoc8up0lm8.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;Generated using Flux1.AI
  &lt;/p&gt;
&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;Just run this command in your terminal:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will download and install Oh My Zsh in your home directory (&lt;code&gt;~&lt;/code&gt;).&lt;br&gt;
It will also create a new &lt;code&gt;.zshrc&lt;/code&gt; file under &lt;code&gt;~/.zshrc&lt;/code&gt;, backing up any old &lt;code&gt;.zshrc&lt;/code&gt; you might have had into a file called &lt;code&gt;.zshrc.pre-oh-my-zsh&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  💾 Backup Your .zshrc Before You Start
&lt;/h3&gt;

&lt;p&gt;Before making any changes to your .zshrc, it's a good idea to create a backup. That way, if anything goes wrong or you just want to roll back to your original configuration, you can easily restore it.&lt;/p&gt;

&lt;p&gt;You can run this command to create a backup:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp ~/.zshrc ~/.zshrc.backup.$(date +%Y%m%d%H%M%S)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;This will create a timestamped backup file, like &lt;code&gt;~/.zshrc.backup.20250604123045&lt;/code&gt;, so you can always go back to a specific version.&lt;/p&gt;
&lt;h3&gt;
  
  
  How to Edit .zshrc
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Important Note&lt;/strong&gt;: Throughout this guide we will need to edit our &lt;code&gt;.zshrc file&lt;/code&gt;. We can open it in any editor we like (for example - VS Code, Cursor, Sublime Text, etc.).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To open it in VS Code, run:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;code ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;No VS Code? You can use the default macOS editor:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;open ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;After saving&lt;/strong&gt; changes, &lt;strong&gt;apply&lt;/strong&gt; them with:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;source ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Alternatively, close and reopen your terminal to reload the config.&lt;br&gt;
Now we're ready to start with the customizations 😎🛠️.&lt;/p&gt;
&lt;h2&gt;
  
  
  🎨 Theme: Powerlevel10k
&lt;/h2&gt;

&lt;p&gt;The default Oh My Zsh theme is &lt;code&gt;robbyrussell&lt;/code&gt;, which is decent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8g0tnymh5k183qubwr2v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8g0tnymh5k183qubwr2v.png" alt=" " width="800" height="538"&gt;&lt;/a&gt;&lt;br&gt;robbyrussell - the default Oh My Zsh theme, taken from Oh My Zsh docs
  &lt;/p&gt;

&lt;p&gt;But I really like &lt;a href="https://github.com/romkatv/powerlevel10k" rel="noopener noreferrer"&gt;Powerlevel10k&lt;/a&gt;, as it offers much more customization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqf8t8vgh4vjc44k66ilt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqf8t8vgh4vjc44k66ilt.png" alt=" " width="765" height="516"&gt;&lt;/a&gt;&lt;br&gt;Powerlevel10k - a customizable theme for Oh My Zsh, taken from Powerlevel10k docs
  &lt;/p&gt;
&lt;h3&gt;
  
  
  Installation
&lt;/h3&gt;

&lt;p&gt;First - clone the Powerlevel10k repository by running this command:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone --depth=1 https://github.com/romkatv/powerlevel10k.git "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Now open &lt;code&gt;~/.zshrc&lt;/code&gt;, find the line that sets &lt;code&gt;ZSH_THEME&lt;/code&gt;, and change its value to &lt;code&gt;"powerlevel10k/powerlevel10k"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4mfrcz23pttl15tw1lal.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4mfrcz23pttl15tw1lal.png" alt=" " width="776" height="48"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The configuration wizard should start immediately, but if not - you can run this command to manually trigger it:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p10k configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can now follow the wizard in order to customize the theme to your preferences.&lt;/p&gt;

&lt;p&gt;You can go wild here, as you can always run &lt;code&gt;p10k configure&lt;/code&gt; again and select different options.&lt;br&gt;
The wizard is pretty straightforward, but let me know if you'd like to see an in-depth tutorial on it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwl3kkq6udjz9cfm9d25s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwl3kkq6udjz9cfm9d25s.png" alt=" " width="500" height="516"&gt;&lt;/a&gt;&lt;br&gt;Created on imgflip.com
  &lt;/p&gt;
&lt;h2&gt;
  
  
  🔌 Plugins
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt; are small add-ons that &lt;strong&gt;extend Zsh&lt;/strong&gt;'s functionality - they can&lt;br&gt;
add helpful &lt;strong&gt;aliases&lt;/strong&gt;, improve &lt;strong&gt;autocomplete&lt;/strong&gt;, enhance &lt;strong&gt;Git integration&lt;/strong&gt;,&lt;br&gt;
and more.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy48mfk9g6eo2gd02hsgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy48mfk9g6eo2gd02hsgg.png" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;br&gt;Generated using Flux1.AI
  &lt;/p&gt;

&lt;p&gt;In order to install plugins we usually need to do 2 things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the plugin repository.&lt;/li&gt;
&lt;li&gt;Add the plugin to the &lt;code&gt;plugins&lt;/code&gt; line in our &lt;code&gt;.zshrc&lt;/code&gt; file.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can view a huge list of Oh My Zsh plugins in their &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/plugins" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;br&gt;
Let's go over some of my favorite plugins that I use every day.&lt;/p&gt;
&lt;h3&gt;
  
  
  Git
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git#functions" rel="noopener noreferrer"&gt;git&lt;/a&gt; plugin provides many useful aliases and functions.&lt;br&gt;
Some aliases I use are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;gl&lt;/code&gt; = &lt;code&gt;git pull&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ga&lt;/code&gt; = &lt;code&gt;git add&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gcm&lt;/code&gt; = &lt;code&gt;git checkout $(git_main_branch)&lt;/code&gt; (which is like &lt;code&gt;git checkout master&lt;/code&gt; or &lt;code&gt;git checkout main&lt;/code&gt;, depending on your repo's settings)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gc&lt;/code&gt; = &lt;code&gt;git commit --verbose&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gp&lt;/code&gt; = &lt;code&gt;git push&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can view the entire list of aliases and functions &lt;a href="https://github.com/ohmyzsh/ohmyzsh/tree/master/plugins/git#functions" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In order for it to work - find the &lt;code&gt;plugins&lt;/code&gt; line in your &lt;code&gt;.zshrc&lt;/code&gt; file and add git to it (if it weren't already there).&lt;br&gt;
Your plugins line should now look like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plugins=(git)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  zsh-autosuggestions
&lt;/h3&gt;

&lt;p&gt;Always dreamt of auto-complete in your terminal? Well, now it's not a dream anymore.&lt;/p&gt;

&lt;p&gt;As you type commands in your terminal - &lt;a href="https://github.com/zsh-users/zsh-autosuggestions/tree/master" rel="noopener noreferrer"&gt;zsh-autosuggestions&lt;/a&gt; will suggest completions based on your usage history, and can also be customized to suggest using a completion engine.&lt;br&gt;
When pressing the &lt;code&gt;→&lt;/code&gt; (right arrow) key - the suggestion will be accepted, replacing the contents of the command line buffer with the suggestion.&lt;/p&gt;

&lt;p&gt;You can view the suggestion strategy (and other customization options) in their &lt;a href="https://github.com/zsh-users/zsh-autosuggestions/tree/master?tab=readme-ov-file#suggestion-strategy" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F274v5wq6ka5zypavmsu1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F274v5wq6ka5zypavmsu1.png" alt=" " width="800" height="417"&gt;&lt;/a&gt;&lt;br&gt;zsh-autosuggestions demo
  &lt;/p&gt;
&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Clone this repository into &lt;code&gt;$ZSH_CUSTOM/plugins&lt;/code&gt; (by default &lt;code&gt;~/.oh-my-zsh/custom/plugins&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="o"&gt;[&lt;/span&gt;https://github.com/zsh-users/zsh-autosuggestions]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/zsh-users/zsh-autosuggestions&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-autosuggestions
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Add the plugin to the list of plugins for Oh My Zsh to load (inside &lt;code&gt;~/.zshrc&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    &lt;span class="c"&gt;# other plugins...&lt;/span&gt;
    zsh-autosuggestions
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;(Optional) In order to customize &lt;code&gt;zsh-autosuggestions&lt;/code&gt; to auto complete based on a completion engine if it didn't find a match in your history - add this line above the plugins line:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_AUTOSUGGEST_STRATEGY&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="nb"&gt;history &lt;/span&gt;completion&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Don't forget to source your &lt;code&gt;.zshrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  zsh-syntax-highlighting
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting/tree/master" rel="noopener noreferrer"&gt;zsh-syntax-highlighting&lt;/a&gt; provides, well, syntax highlighting in your terminal.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbf27rppw3pfa9cw33ai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdbf27rppw3pfa9cw33ai.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;Syntax highlighting is shiny ✨
  &lt;/p&gt;
&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;As usual - clone this repository into &lt;code&gt;$ZSH_CUSTOM/plugins&lt;/code&gt; (by default &lt;code&gt;~/.oh-my-zsh/custom/plugins&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="o"&gt;[&lt;/span&gt;https://github.com/zsh-users/zsh-syntax-highlighting.git]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/zsh-users/zsh-syntax-highlighting.git&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/zsh-syntax-highlighting
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Add the plugin to the list of plugins for Oh My Zsh to load (inside &lt;code&gt;~/.zshrc&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    &lt;span class="c"&gt;# other plugins...&lt;/span&gt;
    zsh-syntax-highlighting
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;(Optional) We can add more highlighters (and even implement our own). The default highlighter is &lt;code&gt;main&lt;/code&gt;. I also added &lt;code&gt;brackets&lt;/code&gt; to highlight brackets. You can see the available highlighters in the &lt;a href="https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/docs/highlighters.md" rel="noopener noreferrer"&gt;docs&lt;/a&gt;. To add highlighters - add this line above the plugins line:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;ZSH_HIGHLIGHT_HIGHLIGHTERS&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;main brackets&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Don't forget to source your &lt;code&gt;.zshrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;h3&gt;
  
  
  fzf and fzf-tab
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/junegunn/fzf" rel="noopener noreferrer"&gt;fzf&lt;/a&gt; is an interactive filter program that implements a "fuzzy" matching algorithm. This means you can quickly type in patterns with omitted characters and still get the results you want.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ne3tews4eji6flh8a9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ne3tews4eji6flh8a9f.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;br&gt;fzf - command-line fuzzy finder
  &lt;/p&gt;

&lt;p&gt;We need to install it in order to use &lt;code&gt;fzf-tab&lt;/code&gt;.&lt;br&gt;
&lt;a href="https://github.com/Aloxaf/fzf-tab" rel="noopener noreferrer"&gt;fzf-tab&lt;/a&gt; is replacing zsh's default completion selection menu (that shows up when pressing &lt;code&gt;tab&lt;/code&gt;) with &lt;code&gt;fzf&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;This is what it looks like &lt;strong&gt;before&lt;/strong&gt; using &lt;code&gt;fzf-tab&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F745hsup7ephaqnzsevt2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F745hsup7ephaqnzsevt2.png" alt=" " width="800" height="264"&gt;&lt;/a&gt;&lt;br&gt;No fzf-tab 🙁
  &lt;/p&gt;

&lt;p&gt;And this is how it looks &lt;strong&gt;after&lt;/strong&gt; using &lt;code&gt;fzf-tab&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhvcn2lwh6zu91u8t8xo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhvcn2lwh6zu91u8t8xo.png" alt=" " width="800" height="282"&gt;&lt;/a&gt;&lt;br&gt;With fzf-tab 😍
  &lt;/p&gt;

&lt;p&gt;We can even set it to have directory previews, as shown above.&lt;/p&gt;
&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Install &lt;code&gt;fzf&lt;/code&gt; by running this command:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;fzf
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Now install &lt;code&gt;fzf-tab&lt;/code&gt; by cloning the repo like we did before:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &lt;span class="o"&gt;[&lt;/span&gt;https://github.com/Aloxaf/fzf-tab]&lt;span class="o"&gt;(&lt;/span&gt;https://github.com/Aloxaf/fzf-tab&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ZSH_CUSTOM&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;~/.oh-my-zsh/custom&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/plugins/fzf-tab
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Add the plugin to the list of plugins for Oh My Zsh to load (inside &lt;code&gt;~/.zshrc&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;plugins&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    &lt;span class="c"&gt;# other plugins...&lt;/span&gt;
    fzf-tab
&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;(Optional) We can config &lt;code&gt;fzf-tab&lt;/code&gt; for some added functionality. I added case-insensitivity, tolerance to separators and directory previews. In order to add these configurations - add these lines &lt;strong&gt;above&lt;/strong&gt; your &lt;code&gt;plugins&lt;/code&gt; line:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;zstyle &lt;span class="s1"&gt;':completion:*'&lt;/span&gt; matcher-list &lt;span class="s1"&gt;'m:{a-z}={A-Za-z}'&lt;/span&gt; &lt;span class="s1"&gt;'r:|[._-]=** r:|=**'&lt;/span&gt;
zstyle &lt;span class="s1"&gt;':fzf-tab:complete:cd:*'&lt;/span&gt; fzf-preview &lt;span class="s1"&gt;'ls --color $realpath'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;You can view other configuration options in &lt;code&gt;fzf-tab&lt;/code&gt; &lt;a href="https://github.com/Aloxaf/fzf-tab?tab=readme-ov-file#configure" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;As usual - don't forget to source your &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;source&lt;/span&gt; ~/.zshrc
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;

&lt;h2&gt;
  
  
  ⚡️ Aliases
&lt;/h2&gt;

&lt;p&gt;We can also add custom aliases for commands we find ourselves typing regularly.&lt;br&gt;
To add an alias just add an &lt;code&gt;alias&lt;/code&gt; command to your &lt;code&gt;.zshrc&lt;/code&gt; file.&lt;br&gt;
An &lt;code&gt;alias&lt;/code&gt; command looks like this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alias ${your_alias}="${some_command}"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;For example, these are my aliases:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alias yb="yarn build"
alias yba="yarn build:app"
alias ys="yarn start"
alias yt="yarn test"
alias ytw="yarn test:watch"
alias gc-="git checkout -"
alias ..="cd .."
alias ...="cd ../.."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;So when I type &lt;code&gt;yb&lt;/code&gt; into the console, it will actually run &lt;code&gt;yarn build&lt;/code&gt;, which I do dozens of times daily.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyx0qztz09sj0dn8n1hmi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyx0qztz09sj0dn8n1hmi.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;Generated on imgflip.com
  &lt;/p&gt;

&lt;p&gt;These are just things I find myself use over and over, so I decided to make an alias for them. You can go wild here!&lt;/p&gt;
&lt;h2&gt;
  
  
  💻 Custom Scripts
&lt;/h2&gt;

&lt;p&gt;The last section of this guide will be dedicated to some custom scripts I wrote (using my best friend in the entire world - ChatGPT).&lt;br&gt;
I did it because I was missing some functionality, but mostly because I wanted to experiment with bash scripting.&lt;br&gt;
I'm sure that these could be improved, so feel free to comment if you have any suggestions 😬.&lt;/p&gt;
&lt;h3&gt;
  
  
  grepo - Go to Repo
&lt;/h3&gt;

&lt;p&gt;A simple script used to quickly navigate to a repository. Requires &lt;code&gt;fzf&lt;/code&gt; (see above).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0248n4mj165ny28dqat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu0248n4mj165ny28dqat.png" alt=" " width="800" height="598"&gt;&lt;/a&gt;&lt;br&gt;"grepo" script
  &lt;/p&gt;
&lt;h4&gt;
  
  
  Installation
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Copy the script into your &lt;code&gt;.zshrc&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Change the &lt;code&gt;repo_dir&lt;/code&gt; variable to the directory in which you keep all your repositories.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;source&lt;/code&gt; your .zshrc file.&lt;/li&gt;
&lt;li&gt;Profit!
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="k"&gt;function &lt;/span&gt;grepo&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;repo_dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/&lt;span class="o"&gt;{&lt;/span&gt;YOUR_REPO_DIR_HERE&lt;span class="o"&gt;}&lt;/span&gt;
      &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;open_in_editor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
      local &lt;/span&gt;&lt;span class="nv"&gt;pull_latest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;

      &lt;span class="c"&gt;# Parse flags&lt;/span&gt;
      &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$# &lt;/span&gt;&lt;span class="nt"&gt;-gt&lt;/span&gt; 0 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
        case&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt;
          &lt;span class="nt"&gt;-o&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="nt"&gt;--open&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;open_in_editor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
            shift&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
          &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="p"&gt;|&lt;/span&gt;&lt;span class="nt"&gt;--pull&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nv"&gt;pull_latest&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true
            shift&lt;/span&gt;
            &lt;span class="p"&gt;;;&lt;/span&gt;
          &lt;span class="k"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Unknown option: &lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
            &lt;span class="k"&gt;return &lt;/span&gt;1
            &lt;span class="p"&gt;;;&lt;/span&gt;
        &lt;span class="k"&gt;esac&lt;/span&gt;
      &lt;span class="k"&gt;done&lt;/span&gt;

      &lt;span class="c"&gt;# Select repository&lt;/span&gt;
      &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;selected_repo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;find &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$repo_dir&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-maxdepth&lt;/span&gt; 1 &lt;span class="nt"&gt;-type&lt;/span&gt; d | fzf &lt;span class="nt"&gt;--height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20% &lt;span class="nt"&gt;--reverse&lt;/span&gt; &lt;span class="nt"&gt;--border&lt;/span&gt; &lt;span class="nt"&gt;--prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Select a repo: "&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nv"&gt;$selected_repo&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$selected_repo&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"❌ Failed to navigate to &lt;/span&gt;&lt;span class="nv"&gt;$selected_repo&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
          &lt;span class="k"&gt;return &lt;/span&gt;1
        &lt;span class="o"&gt;}&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;$pull_latest&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
          &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🔄 Pulling latest changes..."&lt;/span&gt;
          git pull &lt;span class="nt"&gt;--ff-only&lt;/span&gt;
        &lt;span class="k"&gt;fi
        if&lt;/span&gt; &lt;span class="nv"&gt;$open_in_editor&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
          &lt;/span&gt;code &lt;span class="nb"&gt;.&lt;/span&gt;
        &lt;span class="k"&gt;fi
      else
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⚠️ No valid repository selected"&lt;/span&gt;
      &lt;span class="k"&gt;fi&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Usage
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Type &lt;code&gt;grepo&lt;/code&gt; in your terminal.&lt;/li&gt;
&lt;li&gt;An interactive &lt;code&gt;fzf&lt;/code&gt; search box will open.&lt;/li&gt;
&lt;li&gt;Search for your repository and click &lt;code&gt;↵&lt;/code&gt; (&lt;code&gt;enter&lt;/code&gt;) to select it and &lt;code&gt;cd&lt;/code&gt; to it.&lt;/li&gt;
&lt;li&gt;(Optional) - you can add the &lt;code&gt;-p&lt;/code&gt; (or &lt;code&gt;--pull&lt;/code&gt;) and &lt;code&gt;-o&lt;/code&gt; (or &lt;code&gt;--open&lt;/code&gt;) flags to also pull and open the directory in VS Code / Cursor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Feel free to edit this script, add flags, validations and other functionalities you see fit. Let me know if you add anything cool 😎.&lt;/p&gt;
&lt;h3&gt;
  
  
  Git Garbage Collection (ggc)
&lt;/h3&gt;

&lt;p&gt;Another simple script used to clean up stale branches after I merge them. It uses &lt;code&gt;git prune&lt;/code&gt;.&lt;br&gt;
Installation is similar to &lt;code&gt;grepo&lt;/code&gt;, just copy the script and paste it in your &lt;code&gt;.zshrc&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="k"&gt;function &lt;/span&gt;git_garbage_collection&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="c"&gt;# Check if the current directory is a Git repository&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; git rev-parse &lt;span class="nt"&gt;--is-inside-work-tree&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: This is not a Git repository. Exiting."&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;1
      &lt;span class="k"&gt;fi&lt;/span&gt;

      &lt;span class="c"&gt;# Fetch updates from the remote and prune stale references&lt;/span&gt;
      &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Fetching and pruning stale remote references..."&lt;/span&gt;
      git fetch &lt;span class="nt"&gt;--prune&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1

      &lt;span class="c"&gt;# Prune stale remote-tracking branches for the 'origin' remote&lt;/span&gt;
      &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Pruning stale remote-tracking branches for 'origin'..."&lt;/span&gt;
      git remote prune origin &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1
      &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Remote pruning complete."&lt;/span&gt;

      &lt;span class="c"&gt;# Find stale local branches, excluding the current branch, and store them in an array&lt;/span&gt;
      &lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;stale_branches&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;git branch &lt;span class="nt"&gt;-vv&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="s1"&gt;': gone'&lt;/span&gt; | &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; | &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s/^\* //'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="k"&gt;${#&lt;/span&gt;&lt;span class="nv"&gt;stale_branches&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;-gt&lt;/span&gt; 0 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"The following local branches are no longer tracking a remote:"&lt;/span&gt;
        &lt;span class="k"&gt;for &lt;/span&gt;branch &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;stale_branches&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
          &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$branch&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
        &lt;span class="k"&gt;done
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;

        &lt;span class="c"&gt;# Confirm deletion for each branch using a for loop&lt;/span&gt;
        &lt;span class="k"&gt;for &lt;/span&gt;branch &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;stale_branches&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
          &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"Force delete '&lt;/span&gt;&lt;span class="nv"&gt;$branch&lt;/span&gt;&lt;span class="s2"&gt;'? [y/N]: "&lt;/span&gt;
          &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; confirmation
          &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$confirmation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;~ ^[Yy]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
            &lt;/span&gt;git branch &lt;span class="nt"&gt;-D&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$branch&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
          &lt;span class="k"&gt;else
            &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Skipped '&lt;/span&gt;&lt;span class="nv"&gt;$branch&lt;/span&gt;&lt;span class="s2"&gt;'."&lt;/span&gt;
          &lt;span class="k"&gt;fi
        done
      else
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"No stale local branches found."&lt;/span&gt;
      &lt;span class="k"&gt;fi&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ggc&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git_garbage_collection"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Usage
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;While in some repository - type &lt;code&gt;ggc&lt;/code&gt; in your terminal.&lt;/li&gt;
&lt;li&gt;All of the stale (local and remote) branches will be fetched.&lt;/li&gt;
&lt;li&gt;The script will verify before deleting each of the branches.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Feel free to add a flag to delete all of the branches without needing to confirm each.&lt;/p&gt;

&lt;h3&gt;
  
  
  Git Branch Switch (gbs)
&lt;/h3&gt;

&lt;p&gt;Another simple script to list all local and remote branches using &lt;code&gt;fzf&lt;/code&gt;.&lt;br&gt;
As before - just copy and paste to your &lt;code&gt;.zshrc&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;    &lt;span class="k"&gt;function &lt;/span&gt;git_branch_switch&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="c"&gt;# Check if the current directory is a Git repository&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; git rev-parse &lt;span class="nt"&gt;--is-inside-work-tree&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Error: This is not a Git repository. Exiting."&lt;/span&gt;
        &lt;span class="k"&gt;return &lt;/span&gt;1
      &lt;span class="k"&gt;fi&lt;/span&gt;

      &lt;span class="c"&gt;# Fetch all branches from the remote to ensure up-to-date references&lt;/span&gt;
      git fetch &lt;span class="nt"&gt;--all&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null 2&amp;gt;&amp;amp;1

      &lt;span class="c"&gt;# Combine local branches and valid remote branches&lt;/span&gt;
      &lt;span class="nb"&gt;local &lt;/span&gt;branch
      &lt;span class="nv"&gt;branch&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;
        &lt;span class="o"&gt;{&lt;/span&gt;
          &lt;span class="c"&gt;# List local branches&lt;/span&gt;
          git branch &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%(refname:short)"&lt;/span&gt;
          &lt;span class="c"&gt;# List remote branches, excluding symbolic refs like "origin/HEAD"&lt;/span&gt;
          git branch &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%(refname:short)"&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"origin/HEAD"&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt; | fzf &lt;span class="nt"&gt;--height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;20% &lt;span class="nt"&gt;--reverse&lt;/span&gt; &lt;span class="nt"&gt;--prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Select a branch: "&lt;/span&gt;
      &lt;span class="si"&gt;)&lt;/span&gt;

      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="nv"&gt;$branch&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="c"&gt;# Strip "remotes/origin/" if a remote branch is selected&lt;/span&gt;
        git checkout &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;branch&lt;/span&gt;&lt;span class="p"&gt;#remotes/origin/&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
      &lt;span class="k"&gt;else
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"No branch selected"&lt;/span&gt;
      &lt;span class="k"&gt;fi&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;

    &lt;span class="c"&gt;# Create a convenient alias&lt;/span&gt;
    &lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gbs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git_branch_switch"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📝 Final Notes
&lt;/h2&gt;

&lt;p&gt;Customizing your &lt;code&gt;.zshrc&lt;/code&gt; can feel intimidating at first, but even small changes can make a big impact on your workflow. Start with what feels useful, and build from there.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Don't worry about making it perfect, just make it &lt;strong&gt;yours&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I hope you found this guide helpful 🙏🏼.&lt;br&gt;
Let me know if you have any comments or questions! ✌🏼&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
      <category>terminal</category>
    </item>
  </channel>
</rss>
