如果你不知道什么是 dotfiles,那你就不会知道什么是 dotfiles。如果你知道什么是 dotfiles,那你就知道什么是 dotfiles。
以一段废话开场,引出今天的主题: dotfiles
。软件匠艺社区(codingstyle.cn)周三晚上有一期分享介绍 Vim 时提到了 dotfiles,这篇文章我们就来好好说一说 dotfiles。
dot 即「点」的意思,意思是以点开头的文件。如果你不是程序员,你大概会说,我咋从来没见过这种文件啊?因为这些文件通常都是隐藏文件,平常一般看不到,比如 .git 目录。但这里说的 dotfiles 主要是指用户 home 目录下的点文件,这类文件一般是一些配置文件,比如 vim 的配置文件 .vimrc,zsh 的配置文件 .zshrc 等。通过设置这些配置文件,可以实现出很强大的功能,比如有不少人通过配置 .vimrc,把 vim 活生生变成了一个功能强大的 IDE。还有一些偷懒的程序员在 .profile 之类的文件里设置了大量命令的 alias。以至于你还没看清楚他敲的第一个命令,他已经敲了三四个命令了。
通过配置各种 dotfiles,程序员可以把系统定制得既顺手又高效。但是问题来了,自己千辛万苦调的设置,如果换一台机器,又得重新设置一遍。这对于追求效率的程序员来说是不可接受的。
于是会玩又懒的程序员想出了一个办法,把所有的 dotfiles 放在一个单独的目录进行统一管理,放到 GitHub 或者通过网盘同步。
为了让 dotfiles 生效,主要有两种方式:
第一种方式适合机器初装,但是假如你有两台机器,希望配置能方便的进行同步,第二种方式是更好的选择。
$ ln -s ~/dotfiles/.vimrc ~/.vimrc
但是,假如你的 dotfile 文件很多,手工去维护那些软链也是一件麻烦的事情。而程序员又是最不能忍受麻烦的,于是造了各种轮子去维护和管理这些 dotfiles 。
有些人把软链的管理写成一个 Shell 脚本,也有人做成特定的工具。比如: rcm 、 YARD 、 dotfiles 、 mackup ……
在对比了各种 dotfiles 工具后,我最终选择了 mackup 。理由主要如下:
在 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 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 ...
当你拿到一台新的 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
效果如下:
在 vim 里使用 powerline 字体,只需要在 .vimrc 里加:
set rtp+=/usr/local/lib/python2.7/site-packages/powerline/bindings/vim set laststatus=2
效果如下:
懒程序员如果拿到了一个新的 Mac 机器,他只需要做如下几步,就可以把这台新的机器变成熟悉的一台机器:
安装 XCode(最好在 Mac Store 里下载安装完整版的 XCode,因为有些软件安装依赖完整版 XCode):
$ sudo softwareupdate -i -a $ xcode-select --install
自动安装软件及系统设置。
$ cd ~ $ git clone https://github.com/coderzh/dotfiles.git $ source dotfiles/install.sh
使用 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 密码相关的内容提交上去呦~
参考资料: