From 471d804302527f8a41f3ed658584c90b772ae411 Mon Sep 17 00:00:00 2001 From: vobbla16 Date: Sun, 24 Mar 2024 20:15:34 +0300 Subject: [PATCH] add sagemath kernel --- examples/sage/standart/default.nix | 9 +++ modules/default.nix | 1 + modules/kernels/sage/default.nix | 106 +++++++++++++++++++++++++++++ modules/kernels/sage/logo32.png | Bin 0 -> 2308 bytes modules/kernels/sage/logo64.png | Bin 0 -> 5686 bytes 5 files changed, 116 insertions(+) create mode 100644 examples/sage/standart/default.nix create mode 100644 modules/kernels/sage/default.nix create mode 100644 modules/kernels/sage/logo32.png create mode 100644 modules/kernels/sage/logo64.png diff --git a/examples/sage/standart/default.nix b/examples/sage/standart/default.nix new file mode 100644 index 00000000..f3f14ca5 --- /dev/null +++ b/examples/sage/standart/default.nix @@ -0,0 +1,9 @@ +{ + self, + system, + ... +}: { + kernel.sage.standard = { + enable = true; + }; +} diff --git a/modules/default.nix b/modules/default.nix index 23e69273..046a727a 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -43,6 +43,7 @@ in { ./../modules/kernels/scala/default.nix ./../modules/kernels/typescript/default.nix ./../modules/kernels/zsh/default.nix + ./../modules/kernels/sage/default.nix ]; # TODO: add kernels #++ map (name: ./. + "/../modules/kernels/${name}/module.nix") (builtins.attrNames (builtins.readDir ./../modules/kernels)); diff --git a/modules/kernels/sage/default.nix b/modules/kernels/sage/default.nix new file mode 100644 index 00000000..2c37ad3d --- /dev/null +++ b/modules/kernels/sage/default.nix @@ -0,0 +1,106 @@ +{ + self, + system, + config, + lib, + mkKernel, + ... +}: let + inherit (lib) types; + + kernelName = "sage"; + kernelOptions = { + config, + name, + ... + }: let + overlay = final: prev: rec { + sage = prev.sage.override { + requireSageTests = false; + }; + }; + pkgs = import self.inputs.nixpkgs { + inherit system; + overlays = [overlay]; + }; + requiredRuntimePackages = with pkgs; [ + sage + python3 + gnused + ]; + args = {inherit self system lib config name kernelName requiredRuntimePackages;}; + kernelModule = import ./../../kernel.nix args; + kernelFunc = { + self, + system, + # custom arguments + pkgs ? pkgs, + name ? "sage", + displayName ? "Sage", + requiredRuntimePackages ? requiredRuntimePackages, + runtimePackages ? [], + }: let + allRuntimePackages = requiredRuntimePackages ++ runtimePackages; + + env = pkgs.sage; + wrappedEnv = + pkgs.runCommand "wrapper-${env.name}" + {nativeBuildInputs = [pkgs.makeWrapper];} + '' + mkdir -p $out/bin + for i in ${env}/bin/*; do + filename=$(basename $i) + ln -s ${env}/bin/$filename $out/bin/$filename + wrapProgram $out/bin/$filename \ + --set PATH "${pkgs.lib.makeSearchPath "bin" allRuntimePackages}" + done + ''; + in { + inherit name displayName; + language = "python"; + argv = [ + "${wrappedEnv}/bin/sage" + "--python" + "-m" + "sage.repl.ipython_kernel" + "-f" + "{connection_file}" + ]; + codemirrorMode = "python"; + logo64 = ./logo64.png; + logo32 = ./logo32.png; + }; + in { + options = + { + } + // kernelModule.options; + config = lib.mkIf config.enable { + build = mkKernel (kernelFunc config.kernelArgs); + kernelArgs = + kernelModule.kernelArgs + // { + inherit (config); + pkgs = import config.nixpkgs.path { + inherit system; + overlays = [ + overlay + ]; + }; + }; + }; + }; +in { + options.kernel.${kernelName} = lib.mkOption { + type = types.attrsOf (types.submodule kernelOptions); + default = {}; + example = lib.literalExpression '' + { + kernel.${kernelName}."example".enable = true; + } + ''; + description = lib.mdDoc '' + A ${kernelName} kernel for IPython. + ''; + }; +} diff --git a/modules/kernels/sage/logo32.png b/modules/kernels/sage/logo32.png new file mode 100644 index 0000000000000000000000000000000000000000..ea72abdb875c5ede9673f2512ad197f8d0734287 GIT binary patch literal 2308 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 literal 0 HcmV?d00001