转载

懒程序员和他的 dotfiles

如果你不知道什么是 dotfiles,那你就不会知道什么是 dotfiles。如果你知道什么是 dotfiles,那你就知道什么是 dotfiles。

以一段废话开场,引出今天的主题: dotfiles 。软件匠艺社区(codingstyle.cn)周三晚上有一期分享介绍 Vim 时提到了 dotfiles,这篇文章我们就来好好说一说 dotfiles。

什么是 dotfiles?

dot 即「点」的意思,意思是以点开头的文件。如果你不是程序员,你大概会说,我咋从来没见过这种文件啊?因为这些文件通常都是隐藏文件,平常一般看不到,比如 .git 目录。但这里说的 dotfiles 主要是指用户 home 目录下的点文件,这类文件一般是一些配置文件,比如 vim 的配置文件 .vimrc,zsh 的配置文件 .zshrc 等。通过设置这些配置文件,可以实现出很强大的功能,比如有不少人通过配置 .vimrc,把 vim 活生生变成了一个功能强大的 IDE。还有一些偷懒的程序员在 .profile 之类的文件里设置了大量命令的 alias。以至于你还没看清楚他敲的第一个命令,他已经敲了三四个命令了。

通过配置各种 dotfiles,程序员可以把系统定制得既顺手又高效。但是问题来了,自己千辛万苦调的设置,如果换一台机器,又得重新设置一遍。这对于追求效率的程序员来说是不可接受的。

dotfiles 管理

于是会玩又懒的程序员想出了一个办法,把所有的 dotfiles 放在一个单独的目录进行统一管理,放到 GitHub 或者通过网盘同步。

为了让 dotfiles 生效,主要有两种方式:

  1. 通过一个脚本,把所有 dotfile 文件 rsync 到 HOME 目录。
  2. 使用软链,让 HOME 目录的 dotfile 文件指向你目录的 dotfile 文件。

第一种方式适合机器初装,但是假如你有两台机器,希望配置能方便的进行同步,第二种方式是更好的选择。

$ ln -s ~/dotfiles/.vimrc ~/.vimrc 

但是,假如你的 dotfile 文件很多,手工去维护那些软链也是一件麻烦的事情。而程序员又是最不能忍受麻烦的,于是造了各种轮子去维护和管理这些 dotfiles 。

有些人把软链的管理写成一个 Shell 脚本,也有人做成特定的工具。比如: rcm 、 YARD 、 dotfiles 、 mackup ……

mackup

在对比了各种 dotfiles 工具后,我最终选择了 mackup 。理由主要如下:

  1. 使用方便,配置起来非常简单。
  2. 社区贡献了大量现成的软件的 dotfiles 配置,可以直接使用。

在 OS X 下,可以直接使用 brew 安装 mackup。其他系统下,可以直接使用 pip 安装。安装好后,备份和还原都只需要一个命令:

# 备份 $ mackup backup 

在新机器上:

# 还原 $ mackup restore 

如果你不想要那些软链了,只需要执行:

$ mackup uninstall 

mackup 可以通过配置文件,指定你希望备份哪些 dotfiles,以及备份到哪里(支持备份到 Dropbox、Google Drive、Copy、iCloud、Box 以及指定的目录。

比如在我的 mac 上,我的 .mackup.cfg 这样设置的:

[storage] engine = file_system path = dotfiles directory = home   [applications_to_sync] atom pycharmce myvim ideaic15 zsh mackup dash karabiner 

storage 里指定了备份到文件系统的 ~/dotfiles/home 路径。 applications_to_sync 指定了备份哪些应用的 dotfiles。mackup 预先定义好了大量 application 的 dotfiles,比如:

Atom Bash Dash Emacs Flux Git Gradle MacOSX MacVim npm Oh My Zsh Vim WebStorm ... 

如果你需要定制某个 application 的 dotfiles 也很简单,比如我发现 mackup 自带的配置里没有 IntelliJ Community 版本的配置,我只需要在新建一个文件: ~/.mackup/ideaic15.cfg :

[application] name = My IntelliJ IDEA 15  [configuration_files] Library/Preferences/IdeaIC15/keymaps/Mac OS X copy.xml Library/Preferences/IdeaIC15/options/keymap.xml 

configuration_files 里指定我需要备份的文件即可。非常的简单易用。

自带安装软件

在一台新机器上,把之前机器装的软件一个一个手动安装也是非常耗时和麻烦的事情。如果你使用的是 Mac OS X,将会变得非常简单,因为绝大部分的软件开发包及软件都可以通过 Homebrew 和 brew cask 来安装。

我的 Mac 上 99.9% 的软件,可以通过我写的 brew.sh 脚本来安装:

# Install Homebrew  # Ask for the administrator password upfront. sudo -v  # Keep-alive: update existing `sudo` time stamp until the script has finished. while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &  # 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  brew tap homebrew/versions brew update brew upgrade --all  # Install packages apps=(     caskroom/cask/brew-cask     cmake     coreutils     findutils     git     gnu-sed --with-default-names     go     hugo     mercurial     mackup     macvim     mysql     android-platform-tools     python     ruby     svn     vim     wget     zsh )  caskapps=(     android-studio     alfred     atom     cheatsheet     dash     genymotion     google-chrome     intellij-idea-ce     iterm2     java     karabiner     keepassx     kindle     macdown     pomotodo     pycharm-ce     qq     qqmusic     qqmacmgr     sogouinput     thunder     vagrant     virtualbox     vlc     wiznote     youdao )  brew install "${apps[@]}" brew tap caskroom/versions brew cask update brew cask install --appdir="/Applications" "${caskapps[@]}" brew cleanup brew cask cleanup 

pip、npm、gem

使用 pip、npm、gem 安装的包也使用脚本进行一键安装:

pip install --upgrade pip pip install powerline-status pip install MySQL-python pip install tornado pip install torndb pip install pycrypto pip install mock # npm、gem ... 

OS X 的系统设置

当你拿到一台新的 Mac 然后开机时,不知道有没有被 Duang~ 的一声吓到的经历。当时吓得的宝宝我赶紧找了如何关闭开机声音的方法(设置静音、插上耳机都不管用!),只要执行一条命令即可:

sudo nvram SystemAudioVolume=" " 

很多的系统设置都可以通过命令来完成,比如:

# 电池显示是百分百 defaults write com.apple.menuextra.battery -bool true  # 设置键盘按键重复的延迟 defaults write NSGlobalDomain KeyRepeat -int 3  # 禁止自动拼写纠正 defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false  # Finder 显示状态栏 defaults write com.apple.finder ShowStatusBar -bool true  # Finder 显示地址栏 defaults write com.apple.finder ShowPathbar -bool true  # 禁止在网络驱动器上生成 .DS_Store 文件  defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true 

字体

程序员喜欢折腾的几样东西:键盘、编辑器、字体。程序员钟爱的几种字体,包括 Source Code Pro、Hack、Menlo 等等,其中对 powerline 字体更是最爱。把所有心爱的字体放在 dotfiles/fonts 目录里,通过自动安装脚本里直接拷贝到 ~/Library/Fonts/ 目录下即可。

cp -r ~/dotfiles/fonts/* ~/Library/Fonts/ 

使用 powerline 字体需要安装 powerline-status,这个在前面讲的 pip 脚本里已经安装了。

pip install powerline-status 

zsh 中使用 powerline 字体,只需要在 .zshrc 中加一句:

source /usr/local/lib/python2.7/site-packages/powerline/bindings/zsh/powerline.zsh 

效果如下:

懒程序员和他的 dotfiles

在 vim 里使用 powerline 字体,只需要在 .vimrc 里加:

set rtp+=/usr/local/lib/python2.7/site-packages/powerline/bindings/vim set laststatus=2 

效果如下:

懒程序员和他的 dotfiles

总结

懒程序员如果拿到了一个新的 Mac 机器,他只需要做如下几步,就可以把这台新的机器变成熟悉的一台机器:

  1. 安装 XCode(最好在 Mac Store 里下载安装完整版的 XCode,因为有些软件安装依赖完整版 XCode):

    $ sudo softwareupdate -i -a $ xcode-select --install 
  2. 自动安装软件及系统设置。

    $ cd ~ $ git clone https://github.com/coderzh/dotfiles.git $ source dotfiles/install.sh 
  3. 使用 mackup 恢复 dotfiles。

    $ cp ~/dotfiles/.mackup.cfg ~/ $ cp -r ~/dotfiles/.mackup ~/ $ mackup restore 

如果一切顺利,程序员,你没有浪费上班时间装电脑,你可以开始搬砖了。:-)

(对了,iTerm2 的 Color 设置好像必须手工操作,配色列表可以在 https://github.com/mbadolato/iTerm2-Color-Schemes 找,作为 JetBrains 粉,最后我选择了 JetBrains Darcula.itermcolors 这一款。)

在 GitHub 里搜 dotfiles 可以看到大量的 dotfiles,当然,别忘了 Star 我的 dotfiles: https://github.com/coderzh/dotfiles

最后,温馨提示下,千万不要把 ssh、mysql 密码相关的内容提交上去呦~

参考资料:

  1. https://github.com/mathiasbynens/dotfiles
  2. https://github.com/skwp/dotfiles
  3. https://github.com/donnemartin/dev-setup
  4. https://github.com/webpro/awesome-dotfiles
  5. https://github.com/jbernard/dotfiles
  6. https://github.com/lra/mackup
  7. https://github.com/webpro/dotfiles
原文  http://blog.coderzh.com/2016/03/19/dotfiles/
正文到此结束
Loading...