From ed0753ad224f0c65133bd7a63180257eecd9f5e3 Mon Sep 17 00:00:00 2001 From: Jasper Ras Date: Wed, 8 Jan 2025 10:48:09 +0100 Subject: vault backup: 2025-01-08 10:48:09 --- .trash/3 resources/nix/flakes.md | 19 +++++++++++ .trash/3 resources/nix/language.md | 5 +++ .trash/3 resources/nix/language/keyword-import.md | 2 ++ .trash/3 resources/nix/language/keyword-let.md | 9 ++++++ .trash/3 resources/nix/language/keyword-rec.md | 17 ++++++++++ .trash/3 resources/nix/language/keyword-with.md | 12 +++++++ .trash/3 resources/nix/overlays.md | 8 +++++ .trash/3 resources/nix/package.md | 3 ++ .trash/3 resources/nix/packages/apply-patches.md | 14 ++++++++ .trash/3 resources/nix/repl.md | 2 ++ .trash/3 resources/nix/shell.nix.md | 39 +++++++++++++++++++++++ 11 files changed, 130 insertions(+) create mode 100644 .trash/3 resources/nix/flakes.md create mode 100644 .trash/3 resources/nix/language.md create mode 100644 .trash/3 resources/nix/language/keyword-import.md create mode 100644 .trash/3 resources/nix/language/keyword-let.md create mode 100644 .trash/3 resources/nix/language/keyword-rec.md create mode 100644 .trash/3 resources/nix/language/keyword-with.md create mode 100644 .trash/3 resources/nix/overlays.md create mode 100644 .trash/3 resources/nix/package.md create mode 100644 .trash/3 resources/nix/packages/apply-patches.md create mode 100644 .trash/3 resources/nix/repl.md create mode 100644 .trash/3 resources/nix/shell.nix.md (limited to '.trash/3 resources/nix') diff --git a/.trash/3 resources/nix/flakes.md b/.trash/3 resources/nix/flakes.md new file mode 100644 index 0000000..fb99500 --- /dev/null +++ b/.trash/3 resources/nix/flakes.md @@ -0,0 +1,19 @@ +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 ``. + +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..default` unless we specify another output, for example: `nix shell .#checks.aarch64-linux.build`. + +--- +[Flakes Wiki](https://nixos.wiki/wiki/Flakes) \ No newline at end of file diff --git a/.trash/3 resources/nix/language.md b/.trash/3 resources/nix/language.md new file mode 100644 index 0000000..01101d9 --- /dev/null +++ b/.trash/3 resources/nix/language.md @@ -0,0 +1,5 @@ +"Nix is like JSON, but with functions". + +[[keyword-rec]] +[[keyword-let]] +[[keyword-with]] diff --git a/.trash/3 resources/nix/language/keyword-import.md b/.trash/3 resources/nix/language/keyword-import.md new file mode 100644 index 0000000..616c155 --- /dev/null +++ b/.trash/3 resources/nix/language/keyword-import.md @@ -0,0 +1,2 @@ +The import keyword brings a Nix expression from another source into scope such that we can reference it. For example, we can `import ` and it would bring the entire attribute set that is Nixpkgs into scope and allows us to reference any of its attributes. + diff --git a/.trash/3 resources/nix/language/keyword-let.md b/.trash/3 resources/nix/language/keyword-let.md new file mode 100644 index 0000000..3b2f401 --- /dev/null +++ b/.trash/3 resources/nix/language/keyword-let.md @@ -0,0 +1,9 @@ +Keyword: `let` +Used to assign variables that can be used in an expression immediately following the let-binding. +```nix +let + one = 1; +in { + two = one + 1; +} +``` diff --git a/.trash/3 resources/nix/language/keyword-rec.md b/.trash/3 resources/nix/language/keyword-rec.md new file mode 100644 index 0000000..456f877 --- /dev/null +++ b/.trash/3 resources/nix/language/keyword-rec.md @@ -0,0 +1,17 @@ +Recursive attribute sets can reference values declared earlier in the same set. +keyword: `rec` +```nix +rec { + one = 1; + two = one + 1; +} +``` + +Ordering does not matter: +```nix +nix-repl> rec { two = one + 1; one = 1; } +{ + one = 1; + two = 2; +} +``` diff --git a/.trash/3 resources/nix/language/keyword-with.md b/.trash/3 resources/nix/language/keyword-with.md new file mode 100644 index 0000000..10763ff --- /dev/null +++ b/.trash/3 resources/nix/language/keyword-with.md @@ -0,0 +1,12 @@ +The `with` keyword brings all attributes from a given set, e.g nixpkgs, into the local scope. Making them accessible as if they were declared in the same file. + +An example, bringing everything from nixpkgs into scope: +``` +with import ; +with python310Packages; <-- declared in nixpkgs + +buildPythonPackage <-- declared in python310Packages +``` + +The import statement is required here because imports a nix expression from another source, in this case nixpkgs. +It is not required at line two, because python310Packages itself is already in the local scope. \ No newline at end of file diff --git a/.trash/3 resources/nix/overlays.md b/.trash/3 resources/nix/overlays.md new file mode 100644 index 0000000..70dad85 --- /dev/null +++ b/.trash/3 resources/nix/overlays.md @@ -0,0 +1,8 @@ +Functions that accept two args (conventionally: final, prev) and return a set of [[package]]s. + +The `prev` arguments holds the set of packages of the "parent" overlay while the `final` argument holds the end result of **all** overlays applied. This means that overlays depend on each other. It is unclear how we can tell on which overlay an overlay depends. + +We can use it to override existing packages or add new packages. + +--- +https://nixos.wiki/wiki/Overlays diff --git a/.trash/3 resources/nix/package.md b/.trash/3 resources/nix/package.md new file mode 100644 index 0000000..231e3a6 --- /dev/null +++ b/.trash/3 resources/nix/package.md @@ -0,0 +1,3 @@ +Packages != NixOS Modules + +Packages are from Nixpkgs. \ No newline at end of file diff --git a/.trash/3 resources/nix/packages/apply-patches.md b/.trash/3 resources/nix/packages/apply-patches.md new file mode 100644 index 0000000..e703f81 --- /dev/null +++ b/.trash/3 resources/nix/packages/apply-patches.md @@ -0,0 +1,14 @@ +We can apply patches to existing packages using [[overlays]]: +```nix +final: prev { + nova = prev.nova.overrideAttrs (old: { + patches = (old.patches or []) ++ [ + prev.fetchpatch { + url = "https://github.com/owner/repo/commit/hash.patch"; + hash = "somehash"; + }) + ./relative.patch + ] + }) +} +``` diff --git a/.trash/3 resources/nix/repl.md b/.trash/3 resources/nix/repl.md new file mode 100644 index 0000000..6a0fd4a --- /dev/null +++ b/.trash/3 resources/nix/repl.md @@ -0,0 +1,2 @@ +`nix repl` to interactively evaluate Nix expressions. `:p` if output is not full. + `nix-instantiate --eval .nix` to evaluate a Nix expression from a file. `--strict`. \ No newline at end of file diff --git a/.trash/3 resources/nix/shell.nix.md b/.trash/3 resources/nix/shell.nix.md new file mode 100644 index 0000000..d5fa8ce --- /dev/null +++ b/.trash/3 resources/nix/shell.nix.md @@ -0,0 +1,39 @@ +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 {}}: + +pkgs.mkShell { + packages = [ pkgs.virtualenv ]; +} +``` + +```nix +with import {}; +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 +``` + +The [[keyword-import]] is required here because imports a nix expression from another source, in this case nixpkgs. +It is not required at line two, because python310Packages itself is already in the local scope. \ No newline at end of file -- cgit v1.2.3