Created
September 3, 2024 09:38
-
-
Save Ambushfall/f1ea4d5dbd50cb4ba5310ee2e965d9fa to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Preview: docs | |
// Menu: Open Project | |
// Description: Opens a project in vscode | |
// Shortcut: command shift . | |
import "@johnlindquist/kit"; | |
import * as fs from "fs" | |
const envPath = await env('PROJECT_DIR'); | |
const projectDir = home(envPath); | |
const unfilteredProjectList = await readdir(projectDir); | |
const projectList = unfilteredProjectList.filter(value => !value.includes('.')); | |
let { projects, write } = await db("projects", { | |
projects: projectList, | |
}) | |
projects.forEach(async val => { | |
if (val.includes('.')) { | |
projects.pop(val); | |
await write() | |
} | |
}) | |
projectList.forEach(async value => { | |
if (!projects.includes(value)) { | |
projects.push(value); | |
await write() | |
} | |
}) | |
onTab("Open", async () => { | |
let project = await arg("Open project:", projects.map(project => project.split('\\').pop())) | |
edit('', path.resolve(projectDir, project)) | |
}) | |
onTab("Add Path", async () => { | |
while (true) { | |
let project = await arg( | |
"Add path to project:", | |
md(projects.map(project => `* ${project.split('\\').pop()}`).join("\n")) | |
) | |
projects.push(project) | |
await write() | |
} | |
}) | |
onTab("Remove", async () => { | |
while (true) { | |
let project = await arg("Open project:", projects.map(project => project.split('\\').pop())) | |
let del = await arg(`Delete project dir: ${project}?`, ["yes", "no"]) | |
if (del === "yes") { | |
fs.rmSync(path.resolve(projectDir, project), { recursive: true, force: true }); | |
} | |
project.split(':').length > 1 ? await rm(path.resolve(project)) : await rm(path.resolve(projectDir, project)) | |
let indexOfProject = projects.indexOf(project) | |
projects.splice(indexOfProject, 1) | |
await write() | |
} | |
}) | |
onTab("New Project", async () => { | |
while (true) { | |
let project = await arg( | |
{ | |
placeholder: "Create new project:", debounceInput: 400, | |
enter: "Create", validate: async (input) => { | |
const dir = path.resolve(projectDir, input) | |
const exists = await isDir(dir); | |
if (exists) { | |
return `${input} already exists`; | |
} else { | |
const { code, stderr, stdout } = mkdir(dir); | |
if(stderr){ | |
throw stderr; | |
} | |
} | |
const initorNot = await arg("Create git repo?", ["yes", "no"]) | |
if (initorNot === "yes") { | |
cd(dir); | |
execLog("git init"); | |
} | |
edit('', dir) | |
return true; | |
} | |
}, | |
) | |
projects.push(project) | |
mkdir(path.resolve(projectDir, project)) | |
await write() | |
} | |
}) | |
// Test gitpush |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment