treewide: Format all Nix files
Format all Nix files using the officially approved formatter,
making the CI check introduced in the previous commit succeed:
nix-build ci -A fmt.check
This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153)
of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166).
This commit will lead to merge conflicts for a number of PRs,
up to an estimated ~1100 (~33%) among the PRs with activity in the past 2
months, but that should be lower than what it would be without the previous
[partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537).
Merge conflicts caused by this commit can now automatically be resolved while rebasing using the
[auto-rebase script](8616af08d9/maintainers/scripts/auto-rebase).
If you run into any problems regarding any of this, please reach out to the
[formatting team](https://nixos.org/community/teams/formatting/) by
pinging @NixOS/nix-formatting.
This commit is contained in:
@@ -1,148 +1,151 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.services.athens;
|
||||
|
||||
athensConfig = lib.flip lib.recursiveUpdate cfg.extraConfig (
|
||||
{
|
||||
GoBinary = "${cfg.goBinary}/bin/go";
|
||||
GoEnv = cfg.goEnv;
|
||||
GoBinaryEnvVars = lib.mapAttrsToList (k: v: "${k}=${v}") cfg.goBinaryEnvVars;
|
||||
GoGetWorkers = cfg.goGetWorkers;
|
||||
GoGetDir = cfg.goGetDir;
|
||||
ProtocolWorkers = cfg.protocolWorkers;
|
||||
LogLevel = cfg.logLevel;
|
||||
CloudRuntime = cfg.cloudRuntime;
|
||||
EnablePprof = cfg.enablePprof;
|
||||
PprofPort = ":${toString cfg.pprofPort}";
|
||||
FilterFile = cfg.filterFile;
|
||||
RobotsFile = cfg.robotsFile;
|
||||
Timeout = cfg.timeout;
|
||||
StorageType = cfg.storageType;
|
||||
TLSCertFile = cfg.tlsCertFile;
|
||||
TLSKeyFile = cfg.tlsKeyFile;
|
||||
Port = ":${toString cfg.port}";
|
||||
UnixSocket = cfg.unixSocket;
|
||||
GlobalEndpoint = cfg.globalEndpoint;
|
||||
BasicAuthUser = cfg.basicAuthUser;
|
||||
BasicAuthPass = cfg.basicAuthPass;
|
||||
ForceSSL = cfg.forceSSL;
|
||||
ValidatorHook = cfg.validatorHook;
|
||||
PathPrefix = cfg.pathPrefix;
|
||||
NETRCPath = cfg.netrcPath;
|
||||
GithubToken = cfg.githubToken;
|
||||
HGRCPath = cfg.hgrcPath;
|
||||
TraceExporter = cfg.traceExporter;
|
||||
StatsExporter = cfg.statsExporter;
|
||||
SumDBs = cfg.sumDBs;
|
||||
NoSumPatterns = cfg.noSumPatterns;
|
||||
DownloadMode = cfg.downloadMode;
|
||||
NetworkMode = cfg.networkMode;
|
||||
DownloadURL = cfg.downloadURL;
|
||||
SingleFlightType = cfg.singleFlightType;
|
||||
IndexType = cfg.indexType;
|
||||
ShutdownTimeout = cfg.shutdownTimeout;
|
||||
SingleFlight = {
|
||||
Etcd = {
|
||||
Endpoints = builtins.concatStringsSep "," cfg.singleFlight.etcd.endpoints;
|
||||
};
|
||||
Redis = {
|
||||
Endpoint = cfg.singleFlight.redis.endpoint;
|
||||
Password = cfg.singleFlight.redis.password;
|
||||
LockConfig = {
|
||||
TTL = cfg.singleFlight.redis.lockConfig.ttl;
|
||||
Timeout = cfg.singleFlight.redis.lockConfig.timeout;
|
||||
MaxRetries = cfg.singleFlight.redis.lockConfig.maxRetries;
|
||||
};
|
||||
};
|
||||
RedisSentinel = {
|
||||
Endpoints = cfg.singleFlight.redisSentinel.endpoints;
|
||||
MasterName = cfg.singleFlight.redisSentinel.masterName;
|
||||
SentinelPassword = cfg.singleFlight.redisSentinel.sentinelPassword;
|
||||
LockConfig = {
|
||||
TTL = cfg.singleFlight.redisSentinel.lockConfig.ttl;
|
||||
Timeout = cfg.singleFlight.redisSentinel.lockConfig.timeout;
|
||||
MaxRetries = cfg.singleFlight.redisSentinel.lockConfig.maxRetries;
|
||||
};
|
||||
athensConfig = lib.flip lib.recursiveUpdate cfg.extraConfig ({
|
||||
GoBinary = "${cfg.goBinary}/bin/go";
|
||||
GoEnv = cfg.goEnv;
|
||||
GoBinaryEnvVars = lib.mapAttrsToList (k: v: "${k}=${v}") cfg.goBinaryEnvVars;
|
||||
GoGetWorkers = cfg.goGetWorkers;
|
||||
GoGetDir = cfg.goGetDir;
|
||||
ProtocolWorkers = cfg.protocolWorkers;
|
||||
LogLevel = cfg.logLevel;
|
||||
CloudRuntime = cfg.cloudRuntime;
|
||||
EnablePprof = cfg.enablePprof;
|
||||
PprofPort = ":${toString cfg.pprofPort}";
|
||||
FilterFile = cfg.filterFile;
|
||||
RobotsFile = cfg.robotsFile;
|
||||
Timeout = cfg.timeout;
|
||||
StorageType = cfg.storageType;
|
||||
TLSCertFile = cfg.tlsCertFile;
|
||||
TLSKeyFile = cfg.tlsKeyFile;
|
||||
Port = ":${toString cfg.port}";
|
||||
UnixSocket = cfg.unixSocket;
|
||||
GlobalEndpoint = cfg.globalEndpoint;
|
||||
BasicAuthUser = cfg.basicAuthUser;
|
||||
BasicAuthPass = cfg.basicAuthPass;
|
||||
ForceSSL = cfg.forceSSL;
|
||||
ValidatorHook = cfg.validatorHook;
|
||||
PathPrefix = cfg.pathPrefix;
|
||||
NETRCPath = cfg.netrcPath;
|
||||
GithubToken = cfg.githubToken;
|
||||
HGRCPath = cfg.hgrcPath;
|
||||
TraceExporter = cfg.traceExporter;
|
||||
StatsExporter = cfg.statsExporter;
|
||||
SumDBs = cfg.sumDBs;
|
||||
NoSumPatterns = cfg.noSumPatterns;
|
||||
DownloadMode = cfg.downloadMode;
|
||||
NetworkMode = cfg.networkMode;
|
||||
DownloadURL = cfg.downloadURL;
|
||||
SingleFlightType = cfg.singleFlightType;
|
||||
IndexType = cfg.indexType;
|
||||
ShutdownTimeout = cfg.shutdownTimeout;
|
||||
SingleFlight = {
|
||||
Etcd = {
|
||||
Endpoints = builtins.concatStringsSep "," cfg.singleFlight.etcd.endpoints;
|
||||
};
|
||||
Redis = {
|
||||
Endpoint = cfg.singleFlight.redis.endpoint;
|
||||
Password = cfg.singleFlight.redis.password;
|
||||
LockConfig = {
|
||||
TTL = cfg.singleFlight.redis.lockConfig.ttl;
|
||||
Timeout = cfg.singleFlight.redis.lockConfig.timeout;
|
||||
MaxRetries = cfg.singleFlight.redis.lockConfig.maxRetries;
|
||||
};
|
||||
};
|
||||
Storage = {
|
||||
CDN = {
|
||||
Endpoint = cfg.storage.cdn.endpoint;
|
||||
};
|
||||
Disk = {
|
||||
RootPath = cfg.storage.disk.rootPath;
|
||||
};
|
||||
GCP = {
|
||||
ProjectID = cfg.storage.gcp.projectID;
|
||||
Bucket = cfg.storage.gcp.bucket;
|
||||
JSONKey = cfg.storage.gcp.jsonKey;
|
||||
};
|
||||
Minio = {
|
||||
Endpoint = cfg.storage.minio.endpoint;
|
||||
Key = cfg.storage.minio.key;
|
||||
Secret = cfg.storage.minio.secret;
|
||||
EnableSSL = cfg.storage.minio.enableSSL;
|
||||
Bucket = cfg.storage.minio.bucket;
|
||||
region = cfg.storage.minio.region;
|
||||
};
|
||||
Mongo = {
|
||||
URL = cfg.storage.mongo.url;
|
||||
DefaultDBName = cfg.storage.mongo.defaultDBName;
|
||||
CertPath = cfg.storage.mongo.certPath;
|
||||
Insecure = cfg.storage.mongo.insecure;
|
||||
};
|
||||
S3 = {
|
||||
Region = cfg.storage.s3.region;
|
||||
Key = cfg.storage.s3.key;
|
||||
Secret = cfg.storage.s3.secret;
|
||||
Token = cfg.storage.s3.token;
|
||||
Bucket = cfg.storage.s3.bucket;
|
||||
ForcePathStyle = cfg.storage.s3.forcePathStyle;
|
||||
UseDefaultConfiguration = cfg.storage.s3.useDefaultConfiguration;
|
||||
CredentialsEndpoint = cfg.storage.s3.credentialsEndpoint;
|
||||
AwsContainerCredentialsRelativeURI = cfg.storage.s3.awsContainerCredentialsRelativeURI;
|
||||
Endpoint = cfg.storage.s3.endpoint;
|
||||
};
|
||||
AzureBlob = {
|
||||
AccountName = cfg.storage.azureblob.accountName;
|
||||
AccountKey = cfg.storage.azureblob.accountKey;
|
||||
ContainerName = cfg.storage.azureblob.containerName;
|
||||
};
|
||||
External = {
|
||||
URL = cfg.storage.external.url;
|
||||
RedisSentinel = {
|
||||
Endpoints = cfg.singleFlight.redisSentinel.endpoints;
|
||||
MasterName = cfg.singleFlight.redisSentinel.masterName;
|
||||
SentinelPassword = cfg.singleFlight.redisSentinel.sentinelPassword;
|
||||
LockConfig = {
|
||||
TTL = cfg.singleFlight.redisSentinel.lockConfig.ttl;
|
||||
Timeout = cfg.singleFlight.redisSentinel.lockConfig.timeout;
|
||||
MaxRetries = cfg.singleFlight.redisSentinel.lockConfig.maxRetries;
|
||||
};
|
||||
};
|
||||
Index = {
|
||||
MySQL = {
|
||||
Protocol = cfg.index.mysql.protocol;
|
||||
Host = cfg.index.mysql.host;
|
||||
Port = cfg.index.mysql.port;
|
||||
User = cfg.index.mysql.user;
|
||||
Password = cfg.index.mysql.password;
|
||||
Database = cfg.index.mysql.database;
|
||||
Params = {
|
||||
parseTime = cfg.index.mysql.params.parseTime;
|
||||
timeout = cfg.index.mysql.params.timeout;
|
||||
};
|
||||
};
|
||||
Postgres = {
|
||||
Host = cfg.index.postgres.host;
|
||||
Port = cfg.index.postgres.port;
|
||||
User = cfg.index.postgres.user;
|
||||
Password = cfg.index.postgres.password;
|
||||
Database = cfg.index.postgres.database;
|
||||
Params = {
|
||||
connect_timeout = cfg.index.postgres.params.connect_timeout;
|
||||
sslmode = cfg.index.postgres.params.sslmode;
|
||||
};
|
||||
};
|
||||
Storage = {
|
||||
CDN = {
|
||||
Endpoint = cfg.storage.cdn.endpoint;
|
||||
};
|
||||
Disk = {
|
||||
RootPath = cfg.storage.disk.rootPath;
|
||||
};
|
||||
GCP = {
|
||||
ProjectID = cfg.storage.gcp.projectID;
|
||||
Bucket = cfg.storage.gcp.bucket;
|
||||
JSONKey = cfg.storage.gcp.jsonKey;
|
||||
};
|
||||
Minio = {
|
||||
Endpoint = cfg.storage.minio.endpoint;
|
||||
Key = cfg.storage.minio.key;
|
||||
Secret = cfg.storage.minio.secret;
|
||||
EnableSSL = cfg.storage.minio.enableSSL;
|
||||
Bucket = cfg.storage.minio.bucket;
|
||||
region = cfg.storage.minio.region;
|
||||
};
|
||||
Mongo = {
|
||||
URL = cfg.storage.mongo.url;
|
||||
DefaultDBName = cfg.storage.mongo.defaultDBName;
|
||||
CertPath = cfg.storage.mongo.certPath;
|
||||
Insecure = cfg.storage.mongo.insecure;
|
||||
};
|
||||
S3 = {
|
||||
Region = cfg.storage.s3.region;
|
||||
Key = cfg.storage.s3.key;
|
||||
Secret = cfg.storage.s3.secret;
|
||||
Token = cfg.storage.s3.token;
|
||||
Bucket = cfg.storage.s3.bucket;
|
||||
ForcePathStyle = cfg.storage.s3.forcePathStyle;
|
||||
UseDefaultConfiguration = cfg.storage.s3.useDefaultConfiguration;
|
||||
CredentialsEndpoint = cfg.storage.s3.credentialsEndpoint;
|
||||
AwsContainerCredentialsRelativeURI = cfg.storage.s3.awsContainerCredentialsRelativeURI;
|
||||
Endpoint = cfg.storage.s3.endpoint;
|
||||
};
|
||||
AzureBlob = {
|
||||
AccountName = cfg.storage.azureblob.accountName;
|
||||
AccountKey = cfg.storage.azureblob.accountKey;
|
||||
ContainerName = cfg.storage.azureblob.containerName;
|
||||
};
|
||||
External = {
|
||||
URL = cfg.storage.external.url;
|
||||
};
|
||||
};
|
||||
Index = {
|
||||
MySQL = {
|
||||
Protocol = cfg.index.mysql.protocol;
|
||||
Host = cfg.index.mysql.host;
|
||||
Port = cfg.index.mysql.port;
|
||||
User = cfg.index.mysql.user;
|
||||
Password = cfg.index.mysql.password;
|
||||
Database = cfg.index.mysql.database;
|
||||
Params = {
|
||||
parseTime = cfg.index.mysql.params.parseTime;
|
||||
timeout = cfg.index.mysql.params.timeout;
|
||||
};
|
||||
};
|
||||
}
|
||||
);
|
||||
Postgres = {
|
||||
Host = cfg.index.postgres.host;
|
||||
Port = cfg.index.postgres.port;
|
||||
User = cfg.index.postgres.user;
|
||||
Password = cfg.index.postgres.password;
|
||||
Database = cfg.index.postgres.database;
|
||||
Params = {
|
||||
connect_timeout = cfg.index.postgres.params.connect_timeout;
|
||||
sslmode = cfg.index.postgres.params.sslmode;
|
||||
};
|
||||
};
|
||||
};
|
||||
});
|
||||
|
||||
configFile = lib.pipe athensConfig [
|
||||
(lib.filterAttrsRecursive (_k: v: v != null))
|
||||
((pkgs.formats.toml {}).generate "config.toml")
|
||||
((pkgs.formats.toml { }).generate "config.toml")
|
||||
];
|
||||
in
|
||||
{
|
||||
@@ -177,7 +180,10 @@ in
|
||||
};
|
||||
|
||||
goEnv = lib.mkOption {
|
||||
type = lib.types.enum [ "development" "production" ];
|
||||
type = lib.types.enum [
|
||||
"development"
|
||||
"production"
|
||||
];
|
||||
description = "Specifies the type of environment to run. One of 'development' or 'production'.";
|
||||
default = "development";
|
||||
example = "production";
|
||||
@@ -220,7 +226,17 @@ in
|
||||
};
|
||||
|
||||
logLevel = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.enum [ "panic" "fatal" "error" "warning" "info" "debug" "trace" ]);
|
||||
type = lib.types.nullOr (
|
||||
lib.types.enum [
|
||||
"panic"
|
||||
"fatal"
|
||||
"error"
|
||||
"warning"
|
||||
"info"
|
||||
"debug"
|
||||
"trace"
|
||||
]
|
||||
);
|
||||
description = ''
|
||||
Log level for Athens.
|
||||
Supports all logrus log levels (https://github.com/Sirupsen/logrus#level-logging)".
|
||||
@@ -230,7 +246,10 @@ in
|
||||
};
|
||||
|
||||
cloudRuntime = lib.mkOption {
|
||||
type = lib.types.enum [ "GCP" "none" ];
|
||||
type = lib.types.enum [
|
||||
"GCP"
|
||||
"none"
|
||||
];
|
||||
description = ''
|
||||
Specifies the Cloud Provider on which the Proxy/registry is running.
|
||||
'';
|
||||
@@ -279,7 +298,16 @@ in
|
||||
};
|
||||
|
||||
storageType = lib.mkOption {
|
||||
type = lib.types.enum [ "memory" "disk" "mongo" "gcp" "minio" "s3" "azureblob" "external" ];
|
||||
type = lib.types.enum [
|
||||
"memory"
|
||||
"disk"
|
||||
"mongo"
|
||||
"gcp"
|
||||
"minio"
|
||||
"s3"
|
||||
"azureblob"
|
||||
"external"
|
||||
];
|
||||
description = "Specifies the type of storage backend to use.";
|
||||
default = "disk";
|
||||
};
|
||||
@@ -401,7 +429,12 @@ in
|
||||
};
|
||||
|
||||
traceExporter = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.enum [ "jaeger" "datadog" ]);
|
||||
type = lib.types.nullOr (
|
||||
lib.types.enum [
|
||||
"jaeger"
|
||||
"datadog"
|
||||
]
|
||||
);
|
||||
description = ''
|
||||
Trace exporter to use.
|
||||
'';
|
||||
@@ -442,7 +475,16 @@ in
|
||||
};
|
||||
|
||||
downloadMode = lib.mkOption {
|
||||
type = lib.types.oneOf [ (lib.types.enum [ "sync" "async" "redirect" "async_redirect" "none" ]) (lib.types.strMatching "^file:.*$|^custom:.*$") ];
|
||||
type = lib.types.oneOf [
|
||||
(lib.types.enum [
|
||||
"sync"
|
||||
"async"
|
||||
"redirect"
|
||||
"async_redirect"
|
||||
"none"
|
||||
])
|
||||
(lib.types.strMatching "^file:.*$|^custom:.*$")
|
||||
];
|
||||
description = ''
|
||||
Defines how Athens behaves when a module@version
|
||||
is not found in storage. There are 7 options:
|
||||
@@ -466,7 +508,11 @@ in
|
||||
};
|
||||
|
||||
networkMode = lib.mkOption {
|
||||
type = lib.types.enum [ "strict" "offline" "fallback" ];
|
||||
type = lib.types.enum [
|
||||
"strict"
|
||||
"offline"
|
||||
"fallback"
|
||||
];
|
||||
description = ''
|
||||
Configures how Athens will return the results
|
||||
of the /list endpoint as it can be assembled from both its own
|
||||
@@ -492,7 +538,14 @@ in
|
||||
};
|
||||
|
||||
singleFlightType = lib.mkOption {
|
||||
type = lib.types.enum [ "memory" "etcd" "redis" "redis-sentinel" "gcp" "azureblob" ];
|
||||
type = lib.types.enum [
|
||||
"memory"
|
||||
"etcd"
|
||||
"redis"
|
||||
"redis-sentinel"
|
||||
"gcp"
|
||||
"azureblob"
|
||||
];
|
||||
description = ''
|
||||
Determines what mechanism Athens uses to manage concurrency flowing into the Athens backend.
|
||||
'';
|
||||
@@ -500,7 +553,12 @@ in
|
||||
};
|
||||
|
||||
indexType = lib.mkOption {
|
||||
type = lib.types.enum [ "none" "memory" "mysql" "postgres" ];
|
||||
type = lib.types.enum [
|
||||
"none"
|
||||
"memory"
|
||||
"mysql"
|
||||
"postgres"
|
||||
];
|
||||
description = ''
|
||||
Type of index backend Athens will use.
|
||||
'';
|
||||
@@ -913,8 +971,12 @@ in
|
||||
ProtectHome = "read-only";
|
||||
ProtectSystem = "full";
|
||||
|
||||
ReadWritePaths = lib.mkIf (cfg.storage.disk.rootPath != null && (! lib.hasPrefix "/var/lib/" cfg.storage.disk.rootPath)) [ cfg.storage.disk.rootPath ];
|
||||
StateDirectory = lib.mkIf (lib.hasPrefix "/var/lib/" cfg.storage.disk.rootPath) [ (lib.removePrefix "/var/lib/" cfg.storage.disk.rootPath) ];
|
||||
ReadWritePaths = lib.mkIf (
|
||||
cfg.storage.disk.rootPath != null && (!lib.hasPrefix "/var/lib/" cfg.storage.disk.rootPath)
|
||||
) [ cfg.storage.disk.rootPath ];
|
||||
StateDirectory = lib.mkIf (lib.hasPrefix "/var/lib/" cfg.storage.disk.rootPath) [
|
||||
(lib.removePrefix "/var/lib/" cfg.storage.disk.rootPath)
|
||||
];
|
||||
|
||||
CapabilityBoundingSet = [ "CAP_NET_BIND_SERVICE" ];
|
||||
AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
|
||||
@@ -923,7 +985,8 @@ in
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = lib.optionals (cfg.unixSocket == null) [ cfg.port ]
|
||||
allowedTCPPorts =
|
||||
lib.optionals (cfg.unixSocket == null) [ cfg.port ]
|
||||
++ lib.optionals cfg.enablePprof [ cfg.pprofPort ];
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
|
||||
cfg = config.services.jupyterhub;
|
||||
|
||||
kernels = (pkgs.jupyter-kernel.create {
|
||||
definitions = if cfg.kernels != null
|
||||
then cfg.kernels
|
||||
else pkgs.jupyter-kernel.default;
|
||||
});
|
||||
kernels = (
|
||||
pkgs.jupyter-kernel.create {
|
||||
definitions = if cfg.kernels != null then cfg.kernels else pkgs.jupyter-kernel.default;
|
||||
}
|
||||
);
|
||||
|
||||
jupyterhubConfig = pkgs.writeText "jupyterhub_config.py" ''
|
||||
c.JupyterHub.bind_url = "http://${cfg.host}:${toString cfg.port}"
|
||||
@@ -23,7 +28,8 @@ let
|
||||
|
||||
${cfg.extraConfig}
|
||||
'';
|
||||
in {
|
||||
in
|
||||
{
|
||||
meta.maintainers = with lib.maintainers; [ costrouc ];
|
||||
|
||||
options.services.jupyterhub = {
|
||||
@@ -71,10 +77,12 @@ in {
|
||||
|
||||
jupyterhubEnv = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.python3.withPackages (p: with p; [
|
||||
jupyterhub
|
||||
jupyterhub-systemdspawner
|
||||
]);
|
||||
default = pkgs.python3.withPackages (
|
||||
p: with p; [
|
||||
jupyterhub
|
||||
jupyterhub-systemdspawner
|
||||
]
|
||||
);
|
||||
defaultText = lib.literalExpression ''
|
||||
pkgs.python3.withPackages (p: with p; [
|
||||
jupyterhub
|
||||
@@ -93,10 +101,12 @@ in {
|
||||
|
||||
jupyterlabEnv = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.python3.withPackages (p: with p; [
|
||||
jupyterhub
|
||||
jupyterlab
|
||||
]);
|
||||
default = pkgs.python3.withPackages (
|
||||
p: with p; [
|
||||
jupyterhub
|
||||
jupyterlab
|
||||
]
|
||||
);
|
||||
defaultText = lib.literalExpression ''
|
||||
pkgs.python3.withPackages (p: with p; [
|
||||
jupyterhub
|
||||
@@ -115,9 +125,15 @@ in {
|
||||
};
|
||||
|
||||
kernels = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.attrsOf(lib.types.submodule (import ../jupyter/kernel-options.nix {
|
||||
inherit lib pkgs;
|
||||
})));
|
||||
type = lib.types.nullOr (
|
||||
lib.types.attrsOf (
|
||||
lib.types.submodule (
|
||||
import ../jupyter/kernel-options.nix {
|
||||
inherit lib pkgs;
|
||||
}
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
default = null;
|
||||
example = lib.literalExpression ''
|
||||
@@ -179,7 +195,7 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf cfg.enable {
|
||||
(lib.mkIf cfg.enable {
|
||||
systemd.services.jupyterhub = {
|
||||
description = "Jupyterhub development server";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user