pragma Singleton import qs.config import qs.util import Quickshell import QtQuick Searcher { id: root function launch(entry: DesktopEntry): void { if (entry.runInTerminal) Quickshell.execDetached({ command: [...Config.terminalCommand, ...entry.command], workingDirectory: entry.workingDirectory }); else Quickshell.execDetached({ command: entry.command, workingDirectory: entry.workingDirectory }); } function search(search: string): list { const prefix = Config.launcher.specialPrefix; if (search.startsWith(`${prefix}i `)) { keys = ["id", "name"]; weights = [0.9, 0.1]; } else if (search.startsWith(`${prefix}c `)) { keys = ["categories", "name"]; weights = [0.9, 0.1]; } else if (search.startsWith(`${prefix}d `)) { keys = ["desc", "name"]; weights = [0.9, 0.1]; } else if (search.startsWith(`${prefix}e `)) { keys = ["execString", "name"]; weights = [0.9, 0.1]; } else if (search.startsWith(`${prefix}w `)) { keys = ["wmClass", "name"]; weights = [0.9, 0.1]; } else if (search.startsWith(`${prefix}g `)) { keys = ["genericName", "name"]; weights = [0.9, 0.1]; } else if (search.startsWith(`${prefix}k `)) { keys = ["keywords", "name"]; weights = [0.9, 0.1]; } else { keys = ["name"]; weights = [1]; if (!search.startsWith(`${prefix}t `)) return query(search).map(e => e.modelData); } const results = query(search.slice(prefix.length + 2)).map(e => e.modelData); if (search.startsWith(`${prefix}t `)) return results.filter(a => a.runInTerminal); return results; } function selector(item: var): string { return keys.map(k => item[k]).join(" "); } list: variants.instances useFuzzy: true Variants { id: variants model: [...DesktopEntries.applications.values].sort((a, b) => a.name.localeCompare(b.name)) QtObject { required property DesktopEntry modelData readonly property string id: modelData.id readonly property string name: modelData.name readonly property string desc: modelData.comment readonly property string execString: modelData.execString readonly property string wmClass: modelData.startupClass readonly property string genericName: modelData.genericName readonly property string categories: modelData.categories.join(" ") readonly property string keywords: modelData.keywords.join(" ") } } }