devenv 2.1:通过 libghostty 在 Nix 中使用 zsh、fish 和 nushell - devenv

Lobsters Hottest 工具

摘要

devenv 2.1 为 zsh、fish 和 nushell 引入了原生支持,使用内置的自动激活钩子替代了 direnv,并集成 libghostty 以优化终端处理与编码代理(coding agent)支持。

<p><a href="https://lobste.rs/s/9thd1c/devenv_2_1_nix_with_zsh_fish_nushell_via">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/05/11 13:03

# devenv 2.1:通过 libghostty 在 Nix 中使用 zsh、fish 和 nushell 来源:https://devenv.sh/blog/2026/05/07/devenv-21-nix-with-zsh-fish-and-nushell-via-libghostty/ https://github.com/cachix/devenv/edit/main/docs/src/blog/posts/devenv-v2.1-nix-with-zsh-fish-and-nushell-via-libghostty.md devenv 2.0 带来了热重载、状态栏和即时的缓存命中,但 `devenv shell` 总会把你丢进 bash,而且在 `cd` 时仍然需要 `direnv` 来激活环境。devenv 2.1 弥补了这两个差距,并为编程智能体(coding agents)添加了结构化的操作接口。 ## 每款 Shell,一视同仁 ### 原生 zsh、fish 和 nushell 在 zsh 中重新加载 Shell devenv 2.1 为 **zsh**、**fish** 和 **nushell** 增加了原生支持(devenv#2718),通过为每款 Shell 分别实现 rcfile 生成、环境差异跟踪、重载钩子和提示符集成,而不是透过 bash 来套一层壳。 Shell 的选取依据 `$SHELL`,也可以显式指定: ``` $ devenv shell $ SHELL=/bin/zsh devenv shell ``` 关闭了 devenv#36(从 2022 年 11 月就存在)、devenv#2487 和 devenv#2592。 ### 底层采用 libghostty 虚拟终端模拟器被替换为 libghostty,即 Ghostty 的终端引擎,为 devenv 提供了一个单一的 VT 解析器,以相同的方式处理所有 Shell。可靠地在 Nix 上构建 libghostty 需要上游接受多个补丁:libghostty-rs#27、ghostty#12364 和 ghostty#12548。感谢 Ghostty 维护者合入这些补丁。 ### 自动重载 在 2.0 中,重新构建后需要按 `Ctrl+Alt+R` 才能应用环境变化,而该快捷键在 macOS 上会与反向搜索冲突。2.1 在文件变化时会在后台重新评估,并在下一个提示符处应用新的环境(devenv#2595)。 ## 无需 direnv 的自动激活 `devenv hook` 替代 direnv 实现基于 `cd` 的激活。只需在你的 Shell 配置中添加一行: Bash ```bash eval "$(devenv hook bash)" ``` Zsh ```zsh eval "$(devenv hook zsh)" ``` Fish ```fish devenv hook fish | source ``` Nushell ```nushell devenv hook nu | save --force ~/.cache/devenv/hook.nu source ~/.cache/devenv/hook.nu ``` 当 `cd` 进入受信任的目录时激活,离开时自动复原。没有 `.envrc`,不依赖外部工具。信任关系通过 `devenv allow` 和 `devenv revoke` 管理。 ## 为编程智能体设计 在 2.0 中,如果智能体想在配置更改后重启你的 API,它必须杀掉整个 devenv 会话或者通过 ANSI 码去抓取 TUI。2.1 用结构化的句柄取代了这些做法。 ### 从命令行管理进程 新的子命令可作用于运行中的 `devenv up`(devenv#2621): ``` $ devenv processes list $ devenv processes status $ devenv processes logs api $ devenv processes restart api $ devenv processes stop worker $ devenv processes start worker ``` 这些命令与原生进程管理器配合工作,也可以作为 MCP 工具供外部使用。 ### 默认静默模式 devenv 通过 `CLAUDECODE`、`OPENCODE_CLIENT` 和 `AI_AGENT` 检测智能体,并自动切换到静默模式,抑制会浪费 token 的 TUI 进度输出(devenv#2723)。可以通过 `--verbose` 或 `--tui` 覆盖。 ## OpenTelemetry 追踪导出 devenv 2.1 导出 OTLP 追踪(devenv#2415)。每一次 Nix 求值、derivation 构建、任务运行和托管进程都被转化为一个 span,并附带有诸如 `devenv.activity.kind`、`devenv.derivation_path`、`devenv.url` 和 `devenv.outcome` 等属性。通过新的统一标志 `--trace-to` 启用: ``` $ devenv --trace-to otlp-grpc shell $ devenv --trace-to otlp-http-protobuf:http://localhost:4318 shell ``` 支持三种 OTLP 格式:`otlp-grpc`(内置)、`otlp-http-protobuf` 和 `otlp-http-json`(通过 cargo features 可选加入)。端点可通过标志或标准的 `OTEL_EXPORTER_OTLP_*` 变量设置。追踪上下文会跨进程边界传播:生成的子任务、Shell 命令和进程会继承 `TRACEPARENT` 和 `TRACESTATE`,因此接入了追踪的子进程会出现在与父级 `devenv up` 运行相同的追踪链上。 `--trace-to` 用单一的 `[格式:]目标` 语法取代了 `--trace-output` 和 `--trace-format`,并支持多个目标: ``` $ devenv --trace-to pretty:stderr --trace-to otlp-grpc shell $ DEVENV_TRACE_TO=json:file:/tmp/trace.json,otlp-grpc devenv shell ``` ## 任务和进程 `devenv tasks run` 默认使用 `before` 模式,因此依赖任务也会运行(devenv#2551);通过 `--mode single` 可恢复旧行为。同样的 `--mode` 标志现在也能控制 `devenv up` 启动哪些进程(devenv#2721)。 任务可以通过写入 `$DEVENV_TASK_OUTPUT_FILE` 在进入 Shell 时打印消息(devenv#2500)。 ## 还有更多 **Nix 2.34。** 多线程解压 tarball、求值器性能提升以及 REPL 增强。 **`require_version` in devenv.yaml。** 为项目强制要求最低的 devenv CLI 版本。设置 `require_version: true` 可匹配当前使用的模块版本,也可以使用约束字符串,例如 `">=2.1"`(devenv#2391)。 **ROCm 支持。** 新增 `nixpkgs.rocmSupport` 选项,用于在 nixpkgs 配置中启用 ROCm。 **错误时显示完整栈追踪。** `show-trace` 现在始终启用,因此求值错误会包含完整的栈追踪,而不再是截断的、提示使用不存在的 `--show-trace` 标志的消息(devenv#2725)。 **Ctrl+X 停止进程。** 在 TUI 中停止单个进程,同时保持其可见并可重新启动。 **Ctrl+H 隐藏已停止的进程。** 在 TUI 中切换隐藏已停止的进程,以便专注于仍在运行的进程。失败的进程会保持可见,进程计数会显示隐藏的数量(devenv#2692)。 **端口分配修复。** 端口值(`config.processes.<name>.ports.<name>.value`)现在能在 `devenv shell` 和 `devenv tasks run` 中正确解析,与 `devenv up` 分配的端口一致(devenv#2710)。绑定了 `0.0.0.0` 或 `[::]` 的端口现在可以被检测到,从而防止多个 devenv 实例分配相同的端口(devenv#2567)。严格的端口重启不再因为内核套接字清理期间的“端口已占用”而失败(devenv#2647)。 **其他数十项错误修复。** 文件监视去重、导入优先级、eval 缓存一致性、进程生命周期修复以及终端兼容性改进。详情见完整更新日志。 ## 破坏性变更 - **`devenv tasks run`** 现在默认运行依赖任务(使用 `before` 模式而非 `single`)。使用 `--mode single` 可恢复旧行为。 ## 结语 有任何反馈,欢迎提交 issue 或加入 Discord。 Domen

相似文章

使用Nix的开发环境:四个快速示例

Michael Stapelberg

本教程演示了使用Nix设置开发环境的四种方法,包括交互式一次性使用、配置文件以及密封的Nix Flakes,并以GoCV和OpenCV为例。

我喜欢的 NixOS 声明式安装方式

Michael Stapelberg

一份关于使用 nixos-anywhere 等工具通过网络声明式安装 NixOS 的指南,重点强调在版本控制下管理配置文件。

Libghostty 即将到来

Mitchell Hashimoto

Mitchell Hashimoto 宣布了 libghostty 的计划,这是一个可嵌入的终端模拟库,首先推出 libghostty-vt,这是一个从 Ghostty 中提取的零依赖终端序列解析器。