├── brew-formulae.txt ├── brew-casks.txt ├── package.json ├── .gitignore └── README.md /brew-formulae.txt: -------------------------------------------------------------------------------- 1 | ffmpeg 2 | imagemagick 3 | wget 4 | telnet 5 | tldr -------------------------------------------------------------------------------- /brew-casks.txt: -------------------------------------------------------------------------------- 1 | iterm2 2 | raycast 3 | rectangle 4 | alt-tab 5 | android-file-transfer 6 | android-platform-tools 7 | keepingyouawake 8 | discord 9 | slack 10 | vlc 11 | keka 12 | kap 13 | time-out 14 | figma 15 | visual-studio-code 16 | sublime-text -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mac-setup", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "toc": "doctoc README.md --github" 8 | }, 9 | "keywords": [], 10 | "author": "CJ R. (https://w3cj.sh)", 11 | "license": "MIT", 12 | "dependencies": { 13 | "doctoc": "^1.4.0", 14 | "husky": "^4.2.5" 15 | }, 16 | "husky": { 17 | "hooks": { 18 | "pre-commit": "npm run toc && git add README.md" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | .pnpm-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # Snowpack dependency directory (https://snowpack.dev/) 46 | web_modules/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Optional stylelint cache 58 | .stylelintcache 59 | 60 | # Microbundle cache 61 | .rpt2_cache/ 62 | .rts2_cache_cjs/ 63 | .rts2_cache_es/ 64 | .rts2_cache_umd/ 65 | 66 | # Optional REPL history 67 | .node_repl_history 68 | 69 | # Output of 'npm pack' 70 | *.tgz 71 | 72 | # Yarn Integrity file 73 | .yarn-integrity 74 | 75 | # dotenv environment variable files 76 | .env 77 | .env.development.local 78 | .env.test.local 79 | .env.production.local 80 | .env.local 81 | 82 | # parcel-bundler cache (https://parceljs.org/) 83 | .cache 84 | .parcel-cache 85 | 86 | # Next.js build output 87 | .next 88 | out 89 | 90 | # Nuxt.js build / generate output 91 | .nuxt 92 | dist 93 | 94 | # Gatsby files 95 | .cache/ 96 | # Comment in the public line in if your project uses Gatsby and not Next.js 97 | # https://nextjs.org/blog/next-9-1#public-directory-support 98 | # public 99 | 100 | # vuepress build output 101 | .vuepress/dist 102 | 103 | # vuepress v2.x temp and cache directory 104 | .temp 105 | .cache 106 | 107 | # Docusaurus cache and generated files 108 | .docusaurus 109 | 110 | # Serverless directories 111 | .serverless/ 112 | 113 | # FuseBox cache 114 | .fusebox/ 115 | 116 | # DynamoDB Local files 117 | .dynamodb/ 118 | 119 | # TernJS port file 120 | .tern-port 121 | 122 | # Stores VSCode versions used for testing VSCode extensions 123 | .vscode-test 124 | 125 | # yarn v2 126 | .yarn/cache 127 | .yarn/unplugged 128 | .yarn/build-state.yml 129 | .yarn/install-state.gz 130 | .pnp.* 131 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## My Mac Setup 2 | 3 | This repo contains info on all the apps / tools / settings I use on my Mac. 4 | 5 | 6 | 7 | 8 | 9 | - [What Macbook do I have?](#what-macbook-do-i-have) 10 | - [OS Settings](#os-settings) 11 | - [Desktop](#desktop) 12 | - [Finder](#finder) 13 | - [Dock](#dock) 14 | - [Quick Launching](#quick-launching) 15 | - [Homebrew](#homebrew) 16 | - [Homebrew](#homebrew-1) 17 | - [RayCast Homebrew Plugin](#raycast-homebrew-plugin) 18 | - [Window Management](#window-management) 19 | - [App Switching](#app-switching) 20 | - [Menu Bar Utilities](#menu-bar-utilities) 21 | - [Hidden Bar](#hidden-bar) 22 | - [System Stats Widgets](#system-stats-widgets) 23 | - [Menu Bar Calendar](#menu-bar-calendar) 24 | - [Break Timer](#break-timer) 25 | - [Web Browser](#web-browser) 26 | - [Firefox](#firefox) 27 | - [Other Apps I Use Daily](#other-apps-i-use-daily) 28 | - [Docker](#docker) 29 | - [Terminal](#terminal) 30 | - [Shell](#shell) 31 | - [Load dotfiles](#load-dotfiles) 32 | - [Github SSH Setup](#github-ssh-setup) 33 | - [Other command line tools I use](#other-command-line-tools-i-use) 34 | - [Node.js](#nodejs) 35 | - [Global Modules](#global-modules) 36 | - [VS Code](#vs-code) 37 | 38 | 39 | 40 | ## What Macbook do I have? 41 | 42 | I am using a 2020 13" Macbook Pro for work and a 2021 14" Macbook Pro for personal stuff. 43 | 44 | The specs for both machines: 45 | * 2020 46 | * Apple M1 47 | * 2021 48 | * Apple M1 Pro 49 | * 16GB RAM 50 | * 500GB SSD 51 | 52 | Read more about these Macbooks here: 53 | 54 | * [2020](https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-m1-8-core-13-2020-specs.html) 55 | * [2021](https://everymac.com/systems/apple/macbook_pro/specs/macbook-pro-m1-pro-8-core-cpu-14-core-gpu-14-2021-specs.html) 56 | 57 | ## OS Settings 58 | 59 | These are my preferred settings for `Desktop`, `Finder` and the `Dock`. 60 | 61 | ### Desktop 62 | 63 | I don't like the new Desktop, Stage Manager or Widget features in Sonoma, so I disable them. 64 | 65 | * System Preferences 66 | * Desktop & Dock 67 | * Desktop & Stage Manager 68 | * Show Items 69 | * On Desktop -> uncheck 70 | * In Stage Manager -> uncheck 71 | * Click wallpaper to reveal desktop -> Only in Stage Manager 72 | * Stage Manager -> uncheck 73 | * Widgets 74 | * On Desktop -> uncheck 75 | * In Stage Manager -> uncheck 76 | 77 | ### Finder 78 | 79 | * Finder -> Preferences 80 | * General -> Show these on the desktop -> Select None 81 | * I try to keep my desktop completely clean. 82 | * General -> New Finder windows show -> Home Folder 83 | * I prefer to see my home folder in each new finder window instead of recent documents 84 | * Advanced -> Show all filename extensions -> Yes 85 | * Advanced -> Show warning before changing an extension -> No 86 | * Advanced -> When performing a search -> Search the current folder 87 | * View 88 | * Show Status Bar 89 | * Show Path Bar 90 | * Show Tab Bar 91 | 92 | ### Dock 93 | 94 | I don't use the Dock at all. It takes up screen space, and I can use RayCast to launch apps and AltTab to switch between apps. I make the dock as small as possible and auto hide it. 95 | 96 | * System Preferences 97 | * Desktop & Dock 98 | * Size -> Small as possible 99 | * Position on screen -> Left 100 | * Automatically hide and show the Dock -> Yes 101 | * Animate opening applications -> No 102 | * Show suggested and recent apps in the Dock -> No 103 | 104 | ## Quick Launching 105 | 106 | The built in spotlight search is a bit slow for me and usually has web search results as the default instead of apps or folders on my machine. 107 | 108 | I recently switched from [Alfred](https://www.alfredapp.com/) to [RayCast](https://www.raycast.com/). I'm really liking it so far. 109 | 110 | ```sh 111 | brew install raycast 112 | ``` 113 | 114 | ## Homebrew 115 | 116 | ### Homebrew 117 | 118 | [Homebrew](https://brew.sh/) allows us to install tools and apps from the command line. 119 | 120 | To install it, open up the built in `Terminal` app and run this command: 121 | 122 | ```sh 123 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 124 | ``` 125 | 126 | This will also install the xcode build tools which is needed by many other developer tools. 127 | 128 | After Homebrew is done installing, we will use it (via RayCast) to install everything else we need. 129 | 130 | 131 | ### RayCast Homebrew Plugin 132 | 133 | Install the [RayCast Homebrew Plugin](https://www.raycast.com/nhojb/brew) so we can easily install formulae and casks directly from RayCast. 134 | 135 | ## Window Management 136 | 137 | I know this feature is built in to a lot of other operating systems, but it is not built in to a Mac, so we need an app for it. 138 | 139 | RayCast has this feature built in, but I am still using a separate app for this. 140 | 141 | I use [rectangle](https://rectangleapp.com/) to move and resize windows using keyboard shortcuts. I used to use [spectacle](https://www.spectacleapp.com/), but rectangle is more regularly maintained and allows me to use all of the same keyboard shortcuts as spectacle. 142 | 143 | I highly recommend installing this and memorizing the keyboard shortcuts. Fluid and seamless window management is key to being productive while coding. 144 | 145 | Search for `rectangle` in RayCast `brew search` or: 146 | 147 | ``` 148 | brew install rectangle 149 | ``` 150 | 151 | ## App Switching 152 | 153 | The built in App switcher only shows application icons, and only shows 1 icon per app regardless of how many windows you have open in that app. 154 | 155 | I use an app switcher called [AltTab](https://alt-tab-macos.netlify.app/). It shows full window previews, and has an option to show a preview for every open window in all applications (even minimized ones). 156 | 157 | I replace the built-in `CMD+TAB` shortcut with AltTab. 158 | 159 | Search for `alt-tab` in RayCast `brew search` or: 160 | 161 | ```sh 162 | brew install alt-tab 163 | ``` 164 | 165 | ## Menu Bar Utilities 166 | 167 | ### Hidden Bar 168 | 169 | If you have several apps running that have menu bar icons, [Hidden Bar](https://github.com/dwarvesf/hidden) will let you choose which ones should be hidden after a timeout. This cleans things up if you have a ton of background apps running. 170 | 171 | Search for `hiddenbar` in RayCast `brew search` or: 172 | 173 | ```sh 174 | brew install hiddenbar 175 | ``` 176 | 177 | ### System Stats Widgets 178 | 179 | I use [stats](https://github.com/exelban/stats) to see my network traffic, CPU temp / usage and RAM usage at a glance. 180 | 181 | In each widget, a key setting to look for is under "widget settings", choose "merge widgets into one". 182 | 183 | Search for `stats` in RayCast `brew search` or: 184 | 185 | ```sh 186 | brew install stats 187 | ``` 188 | 189 | ### Menu Bar Calendar 190 | 191 | I like to have a calendar in the menu bar that I can quickly look at. stats does not include one, so I found [itsycal](https://www.mowglii.com/itsycal/). 192 | 193 | ```sh 194 | brew install itsycal 195 | ``` 196 | 197 | itsycal shows the date, so I hide the date in the system menu bar widget: 198 | 199 | * System Preferences 200 | * Dock & Menu Bar 201 | * Clock 202 | * Show Date -> Never 203 | * Show Day of Week -> No 204 | 205 | ## Break Timer 206 | 207 | I use an app called [Time Out](https://www.dejal.com/timeout/). 208 | 209 | I have it setup to show: 210 | * 10 second micro break every 15 minutes 211 | * 5 minute long break every 60 minutes 212 | 213 | There is also a cross platform break timer call [Stretchly](https://hovancik.net/stretchly/). I have not used it but a lot of people have recommended it. 214 | 215 | ## Web Browser 216 | 217 | ### Firefox 218 | 219 | I use Firefox because it is open source and comes from the [Mozilla Foundation](https://www.mozilla.org/en-US/about/manifesto/), a non profit company that [respects my privacy](https://www.mozilla.org/en-US/firefox/privacy/). 220 | 221 | I use Firefox Developer Edition. To install this with `brew` you will need to tap [a cask](https://github.com/Homebrew/homebrew-cask-versions) first: 222 | 223 | ```sh 224 | brew tap homebrew/cask-versions 225 | ``` 226 | 227 | You can then install Firefox Developer Edition with brew: 228 | 229 | ```sh 230 | brew install homebrew/cask-versions/firefox-developer-edition 231 | ``` 232 | 233 | I use the following extensions to stay productive: 234 | 235 | * [Tabliss](https://tabliss.io/) - simple new tab page 236 | * [OneTab](https://www.one-tab.com/) - consolidate a bunch of open tabs into a shareable list of links 237 | * [Dark Reader](https://darkreader.org/) - turn any site into dark mode 238 | 239 | I use the following extensions to protect my privacy while browsing the web: 240 | 241 | * Adblocker - [uBlock Origin](https://github.com/gorhill/uBlock) 242 | * Tracker Blocker - [Privacy Badger](https://privacybadger.org/) 243 | * Firefox now includes tracker blocking, but I leave Privacy Badger enabled. 244 | * [Decentraleyes](https://decentraleyes.org/) 245 | * Caches CDN links locally and intercepts requests to serve from the cache. Prevents CDNs from tracking you across websites. 246 | 247 | ## Other Apps I Use Daily 248 | 249 | * android-file-transfer - Transfer files to / from my android phone 250 | * android-platform-tools - Installs `adb` without the need for the full android studio. 251 | * [keepingyouawake](https://keepingyouawake.app/) - Prevents my Mac from going to sleep when I'm presenting / live streaming 252 | * [discord](https://discord.com/) - Messaging / Community 253 | * [vlc](https://www.videolan.org/) - I use VLC to watch videos instead of the built in QuickTime. 254 | * [keka](https://www.keka.io/en/) - Can extract 7z / rar and other types of archives 255 | * [kap](https://getkap.co/) - Screen recorder / gif maker 256 | * [figma](https://www.figma.com/) - Image editor 257 | * [visual-studio-code](https://code.visualstudio.com/) - Code Editor 258 | * [sublime-text](https://www.sublimetext.com/) - Note taking (I know there are better apps...) 259 | 260 | You can install them in one go by placing them all into a text file and then running brew install: 261 | 262 | ``` 263 | android-file-transfer 264 | android-platform-tools 265 | keepingyouawake 266 | discord 267 | slack 268 | vlc 269 | keka 270 | kap 271 | time-out 272 | figma 273 | visual-studio-code 274 | sublime-text 275 | insomnia 276 | ``` 277 | 278 | ```sh 279 | xargs brew install < apps.txt 280 | ``` 281 | 282 | ### Docker 283 | 284 | There are multiple results when you search `docker` within `brew`. To install Docker desktop: 285 | 286 | ```sh 287 | brew install --cask docker 288 | ``` 289 | 290 | ## Terminal 291 | 292 | I prefer [iTerm2](https://iterm2.com/) because: 293 | * Lots of customization options 294 | * Clickable links 295 | * Native OS notifications 296 | 297 | There are a lot of options for a terminal replacement, but I've been using iTerm2 for years and it works great for my needs. 298 | 299 | Checkout their documentation for more info on what iTerm2 can do: [https://iterm2.com/documentation.html](https://iterm2.com/documentation.html) 300 | 301 | 302 | ``` 303 | brew install iterm2 304 | ``` 305 | 306 | Once installed, launch it and customize the settings / preferences to your liking. These are my preferred settings: 307 | 308 | * Appearance 309 | * Theme 310 | * Minimal 311 | * Profiles 312 | * Default 313 | * General -> Working Directory -> Reuse previous session's directory 314 | * Colors -> Basic Colors -> Foreground -> Lime Green 315 | * Text -> Font -> Anonymous Pro 316 | * You can download this font [here](https://www.marksimonson.com/fonts/view/anonymous-pro). 317 | * I use this font in VS Code as well 318 | * Text -> Font Size -> 36 319 | * I use my Macbook to present / teach, so a big font size is important so everyone can see the commands I'm typing 320 | * Keys -> Key Mappings -> Presets -> Natural Text Editing 321 | * This allows me to use the [keyboard shortcuts](https://gist.github.com/w3cj/022081eda22081b82c52) I know and love inside of iTerm2 322 | 323 | ### Shell 324 | 325 | Mac now comes with `zsh` as the default [shell](https://en.wikipedia.org/wiki/Comparison_of_command_shells). I've switched to using this with [Oh My Zsh](https://ohmyz.sh/). 326 | 327 | #### Load dotfiles 328 | 329 | All my dotfiles are stored on [github](https://github.com/w3cj/dotfiles). 330 | 331 | I clone this repo to my machine and copy the files into my home directory. 332 | 333 | ### Github SSH Setup 334 | 335 | * Follow [this guide](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) to setup an ssh key for github 336 | * Follow [this guide](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account) to add the ssh key to your github account 337 | 338 | #### Other command line tools I use 339 | 340 | * [ffmpeg](https://en.wikipedia.org/wiki/FFmpeg) - edit videos from the command line 341 | * [imagemagick](https://en.wikipedia.org/wiki/ImageMagick) - edit images from the command line 342 | 343 | ```sh 344 | brew install ffmpeg 345 | brew install imagemagick 346 | ``` 347 | 348 | ## Node.js 349 | 350 | I use nvm to manage the installed versions of Node.js on my machine. This allows me to easily switch between Node.js versions depending on the project I'm working in. 351 | 352 | See installation instructions [here](https://github.com/nvm-sh/nvm#installing-and-updating). 353 | 354 | OR run this command (make sure v0.39.7 is still the latest) 355 | 356 | ```sh 357 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash 358 | ``` 359 | 360 | Now that nvm is installed, you can install a specific version of node.js and use it: 361 | 362 | ```sh 363 | nvm install 20 364 | nvm use 20 365 | node --version 366 | ``` 367 | 368 | ### Global Modules 369 | 370 | There are a few global node modules I use a lot: 371 | 372 | * lite-server 373 | * Auto refreshing static file server. Great for working on static apps with no build tools. 374 | * http-server 375 | * Simple static file server. 376 | * license 377 | * Auto generate open source license files 378 | * gitignore 379 | * Auto generate `.gitignore` files base on the current project type 380 | 381 | ``` 382 | npm install -g lite-server http-server license gitignore 383 | ``` 384 | 385 | ## VS Code 386 | 387 | VS Code is my preferred code editor. 388 | 389 | You can view all of my VS Code settings / extensions [here](https://github.com/CodingGarden/vscode-settings). 390 | --------------------------------------------------------------------------------