使用GNU stow统一管理用户目录下那些隐藏的配置文件

命令行工具们有一个约定俗成的习惯:把配置文件写到用户的Home目录下面的隐藏文件里。系统用的时间一长,这样的文件就有一堆,有些你编辑过了,有些没有,并且你都不知道里面有些什么。先来看一下你有多少个这样的文件吧:

ls -ald ~/.* | grep -v ^l | tee >(wc -l)

也许你已经想到了一千种方法来折腾它们。在用户目录下面git init 一下?这可不是什么好主意。把它们手工复制到某个地方然后手工ln -s 回来?这也太麻烦了。然而我们现在有个叫stow的工具可以自动化处理这一切。

GNU stow本来是为了用于管理软件包安装以及多版本共存的一个程序。它做的主要工作就是根据目录来自动建立软链接。这样就正好满足了我们的需求。首先把所有的配置文件复制到某个文件夹去,然后运行一下stow ,它们就自动链接好了。

这样还是有些太烦了。所以我写了个Bash函数来自动处理这一切。

export DOTFILES=~/dotfiles

dotfiles-count() {
        pushd >/dev/null 2>&1
        cd $HOME
        ls -ald .* | grep -v ^l | tee >(wc -l)
        popd >/dev/null 2>&1
}

dotfiles-init() {
        pushd >/dev/null 2>&1
        cd $HOME
        ls -ald .$1*;
        mkdir -p $DOTFILES/$1;
        mv .$1* $DOTFILES/$1;
        stow --dir=$DOTFILES --target=$HOME -vv $1
        popd >/dev/null 2>&1
}

dotfiles-rebuild() {
        stow --dir=$DOTFILES --target=$HOME -vv [email protected]
}

比如我们要处理来自vim的配置文件,只需要运行dotfiles-init vim ,一切就自动完成。想用Git管理配置文件?没问题,去$DOTFILES 下面git init 一下。想用网盘同步?没问题,把$DOTFILES 设置到你的网盘目录下面。想移动你的存放目录,或者在另一台机器上恢复配置?没问题,改下$DOTFILES 然后运行dotfiles-rebuild * 就好(如果你关掉了Shell并且没链接配置文件,那么祝贺你作死成功……)。

这样是不是干净多了呢?

An image showing all dotfiles are linked by stow

参考:

1 thought on “使用GNU stow统一管理用户目录下那些隐藏的配置文件

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据