# Options that can be used for creating a jupyter kernel.
{ lib, pkgs }:

with lib;

{
  freeformType = (pkgs.formats.json { }).type;

  options = {

    displayName = mkOption {
      type = types.str;
      default = "";
      example = literalExpression ''
        "Python 3"
        "Python 3 for Data Science"
      '';
      description = lib.mdDoc ''
        Name that will be shown to the user.
      '';
    };

    argv = mkOption {
      type = types.listOf types.str;
      example = [
        "{customEnv.interpreter}"
        "-m"
        "ipykernel_launcher"
        "-f"
        "{connection_file}"
      ];
      description = lib.mdDoc ''
        Command and arguments to start the kernel.
      '';
    };

    language = mkOption {
      type = types.str;
      example = "python";
      description = lib.mdDoc ''
        Language of the environment. Typically the name of the binary.
      '';
    };

    env = mkOption {
      type = types.attrsOf types.str;
      default = { };
      example = { OMP_NUM_THREADS = "1"; };
      description = lib.mdDoc ''
        Environment variables to set for the kernel.
      '';
    };

    logo32 = mkOption {
      type = types.nullOr types.path;
      default = null;
      example = literalExpression ''"''${env.sitePackages}/ipykernel/resources/logo-32x32.png"'';
      description = lib.mdDoc ''
        Path to 32x32 logo png.
      '';
    };
    logo64 = mkOption {
      type = types.nullOr types.path;
      default = null;
      example = literalExpression ''"''${env.sitePackages}/ipykernel/resources/logo-64x64.png"'';
      description = lib.mdDoc ''
        Path to 64x64 logo png.
      '';
    };

    extraPaths = mkOption {
      type = types.attrsOf types.path;
      default = { };
      example = literalExpression ''"{ examples = ''${env.sitePack}/IRkernel/kernelspec/kernel.js"; }'';
      description = lib.mdDoc ''
        Extra paths to link in kernel directory
      '';
    };
  };
}
