{ lib, config, ... }: let usingPostgres = config.services.forgejo.database.type == "postgres"; in { config = lib.mkIf config.services.forgejo.enable { assertions = [ { assertion = !usingPostgres || config.services.postgresql.enable; message = "PostgreSQL must be enabled when Forgejo database type is postgres"; } { assertion = !(usingPostgres && config.services.forgejo.database.createDatabase) || (builtins.any (db: db == "forgejo") config.services.postgresql.ensureDatabases); message = "Forgejo built-in database creation failed - expected 'forgejo' in ensureDatabases but got: ${builtins.toString config.services.postgresql.ensureDatabases}"; } { assertion = !(usingPostgres && config.services.forgejo.database.createDatabase) || (builtins.any (user: user.name == "forgejo") config.services.postgresql.ensureUsers); message = "Forgejo built-in user creation failed - expected user 'forgejo' in ensureUsers but got: ${builtins.toString (builtins.map (u: u.name) config.services.postgresql.ensureUsers)}"; } ]; services.forgejo.database.createDatabase = lib.mkDefault usingPostgres; systemd.services.forgejo = lib.mkIf usingPostgres { requires = [ config.systemd.services.postgresql.name ]; }; }; }