prepared dot files

This commit is contained in:
2026-07-04 23:48:24 +02:00
commit 913ebaab14
26 changed files with 1103 additions and 0 deletions
+51
View File
@@ -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.");
}