-
-
Notifications
You must be signed in to change notification settings - Fork 14.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
nixos/jupyter: migrate service to jupyter 7 setup #367106
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,29 +2,38 @@ | |
config, | ||
lib, | ||
pkgs, | ||
options, | ||
... | ||
}: | ||
let | ||
|
||
cfg = config.services.jupyter; | ||
|
||
package = cfg.package; | ||
package = pkgs.python3.withPackages ( | ||
ps: | ||
[ | ||
cfg.package | ||
] | ||
++ cfg.extraPackages | ||
); | ||
|
||
kernels = ( | ||
pkgs.jupyter-kernel.create { | ||
definitions = if cfg.kernels != null then cfg.kernels else pkgs.jupyter-kernel.default; | ||
} | ||
); | ||
|
||
notebookConfig = pkgs.writeText "jupyter_config.py" '' | ||
notebookConfig = pkgs.writeText "jupyter_server_config.py" '' | ||
${cfg.notebookConfig} | ||
JohnRTitor marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
c.NotebookApp.password = ${cfg.password} | ||
c.ServerApp.password = "${cfg.password}" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is a breaking change and should be mentioned in relnotes. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep, already done :) https://github.com/NixOS/nixpkgs/pull/367106/files There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That only mentions about Jupyter 7 changes, not about the quoting behaviour change. |
||
''; | ||
|
||
in | ||
{ | ||
meta.maintainers = with lib.maintainers; [ aborsu ]; | ||
meta.maintainers = with lib.maintainers; [ | ||
aborsu | ||
b-m-f | ||
]; | ||
|
||
options.services.jupyter = { | ||
enable = lib.mkEnableOption "Jupyter development server"; | ||
|
@@ -37,18 +46,42 @@ in | |
''; | ||
}; | ||
|
||
# NOTE: We don't use top-level jupyter because we don't | ||
# want to pass in JUPYTER_PATH but use .environment instead, | ||
# saving a rebuild. | ||
package = lib.mkPackageOption pkgs [ "python3" "pkgs" "notebook" ] { }; | ||
b-m-f marked this conversation as resolved.
Show resolved
Hide resolved
|
||
package = lib.mkPackageOption pkgs [ | ||
"python3" | ||
"pkgs" | ||
"jupyter" | ||
] { }; | ||
|
||
extraPackages = lib.mkOption { | ||
type = lib.types.listOf lib.types.package; | ||
default = [ ]; | ||
example = lib.literalExpression '' | ||
[ | ||
pkgs.python3.pkgs.nbconvert | ||
pkgs.python3.pkgs.playwright | ||
] | ||
''; | ||
description = ''Extra packages to be available in the jupyter runtime enviroment''; | ||
}; | ||
extraEnvironmentVariables = lib.mkOption { | ||
description = ''Extra enviroment variables to be set in the runtime context of jupyter notebook''; | ||
default = { }; | ||
example = lib.literalExpression '' | ||
{ | ||
PLAYWRIGHT_BROWSERS_PATH = "''${pkgs.playwright-driver.browsers}"; | ||
PLAYWRIGHT_SKIP_VALIDATE_HOST_REQUIREMENTS = "true"; | ||
} | ||
''; | ||
inherit (options.environment.variables) type apply; | ||
}; | ||
|
||
command = lib.mkOption { | ||
type = lib.types.str; | ||
default = "jupyter-notebook"; | ||
example = "jupyter-lab"; | ||
default = "jupyter notebook"; | ||
example = "jupyter lab"; | ||
description = '' | ||
Which command the service runs. Note that not all jupyter packages | ||
have all commands, e.g. jupyter-lab isn't present in the default package. | ||
have all commands, e.g. `jupyter lab` isn't present in the `notebook` package. | ||
''; | ||
}; | ||
|
||
|
@@ -93,23 +126,17 @@ in | |
type = lib.types.str; | ||
description = '' | ||
Password to use with notebook. | ||
Can be generated using: | ||
In [1]: from notebook.auth import passwd | ||
In [2]: passwd('test') | ||
Out[2]: 'sha1:1b961dc713fb:88483270a63e57d18d43cf337e629539de1436ba' | ||
NOTE: you need to keep the single quote inside the nix string. | ||
Or you can use a python oneliner: | ||
"open('/path/secret_file', 'r', encoding='utf8').read().strip()" | ||
It will be interpreted at the end of the notebookConfig. | ||
Can be generated following: https://jupyter-server.readthedocs.io/en/stable/operators/public-server.html#preparing-a-hashed-password | ||
''; | ||
example = "'sha1:1b961dc713fb:88483270a63e57d18d43cf337e629539de1436ba'"; | ||
example = "argon2:$argon2id$v=19$m=10240,t=10,p=8$48hF+vTUuy1LB83/GzNhUg$J1nx4jPWD7PwOJHs5OtDW8pjYK2s0c1R3rYGbSIKB54"; | ||
}; | ||
|
||
notebookConfig = lib.mkOption { | ||
type = lib.types.lines; | ||
default = ""; | ||
description = '' | ||
Raw jupyter config. | ||
Please use the password configuration option to set a password instead of passing it in here. | ||
''; | ||
}; | ||
|
||
|
@@ -175,7 +202,7 @@ in | |
|
||
environment = { | ||
JUPYTER_PATH = toString kernels; | ||
}; | ||
} // cfg.extraEnvironmentVariables; | ||
|
||
serviceConfig = { | ||
Restart = "always"; | ||
|
@@ -185,7 +212,8 @@ in | |
--ip=${cfg.ip} \ | ||
--port=${toString cfg.port} --port-retries 0 \ | ||
--notebook-dir=${cfg.notebookDir} \ | ||
--NotebookApp.config_file=${notebookConfig} | ||
--JupyterApp.config_file=${notebookConfig} | ||
|
||
''; | ||
User = cfg.user; | ||
Group = cfg.group; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is also a breaking change that should be mentioned in the changelog. This breaks any setup where
package = <some python environment>
as opposed topackage = <python package>
and usingextraPackages
.