This commit is contained in:
Amy de Buitléir 2025-09-15 15:55:03 +01:00
parent 6a5482afcf
commit d9ba23304f
2 changed files with 119 additions and 9 deletions

View file

@ -5139,14 +5139,112 @@ However, you can use any of the flake reference styles defined in <a href="#flak
<div class="listingblock">
<div class="title">hello-again</div>
<div class="content">
<pre class="pygments highlight nowrap"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span>cat:<span class="tok-w"> </span>hello-again:<span class="tok-w"> </span>No<span class="tok-w"> </span>such<span class="tok-w"> </span>file<span class="tok-w"> </span>or<span class="tok-w"> </span>directory
<pre class="pygments highlight nowrap"><code data-lang="bash"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-ch">#!/usr/bin/env sh</span>
<span class="tok-nb">echo</span><span class="tok-w"> </span><span class="tok-s2">&quot;I&#39;m a flake, but I&#39;m running a command defined in a non-flake package.&quot;</span>
hello-nix
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
<div class="listingblock">
<div class="title">flake.nix</div>
<div class="content">
<pre class="pygments highlight nowrap"><code data-lang="nix"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span></pre></div></td><td class="code"><div><pre><span></span>cat<span class="tok-p">:</span> flake<span class="tok-o">.</span>nix<span class="tok-p">:</span> No such file <span class="tok-ow">or</span> directory
<pre class="pygments highlight nowrap"><code data-lang="nix"><div class="lineno"><table class="linenotable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span>
<span class="normal">11</span>
<span class="normal">12</span>
<span class="normal">13</span>
<span class="normal">14</span>
<span class="normal">15</span>
<span class="normal">16</span>
<span class="normal">17</span>
<span class="normal">18</span>
<span class="normal">19</span>
<span class="normal">20</span>
<span class="normal">21</span>
<span class="normal">22</span>
<span class="normal">23</span>
<span class="normal">24</span>
<span class="normal">25</span>
<span class="normal">26</span>
<span class="normal">27</span>
<span class="normal">28</span>
<span class="normal">29</span>
<span class="normal">30</span>
<span class="normal">31</span>
<span class="normal">32</span>
<span class="normal">33</span>
<span class="normal">34</span>
<span class="normal">35</span>
<span class="normal">36</span>
<span class="normal">37</span>
<span class="normal">38</span>
<span class="normal">39</span>
<span class="normal">40</span>
<span class="normal">41</span>
<span class="normal">42</span>
<span class="normal">43</span>
<span class="normal">44</span>
<span class="normal">45</span>
<span class="normal">46</span>
<span class="normal">47</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-p">{</span>
<span class="tok-ss">inputs</span> <span class="tok-o">=</span> <span class="tok-p">{</span>
nixpkgs<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;github:NixOS/nixpkgs&quot;</span><span class="tok-p">;</span>
flake-utils<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;github:numtide/flake-utils&quot;</span><span class="tok-p">;</span>
<span class="hll"> hello-flake<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;git+https://codeberg.org/mhwombat/hello-flake&quot;</span><span class="tok-p">;</span>
</span> <span class="tok-p">};</span>
<span class="hll"> <span class="tok-ss">outputs</span> <span class="tok-o">=</span> <span class="tok-p">{</span> self<span class="tok-p">,</span> nixpkgs<span class="tok-p">,</span> flake-utils<span class="tok-p">,</span> hello-flake <span class="tok-p">}:</span>
</span> flake-utils<span class="tok-o">.</span>lib<span class="tok-o">.</span>eachDefaultSystem <span class="tok-p">(</span>system<span class="tok-p">:</span>
<span class="tok-k">let</span>
<span class="tok-ss">pkgs</span> <span class="tok-o">=</span> <span class="tok-nb">import</span> nixpkgs <span class="tok-p">{</span> <span class="tok-k">inherit</span> system<span class="tok-p">;</span> <span class="tok-p">};</span>
<span class="tok-k">in</span>
<span class="tok-p">{</span>
<span class="tok-ss">packages</span> <span class="tok-o">=</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
<span class="tok-ss">hello</span> <span class="tok-o">=</span> pkgs<span class="tok-o">.</span>stdenv<span class="tok-o">.</span>mkDerivation <span class="tok-k">rec</span> <span class="tok-p">{</span>
<span class="tok-ss">name</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;hello-again&quot;</span><span class="tok-p">;</span>
<span class="tok-ss">src</span> <span class="tok-o">=</span> <span class="tok-l">./.</span><span class="tok-p">;</span>
<span class="tok-ss">unpackPhase</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;true&quot;</span><span class="tok-p">;</span>
<span class="tok-ss">buildPhase</span> <span class="tok-o">=</span> <span class="tok-s2">&quot;:&quot;</span><span class="tok-p">;</span>
<span class="tok-ss">installPhase</span> <span class="tok-o">=</span>
<span class="tok-s tok-s-Multiline">&#39;&#39;</span>
<span class="tok-s tok-s-Multiline"> mkdir -p $out/bin</span>
<span class="tok-s tok-s-Multiline"> cp $src/hello-again $out/bin</span>
<span class="tok-s tok-s-Multiline"> chmod +x $out/bin/hello-again</span>
<span class="hll"><span class="tok-s tok-s-Multiline"> # modify the hello-again script so it can find hello-flake</span>
</span><span class="hll"><span class="tok-s tok-s-Multiline"> HELLO=$(type -p hello-flake)</span>
</span><span class="hll"><span class="tok-s tok-s-Multiline"> sed &quot;s_hello-nix_&quot;$HELLO&quot;_&quot; --in-place $out/bin/hello-again</span>
</span><span class="tok-s tok-s-Multiline"> &#39;&#39;</span><span class="tok-p">;</span>
<span class="hll"> <span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span> hello-flake <span class="tok-p">];</span>
</span> <span class="tok-p">};</span>
<span class="tok-ss">default</span> <span class="tok-o">=</span> hello<span class="tok-p">;</span>
<span class="tok-p">};</span>
<span class="tok-ss">apps</span> <span class="tok-o">=</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
<span class="tok-ss">hello</span> <span class="tok-o">=</span> flake-utils<span class="tok-o">.</span>lib<span class="tok-o">.</span>mkApp <span class="tok-p">{</span> <span class="tok-ss">drv</span> <span class="tok-o">=</span> self<span class="tok-o">.</span>packages<span class="tok-o">.</span><span class="tok-si">${</span>system<span class="tok-si">}</span><span class="tok-o">.</span>hello<span class="tok-p">;</span> <span class="tok-p">};</span>
<span class="tok-ss">default</span> <span class="tok-o">=</span> hello<span class="tok-p">;</span>
<span class="tok-p">};</span>
<span class="tok-p">}</span>
<span class="tok-p">);</span>
<span class="tok-p">}</span>
</pre></div></td></tr></table></div></code></pre>
</div>
</div>
@ -5156,12 +5254,24 @@ However, you can use any of the flake reference styles defined in <a href="#flak
<div class="literalblock">
<div class="content">
<pre class="nowrap">$ nix run
path '/home/amy/codeberg/nix-book/source/recipes/build/flake/tempwork' does not contain a 'flake.nix', searching up
error: Path 'source/recipes/build/flake' in the repository "/home/amy/codeberg/nix-book" is not tracked by Git.
error:
… while calling the 'getAttr' builtin
at &lt;nix/derivation-internal.nix&gt;:50:17:
49| value = commonAttrs // {
50| outPath = builtins.getAttr outputName strict;
| ^
51| drvPath = strict.drvPath;
To make it visible to Nix, run:
… while calling the 'derivationStrict' builtin
at &lt;nix/derivation-internal.nix&gt;:37:12:
36|
37| strict = derivationStrict drvAttrs;
| ^
38|
git -C "/home/amy/codeberg/nix-book" add "source/recipes/build/flake"</pre>
(stack trace truncated; use '--show-trace' to show the full, detailed trace)
error: Dependency is not of a valid type: element 1 of buildInputs for hello-again</pre>
</div>
</div>
<div class="paragraph">
@ -5484,7 +5594,7 @@ Hello from your flake!</pre>
</div>
<div id="footer">
<div id="footer-text">
Last updated 2025-09-15 15:52:55 IST
Last updated 2025-09-15 15:53:36 IST
</div>
</div>
</body>

View file

@ -1,4 +1,4 @@
#!/usr/bin/env sh
echo "I'm a flake, but I'm running a command defined in a non-flake package."
hello-nix
echo "I'm a flake, and I'm running a command defined in a another flake."
hello-flake