diff --git a/nixos/modules/services/misc/etebase-server.nix b/nixos/modules/services/misc/etebase-server.nix
index d9d12698d79..35da5051866 100644
--- a/nixos/modules/services/misc/etebase-server.nix
+++ b/nixos/modules/services/misc/etebase-server.nix
@@ -8,31 +8,28 @@ let
pythonEnv = pkgs.python3.withPackages (ps: with ps;
[ etebase-server daphne ]);
- dbConfig = {
- sqlite3 = ''
- engine = django.db.backends.sqlite3
- name = ${cfg.dataDir}/db.sqlite3
- '';
- };
+ iniFmt = pkgs.formats.ini {};
- defaultConfigIni = toString (pkgs.writeText "etebase-server.ini" ''
- [global]
- debug = false
- secret_file = ${if cfg.secretFile != null then cfg.secretFile else ""}
- media_root = ${cfg.dataDir}/media
-
- [allowed_hosts]
- allowed_host1 = ${cfg.host}
-
- [database]
- ${dbConfig."${cfg.database.type}"}
- '');
-
- configIni = if cfg.customIni != null then cfg.customIni else defaultConfigIni;
+ configIni = iniFmt.generate "etebase-server.ini" cfg.settings;
defaultUser = "etebase-server";
in
{
+ imports = [
+ (mkRemovedOptionModule
+ [ "services" "etebase-server" "customIni" ]
+ "Set the option `services.etebase-server.settings' instead.")
+ (mkRemovedOptionModule
+ [ "services" "etebase-server" "database" ]
+ "Set the option `services.etebase-server.settings.database' instead.")
+ (mkRenamedOptionModule
+ [ "services" "etebase-server" "secretFile" ]
+ [ "services" "etebase-server" "settings" "secret_file" ])
+ (mkRenamedOptionModule
+ [ "services" "etebase-server" "host" ]
+ [ "services" "etebase-server" "settings" "allowed_hosts" "allowed_host1" ])
+ ];
+
options = {
services.etebase-server = {
enable = mkOption {
@@ -42,21 +39,13 @@ in
description = ''
Whether to enable the Etebase server.
- Once enabled you need to create an admin user using the
- shell command etebase-server createsuperuser.
+ Once enabled you need to create an admin user by invoking the
+ shell command etebase-server createsuperuser with
+ the user specified by the user option or a superuser.
Then you can login and create accounts on your-etebase-server.com/admin
'';
};
- secretFile = mkOption {
- default = null;
- type = with types; nullOr str;
- description = ''
- The path to a file containing the secret
- used as django's SECRET_KEY.
- '';
- };
-
dataDir = mkOption {
type = types.str;
default = "/var/lib/etebase-server";
@@ -77,15 +66,6 @@ in
'';
};
- host = mkOption {
- type = types.str;
- default = "0.0.0.0";
- example = "localhost";
- description = ''
- Host to listen on.
- '';
- };
-
unixSocket = mkOption {
type = with types; nullOr str;
default = null;
@@ -93,42 +73,75 @@ in
example = "/run/etebase-server/etebase-server.sock";
};
- database = {
- type = mkOption {
- type = types.enum [ "sqlite3" ];
- default = "sqlite3";
- description = ''
- Database engine to use.
- Currently only sqlite3 is supported.
- Other options can be configured using extraConfig.
- '';
+ settings = mkOption {
+ type = lib.types.submodule {
+ freeformType = iniFmt.type;
+
+ options = {
+ global = {
+ debug = mkOption {
+ type = types.bool;
+ default = false;
+ description = ''
+ Whether to set django's DEBUG flag.
+ '';
+ };
+ secret_file = mkOption {
+ type = with types; nullOr str;
+ default = null;
+ description = ''
+ The path to a file containing the secret
+ used as django's SECRET_KEY.
+ '';
+ };
+ media_root = mkOption {
+ type = types.str;
+ default = "${cfg.dataDir}/media";
+ defaultText = "\${config.services.etebase-server.dataDir}/media";
+ description = "The media directory.";
+ };
+ };
+ allowed_hosts = {
+ allowed_host1 = mkOption {
+ type = types.str;
+ default = "0.0.0.0";
+ example = "localhost";
+ description = ''
+ The main host that is allowed access.
+ '';
+ };
+ };
+ database = {
+ engine = mkOption {
+ type = types.enum [ "django.db.backends.sqlite3" "django.db.backends.postgresql" ];
+ default = "django.db.backends.sqlite3";
+ description = "The database engine to use.";
+ };
+ name = mkOption {
+ type = types.str;
+ default = "${cfg.dataDir}/db.sqlite3";
+ defaultText = "\${config.services.etebase-server.dataDir}/db.sqlite3";
+ description = "The database name.";
+ };
+ };
+ };
};
- };
-
- customIni = mkOption {
- type = with types; nullOr str;
- default = null;
+ default = {};
description = ''
- Custom etebase-server.ini.
-
- See etebase-src/etebase-server.ini.example for available options.
-
- Setting this option overrides the default config which is generated from the options
- secretFile, host and database.
- '';
- example = literalExample ''
- [global]
- debug = false
- secret_file = /path/to/secret
- media_root = /path/to/media
-
- [allowed_hosts]
- allowed_host1 = example.com
-
- [database]
- engine = django.db.backends.sqlite3
- name = db.sqlite3
+ Configuration for etebase-server. Refer to
+
+ and
+ for details on supported values.
'';
+ example = {
+ global = {
+ debug = true;
+ media_root = "/path/to/media";
+ };
+ allowed_hosts = {
+ allowed_host2 = "localhost";
+ };
+ };
};
user = mkOption {
@@ -166,8 +179,8 @@ in
WorkingDirectory = cfg.dataDir;
};
environment = {
- PYTHONPATH="${pythonEnv}/${pkgs.python3.sitePackages}";
- ETEBASE_EASY_CONFIG_PATH="${configIni}";
+ PYTHONPATH = "${pythonEnv}/${pkgs.python3.sitePackages}";
+ ETEBASE_EASY_CONFIG_PATH = "${configIni}";
};
preStart = ''
# Auto-migrate on first run or if the package has changed