diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index d1b6564..0000000
--- a/build.gradle
+++ /dev/null
@@ -1,106 +0,0 @@
-import static org.jetbrains.intellij.tasks.RunPluginVerifierTask.FailureLevel.*
-
-buildscript {
-    repositories {
-        mavenLocal()
-        gradlePluginPortal()
-        maven { url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
-        maven { url "https://maven.aliyun.com/nexus/content/groups/public/" }
-    }
-
-    dependencies {
-        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
-        classpath "de.undercouch:gradle-download-task:4.1.1"
-    }
-}
-
-plugins {
-    id "org.jetbrains.intellij" version "0.7.2"
-    id "com.adarshr.test-logger" version "2.1.1"
-    id "de.undercouch.download" version "4.1.1"
-    id "org.jetbrains.kotlin.jvm" version "1.4.31"
-    id "idea"
-}
-
-testlogger {
-    theme 'mocha'
-}
-
-repositories {
-    mavenLocal()
-    maven { url "https://maven-central.storage-download.googleapis.com/repos/central/data/" }
-    maven { url "https://maven.aliyun.com/nexus/content/groups/public/" }
-    maven { url "https://repo.eclipse.org/content/groups/releases/" }
-    maven { url "https://www.jetbrains.com/intellij-repository/releases" }
-    maven { url "https://www.jetbrains.com/intellij-repository/snapshots" }
-}
-
-def pluginsDependencies = ['java',
-                           'java-i18n',
-                           'JavaScriptLanguage',
-                           'DatabaseTools',
-                           'CSS',
-                           'platform-images',
-                           'Groovy',
-                           'properties',
-                           'yaml',
-                           "org.jetbrains.kotlin:203-$kotlinVersion-release-IJ5981.133-1",
-                           'org.intellij.scala:2020.3.21',
-                           'Dart:203.5981.155',
-                           'org.jetbrains.plugins.ruby:203.5981.155',
-                           'com.jetbrains.php:203.5981.155',
-                           'com.jetbrains.sh:203.5981.37',
-                           'com.jetbrains.plugins.jade:203.5981.155',
-                           'org.jetbrains.plugins.go-template:203.5981.155',
-]
-
-intellij {
-    pluginName name
-
-    version ideaVersion
-    //localPath = '/Users/izhangzhihao/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/201.6668.121/IntelliJ IDEA 2020.1 EAP.app/Contents'
-    //localPath = '/Users/izhangzhihao/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/201.6668.126/CLion.app/Contents'
-    updateSinceUntilBuild = false
-
-    setPlugins(*pluginsDependencies)
-}
-
-runIde {
-    systemProperty "idea.auto.reload.plugins", false
-}
-
-publishPlugin {
-    def authenticationToken = "$System.env.token"
-    token authenticationToken
-    channels publishChannels
-}
-
-idea {
-    project {
-        jdkName = javaVersion
-        languageLevel = javaVersion
-    }
-}
-
-dependencies {
-    implementation("org.eclipse.mylyn.github:org.eclipse.egit.github.core:5.10.0.202012080955-r") {
-        exclude module: "gson"
-    }
-    compileOnly fileTree(dir: 'libs', include: ['*.jar'])
-    testImplementation("io.kotlintest:kotlintest:2.0.7")
-}
-
-sourceCompatibility = javaVersion
-targetCompatibility = javaVersion
-
-[compileKotlin, compileTestKotlin]*.kotlinOptions {
-    languageVersion = kotlinLanguageVersion
-    apiVersion = kotlinTargetVersion
-    jvmTarget = javaVersion
-    freeCompilerArgs = ["-Xskip-runtime-version-check", "-Xjsr305=strict"]
-}
-
-runPluginVerifier {
-    ideVersions = "$pluginVerifierIdeVersions"
-    failureLevel = COMPATIBILITY_PROBLEMS
-}
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..c0fcd26
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,98 @@
+import org.jetbrains.intellij.tasks.RunPluginVerifierTask.FailureLevel.*
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
+
+val name: String by project
+val ideaVersion: String by project
+val kotlinVersion: String by project
+val javaVersion: String by project
+val kotlinLanguageVersion: String by project
+val kotlinTargetVersion: String by project
+val pluginVerifierIdeVersions: String by project
+val publishChannels: String by project
+
+plugins {
+    id("org.jetbrains.intellij") version "1.0.0-SNAPSHOT"
+    id("com.adarshr.test-logger") version "3.0.0"
+    id("org.jetbrains.kotlin.jvm") version "1.4.32"
+    id("idea")
+}
+
+repositories {
+    mavenLocal()
+    maven(url = "https://maven-central.storage-download.googleapis.com/repos/central/data/")
+    maven(url = "https://maven.aliyun.com/nexus/content/groups/public/")
+    maven(url = "https://repo.eclipse.org/content/groups/releases/")
+    maven(url = "https://www.jetbrains.com/intellij-repository/releases")
+    maven(url = "https://www.jetbrains.com/intellij-repository/snapshots")
+}
+
+intellij {
+    pluginName.set(name)
+
+    version.set(ideaVersion)
+    //localPath = '/Users/izhangzhihao/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/201.6668.121/IntelliJ IDEA 2020.1 EAP.app/Contents'
+    //localPath = '/Users/izhangzhihao/Library/Application Support/JetBrains/Toolbox/apps/CLion/ch-0/201.6668.126/CLion.app/Contents'
+    updateSinceUntilBuild.set(false)
+
+    plugins.set(
+            listOf(
+                    "java",
+                    "java-i18n",
+                    "JavaScriptLanguage",
+                    "DatabaseTools",
+                    "CSS",
+                    "platform-images",
+                    "Groovy",
+                    "properties",
+                    "yaml",
+                    "org.jetbrains.kotlin:203-$kotlinVersion-release-IJ5981.133-1",
+                    "org.intellij.scala:2020.3.21",
+                    "Dart:203.5981.155",
+                    "org.jetbrains.plugins.ruby:203.5981.155",
+                    "com.jetbrains.php:203.5981.155",
+                    "com.jetbrains.sh:203.5981.37",
+                    "com.jetbrains.plugins.jade:203.5981.155",
+                    "org.jetbrains.plugins.go-template:203.5981.155"
+            )
+    )
+}
+
+tasks {
+    runIde {
+        systemProperties["idea.auto.reload.plugins"] = false
+    }
+
+    publishPlugin {
+        token.set(System.getenv("token"))
+        channels.set(publishChannels.split(",").map { it.trim() }.toList())
+    }
+
+    runPluginVerifier {
+        ideVersions.set(pluginVerifierIdeVersions.split(",").map { it.trim() }.toList())
+        failureLevel.set(listOf(COMPATIBILITY_PROBLEMS))
+    }
+
+    testlogger {
+        theme = com.adarshr.gradle.testlogger.theme.ThemeType.MOCHA
+    }
+}
+
+dependencies {
+    implementation("org.eclipse.mylyn.github:org.eclipse.egit.github.core:5.11.0.202103091610-r") {
+        exclude("gson")
+    }
+    compileOnly(fileTree("libs"))
+    testImplementation("io.kotlintest:kotlintest:2.0.7")
+}
+
+java {
+    sourceCompatibility = JavaVersion.VERSION_11
+    targetCompatibility = JavaVersion.VERSION_11
+}
+
+tasks.withType<KotlinCompile> {
+    kotlinOptions.languageVersion = kotlinLanguageVersion
+    kotlinOptions.apiVersion = kotlinTargetVersion
+    kotlinOptions.jvmTarget = javaVersion
+    kotlinOptions.freeCompilerArgs = listOf("-Xskip-runtime-version-check", "-Xjsr305=strict")
+}
diff --git a/settings.gradle.kts b/settings.gradle.kts
new file mode 100644
index 0000000..47a7c27
--- /dev/null
+++ b/settings.gradle.kts
@@ -0,0 +1,6 @@
+pluginManagement {
+    repositories {
+        maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
+        gradlePluginPortal()
+    }
+}
\ No newline at end of file
diff --git a/src/test/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurableTest.kt b/src/test/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurableTest.kt
deleted file mode 100644
index 1caa97d..0000000
--- a/src/test/kotlin/com/github/izhangzhihao/rainbow/brackets/settings/RainbowConfigurableTest.kt
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.github.izhangzhihao.rainbow.brackets.settings
-
-import com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase
-import io.kotlintest.matchers.shouldBe
-import io.kotlintest.matchers.shouldNotBe
-
-class RainbowConfigurableTest : LightJavaCodeInsightFixtureTestCase() {
-
-    override fun tearDown() {
-        super.tearDown()
-        val rainbowSettings = RainbowSettings.instance
-        rainbowSettings.isRainbowEnabled = true
-        rainbowSettings.isEnableRainbowAngleBrackets = true
-        rainbowSettings.isEnableRainbowRoundBrackets = true
-        rainbowSettings.isEnableRainbowSquareBrackets = true
-        rainbowSettings.isEnableRainbowSquigglyBrackets = true
-        rainbowSettings.isDoNOTRainbowifyBracketsWithoutContent = false
-    }
-
-    fun testSettings() {
-        val rainbowConfigurable = RainbowConfigurable()
-        rainbowConfigurable.isModified shouldBe false
-        rainbowConfigurable.displayName shouldBe "Rainbow Brackets"
-        rainbowConfigurable.createComponent()
-        rainbowConfigurable.settingsForm.shouldNotBe(null)
-
-        rainbowConfigurable.settingsForm!!.isRainbowEnabled() shouldBe true
-        rainbowConfigurable.settingsForm!!.isRainbowAngleBracketsEnabled() shouldBe true
-        rainbowConfigurable.settingsForm!!.isRainbowRoundBracketsEnabled() shouldBe true
-        rainbowConfigurable.settingsForm!!.isRainbowSquareBracketsEnabled() shouldBe true
-        rainbowConfigurable.settingsForm!!.isRainbowSquigglyBracketsEnabled() shouldBe true
-        rainbowConfigurable.settingsForm!!.isShowRainbowIndentGuides() shouldBe true
-        rainbowConfigurable.settingsForm!!.isDoNOTRainbowifyBracketsWithoutContent() shouldBe false
-
-        rainbowConfigurable.disposeUIResources()
-        rainbowConfigurable.settingsForm.shouldBe(null)
-    }
-
-    fun testUpdateSettings() {
-
-        val rainbowSettings = RainbowSettings.instance
-        rainbowSettings.isRainbowEnabled = false
-        rainbowSettings.isEnableRainbowAngleBrackets = false
-        rainbowSettings.isEnableRainbowRoundBrackets = false
-        rainbowSettings.isEnableRainbowSquareBrackets = false
-        rainbowSettings.isEnableRainbowSquigglyBrackets = false
-        rainbowSettings.isDoNOTRainbowifyBracketsWithoutContent = true
-
-        val rainbowConfigurable = RainbowConfigurable()
-        rainbowConfigurable.createComponent()
-        rainbowConfigurable.apply()
-
-        rainbowConfigurable.settingsForm!!.isRainbowEnabled() shouldBe false
-        rainbowConfigurable.settingsForm!!.isRainbowAngleBracketsEnabled() shouldBe false
-        rainbowConfigurable.settingsForm!!.isRainbowRoundBracketsEnabled() shouldBe false
-        rainbowConfigurable.settingsForm!!.isRainbowSquareBracketsEnabled() shouldBe false
-        rainbowConfigurable.settingsForm!!.isRainbowSquigglyBracketsEnabled() shouldBe false
-        rainbowConfigurable.settingsForm!!.isDoNOTRainbowifyBracketsWithoutContent() shouldBe true
-
-        rainbowConfigurable.disposeUIResources()
-        rainbowConfigurable.settingsForm.shouldBe(null)
-    }
-}
\ No newline at end of file