大家都怎样管理dotfiles?

clone 下来后 ln -s

原来看你用了 antigen,也跟着用了,没想到换成 zinit 了 :laughing:

使用的第一種,因爲太懶了,一直懶得去折騰工具,還得踩坑。

不同機器上我用的是不同分支,求同存異(

1 个赞
1 个赞

跟我差不多. 你说的问题, 我是这样做的:

创建一个中性分支, 该分支是平台无关的, 99%的功能都在中性分支里. 然后再给每个平台创建对应的分支, 比如linux, macos等, 这样不同平台的分支只用合并中性分支即可. 不同平台之间的分支基本不会相互合并.

此处安利yadm。

  • 本质上是git的一个wrapper,后面可以跟任何git命令,所以可以支持(需要稍微hack一下)用magit
  • 某些配置文件对不同机器使用不同的版本(可以匹配hostname, platform, distribution, user等)
  • 支持对称/非对称加密
  • 跟symbolic link的实现相比,不会在checkout旧版本的时候出各种奇怪的问题
  • 在很多发行版的官方源上都有,即使没有,yadm只是一个shell script,所以通用性很好
  • clone下来的时候可以调用你写的脚本自动bootstrap

用了很久的dotbot,后来发现还是纯bash的简单便携,有兴趣看看 GitHub - QiangF/dot: Simplest dotfiles manager written in shellscript

我是使用 GNU’s stow 来管理我的配置文件的,其实就是一个 perl 脚本,来实现批量 ln -s 这样软连接过去。 这是我的配置文件 Github 地址 GitHub - ixnij/dotfiles: The configuration files of editors, shells and so on.

说来也巧,之前我都没有打算去整理配置文件,最近几天刚好有整理的想法,于是建立了一个仓库。

不过我看你的描述,我觉得 yadm 正好符合你的需求。

还有一种管理配置文件的方法,是在一个博客上有具体说明的: The best way to store your dotfiles: A bare Git repository

我是年初整理的,原先用的是 mackup,后来想跨平台,市面上现有的工具都调研了一边,本来想用 dotdrop,但不喜欢还要 ip3 install -r dotdrop/requirements.txt --user。另外也不喜欢类似 yadm 的 wrapper。最后用的 stow,其实也是批量实现软链接(你说的 1)。多配置确实不太方便,暂时 if else,不同的 branch 感觉可能也行,另外利用 GitHub Action 每次修改测试一遍装机脚本,就很爽。

可以参考:GitHub - tshu-w/dotfiles: Just my dotfiles

啥叫框架化(大概明白了,像 Prezto 这些配置文件一样?)

我也抄了点,只会最基本用法 (:з」∠)

大家都没提到 XDG,我现在是配置尽量放 ~/.config 内,这样软链能少不少。XDG 的兼容性可参考:

没办法啊,antigen不维护了,很多issue没人修复。zinit确实更快些

说到 XDG 这个标准,Emacs 27 居然支持了在 ~/.config/emacs 存放配置。 Neovim 倒是支持在 ~/.config/vim 存放配置文件。

antigen 是 zsh-users 的那个插件管理器吧,的确是约有 2 年没有维护了,上一次的 commit 还是在 2019 年。至于 zsh 配置,我是直接使用了 grml 的 zsh 配置,网上一查就有。zinit 我觉得就是延迟加载,没啥,也算不上真的 Turbo 。

但现在有一个问题,我用 zinit 安装的 rg , 在 emacs 里现在环境变量找不到 rg ,fd , fzf 这些工具了,你有遇到过吗

和这帖子里很多人不一样,我不喜欢用git仓库版本管理配置的的方式,手动的commit 切换分支太麻烦了,我经常在笔记本和台式机上切换,不会总是记着push。再说配置这种东西 对我而言 历史版本根本不重要,只要能够及时同步和在同步时能区分冲突就好。所以,我用syncthing作为我管理dotfiles的方案,只要一修改马上就可以在多台电脑上同步我的配置,而且有冲突的时候也可以手动解决。

2 个赞

exec-path-from-shell 可以导入变量,这些都在这个路径下:$HOME/.zinit/polaris/bin,你也可以手工加入 $PATH

这个也是可以的,以前我就是用one-drive/dropbox来同步的,直到有一天不小心删掉了。。。。。。 :joy:

恩,是用 exec-path-from-shell 导入的变量,只是说 $HOME/.zinit/polaris/bin 这个变量不在 .zshenv里,如果手动加到 .zshenv 里是可以的,只是这样的话,应该是加载了两次这个变量

因为本身 $HOME/.zinit/polaris/bin 这个变量 zinit 是加到 $PATH 里去了