summaryrefslogtreecommitdiff
path: root/Working with Nix shells.md
diff options
context:
space:
mode:
Diffstat (limited to 'Working with Nix shells.md')
-rw-r--r--Working with Nix shells.md66
1 files changed, 66 insertions, 0 deletions
diff --git a/Working with Nix shells.md b/Working with Nix shells.md
new file mode 100644
index 0000000..c042edd
--- /dev/null
+++ b/Working with Nix shells.md
@@ -0,0 +1,66 @@
+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