diff --git a/nix.md b/nix.md index ad740b6..8872830 100644 --- a/nix.md +++ b/nix.md @@ -27,6 +27,11 @@ newlines" ```
= true
+```nix +''alternative syntax'' +``` +
= "alternative syntax"
+ Nix has booleans. ```nix @@ -123,14 +128,14 @@ using the repl, press tab to get a list of them. ```
= { system = "x86_64-linux"; }
-Finally, nix has a path type. When +Finally, nix has a path type. ```nix { sourceCode = ./path/to/sources; } ``` -
= { system = "x86_64-linux"; }
+
= { sourceCode = /absolute/path/to/sources; }
::: ::: section @@ -156,10 +161,13 @@ derivation { system = builtins.currentSystem; } ``` -
= derivation «/nix/store/ha5hof1nput-foobar.drv»
+
= derivation «/nix/store/119h84n7a58069l5zi0rgs7q06rhrlh3-foobar.drv»
-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 + ''; }; }; }