summaryrefslogtreecommitdiff
path: root/3 resources/nix.md
diff options
context:
space:
mode:
authorJasper Ras <jras@hostnet.nl>2024-11-23 17:34:50 +0100
committerJasper Ras <jras@hostnet.nl>2024-11-23 17:34:50 +0100
commit80153a133d0888b7c0a7b72a9f80ccc6f005c555 (patch)
tree261af65acfe995e7254152136af119af489c7354 /3 resources/nix.md
parentdbe655fca3cf4fc5bc882015006f006764eace52 (diff)
sorted out inbox
Diffstat (limited to '3 resources/nix.md')
-rw-r--r--3 resources/nix.md58
1 files changed, 58 insertions, 0 deletions
diff --git a/3 resources/nix.md b/3 resources/nix.md
new file mode 100644
index 0000000..d407d2e
--- /dev/null
+++ b/3 resources/nix.md
@@ -0,0 +1,58 @@
+# Language
+ `nix repl` to interactively evaluate Nix expressions. `:p` if output is not full.
+ `nix-instantiate --eval <file>.nix` to evaluate a Nix expression from a file. `--strict`.
+
+Nix is like JSON, but with functions.
+Recursive attribute sets can reference values declared earlier in the same set.
+```nix
+rec {
+ one = 1;
+ two = one + 1;
+}
+```
+
+A `let` binding is used to assign names to values just as attribute sets, they can then be used in expressions. Let bindings have a local scope.
+
+A `with` allows referencing attributes of attribute sets without referencing the set.
+# Flakes
+Nix flakes are source trees containing a file `flake.nix` at their root. The file `flake.nix` provides a standardized way to provide [[Zettelkast/Index/Nix]] artifacts. It's like a package manager for [[Zettelkast/Index/Nix]]. A flake can be dependent on other Flakes and it's possible to pin dependencies to exact revisions by using a `flake.lock` file.
+
+Nix flake evaluation is hermetic, meaning that it produces the same result wherever it's built.k
+
+The feature can be enabled in `~/.config/nix/nix.conf`:
+
+```
+experimental-features = nix-command flakes
+```
+
+To initialize in a repo: `nix flake init`.
+
+In flakes dependencies have to be specified explicitly and MUST be locked to specific versions therefore it's no longer allowed to use the nixpkgs found in `NIX_PATH` by referencing it like `<nixpkgs>`.
+
+Output of a Flake is an arbitrary [[Zettelkast/Index/Nix]] value such as a package, [[NixOS]] module or library function.
+Commands `nix build` and `nix shell` will build the output `packages.<system>.default` unless we specify another output, for example: `nix shell .#checks.aarch64-linux.build`.
+
+# Overlays
+[[TODO]]
+
+# Shell.nix
+Can be used to set up per dir environments, e.g using direnv to automatically activate them.
+## Python
+https://nixos.org/manual/nixpkgs/stable/#python
+
+```nix
+{ pkgs ? import <nixpkgs> {}}:
+
+pkgs.mkShell {
+ packages = [ pkgs.virtualenv ];
+}
+```
+
+```nix
+with import <nixpkgs> {};
+(
+let my_toolz = python311.pkgs.buildPythonPackage rec { pname = "toolz"; version = "0.10.0"; pyproject = true; src = fetchPypi { inherit pname version; hash = "sha256-CP3V73yWSArRHBLUct4hrNMjWZlvaaUlkpm1QP66RWA="; }; nativeBuildInputs = [ python311.pkgs.setuptools python311.pkgs.wheel ]; # has no tests doCheck = false; meta = { homepage = "https://github.com/pytoolz/toolz/"; description = "List processing tools and functional utilities"; # [...] }; }; in python311.withPackages (ps: with ps; [ numpy my_toolz ]) ).env
+```
+
+---
+[Flakes Wiki](https://nixos.wiki/wiki/Flakes) \ No newline at end of file