mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-01-29 07:52:50 -05:00
feat: configurable app id substitutions (#1317)
* feat: add configurable app ID substitutions setting * feat: add live icon updates when substitutions change * fix: cursor not showing on headerActions in non-collapsible cards * fix: address PR review feedback - add tags for search index - remove hardcoded height from text fields
This commit is contained in:
@@ -46,22 +46,20 @@ Singleton {
|
||||
}
|
||||
|
||||
function moddedAppId(appId: string): string {
|
||||
if (appId === "Spotify")
|
||||
return "spotify";
|
||||
if (appId === "beepertexts")
|
||||
return "beeper";
|
||||
if (appId === "home assistant desktop")
|
||||
return "homeassistant-desktop";
|
||||
if (appId.includes("com.transmissionbt.transmission")) {
|
||||
if (DesktopEntries.heuristicLookup("transmission-gtk"))
|
||||
return "transmission-gtk";
|
||||
if (DesktopEntries.heuristicLookup("transmission"))
|
||||
return "transmission";
|
||||
return "transmission-gtk";
|
||||
const subs = SettingsData.appIdSubstitutions || [];
|
||||
for (let i = 0; i < subs.length; i++) {
|
||||
const sub = subs[i];
|
||||
if (sub.type === "exact" && appId === sub.pattern) {
|
||||
return sub.replacement;
|
||||
} else if (sub.type === "contains" && appId.includes(sub.pattern)) {
|
||||
return sub.replacement;
|
||||
} else if (sub.type === "regex") {
|
||||
const match = appId.match(new RegExp(sub.pattern));
|
||||
if (match) {
|
||||
return sub.replacement.replace(/\$(\d+)/g, (_, n) => match[n] || "");
|
||||
}
|
||||
}
|
||||
}
|
||||
const steamMatch = appId.match(/^steam_app_(\d+)$/);
|
||||
if (steamMatch)
|
||||
return `steam_icon_${steamMatch[1]}`;
|
||||
return appId;
|
||||
}
|
||||
|
||||
@@ -71,7 +69,7 @@ Singleton {
|
||||
}
|
||||
|
||||
const moddedId = moddedAppId(appId);
|
||||
if (moddedId.startsWith("steam_icon_")) {
|
||||
if (moddedId !== appId) {
|
||||
return Quickshell.iconPath(moddedId, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -221,6 +221,7 @@ Singleton {
|
||||
property bool keyboardLayoutNameCompactMode: false
|
||||
property bool runningAppsCurrentWorkspace: false
|
||||
property bool runningAppsGroupByApp: false
|
||||
property var appIdSubstitutions: []
|
||||
property string centeringMode: "index"
|
||||
property string clockDateFormat: ""
|
||||
property string lockDateFormat: ""
|
||||
@@ -1842,6 +1843,40 @@ Singleton {
|
||||
return workspaceNameIcons[workspaceName] || null;
|
||||
}
|
||||
|
||||
function addAppIdSubstitution(pattern, replacement, type) {
|
||||
var subs = JSON.parse(JSON.stringify(appIdSubstitutions));
|
||||
subs.push({ pattern: pattern, replacement: replacement, type: type });
|
||||
appIdSubstitutions = subs;
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
function updateAppIdSubstitution(index, pattern, replacement, type) {
|
||||
var subs = JSON.parse(JSON.stringify(appIdSubstitutions));
|
||||
if (index < 0 || index >= subs.length)
|
||||
return;
|
||||
subs[index] = { pattern: pattern, replacement: replacement, type: type };
|
||||
appIdSubstitutions = subs;
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
function removeAppIdSubstitution(index) {
|
||||
var subs = JSON.parse(JSON.stringify(appIdSubstitutions));
|
||||
if (index < 0 || index >= subs.length)
|
||||
return;
|
||||
subs.splice(index, 1);
|
||||
appIdSubstitutions = subs;
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
function getDefaultAppIdSubstitutions() {
|
||||
return Spec.SPEC.appIdSubstitutions.def;
|
||||
}
|
||||
|
||||
function resetAppIdSubstitutions() {
|
||||
appIdSubstitutions = JSON.parse(JSON.stringify(Spec.SPEC.appIdSubstitutions.def));
|
||||
saveSettings();
|
||||
}
|
||||
|
||||
function getRegistryThemeVariant(themeId, defaultVariant) {
|
||||
var stored = registryThemeVariants[themeId];
|
||||
if (typeof stored === "string")
|
||||
|
||||
@@ -115,6 +115,13 @@ var SPEC = {
|
||||
keyboardLayoutNameCompactMode: { def: false },
|
||||
runningAppsCurrentWorkspace: { def: false },
|
||||
runningAppsGroupByApp: { def: false },
|
||||
appIdSubstitutions: { def: [
|
||||
{ pattern: "Spotify", replacement: "spotify", type: "exact" },
|
||||
{ pattern: "beepertexts", replacement: "beeper", type: "exact" },
|
||||
{ pattern: "home assistant desktop", replacement: "homeassistant-desktop", type: "exact" },
|
||||
{ pattern: "com.transmissionbt.transmission", replacement: "transmission-gtk", type: "contains" },
|
||||
{ pattern: "^steam_app_(\\d+)$", replacement: "steam_icon_$1", type: "regex" }
|
||||
]},
|
||||
centeringMode: { def: "index" },
|
||||
clockDateFormat: { def: "" },
|
||||
lockDateFormat: { def: "" },
|
||||
|
||||
Reference in New Issue
Block a user