/ services / Apps.qml
Apps.qml
 1  pragma Singleton
 2  
 3  import "root:/utils/scripts/fuzzysort.js" as Fuzzy
 4  import Quickshell
 5  import Quickshell.Io
 6  
 7  Singleton {
 8      id: root
 9  
10      readonly property list<DesktopEntry> list: DesktopEntries.applications.values.filter(a => !a.noDisplay).sort((a, b) => a.name.localeCompare(b.name))
11      readonly property list<var> preppedApps: list.map(a => ({
12                  name: Fuzzy.prepare(a.name),
13                  comment: Fuzzy.prepare(a.comment),
14                  entry: a
15              }))
16  
17      function fuzzyQuery(search: string): var { // Idk why list<DesktopEntry> doesn't work
18          return Fuzzy.go(search, preppedApps, {
19              all: true,
20              keys: ["name", "comment"],
21              scoreFn: r => r[0].score > 0 ? r[0].score * 0.9 + r[1].score * 0.1 : 0
22          }).map(r => r.obj.entry);
23      }
24  
25      function launch(entry: DesktopEntry): void {
26          launchProc.entry = entry;
27          launchProc.startDetached();
28      }
29  
30      Process {
31          id: launchProc
32  
33          property DesktopEntry entry
34  
35          command: ["app2unit", "--", `${entry?.id}.desktop`]
36      }
37  }