1
Fork 0
dotfiles/.bauke/scripts/codium-extensions.ts

65 lines
2.0 KiB
TypeScript

import { Command } from "./dependencies.ts";
import { runAndReturnStdout, runCommand } from "./utilities.ts";
async function main(): Promise<void> {
const { options } = await new Command()
.name("codium-extensions")
.description("Small managing utility for VS Codium extensions!")
.option(
"-f, --file <file:file>",
"The file to use for storing data.",
{
default:
new URL("../data/codium-extensions.txt", import.meta.url).pathname,
},
)
.option("--install", "Install saved extensions.")
.option("--list", "List installed extensions.")
.option("--list-saved", "List saved extensions.")
.option("--save", "Save installed extensions.")
.parse(Deno.args);
if (options.install) {
const extensions = await getSavedExtensions(options.file);
await runCommand("codium", {
args: [
...extensions.flatMap((id) => ["--install-extension", id]),
],
});
}
if (options.list) {
const extensions = await getInstalledExtensions();
console.log(extensions.join("\n"));
}
if (options.listSaved) {
const extensions = await getSavedExtensions(options.file);
console.log(extensions.join("\n"));
}
if (options.save) {
const extensions = await getInstalledExtensions();
await Deno.writeTextFile(options.file, extensions.join("\n") + "\n");
console.log(`Wrote ${extensions.length} extensions to ${options.file}`);
}
}
/** Run `codium --list-extensions` and return all the extensions as an array. */
async function getInstalledExtensions(): Promise<string[]> {
const extensions = await runAndReturnStdout("codium", {
args: ["--list-extensions"],
});
return extensions.trim().split("\n");
}
/** Get all the saved extensions from the codium-extensions data file. */
async function getSavedExtensions(file: string): Promise<string[]> {
const extensions = await Deno.readTextFile(file);
return extensions.trim().split("\n");
}
if (import.meta.main) {
void main();
}