mirror of
https://codeberg.org/mhwombat/nix-book.git
synced 2026-02-04 03:53:39 +08:00
updates
This commit is contained in:
parent
3f7a18dca5
commit
ce1534c789
4 changed files with 6952 additions and 4758 deletions
398
index.html
398
index.html
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="generator" content="Asciidoctor 2.0.20">
|
||||
<meta name="generator" content="Asciidoctor 2.0.23">
|
||||
<meta name="author" content="Amy de Buitléir">
|
||||
<title>Wombat’s Book of Nix</title>
|
||||
<style>
|
||||
|
|
@ -33,6 +33,7 @@ pre.pygments .tok-c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
|
|||
pre.pygments .tok-cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
|
||||
pre.pygments .tok-gd { color: #A00000 } /* Generic.Deleted */
|
||||
pre.pygments .tok-ge { font-style: italic } /* Generic.Emph */
|
||||
pre.pygments .tok-ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
|
||||
pre.pygments .tok-gr { color: #E40000 } /* Generic.Error */
|
||||
pre.pygments .tok-gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
pre.pygments .tok-gi { color: #008400 } /* Generic.Inserted */
|
||||
|
|
@ -474,7 +475,7 @@ The sound of water
|
|||
<div class="sect3">
|
||||
<h4 id="type-path">2.2.5. Paths</h4>
|
||||
<div class="paragraph">
|
||||
<p>File paths are play an important role in building software, so Nix has a special data type for them.
|
||||
<p>File paths play an important role in building software, so Nix has a special data type for them.
|
||||
Paths may be absolute (e.g. <code>/bin/sh</code>) or relative (e.g. <code>./data/file1.csv</code>).
|
||||
Note that paths are not enclosed in quotation marks; they are not strings!</p>
|
||||
</div>
|
||||
|
|
@ -634,7 +635,7 @@ Within the REPL, type <code>:?</code> to see a list of available commands.</p>
|
|||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="pygments highlight nowrap"><code><span></span>$# echo "$ nix repl"
|
||||
<pre class="pygments highlight nowrap"><code><span></span>$ nix repl
|
||||
Welcome to Nix 2.18.1. Type :? for help.
|
||||
|
||||
nix-repl> :?
|
||||
|
|
@ -2008,42 +2009,42 @@ is always called <code>flake.nix</code>.</p>
|
|||
<span class="tok-c1"># See https://github.com/mhwombat/nix-for-numbskulls/blob/main/flakes.md</span>
|
||||
<span class="tok-c1"># for a brief overview of what each section in a flake should or can contain.</span>
|
||||
|
||||
<span class="tok-ss">description =</span> <span class="tok-s2">"a very simple and friendly flake"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">description</span> <span class="tok-o">=</span> <span class="tok-s2">"a very simple and friendly flake"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">inputs =</span> <span class="tok-p">{</span>
|
||||
nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:NixOS/nixpkgs"</span><span class="tok-p">;</span>
|
||||
flake-utils<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:numtide/flake-utils"</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">"github:NixOS/nixpkgs"</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">"github:numtide/flake-utils"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
|
||||
<span class="tok-ss">outputs =</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>
|
||||
<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>
|
||||
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-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-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-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">hello =</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-s2">"hello-flake"</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">"hello-flake"</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">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-s2">"true"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">unpackPhase</span> <span class="tok-o">=</span> <span class="tok-s2">"true"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">buildPhase =</span> <span class="tok-s2">":"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">buildPhase</span> <span class="tok-o">=</span> <span class="tok-s2">":"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">installPhase =</span>
|
||||
<span class="tok-s1">''</span>
|
||||
<span class="tok-s1"> mkdir -p $out/bin</span>
|
||||
<span class="tok-s1"> cp $src/hello-flake $out/bin/hello-flake</span>
|
||||
<span class="tok-s1"> chmod +x $out/bin/hello-flake</span>
|
||||
<span class="tok-s1"> ''</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">installPhase</span> <span class="tok-o">=</span>
|
||||
<span class="tok-s tok-s-Multiline">''</span>
|
||||
<span class="tok-s tok-s-Multiline"> mkdir -p $out/bin</span>
|
||||
<span class="tok-s tok-s-Multiline"> cp $src/hello-flake $out/bin/hello-flake</span>
|
||||
<span class="tok-s tok-s-Multiline"> chmod +x $out/bin/hello-flake</span>
|
||||
<span class="tok-s tok-s-Multiline"> ''</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-ss">default =</span> hello<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-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">hello =</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> self<span class="tok-o">.</span>packages<span class="tok-o">.</span><span class="tok-err">$</span><span class="tok-p">{</span>system<span class="tok-p">}</span><span class="tok-o">.</span>hello<span class="tok-p">;</span> <span class="tok-p">};</span>
|
||||
<span class="tok-ss">default =</span> hello<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>
|
||||
|
|
@ -2060,9 +2061,9 @@ For now, I’d like to focus on the inputs section.</p>
|
|||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span><span class="tok-ss">inputs =</span> <span class="tok-p">{</span>
|
||||
nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:NixOS/nixpkgs"</span><span class="tok-p">;</span>
|
||||
flake-utils<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:numtide/flake-utils"</span><span class="tok-p">;</span>
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></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">"github:NixOS/nixpkgs"</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">"github:numtide/flake-utils"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -2203,7 +2204,7 @@ without the version number</p>
|
|||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:NixOS/nixpkgs/nixos"</span><span class="tok-p">;</span></code></pre>
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>nixpkgs<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">"github:NixOS/nixpkgs/nixos"</span><span class="tok-p">;</span></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -2211,7 +2212,7 @@ without the version number</p>
|
|||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"nixpkgs"</span><span class="tok-p">;</span></code></pre>
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>nixpkgs<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">"nixpkgs"</span><span class="tok-p">;</span></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -2263,10 +2264,10 @@ flake references that you might encounter. This example</p>
|
|||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>inputs<span class="tok-o">.</span><span class="tok-nb">import</span><span class="tok-ss">-cargo =</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">type =</span> <span class="tok-s2">"github"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">owner =</span> <span class="tok-s2">"edolstra"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">repo =</span> <span class="tok-s2">"import-cargo"</span><span class="tok-p">;</span>
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>inputs<span class="tok-o">.</span><span class="tok-nb">import</span><span class="tok-o">-</span><span class="tok-ss">cargo</span> <span class="tok-o">=</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">type</span> <span class="tok-o">=</span> <span class="tok-s2">"github"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">owner</span> <span class="tok-o">=</span> <span class="tok-s2">"edolstra"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">repo</span> <span class="tok-o">=</span> <span class="tok-s2">"import-cargo"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -2275,7 +2276,7 @@ flake references that you might encounter. This example</p>
|
|||
</div>
|
||||
<div class="listingblock">
|
||||
<div class="content">
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>inputs<span class="tok-o">.</span><span class="tok-nb">import</span><span class="tok-err">-</span>cargo<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:edolstra/import-cargo"</span><span class="tok-p">;</span></code></pre>
|
||||
<pre class="pygments highlight nowrap"><code data-lang="nix"><span></span>inputs<span class="tok-o">.</span><span class="tok-nb">import</span><span class="tok-o">-</span>cargo<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">"github:edolstra/import-cargo"</span><span class="tok-p">;</span></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
|
|
@ -2620,7 +2621,7 @@ will be added.</p>
|
|||
<p><code>$system</code> is the system that the package is being built for.</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>$PWD</code> and <code>$TMP</code> both point to a temporary build directories</p>
|
||||
<p><code>$PWD</code> and <code>$TMP</code> both point to temporary build directories</p>
|
||||
</li>
|
||||
<li>
|
||||
<p><code>$HOME</code> and <code>$PATH</code> point to nonexistent directories, so the build
|
||||
|
|
@ -2786,48 +2787,48 @@ The highlighted modifications below will accomplish that.</p>
|
|||
<span class="tok-c1"># See https://github.com/mhwombat/nix-for-numbskulls/blob/main/flakes.md</span>
|
||||
<span class="tok-c1"># for a brief overview of what each section in a flake should or can contain.</span>
|
||||
|
||||
<span class="tok-ss">description =</span> <span class="tok-s2">"a very simple and friendly flake"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">description</span> <span class="tok-o">=</span> <span class="tok-s2">"a very simple and friendly flake"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">inputs =</span> <span class="tok-p">{</span>
|
||||
nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:NixOS/nixpkgs"</span><span class="tok-p">;</span>
|
||||
flake-utils<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:numtide/flake-utils"</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">"github:NixOS/nixpkgs"</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">"github:numtide/flake-utils"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
|
||||
<span class="tok-ss">outputs =</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>
|
||||
<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>
|
||||
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-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-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="hll"> <span class="tok-ss">devShells =</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
|
||||
</span><span class="hll"> <span class="tok-ss">default =</span> pkgs<span class="tok-o">.</span>mkShell <span class="tok-p">{</span>
|
||||
</span><span class="hll"> <span class="tok-ss">packages =</span> <span class="tok-p">[</span> pkgs<span class="tok-o">.</span>cowsay <span class="tok-p">];</span>
|
||||
<span class="hll"> <span class="tok-ss">devShells</span> <span class="tok-o">=</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
|
||||
</span><span class="hll"> <span class="tok-ss">default</span> <span class="tok-o">=</span> pkgs<span class="tok-o">.</span>mkShell <span class="tok-p">{</span>
|
||||
</span><span class="hll"> <span class="tok-ss">packages</span> <span class="tok-o">=</span> <span class="tok-p">[</span> pkgs<span class="tok-o">.</span>cowsay <span class="tok-p">];</span>
|
||||
</span><span class="hll"> <span class="tok-p">};</span>
|
||||
</span><span class="hll"> <span class="tok-p">};</span>
|
||||
</span>
|
||||
<span class="tok-ss">packages =</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">hello =</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-s2">"hello-flake"</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">"hello-flake"</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">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-s2">"true"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">unpackPhase</span> <span class="tok-o">=</span> <span class="tok-s2">"true"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">buildPhase =</span> <span class="tok-s2">":"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">buildPhase</span> <span class="tok-o">=</span> <span class="tok-s2">":"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">installPhase =</span>
|
||||
<span class="tok-s1">''</span>
|
||||
<span class="tok-s1"> mkdir -p $out/bin</span>
|
||||
<span class="tok-s1"> cp $src/hello-flake $out/bin/hello-flake</span>
|
||||
<span class="tok-s1"> chmod +x $out/bin/hello-flake</span>
|
||||
<span class="tok-s1"> ''</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">installPhase</span> <span class="tok-o">=</span>
|
||||
<span class="tok-s tok-s-Multiline">''</span>
|
||||
<span class="tok-s tok-s-Multiline"> mkdir -p $out/bin</span>
|
||||
<span class="tok-s tok-s-Multiline"> cp $src/hello-flake $out/bin/hello-flake</span>
|
||||
<span class="tok-s tok-s-Multiline"> chmod +x $out/bin/hello-flake</span>
|
||||
<span class="tok-s tok-s-Multiline"> ''</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-ss">default =</span> hello<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-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">hello =</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> self<span class="tok-o">.</span>packages<span class="tok-o">.</span><span class="tok-err">$</span><span class="tok-p">{</span>system<span class="tok-p">}</span><span class="tok-o">.</span>hello<span class="tok-p">;</span> <span class="tok-p">};</span>
|
||||
<span class="tok-ss">default =</span> hello<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>
|
||||
|
|
@ -2908,7 +2909,7 @@ don’t need to <code>git push</code> the changes until we’re ready to
|
|||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ git commit hello-flake flake.nix -m 'added bovine feature'
|
||||
[main c264cad] added bovine feature
|
||||
[main 11a8ffe] added bovine feature
|
||||
2 files changed, 7 insertions(+), 1 deletion(-)
|
||||
$ nix run
|
||||
________________________
|
||||
|
|
@ -3082,7 +3083,7 @@ hyphenated and non-hyphenated versions of many Nix commands, and yes,
|
|||
it’s confusing. The non-hyphenated commands were introduced when support
|
||||
for flakes was added to Nix. I predict that eventually all hyphenated
|
||||
commands will be replaced with non-hyphenated versions. Until then, a
|
||||
useful rule of thumb is that non-hyphenated commands are for for working
|
||||
useful rule of thumb is that non-hyphenated commands are for working
|
||||
directly with flakes; hyphenated commands are for everything else.</p>
|
||||
</div>
|
||||
</td>
|
||||
|
|
@ -3117,9 +3118,9 @@ You can come back to this section later to learn more.</p>
|
|||
<pre class="nowrap">$ nix-shell -p ghc
|
||||
$ runghc Main.hs
|
||||
|
||||
Main.hs:1:1: error:
|
||||
Could not find module ‘Network.HostName’
|
||||
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
||||
Main.hs:1:1: error: [GHC-87110]
|
||||
Could not find module ‘Network.HostName’.
|
||||
Use :set -v to see a list of the files searched for.
|
||||
|
|
||||
1 | import Network.HostName
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^</pre>
|
||||
|
|
@ -3136,9 +3137,9 @@ Let’s exit that shell and try again, this time adding the <code>hostname</
|
|||
$ nix-shell -p "[ghc hostname]"
|
||||
$ runghc Main.hs
|
||||
|
||||
Main.hs:1:1: error:
|
||||
Could not find module ‘Network.HostName’
|
||||
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
||||
Main.hs:1:1: error: [GHC-87110]
|
||||
Could not find module ‘Network.HostName’.
|
||||
Use :set -v to see a list of the files searched for.
|
||||
|
|
||||
1 | import Network.HostName
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^</pre>
|
||||
|
|
@ -3159,9 +3160,9 @@ The package we want is in the <em>package set</em> called <code>haskellPackages<
|
|||
$ nix-shell -p "[ghc haskellPackages.hostname]"
|
||||
$ runghc Main.hs
|
||||
|
||||
Main.hs:1:1: error:
|
||||
Could not find module ‘Network.HostName’
|
||||
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
||||
Main.hs:1:1: error: [GHC-87110]
|
||||
Could not find module ‘Network.HostName’.
|
||||
Use :set -v to see a list of the files searched for.
|
||||
|
|
||||
1 | import Network.HostName
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^</pre>
|
||||
|
|
@ -3214,6 +3215,11 @@ Your hostname is: wombat11k</pre>
|
|||
<div class="paragraph">
|
||||
<p>Success! Now we know the program works.</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ exit</pre>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect3">
|
||||
|
|
@ -3250,10 +3256,11 @@ This is just an ordinary Cabal file; we don’t need to do anything special
|
|||
<span class="normal">23</span>
|
||||
<span class="normal">24</span>
|
||||
<span class="normal">25</span>
|
||||
<span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span>cabal-version: 3.0
|
||||
<span class="normal">26</span>
|
||||
<span class="normal">27</span></pre></div></td><td class="code"><div><pre><span></span>cabal-version: 3.0
|
||||
name: hello-flake-haskell
|
||||
version: 1.0.0
|
||||
synopsis: A simple demonstration using a Nix flake to package a Haskell program that prints a greeting.
|
||||
synopsis: A simple demonstration using a Nix flake to package a Haskell program.
|
||||
description:
|
||||
For more information and a tutorial on how to use this package,
|
||||
please see the README at <https://codeberg.org/mhwombat/hello-flake-haskell#readme>.
|
||||
|
|
@ -3272,10 +3279,11 @@ executable hello-flake-haskell
|
|||
build-depends:
|
||||
base,
|
||||
hostname
|
||||
-- NOTE: Best practice is to specify version constraints for the packages we depend on.
|
||||
-- However, I'm confident that this package will only be used as a Nix flake.
|
||||
-- Nix will automatically ensure that anyone running this program is using the
|
||||
-- same library versions that I used to build it.
|
||||
-- NOTE: Best practice is to specify version constraints for the packages we depend on.
|
||||
-- However, I'm confident that this package will only be used as a Nix flake.
|
||||
-- Nix will automatically ensure that anyone running this program is using the
|
||||
-- same library versions that I used to build it.
|
||||
default-language: Haskell2010
|
||||
</pre></div></td></tr></table></div></code></pre>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -3293,7 +3301,7 @@ and problems in your Cabal file.</p>
|
|||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ cabal build
|
||||
sh: line 35: cabal: command not found</pre>
|
||||
sh: line 40: cabal: command not found</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -3305,23 +3313,17 @@ Rather than launch another shell-within-a-shell, let’s exit create a new o
|
|||
<pre class="nowrap">$ exit
|
||||
$ nix-shell -p "[ cabal-install (haskellPackages.ghcWithPackages (pkgs: with pkgs; [ hostname ]))]"
|
||||
$ cabal build
|
||||
Warning: The package list for 'hackage.haskell.org' is 24 days old.
|
||||
Run 'cabal update' to get the latest list of available packages.
|
||||
Resolving dependencies...
|
||||
Build profile: -w ghc-9.4.8 -O1
|
||||
Build profile: -w ghc-9.8.4 -O1
|
||||
In order, the following will be built (use -v for more details):
|
||||
- hello-flake-haskell-1.0.0 (exe:hello-flake-haskell) (first run)
|
||||
Configuring executable 'hello-flake-haskell' for hello-flake-haskell-1.0.0..
|
||||
Warning: Packages using 'cabal-version: >= 1.10' and before 'cabal-version:
|
||||
3.4' must specify the 'default-language' field for each component (e.g.
|
||||
Haskell98 or Haskell2010). If a component uses different languages in
|
||||
different modules then list the other ones in the 'other-languages' field.
|
||||
Warning: The 'license-file' field refers to the file 'LICENSE' which does not
|
||||
exist.
|
||||
Preprocessing executable 'hello-flake-haskell' for hello-flake-haskell-1.0.0..
|
||||
Building executable 'hello-flake-haskell' for hello-flake-haskell-1.0.0..
|
||||
[1 of 1] Compiling Main ( Main.hs, /home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell/dist-newstyle/build/x86_64-linux/ghc-9.4.8/hello-flake-haskell-1.0.0/x/hello-flake-haskell/build/hello-flake-haskell/hello-flake-haskell-tmp/Main.o )
|
||||
[2 of 2] Linking /home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell/dist-newstyle/build/x86_64-linux/ghc-9.4.8/hello-flake-haskell-1.0.0/x/hello-flake-haskell/build/hello-flake-haskell/hello-flake-haskell
|
||||
Configuring executable 'hello-flake-haskell' for hello-flake-haskell-1.0.0...
|
||||
Warning: [unknown-file] The 'license-file' field refers to the file 'LICENSE'
|
||||
which does not exist.
|
||||
Preprocessing executable 'hello-flake-haskell' for hello-flake-haskell-1.0.0...
|
||||
Building executable 'hello-flake-haskell' for hello-flake-haskell-1.0.0...
|
||||
[1 of 1] Compiling Main ( Main.hs, dist-newstyle/build/x86_64-linux/ghc-9.8.4/hello-flake-haskell-1.0.0/x/hello-flake-haskell/build/hello-flake-haskell/hello-flake-haskell-tmp/Main.o )
|
||||
[2 of 2] Linking dist-newstyle/build/x86_64-linux/ghc-9.8.4/hello-flake-haskell-1.0.0/x/hello-flake-haskell/build/hello-flake-haskell/hello-flake-haskell
|
||||
$ cabal run
|
||||
Hello from Haskell inside a Nix flake!
|
||||
Your hostname is: wombat11k
|
||||
|
|
@ -3329,7 +3331,7 @@ $ exit</pre>
|
|||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>After a lot of output messages, the build succeeds and the program runs.</p>
|
||||
<p>After some output messages, the build succeeds and the program runs.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="sect3">
|
||||
|
|
@ -3369,26 +3371,26 @@ different are the development shell and the package builder.</p>
|
|||
<span class="normal">22</span>
|
||||
<span class="normal">23</span>
|
||||
<span class="normal">24</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-p">{</span>
|
||||
<span class="tok-ss">description =</span> <span class="tok-s2">"a flake using Haskell"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">description</span> <span class="tok-o">=</span> <span class="tok-s2">"a flake using Haskell"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-c1"># This example uses haskell-flake to make things simpler.</span>
|
||||
<span class="tok-c1"># See https://haskell.flake.page/ for more information and examples.</span>
|
||||
|
||||
<span class="tok-ss">inputs =</span> <span class="tok-p">{</span>
|
||||
nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:nixos/nixpkgs/nixpkgs-unstable"</span><span class="tok-p">;</span>
|
||||
flake-parts<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:hercules-ci/flake-parts"</span><span class="tok-p">;</span>
|
||||
haskell-flake<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:srid/haskell-flake"</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">"github:nixos/nixpkgs/nixpkgs-unstable"</span><span class="tok-p">;</span>
|
||||
flake-parts<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">"github:hercules-ci/flake-parts"</span><span class="tok-p">;</span>
|
||||
haskell-flake<span class="tok-o">.</span><span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">"github:srid/haskell-flake"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-ss">outputs =</span> inputs<span class="tok-p">@{</span> self<span class="tok-p">,</span> nixpkgs<span class="tok-p">,</span> flake-parts<span class="tok-p">,</span> <span class="tok-o">...</span> <span class="tok-p">}:</span>
|
||||
<span class="tok-ss">outputs</span> <span class="tok-o">=</span> inputs<span class="tok-p">@{</span> self<span class="tok-p">,</span> nixpkgs<span class="tok-p">,</span> flake-parts<span class="tok-p">,</span> <span class="tok-o">...</span> <span class="tok-p">}:</span>
|
||||
flake-parts<span class="tok-o">.</span>lib<span class="tok-o">.</span>mkFlake <span class="tok-p">{</span> <span class="tok-k">inherit</span> inputs<span class="tok-p">;</span> <span class="tok-p">}</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">systems =</span> nixpkgs<span class="tok-o">.</span>lib<span class="tok-o">.</span>systems<span class="tok-o">.</span>flakeExposed<span class="tok-p">;</span>
|
||||
<span class="tok-ss">imports =</span> <span class="tok-p">[</span> inputs<span class="tok-o">.</span>haskell-flake<span class="tok-o">.</span>flakeModule <span class="tok-p">];</span>
|
||||
<span class="tok-ss">systems</span> <span class="tok-o">=</span> nixpkgs<span class="tok-o">.</span>lib<span class="tok-o">.</span>systems<span class="tok-o">.</span>flakeExposed<span class="tok-p">;</span>
|
||||
<span class="tok-ss">imports</span> <span class="tok-o">=</span> <span class="tok-p">[</span> inputs<span class="tok-o">.</span>haskell-flake<span class="tok-o">.</span>flakeModule <span class="tok-p">];</span>
|
||||
|
||||
<span class="tok-ss">perSystem =</span> <span class="tok-p">{</span> self'<span class="tok-p">,</span> pkgs<span class="tok-p">,</span> <span class="tok-o">...</span> <span class="tok-p">}:</span> <span class="tok-p">{</span>
|
||||
haskellProjects<span class="tok-o">.</span><span class="tok-ss">default =</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">perSystem</span> <span class="tok-o">=</span> <span class="tok-p">{</span> self'<span class="tok-p">,</span> pkgs<span class="tok-p">,</span> <span class="tok-o">...</span> <span class="tok-p">}:</span> <span class="tok-p">{</span>
|
||||
haskellProjects<span class="tok-o">.</span><span class="tok-ss">default</span> <span class="tok-o">=</span> <span class="tok-p">{};</span>
|
||||
|
||||
<span class="tok-c1"># haskell-flake doesn't set the default package, but you can do it here.</span>
|
||||
packages<span class="tok-o">.</span><span class="tok-ss">default =</span> self'<span class="tok-o">.</span>packages<span class="tok-o">.</span>hello-flake-haskell<span class="tok-p">;</span>
|
||||
packages<span class="tok-o">.</span><span class="tok-ss">default</span> <span class="tok-o">=</span> self'<span class="tok-o">.</span>packages<span class="tok-o">.</span>hello-flake-haskell<span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-p">}</span>
|
||||
|
|
@ -3397,14 +3399,28 @@ different are the development shell and the package builder.</p>
|
|||
</div>
|
||||
<div class="paragraph">
|
||||
<p>The above definition will work for most of your haskell projects;
|
||||
simply change the <code>description</code> and the package name in <code>packages.default</code>.
|
||||
Let’s try out the new flake.</p>
|
||||
simply change the <code>description</code> and the package name in <code>packages.default</code>.</p>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>We also need a <code>LICENSE</code> file.
|
||||
For now, this can be empty.</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ touch LICENSE</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
<p>Let’s try out the new flake.</p>
|
||||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ nix run
|
||||
warning: Git tree '/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell' is dirty
|
||||
error: getting status of '/nix/store/0ccnxa25whszw7mgbgyzdm4nqc0zwnm8-source/flake.nix': No such file or directory</pre>
|
||||
error: Path 'flake.nix' in the repository "/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell" is not tracked by Git.
|
||||
|
||||
To make it visible to Nix, run:
|
||||
|
||||
git -C "/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell" add "flake.nix"</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -3414,26 +3430,21 @@ repo before building or running the flake.</p>
|
|||
</div>
|
||||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ git add flake.nix hello-flake-haskell.cabal Main.hs
|
||||
<pre class="nowrap">$ git add flake.nix hello-flake-haskell.cabal LICENSE Main.hs
|
||||
$ nix run
|
||||
warning: Git tree '/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell' is dirty
|
||||
warning: creating lock file '/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell/flake.lock'
|
||||
warning: creating lock file '"/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell/flake.lock"':
|
||||
• Added input 'flake-parts':
|
||||
'github:hercules-ci/flake-parts/af66ad14b28a127c5c0f3bbb298218fc63528a18?narHash=sha256-pHYj8gUBapuUzKV/kN/tR3Zvqc7o6gdFB9XKXIp1SQ8%3D' (2025-08-06)
|
||||
• Added input 'flake-parts/nixpkgs-lib':
|
||||
'github:nix-community/nixpkgs.lib/0f36c44e01a6129be94e3ade315a5883f0228a6e?narHash=sha256-zvaMGVn14/Zz8hnp4VWT9xVnhc8vuL3TStRqwk22biA%3D' (2025-07-27)
|
||||
• Added input 'haskell-flake':
|
||||
'github:srid/haskell-flake/4bed0d0db1b5ae4e50cf4f1373fdf68d9c070517?narHash=sha256-lsEcVlgd6Xck%2B0pOmtEL93b138Tg8g6xTFg4fZ3YZ30%3D' (2025-08-18)
|
||||
• Added input 'nixpkgs':
|
||||
'github:nixos/nixpkgs/a650b5d0de99158323597f048667c4d914243224?narHash=sha256-ixn50x9Qoh9RNpG3LGhTI86GioR9GkGxR4%2Bj/Ttj0uE%3D' (2025-08-15)
|
||||
warning: Git tree '/home/amy/codeberg/nix-book/source/new-flake/haskell-flake/hello-haskell' is dirty
|
||||
these 2 derivations will be built:
|
||||
/nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv
|
||||
/nix/store/8qdbmfms1h0b60aqdxfk28fmdnlkcm1l-hello-flake-haskell-1.0.0.drv
|
||||
building '/nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv'...
|
||||
error: builder for '/nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv' failed with exit code 1;
|
||||
last 7 log lines:
|
||||
> unpacking source archive /nix/store/gg6b20p83m5mqcfp1qr0w37bjhz3k33y-source-hello-flake-haskell
|
||||
> source root is source-hello-flake-haskell
|
||||
> Config file path source is default config file.
|
||||
> Config file not found: /build/source-hello-flake-haskell/.config/cabal/config
|
||||
> Writing default configuration to
|
||||
> /build/source-hello-flake-haskell/.config/cabal/config
|
||||
> /build/source-hello-flake-haskell/./LICENSE: withBinaryFile: does not exist (No such file or directory)
|
||||
For full logs, run 'nix log /nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv'.
|
||||
error: 1 dependencies of derivation '/nix/store/8qdbmfms1h0b60aqdxfk28fmdnlkcm1l-hello-flake-haskell-1.0.0.drv' failed to build</pre>
|
||||
Hello from Haskell inside a Nix flake!
|
||||
Your hostname is: wombat11k</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -3446,8 +3457,9 @@ repo, and commit all important files.</p>
|
|||
<div class="content">
|
||||
<pre class="nowrap">$ git add flake.lock
|
||||
$ git commit -a -m 'initial commit'
|
||||
[master (root-commit) 666b827] initial commit
|
||||
4 files changed, 137 insertions(+)
|
||||
[master (root-commit) a370ad5] initial commit
|
||||
5 files changed, 136 insertions(+)
|
||||
create mode 100644 LICENSE
|
||||
create mode 100644 Main.hs
|
||||
create mode 100644 flake.lock
|
||||
create mode 100644 flake.nix
|
||||
|
|
@ -3462,21 +3474,8 @@ another directory and running it from there.</p>
|
|||
<div class="content">
|
||||
<pre class="nowrap">$ cd ..
|
||||
$ nix run ./hello-haskell
|
||||
these 2 derivations will be built:
|
||||
/nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv
|
||||
/nix/store/8qdbmfms1h0b60aqdxfk28fmdnlkcm1l-hello-flake-haskell-1.0.0.drv
|
||||
building '/nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv'...
|
||||
error: builder for '/nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv' failed with exit code 1;
|
||||
last 7 log lines:
|
||||
> unpacking source archive /nix/store/gg6b20p83m5mqcfp1qr0w37bjhz3k33y-source-hello-flake-haskell
|
||||
> source root is source-hello-flake-haskell
|
||||
> Config file path source is default config file.
|
||||
> Config file not found: /build/source-hello-flake-haskell/.config/cabal/config
|
||||
> Writing default configuration to
|
||||
> /build/source-hello-flake-haskell/.config/cabal/config
|
||||
> /build/source-hello-flake-haskell/./LICENSE: withBinaryFile: does not exist (No such file or directory)
|
||||
For full logs, run 'nix log /nix/store/qhb3mvp8i87n58iwi3ldkwpin2m9zgya-source-hello-flake-haskell-sdist.tar.gz.drv'.
|
||||
error: 1 dependencies of derivation '/nix/store/8qdbmfms1h0b60aqdxfk28fmdnlkcm1l-hello-flake-haskell-1.0.0.drv' failed to build</pre>
|
||||
Hello from Haskell inside a Nix flake!
|
||||
Your hostname is: wombat11k</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -3631,7 +3630,7 @@ package manually.</p>
|
|||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ python -m build
|
||||
/nix/store/qp5zys77biz7imbk6yy85q5pdv7qk84j-python3-3.11.6/bin/python: No module named build</pre>
|
||||
/nix/store/9yh9ak97gn659bk4d3n411fx6c0ng7s2-python3-3.13.5/bin/python: No module named build</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -3777,23 +3776,23 @@ something like this.</p>
|
|||
<span class="tok-c1"># See https://github.com/mhwombat/nix-for-numbskulls/blob/main/flakes.md</span>
|
||||
<span class="tok-c1"># for a brief overview of what each section in a flake should or can contain.</span>
|
||||
|
||||
<span class="tok-ss">description =</span> <span class="tok-s2">"a very simple and friendly flake written in Python"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">description</span> <span class="tok-o">=</span> <span class="tok-s2">"a very simple and friendly flake written in Python"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">inputs =</span> <span class="tok-p">{</span>
|
||||
nixpkgs<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:NixOS/nixpkgs"</span><span class="tok-p">;</span>
|
||||
flake-utils<span class="tok-o">.</span><span class="tok-ss">url =</span> <span class="tok-s2">"github:numtide/flake-utils"</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">"github:NixOS/nixpkgs"</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">"github:numtide/flake-utils"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
|
||||
<span class="tok-ss">outputs =</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>
|
||||
<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>
|
||||
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-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-ss">python =</span> pkgs<span class="tok-o">.</span>python3<span class="tok-p">;</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-ss">python</span> <span class="tok-o">=</span> pkgs<span class="tok-o">.</span>python3<span class="tok-p">;</span>
|
||||
<span class="tok-k">in</span>
|
||||
<span class="tok-p">{</span>
|
||||
<span class="tok-ss">devShells =</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">default =</span> pkgs<span class="tok-o">.</span>mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">packages =</span> <span class="tok-p">[</span>
|
||||
<span class="tok-ss">devShells</span> <span class="tok-o">=</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">default</span> <span class="tok-o">=</span> pkgs<span class="tok-o">.</span>mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">packages</span> <span class="tok-o">=</span> <span class="tok-p">[</span>
|
||||
<span class="tok-c1"># Python plus helper tools</span>
|
||||
<span class="tok-p">(</span>python<span class="tok-o">.</span>withPackages <span class="tok-p">(</span>ps<span class="tok-p">:</span> <span class="tok-k">with</span> ps<span class="tok-p">;</span> <span class="tok-p">[</span>
|
||||
virtualenv <span class="tok-c1"># Virtualenv</span>
|
||||
|
|
@ -3803,20 +3802,20 @@ something like this.</p>
|
|||
<span class="tok-p">};</span>
|
||||
<span class="tok-p">};</span>
|
||||
|
||||
<span class="tok-ss">packages =</span> <span class="tok-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">hello =</span> python<span class="tok-o">.</span>pkgs<span class="tok-o">.</span>buildPythonApplication <span class="tok-p">{</span>
|
||||
<span class="tok-ss">name =</span> <span class="tok-s2">"hello-flake-python"</span><span class="tok-p">;</span>
|
||||
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-k">with</span> python<span class="tok-o">.</span>pkgs<span class="tok-p">;</span> <span class="tok-p">[</span> pip <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">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> python<span class="tok-o">.</span>pkgs<span class="tok-o">.</span>buildPythonApplication <span class="tok-p">{</span>
|
||||
<span class="tok-ss">name</span> <span class="tok-o">=</span> <span class="tok-s2">"hello-flake-python"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-k">with</span> python<span class="tok-o">.</span>pkgs<span class="tok-p">;</span> <span class="tok-p">[</span> pip <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">pyproject</span> <span class="tok-o">=</span> <span class="tok-no">true</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">build-system</span> <span class="tok-o">=</span> <span class="tok-k">with</span> python<span class="tok-o">.</span>pkgs<span class="tok-p">;</span> <span class="tok-p">[</span> setuptools <span class="tok-p">];</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-ss">default =</span> hello<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-k">rec</span> <span class="tok-p">{</span>
|
||||
<span class="tok-ss">hello =</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> self<span class="tok-o">.</span>packages<span class="tok-o">.</span><span class="tok-err">$</span><span class="tok-p">{</span>system<span class="tok-p">}</span><span class="tok-o">.</span>hello<span class="tok-p">;</span> <span class="tok-p">};</span>
|
||||
<span class="tok-ss">default =</span> hello<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>
|
||||
|
|
@ -3830,8 +3829,11 @@ something like this.</p>
|
|||
<div class="literalblock">
|
||||
<div class="content">
|
||||
<pre class="nowrap">$ nix run
|
||||
warning: Git tree '/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python' is dirty
|
||||
error: getting status of '/nix/store/0ccnxa25whszw7mgbgyzdm4nqc0zwnm8-source/flake.nix': No such file or directory</pre>
|
||||
error: Path 'flake.nix' in the repository "/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python" is not tracked by Git.
|
||||
|
||||
To make it visible to Nix, run:
|
||||
|
||||
git -C "/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python" add "flake.nix"</pre>
|
||||
</div>
|
||||
</div>
|
||||
<div class="paragraph">
|
||||
|
|
@ -3844,8 +3846,17 @@ repo before building or running the flake.</p>
|
|||
<pre class="nowrap">$ git add flake.nix setup.py hello.py
|
||||
$ nix run
|
||||
warning: Git tree '/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python' is dirty
|
||||
warning: creating lock file '/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python/flake.lock'
|
||||
warning: creating lock file '"/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python/flake.lock"':
|
||||
• Added input 'flake-utils':
|
||||
'github:numtide/flake-utils/11707dc2f618dd54ca8739b309ec4fc024de578b?narHash=sha256-l0KFg5HjrsfsO/JpG%2Br7fRrqm12kzFHyUHqHCVpMMbI%3D' (2024-11-13)
|
||||
• Added input 'flake-utils/systems':
|
||||
'github:nix-systems/default/da67096a3b9bf56a91d16901293e51ba5b49a27e?narHash=sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768%3D' (2023-04-09)
|
||||
• Added input 'nixpkgs':
|
||||
'github:NixOS/nixpkgs/375ab11873f71477e1e9afc240dd815d00ce05bf?narHash=sha256-WB8bx4RyG1hjt49/yafemlpImojvq/vWpVQFW0/DVjI%3D' (2025-08-19)
|
||||
warning: Git tree '/home/amy/codeberg/nix-book/source/new-flake/python-flake/hello-python' is dirty
|
||||
this derivation will be built:
|
||||
/nix/store/vnwhjlij3k1lkqxjyznh78xbsns9rpqy-hello-flake-python.drv
|
||||
building '/nix/store/vnwhjlij3k1lkqxjyznh78xbsns9rpqy-hello-flake-python.drv'...
|
||||
Hello from inside a Python program built with a Nix flake!</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -3859,7 +3870,7 @@ repo, and commit all important files.</p>
|
|||
<div class="content">
|
||||
<pre class="nowrap">$ git add flake.lock
|
||||
$ git commit -a -m 'initial commit'
|
||||
[master (root-commit) ddb5606] initial commit
|
||||
[master (root-commit) 5e2c858] initial commit
|
||||
4 files changed, 127 insertions(+)
|
||||
create mode 100644 flake.lock
|
||||
create mode 100644 flake.nix
|
||||
|
|
@ -3875,6 +3886,9 @@ another directory and running it from there.</p>
|
|||
<div class="content">
|
||||
<pre class="nowrap">$ cd ..
|
||||
$ nix run ./hello-python
|
||||
this derivation will be built:
|
||||
/nix/store/m96s3wx0wghysihixgv2vldfwx4zwwqb-hello-flake-python.drv
|
||||
building '/nix/store/m96s3wx0wghysihixgv2vldfwx4zwwqb-hello-flake-python.drv'...
|
||||
Hello from inside a Python program built with a Nix flake!</pre>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -3969,7 +3983,7 @@ $ cowsay "moo"
|
|||
<span class="normal">6</span>
|
||||
<span class="normal">7</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-p">[</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span>
|
||||
hello
|
||||
cowsay
|
||||
<span class="tok-p">];</span>
|
||||
|
|
@ -4052,13 +4066,13 @@ modify the URL.</p>
|
|||
<span class="normal"> 9</span>
|
||||
<span class="normal">10</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
<span class="tok-k">let</span>
|
||||
<span class="tok-ss">hello-nix =</span> <span class="tok-nb">import</span> <span class="tok-p">(</span><span class="tok-nb">builtins</span><span class="tok-o">.</span>fetchGit <span class="tok-p">{</span>
|
||||
<span class="tok-ss">url =</span> <span class="tok-s2">"https://codeberg.org/mhwombat/hello-nix"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">rev =</span> <span class="tok-s2">"aa2c87f8b89578b069b09fdb2be30a0c9d8a77d8"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">hello-nix</span> <span class="tok-o">=</span> <span class="tok-nb">import</span> <span class="tok-p">(</span><span class="tok-nb">builtins</span><span class="tok-o">.</span>fetchGit <span class="tok-p">{</span>
|
||||
<span class="tok-ss">url</span> <span class="tok-o">=</span> <span class="tok-s2">"https://codeberg.org/mhwombat/hello-nix"</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">rev</span> <span class="tok-o">=</span> <span class="tok-s2">"aa2c87f8b89578b069b09fdb2be30a0c9d8a77d8"</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">});</span>
|
||||
<span class="tok-k">in</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-p">[</span> hello-nix <span class="tok-p">];</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span> hello-nix <span class="tok-p">];</span>
|
||||
<span class="tok-p">}</span>
|
||||
</pre></div></td></tr></table></div></code></pre>
|
||||
</div>
|
||||
|
|
@ -4100,12 +4114,12 @@ modify the URL.</p>
|
|||
<span class="normal">10</span>
|
||||
<span class="normal">11</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
<span class="tok-k">let</span>
|
||||
<span class="tok-ss">hello-flake =</span> <span class="tok-p">(</span> <span class="tok-nb">builtins</span><span class="tok-o">.</span>getFlake
|
||||
<span class="tok-ss">hello-flake</span> <span class="tok-o">=</span> <span class="tok-p">(</span> <span class="tok-nb">builtins</span><span class="tok-o">.</span>getFlake
|
||||
<span class="tok-l">git+https://codeberg.org/mhwombat/hello-flake?ref=main&rev=3aa43dbe7be878dde7b2bdcbe992fe1705da3150</span>
|
||||
<span class="tok-p">)</span><span class="tok-o">.</span>packages<span class="tok-o">.</span><span class="tok-err">$</span><span class="tok-p">{</span><span class="tok-nb">builtins</span><span class="tok-o">.</span>currentSystem<span class="tok-p">}</span><span class="tok-o">.</span>default<span class="tok-p">;</span>
|
||||
<span class="tok-p">)</span><span class="tok-o">.</span>packages<span class="tok-o">.</span><span class="tok-si">${</span><span class="tok-nb">builtins</span><span class="tok-o">.</span>currentSystem<span class="tok-si">}</span><span class="tok-o">.</span>default<span class="tok-p">;</span>
|
||||
<span class="tok-k">in</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-p">[</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span>
|
||||
hello-flake
|
||||
<span class="tok-p">];</span>
|
||||
<span class="tok-p">}</span>
|
||||
|
|
@ -4148,10 +4162,10 @@ but you don’t want to bother writing a cabal file.</p>
|
|||
<span class="normal">8</span>
|
||||
<span class="normal">9</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
<span class="tok-k">let</span>
|
||||
<span class="tok-ss">customGhc =</span> haskellPackages<span class="tok-o">.</span>ghcWithPackages <span class="tok-p">(</span>pkgs<span class="tok-p">:</span> <span class="tok-k">with</span> pkgs<span class="tok-p">;</span> <span class="tok-p">[</span> containers <span class="tok-p">]);</span>
|
||||
<span class="tok-ss">customGhc</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>ghcWithPackages <span class="tok-p">(</span>pkgs<span class="tok-p">:</span> <span class="tok-k">with</span> pkgs<span class="tok-p">;</span> <span class="tok-p">[</span> containers <span class="tok-p">]);</span>
|
||||
<span class="tok-k">in</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-p">[</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span>
|
||||
customGhc
|
||||
<span class="tok-p">];</span>
|
||||
<span class="tok-p">}</span>
|
||||
|
|
@ -4271,12 +4285,12 @@ that are on my hard drive.</p>
|
|||
<span class="normal">13</span>
|
||||
<span class="normal">14</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
<span class="tok-k">let</span>
|
||||
<span class="tok-ss">pandoc-linear-table =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-linear-table"</span> <span class="tok-l">/home/amy/github/pandoc-linear-table</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-logic-proof =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-logic-proof"</span> <span class="tok-l">/home/amy/github/pandoc-logic-proof</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-columns =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-columns"</span> <span class="tok-l">/home/amy/github/pandoc-columns</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-linear-table</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-linear-table"</span> <span class="tok-l">/home/amy/github/pandoc-linear-table</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-logic-proof</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-logic-proof"</span> <span class="tok-l">/home/amy/github/pandoc-logic-proof</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-columns</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-columns"</span> <span class="tok-l">/home/amy/github/pandoc-columns</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-k">in</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-p">[</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span>
|
||||
pandoc
|
||||
pandoc-linear-table
|
||||
pandoc-logic-proof
|
||||
|
|
@ -4321,16 +4335,16 @@ The fourth package depends on the first three to build.</p>
|
|||
<span class="normal">18</span>
|
||||
<span class="normal">19</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
<span class="tok-k">let</span>
|
||||
<span class="tok-ss">pandoc-linear-table =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-linear-table"</span> <span class="tok-l">/home/amy/github/pandoc-linear-table</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-logic-proof =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-logic-proof"</span> <span class="tok-l">/home/amy/github/pandoc-logic-proof</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-columns =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-columns"</span> <span class="tok-l">/home/amy/github/pandoc-columns</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-maths-web =</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-maths-web"</span> <span class="tok-l">/home/amy/github/pandoc-maths-web</span>
|
||||
<span class="tok-ss">pandoc-linear-table</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-linear-table"</span> <span class="tok-l">/home/amy/github/pandoc-linear-table</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-logic-proof</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-logic-proof"</span> <span class="tok-l">/home/amy/github/pandoc-logic-proof</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-columns</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-columns"</span> <span class="tok-l">/home/amy/github/pandoc-columns</span> <span class="tok-p">{};</span>
|
||||
<span class="tok-ss">pandoc-maths-web</span> <span class="tok-o">=</span> haskellPackages<span class="tok-o">.</span>callCabal2nix <span class="tok-s2">"pandoc-maths-web"</span> <span class="tok-l">/home/amy/github/pandoc-maths-web</span>
|
||||
<span class="tok-p">{</span>
|
||||
<span class="tok-k">inherit</span> pandoc-linear-table pandoc-logic-proof pandoc-columns<span class="tok-p">;</span>
|
||||
<span class="tok-p">};</span>
|
||||
<span class="tok-k">in</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">buildInputs =</span> <span class="tok-p">[</span>
|
||||
<span class="tok-ss">buildInputs</span> <span class="tok-o">=</span> <span class="tok-p">[</span>
|
||||
pandoc
|
||||
pandoc-linear-table
|
||||
pandoc-logic-proof
|
||||
|
|
@ -4407,9 +4421,9 @@ sanitized: <strong>some text</strong></pre>
|
|||
<span class="normal">5</span>
|
||||
<span class="normal">6</span></pre></div></td><td class="code"><div><pre><span></span><span class="tok-k">with</span> <span class="tok-p">(</span><span class="tok-nb">import</span> <span class="tok-l"><nixpkgs></span> <span class="tok-p">{});</span>
|
||||
mkShell <span class="tok-p">{</span>
|
||||
<span class="tok-ss">shellHook =</span> <span class="tok-s1">''</span>
|
||||
<span class="tok-s1"> export FOO="bar"</span>
|
||||
<span class="tok-s1"> ''</span><span class="tok-p">;</span>
|
||||
<span class="tok-ss">shellHook</span> <span class="tok-o">=</span> <span class="tok-s tok-s-Multiline">''</span>
|
||||
<span class="tok-s tok-s-Multiline"> export FOO="bar"</span>
|
||||
<span class="tok-s tok-s-Multiline"> ''</span><span class="tok-p">;</span>
|
||||
<span class="tok-p">}</span>
|
||||
</pre></div></td></tr></table></div></code></pre>
|
||||
</div>
|
||||
|
|
@ -4430,7 +4444,7 @@ mkShell <span class="tok-p">{</span>
|
|||
</div>
|
||||
<div id="footer">
|
||||
<div id="footer-text">
|
||||
Last updated 2024-04-25 15:41:01 IST
|
||||
Last updated 2025-08-19 21:27:18 IST
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
|
|
|||
|
|
@ -129,6 +129,11 @@ $ runghc Main.hs
|
|||
|
||||
Success! Now we know the program works.
|
||||
|
||||
....
|
||||
$# echo '$ exit'
|
||||
....
|
||||
|
||||
|
||||
== The cabal file
|
||||
|
||||
It's time to write a Cabal file for this program.
|
||||
|
|
@ -170,7 +175,7 @@ $ cabal run
|
|||
$# echo '$ exit'
|
||||
....
|
||||
|
||||
After a lot of output messages, the build succeeds and the program runs.
|
||||
After some output messages, the build succeeds and the program runs.
|
||||
|
||||
== The Nix flake
|
||||
|
||||
|
|
@ -192,6 +197,14 @@ $# cat flake.nix
|
|||
|
||||
The above definition will work for most of your haskell projects;
|
||||
simply change the `description` and the package name in `packages.default`.
|
||||
|
||||
We also need a `LICENSE` file.
|
||||
For now, this can be empty.
|
||||
|
||||
....
|
||||
$ touch LICENSE
|
||||
....
|
||||
|
||||
Let's try out the new flake.
|
||||
|
||||
....
|
||||
|
|
@ -203,7 +216,7 @@ part of the repository. We need to add all of the important files to the
|
|||
repo before building or running the flake.
|
||||
|
||||
....
|
||||
$ git add flake.nix hello-flake-haskell.cabal Main.hs
|
||||
$ git add flake.nix hello-flake-haskell.cabal LICENSE Main.hs
|
||||
$ nix run
|
||||
....
|
||||
|
||||
|
|
|
|||
11295
wombats-book-of-nix.pdf
11295
wombats-book-of-nix.pdf
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue