diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..ebec903
--- /dev/null
+++ b/.env.example
@@ -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=
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4742eec..aa939a2 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,42 +1,42 @@
name: Release
on:
- push:
- tags:
- - v*
+ push:
+ tags:
+ - v*
jobs:
- release:
- runs-on: ${{ matrix.os }}
+ release:
+ runs-on: ${{ matrix.os }}
- strategy:
- matrix:
- os: [macos-latest, ubuntu-latest, windows-latest]
+ strategy:
+ matrix:
+ os: [macos-latest, ubuntu-latest, windows-latest]
- steps:
- - name: Check out Git repository
- uses: actions/checkout@v3
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v3
- - uses: actions/setup-node@v3
- with:
- node-version: 18
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 18
- - name: Run Electron Builder
- uses: samuelmeuli/action-electron-builder@e4b12cd06ddf023422f1ac4e39632bd76f6e6928
- with:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- RELEASE: true
+ - name: Run Electron Builder
+ uses: samuelmeuli/action-electron-builder@e4b12cd06ddf023422f1ac4e39632bd76f6e6928
+ with:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ RELEASE: true
- - name: Update AUR package
- if: ${{ matrix.os == 'ubuntu-latest' }}
- run: |
- sudo apt install makepkg
+ - name: Update AUR package
+ if: ${{ matrix.os == 'ubuntu-latest' }}
+ run: |
+ sudo apt install makepkg
- echo $SSH_KEY > ~/.ssh/aur
- echo $SSH_PUB_KEY > ~/.ssh/aur.pub
- export GIT_SSH_COMMAND="ssh -i ~/.ssh/aur"
+ echo $SSH_KEY > ~/.ssh/aur
+ echo $SSH_PUB_KEY > ~/.ssh/aur.pub
+ export GIT_SSH_COMMAND="ssh -i ~/.ssh/aur"
- ./scripts/aur_bump.sh
- with:
- SSH_KEY: ${{ secrets.AUR_SSH_KEY }}
- SSH_PUB_KEY: ${{ secrets.AUR_SSH_PUB_KEY }}
+ ./scripts/aur_bump.sh
+ env:
+ SSH_KEY: ${{ secrets.AUR_SSH_KEY }}
+ SSH_PUB_KEY: ${{ secrets.AUR_SSH_PUB_KEY }}
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 0000000..efd7fff
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -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
diff --git a/.gitignore b/.gitignore
index de4d1f0..6ee3e11 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
dist
node_modules
+.env
diff --git a/package.json b/package.json
index cc8b9c8..81018a4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "VencordDesktop",
- "version": "0.1.3",
+ "version": "0.1.5",
"private": true,
"description": "",
"keywords": [],
@@ -10,13 +10,14 @@
"main": "dist/js/main.js",
"scripts": {
"build": "tsx scripts/build/build.mts",
+ "build:dev": "pnpm build --dev",
"package": "pnpm build && electron-builder",
"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",
"start": "pnpm build && electron .",
- "start:dev": "pnpm build --dev && electron .",
- "start:watch": "tsx scripts/startWatch.mts",
+ "start:dev": "pnpm build:dev && electron .",
+ "start:watch": "pnpm build:dev && tsx scripts/startWatch.mts",
"test": "pnpm lint && pnpm testTypes",
"testTypes": "tsc --noEmit",
"watch": "pnpm build --watch"
@@ -26,6 +27,7 @@
"@types/react": "^18.0.33",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
+ "dotenv": "^16.0.3",
"electron": "^23.2.0",
"electron-builder": "^23.6.0",
"esbuild": "^0.17.14",
@@ -79,7 +81,6 @@
"category": "Network"
},
"nsis": {
- "allowToChangeInstallationDirectory": true,
"include": "build/installer.nsh",
"oneClick": false
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8b762f8..4816cd5 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,6 +13,9 @@ devDependencies:
'@typescript-eslint/parser':
specifier: ^5.57.1
version: 5.57.1(eslint@8.38.0)(typescript@5.0.2)
+ dotenv:
+ specifier: ^16.0.3
+ version: 16.0.3
electron:
specifier: ^23.2.0
version: 23.2.0
@@ -1390,6 +1393,11 @@ packages:
resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
dev: true
+ /dotenv@16.0.3:
+ resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
+ engines: {node: '>=12'}
+ dev: true
+
/dotenv@9.0.2:
resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
engines: {node: '>=10'}
diff --git a/scripts/build/injectReact.mjs b/scripts/build/injectReact.mjs
index 0890ac0..0f1bba2 100644
--- a/scripts/build/injectReact.mjs
+++ b/scripts/build/injectReact.mjs
@@ -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 let VencordCreateElement =
- (...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args);
+export let VencordCreateElement = (...args) =>
+ (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args);
diff --git a/scripts/start.ts b/scripts/start.ts
new file mode 100644
index 0000000..c2cc154
--- /dev/null
+++ b/scripts/start.ts
@@ -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", ["."]);
diff --git a/scripts/startWatch.mts b/scripts/startWatch.mts
index d30a938..1f72443 100644
--- a/scripts/startWatch.mts
+++ b/scripts/startWatch.mts
@@ -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 = {
- stdio: "inherit",
-};
-
-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", ["."]);
+import { spawnNodeModuleBin } from "./utils/spawn.mjs";
+spawnNodeModuleBin("tsx", ["scripts/build/build.mts", "--", "--watch", "--dev"]);
diff --git a/scripts/utils/dotenv.ts b/scripts/utils/dotenv.ts
new file mode 100644
index 0000000..73afb64
--- /dev/null
+++ b/scripts/utils/dotenv.ts
@@ -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();
diff --git a/scripts/utils/spawn.mts b/scripts/utils/spawn.mts
new file mode 100644
index 0000000..2d2f2a9
--- /dev/null
+++ b/scripts/utils/spawn.mts
@@ -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);
+}
diff --git a/src/main/constants.ts b/src/main/constants.ts
index 96c9970..d5937f7 100644
--- a/src/main/constants.ts
+++ b/src/main/constants.ts
@@ -14,7 +14,8 @@ export const VENCORD_SETTINGS_FILE = join(VENCORD_SETTINGS_DIR, "settings.json")
// needs to be inline require because of circular dependency
// 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)`;
diff --git a/src/main/mainWindow.ts b/src/main/mainWindow.ts
index 6188472..d2f9233 100644
--- a/src/main/mainWindow.ts
+++ b/src/main/mainWindow.ts
@@ -15,6 +15,7 @@ import { makeLinksOpenExternally } from "./utils/makeLinksOpenExternally";
import { downloadVencordFiles } from "./utils/vencordLoader";
let isQuitting = false;
+let tray: Tray;
app.on("before-quit", () => {
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.setContextMenu(trayMenu);
tray.on("click", () => win.show());
@@ -213,6 +214,10 @@ function initWindowBoundsListeners(win: BrowserWindow) {
}
function initSettingsListeners(win: BrowserWindow) {
+ Settings.addChangeListener("tray", enable => {
+ if (enable) initTray(win);
+ else tray?.destroy();
+ });
Settings.addChangeListener("disableMinSize", disable => {
if (disable) {
// 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() {
@@ -242,11 +257,17 @@ export function createMainWindow() {
},
icon: ICON_PATH,
frame: VencordSettings.store.frameless !== true,
+ ...(VencordSettings.store.macosTranslucency
+ ? {
+ vibrancy: "sidebar",
+ backgroundColor: "#ffffff00"
+ }
+ : {}),
...getWindowBoundsOptions()
}));
win.on("close", e => {
- if (isQuitting || Settings.store.minimizeToTray === false) return;
+ if (isQuitting || Settings.store.minimizeToTray === false || Settings.store.tray === false) return;
e.preventDefault();
win.hide();
@@ -255,7 +276,7 @@ export function createMainWindow() {
});
initWindowBoundsListeners(win);
- initTray(win);
+ if (Settings.store.tray ?? true) initTray(win);
initMenuBar(win);
makeLinksOpenExternally(win);
initSettingsListeners(win);
diff --git a/src/main/utils/vencordLoader.ts b/src/main/utils/vencordLoader.ts
index 6429872..0d88841 100644
--- a/src/main/utils/vencordLoader.ts
+++ b/src/main/utils/vencordLoader.ts
@@ -5,6 +5,7 @@
*/
import { existsSync, mkdirSync } from "fs";
+import type { RequestOptions } from "https";
import { join } from "path";
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants";
@@ -25,12 +26,16 @@ export interface ReleaseData {
}
export async function githubGet(endpoint: string) {
- return simpleGet(API_BASE + endpoint, {
+ const opts: RequestOptions = {
headers: {
Accept: "application/vnd.github+json",
"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() {
diff --git a/src/renderer/components/Settings.tsx b/src/renderer/components/Settings.tsx
index dd957ba..6e5760e 100644
--- a/src/renderer/components/Settings.tsx
+++ b/src/renderer/components/Settings.tsx
@@ -21,12 +21,14 @@ export default function SettingsUi() {
Button
} = 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",
"Minimize to tray",
"Hitting X will make Vencord Desktop minimize to the tray instead of closing",
- true
+ true,
+ () => Settings.tray ?? true
],
[
"disableMinSize",
@@ -62,9 +64,10 @@ export default function SettingsUi() {
- {switches.map(([key, text, note, def]) => (
+ {switches.map(([key, text, note, def, predicate]) => (
(Settings[key] = v)}
note={note}
key={key}
diff --git a/src/renderer/index.ts b/src/renderer/index.ts
index 8135d45..c2c76ca 100644
--- a/src/renderer/index.ts
+++ b/src/renderer/index.ts
@@ -9,4 +9,4 @@ import "./fixes";
console.log("read if cute :3");
export * as Components from "./components";
-export { PlainSettings, Settings } from "./settings";
+export { Settings } from "./settings";
diff --git a/src/shared/settings.d.ts b/src/shared/settings.d.ts
index 34c4035..cae4826 100644
--- a/src/shared/settings.d.ts
+++ b/src/shared/settings.d.ts
@@ -14,5 +14,6 @@ export interface Settings {
openLinksWithElectron?: boolean;
vencordDir?: string;
disableMinSize?: boolean;
+ tray?: boolean;
minimizeToTray?: boolean;
}