一键导入
nixpkgs-register
nixpkgsに新しいパッケージを登録するPRを作成するワークフロー。「nixpkgsにパッケージを追加したい」「nixpkgsにPRを出したい」「nixpkgsに登録したい」「Nixパッケージを作りたい」「このツールをnixpkgsに入れたい」といった場面で使う。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
nixpkgsに新しいパッケージを登録するPRを作成するワークフロー。「nixpkgsにパッケージを追加したい」「nixpkgsにPRを出したい」「nixpkgsに登録したい」「Nixパッケージを作りたい」「このツールをnixpkgsに入れたい」といった場面で使う。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | nixpkgs-register |
| description | nixpkgsに新しいパッケージを登録するPRを作成するワークフロー。「nixpkgsにパッケージを追加したい」「nixpkgsにPRを出したい」「nixpkgsに登録したい」「Nixパッケージを作りたい」「このツールをnixpkgsに入れたい」といった場面で使う。 |
nixpkgsリポジトリに新しいパッケージを追加するPRを出すための一連のワークフロー。
gh CLI が認証済み1. 対象パッケージの調査
2. nixpkgs の fork・clone
3. package.nix の作成
4. ビルド・テスト
5. メンテナー登録(初回のみ)
6. PR の作成
まずパッケージングに必要な情報を集める。
nixpkgsに既に存在しないことを確認する。
nix search nixpkgs <パッケージ名>
GitHub issueやPRも検索して、誰かが既に作業中でないか確認する。
gh search prs --repo NixOS/nixpkgs "<パッケージ名>" --limit 10
gh search issues --repo NixOS/nixpkgs "<パッケージ名>" --limit 10
パッケージングに必要な以下の情報を調べる。
v1.0.0 等)調査結果に基づき、使用するNixビルダーを決定する。
| ビルドシステム | Nix ビルダー | hash フィールド |
|---|---|---|
| npm | buildNpmPackage | npmDepsHash |
| Cargo (Rust) | rustPlatform.buildRustPackage | cargoHash |
| Go | buildGoModule | vendorHash |
| Python (pip) | buildPythonPackage | なし(dependenciesで指定) |
| CMake | stdenv.mkDerivation + cmake | なし |
| Meson | stdenv.mkDerivation + meson | なし |
類似パッケージのpackage.nixを参考にする。以下で検索できる:
# GitHub上でnixpkgsリポジトリ内を検索
gh api search/code -f q="buildNpmPackage filename:package.nix repo:NixOS/nixpkgs" --jq '.items[:5] | .[].path'
初回のみ必要。既にfork済みならスキップ。
# fork(既にfork済みなら不要)
gh repo fork NixOS/nixpkgs --clone=false
# clone(shallow cloneで高速化)
git clone --depth=1 https://github.com/<ユーザー名>/nixpkgs.git
cd nixpkgs
# upstream設定
git remote add upstream https://github.com/NixOS/nixpkgs.git
注意: nixpkgsは非常に巨大なリポジトリ。--depth=1 で shallow clone することを強く推奨する。
git fetch upstream master --depth=1
git checkout -b <パッケージ名>-init upstream/master
ブランチ名はわかりやすければ何でもよい。<パッケージ名>-init が一般的。
pkgs/by-name/ 以下に、パッケージ名の先頭2文字のディレクトリを作る。
# 例: "vite-plus" の場合
mkdir -p pkgs/by-name/vi/vite-plus
ルール:
pkgs/by-name/<2文字>/<パッケージ名>/package.nix を作成する。
ビルドシステムに応じたテンプレートを使う。以下に主要なテンプレートを示す。
{
lib,
buildNpmPackage,
fetchFromGitHub,
versionCheckHook,
nix-update-script,
}:
buildNpmPackage (finalAttrs: {
pname = "<パッケージ名>";
version = "<バージョン>";
src = fetchFromGitHub {
owner = "<GitHubオーナー>";
repo = "<リポジトリ名>";
tag = "v${finalAttrs.version}";
hash = ""; # 初回ビルド時にエラーで正しい値が表示される
};
npmDepsHash = ""; # prefetch-npm-deps package-lock.json で取得
# 必要に応じて以下を追加
# dontNpmBuild = true; # ビルドステップが不要な場合
# makeCacheWritable = true; # キャッシュ書き込みが必要な場合
# npmPackFlags = [ "--ignore-scripts" ]; # postinstall等をスキップ
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
passthru.updateScript = nix-update-script { };
meta = {
description = "<説明文>";
homepage = "<ホームページURL>";
changelog = "https://github.com/<owner>/<repo>/releases/tag/v${finalAttrs.version}";
license = lib.licenses.<ライセンス>;
maintainers = with lib.maintainers; [ <GitHubユーザー名> ];
mainProgram = "<実行ファイル名>";
};
})
{
lib,
fetchFromGitHub,
nix-update-script,
rustPlatform,
versionCheckHook,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "<パッケージ名>";
version = "<バージョン>";
src = fetchFromGitHub {
owner = "<GitHubオーナー>";
repo = "<リポジトリ名>";
tag = "v${finalAttrs.version}";
hash = "";
};
cargoHash = ""; # 初回ビルド時にエラーで正しい値が表示される
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
passthru.updateScript = nix-update-script { };
meta = {
description = "<説明文>";
homepage = "<ホームページURL>";
changelog = "https://github.com/<owner>/<repo>/releases/tag/v${finalAttrs.version}";
license = lib.licenses.<ライセンス>;
platforms = with lib.platforms; linux ++ darwin;
maintainers = with lib.maintainers; [ <GitHubユーザー名> ];
mainProgram = "<実行ファイル名>";
};
})
{
lib,
buildGoModule,
fetchFromGitHub,
nix-update-script,
versionCheckHook,
}:
buildGoModule (finalAttrs: {
pname = "<パッケージ名>";
version = "<バージョン>";
src = fetchFromGitHub {
owner = "<GitHubオーナー>";
repo = "<リポジトリ名>";
tag = "v${finalAttrs.version}";
hash = "";
};
vendorHash = ""; # 初回ビルド時にエラーで正しい値が表示される
doInstallCheck = true;
nativeInstallCheckInputs = [ versionCheckHook ];
passthru.updateScript = nix-update-script { };
meta = {
description = "<説明文>";
homepage = "<ホームページURL>";
license = lib.licenses.<ライセンス>;
maintainers = with lib.maintainers; [ <GitHubユーザー名> ];
mainProgram = "<実行ファイル名>";
};
})
meta は package.nix の最後に配置する。以下のフィールドに注意:
"Ergonomic keyboard layout generator""A tool called Ergogen for generating keyboard layouts."lib.licenses.mit, lib.licenses.asl20, lib.licenses.gpl3Only 等初回は hash を空文字 "" または lib.fakeHash にしてビルドし、エラーメッセージから正しい hash をコピーする。
# nixpkgsリポジトリのルートで実行
nix-build -A <パッケージ名>
エラーメッセージに got: sha256-XXXX... と表示されるので、その値を package.nix の該当フィールドに貼り付ける。
hash を埋める順序:
src の hash → ビルドエラーから取得して埋めるnpmDepsHash, cargoHash, vendorHash)→ 再度ビルドしてエラーから取得npmの場合は prefetch-npm-deps も使える:
nix-shell -p prefetch-npm-deps --run "prefetch-npm-deps package-lock.json"
hashを埋めたら再度ビルドする。
nix-build -A <パッケージ名>
成功すると ./result シンボリックリンクが作られる。
ビルド成果物が正しく動くか確認する。
# バイナリの確認
ls ./result/bin/
# バージョン表示等で動作確認
./result/bin/<実行ファイル名> --version
./result/bin/<実行ファイル名> --help
nixpkgsはフォーマッターの使用を推奨している。
# nixfmt で整形
nix-shell -p nixfmt-rfc-style --run "nixfmt pkgs/by-name/<2文字>/<パッケージ名>/package.nix"
nixpkgsへの初回コントリビューションでは、自分をメンテナーリストに追加する必要がある。
maintainers/maintainer-list.nix を編集し、アルファベット順の正しい位置に自分のエントリを追加する。
<GitHubユーザー名> = {
email = "<メールアドレス>";
github = "<GitHubユーザー名>";
githubId = <GitHubユーザーID(数値)>;
name = "<表示名>";
};
GitHubのユーザーIDは以下で確認できる:
gh api users/<GitHubユーザー名> --jq '.id'
メンテナー登録は package.nix とは別のコミットにする。
# メンテナー追加を先にコミット
git add maintainers/maintainer-list.nix
git commit -m "maintainers: add <GitHubユーザー名>"
package.nix のコミットメッセージは <パッケージ名>: init at <バージョン> という形式にする。
git add pkgs/by-name/<2文字>/<パッケージ名>/package.nix
git commit -m "<パッケージ名>: init at <バージョン>"
git push origin <ブランチ名>
PRのタイトルも <パッケージ名>: init at <バージョン> とする。この形式が重要で、CIの自動ビルドのトリガーになる。
gh pr create --repo NixOS/nixpkgs \
--title "<パッケージ名>: init at <バージョン>" \
--body "$(cat <<'EOF'
<パッケージの簡単な説明>
homepage: <ホームページURL>
## Things done
- Built on platform(s)
- [ ] x86_64-linux
- [ ] aarch64-linux
- [ ] x86_64-darwin
- [x] aarch64-darwin
- For non-Linux: Is sandboxing enabled in `nix.conf`? (See [Nix manual](https://nixos.org/manual/nix/stable/command-ref/conf-file.html))
- [ ] `sandbox = relaxed`
- [ ] `sandbox = true`
- [ ] Tested, as applicable:
- [NixOS test(s)](https://nixos.org/manual/nixos/unstable/index.html#sec-nixos-tests) (look inside [nixos/tests](https://github.com/NixOS/nixpkgs/blob/master/nixos/tests))
- and/or [package tests](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#package-tests)
- or, for functions and "core" functionality, tests in [lib/tests](https://github.com/NixOS/nixpkgs/blob/master/lib/tests) or [pkgs/test](https://github.com/NixOS/nixpkgs/blob/master/pkgs/test)
- made sure NixOS tests are [linked](https://github.com/NixOS/nixpkgs/blob/master/pkgs/README.md#linking-nixos-module-tests-to-a-package) to the relevant packages
- [ ] Tested compilation of all packages that depend on this change using `nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD"`. Note: all changes have to be committed, also see [nixpkgs-review usage](https://github.com/Mic92/nixpkgs-review#usage)
- [x] Tested basic functionality of all binary files (usually in `./result/bin/`)
- [x] Fits [CONTRIBUTING.md](https://github.com/NixOS/nixpkgs/blob/master/CONTRIBUTING.md).
EOF
)"
ビルドを確認したプラットフォームのチェックボックスを [x] に変更すること。
hash や npmDepsHash が合わないエラーが出た場合、エラーメッセージの got: の値をそのままコピーして貼り付ける。
package-lock.json がリポジトリに含まれていない場合、ビルド前に生成する必要がある。npmDeps の代わりに importNpmLock を使う方法もある。詳しくは nixpkgs JavaScript docs を参照。
ランタイム依存が不足している可能性がある。nativeBuildInputs(ビルド時のみ)と buildInputs(ランタイム)を確認する。共有ライブラリが必要な場合は autoPatchelfHook の使用を検討する。
属性名にアンダースコアのプレフィックスを付ける(例: 0ad → ディレクトリ名は _0ad)。ただし pname はそのまま "0ad" とする。
コード変更・diff・ブランチ・PRについて、リッチでインタラクティブな解説を生成するスキル。「この変更を解説して」「このPRを説明して」「diffを分かりやすくまとめて」「このブランチの変更点を教えて」「変更内容の解説ページを作って」と言われたら使う。背景・直感・コード・批評・クイズの5セクションから成る自己完結HTMLファイルを出力する。解説だけでなく批判的な視点も含む。他人のPRや自分の変更を、初学者にも分かる形で理解・共有したい場面で積極的に使うこと。
長考や自問自答の末に、元の質問から逸れた(drift した)回答をしてしまったときに、 思考を原点に立て直すためのリカバリスキル。同一セッションで元の質問に答え直す「原点回帰」を核に、 それでも直らない場合は、汚染のないセッションで再出発するための「質問カード」を出して /clear や 新セッションへ誘導する、一直線のエスカレーション型。 「迷走してる」「質問に答えてない」「そんなこと聞いてない」「ズレてる」「話が逸れた」「やりなおして」 「元の質問に戻って」「なんでその話になってるの」と言われたら使う。 ユーザーが直前の回答に対して困惑・不満・「?」を示したとき、あるいは自分の回答が元の質問と かみ合っていないと気づいたときは、指示される前にこのスキルを提案・発動してよい。
忖度をやめ、容赦なく正直な高レベルアドバイザーとして振る舞うモード。一度呼ばれたらセッション全体でこの人格を貫く。 ユーザーの思考に意見し、前提を疑い、避けている盲点を暴き、弱い推論を解剖し、自己欺瞞・言い訳・機会費用を名指しする。ただし丁寧な言葉を使い、攻撃と正直さを混同しない。 「厳しく評価して」「容赦なく」「盲点を指摘して」「甘やかさないで」と言われたら使う。対象は仕事・思考・意思決定・計画・戦略。 ユーザーが同意や称賛を求めているだけに見えるとき、自分を正当化して逃げているとき、不快な決断を先送りしているときは、このモードを提案してよい。
今のClaude Codeセッションでの会話を踏まえて、そこで得た学びを「個人用の公開メモ」1枚にまとめてチャットに返すスキル。「/matome 〇〇についてまとめて」「ここまでの会話をまとめて」「今の話を公開メモにして」「会話の内容を1枚にまとめて」と言われたら使う。単発の質問への要約ではなく、会話の中で芋づる式に出てきた話題(〇〇を聞いたら△△が出て、それを掘ったら□□が…)を全部拾い、3ヶ月後の自分が読んで理解できる順に再構成するのが特徴。社内コードや機密は自動で抽象化する。
対象を徹底的に理解する。記事、リポジトリ、本、論文などのコンテンツについて、メンタルモデルの獲得を目指して深い理解に達するまで探索・質問・解説を繰り返す。「徹底的に理解したい」「深掘りしたい」「このリポジトリを理解したい」「この本を読み解きたい」といった場面で使用する。
虫食い思考(コンサル業界の「空パック / Ghost Deck」に相当)でユーザーと一緒に進めるためのスキル。 先に「型」(答えるべき問い・アジェンダ・テンプレ)を作って「虫食い状態」にしてから、 その穴を1つずつ埋めていく進め方。 「虫食いで」「虫食い思考で」「空パックで」「骨子から作って」「先に型を作って」 「アジェンダから決めて」「アウトライン先行で」「skeleton-first」「ghost deck」 と言われたら使う。 Q振り返り、次Q発表準備、提案資料作成、採用面接の準備、ブログや記事の構成、 「何かを書く/考える前段で先に骨組みを置きたい」場面で積極的に使うこと。 ユーザーの思考が発散して整理が必要そうなときに、「先に虫食いで構造化しませんか?」と提案するのもよい。