Skip to content

Commit 7db639b

Browse files
committed
Add Linux desktop environment detection utility
Introduced `LinuxDesktopEnvironment` enum and `detectLinuxDesktopEnvironment()` function to identify Linux desktop environments using common environment variables like `XDG_CURRENT_DESKTOP` and `DESKTOP_SESSION`. Added fallback support for unrecognized environments.
1 parent d1577b5 commit 7db639b

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.github.kdroidfilter.platformtools
2+
3+
/** Most common Linux desktop environments. */
4+
enum class LinuxDesktopEnvironment {
5+
GNOME, KDE, XFCE, CINNAMON, MATE, UNKNOWN
6+
}
7+
8+
/**
9+
* Detects the Linux Desktop Environment.
10+
*
11+
* - Returns **null** if the OS is not Linux († avoids unnecessary computation).
12+
* - Uses common environment variables:
13+
* `XDG_CURRENT_DESKTOP`, `DESKTOP_SESSION`.
14+
*/
15+
fun detectLinuxDesktopEnvironment(): LinuxDesktopEnvironment? {
16+
if (getOperatingSystem() != OperatingSystem.LINUX) return null
17+
18+
val combinedEnv = buildList {
19+
System.getenv("XDG_CURRENT_DESKTOP")?.let(::add)
20+
System.getenv("DESKTOP_SESSION")?.let(::add)
21+
}.joinToString("|").lowercase()
22+
23+
return when {
24+
"gnome" in combinedEnv -> LinuxDesktopEnvironment.GNOME
25+
"kde" in combinedEnv || "plasma" in combinedEnv -> LinuxDesktopEnvironment.KDE
26+
"xfce" in combinedEnv -> LinuxDesktopEnvironment.XFCE
27+
"cinnamon" in combinedEnv -> LinuxDesktopEnvironment.CINNAMON
28+
"mate" in combinedEnv -> LinuxDesktopEnvironment.MATE
29+
else -> LinuxDesktopEnvironment.UNKNOWN
30+
}
31+
}

platformtools/core/src/jvmMain/kotlin/io/github/kdroidfilter/platformtools/OsProvider.jvm.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ actual fun getOperatingSystem(): OperatingSystem {
88
osName.contains("nix") || osName.contains("nux") || osName.contains("aix") -> OperatingSystem.LINUX
99
else -> OperatingSystem.UNKNOWN
1010
}
11-
}
11+
}

0 commit comments

Comments
 (0)