about summary refs log tree commit diff
path: root/content/notes/working-with-nix.md
diff options
context:
space:
mode:
Diffstat (limited to 'content/notes/working-with-nix.md')
-rw-r--r--content/notes/working-with-nix.md46
1 files changed, 46 insertions, 0 deletions
diff --git a/content/notes/working-with-nix.md b/content/notes/working-with-nix.md
new file mode 100644
index 0000000..9e697d5
--- /dev/null
+++ b/content/notes/working-with-nix.md
@@ -0,0 +1,46 @@
+---
+title: working with nix
+date: 2022-05-10
+tags:
+  - linux
+  - nix
+---
+
+# the `nix develop` command
+
+The `nix develop` command is for working on a repository. If our
+repository contains a `Makefile`, it will be used by the various
+sub-commands.
+
+`nix develop` supports multiple
+[phases](https://nixos.org/manual/nixpkgs/stable/#sec-stdenv-phases) and
+they map as follow:
+
+| phase          | default to     | command                   | note |
+|----------------|----------------|---------------------------|------|
+| configurePhase | `./configure`  | `nix develop --configure` |      |
+| buildPhase     | `make`         | `nix develop --build`     |      |
+| checkPhase     | `make check`   | `nix develop --check`     |      |
+| installPhase   | `make install` | `nix develop --install`   |      |
+
+In the repository, running `nix develop --build` will build the binary
+**using the Makefile**. This is different from running `nix build`.
+
+# the `nix build` and `nix run` commands
+
+## for Go
+
+For Go, there's the `buildGoModule`. Looking at the
+[source](https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/go-modules/generic/default.nix)
+we can see there's a definition of what will be done for each phases. As
+a result, we don't have to define them ourselves.
+
+If we run `nix build` in the repository, it will run the default [build
+phase](https://github.com/NixOS/nixpkgs/blob/fb7287e6d2d2684520f756639846ee07f6287caa/pkgs/development/go-modules/generic/default.nix#L171).
+
+# `buildInputs` or `nativeBuildInputs`
+
+-   `nativeBuildInputs` is intended for architecture-dependent
+    build-time-only dependencies
+-   `buildInputs` is intended for architecture-independent
+    build-time-only dependencies