#nix #cache #github #time #instant #startup #nix-shell

app cached-nix-shell

为 https://github.com/xzfc/cached-nix-shell 保留

1 个不稳定版本

0.0.0 2020年4月16日

#36#instant

Unlicense OR MIT

2KB

cached-nix-shell

Build Status License Nixpkgs unstable package Man page

cached-nix-shell 是一个针对 nix-shell 的缓存层,具有后续运行时的即时启动时间。

它支持 NixOS 和 Linux。

安装

从 Nixpkgs 安装发布版本

nix-env -iA nixpkgs.cached-nix-shell

或者,从 GitHub 安装最新开发版本

nix-env -if https://github.com/xzfc/cached-nix-shell/tarball/master

用法

只需在 shebang 行中将 nix-shell 替换为 cached-nix-shell

#! /usr/bin/env cached-nix-shell
#! nix-shell -i python3 -p python
print("Hello, World!")

或者直接调用 cached-nix-shell

$ cached-nix-shell ./hello.py
$ cached-nix-shell -p python3 --run 'python --version'

或者使用 --wrap 选项来为内部调用 nix-shell 的程序。

$ cached-nix-shell --wrap stack build

性能

$ time ./hello.py # first run; no cache used
cached-nix-shell: updating cache
Hello, World!
./hello.py  0.33s user 0.06s system 91% cpu 0.435 total
$ time ./hello.py
Hello, World!
./hello.py  0.02s user 0.01s system 97% cpu 0.029 total

缓存和缓存失效

cached-nix-shell 存储由 nix-shell 设置的环境变量,并在后续运行中重用它们。它 跟踪 评估期间 nix 读取的文件,如果使用的文件中有任何更改,则执行适当的缓存失效。缓存存储在 ~/.cache/cached-nix-shell/

以下情况都涵盖在内

  • builtins.readFile 被使用
  • builtins.readDir 被使用
  • import ./file.nix 被使用
  • 更新 /etc/nix/nix.conf~/.config/nix/nix.conf
  • 更新 nix 频道
  • 更新环境变量 $NIX_PATH

以下情况由 cached-nix-shell 处理,并可能导致过时的缓存

  • builtins.fetchurl 或其他网络内置函数被使用(例如,在 nixpkgs-mozilla 中)

无运行时依赖