update nix.md

This commit is contained in:
tezlm 2024-08-18 03:34:42 -07:00
parent a44fc08a84
commit 2ec81f782b
Signed by: tezlm
GPG key ID: 649733FCD94AFBBA

44
nix.md
View file

@ -27,6 +27,11 @@ newlines"
```
<div class="eval">= true</div>
```nix
''alternative syntax''
```
<div class="eval">= "alternative syntax"</div>
Nix has booleans.
```nix
@ -123,14 +128,14 @@ using the repl, press <kbd>tab</kbd> to get a list of them.
```
<div class="eval">= { system = "x86_64-linux"; }</div>
Finally, nix has a path type. When
Finally, nix has a path type.
```nix
{
sourceCode = ./path/to/sources;
}
```
<div class="eval">= { system = "x86_64-linux"; }</div>
<div class="eval">= { sourceCode = /absolute/path/to/sources; }</div>
:::
::: section
@ -156,10 +161,13 @@ derivation {
system = builtins.currentSystem;
}
```
<div class="eval">= derivation «/nix/store/ha5hof1nput-foobar.drv»</div>
<div class="eval">= derivation «/nix/store/119h84n7a58069l5zi0rgs7q06rhrlh3-foobar.drv»</div>
To build this, use `:b (copy-pasted code)` in the repl. It should print
a path to the build outputs.
This code outputs a hash-based path to a derivation, nix's version of a
build script. Derivations *derive* build outputs from build inputs. To
build the derivation, use `:b (copy-pasted code)` in the repl. It should
print a path to the build outputs. If you `cat` the output, you should
get back "Hello, derivation!".
[NixOS/nixpkgs](https://github.com/NixOS/nixpkgs) is a combination package
repository and standard library, containing thousands of derivations and
@ -178,24 +186,24 @@ will *always* produce the same outputs. If it works on one nix user's
machine, it will work every nix user's machine. If a build fails, it
fails for everyone.
Flakes work by taking in an explicit set of inputs along with the build
steps. Anything that isn't explicitly defined as an input, whether
it's binaries, paths, or environment variables, is not given to the
derivation's builder.
Here's an example flake:
Nix flakes are a new tool that makes the inputs explicit as well, instead
of only the build steps. Anything that isn't explicitly defined as an
input, whether it's binaries, paths, or environment variables, is not
given to the derivation's builder. Here's an example flake:
```nix
{
description = "any useful description here";
inputs = {
# this is a flake identifier
# Inputs take in flake references
# https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-flake#flake-references
nixpkgs.url = "github:NixOS/nixpkgs";
};
outputs = { self, nixpkgs }: {
packages.x86_64-linux.default = inputs.nixpkgs.legacyPackages.x86_64-linux.hello;
# reuse an existing derivation for simplicity
packages.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.hello;
};
}
```
@ -222,8 +230,14 @@ another flake:
packages.x86_64-linux.default = pkgs.stdenv.mkDerivation {
name = "hello";
src = self;
buildPhase = "echo '#!/bin/sh\necho hello world' > bin; chmod +x bin";
installPhase = "mkdir -p $out/bin; mv bin $out/bin/hello";
buildPhase = ''
echo -e '#!/bin/sh\necho hello world' > bin
chmod +x bin
'';
installPhase = ''
mkdir -p $out/bin
mv bin $out/bin/hello
'';
};
};
}