57 lines
2 KiB
TypeScript
57 lines
2 KiB
TypeScript
/*
|
|
* SPDX-License-Identifier: GPL-3.0
|
|
* Vesktop, a desktop app aiming to give you a snappier Discord Experience
|
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
|
*/
|
|
|
|
import { app } from "electron";
|
|
import { existsSync, mkdirSync, renameSync, rmSync, writeFileSync } from "fs";
|
|
import { join } from "path";
|
|
|
|
interface AutoStart {
|
|
isEnabled(): boolean;
|
|
enable(): void;
|
|
disable(): void;
|
|
}
|
|
|
|
function makeAutoStartLinux(): AutoStart {
|
|
const configDir = process.env.XDG_CONFIG_HOME || join(process.env.HOME!, ".config");
|
|
const dir = join(configDir, "autostart");
|
|
const file = join(dir, "vesktop.desktop");
|
|
|
|
// IM STUPID
|
|
const legacyName = join(dir, "vencord.desktop");
|
|
if (existsSync(legacyName)) renameSync(legacyName, file);
|
|
|
|
// "Quoting must be done by enclosing the argument between double quotes and escaping the double quote character,
|
|
// backtick character ("`"), dollar sign ("$") and backslash character ("\") by preceding it with an additional backslash character"
|
|
// https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html#exec-variables
|
|
const commandLine = process.argv.map(arg => '"' + arg.replace(/["$`\\]/g, "\\$&") + '"').join(" ");
|
|
|
|
return {
|
|
isEnabled: () => existsSync(file),
|
|
enable() {
|
|
const desktopFile = `
|
|
[Desktop Entry]
|
|
Type=Application
|
|
Name=Vesktop
|
|
Comment=Vesktop autostart script
|
|
Exec=${commandLine}
|
|
StartupNotify=false
|
|
Terminal=false
|
|
`.trim();
|
|
|
|
mkdirSync(dir, { recursive: true });
|
|
writeFileSync(file, desktopFile);
|
|
},
|
|
disable: () => rmSync(file, { force: true })
|
|
};
|
|
}
|
|
|
|
const autoStartWindowsMac: AutoStart = {
|
|
isEnabled: () => app.getLoginItemSettings().openAtLogin,
|
|
enable: () => app.setLoginItemSettings({ openAtLogin: true }),
|
|
disable: () => app.setLoginItemSettings({ openAtLogin: false })
|
|
};
|
|
|
|
export const autoStart = process.platform === "linux" ? makeAutoStartLinux() : autoStartWindowsMac;
|