Skip to content

Latest commit

 

History

History
295 lines (221 loc) · 9.1 KB

README.md

File metadata and controls

295 lines (221 loc) · 9.1 KB

Setting Up a New Mac 

Last Updated: 01/03/2025

A running list of software and preferences for my development machine.

Table of Contents

Step 1: macOS Settings

System Update

First thing you need to do, on any OS actually, is update the system! For that: Apple Icon > About This Mac then Software Update....

Security

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

System preferences

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

Step 2: Command Line

Boot up Terminal and run this command:

xcode-select --install

Transfer any SSH keys from the old machine and then install the following:

Python 3

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

Step 3: Folder Structure

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.

Prevent Spotlight from indexing files in code.

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" \;'

Conditional Includes For Git Config

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.

Step 4: Applications

Browsers

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

Misc.

Appendix: Inspiration and Shout Outs