From 9232b8d817d4cd4122947375156fa2fa1e9fba14 Mon Sep 17 00:00:00 2001 From: Jasper Ras Date: Mon, 13 Jan 2025 13:16:06 +0100 Subject: vault backup: 2025-01-13 13:16:06 --- 3 resources/nix/Flake.md | 22 +++++++++++++ 3 resources/nix/Overlays.md | 11 +++++++ 3 resources/nix/Package.md | 6 ++++ 3 resources/nix/REPL.md | 5 +++ 3 resources/nix/Shell.nix.md | 42 ++++++++++++++++++++++++ 3 resources/nix/flakes.md | 19 ----------- 3 resources/nix/language.md | 5 --- 3 resources/nix/language/Import.md | 5 +++ 3 resources/nix/language/Let.md | 12 +++++++ 3 resources/nix/language/Rec.md | 20 +++++++++++ 3 resources/nix/language/With.md | 15 +++++++++ 3 resources/nix/language/keyword-import.md | 2 -- 3 resources/nix/language/keyword-let.md | 9 ----- 3 resources/nix/language/keyword-rec.md | 17 ---------- 3 resources/nix/language/keyword-with.md | 12 ------- 3 resources/nix/overlays.md | 8 ----- 3 resources/nix/package.md | 3 -- 3 resources/nix/packages/Apply custom patches.md | 17 ++++++++++ 3 resources/nix/packages/apply-patches.md | 14 -------- 3 resources/nix/repl.md | 2 -- 3 resources/nix/shell.nix.md | 39 ---------------------- 21 files changed, 155 insertions(+), 130 deletions(-) create mode 100644 3 resources/nix/Flake.md create mode 100644 3 resources/nix/Overlays.md create mode 100644 3 resources/nix/Package.md create mode 100644 3 resources/nix/REPL.md create mode 100644 3 resources/nix/Shell.nix.md delete mode 100644 3 resources/nix/flakes.md delete mode 100644 3 resources/nix/language.md create mode 100644 3 resources/nix/language/Import.md create mode 100644 3 resources/nix/language/Let.md create mode 100644 3 resources/nix/language/Rec.md create mode 100644 3 resources/nix/language/With.md delete mode 100644 3 resources/nix/language/keyword-import.md delete mode 100644 3 resources/nix/language/keyword-let.md delete mode 100644 3 resources/nix/language/keyword-rec.md delete mode 100644 3 resources/nix/language/keyword-with.md delete mode 100644 3 resources/nix/overlays.md delete mode 100644 3 resources/nix/package.md create mode 100644 3 resources/nix/packages/Apply custom patches.md delete mode 100644 3 resources/nix/packages/apply-patches.md delete mode 100644 3 resources/nix/repl.md delete mode 100644 3 resources/nix/shell.nix.md (limited to '3 resources/nix') diff --git a/3 resources/nix/Flake.md b/3 resources/nix/Flake.md new file mode 100644 index 0000000..754556f --- /dev/null +++ b/3 resources/nix/Flake.md @@ -0,0 +1,22 @@ +#nix #flake + +--- +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/3 resources/nix/Overlays.md b/3 resources/nix/Overlays.md new file mode 100644 index 0000000..8ee33f3 --- /dev/null +++ b/3 resources/nix/Overlays.md @@ -0,0 +1,11 @@ +#nix #overlay + +--- +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/3 resources/nix/Package.md b/3 resources/nix/Package.md new file mode 100644 index 0000000..32c6bd4 --- /dev/null +++ b/3 resources/nix/Package.md @@ -0,0 +1,6 @@ +#nix #packages + +--- +Packages != NixOS Modules + +Packages come from Nixpkgs. \ No newline at end of file diff --git a/3 resources/nix/REPL.md b/3 resources/nix/REPL.md new file mode 100644 index 0000000..210b980 --- /dev/null +++ b/3 resources/nix/REPL.md @@ -0,0 +1,5 @@ +#nix #repl + +--- +`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/3 resources/nix/Shell.nix.md b/3 resources/nix/Shell.nix.md new file mode 100644 index 0000000..13715c2 --- /dev/null +++ b/3 resources/nix/Shell.nix.md @@ -0,0 +1,42 @@ +#nix #shell + +--- +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 [[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 diff --git a/3 resources/nix/flakes.md b/3 resources/nix/flakes.md deleted file mode 100644 index fb99500..0000000 --- a/3 resources/nix/flakes.md +++ /dev/null @@ -1,19 +0,0 @@ -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/3 resources/nix/language.md b/3 resources/nix/language.md deleted file mode 100644 index 01101d9..0000000 --- a/3 resources/nix/language.md +++ /dev/null @@ -1,5 +0,0 @@ -"Nix is like JSON, but with functions". - -[[keyword-rec]] -[[keyword-let]] -[[keyword-with]] diff --git a/3 resources/nix/language/Import.md b/3 resources/nix/language/Import.md new file mode 100644 index 0000000..d201c74 --- /dev/null +++ b/3 resources/nix/language/Import.md @@ -0,0 +1,5 @@ +#nix #keyword + +--- +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/3 resources/nix/language/Let.md b/3 resources/nix/language/Let.md new file mode 100644 index 0000000..bfb4b31 --- /dev/null +++ b/3 resources/nix/language/Let.md @@ -0,0 +1,12 @@ +#nix #keyword + +--- +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/3 resources/nix/language/Rec.md b/3 resources/nix/language/Rec.md new file mode 100644 index 0000000..b7050d3 --- /dev/null +++ b/3 resources/nix/language/Rec.md @@ -0,0 +1,20 @@ +#nix #keyword + +--- +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/3 resources/nix/language/With.md b/3 resources/nix/language/With.md new file mode 100644 index 0000000..b291907 --- /dev/null +++ b/3 resources/nix/language/With.md @@ -0,0 +1,15 @@ +#nix #keyword + +--- +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/3 resources/nix/language/keyword-import.md b/3 resources/nix/language/keyword-import.md deleted file mode 100644 index 616c155..0000000 --- a/3 resources/nix/language/keyword-import.md +++ /dev/null @@ -1,2 +0,0 @@ -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/3 resources/nix/language/keyword-let.md b/3 resources/nix/language/keyword-let.md deleted file mode 100644 index 3b2f401..0000000 --- a/3 resources/nix/language/keyword-let.md +++ /dev/null @@ -1,9 +0,0 @@ -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/3 resources/nix/language/keyword-rec.md b/3 resources/nix/language/keyword-rec.md deleted file mode 100644 index 456f877..0000000 --- a/3 resources/nix/language/keyword-rec.md +++ /dev/null @@ -1,17 +0,0 @@ -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/3 resources/nix/language/keyword-with.md b/3 resources/nix/language/keyword-with.md deleted file mode 100644 index 10763ff..0000000 --- a/3 resources/nix/language/keyword-with.md +++ /dev/null @@ -1,12 +0,0 @@ -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/3 resources/nix/overlays.md b/3 resources/nix/overlays.md deleted file mode 100644 index 70dad85..0000000 --- a/3 resources/nix/overlays.md +++ /dev/null @@ -1,8 +0,0 @@ -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/3 resources/nix/package.md b/3 resources/nix/package.md deleted file mode 100644 index 231e3a6..0000000 --- a/3 resources/nix/package.md +++ /dev/null @@ -1,3 +0,0 @@ -Packages != NixOS Modules - -Packages are from Nixpkgs. \ No newline at end of file diff --git a/3 resources/nix/packages/Apply custom patches.md b/3 resources/nix/packages/Apply custom patches.md new file mode 100644 index 0000000..370c53a --- /dev/null +++ b/3 resources/nix/packages/Apply custom patches.md @@ -0,0 +1,17 @@ +#nix #packages #overlay + +--- +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/3 resources/nix/packages/apply-patches.md b/3 resources/nix/packages/apply-patches.md deleted file mode 100644 index e703f81..0000000 --- a/3 resources/nix/packages/apply-patches.md +++ /dev/null @@ -1,14 +0,0 @@ -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/3 resources/nix/repl.md b/3 resources/nix/repl.md deleted file mode 100644 index 6a0fd4a..0000000 --- a/3 resources/nix/repl.md +++ /dev/null @@ -1,2 +0,0 @@ -`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/3 resources/nix/shell.nix.md b/3 resources/nix/shell.nix.md deleted file mode 100644 index d5fa8ce..0000000 --- a/3 resources/nix/shell.nix.md +++ /dev/null @@ -1,39 +0,0 @@ -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