{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/eugeneyan-com/2024-11-17-my-minimal-macbook-pro-setup-guide/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "I just upgraded my personal laptop from a 2019 Intel MacBook Pro to an M4 MacBook Pro. Like all my new devices, instead of restoring from a backup, I try to Marie Kondo my digital life and start from a clean slate. This also lets me reexamine my existing tools and explore new options. Here’s my minimal Mac setup guide if you want to follow along.\n\n- [MacOS settings](https://eugeneyan.com//writing/mac-setup/#macos-settings)\n- [Basic developer tools](https://eugeneyan.com//writing/mac-setup/#basic-developer-tools)\n- [Research, writing, development](https://eugeneyan.com//writing/mac-setup/#research-writing-development)\n- [Productivity and quality of life](https://eugeneyan.com//writing/mac-setup/#productivity-and-quality-of-life)\n- [Entertainment and communications](https://eugeneyan.com//writing/mac-setup/#entertainment-and-communications)\n\n## MacOS settings\n\n- **Apple ID**: Sign in\n- **MacOS update**: Settings -> General -> Software Update\n- **Keyboard**: Switch to Dvorak, key repeat = fast, delay until repeat = short\n- **Trackpad**: Max tracking speed, tap to click, click = light, natural scroll = off\n- **Displays**: Switch to Apple Display (p3-600) for slightly better battery life\n- **Finder**: Show Library, show hidden files, show path to dir\n\n```bash\n# show Library folder\nchflags nohidden ~/Library\n\n# show hidden files\ndefaults write com.apple.finder AppleShowAllFiles YES\n\n# add pathbar to title\ndefaults write com.apple.finder _FXShowPosixPathInTitle -bool true\n\n# restart finder\nkillall Finder;\n```\n\n- **Screenshots** (to clipboard): `CMD + SHIFT + F5` and change setting in “Option” menu. This lets me screenshot and paste into docs, chats, social media, etc directly (without saving a separate file). If I need to save it, open Preview and `CMD + N`.\n- **Dock**: Hide and show dock, reduce size, remove most default apps\n\n## Basic developer tools\n\n- **Homebrew** (might take a while as it also installs Xcode)\n\n```bash\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n\n# add brew to default shell path\necho >> /Users/eugeneyan/.zprofile\necho 'eval \"$(/opt/homebrew/bin/brew shellenv)\"' >> /Users/eugeneyan/.zprofile\neval \"$(/opt/homebrew/bin/brew shellenv)\"\n\n# check for updates\nbrew update\n```\n\n- **Terminal**: Trying Warp instead of my usual iTerm. (If you use [my referral code](https://app.warp.dev/referral/D9WZNJ) I can get some swag—thank you!)\n\n```bash\nbrew install --cask warp\nbrew install --cask font-inconsolata-for-powerline\n# Update warp font: Settings -> Appearance -> Terminal font\n```\n\n- **Shell**: Trying Fish instead of my usual Oh My Zsh\n\n```bash\nbrew install fish\n\n# make fish default shell\necho $(which fish) | sudo tee -a /etc/shells\nchsh -s $(which fish)\n\n# add brew to fish path\necho >> /Users/eugeneyan/.config/fish/config.fish\necho 'eval \"$(/opt/homebrew/bin/brew shellenv)\"' >> /Users/eugeneyan/.config/fish/config.fish\neval \"$(/opt/homebrew/bin/brew shellenv)\"\n```\n\n- **Htop**: A better top\n\n```bash\nbrew install htop\n```\n\n- **New SSH keys**\n\n```bash\nssh-keygen -t ed25519 -C \"your_email@example.com\"\n\neval \"$(ssh-agent -s)\"\ntouch ~/.ssh/config\nopen ~/.ssh/config\n\n# add to config\nHost github.com\n  AddKeysToAgent yes\n  UseKeychain yes\n  IdentityFile ~/.ssh/id_ed25519\n```\n\nAlso see the Github docs to [generate a new ssh key and add to ssh agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent), and [add a new ssh key to Github account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).\n\n- **Git**\n\n```bash\nbrew install git\ngit config --global init.defaultBranch main\ngit config --global user.name \"eugeneyan\"\ngit config --global user.email hi@eugeneyan.com\n```\n\n## Research, writing, development\n\n- **Obsidian**: All my notes, writing, CRM, etc. live here\n\n```bash\nbrew install --cask obsidian\n\n# clone obsidian vault (i use obsidian-git for syncing)\ngit clone git@github.com:<github-username>/<obsidian-vault>.git\n```\n\n- **Zotero**: Papers and annotations. Zotero has a nice PDF reader and markup tools, and also has an iPad app that syncs seamlessly. (Previously Google Drive)\n\n```bash\nbrew install --cask zotero\n# enable zotero plugin in safari\n```\n\n- **Cursor**: Daily driver for prototyping and building. (Previously vscode)\n\n```bash\nbrew install --cask cursor\n# old machine: cmd+shift+p > export profile\n# new machine: cmd+shift+p > import profile\n```\n\n- **Sublime**: Simple code and text edits\n\n```bash\nbrew install --cask sublime-text\n```\n\n- **Chrome**: For web development\n\n```bash\nbrew install --cask google-chrome\n```\n\n- **Postgres**: To prototype web apps that need persistent storage\n\n```bash\nbrew install postgresql@16\n```\n\n- **Python, JS, and Ruby**\n\n```bash\n# very fast python package manager\nbrew install uv\n\n# install the latest python\nuv python install 3.12\n```\n\n```bash\nbrew install node\nbrew install nvm\n\n# still deciding between pnpm and bun\nbrew install pnpm\nbrew install oven-sh/bun/bun\n```\n\n```bash\nbrew install chruby-fish ruby-install ruby-build\nbrew install rbenv\n\n# workaround for fish shell\nset --universal fish_user_paths $fish_user_paths ~/.rbenv/shims\nrbenv global 3.3.5\nrbenv rehash\n```\n\n- **Docker**\n\n```bash\nbrew install --cask docker\n```\n\n- **Ollama + Open WebUI**: Running local models via a nice interface\n\n```bash\nbrew install ollama\nollama serve\n\n# in another terminal, pull some models to try\nollama pull llama3.2 nemotron  # 3B and 70B respectively\n```\n\n```bash\nuv tool install open-webui\nuv tool run open-webui serve\n```\n\n## Productivity and quality of life\n\n- **Raycast**: A better spotlight\n\n```bash\nbrew install --cask raycast\n```\n\n- **Rectangle**: Window management.\n\n```bash\nbrew install --cask rectangle\n```\n\nWhile Raycast already has window management, Rectangle lets you hit the hotkey again (e.g., `CTRL + CMD + LEFT`) to resize windows from 1/3 to 1/2 to 2/3. Great for widescreens.\n\n![Rectangle settings for resizing windows](https://eugeneyan.com/assets/rectangle.webp \"Rectangle settings for resizing windows\")\n\nRectangle settings for resizing windows\n\n> Update: Turns out Raycast has this too ([h/t @mwheatfill](https://x.com/mwheatfill/status/1859094246101279085)), and also has presets for Rectangle hotkeys. I’ve since moved to Raycast window management.\n\n- **Wispr Flow**: [Download](https://www.flowvoice.ai/download) and set output language = English. Speech-to-text. Returns accurate transcripts with decent punctuation and formatting. (If you use [my referral link](https://www.flowvoice.ai/?referral=EUGENE11) you earn good karma and I get $15 in credits! )\n\n- **Google Drive**: Syncing documents, files, media, etc.\n\n```bash\nbrew install --cask google-drive\n```\n\n- **Stats + Ice**: Adding system stats to menu bar and customizing the menu bar\n\n```bash\nbrew install stats\nbrew install jordanbaird-ice\n```\n\n- **Logi Options+** [Download](https://www.logitech.com/en-us/software/logi-options-plus.html) and sign in to load saved settings for my [MX Ergo](https://www.logitech.com/en-us/products/mice/mx-ergo-wireless-trackball-mouse.html).\n\n## Entertainment and communications\n\n- **Media**\n\n```bash\nbrew install --cask vlc\nbrew install --cask spotify\n```\n\n- **Chat**\n\n```bash\nbrew install --cask telegram\nbrew install --cask discord\nbrew install --cask slack\n```\n\n## References\n\n- [Tweet thread with lots of great suggestions](https://x.com/eugeneyan/status/1857234166800367812)\n- [Swyx’s Mac setup](https://www.swyx.io/new-mac-setup)\n- [Sourabh Bajaj’s Mac Setup](https://sourabhbajaj.com/mac-setup/)\n- [Robin Wieruch’s Mac Setup](https://www.robinwieruch.de/mac-setup-web-development/)\n- [Tania Rascia’s Mac Setup](https://www.taniarascia.com/setting-up-a-brand-new-mac-for-development/)\n- [Thorsten Ball’s Mac Setup](https://registerspill.thorstenball.com/p/new-year-new-job-new-machine)\n- [Mimansa Jaiswal’s Mac Setup](https://mimansajaiswal.github.io/posts/mac-softwares/)\n\nIf you found this useful, please cite this write-up as:\n\n> Yan, Ziyou. (Nov 2024). My Minimal MacBook Pro Setup Guide. eugeneyan.com. https://eugeneyan.com/writing/mac-setup/.\n\nor\n\n```\n@article{yan2024macsetup,\n  title   = {My Minimal MacBook Pro Setup Guide},\n  author  = {Yan, Ziyou},\n  journal = {eugeneyan.com},\n  year    = {2024},\n  month   = {Nov},\n  url     = {https://eugeneyan.com/writing/mac-setup/}\n}\n```\n\nShare on:\n\n![](https://eugeneyan.com/assets/icon-twitter.svg)\n\n![](https://eugeneyan.com/assets/icon-linkedin.svg)\n\n![](https://eugeneyan.com/assets/bluesky.svg)\n\n![](https://eugeneyan.com/assets/icon-facebook.svg)\n\n![](https://eugeneyan.com/assets/icon-mail.svg)\n\nJoin **11,800+** readers getting updates on machine learning, RecSys, LLMs, and engineering.\n",
  "authors": [],
  "captured_at": "2026-09-27T19:29:15.293681927+00:00",
  "category": "programming",
  "content_html": "<p>I just upgraded my personal laptop from a 2019 Intel MacBook Pro to an M4 MacBook Pro. Like all my new devices, instead of restoring from a backup, I try to Marie Kondo my digital life and start from a clean slate. This also lets me reexamine my existing tools and explore new options. Here’s my minimal Mac setup guide if you want to follow along.</p>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://eugeneyan.com//writing/mac-setup/#macos-settings\">MacOS settings</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://eugeneyan.com//writing/mac-setup/#basic-developer-tools\">Basic developer tools</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://eugeneyan.com//writing/mac-setup/#research-writing-development\">Research, writing, development</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://eugeneyan.com//writing/mac-setup/#productivity-and-quality-of-life\">Productivity and quality of life</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://eugeneyan.com//writing/mac-setup/#entertainment-and-communications\">Entertainment and communications</a></li>\n</ul>\n<h2>MacOS settings</h2>\n<ul>\n<li><strong>Apple ID</strong>: Sign in</li>\n<li><strong>MacOS update</strong>: Settings -&gt; General -&gt; Software Update</li>\n<li><strong>Keyboard</strong>: Switch to Dvorak, key repeat = fast, delay until repeat = short</li>\n<li><strong>Trackpad</strong>: Max tracking speed, tap to click, click = light, natural scroll = off</li>\n<li><strong>Displays</strong>: Switch to Apple Display (p3-600) for slightly better battery life</li>\n<li><strong>Finder</strong>: Show Library, show hidden files, show path to dir</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> show Library folder</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">chflags</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> nohidden <span class=\"syntax-meta syntax-group syntax-expansion syntax-tilde\"><span class=\"syntax-variable syntax-language syntax-tilde syntax-shell\">~</span></span>/Library</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> show hidden files</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">defaults</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> write com.apple.finder AppleShowAllFiles YES</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> add pathbar to title</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">defaults</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> write com.apple.finder _FXShowPosixPathInTitle<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>bool</span> true</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> restart finder</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">killall</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> Finder</span><span class=\"syntax-keyword syntax-operator syntax-logical syntax-continue syntax-shell\">;</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Screenshots</strong> (to clipboard): <code>CMD + SHIFT + F5</code> and change setting in “Option” menu. This lets me screenshot and paste into docs, chats, social media, etc directly (without saving a separate file). If I need to save it, open Preview and <code>CMD + N</code>.</li>\n<li><strong>Dock</strong>: Hide and show dock, reduce size, remove most default apps</li>\n</ul>\n<h2>Basic developer tools</h2>\n<ul>\n<li><strong>Homebrew</strong> (might take a while as it also installs Xcode)</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">/bin/bash</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"><span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>c</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span><span class=\"syntax-meta syntax-group syntax-expansion syntax-command syntax-parens syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-begin syntax-shell\">(</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">curl</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"><span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>fsSL</span> https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-end syntax-shell\">)</span></span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> add brew to default shell path</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-echo syntax-shell\">echo</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;&gt;</span> /Users/eugeneyan/.zprofile</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-echo syntax-shell\">echo</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-string syntax-quoted syntax-single syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&#39;</span>eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&#39;</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;&gt;</span> /Users/eugeneyan/.zprofile</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-eval syntax-shell\">eval</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span><span class=\"syntax-meta syntax-group syntax-expansion syntax-command syntax-parens syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-begin syntax-shell\">(</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">/opt/homebrew/bin/brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> shellenv</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-end syntax-shell\">)</span></span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> check for updates</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> update</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Terminal</strong>: Trying Warp instead of my usual iTerm. (If you use <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://app.warp.dev/referral/D9WZNJ\">my referral code</a> I can get some swag—thank you!)</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> warp</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> font-inconsolata-for-powerline</span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> Update warp font: Settings -&gt; Appearance -&gt; Terminal font</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span></span></span></code></pre>\n<ul>\n<li><strong>Shell</strong>: Trying Fish instead of my usual Oh My Zsh</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install fish</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> make fish default shell</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-echo syntax-shell\">echo</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-meta syntax-group syntax-expansion syntax-command syntax-parens syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-begin syntax-shell\">(</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">which</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> fish</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-end syntax-shell\">)</span></span></span> <span class=\"syntax-keyword syntax-operator syntax-logical syntax-pipe syntax-shell\">|</span> <span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">sudo</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> tee<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>a</span> /etc/shells</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">chsh</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"><span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>s</span> <span class=\"syntax-meta syntax-group syntax-expansion syntax-command syntax-parens syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-begin syntax-shell\">(</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">which</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> fish</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-end syntax-shell\">)</span></span></span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> add brew to fish path</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-echo syntax-shell\">echo</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;&gt;</span> /Users/eugeneyan/.config/fish/config.fish</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-echo syntax-shell\">echo</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-string syntax-quoted syntax-single syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&#39;</span>eval &quot;$(/opt/homebrew/bin/brew shellenv)&quot;<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&#39;</span></span> <span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;&gt;</span> /Users/eugeneyan/.config/fish/config.fish</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-eval syntax-shell\">eval</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span><span class=\"syntax-meta syntax-group syntax-expansion syntax-command syntax-parens syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-begin syntax-shell\">(</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">/opt/homebrew/bin/brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> shellenv</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-end syntax-shell\">)</span></span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n</span></span></code></pre>\n<ul>\n<li><strong>Htop</strong>: A better top</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install htop</span>\n</span></span></code></pre>\n<ul>\n<li><strong>New SSH keys</strong></li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">ssh-keygen</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"><span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>t</span> ed25519<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>C</span> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span>your_email@example.com<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-eval syntax-shell\">eval</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span><span class=\"syntax-meta syntax-group syntax-expansion syntax-command syntax-parens syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-begin syntax-shell\">(</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">ssh-agent</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"><span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> -</span>s</span></span><span class=\"syntax-punctuation syntax-section syntax-parens syntax-end syntax-shell\">)</span></span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">touch</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-meta syntax-group syntax-expansion syntax-tilde\"><span class=\"syntax-variable syntax-language syntax-tilde syntax-shell\">~</span></span>/.ssh/config</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">open</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-meta syntax-group syntax-expansion syntax-tilde\"><span class=\"syntax-variable syntax-language syntax-tilde syntax-shell\">~</span></span>/.ssh/config</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> add to config</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">Host</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> github.com</span>\n  <span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">AddKeysToAgent</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> yes</span>\n  <span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">UseKeychain</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> yes</span>\n  <span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">IdentityFile</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> <span class=\"syntax-meta syntax-group syntax-expansion syntax-tilde\"><span class=\"syntax-variable syntax-language syntax-tilde syntax-shell\">~</span></span>/.ssh/id_ed25519</span>\n</span></span></code></pre>\n<p>Also see the Github docs to <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent\">generate a new ssh key and add to ssh agent</a>, and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account\">add a new ssh key to Github account</a>.</p>\n<ul>\n<li><strong>Git</strong></li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install git</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">git</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> config<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>global</span> init.defaultBranch main</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">git</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> config<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>global</span> user.name <span class=\"syntax-string syntax-quoted syntax-double syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-shell\">&quot;</span>eugeneyan<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-shell\">&quot;</span></span></span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">git</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> config<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>global</span> user.email hi@eugeneyan.com</span>\n</span></span></code></pre>\n<h2>Research, writing, development</h2>\n<ul>\n<li><strong>Obsidian</strong>: All my notes, writing, CRM, etc. live here</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> obsidian</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> clone obsidian vault (i use obsidian-git for syncing)</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">git</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> clone git@github.com:<span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&lt;</span>github-username<span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;</span>/<span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&lt;</span>obsidian-vault<span class=\"syntax-keyword syntax-operator syntax-assignment syntax-redirection syntax-shell\">&gt;</span>.git</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Zotero</strong>: Papers and annotations. Zotero has a nice PDF reader and markup tools, and also has an iPad app that syncs seamlessly. (Previously Google Drive)</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> zotero</span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> enable zotero plugin in safari</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span></span></span></code></pre>\n<ul>\n<li><strong>Cursor</strong>: Daily driver for prototyping and building. (Previously vscode)</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> cursor</span>\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> old machine: cmd+shift+p &gt; export profile</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> new machine: cmd+shift+p &gt; import profile</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span></span></span></code></pre>\n<ul>\n<li><strong>Sublime</strong>: Simple code and text edits</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> sublime-text</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Chrome</strong>: For web development</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> google-chrome</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Postgres</strong>: To prototype web apps that need persistent storage</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install postgresql@16</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Python, JS, and Ruby</strong></li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> very fast python package manager</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install uv</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> install the latest python</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">uv</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> python install 3.12</span>\n</span></span></code></pre>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install node</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install nvm</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> still deciding between pnpm and bun</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install pnpm</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install oven-sh/bun/bun</span>\n</span></span></code></pre>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install chruby-fish ruby-install ruby-build</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install rbenv</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> workaround for fish shell</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-set syntax-shell\">set</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> --universal fish_user_paths <span class=\"syntax-meta syntax-group syntax-expansion syntax-parameter syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-variable syntax-shell\">$</span><span class=\"syntax-variable syntax-other syntax-readwrite syntax-shell\">fish_user_paths</span></span> <span class=\"syntax-meta syntax-group syntax-expansion syntax-tilde\"><span class=\"syntax-variable syntax-language syntax-tilde syntax-shell\">~</span></span>/.rbenv/shims</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">rbenv</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> global 3.3.5</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">rbenv</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> rehash</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Docker</strong></li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> docker</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Ollama + Open WebUI</strong>: Running local models via a nice interface</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install ollama</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">ollama</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> serve</span>\n\n<span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> in another terminal, pull some models to try</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">ollama</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> pull llama3.2 nemotron  <span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> 3B and 70B respectively</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span></span></span></span></code></pre>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">uv</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> tool install open-webui</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">uv</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> tool run open-webui serve</span>\n</span></span></code></pre>\n<h2>Productivity and quality of life</h2>\n<ul>\n<li><strong>Raycast</strong>: A better spotlight</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> raycast</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Rectangle</strong>: Window management.</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> rectangle</span>\n</span></span></code></pre>\n<p>While Raycast already has window management, Rectangle lets you hit the hotkey again (e.g., <code>CTRL + CMD + LEFT</code>) to resize windows from 1/3 to 1/2 to 2/3. Great for widescreens.</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://eugeneyan.com/assets/rectangle.webp\" alt=\"Rectangle settings for resizing windows\" title=\"Rectangle settings for resizing windows\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>Rectangle settings for resizing windows</p>\n<blockquote>\n<p>Update: Turns out Raycast has this too (<a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://x.com/mwheatfill/status/1859094246101279085\">h/t @mwheatfill</a>), and also has presets for Rectangle hotkeys. I’ve since moved to Raycast window management.</p>\n</blockquote>\n<ul>\n<li>\n<p><strong>Wispr Flow</strong>: <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.flowvoice.ai/download\">Download</a> and set output language = English. Speech-to-text. Returns accurate transcripts with decent punctuation and formatting. (If you use <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.flowvoice.ai/?referral=EUGENE11\">my referral link</a> you earn good karma and I get $15 in credits! )</p>\n</li>\n<li>\n<p><strong>Google Drive</strong>: Syncing documents, files, media, etc.</p>\n</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> google-drive</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Stats + Ice</strong>: Adding system stats to menu bar and customizing the menu bar</li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install stats</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install jordanbaird-ice</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Logi Options+</strong> <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.logitech.com/en-us/software/logi-options-plus.html\">Download</a> and sign in to load saved settings for my <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.logitech.com/en-us/products/mice/mx-ergo-wireless-trackball-mouse.html\">MX Ergo</a>.</li>\n</ul>\n<h2>Entertainment and communications</h2>\n<ul>\n<li><strong>Media</strong></li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> vlc</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> spotify</span>\n</span></span></code></pre>\n<ul>\n<li><strong>Chat</strong></li>\n</ul>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> telegram</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> discord</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">brew</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> install<span class=\"syntax-variable syntax-parameter syntax-option syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-parameter syntax-shell\"> --</span>cask</span> slack</span>\n</span></span></code></pre>\n<h2>References</h2>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://x.com/eugeneyan/status/1857234166800367812\">Tweet thread with lots of great suggestions</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.swyx.io/new-mac-setup\">Swyx’s Mac setup</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://sourabhbajaj.com/mac-setup/\">Sourabh Bajaj’s Mac Setup</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.robinwieruch.de/mac-setup-web-development/\">Robin Wieruch’s Mac Setup</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://www.taniarascia.com/setting-up-a-brand-new-mac-for-development/\">Tania Rascia’s Mac Setup</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://registerspill.thorstenball.com/p/new-year-new-job-new-machine\">Thorsten Ball’s Mac Setup</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://mimansajaiswal.github.io/posts/mac-softwares/\">Mimansa Jaiswal’s Mac Setup</a></li>\n</ul>\n<p>If you found this useful, please cite this write-up as:</p>\n<blockquote>\n<p>Yan, Ziyou. (Nov 2024). My Minimal MacBook Pro Setup Guide. eugeneyan.com. <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://eugeneyan.com/writing/mac-setup/\">https://eugeneyan.com/writing/mac-setup/</a>.</p>\n</blockquote>\n<p>or</p>\n<pre><code><span class=\"code-snippet\">@article{yan2024macsetup,\n  title   = {My Minimal MacBook Pro Setup Guide},\n  author  = {Yan, Ziyou},\n  journal = {eugeneyan.com},\n  year    = {2024},\n  month   = {Nov},\n  url     = {https://eugeneyan.com/writing/mac-setup/}\n}\n</span></code></pre>\n<p>Share on:</p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://eugeneyan.com/assets/icon-twitter.svg\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://eugeneyan.com/assets/icon-linkedin.svg\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://eugeneyan.com/assets/bluesky.svg\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://eugeneyan.com/assets/icon-facebook.svg\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://eugeneyan.com/assets/icon-mail.svg\" alt=\"\" loading=\"lazy\" decoding=\"async\" fetchpriority=\"low\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></p>\n<p>Join <strong>11,800+</strong> readers getting updates on machine learning, RecSys, LLMs, and engineering.</p>\n",
  "content_markdown": "I just upgraded my personal laptop from a 2019 Intel MacBook Pro to an M4 MacBook Pro. Like all my new devices, instead of restoring from a backup, I try to Marie Kondo my digital life and start from a clean slate. This also lets me reexamine my existing tools and explore new options. Here’s my minimal Mac setup guide if you want to follow along.\n\n- [MacOS settings](https://eugeneyan.com//writing/mac-setup/#macos-settings)\n- [Basic developer tools](https://eugeneyan.com//writing/mac-setup/#basic-developer-tools)\n- [Research, writing, development](https://eugeneyan.com//writing/mac-setup/#research-writing-development)\n- [Productivity and quality of life](https://eugeneyan.com//writing/mac-setup/#productivity-and-quality-of-life)\n- [Entertainment and communications](https://eugeneyan.com//writing/mac-setup/#entertainment-and-communications)\n\n## MacOS settings\n\n- **Apple ID**: Sign in\n- **MacOS update**: Settings -> General -> Software Update\n- **Keyboard**: Switch to Dvorak, key repeat = fast, delay until repeat = short\n- **Trackpad**: Max tracking speed, tap to click, click = light, natural scroll = off\n- **Displays**: Switch to Apple Display (p3-600) for slightly better battery life\n- **Finder**: Show Library, show hidden files, show path to dir\n\n```bash\n# show Library folder\nchflags nohidden ~/Library\n\n# show hidden files\ndefaults write com.apple.finder AppleShowAllFiles YES\n\n# add pathbar to title\ndefaults write com.apple.finder _FXShowPosixPathInTitle -bool true\n\n# restart finder\nkillall Finder;\n```\n\n- **Screenshots** (to clipboard): `CMD + SHIFT + F5` and change setting in “Option” menu. This lets me screenshot and paste into docs, chats, social media, etc directly (without saving a separate file). If I need to save it, open Preview and `CMD + N`.\n- **Dock**: Hide and show dock, reduce size, remove most default apps\n\n## Basic developer tools\n\n- **Homebrew** (might take a while as it also installs Xcode)\n\n```bash\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n\n# add brew to default shell path\necho >> /Users/eugeneyan/.zprofile\necho 'eval \"$(/opt/homebrew/bin/brew shellenv)\"' >> /Users/eugeneyan/.zprofile\neval \"$(/opt/homebrew/bin/brew shellenv)\"\n\n# check for updates\nbrew update\n```\n\n- **Terminal**: Trying Warp instead of my usual iTerm. (If you use [my referral code](https://app.warp.dev/referral/D9WZNJ) I can get some swag—thank you!)\n\n```bash\nbrew install --cask warp\nbrew install --cask font-inconsolata-for-powerline\n# Update warp font: Settings -> Appearance -> Terminal font\n```\n\n- **Shell**: Trying Fish instead of my usual Oh My Zsh\n\n```bash\nbrew install fish\n\n# make fish default shell\necho $(which fish) | sudo tee -a /etc/shells\nchsh -s $(which fish)\n\n# add brew to fish path\necho >> /Users/eugeneyan/.config/fish/config.fish\necho 'eval \"$(/opt/homebrew/bin/brew shellenv)\"' >> /Users/eugeneyan/.config/fish/config.fish\neval \"$(/opt/homebrew/bin/brew shellenv)\"\n```\n\n- **Htop**: A better top\n\n```bash\nbrew install htop\n```\n\n- **New SSH keys**\n\n```bash\nssh-keygen -t ed25519 -C \"your_email@example.com\"\n\neval \"$(ssh-agent -s)\"\ntouch ~/.ssh/config\nopen ~/.ssh/config\n\n# add to config\nHost github.com\n  AddKeysToAgent yes\n  UseKeychain yes\n  IdentityFile ~/.ssh/id_ed25519\n```\n\nAlso see the Github docs to [generate a new ssh key and add to ssh agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent), and [add a new ssh key to Github account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account).\n\n- **Git**\n\n```bash\nbrew install git\ngit config --global init.defaultBranch main\ngit config --global user.name \"eugeneyan\"\ngit config --global user.email hi@eugeneyan.com\n```\n\n## Research, writing, development\n\n- **Obsidian**: All my notes, writing, CRM, etc. live here\n\n```bash\nbrew install --cask obsidian\n\n# clone obsidian vault (i use obsidian-git for syncing)\ngit clone git@github.com:<github-username>/<obsidian-vault>.git\n```\n\n- **Zotero**: Papers and annotations. Zotero has a nice PDF reader and markup tools, and also has an iPad app that syncs seamlessly. (Previously Google Drive)\n\n```bash\nbrew install --cask zotero\n# enable zotero plugin in safari\n```\n\n- **Cursor**: Daily driver for prototyping and building. (Previously vscode)\n\n```bash\nbrew install --cask cursor\n# old machine: cmd+shift+p > export profile\n# new machine: cmd+shift+p > import profile\n```\n\n- **Sublime**: Simple code and text edits\n\n```bash\nbrew install --cask sublime-text\n```\n\n- **Chrome**: For web development\n\n```bash\nbrew install --cask google-chrome\n```\n\n- **Postgres**: To prototype web apps that need persistent storage\n\n```bash\nbrew install postgresql@16\n```\n\n- **Python, JS, and Ruby**\n\n```bash\n# very fast python package manager\nbrew install uv\n\n# install the latest python\nuv python install 3.12\n```\n\n```bash\nbrew install node\nbrew install nvm\n\n# still deciding between pnpm and bun\nbrew install pnpm\nbrew install oven-sh/bun/bun\n```\n\n```bash\nbrew install chruby-fish ruby-install ruby-build\nbrew install rbenv\n\n# workaround for fish shell\nset --universal fish_user_paths $fish_user_paths ~/.rbenv/shims\nrbenv global 3.3.5\nrbenv rehash\n```\n\n- **Docker**\n\n```bash\nbrew install --cask docker\n```\n\n- **Ollama + Open WebUI**: Running local models via a nice interface\n\n```bash\nbrew install ollama\nollama serve\n\n# in another terminal, pull some models to try\nollama pull llama3.2 nemotron  # 3B and 70B respectively\n```\n\n```bash\nuv tool install open-webui\nuv tool run open-webui serve\n```\n\n## Productivity and quality of life\n\n- **Raycast**: A better spotlight\n\n```bash\nbrew install --cask raycast\n```\n\n- **Rectangle**: Window management.\n\n```bash\nbrew install --cask rectangle\n```\n\nWhile Raycast already has window management, Rectangle lets you hit the hotkey again (e.g., `CTRL + CMD + LEFT`) to resize windows from 1/3 to 1/2 to 2/3. Great for widescreens.\n\n![Rectangle settings for resizing windows](https://eugeneyan.com/assets/rectangle.webp \"Rectangle settings for resizing windows\")\n\nRectangle settings for resizing windows\n\n> Update: Turns out Raycast has this too ([h/t @mwheatfill](https://x.com/mwheatfill/status/1859094246101279085)), and also has presets for Rectangle hotkeys. I’ve since moved to Raycast window management.\n\n- **Wispr Flow**: [Download](https://www.flowvoice.ai/download) and set output language = English. Speech-to-text. Returns accurate transcripts with decent punctuation and formatting. (If you use [my referral link](https://www.flowvoice.ai/?referral=EUGENE11) you earn good karma and I get $15 in credits! )\n\n- **Google Drive**: Syncing documents, files, media, etc.\n\n```bash\nbrew install --cask google-drive\n```\n\n- **Stats + Ice**: Adding system stats to menu bar and customizing the menu bar\n\n```bash\nbrew install stats\nbrew install jordanbaird-ice\n```\n\n- **Logi Options+** [Download](https://www.logitech.com/en-us/software/logi-options-plus.html) and sign in to load saved settings for my [MX Ergo](https://www.logitech.com/en-us/products/mice/mx-ergo-wireless-trackball-mouse.html).\n\n## Entertainment and communications\n\n- **Media**\n\n```bash\nbrew install --cask vlc\nbrew install --cask spotify\n```\n\n- **Chat**\n\n```bash\nbrew install --cask telegram\nbrew install --cask discord\nbrew install --cask slack\n```\n\n## References\n\n- [Tweet thread with lots of great suggestions](https://x.com/eugeneyan/status/1857234166800367812)\n- [Swyx’s Mac setup](https://www.swyx.io/new-mac-setup)\n- [Sourabh Bajaj’s Mac Setup](https://sourabhbajaj.com/mac-setup/)\n- [Robin Wieruch’s Mac Setup](https://www.robinwieruch.de/mac-setup-web-development/)\n- [Tania Rascia’s Mac Setup](https://www.taniarascia.com/setting-up-a-brand-new-mac-for-development/)\n- [Thorsten Ball’s Mac Setup](https://registerspill.thorstenball.com/p/new-year-new-job-new-machine)\n- [Mimansa Jaiswal’s Mac Setup](https://mimansajaiswal.github.io/posts/mac-softwares/)\n\nIf you found this useful, please cite this write-up as:\n\n> Yan, Ziyou. (Nov 2024). My Minimal MacBook Pro Setup Guide. eugeneyan.com. https://eugeneyan.com/writing/mac-setup/.\n\nor\n\n```\n@article{yan2024macsetup,\n  title   = {My Minimal MacBook Pro Setup Guide},\n  author  = {Yan, Ziyou},\n  journal = {eugeneyan.com},\n  year    = {2024},\n  month   = {Nov},\n  url     = {https://eugeneyan.com/writing/mac-setup/}\n}\n```\n\nShare on:\n\n![](https://eugeneyan.com/assets/icon-twitter.svg)\n\n![](https://eugeneyan.com/assets/icon-linkedin.svg)\n\n![](https://eugeneyan.com/assets/bluesky.svg)\n\n![](https://eugeneyan.com/assets/icon-facebook.svg)\n\n![](https://eugeneyan.com/assets/icon-mail.svg)\n\nJoin **11,800+** readers getting updates on machine learning, RecSys, LLMs, and engineering.\n",
  "dateCreated": "2026-09-27T19:29:15.293681927+00:00",
  "date_created": "2024-11-17T00:00:00+00:00",
  "date_modified": "2024-11-17T00:00:00+00:00",
  "date_published": "2024-11-17T00:00:00+00:00",
  "description": "Setting up my new MacBook Pro from scratch",
  "external_url": "https://eugeneyan.com//writing/mac-setup/",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/eugeneyan-com/2024/11/2024-11-17-my-minimal-macbook-pro-setup-guide.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/eugeneyan-com/2024/11/2024-11-17-my-minimal-macbook-pro-setup-guide.md"
  },
  "id": "urn:aggr:item:6e35d31adced3fecbfc65234f48f21f4874e8269",
  "isBasedOn": {
    "@id": "https://eugeneyan.com//writing/mac-setup/"
  },
  "mainEntity": {
    "@id": "https://eugeneyan.com//writing/mac-setup/",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/eugeneyan-com/2024-11-17-my-minimal-macbook-pro-setup-guide/#webpage"
    },
    "dateModified": "2024-11-17T00:00:00+00:00",
    "datePublished": "2024-11-17T00:00:00+00:00",
    "headline": "My Minimal MacBook Pro Setup Guide",
    "timeRequired": "PT5M",
    "url": "https://eugeneyan.com//writing/mac-setup/",
    "wordCount": 981
  },
  "name": "Archived snapshot: My Minimal MacBook Pro Setup Guide",
  "preview": null,
  "reading_minutes": 5,
  "replicated_at": null,
  "source": "eugeneyan-com",
  "source_name": "Eugene Yan",
  "summary": "Setting up my new MacBook Pro from scratch",
  "tags": [
    "engineering",
    "misc"
  ],
  "temporalCoverage": "2026-09-27T19:29:15.293681927+00:00",
  "title": "My Minimal MacBook Pro Setup Guide",
  "url": "https://aggr.aymericbeaumet.com/items/eugeneyan-com/2024-11-17-my-minimal-macbook-pro-setup-guide/",
  "word_count": 981
}