Merge branch 'main' into updater-init
This commit is contained in:
commit
a269389766
17 changed files with 179 additions and 61 deletions
6
.env.example
Normal file
6
.env.example
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# githubs api has a rate limit of 60/h if not authorised.
|
||||||
|
# you may quickly hit that and get rate limited. To counteract this, you can provide a github token
|
||||||
|
# here and it will be used. To do so, create a token at the following links and just leave
|
||||||
|
# all permissions at the defaults (public repos read only, 0 permissions):
|
||||||
|
# https://github.com/settings/personal-access-tokens/new
|
||||||
|
GITHUB_TOKEN=
|
60
.github/workflows/release.yml
vendored
60
.github/workflows/release.yml
vendored
|
@ -1,42 +1,42 @@
|
||||||
name: Release
|
name: Release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
tags:
|
tags:
|
||||||
- v*
|
- v*
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release:
|
release:
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, ubuntu-latest, windows-latest]
|
os: [macos-latest, ubuntu-latest, windows-latest]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out Git repository
|
- name: Check out Git repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 18
|
node-version: 18
|
||||||
|
|
||||||
- name: Run Electron Builder
|
- name: Run Electron Builder
|
||||||
uses: samuelmeuli/action-electron-builder@e4b12cd06ddf023422f1ac4e39632bd76f6e6928
|
uses: samuelmeuli/action-electron-builder@e4b12cd06ddf023422f1ac4e39632bd76f6e6928
|
||||||
with:
|
with:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
RELEASE: true
|
RELEASE: true
|
||||||
|
|
||||||
- name: Update AUR package
|
- name: Update AUR package
|
||||||
if: ${{ matrix.os == 'ubuntu-latest' }}
|
if: ${{ matrix.os == 'ubuntu-latest' }}
|
||||||
run: |
|
run: |
|
||||||
sudo apt install makepkg
|
sudo apt install makepkg
|
||||||
|
|
||||||
echo $SSH_KEY > ~/.ssh/aur
|
echo $SSH_KEY > ~/.ssh/aur
|
||||||
echo $SSH_PUB_KEY > ~/.ssh/aur.pub
|
echo $SSH_PUB_KEY > ~/.ssh/aur.pub
|
||||||
export GIT_SSH_COMMAND="ssh -i ~/.ssh/aur"
|
export GIT_SSH_COMMAND="ssh -i ~/.ssh/aur"
|
||||||
|
|
||||||
./scripts/aur_bump.sh
|
./scripts/aur_bump.sh
|
||||||
with:
|
env:
|
||||||
SSH_KEY: ${{ secrets.AUR_SSH_KEY }}
|
SSH_KEY: ${{ secrets.AUR_SSH_KEY }}
|
||||||
SSH_PUB_KEY: ${{ secrets.AUR_SSH_PUB_KEY }}
|
SSH_PUB_KEY: ${{ secrets.AUR_SSH_PUB_KEY }}
|
||||||
|
|
32
.github/workflows/test.yml
vendored
Normal file
32
.github/workflows/test.yml
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
name: test
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: pnpm/action-setup@v2 # Install pnpm using packageManager key in package.json
|
||||||
|
|
||||||
|
- name: Use Node.js 18
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
cache: "pnpm"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: pnpm test
|
||||||
|
|
||||||
|
- name: Test if it compiles
|
||||||
|
run: |
|
||||||
|
pnpm build
|
||||||
|
pnpm build --dev
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
dist
|
dist
|
||||||
node_modules
|
node_modules
|
||||||
|
.env
|
||||||
|
|
11
package.json
11
package.json
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "VencordDesktop",
|
"name": "VencordDesktop",
|
||||||
"version": "0.1.3",
|
"version": "0.1.5",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "",
|
"description": "",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
@ -10,13 +10,14 @@
|
||||||
"main": "dist/js/main.js",
|
"main": "dist/js/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsx scripts/build/build.mts",
|
"build": "tsx scripts/build/build.mts",
|
||||||
|
"build:dev": "pnpm build --dev",
|
||||||
"package": "pnpm build && electron-builder",
|
"package": "pnpm build && electron-builder",
|
||||||
"package:dir": "pnpm build && electron-builder --dir",
|
"package:dir": "pnpm build && electron-builder --dir",
|
||||||
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
|
"lint": "eslint . --ext .js,.jsx,.ts,.tsx,.mts,.mjs",
|
||||||
"lint:fix": "pnpm lint --fix",
|
"lint:fix": "pnpm lint --fix",
|
||||||
"start": "pnpm build && electron .",
|
"start": "pnpm build && electron .",
|
||||||
"start:dev": "pnpm build --dev && electron .",
|
"start:dev": "pnpm build:dev && electron .",
|
||||||
"start:watch": "tsx scripts/startWatch.mts",
|
"start:watch": "pnpm build:dev && tsx scripts/startWatch.mts",
|
||||||
"test": "pnpm lint && pnpm testTypes",
|
"test": "pnpm lint && pnpm testTypes",
|
||||||
"testTypes": "tsc --noEmit",
|
"testTypes": "tsc --noEmit",
|
||||||
"watch": "pnpm build --watch"
|
"watch": "pnpm build --watch"
|
||||||
|
@ -26,6 +27,7 @@
|
||||||
"@types/react": "^18.0.33",
|
"@types/react": "^18.0.33",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.57.1",
|
"@typescript-eslint/eslint-plugin": "^5.57.1",
|
||||||
"@typescript-eslint/parser": "^5.57.1",
|
"@typescript-eslint/parser": "^5.57.1",
|
||||||
|
"dotenv": "^16.0.3",
|
||||||
"electron": "^23.2.0",
|
"electron": "^23.2.0",
|
||||||
"electron-builder": "^23.6.0",
|
"electron-builder": "^23.6.0",
|
||||||
"esbuild": "^0.17.14",
|
"esbuild": "^0.17.14",
|
||||||
|
@ -79,7 +81,6 @@
|
||||||
"category": "Network"
|
"category": "Network"
|
||||||
},
|
},
|
||||||
"nsis": {
|
"nsis": {
|
||||||
"allowToChangeInstallationDirectory": true,
|
|
||||||
"include": "build/installer.nsh",
|
"include": "build/installer.nsh",
|
||||||
"oneClick": false
|
"oneClick": false
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,9 @@ devDependencies:
|
||||||
'@typescript-eslint/parser':
|
'@typescript-eslint/parser':
|
||||||
specifier: ^5.57.1
|
specifier: ^5.57.1
|
||||||
version: 5.57.1(eslint@8.38.0)(typescript@5.0.2)
|
version: 5.57.1(eslint@8.38.0)(typescript@5.0.2)
|
||||||
|
dotenv:
|
||||||
|
specifier: ^16.0.3
|
||||||
|
version: 16.0.3
|
||||||
electron:
|
electron:
|
||||||
specifier: ^23.2.0
|
specifier: ^23.2.0
|
||||||
version: 23.2.0
|
version: 23.2.0
|
||||||
|
@ -1390,6 +1393,11 @@ packages:
|
||||||
resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
|
resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
|
||||||
dev: true
|
dev: true
|
||||||
|
|
||||||
|
/dotenv@16.0.3:
|
||||||
|
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
dev: true
|
||||||
|
|
||||||
/dotenv@9.0.2:
|
/dotenv@9.0.2:
|
||||||
resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
|
resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
|
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
||||||
|
*/
|
||||||
|
|
||||||
export const VencordFragment = /* #__PURE__*/ Symbol.for("react.fragment");
|
export const VencordFragment = /* #__PURE__*/ Symbol.for("react.fragment");
|
||||||
export let VencordCreateElement =
|
export let VencordCreateElement = (...args) =>
|
||||||
(...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args);
|
(VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args);
|
||||||
|
|
11
scripts/start.ts
Normal file
11
scripts/start.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
|
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
||||||
|
*/
|
||||||
|
|
||||||
|
import "./utils/dotenv";
|
||||||
|
|
||||||
|
import { spawnNodeModuleBin } from "./utils/spawn.mjs";
|
||||||
|
|
||||||
|
spawnNodeModuleBin("electron", ["."]);
|
|
@ -1,15 +1,10 @@
|
||||||
import { spawn as cpSpawn, SpawnOptions } from "child_process";
|
/*
|
||||||
import { join } from "path";
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
|
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
||||||
|
*/
|
||||||
|
|
||||||
const EXT = process.platform === "win32" ? ".cmd" : "";
|
import "./start";
|
||||||
|
|
||||||
const OPTS: SpawnOptions = {
|
import { spawnNodeModuleBin } from "./utils/spawn.mjs";
|
||||||
stdio: "inherit",
|
spawnNodeModuleBin("tsx", ["scripts/build/build.mts", "--", "--watch", "--dev"]);
|
||||||
};
|
|
||||||
|
|
||||||
function spawn(bin: string, args: string[]) {
|
|
||||||
cpSpawn(join("node_modules", ".bin", bin + EXT), args, OPTS);
|
|
||||||
}
|
|
||||||
|
|
||||||
spawn("tsx", ["scripts/build/build.mts", "--", "--watch", "--dev"]);
|
|
||||||
spawn("electron", ["."]);
|
|
||||||
|
|
9
scripts/utils/dotenv.ts
Normal file
9
scripts/utils/dotenv.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
|
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { config } from "dotenv";
|
||||||
|
|
||||||
|
config();
|
18
scripts/utils/spawn.mts
Normal file
18
scripts/utils/spawn.mts
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0
|
||||||
|
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
|
||||||
|
* Copyright (c) 2023 Vendicated and Vencord contributors
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { spawn as spaaawn, SpawnOptions } from "child_process";
|
||||||
|
import { join } from "path";
|
||||||
|
|
||||||
|
const EXT = process.platform === "win32" ? ".cmd" : "";
|
||||||
|
|
||||||
|
const OPTS: SpawnOptions = {
|
||||||
|
stdio: "inherit"
|
||||||
|
};
|
||||||
|
|
||||||
|
export function spawnNodeModuleBin(bin: string, args: string[]) {
|
||||||
|
spaaawn(join("node_modules", ".bin", bin + EXT), args, OPTS);
|
||||||
|
}
|
|
@ -14,7 +14,8 @@ export const VENCORD_SETTINGS_FILE = join(VENCORD_SETTINGS_DIR, "settings.json")
|
||||||
|
|
||||||
// needs to be inline require because of circular dependency
|
// needs to be inline require because of circular dependency
|
||||||
// as otherwise "DATA_DIR" (which is used by ./settings) will be uninitialised
|
// as otherwise "DATA_DIR" (which is used by ./settings) will be uninitialised
|
||||||
export const VENCORD_FILES_DIR = require("./settings").Settings.vencordDir || join(DATA_DIR, "vencordDist");
|
export const VENCORD_FILES_DIR =
|
||||||
|
(require("./settings") as typeof import("./settings")).Settings.store.vencordDir || join(DATA_DIR, "vencordDist");
|
||||||
|
|
||||||
export const USER_AGENT = `VencordDesktop/${app.getVersion()} (https://github.com/Vencord/Electron)`;
|
export const USER_AGENT = `VencordDesktop/${app.getVersion()} (https://github.com/Vencord/Electron)`;
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ import { makeLinksOpenExternally } from "./utils/makeLinksOpenExternally";
|
||||||
import { downloadVencordFiles } from "./utils/vencordLoader";
|
import { downloadVencordFiles } from "./utils/vencordLoader";
|
||||||
|
|
||||||
let isQuitting = false;
|
let isQuitting = false;
|
||||||
|
let tray: Tray;
|
||||||
|
|
||||||
app.on("before-quit", () => {
|
app.on("before-quit", () => {
|
||||||
isQuitting = true;
|
isQuitting = true;
|
||||||
|
@ -62,7 +63,7 @@ function initTray(win: BrowserWindow) {
|
||||||
}
|
}
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const tray = new Tray(ICON_PATH);
|
tray = new Tray(ICON_PATH);
|
||||||
tray.setToolTip("Vencord Desktop");
|
tray.setToolTip("Vencord Desktop");
|
||||||
tray.setContextMenu(trayMenu);
|
tray.setContextMenu(trayMenu);
|
||||||
tray.on("click", () => win.show());
|
tray.on("click", () => win.show());
|
||||||
|
@ -213,6 +214,10 @@ function initWindowBoundsListeners(win: BrowserWindow) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function initSettingsListeners(win: BrowserWindow) {
|
function initSettingsListeners(win: BrowserWindow) {
|
||||||
|
Settings.addChangeListener("tray", enable => {
|
||||||
|
if (enable) initTray(win);
|
||||||
|
else tray?.destroy();
|
||||||
|
});
|
||||||
Settings.addChangeListener("disableMinSize", disable => {
|
Settings.addChangeListener("disableMinSize", disable => {
|
||||||
if (disable) {
|
if (disable) {
|
||||||
// 0 no work
|
// 0 no work
|
||||||
|
@ -227,6 +232,16 @@ function initSettingsListeners(win: BrowserWindow) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
VencordSettings.addChangeListener("macosTranslucency", enabled => {
|
||||||
|
if (enabled) {
|
||||||
|
win.setVibrancy("sidebar");
|
||||||
|
win.setBackgroundColor("#ffffff00");
|
||||||
|
} else {
|
||||||
|
win.setVibrancy(null);
|
||||||
|
win.setBackgroundColor("#ffffff");
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function createMainWindow() {
|
export function createMainWindow() {
|
||||||
|
@ -242,11 +257,17 @@ export function createMainWindow() {
|
||||||
},
|
},
|
||||||
icon: ICON_PATH,
|
icon: ICON_PATH,
|
||||||
frame: VencordSettings.store.frameless !== true,
|
frame: VencordSettings.store.frameless !== true,
|
||||||
|
...(VencordSettings.store.macosTranslucency
|
||||||
|
? {
|
||||||
|
vibrancy: "sidebar",
|
||||||
|
backgroundColor: "#ffffff00"
|
||||||
|
}
|
||||||
|
: {}),
|
||||||
...getWindowBoundsOptions()
|
...getWindowBoundsOptions()
|
||||||
}));
|
}));
|
||||||
|
|
||||||
win.on("close", e => {
|
win.on("close", e => {
|
||||||
if (isQuitting || Settings.store.minimizeToTray === false) return;
|
if (isQuitting || Settings.store.minimizeToTray === false || Settings.store.tray === false) return;
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
win.hide();
|
win.hide();
|
||||||
|
@ -255,7 +276,7 @@ export function createMainWindow() {
|
||||||
});
|
});
|
||||||
|
|
||||||
initWindowBoundsListeners(win);
|
initWindowBoundsListeners(win);
|
||||||
initTray(win);
|
if (Settings.store.tray ?? true) initTray(win);
|
||||||
initMenuBar(win);
|
initMenuBar(win);
|
||||||
makeLinksOpenExternally(win);
|
makeLinksOpenExternally(win);
|
||||||
initSettingsListeners(win);
|
initSettingsListeners(win);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { existsSync, mkdirSync } from "fs";
|
import { existsSync, mkdirSync } from "fs";
|
||||||
|
import type { RequestOptions } from "https";
|
||||||
import { join } from "path";
|
import { join } from "path";
|
||||||
|
|
||||||
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants";
|
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants";
|
||||||
|
@ -25,12 +26,16 @@ export interface ReleaseData {
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function githubGet(endpoint: string) {
|
export async function githubGet(endpoint: string) {
|
||||||
return simpleGet(API_BASE + endpoint, {
|
const opts: RequestOptions = {
|
||||||
headers: {
|
headers: {
|
||||||
Accept: "application/vnd.github+json",
|
Accept: "application/vnd.github+json",
|
||||||
"User-Agent": USER_AGENT
|
"User-Agent": USER_AGENT
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
|
||||||
|
if (process.env.GITHUB_TOKEN) opts.headers!.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
|
||||||
|
|
||||||
|
return simpleGet(API_BASE + endpoint, opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function downloadVencordFiles() {
|
export async function downloadVencordFiles() {
|
||||||
|
|
|
@ -21,12 +21,14 @@ export default function SettingsUi() {
|
||||||
Button
|
Button
|
||||||
} = Common;
|
} = Common;
|
||||||
|
|
||||||
const switches: [keyof typeof Settings, string, string, boolean?][] = [
|
const switches: [keyof typeof Settings, string, string, boolean?, (() => boolean)?][] = [
|
||||||
|
["tray", "Tray Icon", "Add a tray icon for Vencord Desktop", true],
|
||||||
[
|
[
|
||||||
"minimizeToTray",
|
"minimizeToTray",
|
||||||
"Minimize to tray",
|
"Minimize to tray",
|
||||||
"Hitting X will make Vencord Desktop minimize to the tray instead of closing",
|
"Hitting X will make Vencord Desktop minimize to the tray instead of closing",
|
||||||
true
|
true,
|
||||||
|
() => Settings.tray ?? true
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"disableMinSize",
|
"disableMinSize",
|
||||||
|
@ -62,9 +64,10 @@ export default function SettingsUi() {
|
||||||
|
|
||||||
<FormDivider className={Margins.top16 + " " + Margins.bottom16} />
|
<FormDivider className={Margins.top16 + " " + Margins.bottom16} />
|
||||||
|
|
||||||
{switches.map(([key, text, note, def]) => (
|
{switches.map(([key, text, note, def, predicate]) => (
|
||||||
<FormSwitch
|
<FormSwitch
|
||||||
value={Settings[key] ?? def ?? false}
|
value={(Settings[key] ?? def ?? false) && (!predicate || predicate())}
|
||||||
|
disabled={predicate && !predicate()}
|
||||||
onChange={v => (Settings[key] = v)}
|
onChange={v => (Settings[key] = v)}
|
||||||
note={note}
|
note={note}
|
||||||
key={key}
|
key={key}
|
||||||
|
|
|
@ -9,4 +9,4 @@ import "./fixes";
|
||||||
console.log("read if cute :3");
|
console.log("read if cute :3");
|
||||||
|
|
||||||
export * as Components from "./components";
|
export * as Components from "./components";
|
||||||
export { PlainSettings, Settings } from "./settings";
|
export { Settings } from "./settings";
|
||||||
|
|
1
src/shared/settings.d.ts
vendored
1
src/shared/settings.d.ts
vendored
|
@ -14,5 +14,6 @@ export interface Settings {
|
||||||
openLinksWithElectron?: boolean;
|
openLinksWithElectron?: boolean;
|
||||||
vencordDir?: string;
|
vencordDir?: string;
|
||||||
disableMinSize?: boolean;
|
disableMinSize?: boolean;
|
||||||
|
tray?: boolean;
|
||||||
minimizeToTray?: boolean;
|
minimizeToTray?: boolean;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue