prepared dot files
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import * as p from "@clack/prompts";
|
||||
import { groups, packages, toDirs } from "./packages.js";
|
||||
import {
|
||||
backupConflicts,
|
||||
ensureYay,
|
||||
ensureZsh,
|
||||
installPackages,
|
||||
stow,
|
||||
writeState,
|
||||
} from "./stow.js";
|
||||
|
||||
export async function install() {
|
||||
p.intro("Hyprland dotfiles install");
|
||||
|
||||
ensureYay();
|
||||
|
||||
const chosen = new Set(packages.filter((pkg) => pkg.tier === "required").map((pkg) => pkg.name));
|
||||
|
||||
for (const group of groups) {
|
||||
const options = packages.filter((pkg) => pkg.group === group);
|
||||
const pick = await p.select({
|
||||
message: `Choose a ${group}`,
|
||||
options: options.map((pkg) => ({ value: pkg.name, label: pkg.name })),
|
||||
});
|
||||
if (p.isCancel(pick)) return p.cancel("Install cancelled.");
|
||||
chosen.add(pick as string);
|
||||
}
|
||||
|
||||
const ungrouped = packages.filter((pkg) => pkg.tier === "recommended" && !pkg.group);
|
||||
const picks = await p.multiselect({
|
||||
message: "Choose recommended packages",
|
||||
options: ungrouped.map((pkg) => ({ value: pkg.name, label: pkg.name })),
|
||||
initialValues: ungrouped.map((pkg) => pkg.name),
|
||||
required: false,
|
||||
});
|
||||
if (p.isCancel(picks)) return p.cancel("Install cancelled.");
|
||||
for (const name of picks as string[]) chosen.add(name);
|
||||
|
||||
installPackages([...chosen]);
|
||||
|
||||
if (chosen.has("zsh")) ensureZsh();
|
||||
|
||||
const dirs = toDirs([...chosen]);
|
||||
const backupDir = backupConflicts(dirs);
|
||||
if (backupDir) p.log.info(`Backed up conflicting files to ${backupDir}`);
|
||||
|
||||
stow(dirs);
|
||||
writeState({ dirs });
|
||||
|
||||
p.outro("Done.");
|
||||
}
|
||||
Reference in New Issue
Block a user