mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2025-12-05 21:15:38 -05:00
60 lines
1.8 KiB
QML
60 lines
1.8 KiB
QML
pragma Singleton
|
|
|
|
pragma ComponentBehavior: Bound
|
|
|
|
import QtQuick
|
|
import Quickshell
|
|
import Quickshell.Io
|
|
|
|
Singleton {
|
|
id: root
|
|
function resolveIconPath(moddedAppId) {
|
|
const entry = DesktopEntries.heuristicLookup(moddedAppId)
|
|
const appIds = [moddedAppId, moddedAppId.toLowerCase()];
|
|
|
|
const lastPart = moddedAppId.split('.').pop();
|
|
if (lastPart && lastPart !== moddedAppId) {
|
|
appIds.push(lastPart);
|
|
|
|
const firstChar = lastPart.charAt(0);
|
|
const rest = lastPart.slice(1);
|
|
let toggled;
|
|
|
|
if (firstChar === firstChar.toLowerCase()) {
|
|
toggled = firstChar.toUpperCase() + rest;
|
|
} else {
|
|
toggled = firstChar.toLowerCase() + rest;
|
|
}
|
|
|
|
if (toggled !== lastPart) {
|
|
appIds.push(toggled);
|
|
}
|
|
}
|
|
for (const appId of appIds){
|
|
let icon = Quickshell.iconPath(entry?.icon, true)
|
|
if (icon && icon !== "") return icon
|
|
|
|
let execPath = entry?.execString?.replace(/\/bin.*/, "")
|
|
if (!execPath) continue
|
|
|
|
//Check that the app is installed with nix/guix
|
|
if (execPath.startsWith("/nix/store/") || execPath.startsWith("/gnu/store/")) {
|
|
const basePath = execPath
|
|
const sizes = ["256x256", "128x128", "64x64", "48x48", "32x32", "24x24", "16x16"]
|
|
|
|
let iconPath = `${basePath}/share/icons/hicolor/scalable/apps/${appId}.svg`
|
|
icon = Quickshell.iconPath(iconPath, true)
|
|
if (icon && icon !== "") return icon
|
|
|
|
for (const size of sizes) {
|
|
iconPath = `${basePath}/share/icons/hicolor/${size}/apps/${appId}.png`
|
|
icon = Quickshell.iconPath(iconPath, true)
|
|
if (icon && icon !== "") return icon
|
|
}
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
}
|