<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>amanhimself.dev</title><description>I&apos;m Aman Mittal (@amanhimself). Software Developer and Tech Writer. Welcome to my blog!</description><link>https://amanhimself.dev/</link><language>en</language><atom:link href="https://amanhimself.dev/rss.xml" rel="self" type="application/rss+xml"/><item><title>Taking the terminal seriously in the age of AI coding agents</title><link>https://amanhimself.dev/blog/taking-terminals-seriously/</link><guid isPermaLink="true">https://amanhimself.dev/blog/taking-terminals-seriously/</guid><description>These days I am spending more time in the terminal app than any other environment on my development machine.</description><pubDate>Fri, 28 Aug 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;These days I am spending more time in the terminal app than any other environment on my development machine. Most of it comes down to using agentic harnesses such as Claude Code, Codex CLI, and more.&lt;/p&gt;
&lt;p&gt;Previously, for the last two months, I have been using Otty terminal app and left my Ghostty setup in between. However, after constantly running across one or two frustrations with the app itself, I have decided to go back to use Ghostty as my main terminal app. By the way I still keep iTerm2 around as a backup.&lt;/p&gt;
&lt;p&gt;In Ghostty, I have been using some preconfigured settings and updating configuration to my taste. I started with Solarized Dark Higher Contrast theme and here is how my terminal window looks like at the moment:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/taking-terminals-seriously/01.png&quot; alt=&quot;Ghostty terminal window using the Solarized Dark Higher Contrast theme&quot; width=&quot;800&quot;&gt;
&lt;p&gt;The configuration I have applied to Ghostty so far is minimal and to my own taste. I am not going to go into details about each configuration option in this post since I have already &lt;a href=&quot;https://amanhimself.dev/blog/using-ghostty/&quot;&gt;written a post a few months back about it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here’s my current &lt;strong&gt;Ghostty&lt;/strong&gt; configuration:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# .config/ghostty/config&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;theme&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Solarized&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Dark&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Higher&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Contrast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;background-opacity&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0.9&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;background-blur-radius&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;font-family&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; JetBrainsMono&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Nerd&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Font&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;font-size&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 18&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;font-thicken&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;macos-titlebar-style&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; tabs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;macos-option-as-alt&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;keybind&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; alt+left=unbind&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;keybind&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; alt+right=unbind&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cursor-style&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; block&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cursor-style-blink&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;shell-integration-features&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ssh-terminfo,ssh-env&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;shell-integration&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;tab-inherit-working-directory&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;split-inherit-working-directory&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;window-decoration&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;window-padding-x&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;window-padding-y&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;confirm-close-surface&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; =&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; always&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In the previous screenshot, the background blur and opacity are not noticeable but my desktop’s background wallpaper is slightly visible when I am using Ghostty. Solarized Dark with a higher contrast makes the text feel less dull in the theme itself and is something I want to give try for next few coming days before deciding to move to another theme.&lt;/p&gt;
&lt;p&gt;There are multiple themes that Ghostty comes with and to view the list quickly, you can use the &lt;code&gt;ghostty +list-themes&lt;/code&gt; command in a terminal window:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/taking-terminals-seriously/02.png&quot; alt=&quot;Output of the ghostty +list-themes command showing the built-in themes list&quot; width=&quot;800&quot;&gt;
&lt;p&gt;This list of themes is larger than the iTerm2 and I think the most I have ever seen included by default in a terminal app. Nice to see that people who spend time in terminals these days are taken care of by the Ghostty team.&lt;/p&gt;
&lt;p&gt;Most of my daily workflow revolves around my work which is documentation and using agent harnesses. I switch between apps like terminal, GitHub desktop app, VS Code, and Obsidian a lot while I am working. I got curious recently about how much of my work I can shift to one single terminal app instead of switching between different apps. Claude Code and other harnesses moved me into the terminal land, to be honest.&lt;/p&gt;
&lt;p&gt;We will see how it goes for me. Just wanted to share some quick thoughts before I dive deeper into the nerdy rabbit hole. If you have tips and/or suggestions what other part of my work I operate without leaving the terminal window, reach out to me.&lt;/p&gt;</content:encoded><category>cli</category></item><item><title>Adding Content-Signal to a docs site</title><link>https://amanhimself.dev/blog/adding-content-signal-to-docs-site/</link><guid isPermaLink="true">https://amanhimself.dev/blog/adding-content-signal-to-docs-site/</guid><description>A few weeks ago I ran isagentready.com on docs.expo.dev, a site that I manage and work on, for my day job.</description><pubDate>Mon, 24 Aug 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;A few weeks ago I ran &lt;a href=&quot;https://isagentready.com&quot;&gt;isagentready.com&lt;/a&gt; on &lt;a href=&quot;https://docs.expo.dev/&quot;&gt;docs.expo.dev&lt;/a&gt;, a site that I manage and work on, for my day job. One of the failed references during the check was the lack of &lt;code&gt;Content-Signal&lt;/code&gt; policy in &lt;code&gt;robots.txt&lt;/code&gt; file of the site.&lt;/p&gt;
&lt;p&gt;Just for context, isagentsready.com is a tool that checks if a site is ready for AI agents to crawl and index, and is developed by Cloudflare.&lt;/p&gt;
&lt;h2 id=&quot;what-is-content-signal&quot;&gt;What is &lt;code&gt;Content-Signal&lt;/code&gt;?&lt;/h2&gt;
&lt;p&gt;Cloudflare announced the &lt;a href=&quot;https://blog.cloudflare.com/content-signals-policy/&quot;&gt;Content Signals Policy&lt;/a&gt; in September 2025 as an extension to &lt;code&gt;robots.txt&lt;/code&gt;. It is one policy with three flags, each set to yes or no. In a nutshell, if you add it, this is what it looks like in your &lt;code&gt;robots.txt&lt;/code&gt; file:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;User-Agent: *&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Content-Signal: search=yes, ai-train=no, ai-input=yes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Allow: /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The flags to pay attention in the above snippet are the following signals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;search&lt;/code&gt; which covers building a search index and returning results with links and short excerpts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ai-train&lt;/code&gt; which covers including training or fine-tuning LLMs&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ai-input&lt;/code&gt; which covers feeding your content into a model at answer time. This is for retrieval augmented generation and AI search answers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One thing to note here is that Cloudflare do mention that omitting a signal neither grants nor restricts permission. So, it is more of a nice to have, cover the grounds so your documentation site isn’t left behind.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The reference site, &lt;a href=&quot;https://contentsignals.org/&quot;&gt;contentsignals.org&lt;/a&gt;, describes the vocabulary as coming from a proposed IETF standard drafted by the AI Preferences (aipref) working group.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;why-is-this-an-auto-yes-for-a-docs-site&quot;&gt;Why is this an auto-yes for a docs site&lt;/h2&gt;
&lt;p&gt;The content policy’s obvious audience is on of those publisher who wants to refuse. Documentation run on different economics and for many of us, docs is the product.&lt;/p&gt;
&lt;p&gt;Adding this policy to your &lt;code&gt;robots.txt&lt;/code&gt; file doesn’t replace the work you need to do to get answers picked from your docs site for AI Answer search engine optimization. You still need to apply other methods or audit your docs site using &lt;a href=&quot;https://afdocs.dev/&quot;&gt;afdocs.dev&lt;/a&gt; to ensure your docs site is ready for AI agents. There are also other methods like exposing JSON-LD structured data and adding &lt;code&gt;llms.txt&lt;/code&gt;, which I have written before in &lt;a href=&quot;https://amanhimself.dev/blog/docs-discoverability-layers/&quot;&gt;docs discoverability layers&lt;/a&gt;, and about &lt;a href=&quot;https://amanhimself.dev/blog/add-llms-txt-to-an-astro-blog/&quot;&gt;adding llms.txt to this blog&lt;/a&gt;.&lt;/p&gt;</content:encoded><category>ai</category><category>tech-writing</category></item><item><title>My impressions after using Claude Code for six months</title><link>https://amanhimself.dev/blog/impressions-after-using-claude-code-for-six-months/</link><guid isPermaLink="true">https://amanhimself.dev/blog/impressions-after-using-claude-code-for-six-months/</guid><description>Last time when I started to write this post, I got carried away. My brain was on verge of explosion because Claude and I had worked together on so many…</description><pubDate>Mon, 17 Aug 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Last time when I started to write this post, I got carried away. My brain was on verge of explosion because Claude and I had worked together on so many projects and stuff over the last six months.&lt;/p&gt;
&lt;p&gt;My first interaction with the harness was in February 2026 when I started adopting it in my daily work and personal projects slightly more than &lt;a href=&quot;https://amanhimself.dev/blog/first-few-days-with-codex-cli/&quot;&gt;Codex CLI&lt;/a&gt;. I went from having a large &lt;code&gt;CLAUDE.md&lt;/code&gt; file in my global configuration to a smaller one that works 99% of the time.&lt;/p&gt;
&lt;p&gt;I work on documentation and everything related to it in my day job. I have used Claude Code to help me with my daily tasks, adding/removing small pieces of content in docs, building tools to support my work and help me work faster, building tools to narrow the change of drifts, building personal apps with Expo and React Native, and so on.&lt;/p&gt;
&lt;p&gt;The list is endless, but this time I am not going to get carried away while writing this post.&lt;/p&gt;
&lt;h2 id=&quot;my-first-encounter-with-claude-code&quot;&gt;My first encounter with Claude Code&lt;/h2&gt;
&lt;p&gt;Before I started using Claude Code, &lt;a href=&quot;https://amanhimself.dev/blog/first-few-days-with-codex-cli/&quot;&gt;I was using Codex CLI&lt;/a&gt;. I was quite satisfied with the amount of work Codex models were doing. However, my experience of interacting with an LLM via command-line app started to change slightly when I first used Claude Code for work and then slowly and gradually adopted it for personal use over the course first quarter of 2026.&lt;/p&gt;
&lt;p&gt;I remember asking it vague questions, and it was quite chatty about it. Chattier and descriptive than Codex. Initially, it felt like having a &lt;em&gt;smart&lt;/em&gt; rubber duck of my own that can do stuff for me and listen to me.&lt;/p&gt;
&lt;p&gt;My first big project with Claude Code was to publish my first app &lt;a href=&quot;https://amanhimself.dev/lasttimei/&quot;&gt;&lt;strong&gt;Last time I&lt;/strong&gt;&lt;/a&gt; on Google Play Store and Apple App Store. This was the nail in the coffin that I was looking. Just by telling it what I want to do, it went with me step by step to prepare and submit my app for app review processes on both app stores without making a single mistake. Yes, sometimes a particular settings or a page’s information it had was outdated, sharing screenshots on what was in front of me, back and forth, cleared that huddle.&lt;/p&gt;
&lt;p&gt;If you have never published your app or went through the process of publishing an app, it can be daunting and overwhelming for the first time. Using Claude to guide you through the process as well as also learn from it about the niche points of publishing an app, the experience becomes less daunting and more learning. And if you want to go extra mile, you can give Claude access to your Android emulator or screenshots to produce decent looking app store assets without having an external skill or putting to much effort. It will generate those assets in the appropriate size (which is what I did with my second app: &lt;a href=&quot;https://amanhimself.dev/rht/&quot;&gt;&lt;strong&gt;RHT - Reading Habit Tracker&lt;/strong&gt;&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;quick-impressions-of-using-claude-code&quot;&gt;Quick impressions of using Claude Code&lt;/h2&gt;
&lt;p&gt;Here are some of my thoughts that I would say are some of the significant Claude Code impressions I have observed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I am currently subscribed to Claude Code via their Open Source program which gives access to Max plan.&lt;/li&gt;
&lt;li&gt;I appreciate the verbosity but sometimes it is too much.&lt;/li&gt;
&lt;li&gt;Fable is quite different. Even after using Opus 5, Fable is a bit clever and approaches a problem differently.&lt;/li&gt;
&lt;li&gt;Opus is smart enough most of the time for most complex tasks.&lt;/li&gt;
&lt;li&gt;I need to try Sonnet more.&lt;/li&gt;
&lt;li&gt;Fable consumes a lot of tokens that is true but gets the work done.&lt;/li&gt;
&lt;li&gt;You can build a decent mobile app by orchestrating Claude Code.&lt;/li&gt;
&lt;li&gt;Love the &lt;em&gt;artifacts&lt;/em&gt; to visualize options for a task I am working on and how that feature is also integrated in Claude Code. It has been time saver on some of the recent projects I have worked on and I’d like to continue using it more.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>cli</category><category>ai</category><category>claude-code</category></item><item><title>From plan mode to auto mode in Claude Code</title><link>https://amanhimself.dev/blog/from-plan-mode-to-auto-mode-claude-code/</link><guid isPermaLink="true">https://amanhimself.dev/blog/from-plan-mode-to-auto-mode-claude-code/</guid><description>I am using Claude Code since February 2026 and recently I have completely stopped using &quot;plan mode&quot; in Claude Code most of the time and using &quot;auto mode&quot; most…</description><pubDate>Sun, 09 Aug 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;I am using Claude Code since February 2026 and recently I have completely stopped using “plan mode” in Claude Code most of the time and using “auto mode” most of the time during my workday.&lt;/p&gt;
&lt;h2 id=&quot;is-plan-mode-necessary&quot;&gt;Is plan mode necessary?&lt;/h2&gt;
&lt;p&gt;The feature &lt;em&gt;plan mode&lt;/em&gt; was introduced in Claude Code on June 5, 2025 in v1.0.14. It was initially shipped quietly.&lt;/p&gt;
&lt;p&gt;I think plan mode is necessary when I am exploring something from scratch or I want Claude to plan a series of tasks that I can come back to, in another session or on different system. I also think plan mode plays role when I, the user, have to make a decision and I don’t want to delegate that part to Claude. It acts as a guardrail that prohibits editing files in a codebase.&lt;/p&gt;
&lt;h2 id=&quot;i-want-to-control-interactions&quot;&gt;I want to control interactions&lt;/h2&gt;
&lt;p&gt;Although, another workaround I have found when exploring something, is to ask Claude Code explicitly “to not touch or edit any file…”. This works 100 percent of the time with new top frontier models like Opus 5 and Fable 5 and doesn’t require me selecting plan mode in Claude Code.&lt;/p&gt;
&lt;p&gt;This is also known as being a &lt;strong&gt;human-in-the-loop&lt;/strong&gt;. Some of the ways I indulge in interactions is by adding one of the following in a prompt:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;“list all options I have to do this task”&lt;/li&gt;
&lt;li&gt;“do not edit any files and list/discuss options”&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The emphasis here is to have Claude list all the options before I proceed on a given task. After it lists all the options to do X task, I can interact with by asking questions and offer personal opinions and select the direction I want it to go to perform the action. This way, you can also say, the person initiating the Claude Code session becomes the orchestrator.&lt;/p&gt;
&lt;p&gt;Multiple back and forth exchanges are required for the complex tasks or larger tasks in my opinion. Without having any sort of interactions I won’t know what is Claude working on and I still don’t completely trust LLMs to make decisions on their own, all the time.&lt;/p&gt;
&lt;h2 id=&quot;if-not-plan-mode-then-what-mode-am-i-using&quot;&gt;If not plan mode, then what mode am I using?&lt;/h2&gt;
&lt;p&gt;In most sessions with Claude Code, I am using &lt;em&gt;auto mode&lt;/em&gt;. I have multiple sessions open at one time in my terminal app and I try to go through them as quickly as I can be depending on the nature of each session. I only want to be a bottleneck where my attention is required.&lt;/p&gt;
&lt;p&gt;For example, a documentation pull request (PR) review can be done with my custom skill. It doesn’t require my attention when I have given the context. A session can itself trigger the skill and have the review ready in the pending state. My attention in this process is only required when the comments on the PR are posted in the pending the state on GitHub. Then, I can go through what Claude posted and if there’s anything I have to add further for the benefit of the PR author.&lt;/p&gt;
&lt;p&gt;Another example of using auto mode is when I have already investigate the problem and have a good idea on how to solve it. Consider a linear issue with an appropriate title and a description that contains enough context for an LLM to go through and implement the solution. I have also instructed Claude to check out a Git branch based on the Linear issue and then proceed with the rest of the issue. This way, I am not the bottleneck and the approach works for low and/or none complex tasks.&lt;/p&gt;</content:encoded><category>claude-code</category><category>llms</category></item><item><title>2026 - half year in books</title><link>https://amanhimself.dev/blog/2026-half-year-in-books/</link><guid isPermaLink="true">https://amanhimself.dev/blog/2026-half-year-in-books/</guid><description>In 2026, I set a goal to read 26 books. I had the lowest expectations of myself, and I stayed true to those expectations, because in January I did not read…</description><pubDate>Wed, 05 Aug 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;In 2026, I set a goal to read 26 books. I had the lowest expectations of myself, and I stayed true to those expectations, because in January I did not read anything.&lt;/p&gt;
&lt;p&gt;I started reading in February, which is why I decided to write a six-month review of my 2026 books at the end of July.&lt;/p&gt;
&lt;p&gt;So far, the first six months of reading have been sustainable. I completed my 26-book to read in a year goal, in July. If you are curious, I use &lt;a href=&quot;https://www.goodreads.com/author/show/17657541.Aman_Mittal?ref=nav_profile_l&quot;&gt;Goodreads&lt;/a&gt; to track my reading challenge and the books I read.&lt;/p&gt;
&lt;h2 id=&quot;books-i-recommend&quot;&gt;Books I recommend&lt;/h2&gt;
&lt;p&gt;I won’t list every book I read this year, but like &lt;a href=&quot;https://amanhimself.dev/blog/2025-year-in-books/&quot;&gt;every other year&lt;/a&gt;, I do have some recommendations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Warbreaker by Brandon Sanderson&lt;/strong&gt;: An absolute delight to read. Hook after hook after hook. I expected a slow start from a 600+ page fantasy, but there isn’t one. Sanderson gives you a man arguing with his sword, two sisters swapped into the wrong lives, and a magic system built on the selling and purchasing of &lt;em&gt;air&lt;/em&gt;. I don’t know how he does it, but I am eager for more Sanderson works.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A Wanted Man by Lee Child&lt;/strong&gt;: Lee Child’s writing style is terse, and his hooks kept me going. Jack Reacher is also a well-developed character who has some mystery about him. And that is the mystery I wanted to solve. I don’t know why I started with book number 17 in the series, but once I picked it up and got going, it never felt like I was reading the 17th book in a series. This was also the first paperback I bought and finished this year.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Odyssey by Stephen Fry&lt;/strong&gt;: If someone manages a shelf where they list all the books that retell a story thousands of years old with elegance and easy-to-digest prose, then this book should be on that shelf, in the first row.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs as Tests &amp;#x26; AI by Manny Silva&lt;/strong&gt;: If you write or manage docs and want to explore how the docs world is changing in 2026, how it is influenced by LLMs, and how to test your docs deterministically and probabilistically, then this book is for you.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;other-stats&quot;&gt;Other stats&lt;/h2&gt;
&lt;p&gt;The following stats are provided by Goodreads on my account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Total books read: 26&lt;/li&gt;
&lt;li&gt;Pages read: 5263&lt;/li&gt;
&lt;li&gt;Longest book: Warbreaker by Brandon Sanderson&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap up&lt;/h2&gt;
&lt;p&gt;I am glad I have completed my reading challenge. At the same time, I am eager to read more.&lt;/p&gt;
&lt;p&gt;Finally, I have acquired a taste for reading Brandon Sanderson’s books, and I do think highly of him after finishing Warbreaker. I can say it now: &lt;em&gt;I get why he’s famous.&lt;/em&gt; I think I’ll be diving more into fantasy as a genre. Maybe I’ll go back to Wheel of Time series after 7 years, which I left half-way. Only time will tell.&lt;/p&gt;
&lt;p&gt;Reach out to me. I’d love to hear about some of the books you have read this year or would like to recommend. My ever-growing and never-ending TBR list is waiting :)&lt;/p&gt;</content:encoded><category>year-reviews</category></item><item><title>Notes that can never be atomic</title><link>https://amanhimself.dev/blog/notes-that-can-never-be-atomic/</link><guid isPermaLink="true">https://amanhimself.dev/blog/notes-that-can-never-be-atomic/</guid><description>Every guide to atomic notes eventually meets the same objection: most of what I write cannot be atomic.</description><pubDate>Wed, 22 Jul 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Every guide to atomic notes eventually meets the same objection: most of what I write cannot be atomic. A meeting note is a list of actions and a transcript of a specific day. It’s an event. A project plan is a spec file that contains decisions and at times, serialized tasks, glued together. I do think if a system demands everything become atomic, that system quickly becomes useless.&lt;/p&gt;
&lt;p&gt;In &lt;a href=&quot;https://www.soenkeahrens.de/en/takesmartnotes&quot;&gt;Sönke Ahrens’&lt;/a&gt; description of the Zettelkasten workflow, permanent atomic notes are the output of a pipeline, not the only format allowed to exist. The original system never demanded that.&lt;/p&gt;
&lt;p&gt;Fleeting notes capture and source-bound notes feed the pipeline and remain themselves. They are only as useful till I reach the output. This is why the &lt;em&gt;kind&lt;/em&gt; of note file should live inside different folders. They have different life cycles.&lt;/p&gt;</content:encoded><category>obsidian</category></item><item><title>How to set a custom folder order in Obsidian</title><link>https://amanhimself.dev/blog/custom-folder-order-in-obsidian/</link><guid isPermaLink="true">https://amanhimself.dev/blog/custom-folder-order-in-obsidian/</guid><description>Obsidian&apos;s file explorer sorts folders alphabetically. The sort menu offers file name, modified time, and created time, and nothing else.</description><pubDate>Wed, 15 Jul 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Obsidian’s file explorer sorts folders alphabetically. The sort menu offers file name, modified time, and created time, and nothing else. There is no built-in way to arrange folders by hand.&lt;/p&gt;
&lt;p&gt;For my Obsidian vault, I like to see the organization in a specific way. For example, I like to keep the &lt;code&gt;inbox&lt;/code&gt; folder at the top since it contains files I capture quickly for any reason during the day.&lt;/p&gt;
&lt;p&gt;I also have a &lt;code&gt;_meta/&lt;/code&gt; folder where I keep a short note on how my vault’s folder structure is organized and why it is that way, along with my templates. This folder isn’t part of the main structure, but seeing it at the top irks me a little every time I open the Obsidian app.&lt;/p&gt;
&lt;p&gt;Another folder I have is &lt;code&gt;archive&lt;/code&gt;, which I want to be the last folder in my structure. Its only use is to keep retired notes that I don’t want to delete yet.&lt;/p&gt;
&lt;p&gt;Overall, here’s the structure I have in mind:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;inbox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;notes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;sources&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;blog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;projects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;journal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;writing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;archive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;... any other folder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;I have written why I organize my vault this way in &lt;a href=&quot;https://amanhimself.dev/blog/minimal-obsidian-vault-structure/&quot;&gt;A minimal Obsidian vault structure that sticks&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And the current structure of my vault looks like this:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/obsidian/folder-sort-1.png&quot; alt=&quot;Obsidian file explorer showing folders sorted alphabetically&quot; class=&quot;w-2/3 sm:w-1/3 mx-auto&quot;&gt;
&lt;p&gt;The fix is to use the &lt;a href=&quot;https://github.com/SebastianMC/obsidian-custom-sort&quot;&gt;Custom File Explorer sorting plugin&lt;/a&gt;, which has around 184k downloads, so it seems like a popular plugin. However, I came across it for the first time only recently, probably because I accepted a long time ago that there was no way to custom sort folders in Obsidian. In previous versions of my vault, I relied on emojis.&lt;/p&gt;
&lt;p&gt;To install it, open Settings, select Community plugins, and choose Browse. Search for “Custom File Explorer sorting”, install it, and enable it. The plugin adds an up-and-down arrows icon to the ribbon.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/obsidian/folder-sort-2.png&quot; alt=&quot;Up-and-down arrows icon added by the Custom File Explorer sorting plugin in the Obsidian ribbon&quot; class=&quot;max-w-1/4&quot;&gt;
&lt;p&gt;The icon is a toggle and it being grayed out means the plugin is suspended and the sidebar falls back to Obsidian’s default sorting, highlighted means the custom order is active.&lt;/p&gt;
&lt;p&gt;There is no drag-and-drop settings screen. Instead, the plugin reads the order from a regular note, which suits a vault that lives in git: the sidebar order becomes a versioned file like everything else. I created the note at &lt;code&gt;_meta/sortspec.md&lt;/code&gt; and declared the order inside a &lt;code&gt;sorting-spec&lt;/code&gt; frontmatter property:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;---&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;sorting-spec&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt; |-&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  target-folder: /&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  inbox&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  notes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  sources&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  blog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  projects&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  journal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  writing&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  archive&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;target-folder: /&lt;/code&gt; line scopes the rules to the vault root. The lines after it are folder names, top to bottom, in the exact order I want them in the sidebar. Any folder I leave out keeps the default alphabetical sorting and lines up below the listed ones. That covers the “any other folder” part of my list without any extra configuration.&lt;/p&gt;
&lt;p&gt;The Custom File Explorer sorting plugin has made a huge difference in organizing my notes inside my Obsidian vault.&lt;/p&gt;</content:encoded><category>obsidian</category></item><item><title>A minimal Obsidian vault structure that sticks</title><link>https://amanhimself.dev/blog/minimal-obsidian-vault-structure/</link><guid isPermaLink="true">https://amanhimself.dev/blog/minimal-obsidian-vault-structure/</guid><description>My Obsidian vault has 291 notes captured over the last three years. Some are long-form notes, prompts for tools like Claude Code, or quick captures from…</description><pubDate>Wed, 08 Jul 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;My Obsidian vault has 291 notes captured over the last three years. Some are long-form notes, prompts for tools like Claude Code, or quick captures from reading on the internet.&lt;/p&gt;
&lt;p&gt;When I created this vault, I started with 8 folders, but over time the number has grown to 16. I like to keep this vault minimal so it stays useful, but a lack of timely archiving has turned it into a disorganized mess.&lt;/p&gt;
&lt;p&gt;My quick capture system was a single file called &lt;code&gt;_inbox.md&lt;/code&gt;, which grew to 139 KB across 23 sections titled by week over six months. Each section held whatever I threw at it. As a system for thinking, it was a graveyard with good intentions.&lt;/p&gt;
&lt;p&gt;Last weekend, I spent a few hours organizing the vault before things got further out of hand. The first problem I tackled was getting the folder structure back to minimal and useful.&lt;/p&gt;
&lt;h2 id=&quot;existing-systems-arent-enough&quot;&gt;Existing systems aren’t enough&lt;/h2&gt;
&lt;p&gt;Over the last 5 years, I have tried keeping up with the PKM and Obsidian communities and have spent countless hours trying to understand systems like &lt;a href=&quot;https://studio-obsidian.com/obsidian-folder-structure/&quot;&gt;PARA, Zettelkasten, Johnny Decimal, or a hybrid of all three&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;After reading the comparisons and trying to apply them to whatever my notes looked like at the time, I ended up dissatisfied.&lt;/p&gt;
&lt;h2 id=&quot;folders-encode-lifecycle-links-encode-topics&quot;&gt;Folders encode lifecycle, links encode topics&lt;/h2&gt;
&lt;p&gt;One common pattern I took away from the existing systems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A folder should answer &lt;em&gt;what kind of note is this, and where should it live?&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;A folder should not answer &lt;em&gt;what topic is this about?&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Topics belong to links. A note about a technical documentation approach belongs to “docs testing” and “CI” at the same time, yet it can only sit in one folder.&lt;/p&gt;
&lt;p&gt;Forcing topics into folders creates friction: every capture begins with a filing decision, which gets in the way of capturing the information at all.&lt;/p&gt;
&lt;p&gt;The solution is to let links carry topics and meaning, and let folders group notes by their kind. &lt;a href=&quot;https://obsidian.rocks/how-i-use-folders-in-obsidian/&quot;&gt;Obsidian Rocks argues folders should manage workflow, not subject&lt;/a&gt;. Andy Matuschak goes further and argues &lt;a href=&quot;https://notes.andymatuschak.org/Prefer_associative_ontologies_to_hierarchical_taxonomies&quot;&gt;hierarchies fuzz conceptual edges because they force singular placement&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The honest counter-position is Steph Ango, Obsidian’s CEO, who &lt;a href=&quot;https://stephango.com/vault&quot;&gt;avoids folders almost entirely&lt;/a&gt; and organizes with properties and links alone. I respect all of the above creators’ methods, but avoiding folders altogether horrifies me.&lt;/p&gt;
&lt;p&gt;Not because I can’t, but because I use my Obsidian vault not only to capture information but also to do my long-form writing. The post you are reading started as a Markdown file in the vault named “Untitled 2” (&lt;em&gt;I couldn’t come up with a title at the time&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;From now on, I am going to call them lifecycle folders and treat them as the &lt;em&gt;lifecycle&lt;/em&gt; of my system. I consider them training wheels that might never come off.&lt;/p&gt;
&lt;h2 id=&quot;how-many-folders-is-too-many&quot;&gt;How many folders is too many?&lt;/h2&gt;
&lt;p&gt;This is my current entire structure, annotated with the rule that keeps each folder honest:&lt;/p&gt;


















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Folder&lt;/th&gt;&lt;th&gt;Holds&lt;/th&gt;&lt;th&gt;The rule&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;inbox/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Every capture&lt;/td&gt;&lt;td&gt;Emptied every Saturday&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;notes/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Atomic notes&lt;/td&gt;&lt;td&gt;Flat, no subfolders, titles are claims&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;sources/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Literature notes&lt;/td&gt;&lt;td&gt;One note per book, article, or talk&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;journal/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Daily and meeting notes&lt;/td&gt;&lt;td&gt;Sources to mine, never things to convert&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;projects/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Active work, drafts in progress&lt;/td&gt;&lt;td&gt;The only survivor from the old structure&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;blog/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Finished drafts&lt;/td&gt;&lt;td&gt;Final drafts for my blog, ready to publish&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;writing/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Personal writing&lt;/td&gt;&lt;td&gt;Long-form stays long-form&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;archive/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;Everything retired&lt;/td&gt;&lt;td&gt;Keep, don’t delete&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;I also created a &lt;code&gt;_meta/&lt;/code&gt; folder that contains my templates, plus a &lt;code&gt;README.md&lt;/code&gt; that holds the table above.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Why?&lt;/em&gt; As a reminder to myself of why the vault is structured this way and as context for tools like Claude Code when they access my notes from a terminal session.&lt;/p&gt;</content:encoded><category>obsidian</category></item><item><title>How I track my token maxxing</title><link>https://amanhimself.dev/blog/track-my-token-maxxing/</link><guid isPermaLink="true">https://amanhimself.dev/blog/track-my-token-maxxing/</guid><description>Back in February 2026, I wrote two posts about how I am tracking Codex CLI and Claude Code token usage.</description><pubDate>Sat, 30 May 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Back in February 2026, I wrote two posts about how I am tracking &lt;a href=&quot;https://amanhimself.dev/blog/codex-tokens-usage/&quot;&gt;Codex CLI&lt;/a&gt; and &lt;a href=&quot;https://amanhimself.dev/blog/claude-code-tokens-usage/&quot;&gt;Claude Code&lt;/a&gt; token usage. During that time, I used both CLI agent tools for work and personal projects.&lt;/p&gt;
&lt;p&gt;Both posts used a tool called &lt;code&gt;ccusage&lt;/code&gt; and its variant (at that time), &lt;code&gt;@ccusage/codex&lt;/code&gt;. &lt;a href=&quot;https://github.com/ryoppippi/ccusage&quot;&gt;&lt;code&gt;ccusage&lt;/code&gt; is created by &lt;code&gt;ryoppippi&lt;/code&gt;&lt;/a&gt; and is a popular command-line tool to analyze coding agent token usage and costs from local data that lives in your Claude or Codex sessions. It also support other &lt;a href=&quot;https://github.com/ryoppippi/ccusage#supported-sources&quot;&gt;CLI agents&lt;/a&gt; and its latest version provides daily, weekly, monthly, or session usage stats.&lt;/p&gt;
&lt;p&gt;It’s latest version also allows seeing the combined usage stats from Claude and Codex. All I need to do is run the following command:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;bunx ccusage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And the output would be:&lt;/p&gt;

















































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Agent&lt;/th&gt;&lt;th&gt;Models&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Input&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Output&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cache Create&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cache Read&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Total Tokens&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cost (USD)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2026-05-30&lt;/td&gt;&lt;td&gt;All&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;407.2K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;334.5K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;933.6K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;17.3M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;18.9M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$33.55&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Claude&lt;/td&gt;&lt;td&gt;opus-4-8&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;71.5K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;305.4K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;933.6K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;11.0M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;12.3M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$19.32&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Codex&lt;/td&gt;&lt;td&gt;gpt-5.5&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;335.7K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;29.1K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;0&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;6.3M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;6.6M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$14.23&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Recently, I found about &lt;a href=&quot;https://github.com/junhoyeo/tokscale&quot;&gt;&lt;code&gt;tokscale&lt;/code&gt;, which is created by &lt;code&gt;junhoyeo&lt;/code&gt;&lt;/a&gt;. It pulled me in from the first use because it provides more insights with a heatmap and daily session usage in a single dashboard and I don’t have to remember different command-line options.&lt;/p&gt;
&lt;p&gt;The default &lt;code&gt;bunx tokscale&lt;/code&gt; opens an interactive TUI where you can navigate between Tokens per day/hour view, Models, Stats, and per agent.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/token-01.png&quot; alt=&quot;tokscale TUI showing total tokens and cost per model&quot; width=&quot;800&quot;&gt;
&lt;p&gt;The above is my favorite screen from the TUI because it clearly allows me to see the total tokens and cost estimation summaries for each model I have used on my machine since December 2025.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tokscale&lt;/code&gt; also comes with a &lt;code&gt;--light&lt;/code&gt; version, which allows viewing the above information quickly.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/token-02.png&quot; alt=&quot;tokscale light output with the same token and cost summary&quot; width=&quot;800&quot;&gt;
&lt;p&gt;Since those two posts back in February, checking this has quietly become a habit. &lt;code&gt;ccusage&lt;/code&gt; is still my quick check when I just want a number in the terminal, and &lt;code&gt;tokscale&lt;/code&gt; is the one I open when I want to look around, mostly for that model summary screen and the heatmap.&lt;/p&gt;
&lt;p&gt;I do feel like I am in early days of using these agent tools and there is no way I am bothered about the pricing and usage. I hardly ever hit my 5 hour session limit with my current subscriptions. Maybe I am not really &lt;em&gt;token maxxing&lt;/em&gt;. However, I do like that both tools are useful tool in what they do and provide me an insight on how much tokens consumed for a given day or session. I am sure as I use these tools more, I will find more insights and patterns in my usage. If you are using these agent tools, I highly recommend checking out both &lt;code&gt;ccusage&lt;/code&gt; and &lt;code&gt;tokscale&lt;/code&gt; to get a better understanding of your token usage.&lt;/p&gt;</content:encoded><category>cli</category><category>claude-code</category><category>codex</category></item><item><title>Moving away from Oh My Zsh (OMZ)</title><link>https://amanhimself.dev/blog/moving-away-from-oh-my-zsh/</link><guid isPermaLink="true">https://amanhimself.dev/blog/moving-away-from-oh-my-zsh/</guid><description>I&apos;ve been running Oh My Zsh (OMZ) on every workstation I&apos;ve ever owned. It was one of the first things I&apos;d install when setting up a new machine or cleanly…</description><pubDate>Thu, 14 May 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;I’ve been running Oh My Zsh (OMZ) on every workstation I’ve ever owned. It was one of the first things I’d install when setting up a new machine or cleanly updating an existing one. For years, I’ve blindly copied my workstation configuration from one Macbook to the next, without questioning whether I still needed something in the current day and age, or whether it had quietly been replaced by something better.&lt;/p&gt;
&lt;p&gt;The first time I wrote about my setup was in &lt;a href=&quot;https://amanhimself.dev/blog/setup-macbook-m1/&quot;&gt;2023&lt;/a&gt; and since then I’ve written about it every year: &lt;a href=&quot;https://amanhimself.dev/blog/macbook-setup-2024/&quot;&gt;2024 and 2025&lt;/a&gt; and recently in &lt;a href=&quot;https://amanhimself.dev/blog/mac-setup/&quot;&gt;2026&lt;/a&gt;. The last post is a result of me taking my time and making conscious decisions. Somewhere in that process, I realized that my setup and especially my terminal setup, was bloated.&lt;/p&gt;
&lt;p&gt;That realization has been growing strong over a period of last few months. I didn’t have the time to act on. But a few weeks back, I reconfigured my Starship prompt and &lt;a href=&quot;https://amanhimself.dev/blog/my-starship-prompt-setup/&quot;&gt;wrote about it&lt;/a&gt;. During the process, I opened up &lt;code&gt;.zshrc&lt;/code&gt; to do some cleanup and that is when I noticed I had quietly stopped using Oh My Zsh a while ago, and don’t need it anymore.&lt;/p&gt;
&lt;p&gt;Started in 2009 by Robby Russell as a &lt;a href=&quot;https://www.freecodecamp.org/news/d-oh-my-zsh-af99ca54212c/&quot;&gt;personal config&lt;/a&gt;, OMZ solves a real problem when Robby was asked by his coworkers on setting up &lt;code&gt;zsh&lt;/code&gt; on their machines. Rather than walking them through the same commands every time, he packaged his dotfiles into a single install.&lt;/p&gt;
&lt;p&gt;That is the exact problem OMZ has solved for me. Especially, the &lt;code&gt;plugins&lt;/code&gt; were my favorite feature even though I’ve narrowed it down to only four plugins:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;plugins&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;(&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;    git&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;    node&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;    vscode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;    direnv&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;ZSH_THEME=&quot;robbyrussell&quot;&lt;/code&gt; was commented out. Had been for over a year, since Starship started running my prompt. Auto-updates were disabled. zsh-syntax-highlighting was being sourced manually, with its full path written by hand, sitting outside the plugin system entirely&lt;/p&gt;
&lt;p&gt;However, now when I am writing it, I am realizing it I never took its advantage to full. Primarily, because adding more plugins would slow down the shell startup. I use iTerm2 and recently started using Ghostty as well, and the shell startup was noticeably slow in both. I haven’t done the profiling with &lt;code&gt;zprof&lt;/code&gt; but a friend of mine, Scott Spence has written about it here &lt;a href=&quot;https://scottspence.com/posts/speeding-up-my-zsh-shell&quot;&gt;Speeding Up My ZSH Shell&lt;/a&gt;. &lt;em&gt;Go read it if you are interested about the details and you might end up listening to the tips Scott has to share.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;After replacing Oh My Zsh framework, here’s how my &lt;code&gt;.zshrc&lt;/code&gt; file looks like. It has more alias that I use daily and less configuration:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; PATH&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;/opt/homebrew/bin:$PATH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Required for Expo and React Native local app development&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; JAVA_HOME&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Android specific paths after installing Android Studio&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; ANDROID_HOME&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;$HOME/Library/Android/sdk&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; PATH&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;$PATH:$ANDROID_HOME/emulator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; PATH&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;$PATH:$ANDROID_HOME/platform-tools&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# To stop brew from auto updating&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; HOMEBREW_NO_AUTO_UPDATE&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## Compilation flags&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; ARCHFLAGS&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;-arch x86_64&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## Enable AUTO_CD to automatically change to a directory when you `cd` into it&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; AUTO_CD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## Opening various directory&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; g&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;cd $HOME/github/&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; n&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;cd $HOME/github/notes/&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## Show touch on iOS simulator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; showtouch&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;defaults write com.apple.iphonesimulator ShowSingleTouches 1&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## Hide touch on iOS simulator&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; hidetouch&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;defaults write com.apple.iphonesimulator ShowSingleTouches 0&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## Show/Hide hidden files in Finder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; show&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;defaults write com.apple.finder AppleShowAllFiles -bool true &amp;#x26;&amp;#x26; killall Finder&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; hide&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;defaults write com.apple.finder AppleShowAllFiles -bool false &amp;#x26;&amp;#x26; killall Finder&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; killds&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;find . -type f -name &apos;*.DS_Store&apos; -ls -delete&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; kdock&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;killall Dock&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;## git shorthands&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gall&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git add .&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; ga&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git add&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gc&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git commit -m&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gs&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git status&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gpush&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git push -u origin&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; glog&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git log --oneline --graph --decorate --color&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gap&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git add -p&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gck&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git checkout&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gb&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git branch&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; gslog&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;git shortlog -s&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/opt/homebrew/bin/brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; shellenv&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Starship&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;starship&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# mise&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; activate&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Enable syntax highlighting&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --prefix&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;OMZ solved a real problem for me for a long time. It collected the good parts and gave me a single install command. For its time, it was a genuinely useful piece of software, and it deserves credit for the role it played in making &lt;code&gt;zsh&lt;/code&gt; approachable when I had no idea what I was doing.&lt;/p&gt;</content:encoded><category>macos</category></item><item><title>New blog theme again</title><link>https://amanhimself.dev/blog/new-blog-theme-again/</link><guid isPermaLink="true">https://amanhimself.dev/blog/new-blog-theme-again/</guid><description>In January 2025, I shared an update on updating the blog theme and code block themes.</description><pubDate>Sat, 09 May 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;In January 2025, I shared an &lt;a href=&quot;https://amanhimself.dev/blog/new-blog-theme-and-colors/&quot;&gt;update&lt;/a&gt; on updating the blog theme and code block themes. The Astro setup that builds this blog uses Shiki, which makes it easier to switch between any supported code theme.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;What about the blog’s primary and accent colors?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In the age of LLMs, it has to be quick update right? Yes, I used Claude Design screenshots to the previous version of this blog and with some instructions like using a specific saturated blue color. It iterated over four themes.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/new-blog-theme-again/01.png&quot; alt=&quot;Claude Design theme iteration&quot; class=&quot;sm:w-3/3 mx-auto&quot;&gt;
&lt;p&gt;I have to say Claude Design is impressive. It read my old-blog screenshots like a reference, and let me steer through chat, inline comments, and adjustment sliders it generated on the fly for whatever I was tweaking. When I was done and got the idea for which direction to pick, I came back to the Claude Code in the terminal window, who was waiting for me. I took those designs, told Claude Code to tone down a bit and ended up with the current theme of the blog.&lt;/p&gt;
&lt;p&gt;When using Claude Design, make sure to keep an eye on its usage limit. It burns out fast since it likes to overdo the initial instructions or fails to follow the exact prompt.&lt;/p&gt;
&lt;p&gt;Here’s one example where I let it run &lt;em&gt;wild&lt;/em&gt; and it ended-up turning my blog into a complete magazine:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/new-blog-theme-again/02.png&quot; alt=&quot;Claude Design magazine theme&quot; class=&quot;sm:w-2/3 mx-auto&quot;&gt;
&lt;p&gt;And then, into a newspaper:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/new-blog-theme-again/03.png&quot; alt=&quot;Claude Design newspaper theme&quot; class=&quot;sm:w-2/3 mx-auto&quot;&gt;
&lt;p&gt;Updating your blog’s theme might sound trivial with tools like Claude Design to come up with something to your liking and Claude Code to implement it your codebase. What important now is where you draw the line.&lt;/p&gt;</content:encoded><category>blogging</category><category>claude-code</category></item><item><title>Week notes 17</title><link>https://amanhimself.dev/blog/week-notes-17/</link><guid isPermaLink="true">https://amanhimself.dev/blog/week-notes-17/</guid><description>A heavy week on the docs side. Two things shipped that I had been chewing on for a while, and a couple of small skills came together.</description><pubDate>Sun, 03 May 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;A heavy week on the docs side. Two things shipped that I had been chewing on for a while, and a couple of small skills came together. Some reading and writing on the side too.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🧪 Built a &lt;code&gt;docs-ja-translator&lt;/code&gt; skill and landed the Japanese tutorial pilot at work. The skill takes an existing MDX document from Expo tutorial, mirrors it under &lt;code&gt;pages/ja/&amp;#x3C;same-path&gt;&lt;/code&gt;, preserves frontmatter, JSX tags, code blocks, and link URLs, and translates the prose, headings, link text, and string-valued props into Japanese.&lt;/li&gt;
&lt;li&gt;💼 Shipped per-page Markdown serving on docs.expo.dev (&lt;code&gt;/page.md&lt;/code&gt; sibling paths), implemented as a Cloudflare Worker rewrite so it works in previews too. I documented the worker behavior in the docs README for AI agents.&lt;/li&gt;
&lt;li&gt;💻 Switched the light-mode code theme on this blog to GitHub Light so it matches the rest of the page.&lt;/li&gt;
&lt;li&gt;📚 Read Kepano’s &lt;a href=&quot;https://stephango.com/vault&quot;&gt;stephango.com/vault&lt;/a&gt; post and compared his ideas to my vault’s structure. Most of what I keep in the vault are personal notes, blog post drafts, projects and blog post ideas that are work in progress, some attachments, and work meeting notes. Recently, I have been using the vault as context management system for Claude, especially when I am exploring some idea or skill generation.&lt;/li&gt;
&lt;li&gt;🔗 Podcasts
&lt;ul&gt;
&lt;li&gt;Listened to
&lt;a href=&quot;https://www.youtube.com/watch?v=d4wGcjvXJh0&quot;&gt;Agent-Harness.ipynb* with Vincent Warmerdam&lt;/a&gt; and found the discussion around keeping a physical notebook for jotting down thoughts and creating plans on how to steer an agentic task interesting.&lt;/li&gt;
&lt;li&gt;Listened &lt;a href=&quot;https://www.youtube.com/watch?v=L18_7I2A8h4&quot;&gt;How valuable are agent skills? Conversation with Larah Vasquez and Fabrizio Ferri-Benedetti&lt;/a&gt; is an interesting discussion on the value of agent skills. I was also curious to hear on how other technical writers/docs engineers are creating/using skills with agentic tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>notes</category></item><item><title>Playwright to Chrome</title><link>https://amanhimself.dev/blog/playwright-to-chrome/</link><guid isPermaLink="true">https://amanhimself.dev/blog/playwright-to-chrome/</guid><description>Back in January, I had just started using Codex CLI and Claude Code. I was spending more time with Codex CLI and ended up creating a small Expo and React…</description><pubDate>Sun, 19 Apr 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Back in January, I had just started using Codex CLI and Claude Code. I was spending more time with Codex CLI and ended up creating a small Expo and React Native app as well. As I was learning how to use these tools, I wrote about using Codex CLI with Playwright for browser automation tasks in &lt;a href=&quot;https://amanhimself.dev/blog/first-few-days-with-codex-cli/&quot;&gt;First Few Days with Codex CLI&lt;/a&gt; post.&lt;/p&gt;
&lt;p&gt;The approach I discussed initially, worked for me for some tasks by setting up Playwright MCP and managing its browser extension. However, the approach isn’t flawless. Any time, Playwright MCP gets an update or its browser extension does, each requires to make a new connection to exchange token between them. The &lt;em&gt;token&lt;/em&gt; mechanism is what Playwright MCP and its Chrome extension use to connect Codex CLI or Claude Code.&lt;/p&gt;
&lt;p&gt;At the time of writing this post, Claude Code has already announced a beta feature called &lt;code&gt;/chrome&lt;/code&gt; and have released their Chrome extension. This changed a few of my workflows. Instead of orchestrating a headless browser extension and MCP through Playwright, Claude Code now uses its own tools which I had to authorize only once when I enabled &lt;code&gt;/chrome&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Another cool thing about Claude Code’s approach I have found so far is that I don’t have to maintain or manually update Claude Code or Claude’s browser extension and go through the process of setting them up again.&lt;/p&gt;</content:encoded><category>claude-code</category></item><item><title>My Mac setup</title><link>https://amanhimself.dev/blog/mac-setup/</link><guid isPermaLink="true">https://amanhimself.dev/blog/mac-setup/</guid><description>A guide on setting up Apple Mac for daily work.</description><pubDate>Sat, 18 Apr 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;In past I have documented my entire setup when I switched to MacBook Pro with Apple Silicon in December, 2020. Since then I have also &lt;a href=&quot;https://amanhimself.dev/blog/macbook-setup-2024/&quot;&gt;documented my setups on different MacBooks with adjustments and changes&lt;/a&gt;. This guide is mostly about my latest setup, which includes using tools from AI and some new tools on my Mac.&lt;/p&gt;
&lt;h2 id=&quot;initial-setup&quot;&gt;Initial setup&lt;/h2&gt;
&lt;p&gt;First few things I like to set up or configure are the system settings and install essential tools that are required for my daily workflow.&lt;/p&gt;
&lt;h2 id=&quot;updating-macos&quot;&gt;Updating macOS&lt;/h2&gt;
&lt;p&gt;As usual after logging in, I have to ensure the macOS is on the latest version. This time I decided to upgrade it to macOS Tahoe.&lt;/p&gt;
&lt;h2 id=&quot;xcode-and-command-line-tools&quot;&gt;Xcode and Command Line Tools&lt;/h2&gt;
&lt;p&gt;The following tools must be installed before proceeding with the rest of the guide:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Xcode&lt;/strong&gt;: Open App Store, install &lt;a href=&quot;https://apps.apple.com/in/app/xcode/id497799835?mt=12&quot;&gt;Xcode&lt;/a&gt;. It’s a large download and will take awhile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal&lt;/strong&gt;: iTerm2 as the primary terminal app.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After the Xcode installation finishes, install &lt;strong&gt;Command Line Tools&lt;/strong&gt;. Open the terminal app and run:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;xcode-select --install &amp;#x26;&amp;#x26; sudo xcodebuild -license&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Let’s verify that Command Line Tools have been installed properly and install iOS simulators (only required if you are into mobile app development):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Verify Command Line Tools&lt;/strong&gt; installation: Open Xcode from the menu bar, go to &lt;strong&gt;Xcode &gt; Preferences &gt; Location&lt;/strong&gt;, and make sure that &lt;strong&gt;Command Line Tools&lt;/strong&gt; point towards the current Xcode app.&lt;/li&gt;
&lt;li&gt;When opening Xcode for the first time, you’ll be prompted to &lt;strong&gt;select platforms for development&lt;/strong&gt;. Select iOS 26.2 and click &lt;strong&gt;Download and install&lt;/strong&gt; to download iOS simulators.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The initial setup is complete! You’ve now reached a point where you can proceed further.&lt;/p&gt;
&lt;h2 id=&quot;fix-the-default-macos-settings&quot;&gt;Fix the default macOS settings&lt;/h2&gt;
&lt;p&gt;In my previous setup guides, I went through each setting manually in the System Settings app. This time, I’m using &lt;code&gt;defaults write&lt;/code&gt; commands in the terminal to apply them all at once.&lt;/p&gt;
&lt;h3 id=&quot;dock&quot;&gt;Dock&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Automatically hide and show the Dock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; autohide&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt; # false for other devices&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable suggested and recent apps in Dock&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; show-recents&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Set Dock size to 30%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; tilesize&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 36&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Enable magnification and set to ~50%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; magnification&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; largesize&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 54&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable automatically rearrange Spaces&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; mru-spaces&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable click wallpaper to reveal Desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.WindowManager&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; EnableStandardClickToShowDesktop&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable Widgets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.WindowManager&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; StandardHideWidgets&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable all hot corners&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; wvous-tl-corner&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; wvous-tr-corner&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; wvous-bl-corner&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.dock&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; wvous-br-corner&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Restart Dock to apply changes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;killall&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Dock&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;finder&quot;&gt;Finder&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Show hidden files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; AppleShowAllFiles&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Show Path Bar and Status Bar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ShowPathbar&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ShowStatusBar&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Show filename extensions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; AppleShowAllExtensions&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Set new Finder windows to open in Downloads&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NewWindowTarget&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -string&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;PfLo&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NewWindowTargetPath&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -string&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;file://${HOME}/Downloads/&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable .DS_Store files on network and USB volumes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.desktopservices&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; DSDontWriteNetworkStores&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.desktopservices&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; DSDontWriteUSBStores&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Show hard disks on desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ShowHardDrivesOnDesktop&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Hide CDs, DVDs, and iPods on desktop&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.finder&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ShowRemovableMediaOnDesktop&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Show Library folder&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;chflags&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; nohidden&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Restart Finder to apply changes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;killall&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Finder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;keyboard-and-input&quot;&gt;Keyboard and input&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Key repeat rate: Fast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; KeyRepeat&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Delay until repeat: Short&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; InitialKeyRepeat&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable autocorrect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSAutomaticSpellingCorrectionEnabled&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;trackpad&quot;&gt;Trackpad&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Enable tap to click&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.AppleMultitouchTrackpad&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Clicking&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Set tracking speed (0.0 to 3.0, default is 1.0)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.trackpad.scaling&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -float&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 2.5&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable natural scrolling&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.swipescrolldirection&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable force click and haptic feedback&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.AppleMultitouchTrackpad&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ForceSuppressed&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Enable secondary click with bottom right corner&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.AppleMultitouchTrackpad&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; TrackpadCornerSecondaryClick&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 2&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.AppleMultitouchTrackpad&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; TrackpadRightClick&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable Look up &amp;#x26; data detectors&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.AppleMultitouchTrackpad&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; TrackpadThreeFingerTapGesture&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable swipe between pages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; NSGlobalDomain&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; AppleEnableSwipeNavigateWithScrolls&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;lock-screen-and-battery&quot;&gt;Lock Screen and Battery&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Set screen saver to start after 1 hour (in seconds)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -currentHost&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.screensaver&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; idleTime&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -int&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 3600&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Set display off on battery after 3 hours (in minutes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; pmset&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; displaysleep&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 180&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Set display off on power adapter after 3 hours (in minutes)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; pmset&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; displaysleep&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 180&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable slightly dim the display on battery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; pmset&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -b&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; lessbright&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;other&quot;&gt;Other&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Disable Siri&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;defaults&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; write&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; com.apple.assistant.support&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Assistant Enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -bool&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A few settings still need to be changed manually in System Settings:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Privacy &amp;#x26; Security &gt; FileVault&lt;/strong&gt;: Turn on&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spotlight&lt;/strong&gt;: Disable all search categories except Apps, Files, Folders, Menu Items, Calculator, Conversion, Dictionary, and System Settings&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trackpad &gt; Point &amp;#x26; Click&lt;/strong&gt;: Set click to Medium&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Finder &gt; Tags&lt;/strong&gt;: Switch off all&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install-homebrew-macos-package-manager&quot;&gt;Install Homebrew: macOS package manager&lt;/h2&gt;
&lt;p&gt;An important step in installing development-related tools is using Homebrew, a package manager I’ve trusted for nearly eight years.&lt;/p&gt;
&lt;p&gt;To install Homebrew, open iTerm and run the command:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/bin/bash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;curl&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -fsSL&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After installing, add the Homebrew to the &lt;code&gt;PATH&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt; &gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; /Users/username/.zshrc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/opt/homebrew/bin/brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; shellenv&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you don’t have a &lt;code&gt;.zshrc&lt;/code&gt;, create one at &lt;code&gt;/Users/username/&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Then, add the following to &lt;code&gt;.zshrc&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; PATH&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;/opt/homebrew/bin:$PATH&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;install-apps-from-homebrew-bundle&quot;&gt;Install apps from Homebrew bundle&lt;/h2&gt;
&lt;p&gt;I keep a list of must install apps in a Homebrew bundle inside my dotfiles repo. &lt;a href=&quot;https://github.com/amandeepmittal/dotfiles/blob/master/brewfile.sh&quot;&gt;Download the file&lt;/a&gt; from the repo and run the following command to install the apps:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; bundle&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --file=brewfile.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Git is already installed as part of Xcode Command Line Tools. However, I prefer to install the latest version from &lt;code&gt;brew&lt;/code&gt; and avoid using the outdated version installed by Apple. After installing &lt;code&gt;git&lt;/code&gt;, run &lt;code&gt;git --version&lt;/code&gt; in a new terminal window. If you run this command in the same terminal window, it will show the Apple Git version.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;git-global-configurations&quot;&gt;Git global configurations&lt;/h3&gt;
&lt;p&gt;After installing Git, apply the following global configurations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Set up the default branch for any new project to &lt;code&gt;main&lt;/code&gt; (This was introduced in Git version &lt;code&gt;2.28&lt;/code&gt;):&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init.defaultBranch&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; main&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Enable colors in command output:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; color.uni&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; auto&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Set up real name and email:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; user.name&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Real name&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; user.email&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; email@domain.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To check or verify the global git config, run:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;configure-zshrc&quot;&gt;Configure .zshrc&lt;/h2&gt;
&lt;p&gt;In previous setup guides, I used Oh My Zsh as a shell framework. This time, I’m skipping it entirely. I already use Starship for my prompt, so Oh My Zsh was just adding shell startup lag for features I wasn’t using. The only plugin I need is syntax highlighting, which can be installed directly via brew.&lt;/p&gt;
&lt;p&gt;Install zsh-syntax-highlighting:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh-syntax-highlighting&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The key additions to &lt;code&gt;.zshrc&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Auto cd into directories without typing cd&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;setopt&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; AUTO_CD&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Mise (version manager for Node.js, bun, pnpm)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; activate&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Starship prompt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;starship&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Syntax highlighting (must be last)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; $(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --prefix&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Copy the full &lt;code&gt;.zshrc&lt;/code&gt; from &lt;a href=&quot;https://github.com/amandeepmittal/dotfiles&quot;&gt;&lt;code&gt;dotfiles&lt;/code&gt;&lt;/a&gt; to &lt;code&gt;~/.zshrc&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;configure-starship-prompt&quot;&gt;Configure Starship prompt&lt;/h2&gt;
&lt;p&gt;I have been using Starship as my command line prompt for a while now. It’s fast, configurable, and works across shells.&lt;/p&gt;
&lt;p&gt;Since Starship is already installed from the brew bundle step, copy &lt;code&gt;starship.toml&lt;/code&gt; from the &lt;a href=&quot;https://github.com/amandeepmittal/dotfiles&quot;&gt;&lt;code&gt;dotfiles&lt;/code&gt;&lt;/a&gt; repo to &lt;code&gt;~/.config/starship.toml&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;configure-iterm&quot;&gt;Configure iTerm&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Open iTerm &gt; Preferences &gt; Profiles and Import &lt;code&gt;iterm-default.json&lt;/code&gt; from &lt;a href=&quot;https://github.com/amandeepmittal/dotfiles&quot;&gt;&lt;code&gt;dotfiles&lt;/code&gt;&lt;/a&gt; repo.&lt;/li&gt;
&lt;li&gt;Profiles &gt; Terminal &gt; Show mark indicators &gt; &lt;strong&gt;Disable&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Text &gt; Font, select &lt;strong&gt;JetBrainsMono Font&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Text &gt; Non-ASCII Font, select &lt;strong&gt;JetBrainsMono Nerd Font&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Appearance &gt; General &gt; Theme &gt; set to &lt;strong&gt;Minimal&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;General &gt; Selection &gt; Clicking on command selects it to restrict Find and Filter &gt; &lt;strong&gt;Disable&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;setup-a-primary-web-browser&quot;&gt;Setup a primary web browser&lt;/h2&gt;
&lt;p&gt;By now, you will need a primary web browser to set up and do some things further.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chrome for work
&lt;ul&gt;
&lt;li&gt;Log in to work email
&lt;ul&gt;
&lt;li&gt;Extensions: 1 Password, Cuik SEO, and Harper&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Chrome Canary for personal
&lt;ul&gt;
&lt;li&gt;Log in to personal email
&lt;ul&gt;
&lt;li&gt;Extensions: 1 Password, Cuik SEO, and Harper&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;shared-configuration-or-steps-required-in-both-browsers&quot;&gt;Shared configuration or steps required in both browsers&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Create a Google meet, and share and record the screen. This will get all required permissions to be working, and you don’t have to restart the browser in an actual meeting.&lt;/li&gt;
&lt;li&gt;Log in to GitHub, Gmail, and Calendar.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;github-setup-and-configuration&quot;&gt;GitHub setup and configuration&lt;/h2&gt;
&lt;p&gt;To configure an account on GitHub.com and use an SSH key, follow the steps from GitHub documentation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key&quot;&gt;Generate a new SSH key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#adding-your-ssh-key-to-the-ssh-agent&quot;&gt;Add SSH key to ssh-agent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account#adding-a-new-ssh-key-to-your-account&quot;&gt;Add new SSH key to GitHub account&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install-nodejs-bun-and-pnpm&quot;&gt;Install Node.js, bun, and pnpm&lt;/h2&gt;
&lt;p&gt;In previous setup guides, I used NVM (Node Version Manager) to install and manage Node.js versions. This time, I’m using &lt;a href=&quot;https://mise.jdx.dev/&quot;&gt;mise&lt;/a&gt;, a polyglot version manager written in Rust. It replaces nvm, pyenv, and similar tools with one consistent interface. It’s faster (no shell startup lag), auto-switches versions when you &lt;code&gt;cd&lt;/code&gt; into a project, and reads existing &lt;code&gt;.nvmrc&lt;/code&gt; files.&lt;/p&gt;
&lt;p&gt;Since mise is already installed from the brew bundle step, activate it in the shell:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;echo&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;eval &quot;$(mise activate zsh)&quot;&apos;&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt; &gt;&gt;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.zshrc&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;source&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.zshrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install Node.js, bun, and pnpm:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; use&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; node@lts&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; use&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; bun@latest&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; use&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --global&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; pnpm@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Verify the installations:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;node&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;bun&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;pnpm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;after-installing-nodejs&quot;&gt;After installing Node.js&lt;/h3&gt;
&lt;p&gt;Node.js comes with the default package manager &lt;strong&gt;npm&lt;/strong&gt;. Set defaults for it:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init-author-name&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;your name&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init-author-url&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;example.com&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; config&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; set&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init-license&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; MIT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Install global npm packages:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; i&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -g&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; eas-cli&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;useful-mise-commands&quot;&gt;Useful mise commands&lt;/h3&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Update Node.js to latest patch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; upgrade&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; node@22&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Install a different version for a specific project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; use&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; node@20&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# List installed tools&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ls&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# List available remote versions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;mise&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ls-remote&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; node&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;vs-code&quot;&gt;VS Code&lt;/h2&gt;
&lt;p&gt;My current setup supports JavaScript, TypeScript, Node.js, React, React Native, Expo, and documentation work.&lt;/p&gt;
&lt;h3 id=&quot;setup-vs-code-as-the-default-editor&quot;&gt;Setup VS Code as the default editor&lt;/h3&gt;
&lt;p&gt;After installing VS Code from the brew bundle step, open it and set up the &lt;code&gt;code&lt;/code&gt; command in PATH. Open the command palette (&lt;strong&gt;Cmd + Shift + P&lt;/strong&gt;) and search for &lt;strong&gt;Shell Command: Install ‘code’ command in PATH&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://amanhimself.dev/images/macbook-setup-shell.png&quot; alt=&quot;Installing code command in Path in VS Code&quot;&gt;&lt;/p&gt;
&lt;h3 id=&quot;settings&quot;&gt;Settings&lt;/h3&gt;
&lt;p&gt;Copy the &lt;code&gt;vscode_settings.jsonc&lt;/code&gt; from the &lt;a href=&quot;https://github.com/amandeepmittal/dotfiles&quot;&gt;&lt;code&gt;dotfiles&lt;/code&gt;&lt;/a&gt; repo to &lt;code&gt;~/Library/Application Support/Code/User/settings.json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here is what the settings file includes:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.tabSize&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 2&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;workbench.editor.tabSizing&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;shrink&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.cursorBlinking&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;phase&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.fontLigatures&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.wordWrap&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;on&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.cursorSmoothCaretAnimation&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;on&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.tabCompletion&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;on&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.formatOnPaste&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.formatOnSave&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;git.openRepositoryInParentFolders&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;always&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.semanticHighlighting.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.guides.bracketPairs&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.bracketPairColorization.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;files.trimTrailingWhitespace&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;readTime.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;readTime.fileTypes&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;markdown&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;plaintext&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;yaml&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;mdx&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;cSpell.language&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;en,en-US&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;cSpell.enabledFileTypes&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;markdown&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;mdx&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.inlineSuggest.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.minimap.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.fontSize&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 13.5&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;terminal.integrated.fontFamily&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;JetBrainsMono Nerd Font&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.fontFamily&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;JetBrains Mono&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.fontWeight&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;normal&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[markdown]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.quickSuggestions&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;      &quot;comments&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;on&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;      &quot;strings&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;on&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;      &quot;other&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;on&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[json]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[javascript]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[javascriptreact]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[typescript]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[typescriptreact]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[jsonc]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;vscode.json-language-features&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;[html]&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;editor.defaultFormatter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;esbenp.prettier-vscode&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;eslint.validate&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;    &quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;    &quot;javascriptreact&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;    &quot;typescript&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;    &quot;typescriptreact&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;    &quot;markdown&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  ]&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;files.associations&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;.env*&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;dotenv&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;mdx.validate.validateFileLinks&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;ignore&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;workbench.editor.enablePreview&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;explorer.confirmDelete&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.renderLineHighlight&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;line&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;githubPullRequests.pullBranch&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;never&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;editor.linkedEditing&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;workbench.startupEditor&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;none&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;update.mode&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;manual&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;telemetry.telemetryLevel&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;crash&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;redhat.telemetry.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;errorLens.enabledDiagnosticLevels&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;error&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;warning&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;extensions.ignoreRecommendations&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;window.commandCenter&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;explorer.confirmDragAndDrop&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;claudeCode.preferredLocation&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;panel&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;github.copilot.nextEditSuggestions.enabled&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;github.copilot.enable&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;*&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;plaintext&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;markdown&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;scminput&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; false&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;workbench.colorTheme&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Light 2026&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;extensions&quot;&gt;Extensions&lt;/h3&gt;
&lt;p&gt;Install all extensions with the following commands:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; anthropic.claude-code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; astro-build.astro-vscode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; atishay-jain.all-autocomplete&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; bradlc.vscode-tailwindcss&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; christian-kohler.npm-intellisense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; dbaeumer.vscode-eslint&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; eamodio.gitlens&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; esbenp.prettier-vscode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; expo.vscode-expo-tools&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; formulahendry.auto-close-tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; formulahendry.auto-complete-tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; formulahendry.auto-rename-tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; github.copilot-chat&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; github.vscode-pull-request-github&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; johnpapa.read-time&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; mathiasfrohlich.kotlin&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; naumovs.color-highlight&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; oderwat.indent-rainbow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; openai.chatgpt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; orta.vscode-ios-common-files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; oxc.oxc-vscode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; redhat.vscode-yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; riussi.code-stats-vscode&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; streetsidesoftware.code-spell-checker&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; tamasfe.even-better-toml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; unifiedjs.vscode-mdx&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; usernamehw.errorlens&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; vincaslt.highlight-matching-tag&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; wakatime.vscode-wakatime&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This list of extensions can be generated by running &lt;code&gt;code --list-extensions&lt;/code&gt; in the terminal.&lt;/p&gt;
&lt;h2 id=&quot;ai-tools-and-services&quot;&gt;AI tools and services&lt;/h2&gt;
&lt;p&gt;Currently, I am using the following tools from different providers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Codex CLI&lt;/li&gt;
&lt;li&gt;Codex desktop app&lt;/li&gt;
&lt;li&gt;LM Studio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I keep syncing my personal skills for Claude Code and Codex CLI from &lt;code&gt;dotskills&lt;/code&gt; repository. To set that up, open the terminal window, navigate to the &lt;code&gt;dotskills&lt;/code&gt; directory, and run:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;bash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; setup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap up&lt;/h2&gt;
&lt;p&gt;These configurations and tools are what I am currently using on my Mac. It is a work in progress as I expect to make adjustments and changes to it over time.&lt;/p&gt;</content:encoded><category>macos</category></item><item><title>Week notes 16</title><link>https://amanhimself.dev/blog/week-notes-16/</link><guid isPermaLink="true">https://amanhimself.dev/blog/week-notes-16/</guid><description>Mixed week. A small side-project release, a couple of satisfying wins on the work side, and a lot of late-night ideas I want to act on coming week.</description><pubDate>Sun, 12 Apr 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Mixed week. A small side-project release, a couple of satisfying wins on the work side, and a lot of late-night ideas I want to act on coming week.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🚀 Shipped &lt;a href=&quot;https://github.com/amandeepmittal/skillsbar&quot;&gt;SkillsBar&lt;/a&gt; v1.7.0. The big addition is Codex plugin support and adding custom collections view where one can organize their skills based on a theme or topic or work repository. Codex plugins now show up under User Skills in the Codex tab, alongside the Claude Code skills SkillsBar already tracked. Also fixed a quiet bug where the Usage Stats screen was silently dropping historical data beyond four weeks. This is a major update, and I used GPT 5.4 to add more tweaks apart from doing this major update.&lt;/li&gt;
&lt;li&gt;💼 One Vale win on the Expo docs side. First, &lt;code&gt;lint-prose&lt;/code&gt; had quietly drifted from around 6 seconds back up to 13. Turned out the &lt;code&gt;out/&lt;/code&gt; directory was not actually being excluded the way I thought, because &lt;code&gt;.vale.ini&lt;/code&gt; exclusions run after Vale walks the tree. Patched the script to use CLI glob negation and the time dropped back down. Second, got the Vale install script checksum verification. Now Vale can be installed locally by any member of the team and have 5 seconds reduction when running &lt;code&gt;lint-prose&lt;/code&gt; command.&lt;/li&gt;
&lt;li&gt;📝 Published a post on &lt;a href=&quot;https://amanhimself.dev/blog/replacing-rm-with-trash-in-claude-code/&quot;&gt;Replacing rm command with trash in Claude Code&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;🧪 Started looking into AI evals and automation for documentation. There’s so much ground to cover.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>notes</category></item><item><title>Replacing rm command with trash in Claude Code</title><link>https://amanhimself.dev/blog/replacing-rm-with-trash-in-claude-code/</link><guid isPermaLink="true">https://amanhimself.dev/blog/replacing-rm-with-trash-in-claude-code/</guid><description>The fear of losing a file is a big deal using Claude Code since it has access to bash tools and can run bash commands on its own.</description><pubDate>Sat, 11 Apr 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;The fear of losing a file is a big deal using Claude Code since it has access to bash tools and can run bash commands on its own. This is possible whenever &lt;code&gt;--dangerously-skip-permissions&lt;/code&gt; is enabled or I have accepted edits inside a particular session.&lt;/p&gt;
&lt;p&gt;A workaround for this can be to skip running &lt;code&gt;rm&lt;/code&gt; command inside Claude Code settings. I have added &lt;code&gt;&quot;Bash(rm:*)&quot;&lt;/code&gt; to a “deny” list inside Claude Code’s global settings file (&lt;code&gt;~/.claude-code/global-settings.json&lt;/code&gt;):&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;permissions&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;    &quot;deny&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;Bash(rm:*)&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The deny list in &lt;code&gt;settings.json&lt;/code&gt; lives outside of the conversation/session, which means Claude cannot run &lt;code&gt;rm&lt;/code&gt; even if it wants to during a session. It will trigger the command during a session but the tool call will get blocked and the command will fail to run.&lt;/p&gt;
&lt;p&gt;This is a good workaround to prevent accidental file deletions. However, it also means that if I want Claude Code to delete a file, I will have to manually keep track of each file from the session and delete it myself. That is tiresome and ideal for me.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;What if I could allow Claude Code to safely delete those files instead of permanently delete them?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There is a tool exactly for deleting files safely without permanently deleting them. It is called &lt;a href=&quot;https://hasseg.org/trash/&quot;&gt;&lt;code&gt;trash&lt;/code&gt;&lt;/a&gt;, a CLI that moves a file or a directory to the Finder trash on macOS. To install it, you can use Homebrew:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; trash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Running a command like &lt;code&gt;trash file.txt&lt;/code&gt;, will move the &lt;code&gt;file.txt&lt;/code&gt; inside the Finder trash. This is normal macOS trash behavior. I added &lt;code&gt;trash&lt;/code&gt; in my Claude’s global &lt;code&gt;CLAUDE.md&lt;/code&gt; file with the following instruction:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt;## No &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-light-font-weight:bold;--shiki-dark:#9DB1C5;--shiki-dark-font-weight:bold&quot;&gt;`rm`&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt; Rule&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;Never use &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;`rm`&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; or &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;`rm -f`&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; to delete files. Always use &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;`trash`&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; instead (e.g., &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;`trash .eslintcache`&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;). This ensures files can be recovered.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now, instead of &lt;code&gt;rm&lt;/code&gt;, Claude reaches for &lt;code&gt;trash&lt;/code&gt; on its own. The deny list keeps on handling the edge case where the initial intent is to use &lt;code&gt;rm&lt;/code&gt; fails and the Claude picks up &lt;code&gt;trash&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Here is an example of how it works in practice from a real session, where I was working on migrating from ESLint to OxLint:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;trash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.claude/skills/docs-freshness/SKILL.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;trash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.claude/scripts/docs-freshness.sh&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library/LaunchAgents/com.claude.docs-freshness.plist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;trash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; .oxlintrc-test.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;trash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; .oxlintrc.json.bak&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;trash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; .eslintcache&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;trash&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; scripts/oxlint-migration-status.ts&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Each of the above files would have been permanently deleted with &lt;code&gt;rm&lt;/code&gt;. With &lt;code&gt;trash&lt;/code&gt;, they all went to the Finder trash where I can recover them if I need to. I have stopped thinking about losing an important file permanently. I just approve the cleanup step and move on.&lt;/p&gt;</content:encoded><category>ai</category><category>claude-code</category></item><item><title>Week notes 15</title><link>https://amanhimself.dev/blog/week-notes-15/</link><guid isPermaLink="true">https://amanhimself.dev/blog/week-notes-15/</guid><description>This week leaned heavy into to upgrading lint tools at work and a bit of writing.</description><pubDate>Sun, 05 Apr 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;This week leaned heavy into to upgrading lint tools at work and a bit of writing. I also managed to create a skill to perform a tedious activity with Claude Code and &lt;code&gt;/chrome&lt;/code&gt; tool it has, which I am going to write about in a future post.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📝 Wrote three short blog drafts that will go live on this blog soon.&lt;/li&gt;
&lt;li&gt;🧪 Built a broken link checker skill for the Expo docs using Claude Code Agent Teams. Instead of one agent crawling more than 1000 files and reporting gaps in its findings, I split the work across six agents, each running in its own &lt;code&gt;tmux&lt;/code&gt; pane with a different color label. It was joy to watch multiple agents running in parallel for a few minutes.&lt;/li&gt;
&lt;li&gt;🧪 Built a Claude Code skill that automates Algolia crawler’s recrawls using the &lt;code&gt;/chrome&lt;/code&gt; browser integration. The Algolia runs autonomously every day at a specific time. It occasionally fails and the only way to resolve the network errors is to go to the monitoring dashboard manually and recrawl each failed link. Now Claude Code can do this automatically for me while I can sip my morning coffee.&lt;/li&gt;
&lt;li&gt;💼 Lot of chores and work around admin stuff.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>notes</category></item><item><title>Week notes 14</title><link>https://amanhimself.dev/blog/week-notes-14/</link><guid isPermaLink="true">https://amanhimself.dev/blog/week-notes-14/</guid><description>Busy week with mix of publishing, drafting, and big changes. The kind where you look back and wonder how it all fit into five days.</description><pubDate>Sun, 29 Mar 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;Busy week with mix of publishing, drafting, and big changes. The kind where you look back and wonder how it all fit into five days.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;📝 Wrote a blog post based on the recent works on Expo docs. It talks about &lt;a href=&quot;https://amanhimself.dev/blog/docs-discoverability-layers/&quot;&gt;different layers of discoverability&lt;/a&gt; that have become essential for human readers and AI agents.&lt;/li&gt;
&lt;li&gt;📝 Redesigned the blog footer with social icon buttons.&lt;/li&gt;
&lt;li&gt;🧪 Explored switching the Astro blog from npm to bun. Netlify supports it, but the practical gain for this repo’s dependency size is small. Still thinking about it.&lt;/li&gt;
&lt;li&gt;💼 The big one this week was migrating the Expo docs linting setup from ESLint and Prettier to &lt;a href=&quot;https://oxc.rs/docs/guide/usage/linter&quot;&gt;Oxlint&lt;/a&gt; and &lt;a href=&quot;https://oxc.rs/docs/guide/usage/formatter&quot;&gt;Oxfmt&lt;/a&gt;. The speed is real.
&lt;ul&gt;
&lt;li&gt;Both are Rust-based tools from the &lt;a href=&quot;https://oxc.rs/&quot;&gt;Oxc project&lt;/a&gt; that replace ESLint and Prettier with significantly faster alternatives.&lt;/li&gt;
&lt;li&gt;Big because the migration includes 188 rules from ESLint to Oxlint. I have successfully removed Prettier entirely. One thing I think Oxlint could do better is to allow us to create our own custom plugins so I can port over MDX rules even though Oxlint does not supports MDX. In the end, Tailwind CSS and MDX are both using ESLint.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;📚 Started reading “Chop Wood, Carry Water”. I need to finish more books.&lt;/li&gt;
&lt;/ul&gt;</content:encoded><category>notes</category></item><item><title>Docs discoverability layers</title><link>https://amanhimself.dev/blog/docs-discoverability-layers/</link><guid isPermaLink="true">https://amanhimself.dev/blog/docs-discoverability-layers/</guid><description>When someone says a doc site is &quot;discoverable&quot;, they often mean that a human can find it through a search engine or use the in-site text-based search.</description><pubDate>Sat, 28 Mar 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;When someone says a doc site is “discoverable”, they often mean that a human can find it through a search engine or use the in-site text-based search. Most documentation sites are built for human readers. If a page loads correctly and reads well, it is considered discoverable. This assumption covers only one dimension.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developers.google.com/search/docs/fundamentals/how-search-works&quot;&gt;Search engines need signals&lt;/a&gt; to crawl and index pages. They need to know which URL is authoritative, what a page is about, and how to display it in results. Schema parsers (systems like Google’s Rich Results engine that read &lt;a href=&quot;https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data&quot;&gt;structured data&lt;/a&gt;) need typed metadata to understand what a page represents, not just what it says. AI agents need clean text they can consume without wasting tokens on parsing HTML, JavaScript, and navigation.&lt;/p&gt;
&lt;p&gt;Search crawlers, schema parsers, and AI agents each need different things from the same documentation page. The infrastructure serving one of them does almost nothing for the other two.&lt;/p&gt;
&lt;p&gt;At my day job, I work primarily on a &lt;a href=&quot;https://docs.expo.dev&quot;&gt;documentation site&lt;/a&gt; which has more than 1,000 pages. I have observed that treating “discoverability” as a single concern can lead to blind spots that only became visible when I started looking at what each machine reader actually needs.&lt;/p&gt;
&lt;p&gt;This post highlights some key points I found after attempting to satisfy all three. It is based on what we’ve shipped so far, including what we already had in place and was working for us (mostly for search engines).&lt;/p&gt;
&lt;h2 id=&quot;the-assumption-worth-questioning&quot;&gt;The assumption worth questioning&lt;/h2&gt;
&lt;p&gt;Most documentation sites invest, or I should say, used to invest in one surface: HTML rendered for human readers. If they do any machine-facing work at all, it’s usually &lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/special-tags&quot;&gt;meta tags&lt;/a&gt; in the &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; element for search engines. All of us who work on documentation used to stop there because the implicit assumption is that search engine visibility equals discoverability. If a search engine like Google can find the page, the job is done.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This still holds true in 2026. Yes, I am making this claim because AI agents can do web search and humans are still reading documentation and still use search engines. We just don’t know for how long.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;So, if search visibility isn’t the whole picture, what else is there? There are three types of machine reader, each piece needing its own layer:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Search crawlers&lt;/strong&gt;: They need control signals. They need to know which URL is &lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls&quot;&gt;canonical&lt;/a&gt; when versioned docs produce near-identical pages. They need &lt;a href=&quot;https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag&quot;&gt;&lt;code&gt;robots&lt;/code&gt; directives&lt;/a&gt; to know what to skip and a few more &lt;code&gt;meta&lt;/code&gt; tags. This is the most established layer since most documentation sites have them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Schema parsers&lt;/strong&gt;: This includes &lt;a href=&quot;https://schema.org&quot;&gt;Schema.org&lt;/a&gt; and &lt;a href=&quot;https://developers.google.com/search/docs/appearance/structured-data/search-gallery&quot;&gt;Google’s Rich Results&lt;/a&gt; engine. AI agents can also benefit from this data when available. I think of this as an identity layer which is usually constructed from breadcrumb chains, FAQ structures, video detection, and so on. This is achieved by using &lt;a href=&quot;https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data&quot;&gt;JSON-LD structured data&lt;/a&gt; and while &lt;a href=&quot;https://w3techs.com/technologies/overview/structured_data&quot;&gt;JSON-LD is used on over half of all websites&lt;/a&gt;, most of that is on large platforms. In my experience working across documentation sites, I haven’t seen many using docs-specific types like &lt;code&gt;TechArticle&lt;/code&gt; or &lt;code&gt;BreadcrumbList&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;AI agents&lt;/strong&gt;: This can include coding assistants, chat interfaces, and other LLM based tools that fetch documentation when a user asks a question. This is the newest layer and needs a clean, compact mechanism to consume the content. This is usually done in the form of Markdown files, and an &lt;a href=&quot;https://llmstxt.org/&quot;&gt;&lt;code&gt;llms.txt&lt;/code&gt;&lt;/a&gt; file is a small but efficient starting point.&lt;/p&gt;
&lt;p&gt;These three layers overlap in some ways.&lt;/p&gt;
&lt;h2 id=&quot;testing-these-layers&quot;&gt;Testing these layers&lt;/h2&gt;
&lt;p&gt;At my day job, all three layers are implemented and I have also implemented two out of three layers on my personal blog (this blog!).&lt;/p&gt;
&lt;p&gt;The blog uses metadata and has an LLM access layer using &lt;code&gt;.md&lt;/code&gt; URLs. I think using structured data might be overkill for it. The &lt;a href=&quot;https://docs.expo.dev&quot;&gt;documentation site&lt;/a&gt; I work on is more of a complete case study. The following table describes each layer and its implementation status from the documentation site:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;Consumer&lt;/th&gt;&lt;th&gt;What is implemented&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Head metadata&lt;/td&gt;&lt;td&gt;Search crawlers, social platforms&lt;/td&gt;&lt;td&gt;Title, description, canonical URL, robots directives, Open Graph (OG) tags, Twitter Cards, dynamic OG images&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;JSON-LD&lt;/td&gt;&lt;td&gt;Schema parsers, Google rich results&lt;/td&gt;&lt;td&gt;Schema types such as: Organization, WebSite, BreadcrumbList, TechArticle, FAQPage, VideoObject&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;llms.txt + markdown&lt;/td&gt;&lt;td&gt;AI agents (coding assistants, chat interfaces)&lt;/td&gt;&lt;td&gt;llms.txt endpoints, per-page &lt;code&gt;/index.md&lt;/code&gt;, Cloudflare worker that serves markdown when requested via HTTP headers&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The layers are independent. You do not have to implement them all at once. You can add them incrementally and test the value each one provides.&lt;/p&gt;
&lt;h2 id=&quot;my-framing-was-wrong&quot;&gt;My framing was wrong&lt;/h2&gt;
&lt;p&gt;Before all of this together, I had a narrow framing that I used to call “crawlability”. This was wrong because I used to think that the &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; metadata is only about whether a crawler can reach a page or not. It is not just about that. It is also about control, selection, and presentation. A &lt;code&gt;canonical&lt;/code&gt; tag tells search engines which URL represents the content, &lt;code&gt;robots&lt;/code&gt; controls the indexing behavior, &lt;a href=&quot;https://developers.google.com/search/docs/appearance/snippet&quot;&gt;&lt;code&gt;meta description&lt;/code&gt;&lt;/a&gt; provides a candidate summary for search results, OG and Twitter/X tags control social preview cards, and so on.&lt;/p&gt;
&lt;p&gt;How you frame each layer matters. Getting specific about what each one does helped me see where the gaps were.&lt;/p&gt;
&lt;h2 id=&quot;three-layers-together-and-where-to-start&quot;&gt;Three layers together and where to start&lt;/h2&gt;
&lt;p&gt;All three layers overlap in some ways and are dependent on each other.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; metadata comes first. If a page is not indexed, then it doesn’t matter what JSON-LD or &lt;code&gt;llms.txt&lt;/code&gt; coverage it has. The page will not appear in search results and will often be skipped by AI agents that rely on search indexes to find content. If there is one place you are looking to get started, start with &lt;code&gt;&amp;#x3C;head&gt;&lt;/code&gt; metadata.&lt;/p&gt;
&lt;p&gt;JSON-LD adds semantic understanding to each indexed page. It doesn’t help a page get indexed. It helps machine readers understand what the page represents after they find it. For documentation, &lt;a href=&quot;https://developers.google.com/search/docs/appearance/structured-data/breadcrumb&quot;&gt;&lt;code&gt;BreadcrumbList&lt;/code&gt;&lt;/a&gt; is the most immediately valuable because it can visibly change how the page appears in Google search results, showing a navigation path instead of a raw URL.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;llms.txt&lt;/code&gt; provides the site-level overview that neither page-level layer can offer. It gives AI agents a curated map of the entire documentation. To actually consume individual pages, per-page &lt;code&gt;.md&lt;/code&gt; URLs are efficient. Some sites also support serving Markdown when an AI agent requests it via the &lt;code&gt;Accept: text/markdown&lt;/code&gt; HTTP header, so the same URL can return HTML for browsers and Markdown for agents.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;txt&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                     One docs page&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;                          |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ---------------------------------------------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        |                     |                     |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        v                     v                     v&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   HTML &amp;#x3C;head&gt;         JSON-LD scripts      Markdown access&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   control layer       identity layer       LLM layer&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        |                     |                     |&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  canonical URL         WebSite             llms.txt index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  robots rules          Organization        llms-full.txt&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  meta description      TechArticle         per-page index.md&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  OG/Twitter            BreadcrumbList      Accept: text/markdown&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;wrap-up&quot;&gt;Wrap up&lt;/h2&gt;
&lt;p&gt;If you maintain a documentation site, or if you are thinking about how machines consume your content, I would be curious to hear how you think about these layers. I’m not presenting this three-layer model as the definitive way to think about docs discoverability. This is how I ended up thinking about these layers.&lt;/p&gt;</content:encoded><category>tech-writing</category></item><item><title>My Starship prompt setup</title><link>https://amanhimself.dev/blog/my-starship-prompt-setup/</link><guid isPermaLink="true">https://amanhimself.dev/blog/my-starship-prompt-setup/</guid><description>The prompt is the line you stare at before every command in a terminal app. It can be as minimal as a symbol like $ or &gt;.</description><pubDate>Sun, 22 Mar 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;The &lt;em&gt;prompt&lt;/em&gt; is the line you stare at before every command in a terminal app. It can be as minimal as a symbol like &lt;code&gt;$&lt;/code&gt; or &lt;code&gt;&gt;&lt;/code&gt;. By default, the Terminal app on macOS uses zsh with a plain prompt that shows your macOS username. While it shows some information, it tells you nothing about the current directory you are working in.&lt;/p&gt;
&lt;p&gt;There are various configurations you can use with zsh or the shell of your choice. Right now, I am using zsh and I prefer a clean setup. I have been using &lt;a href=&quot;https://starship.rs/&quot;&gt;Starship&lt;/a&gt; for a while now and recently went through a major rewrite of my configuration.&lt;/p&gt;
&lt;h2 id=&quot;getting-started-with-starship&quot;&gt;Getting started with Starship&lt;/h2&gt;
&lt;p&gt;Starship is a cross-shell prompt written in Rust. It works with zsh, bash, fish, and more. You typically configure it with a single TOML file and it handles showing you things like the current directory, git branch, and other toolchain versions. All of these &lt;em&gt;status&lt;/em&gt; related configurations depend completely on you and how you configure it.&lt;/p&gt;
&lt;p&gt;Installing Starship is easy via Homebrew:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; starship&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once you have it installed, add the following eval at the end of your &lt;code&gt;.zshrc&lt;/code&gt; file:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;eval&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;$(&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;starship&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; zsh&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;)&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Starship looks for its configuration at &lt;code&gt;~/.config/starship.toml&lt;/code&gt;. Create the file if it doesn’t exist.&lt;/p&gt;
&lt;h2 id=&quot;why-did-i-rewrite-my-starship-configuration&quot;&gt;Why did I rewrite my Starship configuration&lt;/h2&gt;
&lt;p&gt;My old Starship config had Nord theme colors hardcoded as hex values. Values like &lt;code&gt;#88C0D0&lt;/code&gt; for cyan and &lt;code&gt;#D8DEE9&lt;/code&gt; for white. These looked perfect in a dark terminal with a Nord color scheme. When I switched to a light theme, the prompt became unreadable. Yellow text became invisible on a white background. The light blue Nord colors had zero contrast against a light background.&lt;/p&gt;
&lt;p&gt;The fix was to use ANSI color names like &lt;code&gt;blue&lt;/code&gt;, &lt;code&gt;cyan&lt;/code&gt;, &lt;code&gt;green&lt;/code&gt; and so on. These names map to whatever the terminal theme defines. So &lt;code&gt;cyan&lt;/code&gt; in a dark theme looks like dark-theme cyan, and &lt;code&gt;cyan&lt;/code&gt; in a light theme looks like light-theme cyan. The terminal handles the contrast, not the Starship config.&lt;/p&gt;
&lt;p&gt;If you switch between light and dark themes, or might switch terminals someday, use ANSI color names instead of hex values.&lt;/p&gt;
&lt;h2 id=&quot;using-a-two-line-prompt&quot;&gt;Using a two-line prompt&lt;/h2&gt;
&lt;p&gt;Previously, I used a single-line prompt with the directory name on the left and git branch and toolchain versions on the right.&lt;/p&gt;
&lt;p&gt;I wanted to split this into two lines. Line 1 shows the directory, git info, and toolchain versions. Line 2 is just the prompt character waiting for input.&lt;/p&gt;
&lt;p&gt;Starship provides a &lt;code&gt;right_format&lt;/code&gt; option, but it renders on the same line as the prompt character. So if your format splits into two lines, the right-aligned content ends up next to &lt;code&gt;❯&lt;/code&gt; on line 2, not next to the directory on line 1.&lt;/p&gt;
&lt;p&gt;The trick is to use the &lt;code&gt;$fill&lt;/code&gt; module instead of &lt;code&gt;right_format&lt;/code&gt;. It fills the space between left and right content on the same line. Instead of splitting across &lt;code&gt;format&lt;/code&gt; and &lt;code&gt;right_format&lt;/code&gt;, you put everything in &lt;code&gt;format&lt;/code&gt; with &lt;code&gt;$fill&lt;/code&gt; as the separator:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;&quot;&quot;$directory$fill$git_branch$git_status$cmd_duration$package$nodejs$python$docker_context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;$character&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above configuration piece splits directory name on the left, a gap in the middle, and then all other information pushed towards the right. This way, the line 2 holds &lt;code&gt;&gt;&lt;/code&gt; character and waits for your input.&lt;/p&gt;
&lt;h2 id=&quot;using-nerd-font-icons&quot;&gt;Using Nerd font icons&lt;/h2&gt;
&lt;p&gt;Next configuration I did is to show icons for the git branches, Node.js, Python, and other toolchain versions. These icons come from Nerd Fonts, which are patched versions of regular programming fonts that include thousands of extra glyphs.&lt;/p&gt;
&lt;p&gt;Since I use JetBrainsMono font in my terminal previously, and to match that, I switched to use &lt;code&gt;jetbrains-mono-nerd-font&lt;/code&gt;. It can be installed via Homebrew:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --cask&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; font-jetbrains-mono-nerd-font&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You also need to configure your terminal app to use the Nerd font variant. For example, in &lt;a href=&quot;https://amanhimself.dev/blog/using-ghostty/&quot;&gt;Ghostty&lt;/a&gt;, it’s one line of configuration in the global configuration:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;font-family = JetBrainsMono Nerd Font&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;In iTerm2, you can set this up by going to Settings &gt; Profiles &gt; Your default profile &gt; Text &gt; Non-ASCII Font and then select JetBrainsMono Nerd Font in the drop down next to it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; If your icons aren’t showing, your editor may have silently stripped the glyph characters from the TOML file during copy-paste or save. You can use TOML Unicode escapes (&lt;code&gt;\uXXXX&lt;/code&gt;) instead of literal glyphs as a workaround:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[git_branch]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\ue0a0 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[nodejs]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\ue718 &quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;complete-starship-configuration&quot;&gt;Complete Starship configuration&lt;/h2&gt;
&lt;p&gt;Here’s my complete starship configuration. I have a few toolchain stuff disabled since I either find them annoying or don’t consider them important enough to be displayed all the time.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;toml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;&quot;$schema&quot; &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;https://starship.rs/config-schema.json&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;add_newline &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;&quot;&quot;$directory$fill$git_branch$git_status$cmd_duration$package$nodejs$python$docker_context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;$character&quot;&quot;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;command_timeout &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 10000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[fill]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos; &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[character]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;success_symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[❯](bold green)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;error_symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[❯](bold red)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;vimcmd_symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[❮](bold purple)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[cmd_duration]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;min_time &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 2_000&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;[\uf252 $duration]($style)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;bold purple&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[directory]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;bold blue&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;[\uf115 $path]($style)[$read_only]($read_only_style)&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;read_only_style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;bold red&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;read_only &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf023 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[git_branch]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[$symbol$branch(:$remote_branch)]($style) &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;bold cyan&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\ue0a0 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[git_status]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[$all_status$ahead_behind]($style)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;bold cyan&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;conflicted &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf0e7 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;ahead &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;⇡${count} &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;behind &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;⇣${count} &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;diverged &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;⇕⇡${ahead_count}⇣${behind_count} &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;untracked &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf128 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;stashed &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf01c &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;modified &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf044 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;staged &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf067 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;renamed &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;󰑕 &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;deleted &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf014 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[gcloud]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;disabled &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[nodejs]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[ $symbol($version)]($style)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\ue718 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;green&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[python]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[ $symbol$version]($style)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\ue73c &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;purple&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[rust]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;disabled &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[golang]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;disabled &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[docker_context]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[ $symbol$context]($style)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;\uf308 &quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;blue&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;[package]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;format &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;[ $symbol$version]($style)&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;symbol &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;󰏗 &apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;style &lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;blue&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Between iTerm2 and Ghostty, my terminal is a configuration file powered by Starship and I can easily switch or explore new terminal apps.&lt;/p&gt;</content:encoded><category>cli</category></item><item><title>Color-coding my Claude Code sessions</title><link>https://amanhimself.dev/blog/color-coding-claude-code-sessions/</link><guid isPermaLink="true">https://amanhimself.dev/blog/color-coding-claude-code-sessions/</guid><description>I usually have two or more sessions running at a time either in the same or different project directories.</description><pubDate>Sat, 14 Mar 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;I usually have two or more sessions running at a time either in the same or different project directories. One of the longest and most used sessions I have is in my &lt;a href=&quot;https://amanhimself.dev/blog/claude-code-tokens-usage/&quot;&gt;notes directory&lt;/a&gt;, where I am constantly creating specs or taking notes on the stuff I am working on.&lt;/p&gt;
&lt;p&gt;One problem when running multiple Claude Code sessions in different terminal windows or tabs is visually distinguishing them.&lt;/p&gt;
&lt;p&gt;Claude’s team recently released &lt;code&gt;/color&lt;/code&gt; and &lt;code&gt;/rename&lt;/code&gt; slash commands in Claude Code in &lt;a href=&quot;https://code.claude.com/docs/en/changelog&quot;&gt;v2.1.75&lt;/a&gt;. Together, they can turn anonymous Claude Code sessions into visually distinct workspaces. And this kind of solves the problem of visually separate multiple sessions on my end.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/color&lt;/code&gt; allows changing the color of the prompt bar. For example, if I type &lt;code&gt;/color orange&lt;/code&gt; in a currently active session, I immediately see it. Below is an example of two sessions running in the same directory. The first session has the default prompt color which matches my iTerm2 theme and the second session’s prompt bar:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/color-coding-claude-code/cc01.png&quot; alt=&quot;Two Claude Code sessions side by side, one with default color and one with orange prompt bar&quot; width=&quot;800&quot;&gt;
&lt;p&gt;Before &lt;code&gt;/color&lt;/code&gt;, these sessions looked identical. I’d glance at a terminal tab, guess which session it was, and then had to look a bit deeper to recall what the session was about.&lt;/p&gt;
&lt;p&gt;For a full list of available colors, see the &lt;a href=&quot;https://code.claude.com/docs/en/commands&quot;&gt;official docs&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also, notice that both sessions say “Claude Code (node)” in the header of each terminal tab in iTerm. This can be modified using &lt;code&gt;/rename&lt;/code&gt;, which lets me name a session and also affects the prompt bar.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/color-coding-claude-code/cc02.png&quot; alt=&quot;Claude Code session with renamed prompt bar&quot; width=&quot;800&quot;&gt;
&lt;p&gt;By default, &lt;code&gt;/rename&lt;/code&gt; command without an argument will auto-generate a name based on a session. I can override this by &lt;code&gt;/rename your-session-name&lt;/code&gt;:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/color-coding-claude-code/cc03.png&quot; alt=&quot;Claude Code session with custom name on prompt bar&quot; width=&quot;800&quot;&gt;
&lt;p&gt;&lt;code&gt;/rename&lt;/code&gt; command also affects the name of the terminal session window/tab. After setting it up or using the auto-generated session name, in iTerm2, the header reflects the same value.&lt;/p&gt;
&lt;p&gt;This solves a huge problem for me because iTerm2 has profile-based coloring and I use the default profile for all sessions.&lt;/p&gt;
&lt;p&gt;Now, I can also trigger a new session that has the color set by default for that session:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;claude&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;/color yellow&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above command will automatically trigger the session with the prompt bar’s color already set to the color yellow.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/color-coding-claude-code/cc04.png&quot; alt=&quot;Claude Code session launched with color set via CLI argument&quot; width=&quot;800&quot;&gt;
&lt;p&gt;However, this does not allow chaining slash commands yet. This means, I cannot run &lt;code&gt;claude &quot;/color yellow&quot; &quot;/rename notes&quot;&lt;/code&gt;. If you want to automate this, one little thing I’ve done is set a specific color at the start of a session for a specific project by creating an alias in my &lt;code&gt;.zshrc&lt;/code&gt; like:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;alias&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; cnotes&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;claude &apos;/color yellow&apos;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This way, I can run the alias command when starting a new session in the specific directory every time.&lt;/p&gt;</content:encoded><category>ai</category><category>cli</category><category>claude-code</category></item><item><title>TIL Remotely accessing one MacBook from another MacBook</title><link>https://amanhimself.dev/blog/remotely-access-macbook-from-another-macbook/</link><guid isPermaLink="true">https://amanhimself.dev/blog/remotely-access-macbook-from-another-macbook/</guid><description>macOS has a built-in way to remotely access another Mac using Screen Sharing and Remote Login (SSH). No third-party tools needed.</description><pubDate>Wed, 11 Mar 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;macOS has a built-in way to remotely access another Mac using Screen Sharing and Remote Login (SSH). No third-party tools needed.&lt;/p&gt;
&lt;h2 id=&quot;how-to-set-it-up&quot;&gt;How to set it up&lt;/h2&gt;
&lt;p&gt;On the remote Mac (the one you want to access), go to &lt;strong&gt;System Settings &gt; General &gt; Sharing&lt;/strong&gt;. Enable &lt;strong&gt;Screen Sharing&lt;/strong&gt; for full GUI access, or enable &lt;strong&gt;Remote Login&lt;/strong&gt; for SSH/terminal access. Note the local IP address or hostname shown in the Sharing settings.&lt;/p&gt;
&lt;h2 id=&quot;connecting&quot;&gt;Connecting&lt;/h2&gt;
&lt;p&gt;For Screen Sharing, open Finder on your local Mac, press &lt;code&gt;Cmd + K&lt;/code&gt;, and enter &lt;code&gt;vnc://&amp;#x3C;remote-ip&gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;For SSH, open Terminal and run:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;ssh&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; username@&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;&amp;#x3C;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;remote-i&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;p&lt;/span&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Both Macs need to be on the same network (or use a VPN for remote access over the internet).&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/es1.png&quot; alt=&quot;Remote terminal session on another MacBook&quot;&gt;</content:encoded><category>macos</category></item><item><title>Using Ghostty for the first time</title><link>https://amanhimself.dev/blog/using-ghostty/</link><guid isPermaLink="true">https://amanhimself.dev/blog/using-ghostty/</guid><description>It&apos;s 2026, a time for AI agents and AI tools like Claude Code and Codex CLI to be alive.</description><pubDate>Wed, 04 Mar 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;It’s 2026, a time for AI agents and AI tools like Claude Code and Codex CLI to be alive. I am using them every day and I find myself spending more time inside a terminal app rather than a code editor.&lt;/p&gt;
&lt;p&gt;In the past, I’ve written about setting up and installing &lt;a href=&quot;https://ohmyz.sh/&quot;&gt;Oh My Zsh&lt;/a&gt; and using iTerm2 as my de facto terminal app. I’ve used iTerm2 as long as I can remember, probably around a decade. I have switched between different color schemes and configurations, even saved them in my dotfiles.&lt;/p&gt;
&lt;p&gt;Recently, I’ve been hearing a lot about Ghostty, which is a new terminal app in town and is created by Mitchell Hashimoto (co-founder of HashiCorp). Everyone keeps saying it is minimal and fast. You had me at &lt;em&gt;minimal&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;why-i-switched&quot;&gt;Why I switched&lt;/h2&gt;
&lt;p&gt;iTerm2 is a great terminal but is a complete app that offers more settings than I need right now.&lt;/p&gt;
&lt;p&gt;Ghostty seems the opposite. It requires one plain text file. Doesn’t provide a GUI settings panel. The default settings in Ghostty aren’t too bad. It all made sense when I first installed and ran the app on my Mac.&lt;/p&gt;
&lt;p&gt;Another reason is that Ghostty is GPU-accelerated and noticeably snappier. Window launches feel instant. Scrolling through my conversations with Claude Code sessions feels smoother. These details add up when you are looking at and interacting with a terminal window for at least 1/3rd of your full day’s work. Maybe more on some days.&lt;/p&gt;
&lt;h2 id=&quot;getting-ghostty&quot;&gt;Getting Ghostty&lt;/h2&gt;
&lt;p&gt;Ghostty is available at &lt;a href=&quot;https://ghostty.org&quot;&gt;ghostty.org&lt;/a&gt;. On macOS, download the &lt;code&gt;.dmg&lt;/code&gt; from the website or install via Homebrew:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;brew&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --cask&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ghostty&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;ghostty-configuration&quot;&gt;Ghostty configuration&lt;/h2&gt;
&lt;p&gt;I was mind-blown when I found out that Ghostty uses a single plain text file for configuration. Press Cmd + , and the config file opens right inside the terminal. No settings GUI, no preferences panel with dozens of tabs. Just a text file.&lt;/p&gt;
&lt;p&gt;An example of this is the terminal app theme. Ghostty ships with hundreds of built-in themes and does not require importing or downloading anything. All you need to do is mention the name.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;theme = light:Gruvbox Light,dark:dracula&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you are like me and want to stick to one theme, you can define a single theme:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;theme = Gruvbox Light&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;my-complete-ghostty-configuration&quot;&gt;My complete Ghostty configuration&lt;/h2&gt;
&lt;p&gt;Here’s my complete Ghostty configuration. There is nothing fancy about it:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Theme&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;theme = Gruvbox Light&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Contrast&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;minimum-contrast = 1.3&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Font&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;font-family = JetBrainsMono Nerd Font&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;font-size = 16&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;font-thicken = true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Window&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;macos-titlebar-style = tabs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;window-padding-x = 8&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;window-padding-y = 4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;background-opacity = 0.96&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;background-blur = 10&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;unfocused-split-opacity = 0.6&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;window-padding-balance = true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# macOS&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;macos-option-as-alt = left&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Cursor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;cursor-style = bar&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;# Mouse&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mouse-hide-while-typing = true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That’s it! A few lines of configuration is all I need. Everything is documented in the &lt;a href=&quot;https://ghostty.org/docs/config/reference&quot;&gt;official documentation&lt;/a&gt;, but here’s what the above configuration does:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;theme&lt;/code&gt;&lt;/strong&gt;: Sets the color scheme. Ghostty ships with hundreds of built-in themes, and you can also add custom ones. You can use &lt;code&gt;light:&lt;/code&gt; and &lt;code&gt;dark:&lt;/code&gt; prefixes to auto-switch based on macOS system appearance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;minimum-contrast&lt;/code&gt;&lt;/strong&gt;: Ensures every foreground/background color pair in the terminal meets a minimum contrast ratio. Setting it to 1.3 is a subtle floor that prevents any theme colors from becoming unreadable.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;font-family&lt;/code&gt;&lt;/strong&gt;: The font used for all terminal text. I use JetBrainsMono Nerd Font, which includes icons for git, Node.js, Python, and other developer tools in the prompt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;font-size&lt;/code&gt;&lt;/strong&gt;: Font size in points. 16 works well on a large external monitor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;font-thicken&lt;/code&gt;&lt;/strong&gt;: Makes the font slightly bolder. Adds a bit of weight to the text, which improves readability on high-resolution displays.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;macos-titlebar-style = tabs&lt;/code&gt;&lt;/strong&gt;: Integrates tabs directly into the macOS titlebar. Saves vertical space and looks native.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;window-padding-x&lt;/code&gt; / &lt;code&gt;window-padding-y&lt;/code&gt;&lt;/strong&gt;: Adds breathing room between the text and the window edges. Without it, characters feel crammed against the border.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;window-padding-balance&lt;/code&gt;&lt;/strong&gt;: Automatically centers the text when you resize the window, instead of pinning it to the top-left corner.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;background-opacity&lt;/code&gt;&lt;/strong&gt;: Controls window transparency. 0.96 gives a subtle translucency where you can barely see the desktop behind the terminal without sacrificing readability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;background-blur&lt;/code&gt;&lt;/strong&gt;: Blurs the background visible through the transparent window. Paired with opacity, this gives a frosted glass effect.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;unfocused-split-opacity&lt;/code&gt;&lt;/strong&gt;: When you split panes, the unfocused pane dims to this value. 0.6 makes it obvious which pane is active.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;macos-option-as-alt = left&lt;/code&gt;&lt;/strong&gt;: On macOS, the &lt;code&gt;Option&lt;/code&gt; key produces special Unicode characters (like &lt;code&gt;ø&lt;/code&gt; or &lt;code&gt;å&lt;/code&gt;) instead of acting as &lt;code&gt;Alt&lt;/code&gt;. This setting makes the left &lt;code&gt;Option&lt;/code&gt; key behave as &lt;code&gt;Alt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;cursor-style = bar&lt;/code&gt;&lt;/strong&gt;: A thin bar cursor instead of the default block.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;mouse-hide-while-typing&lt;/code&gt;&lt;/strong&gt;: Hides the mouse cursor while you type so it doesn’t sit in the middle of your terminal output.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;shortcuts-to-remember&quot;&gt;Shortcuts to remember&lt;/h2&gt;
&lt;p&gt;Whenever you make a change to your configuration, always remember to press &lt;code&gt;Cmd + Shift + ,&lt;/code&gt; to reload your changes.&lt;/p&gt;
&lt;p&gt;Splitting panes works by default. You can press &lt;code&gt;Cmd + D&lt;/code&gt; for vertical splits and &lt;code&gt;Cmd + Shift + D&lt;/code&gt; for horizontal ones.&lt;/p&gt;
&lt;h2 id=&quot;why-minimal&quot;&gt;Why minimal&lt;/h2&gt;
&lt;p&gt;I have seen many cool terminal configurations that are quite long and contain custom themes, and complex keybindings. I want to keep things minimal on my end because I have a minimal setup and using default keybindings are part of my muscle memory now. There are definitely things I can improve in near future, if I have to spend more time inside a terminal window. When a configuration gives me everything I need, there’s hardly any reason to make it complex.&lt;/p&gt;
&lt;p&gt;This how my current Ghostty window looks like:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/es2.png&quot; alt=&quot;My current Ghostty window&quot; width=&quot;768&quot;&gt;</content:encoded><category>cli</category></item><item><title>Slash pages you need for your blog</title><link>https://amanhimself.dev/blog/slash-pages-you-need-for-your-blog/</link><guid isPermaLink="true">https://amanhimself.dev/blog/slash-pages-you-need-for-your-blog/</guid><description>The pages outside /blog can matter just as much as your posts. Slash pages like /now, /about, and /uses show readers who you are beyond your writing.</description><pubDate>Sat, 28 Feb 2026 00:00:05 GMT</pubDate><content:encoded>&lt;p&gt;The pages outside &lt;a href=&quot;https://amanhimself.dev/blog&quot;&gt;&lt;code&gt;/blog&lt;/code&gt;&lt;/a&gt; can matter just as much as your posts. Slash pages like &lt;a href=&quot;https://amanhimself.dev/now&quot;&gt;&lt;code&gt;/now&lt;/code&gt;&lt;/a&gt;, &lt;a href=&quot;https://amanhimself.dev/about&quot;&gt;&lt;code&gt;/about&lt;/code&gt;&lt;/a&gt;, and &lt;code&gt;/uses&lt;/code&gt; show readers who you are beyond your writing.&lt;/p&gt;
&lt;p&gt;I currently have 12 slash pages. That’s too many. Here’s the thing: each one serves a purpose and I have found myself visiting other people’s slash pages more than I expected. Weirdly compelling. Let me walk through what I have and why:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/about&quot;&gt;&lt;code&gt;/about&lt;/code&gt;&lt;/a&gt;: I’ve rewritten this page the most over the years. It’s never quite right. But you need it. People need to know who you are and what you do. It’s often the second page people visit after stumbling onto one of your blog posts.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/now&quot;&gt;&lt;code&gt;/now&lt;/code&gt;&lt;/a&gt;: This is inspired by &lt;a href=&quot;https://nownownow.com/&quot;&gt;Derek Sivers’ now page movement&lt;/a&gt; and it’s genuinely one of my favorite pages to maintain. Unlike &lt;a href=&quot;https://amanhimself.dev/about&quot;&gt;&lt;code&gt;/about&lt;/code&gt;&lt;/a&gt;, which is basically static, this changes all the time. What am I working on &lt;em&gt;right now&lt;/em&gt;? What am I reading? It’s a snapshot of the present moment. I update it maybe every three months.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/links&quot;&gt;&lt;code&gt;/links&lt;/code&gt;&lt;/a&gt;: All the places I exist on the internet. GitHub, X, LinkedIn, and so on. Sounds redundant but it’s useful as a single source of truth. “Where can I find you?” Here’s the list.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/blog&quot;&gt;&lt;code&gt;/blog&lt;/code&gt;&lt;/a&gt; or &lt;code&gt;/archive&lt;/code&gt;: An archive of everything. Not just the last 10 posts, but &lt;em&gt;everything&lt;/em&gt;. This matters more than you’d think once you have a few hundred posts. People want to browse.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/stats&quot;&gt;&lt;code&gt;/stats&lt;/code&gt;&lt;/a&gt;: I share my Fathom analytics publicly. Why? Honestly I think it’s interesting. Transparency is cool. And it’s kind of fun to see what resonates.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/posts-count&quot;&gt;&lt;code&gt;/posts-count&lt;/code&gt;&lt;/a&gt;: How many posts I’ve published each year.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/search&quot;&gt;&lt;code&gt;/search&lt;/code&gt;&lt;/a&gt;: Once you have more than 50 posts, you might need this if your site is as static as mine.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/rss&quot;&gt;&lt;code&gt;/rss&lt;/code&gt;&lt;/a&gt;: RSS is not dead. Some of us still use feed readers, and a discoverable feed link helps.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/support&quot;&gt;&lt;code&gt;/support&lt;/code&gt;&lt;/a&gt;: How to sponsor the site. I don’t push this hard at all, but it exists for people who want to.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/ai&quot;&gt;&lt;code&gt;/ai&lt;/code&gt;&lt;/a&gt;: My stance on AI and how it relates to the content on this site. I think being explicit about your approach matters.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/been&quot;&gt;&lt;code&gt;/been&lt;/code&gt;&lt;/a&gt;: A list of countries I’ve visited. Is this necessary? No. Is it fun? Yes.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://amanhimself.dev/llms.txt&quot;&gt;&lt;code&gt;/llms.txt&lt;/code&gt;&lt;/a&gt;: This one is new and meta. It’s an &lt;a href=&quot;https://llmstxt.org/&quot;&gt;llms.txt&lt;/a&gt; file that points to my content in a machine-friendly format.&lt;/p&gt;
&lt;p&gt;You definitely don’t need 12 slash pages. That’s overkill for most people. But express yourself beyond your posts. It’s your blog. Share a little bit of your personality.&lt;/p&gt;
&lt;p&gt;If you need more inspiration, check out &lt;a href=&quot;https://slashpages.net/&quot;&gt;Robb Knight’s Slash Pages project&lt;/a&gt; for more ideas. And then go add some to your own site. It’s weirdly satisfying.&lt;/p&gt;</content:encoded><category>blogging</category></item><item><title>Using images in Claude Code</title><link>https://amanhimself.dev/blog/using-images-in-claude-code/</link><guid isPermaLink="true">https://amanhimself.dev/blog/using-images-in-claude-code/</guid><description>Recently I wrote a post on Running headless Codex CLI inside Claude Code, which describes a way to use Codex models in a headless way when you have Claude Code…</description><pubDate>Wed, 18 Feb 2026 00:00:05 GMT</pubDate><content:encoded>&lt;p&gt;Recently I wrote a post on &lt;a href=&quot;https://amanhimself.dev/blog/running-headless-codex-cli-inside-claude-code/&quot;&gt;Running headless Codex CLI inside Claude Code&lt;/a&gt;, which describes a way to use Codex models in a headless way when you have Claude Code installed on your local machine. I ended up creating a skill for it where Claude Code will ask you to go through a series of questions to select which Codex model and its reasoning level. It also goes through the task you want to achieve with Codex without leaving your session inside Claude Code.&lt;/p&gt;
&lt;p&gt;During the development of that skill, I found because an LLM can have stale training data, it might not choose the right set of models. This is exactly what happened on the first iteration of the skill development. Opus 4.6 initially had GPT 4 models added to the skill and I only found out about it after running the skill manually (and no, I didn’t read the skill file when it was created for the first time).&lt;/p&gt;
&lt;p&gt;To have the current set of models presented when running this skill, I asked Claude Code to adjust the skill itself. I ran &lt;code&gt;/model&lt;/code&gt; picker inside Codex CLI, took a bunch of screenshots of the currently available models and their reasoning levels and gave them to Claude Code without further explanation. I found that it is easier for an LLM to pick information from an image.&lt;/p&gt;
&lt;p&gt;Claude Code was able to rectify its own mistake. Most modern LLMs available are multimodal, including Claude and GPT models. They can process images natively without the need of converting them to text first.&lt;/p&gt;
&lt;p&gt;In Claude Code specifically, you can paste screenshots with Cmd+V (on macOS), drag-drop files, or reference image paths from your machine’s filesystem. Think of it like giving someone directions to your house. You can either describe the route over a phone call or text including nearest landmarks or you can just drop a pin in an instant messaging app which will allow them to view the dropped pin (capture of the location using a maps app). The pin can’t be misinterpreted easily.&lt;/p&gt;
&lt;p&gt;With the help of screenshots, you can also eliminate a lot of back and forth for what you want to describe. Images are first-class content blocks in Claude. They are interpreted as tokens using a formula as per &lt;a href=&quot;https://platform.claude.com/docs/en/build-with-claude/vision#calculate-image-costs&quot;&gt;official Claude’s documentation&lt;/a&gt;. A 1000 by 1000 px image is roughly 1334 tokens. Not exactly too much considering the context length and the level the latest LLMs operate these days.&lt;/p&gt;
&lt;p&gt;Next time you are stuck at explaining something in the input field in Claude Code or are looking for a way to move things faster, take a screenshot and paste it in your terminal window.&lt;/p&gt;</content:encoded><category>ai</category><category>cli</category><category>claude-code</category></item><item><title>Running headless Codex CLI inside Claude Code</title><link>https://amanhimself.dev/blog/running-headless-codex-cli-inside-claude-code/</link><guid isPermaLink="true">https://amanhimself.dev/blog/running-headless-codex-cli-inside-claude-code/</guid><description>I have both Claude Code CLI and Codex CLI installed on my local machine. I often use Codex to code review or tighten the code on something I am working on.</description><pubDate>Fri, 13 Feb 2026 00:00:05 GMT</pubDate><content:encoded>&lt;p&gt;I have both Claude Code CLI and Codex CLI installed on my local machine. I often use Codex to code review or tighten the code on something I am working on. Claude has a better terminal UI, which is not only pleasing to use, but it respects my terminal app’s theme. Switching between both CLIs and then finding a way to write prompts wasn’t fruitful. So I created a Skill in Claude Code to allow me to use Codex CLI in a headless way.&lt;/p&gt;
&lt;p&gt;Codex has a non-interactive mode that can be enabled using &lt;code&gt;codex exec&lt;/code&gt;. It dumps output in &lt;code&gt;stdout&lt;/code&gt;. This is what makes it possible to use inside Claude Code CLI.&lt;/p&gt;
&lt;p&gt;All of this is possible by creating a Skill inside Claude Code. A Skill is basically a markdown file (&lt;code&gt;SKILL.md&lt;/code&gt;) with some frontmatter at the top and instructions in the rest of the file. You can think of it as a task that has a bunch of instructions on what to do, how to do it, and what not to do. I also think of them as recipes where I want Claude Code to perform a task by following a bunch of steps.&lt;/p&gt;
&lt;p&gt;In Claude, you can have global-level skills and project-level skills. I created this new skill as a global one so I could trigger it in any project I want. All global level skills in Claude live in &lt;code&gt;~/.claude/skills/your-skill-name/&lt;/code&gt;, where &lt;code&gt;your-skill-name&lt;/code&gt; is that global or project level skill’s directory.&lt;/p&gt;
&lt;p&gt;The skill is called &lt;code&gt;/run-codex&lt;/code&gt;. A skill in Claude Code can be triggered using a &lt;code&gt;/&lt;/code&gt;. When I invoke &lt;code&gt;/run-codex&lt;/code&gt;, it starts in a read-only mode. It asks me which model to pick and what should be its reasoning level.&lt;/p&gt;
&lt;p&gt;Here are some screenshots of when I invoke this skill:&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/headless-codex-cli/01.png&quot; alt=&quot;Claude Code asking which Codex model to pick and what reasoning level to use&quot; width=&quot;380&quot;&gt;
&lt;img src=&quot;https://amanhimself.dev/images/headless-codex-cli/02.png&quot; alt=&quot;Claude Code asking which reasoning level to use for the selected Codex model&quot; width=&quot;380&quot;&gt;
&lt;p&gt;Then, it provides three ways I can use it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code Review&lt;/li&gt;
&lt;li&gt;Refactoring Suggestions&lt;/li&gt;
&lt;li&gt;Code Editing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the above screenshots you are seeing that invoking the skill, Claude Code is asking me a bunch of questions. This is essential since &lt;code&gt;codex exec&lt;/code&gt; runs silently in the background. Without passing any user input, it won’t know how to proceed.&lt;/p&gt;
&lt;p&gt;All of this interactivity comes from Claude’s side. I do have these questions in a specific order so Claude Code always follows it. Asking such questions inside Claude Code is possible because of &lt;code&gt;AskUserQuestion&lt;/code&gt;, which is a built-in tool that Claude Code can access. This tool lets Claude Code present the user with a question and a set of options. You can invoke this tool inside your &lt;code&gt;SKILL.md&lt;/code&gt; file and then define the options.&lt;/p&gt;
&lt;p&gt;Here’s the reasoning level step defined in my skill’s file. It asks Claude Code to invoke &lt;code&gt;AskUserQuestion&lt;/code&gt; to allow me to select a reasoning level for the model I selected in the previous step:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt;### Step 2 - Reasoning Level&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;Use AskUserQuestion to ask which reasoning level to use. This maps to the &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;`model_reasoning_effort`&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; config. Options:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt;**Low**&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; - Fast responses with lighter reasoning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt;**Medium**&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; - Balances speed and reasoning depth for everyday tasks (default)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt;**High**&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; - Greater reasoning depth for complex problems&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-light-font-weight:bold;--shiki-dark:#FF7A84;--shiki-dark-font-weight:bold&quot;&gt;**xhigh**&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; - Extra high reasoning depth for complex problems&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;The selected level is passed via &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;`-c model_reasoning_effort=&quot;&amp;#x3C;level&gt;&quot;`&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Going through this prompt process, you might wonder what is the exact Codex command invoked here. Just for demonstration purposes, I invoked the &lt;code&gt;/run-codex&lt;/code&gt; skill inside the open-source repository that I work on at work and this is the exact command:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;codex&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; exec&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; model=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;gpt-5.3-codex&quot;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -c&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; model_reasoning_effort=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;xhigh&quot;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --sandbox&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; read-only&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --ephemeral&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Review the code in the ui/components/ directory for bugs, quality…&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;An important thing to note here is the &lt;code&gt;--sandbox read-only --ephemeral&lt;/code&gt;. The &lt;code&gt;--sandbox read-only&lt;/code&gt; tells Codex to run in a sandbox where it can read files but cannot write, create, or delete. This is enforced at the OS level. Think of this as a guard that Codex can’t do anything without your permission other than reading one or many files in your codebase.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;--ephemeral&lt;/code&gt; tells Codex not to save the session to disk. Normally, when I run Claude Code or Codex, all sessions are stored in files so you can resume them later using, for example &lt;code&gt;codex --resume&lt;/code&gt; command from a terminal window. With &lt;code&gt;--ephemeral&lt;/code&gt; passed as an option to &lt;code&gt;codex exec&lt;/code&gt;, the session exists only while it runs.&lt;/p&gt;
&lt;p&gt;Another thing to note here, since &lt;code&gt;codex exec&lt;/code&gt; is now running inside Claude Code, Claude will take care of saving the session and I don’t need two different AI CLIs to store the same session.&lt;/p&gt;
&lt;p&gt;After 14 something minutes, I had the result with me. The code review part was done on a specific directory where the repository has most of its UI components. A comparison table is provided at the end when code review analysis is done by Codex. In my skill file, for this specific task, I also have instructions for Claude Code to do its own analysis and then compare its results with Codex’s output.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/headless-codex-cli/03.png&quot; alt=&quot;Claude Code showing the code review results from Codex and its own analysis&quot; width=&quot;800&quot;&gt;
&lt;img src=&quot;https://amanhimself.dev/images/headless-codex-cli/04.png&quot; alt=&quot;Claude Code showing the comparison table between Codex&amp;#x27;s code review and its own analysis&quot; width=&quot;800&quot;&gt;
&lt;p&gt;I think the code review is a fair report. Before running this, I was aware that there is some dead code. I am glad Claude Code picked it up while Codex couldn’t. Another thing I want to highlight is that the Claude Code’s way of presenting the final report in markdown (especially the tables) is much cleaner than in Codex CLI (at least at the time of writing this post, where &lt;code&gt;codex&lt;/code&gt; is versioned at 0.99).&lt;/p&gt;
&lt;p&gt;When creating the &lt;code&gt;/run-codex&lt;/code&gt; skill, I use Claude Code’s planning mode to figure out how the skill can be structured. I gave it a prompt, fairly based on an idea I had in my mind. Initially, the version of this skill Claude built was wrong. It had wrong Codex model names, and there was no way to select the reasoning level, which is mostly fine. With LLMs stateless nature, I don’t expect them to one-shot the exact result of a given task to be perfect. This also helped me to dive deeper into how skills work and how to make them interactive.&lt;/p&gt;
&lt;p&gt;You can build your skills that you expect to use again and that may contain executing a series of tasks. If you use both Claude Code and Codex and prefer Claude Code’s interface, try to build one for your own use case or ask Claude Code to build a skill for one of the most repeatable tasks you do. Claude is usually really helpful in building initial skills. You can always tweak them as you use them. I am going to tweak the &lt;code&gt;/run-codex&lt;/code&gt; next time I am using it.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/headless-codex-cli/05.png&quot; alt=&quot;SkillsBar app showing the run-codex skill&amp;#x27;s detail in macOS menu&quot; width=&quot;380&quot;&gt;
&lt;p&gt;&lt;em&gt;The above screenshot is from &lt;a href=&quot;https://github.com/amandeepmittal/skillsbar&quot;&gt;SkillsBar&lt;/a&gt;, a macOS menu bar app I built to browse and manage Claude Code skills.&lt;/em&gt;&lt;/p&gt;</content:encoded><category>ai</category><category>cli</category><category>claude-code</category><category>codex</category></item><item><title>TIL about tracking your Claude Code tokens usage</title><link>https://amanhimself.dev/blog/claude-code-tokens-usage/</link><guid isPermaLink="true">https://amanhimself.dev/blog/claude-code-tokens-usage/</guid><description>I wrote about tracking Codex tokens usage recently, and the same tool works for Claude Code. Different command though:</description><pubDate>Wed, 11 Feb 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;I wrote about &lt;a href=&quot;https://amanhimself.dev/blog/codex-tokens-usage/&quot;&gt;tracking Codex tokens usage&lt;/a&gt; recently, and the same tool works for Claude Code. Different command though:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ccusage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The tool is part of the &lt;a href=&quot;https://www.npmjs.com/package/ccusage&quot;&gt;&lt;code&gt;ccusage&lt;/code&gt;&lt;/a&gt; project. Works with Claude Code’s local logs, no API keys needed. It reads your local Claude Code logs and gives you a daily breakdown of exactly what you’re spending.&lt;/p&gt;
&lt;p&gt;Here’s an example usage:&lt;/p&gt;

































































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Models&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Input&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Output&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cache Create&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cache Read&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Total Tokens&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cost (USD)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;2026-02-05&lt;/td&gt;&lt;td&gt;haiku-4-5, opus-4-5&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;54.3K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;9.7K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;3.2M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;87.1M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;90.4M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$59.20&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-02-06&lt;/td&gt;&lt;td&gt;haiku-4-5, opus-4-5, opus-4-6&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;11.0K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;5.4K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;1.2M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;25.7M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;26.9M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$18.59&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-02-07&lt;/td&gt;&lt;td&gt;haiku-4-5, opus-4-6, sonnet-4-5&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;27.3K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;4.9K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;718.7K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;10.6M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;11.3M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$7.39&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2026-02-08&lt;/td&gt;&lt;td&gt;haiku-4-5, opus-4-6, sonnet-4-5&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;15.4K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;4.9K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;287.9K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;7.7M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;8.0M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$5.17&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;…&lt;/td&gt;&lt;td&gt;&lt;em&gt;(other sessions)&lt;/em&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Compared to the Codex output, the Claude Code breakdown adds a &lt;em&gt;Cache Create&lt;/em&gt; column. This tells you when it’s building up context vs reusing it through &lt;em&gt;Cache Read&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The ratio between the two shows cache efficiency. For example, 454.4M cache reads vs 28.8M cache creates means the context is being reused about 16x. Cache behavior explains why some sessions feel faster.&lt;/p&gt;
&lt;p&gt;If you’re on Claude Code and haven’t checked your usage, run &lt;code&gt;npx ccusage&lt;/code&gt;. You might be pleasantly surprised after checking your usage.&lt;/p&gt;</content:encoded><category>cli</category><category>ai</category><category>claude-code</category></item><item><title>TIL about tracking your Codex tokens usage</title><link>https://amanhimself.dev/blog/codex-tokens-usage/</link><guid isPermaLink="true">https://amanhimself.dev/blog/codex-tokens-usage/</guid><description>I use Codex for both code-related and non-code tasks in Cursor and in the terminal. I wanted a better way to track Codex token usage day by day.</description><pubDate>Sun, 08 Feb 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;I use Codex for both code-related and non-code tasks in Cursor and in the terminal. I wanted a better way to track Codex token usage day by day.&lt;/p&gt;
&lt;p&gt;Recently, I learned about &lt;a href=&quot;https://www.npmjs.com/package/@ccusage/codex&quot;&gt;&lt;code&gt;@ccusage/codex&lt;/code&gt;&lt;/a&gt;, which reads your local Codex logs and spits out a table of exactly how many tokens you used each day. This breakdown isn’t provided by the &lt;a href=&quot;https://platform.openai.com/usage&quot;&gt;Codex usage page&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npx&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; @ccusage/codex@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you’re using Codex CLI and haven’t run this yet, do it. You might be very surprised. I certainly was when I looked at my usage.&lt;/p&gt;
&lt;p&gt;Here is a snapshot from Feb 06 to Feb 08, 2026. The &lt;strong&gt;Total&lt;/strong&gt; row is my cumulative usage since September 2025, not only these three days:&lt;/p&gt;























































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Model&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Input&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Output&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Reasoning&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cache Read&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Total Tokens&lt;/th&gt;&lt;th align=&quot;right&quot;&gt;Cost (USD)&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Feb 06, 2026&lt;/td&gt;&lt;td&gt;gpt-5.2-codex&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;396.8K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;26.4K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;20.8K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;1.0M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;1.4M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$0.89&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Feb 07, 2026&lt;/td&gt;&lt;td&gt;gpt-5.2-codex&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;1.1M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;208.5K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;91.1K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;18.2M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;19.5M&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$5.79&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Feb 08, 2026&lt;/td&gt;&lt;td&gt;gpt-5.3-codex&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;83.0K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;16.3K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;10.5K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;498.6K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;597.9K&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;$0.33&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;…&lt;/td&gt;&lt;td&gt;&lt;em&gt;(other sessions)&lt;/em&gt;&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;td align=&quot;right&quot;&gt;…&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;It reads your local logs and gives you a breakdown of your Codex token usage, including input, output, reasoning, cache reads, total tokens, and even the cost in USD based on current pricing. The tool pulls live pricing from &lt;a href=&quot;https://www.litellm.ai/&quot;&gt;LiteLLM&lt;/a&gt;, so the cost calculations should stay accurate even when OpenAI changes rates again.&lt;/p&gt;</content:encoded><category>cli</category><category>ai</category><category>codex</category></item><item><title>Migrating from Cursor to VS Code</title><link>https://amanhimself.dev/blog/migrating-from-cursor-to-vscode/</link><guid isPermaLink="true">https://amanhimself.dev/blog/migrating-from-cursor-to-vscode/</guid><description>I recently migrated from Cursor to VS Code. Cursor&apos;s agentic code integration was a huge part of my daily workflow.</description><pubDate>Sat, 07 Feb 2026 00:00:01 GMT</pubDate><content:encoded>&lt;p&gt;I recently migrated from &lt;a href=&quot;https://cursor.com&quot;&gt;Cursor&lt;/a&gt; to VS Code. Cursor’s agentic code integration was a huge part of my daily workflow.&lt;/p&gt;
&lt;p&gt;If you’re switching from Cursor to VS Code, the migration is straightforward. There are a few steps to get it right.&lt;/p&gt;
&lt;h2 id=&quot;why-move-back-to-vs-code&quot;&gt;Why move back to VS Code&lt;/h2&gt;
&lt;p&gt;Claude Code runs in the terminal. It doesn’t care which editor is open. That made Cursor redundant.&lt;/p&gt;
&lt;p&gt;Cursor is a VS Code fork with all the same capabilities. I used it for almost a year. Over the last month, I stopped using Cursor’s agent integration and switched to &lt;a href=&quot;https://docs.anthropic.com/en/docs/claude-code/overview&quot;&gt;Claude Code&lt;/a&gt; in the terminal, and before that, Codex CLI. Claude and Codex extensions are also available in VS Code.&lt;/p&gt;
&lt;h2 id=&quot;what-to-migrate-from-cursor-to-vs-code&quot;&gt;What to migrate from Cursor to VS Code&lt;/h2&gt;
&lt;p&gt;Three things to migrate: settings, keybindings, and extensions. The key directories for both editors on macOS are:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;What&lt;/th&gt;&lt;th&gt;Cursor location&lt;/th&gt;&lt;th&gt;VS Code location&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Settings&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/Library/Application Support/Cursor/User/settings.json&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/Library/Application Support/Code/User/settings.json&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Keybindings&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/Library/Application Support/Cursor/User/keybindings.json&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/Library/Application Support/Code/User/keybindings.json&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Extensions&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/.cursor/extensions/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/.vscode/extensions/&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2 id=&quot;migration-steps&quot;&gt;Migration steps&lt;/h2&gt;
&lt;p&gt;Close VS Code before you start. If it’s running, extension installs can conflict with VS Code’s internal updater and you’ll get errors.&lt;/p&gt;
&lt;p&gt;If you’ve used VS Code before, clean out the old data first.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -rf&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.vscode/extensions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Remove old settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.vscode/settings.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -f&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Code/User/settings.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#C2C3C5;--shiki-dark:#6B737C&quot;&gt;# Clear caches (optional, frees up space)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Code/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;rm&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -rf&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Backups&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; blob_storage&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; CachedData&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; CachedExtensionVSIXs&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; CachedProfilesData&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;  &quot;Code Cache&quot;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Cookies&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Cookies-journal&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; Crashpad&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; DawnGraphiteCache&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; DawnWebGPUCache&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  GPUCache&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; languagepacks.json&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Local Storage&quot;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; logs&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Network Persistent State&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  Preferences&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Service Worker&quot;&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Session Storage&quot;&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Shared Dictionary&quot;&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; shared_proto_db&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  SharedStorage&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; TransportSecurity&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Trust Tokens&quot;&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;Trust Tokens-journal&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;  VideoDecodeStats&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; WebStorage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next, you need to copy the settings and keybindings:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Cursor/User/settings.json&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;   ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Code/User/settings.json&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Cursor/User/keybindings.json&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;   ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Code/User/keybindings.json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;If you have any custom snippets in Cursor, don’t forget to copy those as well:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;cp&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Cursor/User/snippets/&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;    ~/Library/Application&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;\ &lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt;Support/Code/User/snippets/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Your &lt;code&gt;settings.json&lt;/code&gt; will have Cursor-specific keys that VS Code doesn’t understand. Anything prefixed with &lt;code&gt;cursor.&lt;/code&gt;. Remove them before copying.&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;cursor.cpp.disabledLanguages&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; [&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;plaintext&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &quot;scminput&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;]&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F8F8F8&quot;&gt;  &quot;cursor.cpp.enablePartialAccepts&quot;&lt;/span&gt;&lt;span style=&quot;color:#212121;--shiki-dark:#BBBBBB&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#79B8FF&quot;&gt; true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next are extensions. Install them fresh in VS Code. This ensures VS Code gets the correct platform-specific versions:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; ~/.cursor/extensions/&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; grep&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -v&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; extensions.json&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sed&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -E&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt; &apos;s/-[0-9]+\.[0-9]+\.[0-9]+.*$//&apos;&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; sort&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -u&lt;/span&gt;&lt;span style=&quot;color:#24292EFF;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D32F2F;--shiki-dark:#F97583&quot;&gt;  |&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; xargs&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -L&lt;/span&gt;&lt;span style=&quot;color:#1976D2;--shiki-dark:#F8F8F8&quot;&gt; 1&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; code&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --install-extension&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --force&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Some extensions might be Cursor-only and won’t exist on the VS Code marketplace. These include anything from &lt;code&gt;anysphere.*&lt;/code&gt;. They’ll fail to install with an error and that’s expected.&lt;/p&gt;
&lt;h2 id=&quot;use-a-claude-code-plugin-for-migration&quot;&gt;Use a Claude Code plugin for migration&lt;/h2&gt;
&lt;p&gt;After running through these steps manually, I turned them into a reusable Claude Code plugin. It includes helper scripts that handle JSONC parsing (for settings files with comments), Cursor-specific key stripping, and extension ID extraction with skip lists for Cursor-only extensions.&lt;/p&gt;
&lt;p&gt;You can install it in Claude Code:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; marketplace&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; add&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; amandeepmittal/cursor-to-vscode-migration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;/plugin&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; cursor-to-vscode-migration&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After restarting Claude Code, tell it to &lt;code&gt;migrate my setup from cursor to vscode&lt;/code&gt;. The skill walks through each step and asks for confirmation before doing anything destructive.&lt;/p&gt;
&lt;p&gt;The plugin is open source: &lt;a href=&quot;https://github.com/amandeepmittal/cursor-to-vscode-migration&quot;&gt;github.com/amandeepmittal/cursor-to-vscode-migration&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;https://amanhimself.dev/images/codex-skill-cursor-to-vscode.png&quot; alt=&quot;Codex CLI skill for cursor to vscode migration&quot; width=&quot;480&quot;&gt;</content:encoded><category>vscode</category></item><item><title>TIL about git shortlog</title><link>https://amanhimself.dev/blog/til-about-git-shortlog/</link><guid isPermaLink="true">https://amanhimself.dev/blog/til-about-git-shortlog/</guid><description>I have been using Git for all my career in the tech. I am habitual of the basic commands such as git add, commit, status, log and a few more that I use…</description><pubDate>Sun, 01 Feb 2026 03:42:51 GMT</pubDate><content:encoded>&lt;p&gt;I have been using Git for all my career in the tech. I am habitual of the basic commands such as &lt;code&gt;git add&lt;/code&gt;, &lt;code&gt;commit&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;log&lt;/code&gt; and a few more that I use consistently. Yes, until last week, I had never once used or heard about &lt;code&gt;git shortlog&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sometimes you want to know who actually did the stuff inside a repository. Or like me, at the end of each year at work, I have to compile a list of external contributors along with their contributions count.&lt;/p&gt;
&lt;p&gt;To make this happen, you don’t need a fine-grained commit-by-commit archaeology, but look at the big picture. You can pipe log through &lt;code&gt;grep&lt;/code&gt;and create a slightly complex pipeline. Or you could just use the tool that already exists on your system for exactly the purpose described previously:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; shortlog&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above command groups commits by author and lists of their commit messages. Readable? yes. Was I done? No.&lt;/p&gt;
&lt;p&gt;The command also have some useful flags that you can use. One of them is &lt;code&gt;-s&lt;/code&gt;, which gives you a summary mode. It counts the amount of commits without any commit message.&lt;/p&gt;
&lt;p&gt;Then there’s &lt;code&gt;-n&lt;/code&gt;, which sorts the number of commits in a descending order. When both of these flags are used along with &lt;code&gt;git shortlog&lt;/code&gt;, the output displayed to you looks like below:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;123 ABC&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;23  EFG&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;3   IJK&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instantly you can see the view that your stakeholder might have demanded. This goes beyond compiling a list and giving a shoutout to the contributors. When used in a new codebase, you can leverage this to understand it by talking to the top contributors who might know more about the project repository. Probably the person with over a thousand commits.&lt;/p&gt;
&lt;p&gt;You can scope it to a time range or between tags:&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes min-light min-dark&quot; style=&quot;background-color:#ffffff;--shiki-dark-bg:#1f1f1f;color:#24292eff;--shiki-dark:#b392f0; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;&quot; tabindex=&quot;0&quot; data-language=&quot;shell&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;git&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; shortlog&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; -sn&lt;/span&gt;&lt;span style=&quot;color:#2B5581;--shiki-dark:#9DB1C5&quot;&gt; --since=&lt;/span&gt;&lt;span style=&quot;color:#22863A;--shiki-dark:#FFAB70&quot;&gt;&quot;2025-01-01&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above command is particularly nice for generating contributor lists for release notes or end-of-year lists. No more manual scrolling through a git log that is long and will take plenty of your time.&lt;/p&gt;
&lt;p&gt;I think the reason I never discovered this command before is that I always reach out for &lt;code&gt;git log&lt;/code&gt; first and then on a suggestion from a a colleague, started using &lt;code&gt;grep&lt;/code&gt; when I needed to fulfill the release notes. However, Git has many commands like these under its umbrella, which might come handy in some situations.&lt;/p&gt;
&lt;p&gt;Anyway. &lt;code&gt;git shortlog -sn&lt;/code&gt;. Burn it into your brain.&lt;/p&gt;</content:encoded><category>git</category></item></channel></rss>