Skip to content

Instantly share code, notes, and snippets.

@conceptblend
Forked from codeinthehole/osx_bootstrap.sh
Last active April 22, 2024 17:13
Show Gist options
  • Save conceptblend/9f3706fe59b44e36ed5a3122d34f836f to your computer and use it in GitHub Desktop.
Save conceptblend/9f3706fe59b44e36ed5a3122d34f836f to your computer and use it in GitHub Desktop.

Revisions

  1. conceptblend revised this gist Apr 22, 2024. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -62,6 +62,7 @@ brew update
    # brew install bash

    PACKAGES=(
    ffmpeg
    git
    imagemagick
    markdown
    @@ -83,14 +84,12 @@ brew tap homebrew/cask
    CASKS=(
    brave-browser
    cyberduck
    evernote
    figma
    firefox
    google-chrome
    imageoptim
    iterm2
    ipvanish-vpn
    kap
    mamp
    microsoft-word
    microsoft-excel
  2. conceptblend revised this gist Jun 18, 2022. 1 changed file with 3 additions and 0 deletions.
    3 changes: 3 additions & 0 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -110,6 +110,9 @@ CASKS=(
    zoomus
    )

    # iterm2 theme
    # https://github.com/nickcernis/iterm2-night-owl

    echo "Installing cask apps..."
    brew cask install ${CASKS[@]}

  3. conceptblend revised this gist Jun 18, 2022. 1 changed file with 4 additions and 1 deletion.
    5 changes: 4 additions & 1 deletion osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -99,11 +99,14 @@ CASKS=(
    microsoft-teams
    miro
    notion
    obs
    onedrive
    sketch
    paw
    postman
    slack
    spotify
    visual-studio-code
    xmind
    zoomus
    )

  4. conceptblend revised this gist Jun 18, 2022. 1 changed file with 4 additions and 7 deletions.
    11 changes: 4 additions & 7 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -62,6 +62,7 @@ brew update
    # brew install bash

    PACKAGES=(
    git
    imagemagick
    markdown
    nano
    @@ -80,12 +81,10 @@ echo "Installing cask..."
    brew tap homebrew/cask

    CASKS=(
    1password
    abstract
    brave-browser
    cyberduck
    dropbox
    evernote
    figma
    firefox
    google-chrome
    imageoptim
    @@ -99,13 +98,11 @@ CASKS=(
    microsoft-powerpoint
    microsoft-teams
    miro
    mjml
    notion
    onedrive
    sketch
    slack
    spotify
    station
    steam
    visual-studio-code
    zoomus
    )
    @@ -198,7 +195,7 @@ defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
    defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true

    # Save to disk (not to iCloud) by default
    defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false
    defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool true

    # Use scroll gesture with the Ctrl (^) modifier key to zoom
    sudo defaults write com.apple.universalaccess closeViewDFRZoomEnabled -bool false
  5. conceptblend revised this gist Jul 22, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -91,6 +91,7 @@ CASKS=(
    imageoptim
    iterm2
    ipvanish-vpn
    kap
    mamp
    microsoft-word
    microsoft-excel
  6. conceptblend revised this gist Jun 23, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -98,6 +98,7 @@ CASKS=(
    microsoft-powerpoint
    microsoft-teams
    miro
    mjml
    onedrive
    sketch
    slack
  7. conceptblend revised this gist Jun 8, 2020. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -209,6 +209,7 @@ sudo defaults write com.apple.universalaccess closeViewSplitScreenRatio -float 0
    sudo defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true

    # Save screenshots to the desktop
    mkdir ~/00_Screenshots
    defaults write com.apple.screencapture location -string "~/00_Screenshots"

    # Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF)
  8. conceptblend revised this gist Jun 8, 2020. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -163,9 +163,9 @@ nvm install node

    echo "Configuring OSX..."

    # Set fast key repeat rate
    defaults write NSGlobalDomain KeyRepeat -int 1
    defaults write NSGlobalDomain InitialKeyRepeat -int 10
    # Set moderate key repeat rate
    defaults write NSGlobalDomain KeyRepeat -int 6
    defaults write NSGlobalDomain InitialKeyRepeat -int 25

    # Require password as soon as screensaver or sleep mode starts
    defaults write com.apple.screensaver askForPassword -int 1
  9. conceptblend revised this gist Jun 8, 2020. 1 changed file with 50 additions and 64 deletions.
    114 changes: 50 additions & 64 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -8,6 +8,7 @@
    # include:
    #
    # - SVGSUS
    # - Divvy
    #
    # Notes:
    #
    @@ -17,13 +18,23 @@
    #
    # Reading:
    #
    # - http://lapwinglabs.com/blog/hacker-guide-to-setting-up-your-mac
    # - https://gist.github.com/MatthewMueller/e22d9840f9ea2fee4716
    # - https://news.ycombinator.com/item?id=8402079
    # - http://notes.jerzygangi.com/the-best-pgp-tutorial-for-mac-os-x-ever/
    # - https://github.com/mathiasbynens/dotfiles/blob/master/.macos
    # - https://www.taniarascia.com/setting-up-a-brand-new-mac-for-development/

    echo "Starting bootstrapping"

    # Close any open System Preferences panes, to prevent them from overriding
    # settings we’re about to change
    osascript -e 'tell application "System Preferences" to quit'

    # Ask for the administrator password upfront
    sudo -v

    # Keep-alive: update existing `sudo` time stamp until `.macos` has finished
    while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &

    xcode-select --install

    # Check for Homebrew, install if we don't have it
    @@ -51,102 +62,63 @@ brew update
    # brew install bash

    PACKAGES=(
    # ack
    # autoconf
    # automake
    # boot2docker
    # ffmpeg
    # gettext
    # gifsicle
    # git
    # graphviz
    # hub
    imagemagick
    # jq
    # libjpeg
    # libmemcached
    # lynx
    markdown
    # memcached
    # mercurial
    nano
    npm
    # pkg-config
    # postgresql
    python
    python3
    # pypy
    # rabbitmq
    # rename
    # ssh-copy-id
    # terminal-notifier
    # the_silver_searcher
    # tmux
    svgo
    tree
    # vim
    # wget
    yarn
    )

    echo "Installing packages..."
    brew install ${PACKAGES[@]}

    echo "Cleaning up..."
    brew cleanup

    echo "Installing cask..."
    brew install caskroom/cask/brew-cask
    brew tap homebrew/cask

    CASKS=(
    1password
    abstract
    brave-browser
    cyberduck
    # colluquy
    # Note that divvy might not be the most current. Alt is to get from App Store
    divvy
    dropbox
    evernote
    firefox
    # forklift
    # flux
    google-chrome
    # google-drive
    # gpgtools
    imageoptim
    iterm2
    ipvanish-vpn
    # macvim
    mamp
    microsoft-word
    microsoft-excel
    microsoft-outlook
    microsoft-powerpoint
    microsoft-teams
    miro-formerly-realtimeboard
    miro
    onedrive
    sketch
    # skype
    slack
    # spectacle
    spotify
    station
    steam
    svgo
    # vagrant
    # virtualbox
    visual-studio-code
    # vlc
    zoomus
    )

    echo "Installing cask apps..."
    brew cask install ${CASKS[@]}

    echo "Installing fonts..."

    brew tap homebrew/cask-fonts

    # https://github.com/Homebrew/homebrew-cask-fonts/tree/master/Casks

    FONTS=(
    font-inconsolidata
    font-inconsolata
    font-roboto
    font-clear-sans
    font-inter
    @@ -158,6 +130,9 @@ FONTS=(
    )
    brew cask install ${FONTS[@]}

    echo "Cleaning up..."
    brew cleanup

    # echo "Installing Python packages..."
    # PYTHON_PACKAGES=(
    # ipython
    @@ -174,15 +149,23 @@ brew cask install ${FONTS[@]}
    # )
    # sudo gem install ${RUBY_GEMS[@]}


    # NVM and Node
    echo "Installing NVM..."
    touch ~/.zshrc
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

    # Install latest version
    nvm install node

    # echo "Installing global npm packages..."
    # npm install marked -g

    echo "Configuring OSX..."

    osascript -e 'tell application "System Preferences" to quit'

    # Set fast key repeat rate
    defaults write NSGlobalDomain KeyRepeat -int 0
    defaults write NSGlobalDomain KeyRepeat -int 1
    defaults write NSGlobalDomain InitialKeyRepeat -int 10

    # Require password as soon as screensaver or sleep mode starts
    defaults write com.apple.screensaver askForPassword -int 1
    @@ -197,6 +180,7 @@ defaults write com.apple.screensaver askForPasswordDelay -int 0

    # Enable "natural" scroll
    defaults write NSGlobalDomain com.apple.swipescrolldirection -bool true

    # Disable "shake to reveal"
    defaults write NSGlobalDomain CGDisableCursorLocationMagnification -bool true
    defaults write NSGlobalDomain com.apple.springing.enabled -bool true
    @@ -214,19 +198,18 @@ defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true
    # Save to disk (not to iCloud) by default
    defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false

    defaults write com.apple.universalaccess closeViewDFRZoomEnabled -bool false

    # Use scroll gesture with the Ctrl (^) modifier key to zoom
    defaults write com.apple.universalaccess closeViewDesiredZoomFactor -float 1.85
    defaults write com.apple.universalaccess closeViewHotkeysEnabled -bool false
    defaults write com.apple.universalaccess closeViewPanningMode -bool true
    defaults write com.apple.universalaccess closeViewScrollWheelModifiersInt -int 262144
    defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true
    defaults write com.apple.universalaccess closeViewSplitScreenRatio -float 0.2
    defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true
    sudo defaults write com.apple.universalaccess closeViewDFRZoomEnabled -bool false
    sudo defaults write com.apple.universalaccess closeViewDesiredZoomFactor -float 1.85
    sudo defaults write com.apple.universalaccess closeViewHotkeysEnabled -bool false
    sudo defaults write com.apple.universalaccess closeViewPanningMode -bool true
    sudo defaults write com.apple.universalaccess closeViewScrollWheelModifiersInt -int 262144
    sudo defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true
    sudo defaults write com.apple.universalaccess closeViewSplitScreenRatio -float 0.2
    sudo defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true

    # Save screenshots to the desktop
    defaults write com.apple.screencapture location -string "${HOME}/00_Screenshots"
    defaults write com.apple.screencapture location -string "~/00_Screenshots"

    # Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF)
    defaults write com.apple.screencapture type -string "png"
    @@ -245,7 +228,10 @@ defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"
    defaults write com.apple.screencapture disable-shadow -bool true

    # echo "Creating folder structure..."
    # [[ ! -d Wiki ]] && mkdir Wiki
    # [[ ! -d Workspace ]] && mkdir Workspace
    [[ ! -d ~/Sites ]] && mkdir ~/Sites

    # Clear all the dumb apps from the Dock
    # !!! Not idempotent !!! Only run as needed.
    # defaults write com.apple.dock.plist persistent-apps '' && killall Dock

    echo "Done. Note that some of these changes require a logout/restart to take effect."
  10. conceptblend revised this gist Jun 5, 2020. 1 changed file with 158 additions and 76 deletions.
    234 changes: 158 additions & 76 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -7,8 +7,7 @@
    # Some apps don't have a cask and so still need to be installed by hand. These
    # include:
    #
    # - Twitter (app store)
    # - Postgres.app (http://postgresapp.com/)
    # - SVGSUS
    #
    # Notes:
    #
    @@ -25,6 +24,8 @@

    echo "Starting bootstrapping"

    xcode-select --install

    # Check for Homebrew, install if we don't have it
    if test ! $(which brew); then
    echo "Installing homebrew..."
    @@ -35,54 +36,55 @@ fi
    brew update

    # Install GNU core utilities (those that come with OS X are outdated)
    brew tap homebrew/dupes
    brew install coreutils
    brew install gnu-sed --with-default-names
    brew install gnu-tar --with-default-names
    brew install gnu-indent --with-default-names
    brew install gnu-which --with-default-names
    brew install gnu-grep --with-default-names
    # brew tap homebrew/dupes
    # brew install coreutils
    # brew install gnu-sed --with-default-names
    # brew install gnu-tar --with-default-names
    # brew install gnu-indent --with-default-names
    # brew install gnu-which --with-default-names
    # brew install gnu-grep --with-default-names

    # Install GNU `find`, `locate`, `updatedb`, and `xargs`, g-prefixed
    brew install findutils
    # brew install findutils

    # Install Bash 4
    brew install bash
    # brew install bash

    PACKAGES=(
    ack
    autoconf
    automake
    boot2docker
    ffmpeg
    gettext
    gifsicle
    git
    graphviz
    hub
    # ack
    # autoconf
    # automake
    # boot2docker
    # ffmpeg
    # gettext
    # gifsicle
    # git
    # graphviz
    # hub
    imagemagick
    jq
    libjpeg
    libmemcached
    lynx
    # jq
    # libjpeg
    # libmemcached
    # lynx
    markdown
    memcached
    mercurial
    # memcached
    # mercurial
    nano
    npm
    pkg-config
    postgresql
    # pkg-config
    # postgresql
    python
    python3
    pypy
    rabbitmq
    rename
    ssh-copy-id
    terminal-notifier
    the_silver_searcher
    tmux
    # pypy
    # rabbitmq
    # rename
    # ssh-copy-id
    # terminal-notifier
    # the_silver_searcher
    # tmux
    tree
    vim
    wget
    # vim
    # wget
    )

    echo "Installing packages..."
    @@ -95,56 +97,90 @@ echo "Installing cask..."
    brew install caskroom/cask/brew-cask

    CASKS=(
    colluquy
    1password
    abstract
    brave-browser
    cyberduck
    # colluquy
    # Note that divvy might not be the most current. Alt is to get from App Store
    divvy
    dropbox
    evernote
    firefox
    flux
    # forklift
    # flux
    google-chrome
    google-drive
    gpgtools
    # google-drive
    # gpgtools
    imageoptim
    iterm2
    macvim
    skype
    ipvanish-vpn
    # macvim
    mamp
    microsoft-word
    microsoft-excel
    microsoft-outlook
    microsoft-powerpoint
    microsoft-teams
    miro-formerly-realtimeboard
    onedrive
    sketch
    # skype
    slack
    spectacle
    vagrant
    virtualbox
    vlc
    # spectacle
    spotify
    station
    steam
    svgo
    # vagrant
    # virtualbox
    visual-studio-code
    # vlc
    zoomus
    )

    echo "Installing cask apps..."
    brew cask install ${CASKS[@]}

    echo "Installing fonts..."
    brew tap caskroom/fonts
    brew tap homebrew/cask-fonts
    # https://github.com/Homebrew/homebrew-cask-fonts/tree/master/Casks
    FONTS=(
    font-inconsolidata
    font-roboto
    font-clear-sans
    font-inter
    font-exo
    font-noto-sans
    font-noto-serif
    font-noto-sans-display
    font-noto-serif-display
    )
    brew cask install ${FONTS[@]}

    echo "Installing Python packages..."
    PYTHON_PACKAGES=(
    ipython
    virtualenv
    virtualenvwrapper
    )
    sudo pip install ${PYTHON_PACKAGES[@]}

    echo "Installing Ruby gems"
    RUBY_GEMS=(
    bundler
    filewatcher
    cocoapods
    )
    sudo gem install ${RUBY_GEMS[@]}

    echo "Installing global npm packages..."
    npm install marked -g
    # echo "Installing Python packages..."
    # PYTHON_PACKAGES=(
    # ipython
    # virtualenv
    # virtualenvwrapper
    # )
    # sudo pip install ${PYTHON_PACKAGES[@]}

    # echo "Installing Ruby gems"
    # RUBY_GEMS=(
    # bundler
    # filewatcher
    # cocoapods
    # )
    # sudo gem install ${RUBY_GEMS[@]}

    # echo "Installing global npm packages..."
    # npm install marked -g

    echo "Configuring OSX..."

    osascript -e 'tell application "System Preferences" to quit'

    # Set fast key repeat rate
    defaults write NSGlobalDomain KeyRepeat -int 0

    @@ -153,17 +189,63 @@ defaults write com.apple.screensaver askForPassword -int 1
    defaults write com.apple.screensaver askForPasswordDelay -int 0

    # Show filename extensions by default
    defaults write NSGlobalDomain AppleShowAllExtensions -bool true
    # defaults write NSGlobalDomain AppleShowAllExtensions -bool true

    # Enable tap-to-click
    defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
    defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
    # defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
    # defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1

    # Enable "natural" scroll
    defaults write NSGlobalDomain com.apple.swipescrolldirection -bool true
    # Disable "shake to reveal"
    defaults write NSGlobalDomain CGDisableCursorLocationMagnification -bool true
    defaults write NSGlobalDomain com.apple.springing.enabled -bool true
    defaults write NSGlobalDomain com.apple.springing.delay -float 0.5
    defaults write NSGlobalDomain com.apple.mouse.scaling -float 0.6875
    defaults write NSGlobalDomain com.apple.trackpad.forceClick -bool true

    # Disable smart quotes
    defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false

    # Expand save panel by default
    defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true
    defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true

    # Save to disk (not to iCloud) by default
    defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false

    defaults write com.apple.universalaccess closeViewDFRZoomEnabled -bool false

    # Use scroll gesture with the Ctrl (^) modifier key to zoom
    defaults write com.apple.universalaccess closeViewDesiredZoomFactor -float 1.85
    defaults write com.apple.universalaccess closeViewHotkeysEnabled -bool false
    defaults write com.apple.universalaccess closeViewPanningMode -bool true
    defaults write com.apple.universalaccess closeViewScrollWheelModifiersInt -int 262144
    defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true
    defaults write com.apple.universalaccess closeViewSplitScreenRatio -float 0.2
    defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true

    # Save screenshots to the desktop
    defaults write com.apple.screencapture location -string "${HOME}/00_Screenshots"

    # Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF)
    defaults write com.apple.screencapture type -string "png"

    # Use list view in all Finder windows by default
    # Four-letter codes for the other view modes: `icnv`, `clmv`, `glyv`
    defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv"

    # Keep folders on top when sorting by name
    defaults write com.apple.finder _FXSortFoldersFirst -bool true

    # When performing a search, search the current folder by default
    defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"

    # Disable "natural" scroll
    defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false
    # Disable shadow in screenshots
    defaults write com.apple.screencapture disable-shadow -bool true

    echo "Creating folder structure..."
    [[ ! -d Wiki ]] && mkdir Wiki
    [[ ! -d Workspace ]] && mkdir Workspace
    # echo "Creating folder structure..."
    # [[ ! -d Wiki ]] && mkdir Wiki
    # [[ ! -d Workspace ]] && mkdir Workspace

    echo "Bootstrapping complete"
    echo "Done. Note that some of these changes require a logout/restart to take effect."
  11. @codeinthehole codeinthehole created this gist Mar 30, 2015.
    169 changes: 169 additions & 0 deletions osx_bootstrap.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,169 @@
    #!/usr/bin/env bash
    #
    # Bootstrap script for setting up a new OSX machine
    #
    # This should be idempotent so it can be run multiple times.
    #
    # Some apps don't have a cask and so still need to be installed by hand. These
    # include:
    #
    # - Twitter (app store)
    # - Postgres.app (http://postgresapp.com/)
    #
    # Notes:
    #
    # - If installing full Xcode, it's better to install that first from the app
    # store before running the bootstrap script. Otherwise, Homebrew can't access
    # the Xcode libraries as the agreement hasn't been accepted yet.
    #
    # Reading:
    #
    # - http://lapwinglabs.com/blog/hacker-guide-to-setting-up-your-mac
    # - https://gist.github.com/MatthewMueller/e22d9840f9ea2fee4716
    # - https://news.ycombinator.com/item?id=8402079
    # - http://notes.jerzygangi.com/the-best-pgp-tutorial-for-mac-os-x-ever/

    echo "Starting bootstrapping"

    # Check for Homebrew, install if we don't have it
    if test ! $(which brew); then
    echo "Installing homebrew..."
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    fi

    # Update homebrew recipes
    brew update

    # Install GNU core utilities (those that come with OS X are outdated)
    brew tap homebrew/dupes
    brew install coreutils
    brew install gnu-sed --with-default-names
    brew install gnu-tar --with-default-names
    brew install gnu-indent --with-default-names
    brew install gnu-which --with-default-names
    brew install gnu-grep --with-default-names

    # Install GNU `find`, `locate`, `updatedb`, and `xargs`, g-prefixed
    brew install findutils

    # Install Bash 4
    brew install bash

    PACKAGES=(
    ack
    autoconf
    automake
    boot2docker
    ffmpeg
    gettext
    gifsicle
    git
    graphviz
    hub
    imagemagick
    jq
    libjpeg
    libmemcached
    lynx
    markdown
    memcached
    mercurial
    npm
    pkg-config
    postgresql
    python
    python3
    pypy
    rabbitmq
    rename
    ssh-copy-id
    terminal-notifier
    the_silver_searcher
    tmux
    tree
    vim
    wget
    )

    echo "Installing packages..."
    brew install ${PACKAGES[@]}

    echo "Cleaning up..."
    brew cleanup

    echo "Installing cask..."
    brew install caskroom/cask/brew-cask

    CASKS=(
    colluquy
    dropbox
    firefox
    flux
    google-chrome
    google-drive
    gpgtools
    iterm2
    macvim
    skype
    slack
    spectacle
    vagrant
    virtualbox
    vlc
    )

    echo "Installing cask apps..."
    brew cask install ${CASKS[@]}

    echo "Installing fonts..."
    brew tap caskroom/fonts
    FONTS=(
    font-inconsolidata
    font-roboto
    font-clear-sans
    )
    brew cask install ${FONTS[@]}

    echo "Installing Python packages..."
    PYTHON_PACKAGES=(
    ipython
    virtualenv
    virtualenvwrapper
    )
    sudo pip install ${PYTHON_PACKAGES[@]}

    echo "Installing Ruby gems"
    RUBY_GEMS=(
    bundler
    filewatcher
    cocoapods
    )
    sudo gem install ${RUBY_GEMS[@]}

    echo "Installing global npm packages..."
    npm install marked -g

    echo "Configuring OSX..."

    # Set fast key repeat rate
    defaults write NSGlobalDomain KeyRepeat -int 0

    # Require password as soon as screensaver or sleep mode starts
    defaults write com.apple.screensaver askForPassword -int 1
    defaults write com.apple.screensaver askForPasswordDelay -int 0

    # Show filename extensions by default
    defaults write NSGlobalDomain AppleShowAllExtensions -bool true

    # Enable tap-to-click
    defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
    defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1

    # Disable "natural" scroll
    defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false

    echo "Creating folder structure..."
    [[ ! -d Wiki ]] && mkdir Wiki
    [[ ! -d Workspace ]] && mkdir Workspace

    echo "Bootstrapping complete"