mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-07 14:05:38 -05:00
Modularlize the shell
This commit is contained in:
110
Services/OSDetectorService.qml
Normal file
110
Services/OSDetectorService.qml
Normal file
@@ -0,0 +1,110 @@
|
||||
import QtQuick
|
||||
import Quickshell
|
||||
import Quickshell.Io
|
||||
pragma Singleton
|
||||
pragma ComponentBehavior: Bound
|
||||
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
property string osLogo: ""
|
||||
property string osName: ""
|
||||
|
||||
// OS Detection
|
||||
Process {
|
||||
id: osDetector
|
||||
command: ["lsb_release", "-i", "-s"]
|
||||
running: true
|
||||
|
||||
stdout: SplitParser {
|
||||
splitMarker: "\n"
|
||||
onRead: (data) => {
|
||||
if (data.trim()) {
|
||||
let osId = data.trim().toLowerCase()
|
||||
console.log("Detected OS:", osId)
|
||||
|
||||
// Set OS-specific Nerd Font icons and names
|
||||
if (osId.includes("arch")) {
|
||||
root.osLogo = "\uf303" // Arch Linux Nerd Font icon
|
||||
root.osName = "Arch Linux"
|
||||
console.log("Set Arch logo:", root.osLogo)
|
||||
} else if (osId.includes("ubuntu")) {
|
||||
root.osLogo = "\uf31b" // Ubuntu Nerd Font icon
|
||||
root.osName = "Ubuntu"
|
||||
} else if (osId.includes("fedora")) {
|
||||
root.osLogo = "\uf30a" // Fedora Nerd Font icon
|
||||
root.osName = "Fedora"
|
||||
} else if (osId.includes("debian")) {
|
||||
root.osLogo = "\uf306" // Debian Nerd Font icon
|
||||
root.osName = "Debian"
|
||||
} else if (osId.includes("opensuse")) {
|
||||
root.osLogo = "\uef6d" // openSUSE Nerd Font icon
|
||||
root.osName = "openSUSE"
|
||||
} else if (osId.includes("manjaro")) {
|
||||
root.osLogo = "\uf312" // Manjaro Nerd Font icon
|
||||
root.osName = "Manjaro"
|
||||
} else {
|
||||
root.osLogo = "\uf033" // Generic Linux Nerd Font icon
|
||||
root.osName = "Linux"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onExited: (exitCode) => {
|
||||
if (exitCode !== 0) {
|
||||
// Fallback: try checking /etc/os-release
|
||||
osDetectorFallback.running = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback OS detection
|
||||
Process {
|
||||
id: osDetectorFallback
|
||||
command: ["sh", "-c", "grep '^ID=' /etc/os-release | cut -d'=' -f2 | tr -d '\"'"]
|
||||
running: false
|
||||
|
||||
stdout: SplitParser {
|
||||
splitMarker: "\n"
|
||||
onRead: (data) => {
|
||||
if (data.trim()) {
|
||||
let osId = data.trim().toLowerCase()
|
||||
console.log("Detected OS (fallback):", osId)
|
||||
|
||||
if (osId.includes("arch")) {
|
||||
root.osLogo = "\uf303"
|
||||
root.osName = "Arch Linux"
|
||||
} else if (osId.includes("ubuntu")) {
|
||||
root.osLogo = "\uf31b"
|
||||
root.osName = "Ubuntu"
|
||||
} else if (osId.includes("fedora")) {
|
||||
root.osLogo = "\uf30a"
|
||||
root.osName = "Fedora"
|
||||
} else if (osId.includes("debian")) {
|
||||
root.osLogo = "\uf306"
|
||||
root.osName = "Debian"
|
||||
} else if (osId.includes("opensuse")) {
|
||||
root.osLogo = "\uef6d"
|
||||
root.osName = "openSUSE"
|
||||
} else if (osId.includes("manjaro")) {
|
||||
root.osLogo = "\uf312"
|
||||
root.osName = "Manjaro"
|
||||
} else {
|
||||
root.osLogo = "\uf033"
|
||||
root.osName = "Linux"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
onExited: (exitCode) => {
|
||||
if (exitCode !== 0) {
|
||||
// Ultimate fallback - use generic apps icon (empty logo means fallback to "apps")
|
||||
root.osLogo = ""
|
||||
root.osName = "Linux"
|
||||
console.log("OS detection failed, using generic icon")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user