UNPKG

penguins-eggs

Version:

A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others

113 lines (112 loc) 4.59 kB
/** * ./src/commands/calamares.ts * penguins-eggs v.10.0.0 / ecmascript 2020 * author: Piero Proietti * email: piero.proietti@gmail.com * license: MIT */ import { Command, Flags } from '@oclif/core'; import fs from 'node:fs'; import path from 'node:path'; import Incubator from '../classes/incubation/incubator.js'; import Pacman from '../classes/pacman.js'; import Settings from '../classes/settings.js'; import Utils from '../classes/utils.js'; export default class Calamares extends Command { static description = 'configure calamares or install or configure it'; static examples = ['sudo eggs calamares', 'sudo eggs calamares --install', 'sudo eggs calamares --install --theme=/path/to/theme', 'sudo eggs calamares --remove']; static flags = { help: Flags.help({ char: 'h' }), install: Flags.boolean({ char: 'i', description: 'install calamares and its dependencies' }), nointeractive: Flags.boolean({ char: 'n', description: 'no user interaction' }), policies: Flags.boolean({ char: 'p', description: 'configure calamares policies' }), release: Flags.boolean({ char: 'r', description: 'release: remove calamares and all its dependencies after the installation' }), remove: Flags.boolean({ description: 'remove calamares and its dependencies' }), theme: Flags.string({ description: 'theme/branding for eggs and calamares' }), verbose: Flags.boolean({ char: 'v' }) }; incubator = {}; remix = {}; settings = {}; async run() { Utils.titles(this.id + ' ' + this.argv); this.settings = new Settings(); const { flags } = await this.parse(Calamares); const { verbose } = flags; const { remove } = flags; const { install } = flags; const { release } = flags; const { nointeractive } = flags; let { policies } = flags; let theme = 'eggs'; if (flags.theme !== undefined) { theme = flags.theme; if (theme.includes('/')) { if (theme.endsWith('/')) { theme = theme.slice(0, Math.max(0, theme.length - 1)); } } else { const wpath = `/home/${await Utils.getPrimaryUser()}/.wardrobe/vendors/`; theme = wpath + flags.theme; } theme = path.resolve(theme); if (!fs.existsSync(theme + '/theme')) { console.log('Cannot find theme: ' + theme); process.exit(); } } console.log(`theme: ${theme}`); let installer = 'krill'; if (Pacman.calamaresExists()) { installer = 'calamares'; } if (Utils.isRoot(this.id)) { if (!nointeractive || (await Utils.customConfirm('Select yes to continue...'))) { if (remove) { if (Pacman.calamaresExists()) { await Pacman.calamaresRemove(); if (await this.settings.load()) { this.settings.config.force_installer = false; this.settings.save(this.settings.config); installer = "krill"; } } process.exit(); } /** * Install */ if (install) { Utils.warning('installing package calamares'); await Pacman.calamaresInstall(); if (await this.settings.load()) { this.settings.config.force_installer = true; this.settings.save(this.settings.config); policies = true; installer = "calamares"; } } } /** * policies */ if (policies) { Utils.warning('configuring calamares policies'); await Pacman.calamaresPolicies(); } /** * configure */ if (await this.settings.load()) { await this.settings.loadRemix(theme); const isClone = false; this.incubator = new Incubator(this.settings.remix, this.settings.distro, this.settings.config.user_opt, theme, isClone, verbose); await this.incubator.config(release); } } else { Utils.useRoot(this.id); } } }