summaryrefslogtreecommitdiff
path: root/3 Resources/Nix/Shell.md
diff options
context:
space:
mode:
authorJasper Ras <jras@hostnet.nl>2025-03-20 11:07:49 +0100
committerJasper Ras <jras@hostnet.nl>2025-03-20 11:07:49 +0100
commit80ccf68f55dbb70d7e5ed52ee95b3c9d1b6ce264 (patch)
tree93e28e85ab70052aa6f577998ec7dc1f413b40c0 /3 Resources/Nix/Shell.md
parent9642cd7ae24f0ba79ce5647c709b35ae8f06a285 (diff)
vault backup: 2025-03-20 11:07:48
Diffstat (limited to '3 Resources/Nix/Shell.md')
-rw-r--r--3 Resources/Nix/Shell.md71
1 files changed, 71 insertions, 0 deletions
diff --git a/3 Resources/Nix/Shell.md b/3 Resources/Nix/Shell.md
new file mode 100644
index 0000000..08e7c53
--- /dev/null
+++ b/3 Resources/Nix/Shell.md
@@ -0,0 +1,71 @@
+---
+tags:
+ - nix
+ - shell
+---
+Basic invocation: `nix-shell -p [ pkgs ... ]`
+
+# Shebang
+```
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p bash
+
+do stuff
+```
+
+Different interpreters can be set with the `-i` option such as python
+```
+#! /usr/bin/env nix-shell
+#! nix-shell -i python3 -p python3
+
+print("hello world")
+```
+
+The `-I` option can be used to pin nixpkgs
+```
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash
+#! nix-shell -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/aed4b19d312525ae7ca9bceb4e1efe3357d0e2eb.tar.gz
+
+echo hello world
+```
+# 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
+```
+
+ 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