yadm负责一般文件,emacs配置单独用另一个仓库。
不是说上传到github有什么不好,只是看上去并没有这么的优雅,我的意思应该是想看看大家都有什么比较好的管理dotfiles的方法,可能我的表述有一点问题
看着确实有点麻烦
git + 软链接(通过目录规则自动化)
楼上提到的 gnu stow,chezmoi 之类的都只是一些辅助工具来帮助你管理 dot 罢了。但是不管怎样你的配置文件最后肯定都是用 git 来做 version control。只不过就是看你需不需要这些帮助你自动化(或者半自动化)的工具罢了。
如果你现在没有遇到在很多台机器频繁更新配置的问题。就没必要去搞过度配置。简单点就好。就用 git 直接管理你的一套配置,把所有的配置文件都平面的放在你的 git 仓库里就好了。使用的时后就把你的 git 文件软链接到对应的位置就好了。比如你的 dotfiles 里有一个 .config
你就把 .config
下的所有目录都软链接到 ~/.config
底下就好了。
如果你有遇到需要在很多台机器频繁更新配置的问题,在不考虑 windows 且你有管理员权限装包的情况下,就使用 nix home-manager (如果是自己的机器就直接用 nixOS)。这个是终极的配置文件管理方案。nix language 很简单的,如果你只是用它来写配置的话,难度和 json / toml 啥的没什么区别。而且你不需要把配置文件都用 nix 语言来重写。nix 语言有一个函数叫做 mkOutOfStoreSymlink
就是可以把你的 dotfiles 仓库里的某一个文件/目录软链接到某一个目录底下。你基于这个函数加一些 ifelse 的条件判断就可以做到基于不同的环境动态的配置 dotfiles 了。
nix lang 真的说要遇到难度曲线的地方是你想自己打包的时候才会遇到的。只是写配置就是个很简单的语言。
如果你没有权限的话,又需要管理很多台机器的配置,再去考虑 chezmoi 之类的解决方案。
NIX 自己都还没有稳定下来。安装似乎总有好多个版本残留在系统中,一大堆包。感觉不是很清爽。不定那次更新就崩了。
用 nix 就和清爽绝缘了哈。
一方面 nix 和 systemd bash 啥的“重型”软件高度耦合,和这种重型软件耦合到一起了,就不可能清爽。
另一方面 nix 的不可变性,因此但凡有微小的改动,表达式求值的结果都会不一样,不同的表达式就对应了不同的包,就会出现你所说的一个软件有好多个包。这在某种意义上说都是为了“配置可重复构建”付出的代价。
所以用了 nix,/nix/store
里面到底长啥样,眼不见为净拉倒吧。自己的 nix 配置文件清爽就行了吧。
但是 nix flake 的可重复性构建是完全可以保证的。有了 lockfile 你就随便升级,就算出问题了,git checkout lockfile 到之前的版本重新构建就可以了。所以 nix 不稳定就不稳定吧。反正 nix api 的不稳定性不会影响到你的日常使用。有时间追 upstream change 的时候再升级就好了。
清爽都是相对的,我现在就是只关注自己常用的目录,其他目录的东西只要能随我心意进入离开系统路径,就算干净()
而且 nix 应该没啥 “残留” 的包,留着都是有引用的,没引用的包一次 gc 就自动清掉了
我用 dotter + github ,不过还是建议用私有仓库管理 dotfile ,不要不小心泄漏了 key/token
dotter 支持模板语言,可以通过 if/else 判断一些信息实现在不同机器上的统一
chezmoi 真的好用,今天刚刚迁移完成。之前是用 GNU stow (不支持 Windows)。
chezmoi 通过模板设置不同平台的应用配置文件,不同电脑使用不同的配置很方便。
我只用 chezmoi管理 .zprofile, .zshrc, .bashrc等等配置文件,还要就是 Windows下面的 Powershell 和 Terminal 配置,Emacs 中的 private.el。
Emacs 个人配置是用magit作者开发的 Borg 通过Gihub来管理。