penguins-eggs
Version:
A remaster system tool, compatible with Arch, Debian, Devuan, Ubuntu and others
195 lines (194 loc) • 9.51 kB
JavaScript
/**
* ./src/classes/ovary.d/create-xdg-autostart.ts
* penguins-eggs v.10.0.0 / ecmascript 2020
* author: Piero Proietti
* email: piero.proietti@gmail.com
* license: MIT
*/
// packages
import fs from 'node:fs';
import path from 'node:path';
import shx from 'shelljs';
import Pacman from '../pacman.js';
import Utils from '../utils.js';
import Xdg from '../xdg.js';
import { exec } from '../../lib/utils.js';
import PveLive from '../pve-live.js';
// _dirname
const __dirname = path.dirname(new URL(import.meta.url).pathname);
/**
*
*/
export async function createXdgAutostart(theme = 'eggs', myAddons, myLinks = [], noicons = false) {
if (this.verbose) {
console.log('Ovary: createXdgAutostart');
}
const pathHomeLive = `/home/${this.settings.config.user_opt}`;
// VOGLIO le icone
// Copia icona penguins-eggs
shx.cp(path.resolve(__dirname, '../../../assets/eggs.png'), '/usr/share/icons/');
shx.cp(path.resolve(__dirname, '../../../assets/krill.svg'), '/usr/share/icons/');
shx.cp(path.resolve(__dirname, '../../../assets/leaves.svg'), '/usr/share/icons/');
/**
* creazione dei link in /usr/share/applications
*/
shx.cp(path.resolve(__dirname, '../../../assets/penguins-eggs.desktop'), '/usr/share/applications/');
/**
* Scrivania/install-system.desktop
*/
let installerLink = 'install-system.desktop';
if (Pacman.calamaresExists()) {
/**
* Replace Exec in install-system.desktop per Biglinux e Bigcommunity
*/
if (this.settings.distro.distroId === 'Biglinux' || this.settings.distro.distroId === 'Bigcommunity') {
let installSystemDesktop = path.resolve(__dirname, `../../../addons/${theme}/theme/applications/install-system.desktop`);
await exec(`sed -i 's|^Exec=.*|Exec=/usr/bin/calamares_polkit %f|' ${installSystemDesktop}`);
}
shx.cp(path.resolve(__dirname, `../../../addons/${theme}/theme/applications/install-system.desktop`), `${this.settings.work_dir.merged}/usr/share/applications/`);
}
else if (Pacman.packageIsInstalled('live-installer')) {
/**
* LMD£ live-installer
*/
const policySource = path.resolve(__dirname, '../../../assets/live-installer/com.github.pieroproietti.penguins-eggs.policy');
const policyDest = '/usr/share/polkit-1/actions/com.github.pieroproietti.penguins-eggs.policy';
shx.cp(policySource, policyDest);
await exec(`sed -i 's/auth_admin/yes/' ${policyDest}`);
// carico in filesystem.live packages-remove
shx.cp(path.resolve(__dirname, '../../../assets/live-installer/filesystem.packages-remove'), `${this.settings.iso_work}/live/`);
shx.touch(`${this.settings.iso_work}/live/filesystem.packages`);
installerLink = 'penguins-live-installer.desktop';
shx.cp(path.resolve(__dirname, '../../../assets/penguins-live-installer.desktop'), `${this.settings.work_dir.merged}/usr/share/applications/`);
}
else if (Pacman.packageIsInstalled('ubiquity')) {
/**
* UBUNTU ubiquity
*/
const policySource = path.resolve(__dirname, '../../../assets/ubiquity-installer/com.github.pieroproietti.penguins-eggs.policy');
const policyDest = '/usr/share/polkit-1/actions/com.github.pieroproietti.penguins-eggs.policy';
shx.cp(policySource, policyDest);
await exec(`sed -i 's/auth_admin/yes/' ${policyDest}`);
// carico in filesystem.live packages-remove
shx.cp(path.resolve(__dirname, '../../../assets/ubiquity-installer/filesystem.packages-remove'), `${this.settings.iso_work}/live/`);
shx.touch(`${this.settings.iso_work}/live/filesystem.packages`);
installerLink = 'penguins-ubiquity-installer.desktop';
shx.cp(path.resolve(__dirname, '../../../assets/penguins-ubiquity-installer.desktop'), `${this.settings.work_dir.merged}/usr/share/applications/`);
}
else {
installerLink = 'penguins-krill.desktop';
shx.cp(path.resolve(__dirname, '../../../assets/penguins-krill.desktop'), `${this.settings.work_dir.merged}/usr/share/applications/`);
}
/**
* flags
*/
// adapt
if (myAddons.adapt) {
const dirAddon = path.resolve(__dirname, '../../../addons/eggs/adapt/');
shx.cp(`${dirAddon}/applications/eggs-adapt.desktop`, `${this.settings.work_dir.merged}/usr/share/applications/`);
}
// pve
if (myAddons.pve) {
/**
* create service pve-live
*/
const pve = new PveLive();
pve.create(this.settings.work_dir.merged);
/**
* adding a desktop link for pve
*/
const dirAddon = path.resolve(__dirname, '../../../addons/eggs/pve');
shx.cp(`${dirAddon}/artwork/eggs-pve.png`, `${this.settings.work_dir.merged}/usr/share/icons/`);
shx.cp(`${dirAddon}/applications/eggs-pve.desktop`, `${this.settings.work_dir.merged}/usr/share/applications/`);
}
// rsupport
if (myAddons.rsupport) {
const dirAddon = path.resolve(__dirname, '../../../addons/eggs/rsupport');
shx.cp(`${dirAddon}/applications/eggs-rsupport.desktop`, `${this.settings.work_dir.merged}/usr/share/applications/`);
shx.cp(`${dirAddon}/artwork/eggs-rsupport.png`, `${this.settings.work_dir.merged}/usr/share/icons/`);
}
/**
* configuro add-penguins-desktop-icons in /etc/xdg/autostart
*/
const dirAutostart = `${this.settings.work_dir.merged}/etc/xdg/autostart`;
if (fs.existsSync(dirAutostart)) {
// Creo l'avviatore xdg: DEVE essere add-penguins-links.desktop
shx.cp(path.resolve(__dirname, '../../../assets/penguins-links-add.desktop'), dirAutostart);
// create /usr/bin/penguins-links-add.sh
const script = '/usr/bin/penguins-links-add.sh';
let text = '';
text += '#!/bin/sh\n';
text += 'DESKTOP=$(xdg-user-dir DESKTOP)\n';
text += 'while [ ! -d "$DESKTOP" ]; do\n';
text += ' DESKTOP=$(xdg-user-dir DESKTOP)\n';
text += ' sleep 1\n';
text += 'done\n';
text += `cp /usr/share/applications/${installerLink} "$DESKTOP"\n`;
if (Pacman.packageIsInstalled('lxde-core')) {
if (!noicons) {
text += lxdeLink('penguins-eggs.desktop', "Penguins' eggs", 'eggs');
}
if (myAddons.adapt)
text += lxdeLink('eggs-adapt.desktop', 'Adapt', 'video-display');
if (myAddons.pve)
text += lxdeLink('eggs-pve.desktop', 'Proxmox VE', 'proxmox-ve');
if (myAddons.rsupport)
text += lxdeLink('eggs-rsupport.desktop', 'Remote assistance', 'remote-assistance');
}
else {
if (!noicons) {
text += 'cp /usr/share/applications/penguins-eggs.desktop "$DESKTOP"\n';
}
if (myLinks.length > 0) {
for (const link of myLinks) {
text += `cp /usr/share/applications/${link}.desktop "$DESKTOP"\n`;
}
}
if (myAddons.adapt)
text += 'cp /usr/share/applications/eggs-adapt.desktop "$DESKTOP"\n';
if (myAddons.pve)
text += 'cp /usr/share/applications/eggs-pve.desktop "$DESKTOP"\n';
if (myAddons.rsupport)
text += 'cp /usr/share/applications/eggs-rsupport.desktop "$DESKTOP"\n';
}
/**
* enable desktop links
*/
if (Pacman.packageIsInstalled('gdm3') || Pacman.packageIsInstalled('gdm')) {
// GNOME
text += 'test -f /usr/share/applications/penguins-eggs.desktop && cp /usr/share/applications/penguins-eggs.desktop "$DESKTOP"\n';
text += 'test -f "$DESKTOP"/op && chmod a+x "$DESKTOP"/penguins-eggs.desktop\n';
text += 'test -f "$DESKTOP"/penguins-eggs.desktop && gio set "$DESKTOP"/penguins-eggs.desktop metadata::trusted true\n';
text += `test -f /usr/share/applications/${installerLink} && cp /usr/share/applications/${installerLink} "$DESKTOP"\n`;
text += `test -f "$DESKTOP"/${installerLink} && chmod a+x "$DESKTOP"/${installerLink}\n`;
text += `test -f "$DESKTOP"/${installerLink} && gio set "$DESKTOP"/${installerLink} metadata::trusted true\n`;
}
else if (Pacman.packageIsInstalled('xfce4-session')) {
text += `# xfce: enable-desktop-links\n`;
text += `for f in "$DESKTOP"/*.desktop; do chmod +x "$f"; gio set -t string "$f" metadata::xfce-exe-checksum "$(sha256sum "$f" | awk '{print $1}')"; done\n`;
}
else {
text += `# others: enable-desktop-links\n`;
text += 'chmod +x "$DESKTOP"/*.desktop\n';
}
fs.writeFileSync(script, text, 'utf8');
await exec(`chmod a+x ${script}`, this.echo);
}
await Xdg.autologin(await Utils.getPrimaryUser(), this.settings.config.user_opt, this.settings.work_dir.merged);
}
/**
* Creazione link desktop per lxde
* @param name
* @param icon
* was private
*/
function lxdeLink(file, name, icon) {
const lnk = `lnk-${file}`;
let text = '';
text += `echo "[Desktop Entry]" >$DESKTOP/${lnk}\n`;
text += `echo "Type=Link" >> $DESKTOP/${lnk}\n`;
text += `echo "Name=${name}" >> $DESKTOP/${lnk}\n`;
text += `echo "Icon=${icon}" >> $DESKTOP/${lnk}\n`;
text += `echo "URL=/usr/share/applications/${file}" >> $DESKTOP/${lnk}\n\n`;
return text;
}