mkOutOfStoreSymlink解决的痛点
有一些需要进行修改的配置文件,如果使用 nix托管 或者使用 .text .source等当时管理这些配置文件,存在两个问题:1 每次修改都需要 执行nixos-rebuild switch或home-manager switch 才能生效,浪费时间 2是配置文件只读的无法双向修改。比如常见的情况,使用cc switch修改的 claudecode/codex/opencode的配置 会导致和nix管理的冲突 紊乱。
所以 我们引入了mkOutOfStoreSymlink,可以在对应的文件位置,一般都是 home下的dotfile 软件一个软链接到 nixos-config项目实际储存的路径。实现配置文件 在 nixos-config直接修改就可以生效,也支持外部工具直接编辑 dotfile 可以同步修改到我们nixos-config 比如上文说的 cc switch. cosmic桌面的配置项
原理
实例代码
| |
真实测试效果
xxxx.source + pkgs.runCommandLocal 可以实现 双向同步 实时生效,软链接最后一跳
xxxx.source + config.lib.file.mkOutOfStoreSymlink “绝对路径 " 可以实现 双向同步 实时生效,软链接最后一跳
xxxx.source + config.lib.file.mkOutOfStoreSymlink “相对路径 " 实际效果 和 xxxx.source 完全一样 !!!!!
xxxx.text 不用解释
bug 神坑
config.lib.file.mkOutOfStoreSymlink + 相对路径 是完全没效果的,等同于 直接用source方法。这是一个深坑,官方文档 和 ai 都没有说明这点(2026.07.04)
如果是用相对路径 Nix path literal 会被求值时自动复制到 /nix/store,导致源文件只读且 GC 后 symlink 断链。字符串路径保持指向文件系统原始文件,支持实时编辑从而无需 rebuild。
相关阅读:nixos 从0实现全集 - 目录