Community生產力與協作github.com

goromal/agent-skills — NixOS 配置編輯與部署助手

用於修改或部署 NixOS 配置或任何 anixpkgs 套件/模組時使用。涵蓋編輯-部署-測試工作流程與常見陷阱。

agent-skills — NixOS 配置編輯與部署助手 是什麼?

此技能專為使用 NixOS 並透過 `anixpkgs` 儲存庫管理系統配置的開發者設計。它自動化了典型的編輯-部署-測試循環:開發者編輯 `pkgs/` 下的 Nix 模組或腳本後,技能會透過 `anix-upgrade-ui` API 觸發本地部署,並串流傳回即時日誌,直到顯示成功或失敗訊息。技能重點提醒使用者必須先 `git add` 新檔案,否則 `git-cc` 會在部署時靜默忽略它們。對於遠端機器,技能強烈建議傳遞完整 commit 雜湊而非分支名稱,以避免 CDN 快取造成的過時建置。它也能查詢執行狀態、擷取完整日誌,並在瀏覽器 UI 中識別 API 觸發的執行。該技能支援 Claude Code 等 AI 代理,能顯著減少反覆手動指令,確保變更確實生效。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/goromal/agent-skills/tree/HEAD/skills/anixpkgs-deploy

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

此機器執行 NixOS;所有系統配置位於 anixpkgs 儲存庫,複製在 ~/sources/anixpkgs(正式路徑)與可能另一個路徑(例如 /data/andrew/dev/claude/sources/anixpkgs)。目前的樹透過其 flake 配置部署;anix-upgrade 為較舊的樹保留基於頻道的路徑。

工作流程

  1. 編輯 pkgs/ 下相關的 Nix 模組或 Python/shell 腳本。
  2. 暫存新檔案 — git-cc(由 anix-upgrade 使用)只會複製已追蹤的檔案(git ls-files)。請先執行 git add 加入新檔案,否則它們會在建置時被靜默忽略。
  3. 部署 透過本機 anix-upgrade-ui API(建議)進行,串流執行直到完成:
    upgrade_host="$(hostname).local"
    curl -si "http://${upgrade_host}/anix-upgrade/api/v1/run" -X POST \
      -H 'Content-Type: application/json' \
      -d '{"source": "/path/to/anixpkgs", "local": true}'
    # 202 → {"run_id": "<uuid>", "started": true};  409 → 已在執行中
    curl -N "http://${upgrade_host}/anix-upgrade/api/v1/stream/<run_id>"
    # 結束時顯示 [UPGRADE SUCCESSFUL] 或 [UPGRADE FAILED (exit N)],然後 [DONE]
    
    使用機器的 .local 主機名稱,而非 localhost:nginx 僅在機器特定的虛擬主機上暴露此路由。 CLI 備用方案(僅在 API 無法連線時使用):anix-upgrade --local -s /path/to/anixpkgs。
  4. 測試 在此機器上測試結果後再提交。

"local": true 是必要的,當變更影響服務套件或 NixOS 模組時 — 沒有此設定 anix-upgrade 會讓 dependencies.nix 維持 local-build = false,因此模組的 cfg.package 預設會解析為已發佈標籤的二進位檔,變更會靜默地不生效。

重要陷阱

  • NixOS 模組必須在正確位置匯入(例如 pc-base.nix 的匯入清單)— 僅新增檔案是不夠的。
  • 新選項必須在 pkgs/nixos/components/opts.nix 中宣告,並在 pc-base.nix 中賦值,才能在 base-dev-pkgs.nix 等元件中使用。
  • MCP 伺服器透過 claude mcp add -s user ... 為每個使用者註冊;claude-setup 腳本(位於 base-dev-pkgs.nix)處理此操作,且在新增伺服器後必須重新執行。

部署到其他機器 / API 參考

每個執行 anix-upgrade-ui 的機器都執行相同的 API:http://<hostname>.local/anix-upgrade/api/v1/(無需認證)。run 請求主體欄位(均為選填):version、commit、branch、source(本機路徑)、local、boot — 語義與 anix-upgrade 旗標相同。使用 -si 讓回應標頭顯示(某些代理會移除 -s 的 JSON 回應主體)。

對於遠端機器,請先推送並傳遞 commit(完整雜湊),而非 branch — 分支 tarball 經 CDN 快取,即使使用 --tarball-ttl 0 也可能延遲數分鐘;使用 commit 雜湊則會以內容定址的 fetchGit 繞過 CDN:

curl -si -X POST http://<hostname>.local/anix-upgrade/api/v1/run \
  -H 'Content-Type: application/json' \
  -d "{\"commit\": \"$(git rev-parse HEAD)\", \"local\": true}"

監控執行(run_id 在新的執行開始後會回傳 404,因此請先擷取日誌再重新觸發):

curl -s  .../api/v1/status/<run_id> | jq .   # 狀態:running|success|failed
curl -N  .../api/v1/stream/<run_id>          # SSE:重播最後 512 KB,然後即時串流
curl -o upgrade.log .../api/v1/log/<run_id>  # 完整日誌

執行記錄會出現在瀏覽器 UI(http://<hostname>.local/anix-upgrade/),並帶有 via API 徽章;每台機器一次只能執行一個工作(API 與手動 UI 會互相封鎖)。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能