diff --git a/build.gradle.kts b/build.gradle.kts
index 05abe8ef86be87ebe94ce283adb64dd4d9743809..a0f9cf867057f5c2d14d914585da571c3acef4c2 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -8,6 +8,7 @@
  */
 
 plugins {
+  id("justjanne.version")
   id("justjanne.dokka")
   id("justjanne.publish-maven-central")
   idea
@@ -15,4 +16,3 @@ plugins {
 }
 
 group = "de.justjanne.libquassel"
-version = "0.10.1"
diff --git a/gradle/convention/src/main/kotlin/justjanne.version.gradle.kts b/gradle/convention/src/main/kotlin/justjanne.version.gradle.kts
new file mode 100644
index 0000000000000000000000000000000000000000..3c0ef79433e737933dc6edbb193a5adfd02a6246
--- /dev/null
+++ b/gradle/convention/src/main/kotlin/justjanne.version.gradle.kts
@@ -0,0 +1,23 @@
+import org.gradle.api.Project
+
+/*
+ * libquassel
+ * Copyright (c) 2022 Janne Mareike Koschinski
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public License,
+ * v. 2.0. If a copy of the MPL was not distributed with this file, You can
+ * obtain one at https://mozilla.org/MPL/2.0/.
+ */
+
+version = cmd("git", "describe", "--always", "--tags", "HEAD") ?: "1.0.0"
+
+fun Project.cmd(vararg command: String) = try {
+  val stdOut = java.io.ByteArrayOutputStream()
+  exec {
+    commandLine(*command)
+    standardOutput = stdOut
+  }
+  stdOut.toString(Charsets.UTF_8.name()).trim()
+} catch (e: Throwable) {
+  null
+}