2024-01-11 05:44:43 +01:00
|
|
|
|
# 加速 Dotfiles 的调试
|
|
|
|
|
|
2024-03-16 12:29:05 +01:00
|
|
|
|
在使用了 Home Manager 管理我们的 Dotfiles 后,会遇到的一个问题是,每次修改完我们的
|
|
|
|
|
Dotfiles,都需要通过跑一遍 `sudo nixos-rebuild switch`(或者如果你是单独使用 home manager的
|
|
|
|
|
话,应该是这个指令 `home-manager switch`) 才能生效,但每次运行这个指令都会重新计算整个系统
|
|
|
|
|
的状态,即使 Nix 内部现在已经有了很多缓存机制可以加速这个计算,这仍然是很痛苦的。
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-03-16 12:29:05 +01:00
|
|
|
|
以我的 Neovim/Emacs 配置为例,我日常修改它们的频率非常高,有时候一天要改几十上百次,如果每
|
|
|
|
|
次修改都要等 `nixos-rebuild` 跑个几十秒,这简直是在浪费时间。
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
幸运的是,Home Manager 提供了一个 [mkOutOfStoreSymlink][mkOutOfStoreSymlink] 函数, 它可以
|
|
|
|
|
创建一个指向你 Dotfiles 绝对路径的软链接, 这样就能绕过 Home Manager 自身,你对 Dotfiles 的
|
|
|
|
|
修改就能立即生效了.
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
这种方法能有用的前提是,你的 Dotfiles 内容不是由 Nix 生成的,比如我的 Emacs/Neovim 配置都
|
|
|
|
|
是原生的,仅通过 Nix Home-Manager 的 `home.file` 或 `xdg.configFile` 将它们链接到正确的位
|
|
|
|
|
置。
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
下面简单说明下如何通过这个函数加速 Dotfiles 的调试.
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
假设你将你的 Neovim 配置放在了 `~/nix-config/home/nvim` 下,在你的 Home Manager 配置(如
|
|
|
|
|
`/etc/nixos/home.nix`) 中添加如下代码:
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
```nix
|
|
|
|
|
{ config, pkgs, ... }: let
|
|
|
|
|
# path to your nvim config directory
|
|
|
|
|
nvimPath = "${config.home.homeDirectory}/nix-config/home/nvim";
|
|
|
|
|
# path to your doom emacs config directory
|
|
|
|
|
doomPath = "${config.home.homeDirectory}/nix-config/home/doom";
|
|
|
|
|
in
|
|
|
|
|
{
|
|
|
|
|
xdg.configFile."nvim".source = config.lib.file.mkOutOfStoreSymlink nvimPath;
|
|
|
|
|
xdg.configFile."doom".source = config.lib.file.mkOutOfStoreSymlink doomPath;
|
2024-01-11 06:11:52 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
# other configurations
|
|
|
|
|
}
|
2024-01-11 05:44:43 +01:00
|
|
|
|
```
|
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
修改完配置后,运行 `sudo nixos-rebuild switch` (或者如果你是单独使用 home manager的话,应
|
|
|
|
|
该是这个指令 `home-manager switch`)即可生效。这之后,你对 `~/nix-config/home/nvim` 或
|
|
|
|
|
`~/nix-config/home/doom` 的修改就能立即被 Neovim/Emacs 观察到了.
|
2024-01-11 05:44:43 +01:00
|
|
|
|
|
2024-11-22 12:31:48 +01:00
|
|
|
|
这样你就既能使用一个 nix-config 仓库统一管理所有 Dotfiles, 一些频繁修改的非 Nix 配置也能快
|
|
|
|
|
速生效,不受 Nix 的影响.
|
|
|
|
|
|
|
|
|
|
[mkOutOfStoreSymlink]:
|
|
|
|
|
https://github.com/search?q=repo%3Anix-community%2Fhome-manager%20outOfStoreSymlink&type=code
|