[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"blog-content-macbook-setup-guide-for-developers-2025-edition":3},"\u003Cp>2025 update of the MacBook Setup Guide for Developers (2024 edition).\u003C\u002Fp>\u003Chr>\u003Cp>Imho the single most important piece of software.\u003Cbr>I’ll be nearly exclusively installing the whole machine using it.\u003Cbr>\u003Cstrong>Homebrew\u003C\u002Fstrong> the package manager for mac:\u003Cbr>\u003Ca href=\"https:\u002F\u002Fbrew.sh\u002F\" rel=\"nofollow noopener\">https:\u002F\u002Fbrew.sh\u003C\u002Fa>\u003C\u002Fp>\u003Cp>Follow the instructions on the website to install it.\u003C\u002Fp>\u003Cp>After we have homebrew installing further applications is a piece of cake.\u003Cbr>Here is a list of applications I find useful and use for my daily work:\u003C\u002Fp>\u003Cp>First of all \u003Cstrong>get the most out of your terminal\u003C\u002Fstrong>:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install --cask iterm2 \nbrew install fzf\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Install ‘oh my zsh’ for the best terminal experience:\u003Cbr>\u003Ca href=\"https:\u002F\u002Fohmyz.sh\u002F#install\" rel=\"nofollow noopener\">https:\u002F\u002Fohmyz.sh\u002F#install\u003C\u002Fa>\u003C\u002Fp>\u003Cp>I like the powerlevel10k zsh plugin:\u003Cbr>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fromkatv\u002Fpowerlevel10k\" rel=\"nofollow noopener\">https:\u002F\u002Fgithub.com\u002Fromkatv\u002Fpowerlevel10k\u003C\u002Fa>\u003C\u002Fp>\u003Cp>Bonushint:\u003Cbr>Make sure to install the recommended font to get a monospace unicode font that can render all characters properly.\u003C\u002Fp>\u003Cp>\u003Cstrong>General utilities:\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install mas \nbrew install --cask shottr \nbrew install --cask rectangle \nbrew install --cask alfred \nbrew install --cask vlc \u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>VPN:\u003C\u002Fstrong>\u003Cbr>I’ve been using Tunnelblick as a VPN client, but it changes of my primary OpenVPN server made it impossible to connect, so I decided to switch to Passepartout. It’s not available via Homebrew, so I used mas to install it.\u003Cbr>Additionally I started to use Twingate as another VPN solution.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">mas search passepartout\nmas install 1433648537\n# If install does not work, you can try the purchase command\nmas purchase 1433648537\n\nmas search twingate\nmas install 1501592214\nmas purchase 1501592214\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>SSH and GPG:\u003C\u002Fstrong>\u003Cbr>If you are developing you most likely use SSH, I recommend using Secretive to install your SSH key into the secure enclave for maximum secuity of your SSH key.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install --cask secretive \nbrew install gpg\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Remote Support:\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install --cask anydesk \nbrew install --cask xquartz \nbrew install teleport\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Communication and Officetasks:\u003C\u002Fstrong>\u003Cbr>These are highly based on personal preference!\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install --cask slack\nbrew install --cask whatsapp\nbrew install --cask microsoft-office-businesspro\nbrew install --cask gimp\nbrew install --cask superlist\nbrew install --cask obsidian\nbrew install --cask synology-drive\nbrew install --cask spotify\nbrew install --cask beeper\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Tools for development:\u003C\u002Fstrong>\u003Cbr>At the moment I still prefer Chrome over Safari, change my mind!\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install --cask visual-studio-code\nbrew install --cask docker\nbrew install --cask google-chrome\nbrew install --cask studio-3t\nbrew install --cask restfox\nbrew install --cask utm\nbrew install --cask wireshark\nbrew install --cask mysqlworkbench\nbrew install ack\nbrew install jq\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Tools for kubernetes:\u003C\u002Fstrong>\u003Cbr>Meanwhile I’ve built a Kubernetes cluster using kOps and it’s a super nice tool for building clusters.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install kops\nbrew install helm\nbrew install kubernetes-cli\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>XCode:\u003C\u002Fstrong>\u003Cbr>I use xcodes to install several Xcode versions side by side.\u003Cbr>This helps to test new versions without breaking existing projects.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install aria2 \nbrew install xcodes\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Then install whatever Xcode you need.\u003Cbr>Here’s what I use for example:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">xcodes install 14.3.1 \nxcodes install 15.0.1 \nxcodes select 15.0.1 \nxcodebuild -runFirstLaunch \nsudo xcodebuild -license \nxcodebuild -downloadPlatform iOS \nxcodes runtimes install \"iOS 17.2\"\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Android development:\u003C\u002Fstrong>\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-typescript\">brew install - cask android-studio\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Flutter development:\u003C\u002Fstrong>\u003Cbr>I suggest to use a flutter version manager like fvm to be able to switch\u003Cbr>between Flutter versions across projects.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew tap leoafarias\u002Ffvm \nbrew install fvm \nfvm install 3.16.2 \nfvm install 3.10.7\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>You can then prefix your flutter commands with \u003Cstrong>fvm\u003C\u002Fstrong> and it will use your selected version.\u003C\u002Fp>\u003Cp>\u003Cstrong>Android\u002FiOS mobile development:\u003C\u002Fstrong>\u003Cbr>If you use fastlane for your app builds, I’d go for rbenv to keep\u003Cbr>ruby versions maintainable:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install rbenv \nrbenv install 3.1.4 \nrbenv local 3.1.4\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>NodeJs\u002FWeb Development:\u003C\u002Fstrong>\u003Cbr>In order to switch between nodejs versions across projects, use nvm.\u003Cbr>I always use the latest LTS version for my project, but you can ofc use any version you like.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install nvm \nnvm install --lts\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Python development:\u003C\u002Fstrong>\u003Cbr>As you can see, I like to stay away from system installed versions for all the tools, the python version is no exception.\u003Cbr>We use pyenv to keep Python versions managable.\u003Cbr>I checked my current system python verson and installed the same version via pyenv and set it as global.\u003Cbr>Then I installed more versions so I can use them as needed per project.\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew install xz \nbrew install cairo \nbrew install gobject-introspection \nbrew install pyenv \n \npyenv install 3.9.6 \npyenv global 3.9.6 \n \npyenv install 3.10.13 \npyenv install 3.12.1\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>\u003Cstrong>Brew Bundlefile:\u003C\u002Fstrong>\u003Cbr>Once you have all the apps installed, you can create a bundlefile which can be used to install the same set of applications on another Mac or just store keep the file around in case you need to reinstall and can’t get all your stuff back from a cloud backup.\u003C\u002Fp>\u003Cp>Following command will createa a file called `Brewfile` in your current directory:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew bundle dump\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>If you have a bundlefile already you can force recreation or place a new file in a different directory like this:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-lua\">brew bundle dump --force \nbrew bundle dump --file=~\u002F.private\u002FBrewfile\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>To install from a bundlefile, you can use this command:\u003C\u002Fp>\u003Cpre>\u003Ccode class=\"language-bash\">brew bundle install\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>Brew is great and the commands we’ve used so far are just the very tip of the iceberg. You can read more about brew here: \u003Ca href=\"https:\u002F\u002Fbrew.sh\u002F\" rel=\"nofollow noopener noopener\">https:\u002F\u002Fbrew.sh\u003C\u002Fa> or use your google foo, there’s a lot to learn.\u003C\u002Fp>\u003Cp>\u003Cstrong>Summary\u003C\u002Fstrong>\u003C\u002Fp>\u003Cp>Whatever language you are working with, I always suggest you use a versionmanager if available, it’s really a PITA to not have them once you start working on multiple projects that require different toolchain versions.\u003C\u002Fp>\u003Cp>I hope this helps to get you started.\u003Cbr>I certainly spent some time to get the setup “right” and asked Mac users for their favourite tools in order to end up with this list of applications.\u003C\u002Fp>\u003Cp>The installation commands are not complete, because I think there are plenty of guides out there that explain how to work with them, however if this post gets some attention, I might consider updating the instructions with some more detailed descriptions.\u003C\u002Fp>\u003Cp>You can also suggest your must-have tools in the comments and I’ll check them out.\u003C\u002Fp>\u003Cp>Cheers to 2025!\u003C\u002Fp>"]