V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ratazzi
V2EX  ›  分享创造

OS X 安装后更多的自动化

  •  
  •   ratazzi ·
    ratazzi · 2015-03-28 22:00:23 +08:00 · 3826 次点击
    这是一个创建于 3574 天前的主题,其中的信息可能已经有所发展或是发生改变。
    http://ratazzi.org/2015/03/28/more-automation-after-OS-X-installed/

    居然两年没更新 blog 了,除了标题求别吐槽,也别问我为什么要重装,欢迎有更好的技巧分享,如果懒得看我废话的话,这里直接给出代码

    #!/usr/bin/env ruby
    def abs_path(path)
    File.symlink?(path) ? File.readlink(path) : path
    end
    apps = [
    ["/Library/Input Methods/Squirrel.app", "squirrel", false],
    ["{/,#{ENV['HOME']}/}Applications/Dropbox.app", "dropbox", false],
    ["{/,#{ENV['HOME']}/}Applications/Alfred 2.app", "alfred", false],
    ["{/,#{ENV['HOME']}/}Applications/Moom.app", "moom", false],
    ["{/,#{ENV['HOME']}/}Applications/BitTorrent Sync.app", "bittorrent-sync", false],
    ["/Applications/App Store.app", "", true],
    ["/Applications/iTunes.app", "", true],
    ["/Applications/Calendar.app", "", true],
    ["/Applications/Mail.app", "", true],
    ["/Applications/FaceTime.app", "", true],
    ["/Applications/Safari.app", "", true],
    ["{/,#{ENV['HOME']}/}Applications/Firefox.app", "firefox", true],
    ["{/,#{ENV['HOME']}/}Applications/Flux.app", "flux", false],
    ["{/,#{ENV['HOME']}/}Applications/Google Chrome.app", "", true],
    ["{/,#{ENV['HOME']}/}Applications/MacVim.app", "macvim", true],
    ["{/,#{ENV['HOME']}/}Applications/TextMate.app", "", true],
    ["{/,#{ENV['HOME']}/}Applications/Sublime Text.app", "", true],
    ["/Applications/Byword.app", "", true],
    ["/Applications/Utilities/Terminal.app", "", true],
    ["/Applications/Xcode.app", "", true],
    ["/Applications/Dash.app", "", true],
    ["/Applications/Server.app", "", true],
    ["/Applications/Parallels Desktop.app", "", true],
    ["/Applications/Preview.app", "", true],
    ["/Applications/Things.app", "", true],
    ["/Applications/QQ.app", "", true],
    # ["{/,/#{ENV['HOME']}/}Applications/Foxmail.app", "", false],
    ["{/,#{ENV['HOME']}/}Applications/Keka.app", "keka", false],
    ["{/,#{ENV['HOME']}/}Applications/Postgres.app", "postgres", false],
    ["{/,#{ENV['HOME']}/}Applications/Karabiner.app", "karabiner", false],
    ["{/,#{ENV['HOME']}/}Applications/GitX.app", "gitx", false],
    ["{/,#{ENV['HOME']}/}Applications/iExplorer.app", "iexplorer", false],
    ["{/,#{ENV['HOME']}/}Applications/VirtualBox.app", "virtualbox", false],
    ["/usr/bin/vagrant", "vagrant", false],
    ["#{ENV['HOME']}/Library/PreferencePanes/Hazel.prefPane", "hazel", false],
    ["/Library/Internet Plug-Ins/Flash Player.plugin", "flash", false],
    ]
    apps.map do |app|
    app_path, package, dock = app
    `proxychains4 brew cask install #{package}` if package.length > 0 and not Dir.glob(app_path).length > 0
    end
    `proxychains4 brew cask fetch google-chrome && hdiutil attach /Library/Caches/Homebrew/google-chrome-latest.dmg && cp -rf '/Volumes/Google Chrome/Google Chrome.app' /Applications/` unless File.exist?('/Applications/Google Chrome.app')
    puts "\n>>> Applications\n"
    `defaults write com.apple.dock persistent-apps -array ""`
    apps.map do |app|
    app_glob_path, package, dock = app
    app_path = Dir.glob(app_glob_path)
    `defaults write com.apple.dock persistent-apps -array-add "<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>#{abs_path(app_path.first)}</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>"` if app_path.length > 0 and dock
    puts " * #{abs_path(app_path.first)} \033[01;32m✓\033[00m" if app_path.length > 0
    end
    `killall Dock`
    view raw apps.rb hosted with ❤ by GitHub
    #!/bin/bash
    echo ''
    echo '88""Yb db 888888 db 8888P 8888P 88'
    echo '88__dP dPYb 88 dPYb dP dP 88'
    echo '88"Yb dP__Yb 88 dP__Yb dP dP 88'
    echo '88 Yb dP""""Yb 88 dP""""Yb d8888 d8888 88'
    echo ''
    echo -e '\033[01;32m>>> Basic settings\033[00m'
    defaults write NSGlobalDomain AppleFontSmoothing -integer 1
    # {{{ Keyboard
    echo ' * Setting Keyboard'
    # Set a blazingly fast keyboard repeat rate
    defaults write NSGlobalDomain KeyRepeat -int 1
    # Set a shorter Delay until key repeat
    defaults write NSGlobalDomain InitialKeyRepeat -int 15
    # }}}
    # {{{ Mouse and Trackpad
    # Mouse: tracking speed
    echo ' * Setting Mouse and Trackpad'
    defaults write -g com.apple.mouse.scaling 2
    defaults write -g com.apple.trackpad.scaling 1
    # Trackpad: enable tap to click for this user and for the login screen
    defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true
    defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
    defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1
    # Trackpad: map bottom right corner to right-click
    defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadCornerSecondaryClick -int 2
    defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool true
    defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1
    defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true
    # # Trackpad: three finder drag (not working)
    # defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadThreeFingerDrag -bool true
    # defaults write com.apple.AppleMultitouchTrackpad TrackpadThreeFingerDrag -bool true
    # defaults -currentHost write NSGlobalDomain com.apple.trackpad.threeFingerSwipeGesture -int 1
    osascript -e "$(curl -fsSL https://example.com/snippets/trackpad.scpt)" #trackpad
    # Mouse: disable natural
    defaults write -g com.apple.swipescrolldirection -bool false
    # Language & Region
    # defaults write com.apple.MenuBarClock Use24HourClock -bool true
    echo ' * Setting Language & Region'
    osascript -e "$(curl -fsSL https://example.com/snippets/localization.scpt)" #localization
    # }}}
    # {{{ Dock
    echo ' * Setting Language & Region'
    # Set the icon size of Dock items to 45 pixels
    defaults write com.apple.dock tilesize -int 45
    # Change magnification size of the Dock
    defaults write com.apple.dock largesize -float 64
    # Speed up Mission Control animations
    defaults write com.apple.dock expose-animation-duration -float 0.07
    # }}}
    # {{{ Finder
    echo ' * Setting Finder'
    # Show all filename extensions in Finder
    defaults write NSGlobalDomain AppleShowAllExtensions -bool true
    # Sidebar
    osascript -e "$(curl -fsSL https://example.com/snippets/finder.scpt)" #finder
    # Use current directory as default search scope in Finder
    defaults write com.apple.finder FXDefaultSearchScope -string "SCcf"
    # Open new windows on the user's home
    defaults write com.apple.finder NewWindowTarget -string "PfHm"
    defaults write com.apple.finder NewWindowTargetPath -string "file://$HOME"
    # }}}
    # {{{ Safari
    # Enable Safari debug menu
    echo ' * Setting Safari'
    defaults write com.apple.Safari IncludeDebugMenu 1
    # }}}
    # Check for software updates daily, not just once per week
    defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1
    # https://gist.github.com/nanoant/1244807
    # https://github.com/Aeon/sidebarFinagler
    # Enable ssh server
    [ `netstat -an | grep '*.22' | grep tcp4 | grep LISTEN | wc -l` -ne 1 ] \
    && sudo systemsetup -f -setremotelogin on \
    || echo -e ' * OpenSSH Server \033[01;32m✓\033[00m'
    # Enable sharing (not working)
    # sudo sharing -e "ratazzi's Public Folder" -s 111 #sharing
    # {{{ Internet
    echo ''
    echo -e '\033[01;32m>>> Internet\033[00m'
    echo ''
    [ ! -d "/Applications/GoAgentX.app" ] \
    && echo "* Downloading GoAgentX" \
    && curl -O https://goagentx.com/files/GoAgentX.dmg \
    && open ./GoAgentX.dmg \
    && echo "\033[01;33m * Please run GoAgentX then run this script again.\033[00m" && exit 0
    [ `netstat -an | grep '*.8016' | grep tcp4 | grep LISTEN | wc -l` -eq 1 ] \
    && echo -e '* GoAgentX HTTP \033[01;32m✓\033[00m'
    [ `netstat -an | grep '*.6666' | grep tcp4 | grep LISTEN | wc -l` -eq 1 ] \
    && echo -e '* GoAgentX SOCKS5 \033[01;32m✓\033[00m'
    # }}}
    # {{{ Homebrew and Apps
    echo ''
    echo -e '\033[01;32m>>> Homebrew and Apps\033[00m'
    echo ''
    # Homebrew
    [ ! -x "/usr/local/bin/brew" ] \
    && echo ">>> Install Homebrew" \
    && ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    brew cask > /dev/null 2>&1
    [ $? -ne 0 ] && echo '>>> Install Homebrew Cask' \
    && brew install caskroom/cask/brew-cask
    brew install htop \
    fish \
    proxychains-ng \
    md5sha1sum \
    aria2 \
    ctags \
    dos2unix \
    gettext \
    mtr \
    mutt \
    netcat \
    rlwrap \
    tmux \
    zsync \
    ideviceinstaller \
    ack \
    boot2docker \
    nmap \
    tig \
    sqlite \
    tree \
    watch \
    siege \
    ios-sim \
    mosh
    [ ! -x "/usr/local/bin/virtualenv" ] && sudo easy_install virtualenv
    [ ! -s "$HOME/.runtime/bin" ] && virtualenv --system-site-packages $HOME/.runtime
    $HOME/.runtime/bin/pip install --upgrade pip \
    && $HOME/.runtime/bin/pip install --index-url http://pypi.douban.com/simple $(curl -fsSL https://example.com/snippets/requirements.txt)
    [ ! -d "$HOME/.config" ] && mkdir "$HOME/.config"
    ruby -e "$(curl -fsSL https://example.com/snippets/symlink.rb)"
    [ ! -s "$HOME/.rvm/scripts/rvm" ] \
    && echo ">>> Install rvm" \
    && curl -sSL https://get.rvm.io | bash -s stable \
    && rvm install ruby-head \
    && gem source -r https://rubygems.org/ \
    && gem source -a https://ruby.taobao.org
    [ `netstat -an | grep '*.8016' | grep tcp4 | grep LISTEN | wc -l` -ne 1 ] \
    && echo -e "\033[01;33m * proxychains4 is not available yet.\033[00m" && exit 0
    # }}}
    # Remove all the icons in the Dock
    ruby -e "$(curl -fsSL https://example.com/snippets/apps.rb)" #dock
    # Input method
    # ~/Library/Preferences/com.apple.HIToolbox.plist
    ruby -e "$(curl -fsSL https://example.com/snippets/input_method.rb)" #input source
    [ $? -eq 0 ] && echo -e "\n\033[01;32m * Enjoy.\033[00m\n"
    exit 0
    view raw bootstrap.sh hosted with ❤ by GitHub
    tell application "System Preferences"
    activate
    set current pane to pane "com.apple.Localization"
    end tell
    tell application "System Events"
    tell application process "System Preferences"
    tell group 1 of window "Language & Region"
    tell checkbox "24-Hour Time" to if value is 0 then click
    end tell
    end tell
    end tell
    tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preferences.sharing"
    end tell
    tell application "System Events"
    tell process "System Preferences"
    delay 2
    tell window "Sharing"
    tell (checkbox 1 of row 2 of table 1 of scroll area 1 of group 1) to if value is 0 then click
    delay 1
    end tell
    end tell
    end tell
    view raw sharing.scpt hosted with ❤ by GitHub
    tell application "System Events" to tell process "SystemUIServer"
    tell (menu bar item 1 of menu bar 1 whose description is "text input")
    # !! Sadly, we must *visibly* select (open) the text-input menu-bar extra in order to
    # !! populate its menu with the available input sources.
    select
    tell menu 1
    # !! Curiously, using just 'name' instead of '(get name)' didn't work: 'Access not allowed'.
    click (first menu item whose title = "Squirrel")
    delay 0.5
    tell application "System Events" to keystroke "`" using {control down, option down}
    end tell
    end tell
    end tell
    # Trackpad: three finder drag
    tell application "System Preferences"
    activate
    set current pane to pane "com.apple.preference.trackpad"
    end tell
    tell application "System Events"
    tell application process "System Preferences"
    tell tab group 1 of window "Trackpad"
    click radio button "Point & Click"
    tell checkbox 4 to if value is 0 then click -- checkbox was not checked.
    end tell
    end tell
    end tell
    tell application "System Preferences" to quit
    view raw trackpad.sc hosted with ❤ by GitHub
    10 条回复    2015-03-29 16:16:49 +08:00
    hzlzh
        1
    hzlzh  
       2015-03-28 23:37:00 +08:00
    这个好玩,装机懒人必备
    ynyounuo
        2
    ynyounuo  
       2015-03-28 23:53:38 +08:00
    不错,改一改可以给妹子用了。
    ETiV
        3
    ETiV  
       2015-03-29 00:04:20 +08:00
    我来补一条...

    我现在的习惯是把dock 拉到屏幕左侧后自动隐藏, 系统默认的显示动画延迟有点慢...

    我是 Mavericks, 用下面的规则...OS X 10.10 不知道管不管用

    defaults write com.apple.dock autohide-time-modifier -float 0.5; killall Dock
    xucheng
        4
    xucheng  
       2015-03-29 01:06:58 +08:00
    Tink
        5
    Tink  
       2015-03-29 01:17:22 +08:00
    脚本太长没看。。。。

    具体都是干啥用的
    yaqink
        6
    yaqink  
       2015-03-29 10:07:41 +08:00 via iPad
    學習下Shell腳本和AppleScrip的編寫方法,主要用來修改SystemPreference,用Brew安裝軟件
    ratazzi
        7
    ratazzi  
    OP
       2015-03-29 14:32:58 +08:00
    @Tink 修改常用的鼠标、键盘、Dock 等设置的
    ratazzi
        8
    ratazzi  
    OP
       2015-03-29 14:56:27 +08:00
    @xucheng 这个不错,命令行工具部分准备用上,App 的部分,因为可能手动安装过还是需要判断下才能确定是否需要安装
    xucheng
        9
    xucheng  
       2015-03-29 15:29:55 +08:00
    其实更一般的还有 [boxen](https://boxen.github.com) 或者 [ansible](http://www.ansible.com/home) 做这样的部署工作
    ratazzi
        10
    ratazzi  
    OP
       2015-03-29 16:16:49 +08:00
    @xucheng 其实我之前用 puppet,但是还要搭个服务器,blog 搬到 Github,VPN 也是买的,就没用 VPS 了,这个方案不依赖特别的服务器,我实际用的脚本是在 Dropbox 的,关键是不需要装什么部署工具,而且对于我最重要的部分是各种设置,官方的 puppet pkg 安装之后会有个讨厌的用户显示在登录界面,虽然也能隐藏,但是强迫症搞得我没继续用了,shell 脚本足够简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5438 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:19 · PVG 16:19 · LAX 00:19 · JFK 03:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.