Open install-with-homebrew in Script Kit
// Name: Install with Homebrew// Description: Install a package using Homebrew// Author: Nickolas Høyer-Larsen// Version: 1.0import { exec as execRaw } from "node:child_process";import { promisify } from "node:util";import "@johnlindquist/kit";const exec = promisify(execRaw);type InfoType = {name?: string;description?: string;version?: string;fromUrl?: string;projectUrl?: string;analytics?: string;artifacts?: string;installed?: boolean;};const extractExtraDetails = (input) => ({version: (input.match(/==> [\w\s]+: ([\d.]+)/i) || [null])[1] || null,fromUrl: (input.match(/From: (https?:\/\/[^\s]+)/i) || [null])[1] || null,projectUrl: (input.match(/https?:\/\/[^\s]+/i) || [])[0] || null,installed: !input.includes("Not installed")});function parseToJSON(input): InfoType {const result = input.split("\n").reduce((acc, line) => {if (line.startsWith("==>")) {acc.currentKey = line.replace("==>", "").trim().toLowerCase();acc[acc.currentKey] = "";} else if (acc.currentKey) {acc[acc.currentKey] += ` ${line.trim()}`;}return acc;}, {});Object.keys(result).forEach(key => {result[key] = result[key].trim();});return { ...result, ...extractExtraDetails(input) };}const packageName = await arg("Package name", div(`<h1>Install a Homebrew Package</h1><p class="text-sm font-normal">Enter the name of the package you want to install.<br> You will see package details and be asked for confirmation before the installation proceeds.</p>`, "p-4"));const { stdout: infoStdOut } = await exec(`PATH="/opt/homebrew/bin:$PATH" brew info ${packageName}`,);const info = parseToJSON(infoStdOut);if (info.installed) {setTimeout(() => {exit();}, 3000);await div(md(`## Package is already installed.Exiting in 3 seconds...`));}const shouldInstall = await div({html: `${info.name ? `<h1><strong>${info.name}</strong> (${info.version})</h1>` : ""}${info.version ? `<a href="${info.projectUrl}">${info.projectUrl}</a>` : ""}${info.description ? `<p>${info.description}</p>` : ""}${info.fromUrl ? `<p><strong>From:</strong> ${info.fromUrl}</p>` : ""}${md(`### Do you want to install this package?* [Yes](submit:yes)* [No](submit:no)`)}`.trim(),},"p-8",);if (shouldInstall === "yes") {await term(`PATH="/opt/homebrew/bin:$PATH" brew install ${packageName} && exit`,);setTimeout(() => {exit();}, 3000);await div(md(`## Package has been succesfully installed!Exiting in 3 seconds...`));}