大家都怎样管理dotfiles?

折腾癌发作,想要在多台电脑上利用同一个github repository来同步管理配置文件dotfiles,研究下来好像有这么几个主流的解决方案:

  1. dotfiles丢在git仓库中,删除本地对应的文件,用symbolic link取代
  2. 在别的位置建立git裸仓库,然后把dotfiles添进来并建立alias
  3. 使用gnu/stow
  4. 使用chezmoi

根据我的观察比较,1和2有点笨拙,先排除;stow有个巨大优势就在于可以单独安装配置,比如i3装i3的配置,emacs装emacs的配置,比较分离,但是一个缺陷(可能是我自己没发现好的解决方案)在于,无法为不同机器做不同配置,比如在debian中我会alias zz = sudo apt update -y && sudo apt upgrade,在arch上就是alias zz = yay,或者不同屏幕大小下,i3wm的字体大小、background不同,这点好像stow没法单独做针对性的配置(如果有的话请务必告诉我,跪求!) chezmoi则有template,方便针对不同机器做单独配置(虽然这方面我也有点半懂不懂orz),但是没法对配置文件做独立的安装,一装就全装上了,比如kde的桌面环境加上一份i3的配置文件就没啥必要,强迫症有点儿难受

以上是我的一些观察和思考,不知道论坛里大神都是怎么管理的?

不管理,除了最开始复制一下之前用过的 config 作为模版以外从来都是有需求再改配置,有啥用啥,更不会要求不同平台上都要配成一样。

dotdrop

用的方案1,感觉这个方案简直完美。只需要一个 git

2 个赞

我用最简单最笨拙也是对自己最有效的办法管理,可以参考 Dotfiles

我是用git bare repo,两个branch分别是两台机器,gentoo和msys2,缺点就是合并分支的时候,每个分支都有不能被另一个分支覆盖或者修改的东西,据我所知git-merge好像没有这种根据文件名跳过merge的机制,所以我写了个bash脚本,先merge但不commit,然后从一个文件里面读取文件名,把不能merge的restore,然后再commit。。。

我用的是 yadm

1 个赞

直接用一个 git仓库通过github 管理配置,配置中区分不同系统(Mac,Linux,Win)。但是对于Linux的不同发行版就懒得管了,微小差异(比如字体)就直接本地改一下就好了。

我用dotbot,可以自动化方案一

目前采用方案一,写了个 link_dotfiles_if_necessary 函数来辅助。

1 个赞

我有三台机器需要同步,平时使用git加符号链接管理,基本满意。 有一点不爽的是不同机器(平台)有些差异,不知道有何好办法处理? 目前都是手动调整有点小烦。

引入其它的文件,引入的那个文件 gitignore 就好了。

其实 很多时候我们忽略了 shell 本身的可编程能力, 对于楼主的跨平台(*nix)dotfiles 管理完全可以用标准shell像emacs一样搞一份自己配置去管理这些dotfiles,不同平台对应不同的if-else,完全可以搞一个自己的框架出来,这样以后增加配置都方便,或者既然是emacs党那就直接用elisp做,这样win也可以用。

额外:

其实bashrc也是可以框架化的, 这样都省略了每次make了。

1 个赞

用的方案1,Symbol link + bonclay + Alias

针对不同的机器和环境,设置不同的yaml文件来进行同步,比如 common.yaml + (work, home,manjaro,macos…).yaml 共有的配置写在 common.yaml 中,特殊的分开写。

再写几个alias : alias bs='bonclay sync common.yaml && bonclay sync'

到新机器直接 bs macos.yaml 即可

哈哈,最近抄了你的 zinit配置

原来有的抄,太感动了… :joy:

我也是最近才切换到 zinit 上来的,按官方文档配了,然后抄了点,哈哈

我切换到 zinit 很久了,不过文档我没怎么看懂,当时教程也几乎没有,勉勉强强弄了个版本,有几个地方的 bug 我一直懒得处理,现在有的抄我得重新整理下… :ghost:

zinit的文档写的不好,有很多配置只能自己琢磨。不过性能是真不错,为了跨平台我也切到zinit上了。

经过对比之后,我选择使用 dotdrop,可以选择符号链接可以复制文件,文件对应关系通过 yaml 配置,不同系统可选择保留和映射到的文件,可作为 git submodule 使用也可以pip安装