使用GNU Stow管理您的点文件(2012)

2020-12-29 05:24:08

昨天,我无意间偶然发现了我想分享的东西,这些东西正好落入了“为什么我以前不知道这件事呢?”类别。在本文中,我将介绍如何使用GNU Stow管理GNU / Linux主目录中的各种配置文件(又名.bashrc,又名.bashrc)。

困难在于,使用版本控制系统(如Git,Mercurialor Bazaar)来管理一个人的配置文件会很有帮助,但是许多/大多数点文件位于您的主目录的顶层,这不是一个好主意。初始化VCSrepository。随着时间的流逝,我遇到了各种程序,旨在通过将所有文件保存在子目录中,然后将它们安装或链接到适当的位置来为您管理此程序。这些程序都没有真正吸引过我。它们将需要大量的依赖项(例如Ruby和大量的库),或者它们将需要我记住如何使用它们,这在很难完成此类任务的情况下很少使用。

最近,我一直在使用GNU Stow管理从源代码安装到/ usr / local /的程序。基本上,在这种典型用法中,您将本地构建的软件包安装到/ usr / local / stow / $ {PKGNAME}-{PKGVERSION},然后从/ usr / local / stow /安装#stow $ {PKGNAME}-$ {PKGVERSION}并且该程序会生成指向所有程序的符号链接。文件放在/ usr / local /下的适当位置。然后,通过Stow卸载程序时,您不必担心您或提供的Makefile可能遗漏的任何杂散文件。它还使处理程序的备用版本非常容易(即,当我尝试使用dwm或stw的不同配置时)。

前一段时间,我偶然发现了一个邮件列表,其中有人描述使用Stow来管理其dotfile的安装。我并没有对此特别注意,但是我的大脑一定已经将其归档以备后用。昨天,我决定尝试一下,我不得不说,它比其他专用的点文件管理程序要方便得多,即使它不是立即可见的选择。

程序很简单。我创建了$ {HOME} / dotfiles目录,然后在其中创建了我希望管理其配置的所有程序的子目录。在每个目录中,我都移入了所有适当的文件,并保留了主目录的目录结构。因此,如果文件通常位于主目录的顶层,则它将进入程序子目录的顶层。如果文件通常位于默认的$ {XDG_CONFIG_HOME} / $ {PKGNAME}位置($ {HOME} /。config / $ {PKGNAME}),则它将进入$ {HOME} / dotfiles / $ {PKGNAME} / .config / $ {PKGNAME}等。最后,从dotfiles目录中,只需运行$ stow $ PKGNAME,Stow会将所有软件包的配置文件符号链接到适当的位置。这样就可以轻松地将点文件设置为VCS存储库,以便您跟踪所做的更改(此外,这样做还使在不同计算机之间共享配置变得更加容易,这是我这样做的主要原因)。

例如,假设您要管理Bash,VIM和Uzbl的配置。 Bash在顶层目录中有几个文件。 VIM通常在顶层具有your.vimrc文件,并具有.vim目录。 Uzbl的文件位于$ {XDG_CONFIG_HOME} / uzbl和$ {XDG_DATA_HOME} / uzbl中。因此,您的主目录如下所示:

主页/ brandon / .config / uzbl / [...某些文件] .local / share / uzbl / [...某些文件] .vim / [...某些文件] .bashrc .bash_profile .bash_logout .vimrc

主页/ / brandon / .config / .local / .share / dotfiles / bash / .bashrc .bash_profile .bash_logout uzbl / .config / uzbl / [...某些文件] .local / share / uzbl / [... some文件] vim / .vim / [...某些文件] .vimrc

而且,瞧,您的所有配置文件(以及指向它们的符号链接)都在正确的位置,但是可能是杂乱无章的,而实际的文件都整齐地组织在您的dotfiles目录中,可以轻松地转换成VCS存储库。一件方便的事是,如果您使用多台计算机,而这些计算机上可能未安装相同的软件,则可以根据需要选择要安装的配置。您的所有dotfile始终在dotfiles目录中可用,但是如果您不需要为一个程序进行配置,则只需存放它,这样就不会使您的主目录混乱。

嗯,这就是全部。希望其他人发现这个有用!我知道我发现这对您有很大帮助。

使用Brandon Invergo的GNU Stow管理您的Dotfile是由Creative Commons Attribution-ShareAlike 3.0 Unported License授权的。