// Name: Shortcuts // Description: Shortcut Launcher // Keyword: sc import "@johnlindquist/kit"; const DB = home("Library", "Shortcuts", "Shortcuts.sqlite"); let { default: sqlite3 } = await import("sqlite3"); let { open } = await import("sqlite"); const shortcuts_db = await open({ filename: DB, driver: sqlite3.Database }); let query = await shortcuts_db.all( "SELECT ZNAME,ZACTIONSDESCRIPTION,ZICON,ZBACKGROUNDCOLORVALUE,ZGLYPHNUMBER FROM ZSHORTCUT INNER JOIN ZSHORTCUTICON on ZSHORTCUTICON.Z_PK=ZICON" ); //Color mappings found https://github.com/atnbueno/Shortcuts-old const colors = { 4282601983: { RGB: "#F26369", Gradient: "#F36F74 #F2585E" }, 4251333119: { RGB: "#FF8567", Gradient: "#FF8E73 #FF7C5C" }, 4271458815: { RGB: "#F7A752", Gradient: "#F8AE5F #F7A145" }, 4274264319: { RGB: "#E7C640", Gradient: "#E8CA45 #E5C238" }, 4292093695: { RGB: "#45C95F", Gradient: "#53CD6B #37C553" }, 431817727: { RGB: "#49CBAE", Gradient: "#57CFB4 #2AC7A8" }, 1440408063: { RGB: "#51C8DC", Gradient: "#5ACCDE #3FC4D9" }, 463140863: { RGB: "#12B4F6", Gradient: "#24BAF7 #00AFF6" }, 946986751: { RGB: "#4A69C6", Gradient: "#5874CA #3D5EC2" }, 2071128575: { RGB: "#8857C2", Gradient: "#9164C7 #7F4BBE" }, 3679049983: { RGB: "#BB7BE4", Gradient: "#C085E6 #B671E2" }, 3980825855: { RGB: "#F58BD5", Gradient: "#F694D8 #F583D2" }, 255: { RGB: "#87919B", Gradient: "#9099A3 #7E8994" }, 3031607807: { RGB: "#95A095", Gradient: "#9DA79D #8D998E" }, 2846468607: { RGB: "#9D918C", Gradient: "#A49995 #968984" }, }; // Glyphs names found https://github.com/atnbueno/Shortcuts-old, ChatGPT used to generate emojis const glyphs = { 59452: "đ", 61446: "đ", 61447: "đ", 59678: "đ", 61448: "đ", 61449: "đ", 61450: "đ", 59668: "đ˛", 59652: "đ", 59648: "âī¸", 59755: "đ ", 59677: "đĸ", 59828: "đ", 61553: "đī¸", 59750: "đ", 59863: "đ´", 59741: "âŊ", 59854: "đĄī¸", 59845: "âī¸", 59782: "đ", 61517: "đ", 59835: "âī¸", 59714: "âī¸", 59715: "đ§ī¸", 59861: "âī¸", 59734: "đĨ", 59669: "đ", 59717: "đ§", 59412: "đ", 59784: "đī¸", 59733: "đī¸", 59682: "đˇ", 59402: "đĨ", 59780: "đ¤", 59864: "đš", 59711: "đ", 59681: "đ", 59414: "đŦ", 59403: "đŦđŦ", 59779: "đŦ", 59773: "đ", 59774: "đŦ", 59836: "âī¸", 61462: "đ", 59676: "đŧ", 61570: "đ", 61571: "đâī¸", 59719: "đŗ", 59865: "â", 59814: "đ", 59436: "đģ", 59446: "â¨ī¸", 59680: "đ§Ž", 59662: "đ", 59817: "đ¨ī¸", 59752: "đŊ", 59722: "đĨī¸", 59519: "đĻ", 59826: "đī¸", 59653: "đ", 59721: "đ§", 59851: "đē", 59742: "đŽ", 59818: "đ§Š", 61552: "đ§Š", 59753: "đ§", 61479: "đ", 61481: "đĻģ", 59790: "đĩ", 59839: "đ", 61470: "đ", 61471: "đ", 61472: "đ", 61473: "đ", 61478: "đ", 61474: "đ", 59671: "đ", 59465: "đ", 61442: "đ", 59745: "đ", 59788: "đĢ", 59730: "đ", 59723: "đ˛", 59663: "âž", 59664: "đ", 59837: "âŊ", 59456: "đ", 59762: "đļ", 59756: "đ", 59712: "đ°ī¸", 59649: "â°", 59844: "âąī¸", 59667: "đ", 59754: "â¤ī¸", 61577: "â¤ī¸", 61578: "â¤ī¸â¤ī¸", 59841: "â", 61579: "â", 61581: "â¨", 59763: "đĄ", 59764: "âĄ", 59736: "đŠ", 59848: "đˇī¸", 59760: "đ", 59757: "â", 59770: "đ", 59862: "đ", 59489: "đ", 59511: "â¨", 59771: "đĒ", 59793: "đī¸", 59798: "âī¸", 59794: "đ", 59824: "âī¸", 59772: "đ", 59685: "đ", 59716: "đ¨", 59748: "đ¨", 59870: "đ§", 59743: "âī¸", 59825: "đĒ", 59859: "đī¸", 59866: "đ§", 59789: "â", 59827: "đ", 59815: "đ", 59660: "đŠš", 59843: "đŠē", 61551: "đˇ", 59657: "âī¸", 59684: "đą", 59728: "đļ", 61554: "đģ", 61555: "đ¯", 61556: "đĩ", 61557: "đ", 61558: "đ", 61559: "đ", 61560: "đ", 61561: "đ", 61562: "đ", 61563: "đ", 61564: "đ", 59651: "đŊ", 61565: "đž", 61566: "đ¤", 61567: "đģ", 61568: "đŠ", 61569: "đ", 59796: "đž", 59746: "đ", 59744: "đ", 59666: "đī¸", 59822: "đ", 61444: "đēī¸", 61452: "đ", 61453: "đĻ", 61454: "đĄī¸", 61455: "đ", 61456: "đ", 61573: "đ", 61574: "đ", 61576: "đ", 61457: "đ", 61458: "đ", 61459: "đ", 61460: "đˇ", 61461: "đ", 61464: "đ", 61465: "đ", 61466: "đ", 61582: "đŦ", 61468: "đŦ", 61475: "đ§", 61476: "đ§", 61477: "đ§", 61480: "đģ", 61482: "đē", 61483: "đ", 61484: "đ", 61486: "đą", 61487: "đą", 61488: "đą", 61489: "đą", 61490: "đą", 61491: "đą", 59806: "âŋ", 59801: "đļ", 59800: "đļââī¸đļââī¸", 59799: "đļââī¸đļââī¸đļââī¸", 59437: "đļ", 59812: "đļââī¸", 59808: "đ", 61493: "đ", 61494: "đ", 61495: "đ§", 61496: "đ", 61532: "đ§ ", 61533: "đ§ ", 61534: "đ", 61535: "đ", 61536: "đ", 61537: "đ", 61538: "đ¤Ŗ", 61539: "đ", 61540: "đŦ", 61541: "đ", 61542: "đ", 61543: "đ", 61544: "đ", 61545: "đ", 61546: "đ¤", 59751: "đī¸", 61585: "đī¸", 59857: "đ", 61547: "đ", 61548: "âī¸", 61549: "đ¤", 61550: "đ", 61440: "đ˛", 59650: "â ī¸", 59654: "âŠī¸", 59655: "âĒī¸", 59670: "đ", 59661: "đĻ", 59819: "đ°", 59508: "âļī¸", 59674: "đĻ", 59675: "đĩ", 59696: "âŠī¸", 59705: "âĒī¸", 59693: "âŦī¸", 59707: "âŦī¸", 59692: "âŦī¸", 59708: "âŦī¸", 59699: "âļī¸", 59704: "âĒ", 59702: "â¸ī¸", 59706: "âšī¸", 59695: "âī¸", 59703: "â", 59690: "âī¸", 59700: "â", 59697: "đ¤", 59834: "đ", 61589: "â", 59725: "đ", 59395: "đ˛", 59448: "đļ", 59512: "ÂŖ", 59514: "ÂĨ", 59515: "âŋ", 59709: "â", 59656: "*ī¸âŖ", 59727: "đ", 59791: "đ°", 59739: "đ˛", 59392: "âĻ", 59445: "đ", 61587: "â ", 59405: "đ˛đ˛", 59758: "âžī¸", 59820: "âģī¸", 59767: "đ", 59849: "đ¯", 59816: "đī¸", 59768: "đ", 59769: "đ", 59795: "đ ŋī¸", 59720: "đž", 59830: "âŦī¸âŦī¸", 59786: "âī¸âī¸", 59821: "đ", 59846: "đ", 59832: "đ", 59833: "đī¸", 61583: "đŦ", 59797: "âī¸", 59856: "đĄ", 59853: "đ", 61588: "đĻ", 59459: "âī¸âī¸", 59461: "đ", 59732: "đ°", 59497: "đ°", 59867: "đļ", 61501: "đ˛", 61497: "đĨ", 61498: "đĨ", 61499: "đļ", 61500: "đļ", 61502: "đĩ", 61503: "đĩ", 61504: "đĩ", 61505: "đĩ", 61506: "đĩ", 61507: "đĩ", 61508: "đĩ", 61509: "đĩ", 61510: "đ ", 61511: "đ ", 61512: "â˛ī¸", 61513: "â˛ī¸", 61514: "đ", 61515: "đ", 61518: "đ", 61519: "đĄ", 61520: "âŦ", 61521: "âĢ", 61522: "đˇ", 61523: "đˇ", 61524: "đŧ", 61525: "đ ", 61528: "đĢ", 61529: "đ", 61530: "â", 61531: "đ˛", 59781: "âī¸", }; let shortcuts = query.map((shortcut) => { let glyph = glyphs[shortcut.ZGLYPHNUMBER]; let name = shortcut.ZNAME; let value = shortcut.ZNAME; let html = `<div class="flex flex-row h-full w-full"> <svg width=48 height=48 class="h-full" style="background-color:${ colors[shortcut.ZBACKGROUNDCOLORVALUE]?.RGB }"><text x=12 y=36 font-size=24>${glyph}</text></svg> <div class="flex-1 flex flex-row items-center px-2">${name}</div> </div>`; return { name, value, html }; }); let flags = { view: { name: "View in Shortcuts", }, run: { name: "Run Shortcut", }, }; let shortcut = await arg( { prompt: "Which shortcut would you like to run?", flags }, shortcuts ); await hide(); if (flag?.view) { await exec(`/usr/bin/shortcuts view "${shortcut.trim()}"`); } else { let result = await exec(`/usr/bin/shortcuts run "${shortcut.trim()}" &`); if (result?.stdout) await div(md(`## Output:\n\n${result.stdout}`)); }