anchor.diff:          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 <literal>extraConfig</literal>.
  -          '';
  +      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 <literal>etebase-src/etebase-server.ini.example</literal> for available options.
  -
  -          Setting this option overrides the default config which is generated from the options
  -          <literal>secretFile</literal>, <literal>host</literal> and <literal>database</literal>.
  -        '';
  -        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 <package>etebase-server</package>. Refer to
  +          <link xlink:href="https://github.com/etesync/server/blob/master/etebase-server.ini.example" />
  +          and <link xlink:href="https://github.com/etesync/server/wiki" />
  +          for details on supported values.
  +        '';
  +        example = {
  +          global = {
  +            debug = true;
  +            media_root = "/path/to/media";
  +          };
  +          allowed_hosts = {
  +            allowed_host2 = "localhost";
  +          };
  +        };
         };
   
         user = mkOption {
  
positive.code:         description = ''
            Whether to enable the Etebase server.
  
            Once enabled you need to create an admin user using the
            shell command <literal>etebase-server createsuperuser</literal>.
            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.
          '';
        };
  
  
negative.code:         WorkingDirectory = cfg.dataDir;
        };
        environment = {
          PYTHONPATH = "${pythonEnv}/${pkgs.python3.sitePackages}";
          ETEBASE_EASY_CONFIG_PATH = "${configIni}";
        };
        preStart = ''
          # Auto-migrate on first run or if the package has changed
  