goromal/agent-skills

NixOS構成やanixpkgsパッケージ/モジュールの変更・デプロイ時に使用します。編集・デプロイ・テストのワークフローとよくある落とし穴をカバーします。

agent-skills とは?

このスキルは、NixOSシステム設定やanixpkgsリポジトリ内のパッケージ・モジュールを編集し、デプロイするための完全なワークフローを提供します。主に`anix-upgrade-ui` APIを介してローカルまたはリモートのNixOSマシンに変更を適用し、`anix-upgrade` CLIをフォールバックとして使用します。ワークフローは「編集 → 新規ファイルのステージング → デプロイ → テスト」の順序で構成され、特に`"local": true`フラグが必須である点や、NixOSモジュールの適切なインポート、新しいオプションの宣言など、よくある落とし穴についても詳しく説明しています。また、リモートマシンへのデプロイでは、CDNキャッシュの問題を避けるためにブランチ名ではなくコミットハッシュを渡す必要がある点など、高度なAPI利用方法もカバーしています。

対応✓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に質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

このマシンは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リファレンス

同じAPIが anix-upgrade-ui をホストするすべてのマシンで動作します: http://<hostname>.local/anix-upgrade/api/v1/(認証なし)。run のボディフィールド(すべてオプション): version、commit、branch、source(ローカルパス)、local、boot — anix-upgrade フラグと同じセマンティクスです。レスポンスヘッダーを表示するために -si を使用してください(一部のプロキシは -s JSONボディを除去します)。

リモートマシンの場合は、まずプッシュし、branch ではなく commit(完全なハッシュ)を渡してください — ブランチのtarballはCDNキャッシュされ、--tarball-ttl 0 でも数分間古いままになる可能性があります。コミットハッシュはコンテンツアドレスの 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: 最後の512KBを再生し、その後ライブ
curl -o upgrade.log .../api/v1/log/<run_id>  # 完全なログ

実行はブラウザUI(http://<hostname>.local/anix-upgrade/)に via API バッジ付きで表示されます。1マシンにつき一度に1つの実行のみ可能です(APIと手動UIは互いにブロックします)。

Individual skills in this repo

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

関連スキル