[{"data":1,"prerenderedAt":553},["ShallowReactive",2],{"navigation_docs_zh_CN":3,"\u002Fzh-CN\u002Fgetting-started\u002Ffirst-pin":85,"\u002Fzh-CN\u002Fgetting-started\u002Ffirst-pin-surround":548},[4,19,41,75],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":18},"快速开始","i-lucide-book-open","\u002Fzh-CN\u002Fgetting-started","zh-CN\u002F1.getting-started",[10,14],{"title":11,"path":12,"stem":13},"安装","\u002Fzh-CN\u002Fgetting-started\u002Finstallation","zh-CN\u002F1.getting-started\u002F1.installation",{"title":15,"path":16,"stem":17},"第一个 Pin","\u002Fzh-CN\u002Fgetting-started\u002Ffirst-pin","zh-CN\u002F1.getting-started\u002F2.first-pin",false,{"title":20,"icon":21,"path":22,"stem":23,"children":24,"page":18},"使用指南","i-lucide-route","\u002Fzh-CN\u002Fguides","zh-CN\u002F2.guides",[25,29,33,37],{"title":26,"path":27,"stem":28},"更新与选择","\u002Fzh-CN\u002Fguides\u002Fupdating","zh-CN\u002F2.guides\u002F1.updating",{"title":30,"path":31,"stem":32},"组合 Checker 与 Fetcher","\u002Fzh-CN\u002Fguides\u002Fcombinations","zh-CN\u002F2.guides\u002F2.combinations",{"title":34,"path":35,"stem":36},"多 Source 与补丁","\u002Fzh-CN\u002Fguides\u002Fmulti-source","zh-CN\u002F2.guides\u002F3.multi-source",{"title":38,"path":39,"stem":40},"Package 与依赖哈希","\u002Fzh-CN\u002Fguides\u002Fdependencies","zh-CN\u002F2.guides\u002F4.dependencies",{"title":42,"icon":43,"path":44,"stem":45,"children":46,"page":18},"参考文档","i-lucide-code","\u002Fzh-CN\u002Freference","zh-CN\u002F3.reference",[47,51,55,59,63,67,71],{"title":48,"path":49,"stem":50},"CLI","\u002Fzh-CN\u002Freference\u002Fcli","zh-CN\u002F3.reference\u002F1.cli",{"title":52,"path":53,"stem":54},"运行配置","\u002Fzh-CN\u002Freference\u002Fconfiguration","zh-CN\u002F3.reference\u002F2.configuration",{"title":56,"path":57,"stem":58},"Pin 声明","\u002Fzh-CN\u002Freference\u002Fpins","zh-CN\u002F3.reference\u002F3.pins",{"title":60,"path":61,"stem":62},"Checker","\u002Fzh-CN\u002Freference\u002Fcheckers","zh-CN\u002F3.reference\u002F4.checkers",{"title":64,"path":65,"stem":66},"Fetcher","\u002Fzh-CN\u002Freference\u002Ffetchers","zh-CN\u002F3.reference\u002F5.fetchers",{"title":68,"path":69,"stem":70},"Package Builder","\u002Fzh-CN\u002Freference\u002Fbuilders","zh-CN\u002F3.reference\u002F6.builders",{"title":72,"path":73,"stem":74},"Reader 与 Pins File","\u002Fzh-CN\u002Freference\u002Freader","zh-CN\u002F3.reference\u002F7.reader",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":18},"排错指南","i-lucide-wrench","\u002Fzh-CN\u002Ftroubleshooting","zh-CN\u002F4.troubleshooting",[81],{"title":82,"path":83,"stem":84},"常见错误","\u002Fzh-CN\u002Ftroubleshooting\u002Fcommon-errors","zh-CN\u002F4.troubleshooting\u002F1.common-errors",{"id":86,"title":15,"body":87,"description":541,"extension":542,"links":543,"meta":544,"navigation":545,"path":16,"seo":546,"stem":17,"__hash__":547},"docs_zh_CN\u002Fzh-CN\u002F1.getting-started\u002F2.first-pin.md",{"type":88,"value":89,"toc":535},"minimark",[90,108,112,118,141,148,206,220,223,238,255,276,280,294,396,399,408,419,496,506,509,518,531],[91,92,93,94,98,99,103,104,107],"p",{},"本教程用 ",[95,96,97],"code",{},"NixOS\u002Fpatchelf"," 演示一条完整路径。GitHub 是入门示例，nix-pins 还支持",[100,101,102],"a",{"href":61},"其他版本检查方式","和",[100,105,106],{"href":65},"获取方式","。",[109,110,111],"h2",{"id":111},"创建声明",[91,113,114,115,117],{},"完成",[100,116,11],{"href":12},"后，在克隆的 nix-pins 仓库根目录创建工作目录：",[119,120,125],"pre",{"className":121,"code":122,"language":123,"meta":124,"style":124},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","mkdir -p demo\ncd demo\n","sh","",[95,126,127,135],{"__ignoreMap":124},[128,129,132],"span",{"class":130,"line":131},"line",1,[128,133,134],{},"mkdir -p demo\n",[128,136,138],{"class":130,"line":137},2,[128,139,140],{},"cd demo\n",[91,142,143,144,147],{},"创建 ",[95,145,146],{},"pins-config.nix","：",[119,149,153],{"className":150,"code":151,"language":152,"meta":124,"style":124},"language-nix shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{ pin }: {\n  patchelf = pin.github \"NixOS\u002Fpatchelf\";\n}\n","nix",[95,154,155,171,200],{"__ignoreMap":124},[128,156,157,161,165,168],{"class":130,"line":131},[128,158,160],{"class":159},"sMK4o","{",[128,162,164],{"class":163},"sHdIc"," pin",[128,166,167],{"class":159}," }:",[128,169,170],{"class":159}," {\n",[128,172,173,177,180,182,185,188,191,194,197],{"class":130,"line":137},[128,174,176],{"class":175},"spNyl","  patchelf",[128,178,179],{"class":159}," =",[128,181,164],{"class":163},[128,183,184],{"class":159},".",[128,186,187],{"class":163},"github",[128,189,190],{"class":159}," \"",[128,192,97],{"class":193},"sfazB",[128,195,196],{"class":159},"\"",[128,198,199],{"class":159},";\n",[128,201,203],{"class":130,"line":202},3,[128,204,205],{"class":159},"}\n",[91,207,208,211,212,215,216,219],{},[95,209,210],{},"patchelf"," 是本地 Pin 名。",[95,213,214],{},"pin.github"," 读取该仓库的最新 GitHub release，将原始 tag 作为 Version，使用同一 tag 获取源码。简写创建名为 ",[95,217,218],{},"default"," 的 Source。",[109,221,222],{"id":222},"更新与查看",[119,224,226],{"className":121,"code":225,"language":123,"meta":124,"style":124},"nix-pins update\nnix-pins status\n",[95,227,228,233],{"__ignoreMap":124},[128,229,230],{"class":130,"line":131},[128,231,232],{},"nix-pins update\n",[128,234,235],{"class":130,"line":137},[128,236,237],{},"nix-pins status\n",[91,239,240,241,243,244,107,247,250,251,254],{},"默认从当前目录读取 ",[95,242,146],{},"，把结果写入 ",[95,245,246],{},"pins.json",[95,248,249],{},"update"," 联网检查版本并计算源码哈希；",[95,252,253],{},"status"," 只读报告当前锁定结果，不检查新的上游版本。",[91,256,257,259,260,263,264,267,268,271,272,275],{},[95,258,246],{}," 的主要层次为 ",[95,261,262],{},"pins.patchelf.version"," 和 ",[95,265,266],{},"pins.patchelf.sources.default","。Source 中包含 Fetcher 参数、源码 ",[95,269,270],{},"hash","，以及可选的 ",[95,273,274],{},"derived"," 哈希。将配置与 Pins File 一起纳入项目版本控制，以便下游使用同一份锁定结果。",[109,277,279],{"id":278},"在-nix-中使用结果","在 Nix 中使用结果",[91,281,282,283,286,287,107,290,293],{},"在 ",[95,284,285],{},"demo\u002F"," 中创建 ",[95,288,289],{},"source.nix",[95,291,292],{},"..\u002Fnix\u002Fpins.nix"," 指向克隆的工具仓库中的 Reader：",[119,295,297],{"className":150,"code":296,"language":152,"meta":124,"style":124},"let\n  pkgs = import \u003Cnixpkgs> {};\n  pins = import ..\u002Fnix\u002Fpins.nix {\n    inherit pkgs;\n    file = .\u002Fpins.json;\n  };\nin\npins.patchelf.sources.default.src\n",[95,298,299,305,322,336,347,360,366,372],{"__ignoreMap":124},[128,300,301],{"class":130,"line":131},[128,302,304],{"class":303},"sbssI","let\n",[128,306,307,310,312,316,319],{"class":130,"line":137},[128,308,309],{"class":175},"  pkgs",[128,311,179],{"class":159},[128,313,315],{"class":314},"s2Zo4"," import",[128,317,318],{"class":193}," \u003Cnixpkgs>",[128,320,321],{"class":159}," {};\n",[128,323,324,327,329,331,334],{"class":130,"line":202},[128,325,326],{"class":175},"  pins",[128,328,179],{"class":159},[128,330,315],{"class":314},[128,332,333],{"class":193}," ..\u002Fnix\u002Fpins.nix",[128,335,170],{"class":159},[128,337,339,342,345],{"class":130,"line":338},4,[128,340,341],{"class":303},"    inherit",[128,343,344],{"class":175}," pkgs",[128,346,199],{"class":159},[128,348,350,353,355,358],{"class":130,"line":349},5,[128,351,352],{"class":175},"    file",[128,354,179],{"class":159},[128,356,357],{"class":193}," .\u002Fpins.json",[128,359,199],{"class":159},[128,361,363],{"class":130,"line":362},6,[128,364,365],{"class":159},"  };\n",[128,367,369],{"class":130,"line":368},7,[128,370,371],{"class":303},"in\n",[128,373,375,378,380,382,384,387,389,391,393],{"class":130,"line":374},8,[128,376,377],{"class":163},"pins",[128,379,184],{"class":159},[128,381,210],{"class":163},[128,383,184],{"class":159},[128,385,386],{"class":163},"sources",[128,388,184],{"class":159},[128,390,218],{"class":163},[128,392,184],{"class":159},[128,394,395],{"class":163},"src\n",[91,397,398],{},"构建锁定的源码：",[119,400,402],{"className":121,"code":401,"language":123,"meta":124,"style":124},"nix build --impure --file source.nix --no-link\n",[95,403,404],{"__ignoreMap":124},[128,405,406],{"class":130,"line":131},[128,407,401],{},[91,409,410,411,414,415,418],{},"下游 derivation 可以把这个 ",[95,412,413],{},"src"," 作为输入，例如在 ",[95,416,417],{},"pkgs.stdenv.mkDerivation"," 中使用：",[119,420,422],{"className":150,"code":421,"language":152,"meta":124,"style":124},"{\n  pname = \"patchelf\";\n  version = pins.patchelf.version;\n  src = pins.patchelf.sources.default.src;\n}\n",[95,423,424,429,444,465,492],{"__ignoreMap":124},[128,425,426],{"class":130,"line":131},[128,427,428],{"class":159},"{\n",[128,430,431,434,436,438,440,442],{"class":130,"line":137},[128,432,433],{"class":175},"  pname",[128,435,179],{"class":159},[128,437,190],{"class":159},[128,439,210],{"class":193},[128,441,196],{"class":159},[128,443,199],{"class":159},[128,445,446,449,451,454,456,458,460,463],{"class":130,"line":202},[128,447,448],{"class":175},"  version",[128,450,179],{"class":159},[128,452,453],{"class":163}," pins",[128,455,184],{"class":159},[128,457,210],{"class":163},[128,459,184],{"class":159},[128,461,462],{"class":163},"version",[128,464,199],{"class":159},[128,466,467,470,472,474,476,478,480,482,484,486,488,490],{"class":130,"line":338},[128,468,469],{"class":175},"  src",[128,471,179],{"class":159},[128,473,453],{"class":163},[128,475,184],{"class":159},[128,477,210],{"class":163},[128,479,184],{"class":159},[128,481,386],{"class":163},[128,483,184],{"class":159},[128,485,218],{"class":163},[128,487,184],{"class":159},[128,489,413],{"class":163},[128,491,199],{"class":159},[128,493,494],{"class":130,"line":349},[128,495,205],{"class":159},[91,497,498,499,502,503,107],{},"这个片段只展示输入属性，应用的完整构建步骤由下游定义。后续添加 Package 或补丁时，Reader 还需要 ",[95,500,501],{},"config"," 参数，见 ",[100,504,505],{"href":73},"Reader 参考",[109,507,508],{"id":508},"下次更新",[119,510,512],{"className":121,"code":511,"language":123,"meta":124,"style":124},"nix-pins update patchelf\n",[95,513,514],{"__ignoreMap":124},[128,515,516],{"class":130,"line":131},[128,517,511],{},[91,519,520,521,523,524,527,528,107],{},"确认 ",[95,522,246],{}," 的变更，再重新构建下游包。其他上游不必使用 GitHub：可以通过 ",[95,525,526],{},"pin.mk"," 独立组合 Checker 和 Fetcher，见",[100,529,530],{"href":31},"组合来源",[532,533,534],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":124,"searchDepth":137,"depth":137,"links":536},[537,538,539,540],{"id":111,"depth":137,"text":111},{"id":222,"depth":137,"text":222},{"id":278,"depth":137,"text":279},{"id":508,"depth":137,"text":508},"从一个 GitHub 示例开始，完成版本检查、源码锁定与 Nix 消费。","md",null,{},true,{"title":15,"description":541},"0IJsg5jiy4qIAeQpnO-_2OEc-3CEUF34Cq2b1GN3QvY",[549,551],{"title":11,"path":12,"stem":13,"description":550,"children":-1},"准备 Nix 与 nix-pins，选择 Flake 或 Cargo 安装方式。",{"title":26,"path":27,"stem":28,"description":552,"children":-1},"理解全部更新、选择性更新、失败保留和取消行为。",1790868073520]