Community생산성 & 협업github.com

goromal/agent-skills

NixOS 설정이나 anixpkgs 패키지/모듈을 변경하거나 배포할 때 사용합니다. 편집-배포-테스트 워크플로우와 일반적인 주의사항을 다룹니다.

agent-skills란 무엇인가요?

이 스킬은 NixOS 시스템 설정을 관리하는 AI 에이전트를 위한 것입니다. 시스템 구성이 `anixpkgs` 저장소에 저장되어 있으며, `anix-upgrade-ui` API를 통해 변경 사항을 배포하는 워크플로우를 제공합니다. 주요 기능으로는 Nix 모듈 또는 Python/shell 스크립트 편집, 새 파일 스테이징 (`git add` 필요), API를 통한 배포 (`anix-upgrade-ui` 또는 CLI 대체), 그리고 결과 테스트가 포함됩니다. 특히 서비스 패키지나 NixOS 모듈을 변경할 때는 `"local": true` 플래그를 반드시 설정해야 하며, 그렇지 않으면 변경 사항이 적용되지 않습니다. `Claude Code`, `Cursor`, `Codex` 등의 AI 도구와 함께 사용하도록 설계되었으며, 여러 머신에 동시 배포가 가능하고, 원격 배포 시에는 CDN 캐시 문제를 방지하기 위해 브랜치 대신 전체 커밋 해시를 사용해야 합니다.

지원 대상✓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. 테스트 — 이 머신에서 결과를 커밋하기 전에 테스트합니다.

변경 사항이 서비스 패키지나 NixOS 모듈을 건드릴 때는 "local": true가 필수입니다. 그렇지 않으면 anix-upgrade가 dependencies.nix에서 local-build = false로 남겨두어 모듈의 cfg.package 기본값이 게시된 태그 바이너리로 해석되어 변경 사항이 조용히 적용되지 않습니다.

중요한 주의사항

  • NixOS 모듈은 올바른 위치에 import되어야 합니다 (예: pc-base.nix imports 목록). 파일을 추가하는 것만으로는 충분하지 않습니다.
  • 새 옵션은 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 본문을 제거합니다).

원격 머신의 경우 먼저 푸시하고 commit (전체 해시)을 전달하세요. branch가 아닙니다. 브랜치 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>  # 전체 로그

실행은 http://<hostname>.local/anix-upgrade/의 브라우저 UI에 via API 배지와 함께 나타납니다. 머신당 한 번에 하나의 실행만 가능합니다 (API와 수동 UI가 서로 차단합니다).

Individual skills in this repo

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

관련 스킬