commit 5230b3c6353501ccfdbf8cc4b1adafc40457405a Author: Evie Litherland-Smith Date: Tue Apr 23 15:02:35 2024 +0100 Initial commit Setup flake for easily making a JupyterLab instance with access to a given kernel diff --git a/catppuccin_jupyterlab/default.nix b/catppuccin_jupyterlab/default.nix new file mode 100644 index 0000000..334ae12 --- /dev/null +++ b/catppuccin_jupyterlab/default.nix @@ -0,0 +1,15 @@ +{ + buildPythonPackage, + fetchPypi, +}: +buildPythonPackage rec { + pname = "catppuccin_jupyterlab"; + version = "0.2.0"; + format = "wheel"; + src = fetchPypi { + inherit pname version format; + hash = "sha256-qPML3SXyuDsqLeYasaS3QFylKDIvbtp0xtnjh7IOYrI="; + dist = "py3"; + python = "py3"; + }; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..ce27b9a --- /dev/null +++ b/flake.lock @@ -0,0 +1,141 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "poetry2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1703863825, + "narHash": "sha256-rXwqjtwiGKJheXB43ybM8NwWB8rO2dSRrEqes0S7F5Y=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "5163432afc817cf8bd1f031418d1869e4c9d5547", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1713714899, + "narHash": "sha256-+z/XjO3QJs5rLE5UOf015gdVauVRQd2vZtsFkaXBq2Y=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "6143fc5eeb9c4f00163267708e26191d1e918932", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "poetry2nix": { + "inputs": { + "flake-utils": "flake-utils", + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_2", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1708589824, + "narHash": "sha256-2GOiFTkvs5MtVF65sC78KNVxQSmsxtk0WmV1wJ9V2ck=", + "owner": "nix-community", + "repo": "poetry2nix", + "rev": "3c92540611f42d3fb2d0d084a6c694cd6544b609", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "poetry2nix", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs", + "poetry2nix": "poetry2nix" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "id": "systems", + "type": "indirect" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "poetry2nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1708335038, + "narHash": "sha256-ETLZNFBVCabo7lJrpjD6cAbnE11eDOjaQnznmg/6hAE=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "e504621290a1fd896631ddbc5e9c16f4366c9f65", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..6d29e9f --- /dev/null +++ b/flake.nix @@ -0,0 +1,26 @@ +{ + description = "Utilities to setup JupyterLab with given kernels available"; + inputs = { + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + poetry2nix = { + url = "github:nix-community/poetry2nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + outputs = { + self, + nixpkgs, + poetry2nix, + }: let + system = "x86_64-linux"; + pkgs = import nixpkgs {inherit system;}; + in { + packages.${system} = { + poetry2nix = poetry2nix.lib.mkPoetry2Nix {inherit pkgs;}; + catppuccin_jupyterlab = import ./catppuccin_jupyterlab/default.nix; + mkIpythonKernel = import ./ipykernel.nix; + mkJupyterShell = import ./jupyter.nix; + default = self.packages.${system}.mkJupyterShell; + }; + }; +} diff --git a/ipykernel.nix b/ipykernel.nix new file mode 100644 index 0000000..7c9b87d --- /dev/null +++ b/ipykernel.nix @@ -0,0 +1,24 @@ +{ + pkgs, + name, + pyenv, + ... +}: let + interpreter = pyenv.interpreter; # TODO ensure ipykernel package installed somehow... +in + pkgs.writeTextFile { + name = "${name}-ipykernel"; + destination = "/kernels/${name}/kernel.json"; + text = builtins.toJSON { + display_name = name; + argv = [ + "${interpreter}" + "-m" + "ipykernel_launcher" + "-f" + "{connection_file}" + ]; + language = "python"; + metadata = {debugger = true;}; + }; + } diff --git a/jupyter.nix b/jupyter.nix new file mode 100644 index 0000000..33f4597 --- /dev/null +++ b/jupyter.nix @@ -0,0 +1,20 @@ +{ + pkgs, + kernel, + python ? pkgs.python3, +}: +pkgs.mkShellNoCC { + nativeBuildInputs = [ + (python.withPackages (ps: + with ps; [ + jupyterlab + jupyterlab-git + nbdime + nbconvert + (ps.callPackage ./catppuccin_jupyterlab {}) + ])) + ]; + shellHook = '' + export JUPYTER_PATH=${kernel} + ''; +}