如何管理自己的dotfiles

yadm负责一般文件,emacs配置单独用另一个仓库。

不是说上传到github有什么不好,只是看上去并没有这么的优雅,我的意思应该是想看看大家都有什么比较好的管理dotfiles的方法,可能我的表述有一点问题

看着确实有点麻烦 :joy:

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 的时候再升级就好了。

1 个赞

清爽都是相对的,我现在就是只关注自己常用的目录,其他目录的东西只要能随我心意进入离开系统路径,就算干净()

而且 nix 应该没啥 “残留” 的包,留着都是有引用的,没引用的包一次 gc 就自动清掉了

1 个赞

我用 dotter + github ,不过还是建议用私有仓库管理 dotfile ,不要不小心泄漏了 key/token

dotter 支持模板语言,可以通过 if/else 判断一些信息实现在不同机器上的统一

1 个赞

chezmoi 真的好用,今天刚刚迁移完成。之前是用 GNU stow (不支持 Windows)。

chezmoi 通过模板设置不同平台的应用配置文件,不同电脑使用不同的配置很方便。

我只用 chezmoi管理 .zprofile, .zshrc, .bashrc等等配置文件,还要就是 Windows下面的 Powershell 和 Terminal 配置,Emacs 中的 private.el。

Emacs 个人配置是用magit作者开发的 Borg 通过Github来管理。

2 个赞

我把.emacs.d整个目录都放到git上。还打个tar包放到网盘里。联网的就pull同步。不联网的就下载tar包。

pull下来不需要重新下载插件。因为有的环境不联网下不了。

chezmoi 吧,因为有 go 模板,可以根据环境不同,生成不同的文件。 还能用调用脚本,脚本本身也是模板,非常灵活。 你可以在 chezmoi 中的 yaml 写需要安装的包,再根据不同系统安装它。chezmoi 会记录每次生成的脚本,如果你加一个包,那么生成的脚本会不同,就会再执行一次。

但是 chezmoi 这样还是有问题,就是系统的包不是很稳定,这个问题在 LInux 和 windows 也是相同。版本也是各不相同。 那就要请出 nix。home-manager 可以在不同的 Linux 上使用。 不过代价也很大就是了。

然后,用备份工具保存 dotfiles 的,才是真的有点蠢。因为你没有 git 的提交信息了。就和提交信息一直写 update 一样。

1 个赞

最终我还是没选择那些辅助工具,用了楼上一位大佬的方法,通过创建软链接的方法来管理自己的dotfiles,只需要一个清单文件和一个bash脚本就可以完成,还是非常简单的. :grin:

1 个赞

我也是利用link,自己维护的dotfiles。那些框架对我而言都太重了

1 个赞

没人用 yadm 了吗?

Managing. emacs. d files) can be daunting, however, and many users prefer more structured workflows than a back-and-forth with GitHub. There’s a common technique to solve this: keeping track of your in a Git repository. emacs. d directory but with a bit more organized structure (e.g separate modules or subdirectories for configurations, packages, and custom scripts). Utility software like Stow or Dotbot can assist in the management of those symlinks and keep your setup separated and modular. You can even apply version control to changes on different machines and sync easily. Also, some use GitLab or Bitbucket for private repositories, or even Org mode integration for a more dynamic, literate configuration. So it keeps things tidy and easy to get to without having to do any manual fetching.

1 个赞

我是写了个软链接的脚本,选最笨的办法,写两个bash脚本函数(分别链接单独文件和递归链接文件夹内文件),然后把需要链接的文件/文件夹单独指定链接过来。 虽然笨,但这是我用过唯一没出过意料之外问题的解决方案。

我也是用这个的

笨办法不见得不好,现在有些框架就是太笨重了,学习成本也不低。

已经用了 4 个月的 chezmoi了,体验很好。

最近 Windows 电脑出问题需要重装,正好 chezmoi 派上了用场,只要简单的一条 chezmoi init --apply $GITHUB_USERNAME 就可以恢复我的 Terminal 和 Powershell 配置,还有我的 Emacs 私人配置部分。(我的 dotfiles 就放在 Github中的仓库名也叫 dotfiles,这样可以省去给完整路径)。

平时主要就是用 chezmoi update 命令,偶尔用用 chezmoi apply, chezmoi 学习起来也不难,官方文档写的也很清楚。