关于 devenv-ecosystem
devenv-ecosystem 是面向 devenv 配置编写者的技能,涵盖语言环境、服务、工具、进程、输出和配置档案。它聚焦 devenv 专属模式,并说明 2.0 的默认进程管理器变化及配置注意事项。
主要功能
- 01配置语言、服务与开发工具
- 02设置脚本、任务和受管进程
- 03组织多 Shell 与自定义输出
- 04使用配置档案组合环境
- 05配置 Git 提交钩子与环境变量
适用场景
- 01为项目配置一致的开发环境
- 02为本地开发设置服务和进程
- 03为 CI 与开发场景定义不同 Shell
- 04排查配置档案导致的环境差异
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ takeokunn/ nixos-configuration --skill devenv-ecosystem安装后在 Claude Code 中输入/devenv-ecosystem确认已加载。
详细介绍
devenv 配置模式——语言设置、服务、工具(git-hooks、脚本、进程)、输出和配置方案。对于 Nix 语言语法、flake 结构或通用 NixOS 模块模式,请参阅 nix-ecosystem;本技能仅涵盖 devenv 特有的内容。
devenv 2.0
于 2026 年 3 月发布。两项变更会直接影响现有配置:
-
原生进程管理器现在是默认选项,取代 process-compose。如果配置依赖 process-compose 的行为(健康检查、
depends_on、就绪探测),除非显式设置process.manager.implementation = "process-compose";,否则会静默地改用原生管理器——不会报错,只是devenv up的运行时行为不同。要继续使用 process-compose:process.manager.implementation = "process-compose"; processes.api = { exec = "cargo run"; process-compose.readiness_probe.http_get = { host = "localhost"; port = 8080; path = "/health"; }; }; -
devenv 0.x 已弃用;从 devenv 3 开始将不再提供支持。
2.0 的其他变更对配置编写者来说只是表面变化:每条命令都会显示实时 TUI;原生 Shell 支持后台重建(保存文件后,按 Ctrl+Alt+R 即可在不退出 Shell 的情况下应用新环境);采用 C FFI 后端取代启动 nix 子进程;按属性增量缓存求值结果;以及支持跨仓库引用输出。
devenv 与 flakes
如果需要 services.*(比手工编写服务派生更简单)、git-hooks 集成、进程监管或 languages.* 版本管理,请优先使用 devenv。对于纯派生或 NixOS 系统配置,直接使用 flakes——在这些场景中,devenv 会增加额外开销。
多 Shell 和自定义输出(2.0+)
devenv.shells.<name> 可在一个文件中定义多个 Shell 配置——每个都是完整的 devenv 模块,而不是默认配置的叠加层:
{ pkgs, ... }:
{
devenv.shells.default = {
languages.python.enable = true;
packages = [ pkgs.git ];
};
devenv.shells.ci = {
languages.python.enable = true;
env.CI = "true";
};
}
devenv.outputs 可在模块内部公开任意 flake 输出(包、检查项):
{ pkgs, config, ... }:
{
devenv.outputs = {
packages.my-app = config.languages.rust.import ./. {};
checks.lint = pkgs.runCommand "lint" {} ''
${pkgs.clippy}/bin/cargo-clippy
touch $out
'';
};
}
语言模块提供了一个 import 构建器,可使用与 Shell 相同的工具链打包应用——config.languages.rust.import ./rust-app {}——无需手动编写 stdenv.mkDerivation。
配置方案(1.9+)
有三种不同的机制,很容易混为一谈:
- 值覆盖 —
profiles."python-3.12".config = { languages.python.version = "3.12"; };,通过devenv shell --profile python-3.12选择。 - 可组合模块 —
profiles.backend.module = { ... }、profiles.frontend.module = { ... },然后用profiles.fullstack.extends = [ "backend" "frontend" ];将它们组合起来。 - 按环境自动选择 —
profiles.hostname."ci-server".module和profiles.user."developer".module会根据机器的主机名或当前用户应用配置,无需显式指定--profile标志。这是一种静默选择机制:Shell 会因为运行它的用户或机器而启用相应配置方案,而不是因为调用时指定了什么——在排查“在我的机器上可以运行”的配置漂移问题前,值得先检查这一点。
git-hooks
git-hooks.hooks 可配置 pre-commit 钩子(格式化工具:nixfmt-rfc-style、prettier、black、rustfmt、ormolu、gofmt;代码检查工具:eslint、clippy、shellcheck、yamllint、actionlint、hadolint、markdownlint;安全/卫生检查:detect-private-keys、check-merge-conflicts、check-case-conflicts、editorconfig-checker;以及作为通用格式化工具包装器的 treefmt)。自定义钩子需要指定一个 entry Shell 命令和一个 files 正则表达式:
git-hooks.hooks.my-custom-hook = {
enable = true;
entry = "${pkgs.bash}/bin/bash -c 'echo Running custom hook'";
files = "\\.nix$";
pass_filenames = true;
};
脚本、任务、进程
scripts.<name>.exec 会在 Shell 内将命令加入 $PATH;tasks.<name> 则通过 before/after 添加依赖顺序,也可挂接到 Shell 进入流程本身(before = [ "devenv:enterShell" ];)——这样一来,每次执行 devenv shell 时都会自动运行该任务;阅读其他部分看似静态的配置时,很容易忽略这一点。
processes.<name>.exec 由当前启用的进程管理器管理(2.0 默认使用原生管理器,见上文)。请确保 enterShell 快速且可离线运行——它会在每次进入 Shell 时执行——并将依赖网络或耗时的设置操作放入带有明确触发条件的 task 中。
环境与密钥
dotenv.enable = true;(可通过 dotenv.filename 指定非默认文件)会加载 .env 样式的文件,这类文件
不应纳入版本控制。不要直接在 env 属性中放入真实密钥——它会被写入 Nix 存储,而该存储在本地计算机上任何人都可读取。
Context7
库 ID /cachix/devenv(信任评分 9.7,约 1354 个代码片段)——用于查询最新的 languages.*/services.*
选项结构、可用的 git-hooks,以及 devenv 2.0 迁移指南,因为这里的选项接口在小版本之间的变化速度比本文档更新得更快。
相关内容
- nix-ecosystem — Nix 语言语法、flake 结构与输入、通用 NixOS
模块模式、
lib.*函数;devenv 基于这些内容构建,但不会重新讲解。 - serena-usage — 用于浏览 devenv 配置的符号操作。
- context7-usage — 通过 Context7 MCP 获取最新 devenv 文档。