Last Updated: 01/03/2025
A running list of software and preferences for my development machine.
- Setting Up a New Mac
First thing you need to do, on any OS actually, is update the system! For that: Apple Icon > About This Mac then Software Update....
I recommend checking that basic security settings are enabled. You will be happy to have done so if ever your Mac is lost or stolen.
In Apple Icon > System Preferences:
- Users & Groups: If you haven't already set a password for your user during the initial set up, you should do so now
- Security & Privacy > General: Require password immediately after sleep or screen saver begins (you can keep a grace period of a couple minutes if you prefer, but I like to know that my computer locks as soon as I close it)
- Security & Privacy > FileVault: Make sure FileVault disk encryption is enabled
- iCloud: If you haven't already done so during set up, enable Find My Mac
- Enable Firewall settings
If this is a new computer, there are a couple of tweaks I like to make to the System Preferences. Feel free to follow these, or to ignore them, depending on your personal preferences.
In Apple Icon > System Preferences:
- Trackpad > Tap to click
- Keyboard > Key Repeat > Fast (all the way to the right)
- Keyboard > Delay Until Repeat > Short (all the way to the right)
- Dock > Automatically hide and show the Dock
Screen Saver
Start after 5 minutes. Hot Corners set to lower left hand side ("Start Screen Saver").
Dock
- Automatically hide and show Dock
- Show indicators for open applications
Sharing
- Change computer name
- Make sure all file sharing is disabled
Defaults
# Show Library folder
chflags nohidden ~/Library
# Show hidden files
defaults write com.apple.finder AppleShowAllFiles YES
# Show path bar
defaults write com.apple.finder ShowPathbar -bool true
# Show status bar
defaults write com.apple.finder ShowStatusBar -bool true
Boot up Terminal and run this command:
xcode-select --install
Transfer any SSH keys from the old machine and then install the following:
- Homebrew
- Oh My Zsh
- Node (through NVM)
brew install ack
brew install ffmpeg
brew install jq
brew install wget
Note: this instructions are tailored for Python 3.
brew install python3
brew postinstall python3
pip3 install --upgrade pip setuptools wheel
sudo pip3 install virtualenv virtualenvwrapper
Add this to your .bash_profile:
# python 3
export VIRTUALENV_PYTHON=/usr/local/bin/python3
export VIRTUALENVWRAPPER_PYTHON=$VIRTUALENV_PYTHON
In your terminal, type:
source ~/.bash_profile
Mostly taken from @sindresorhus:
.
├── Applications
├── Desktop
├── Documents
├── Downloads
├── Movies
├── Music
├── Pictures
├── code
│ ├── deprecated
│ ├── forks
│ ├── oss
│ │ ├── project1
│ │ ├── project2
│ │ └── …
│ ├── private
│ ├── todo
│ ├── work
│ └── scratchpad.md
- deprecated: Unmaintained projects are moved here to reduce noise in other directories.
- forks: Repos I fork are placed here.
- oss: My open source projects.
- private: Private projects like my macOS apps.
- todo: Projects I started but never finished enough to publish.
- work: Projects for my day job.
- scratchpad.md: Random ideas and todos.
Tip from @roelvangils:
Does your Mac becomes slow/unresponsive (fans kicking in etc.) when you
npm install
a huge project with a million tiny dependencies? I learned that adding an empty.metadata_never_index
in /node_modules beforehand will prevent Spotlight from indexing all that crap.
As an alternate, there's a command line fix from this yarn issue:
find . -type d -name "node_modules" -exec touch "{}/.metadata_never_index" \;
And as a bash alias:
alias fix-spotlight='find . -type d -name "node_modules" -exec touch "{}/.metadata_never_index" \;'
Mainly taken from Eric William's blog.
Removing the following section in my .gitconfig
[user]
name = Firstname Lastname
email = [email protected]
with this conditional
[includeIf "gitdir:~/code/oss/"]
path = .gitconfig-oss
[includeIf "gitdir:~/code/private/"]
path = .gitconfig-private
[includeIf "gitdir:~/code/todo/"]
path = .gitconfig-todo
[includeIf "gitdir:~/code/work/"]
path = .gitconfig-work
Then I add two additional sibling files to my profile root directory, next to my .gitconfig.
For my private & open source work I have my non-work values in a .gitconfig-private file.
[user]
name = Jon Doe
email = [email protected]
For my source code work related to my.gitconfig-work
[user]
name = Jon Doe
email = [email protected]
So that I end up with these files in my profile root.
C:\users\<USERNAME>\
├───.gitconfig
├───.gitconfig-deprecated
├───.gitconfig-private
├───.gitconfig-oss
├───.gitconfig-todo
└───.gitconfig-work
This approach could be replicated to any number of patterns you choose. If you have specific accounts you use for client work you just add more entries to the conditional block. There have been scenarios where I would need to use an identity given by the client so that would require another conditional entry and .gitconfig-work-acme-archery config file.
I did find that with the nested directory approach the last entry wins so you have to put more specific values at the end.
This effectly translates an if or switch statement in my profile to explicit .gitconfig entries and config files. I'm not sure if I'll stick with it but I'll test drive it for now.
- Chrome
- Chrome Canary
- Duck Duck Go
- Firefox
- Firefox Developer Edition
- Firefox Nightly
- Internet Explorer VMs
Settings
Packages
code --list-extensions
alefragnani.project-manager
christian-kohler.path-intellisense
dbaeumer.vscode-eslint
editorconfig.editorconfig
equinusocio.vsc-material-theme
equinusocio.vsc-material-theme-icons
esbenp.prettier-vscode
formulahendry.auto-rename-tag
github.copilot
github.copilot-chat
mechatroner.rainbow-csv
mgmcdermott.vscode-language-babel
ms-vscode.sublime-keybindings
ms-vscode.theme-materialkit
nicoespeon.abracadabra
orta.vscode-jest
serge.vsc-material-theme-italicize
visualstudioexptteam.intellicode-api-usage-examples
visualstudioexptteam.vscodeintellicode
yzhang.markdown-all-in-one