mcpField
D
devenv-ecosystem

devenv-ecosystem

github.com/takeokunn开发74143 次安装今天更新
代码仓库

关于 devenv-ecosystem

devenv-ecosystem 是面向 devenv 配置编写者的技能,涵盖语言环境、服务、工具、进程、输出和配置档案。它聚焦 devenv 专属模式,并说明 2.0 的默认进程管理器变化及配置注意事项。

主要功能

  1. 01配置语言、服务与开发工具
  2. 02设置脚本、任务和受管进程
  3. 03组织多 Shell 与自定义输出
  4. 04使用配置档案组合环境
  5. 05配置 Git 提交钩子与环境变量

适用场景

  1. 01为项目配置一致的开发环境
  2. 02为本地开发设置服务和进程
  3. 03为 CI 与开发场景定义不同 Shell
  4. 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 文档。

评论

支持 Markdown