nix-book/source/hello-flake/main.adoc0
Amy de Buitléir d3186b9494 cleanup
2025-08-19 22:25:58 +01:00

57 lines
1.6 KiB
Text

= Hello, flake!
// TODO Need an intro explaining what flakes are. Move the "why flakes" section here.
Before learning to write Nix flakes, let's learn how to use them. I've
created a simple example of a flake in this git
https://codeberg.org/mhwombat/hello-flake[repository]. To run this
flake, you don't need to install anything; simply run the command below.
The first time you use a flake, Nix has to fetch and build it, which
may take time. Subsequent invocations should be instantaneous.
....
$ nix run "git+https://codeberg.org/mhwombat/hello-flake"
....
That's a lot to type every time we want to use this package. Instead, we
can enter a shell with the package available to us, using the
`nix shell` command.
....
$ nix shell "git+https://codeberg.org/mhwombat/hello-flake"
....
In this shell, the command is on our `$PATH`, so we can execute the
command by name.
....
$ hello-flake
....
Nix didn't _install_ the package; it merely built and placed it in a
directory called the "`Nix store`". Thus we can have multiple versions
of a package without worrying about conflicts. We can find out the
location of the executable, if we're curious.
....
$ which hello-flake
....
Once we exit that shell, the `hello-flake` command is no longer
directly available.
....
$# echo '$ exit'
$# echo '$ hello-flake'
sh: line 3: hello-flake: command not found
....
However, we can still run the command using the store path we found
earlier. That's not particularly convenient, but it does demonstrate
that the package remains in the store for future use.
....
$# executable=$(which hello-flake)
$# echo '$ '${executable}
$# ${executable}
....