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 23600f85..d131d740 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -85,6 +85,7 @@ in { ./../modules/kernels/typescript ./../modules/kernels/zsh ./../modules/kernels/dotnet + ./../modules/kernels/sage ]; # 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 00000000..ea72abdb Binary files /dev/null and b/modules/kernels/sage/logo32.png differ diff --git a/modules/kernels/sage/logo64.png b/modules/kernels/sage/logo64.png new file mode 100644 index 00000000..95319e79 Binary files /dev/null and b/modules/kernels/sage/logo64.png differ