我在过去使用nix develop维护开发环境,但是在执行nix develop时,会将git 工作区的所有文件都同步到nix store中,这在项目比较大时会造成比较大的延迟。所以我切换到了比较古老的做法,也就是使用nix-shell。不过flake仍然作为single source of truth,我还是在flake中维护我的开发环境的依赖,但是通过flake-compact,我可以使用nix-shell读取在flake中定义的devShell。具体步骤如下:

1. 在flake中添加input

flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";

然后执行nix flake update更新flake.lock文件

2. 创建shell.nix文件

(import
  (
    let
      lock = builtins.fromJSON (builtins.readFile ./flake.lock);
      nodeName = lock.nodes.root.inputs.flake-compat;
    in
    fetchTarball {
      url = lock.nodes.${nodeName}.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.${nodeName}.locked.rev}.tar.gz";
      sha256 = lock.nodes.${nodeName}.locked.narHash;
    }
  )
  { src = ./.; }
).shellNix

随后,我就可以使用nix-shell