buildscript {
    project.ext.supportRootFolder = project.projectDir.getParentFile()
    apply from: "repos.gradle"
    repos.addMavenRepositories(repositories)

    dependencies {
        classpath(libs.kotlinGradlePluginz)
    }

    configurations.classpath.resolutionStrategy {
        eachDependency { details ->
            if (details.requested.group == "org.jetbrains.kotlin") {
                details.useVersion libs.versions.kotlin.get()
            }
        }
    }
}

apply from: "out.gradle"
init.chooseBuildSrcBuildDir()

ext.supportRootFolder = project.projectDir.getParentFile()
apply from: "repos.gradle"
apply plugin: "kotlin"

repos.addMavenRepositories(repositories)

dependencies {
    api(project("plugins"))
}
