From 3c579d0e275cdaf6f2c9589abade94bde7905c82 Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Sat, 26 Apr 2025 22:36:23 +1000
Subject: clean
Remove everything
---
.gitignore | 3 -
.vscode/settings.json | 3 -
app.tsx | 132 ---
.../icons/caelestia-bluetooth-device-symbolic.svg | 6 -
assets/icons/caelestia-consecutive-symbolic.svg | 5 -
assets/icons/caelestia-feishin-symbolic.svg | 4 -
assets/icons/caelestia-media-generic-symbolic.svg | 2 -
assets/icons/caelestia-media-none-symbolic.svg | 19 -
.../icons/caelestia-mozilla-firefox-symbolic.svg | 4 -
assets/icons/caelestia-no-repeat-symbolic.svg | 6 -
assets/icons/caelestia-pause-symbolic.svg | 8 -
assets/icons/caelestia-play-symbolic.svg | 5 -
assets/icons/caelestia-repeat-one-symbolic.svg | 5 -
assets/icons/caelestia-repeat-symbolic.svg | 5 -
assets/icons/caelestia-shuffle-symbolic.svg | 5 -
assets/icons/caelestia-skip-next-symbolic.svg | 8 -
assets/icons/caelestia-skip-previous-symbolic.svg | 8 -
assets/icons/caelestia-spotify-symbolic.svg | 21 -
env.d.ts | 4 -
package-lock.json | 616 -----------
package.json | 11 -
run.fish | 17 -
scss/_font.scss | 21 -
scss/_lib.scss | 47 -
scss/bar.scss | 394 -------
scss/common.scss | 68 --
scss/launcher.scss | 332 ------
scss/mediadisplay.scss | 139 ---
scss/navbar.scss | 65 --
scss/notifpopups.scss | 51 -
scss/osds.scss | 51 -
scss/scheme/_default.scss | 31 -
scss/session.scss | 58 -
scss/sidebar.scss | 1118 --------------------
scss/widgets.scss | 136 ---
src/config/defaults.ts | 183 ----
src/config/funcs.ts | 124 ---
src/config/index.ts | 26 -
src/config/literals.ts | 336 ------
src/config/types.ts | 93 --
src/modules/bar.tsx | 703 ------------
src/modules/launcher/actions.tsx | 522 ---------
src/modules/launcher/index.tsx | 144 ---
src/modules/launcher/modes.tsx | 225 ----
src/modules/launcher/util.tsx | 19 -
src/modules/mediadisplay/index.tsx | 188 ----
src/modules/mediadisplay/visualiser.tsx | 71 --
src/modules/navbar.tsx | 203 ----
src/modules/notifpopups.tsx | 72 --
src/modules/osds.tsx | 327 ------
src/modules/screencorners.tsx | 51 -
src/modules/session.tsx | 44 -
src/modules/sidebar/alerts.tsx | 11 -
src/modules/sidebar/audio.tsx | 13 -
src/modules/sidebar/connectivity.tsx | 10 -
src/modules/sidebar/dashboard.tsx | 132 ---
src/modules/sidebar/index.tsx | 87 --
src/modules/sidebar/modules/bluetooth.tsx | 127 ---
src/modules/sidebar/modules/calendar.tsx | 252 -----
src/modules/sidebar/modules/deviceselector.tsx | 126 ---
src/modules/sidebar/modules/headlines.tsx | 204 ----
src/modules/sidebar/modules/hwresources.tsx | 67 --
src/modules/sidebar/modules/media.tsx | 168 ---
src/modules/sidebar/modules/networks.tsx | 151 ---
src/modules/sidebar/modules/news.tsx | 113 --
src/modules/sidebar/modules/notifications.tsx | 90 --
src/modules/sidebar/modules/streams.tsx | 110 --
src/modules/sidebar/modules/upcoming.tsx | 99 --
src/modules/sidebar/modules/updates.tsx | 109 --
src/modules/sidebar/packages.tsx | 11 -
src/modules/sidebar/time.tsx | 24 -
src/services/apps.ts | 3 -
src/services/calendar.ts | 228 ----
src/services/cpu.ts | 49 -
src/services/gpu.ts | 63 --
src/services/math.ts | 155 ---
src/services/memory.ts | 64 --
src/services/monitors.ts | 127 ---
src/services/news.ts | 153 ---
src/services/palette.ts | 298 ------
src/services/players.ts | 148 ---
src/services/schemes.ts | 109 --
src/services/storage.ts | 65 --
src/services/updates.ts | 191 ----
src/services/wallpapers.ts | 127 ---
src/services/weather.ts | 388 -------
src/utils/icons.ts | 158 ---
src/utils/mpris.ts | 16 -
src/utils/strings.ts | 18 -
src/utils/system.ts | 111 --
src/utils/thumbnailer.ts | 80 --
src/utils/types.ts | 35 -
src/utils/widgets.ts | 82 --
src/widgets/notification.tsx | 179 ----
src/widgets/popupwindow.ts | 75 --
src/widgets/screencorner.tsx | 49 -
src/widgets/slider.tsx | 64 --
style.scss | 25 -
tsconfig.json | 21 -
99 files changed, 11724 deletions(-)
delete mode 100644 .gitignore
delete mode 100644 .vscode/settings.json
delete mode 100644 app.tsx
delete mode 100644 assets/icons/caelestia-bluetooth-device-symbolic.svg
delete mode 100644 assets/icons/caelestia-consecutive-symbolic.svg
delete mode 100644 assets/icons/caelestia-feishin-symbolic.svg
delete mode 100644 assets/icons/caelestia-media-generic-symbolic.svg
delete mode 100644 assets/icons/caelestia-media-none-symbolic.svg
delete mode 100644 assets/icons/caelestia-mozilla-firefox-symbolic.svg
delete mode 100644 assets/icons/caelestia-no-repeat-symbolic.svg
delete mode 100644 assets/icons/caelestia-pause-symbolic.svg
delete mode 100644 assets/icons/caelestia-play-symbolic.svg
delete mode 100644 assets/icons/caelestia-repeat-one-symbolic.svg
delete mode 100644 assets/icons/caelestia-repeat-symbolic.svg
delete mode 100644 assets/icons/caelestia-shuffle-symbolic.svg
delete mode 100644 assets/icons/caelestia-skip-next-symbolic.svg
delete mode 100644 assets/icons/caelestia-skip-previous-symbolic.svg
delete mode 100644 assets/icons/caelestia-spotify-symbolic.svg
delete mode 100644 env.d.ts
delete mode 100644 package-lock.json
delete mode 100644 package.json
delete mode 100755 run.fish
delete mode 100644 scss/_font.scss
delete mode 100644 scss/_lib.scss
delete mode 100644 scss/bar.scss
delete mode 100644 scss/common.scss
delete mode 100644 scss/launcher.scss
delete mode 100644 scss/mediadisplay.scss
delete mode 100644 scss/navbar.scss
delete mode 100644 scss/notifpopups.scss
delete mode 100644 scss/osds.scss
delete mode 100644 scss/scheme/_default.scss
delete mode 100644 scss/session.scss
delete mode 100644 scss/sidebar.scss
delete mode 100644 scss/widgets.scss
delete mode 100644 src/config/defaults.ts
delete mode 100644 src/config/funcs.ts
delete mode 100644 src/config/index.ts
delete mode 100644 src/config/literals.ts
delete mode 100644 src/config/types.ts
delete mode 100644 src/modules/bar.tsx
delete mode 100644 src/modules/launcher/actions.tsx
delete mode 100644 src/modules/launcher/index.tsx
delete mode 100644 src/modules/launcher/modes.tsx
delete mode 100644 src/modules/launcher/util.tsx
delete mode 100644 src/modules/mediadisplay/index.tsx
delete mode 100644 src/modules/mediadisplay/visualiser.tsx
delete mode 100644 src/modules/navbar.tsx
delete mode 100644 src/modules/notifpopups.tsx
delete mode 100644 src/modules/osds.tsx
delete mode 100644 src/modules/screencorners.tsx
delete mode 100644 src/modules/session.tsx
delete mode 100644 src/modules/sidebar/alerts.tsx
delete mode 100644 src/modules/sidebar/audio.tsx
delete mode 100644 src/modules/sidebar/connectivity.tsx
delete mode 100644 src/modules/sidebar/dashboard.tsx
delete mode 100644 src/modules/sidebar/index.tsx
delete mode 100644 src/modules/sidebar/modules/bluetooth.tsx
delete mode 100644 src/modules/sidebar/modules/calendar.tsx
delete mode 100644 src/modules/sidebar/modules/deviceselector.tsx
delete mode 100644 src/modules/sidebar/modules/headlines.tsx
delete mode 100644 src/modules/sidebar/modules/hwresources.tsx
delete mode 100644 src/modules/sidebar/modules/media.tsx
delete mode 100644 src/modules/sidebar/modules/networks.tsx
delete mode 100644 src/modules/sidebar/modules/news.tsx
delete mode 100644 src/modules/sidebar/modules/notifications.tsx
delete mode 100644 src/modules/sidebar/modules/streams.tsx
delete mode 100644 src/modules/sidebar/modules/upcoming.tsx
delete mode 100644 src/modules/sidebar/modules/updates.tsx
delete mode 100644 src/modules/sidebar/packages.tsx
delete mode 100644 src/modules/sidebar/time.tsx
delete mode 100644 src/services/apps.ts
delete mode 100644 src/services/calendar.ts
delete mode 100644 src/services/cpu.ts
delete mode 100644 src/services/gpu.ts
delete mode 100644 src/services/math.ts
delete mode 100644 src/services/memory.ts
delete mode 100644 src/services/monitors.ts
delete mode 100644 src/services/news.ts
delete mode 100644 src/services/palette.ts
delete mode 100644 src/services/players.ts
delete mode 100644 src/services/schemes.ts
delete mode 100644 src/services/storage.ts
delete mode 100644 src/services/updates.ts
delete mode 100644 src/services/wallpapers.ts
delete mode 100644 src/services/weather.ts
delete mode 100644 src/utils/icons.ts
delete mode 100644 src/utils/mpris.ts
delete mode 100644 src/utils/strings.ts
delete mode 100644 src/utils/system.ts
delete mode 100644 src/utils/thumbnailer.ts
delete mode 100644 src/utils/types.ts
delete mode 100644 src/utils/widgets.ts
delete mode 100644 src/widgets/notification.tsx
delete mode 100644 src/widgets/popupwindow.ts
delete mode 100644 src/widgets/screencorner.tsx
delete mode 100644 src/widgets/slider.tsx
delete mode 100644 style.scss
delete mode 100644 tsconfig.json
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 89341d4..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-@girs/
-node_modules/
-scss/scheme/_index.scss
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 72446f4..0000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "typescript.tsdk": "node_modules/typescript/lib"
-}
diff --git a/app.tsx b/app.tsx
deleted file mode 100644
index dcc93d8..0000000
--- a/app.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-import Bar from "@/modules/bar";
-import Launcher from "@/modules/launcher";
-import MediaDisplay from "@/modules/mediadisplay";
-import NavBar from "@/modules/navbar";
-import NotifPopups from "@/modules/notifpopups";
-import Osds from "@/modules/osds";
-import ScreenCorners, { BarScreenCorners } from "@/modules/screencorners";
-import Session from "@/modules/session";
-import SideBar from "@/modules/sidebar";
-import Calendar from "@/services/calendar";
-import Monitors from "@/services/monitors";
-import Palette from "@/services/palette";
-import Players from "@/services/players";
-import Schemes from "@/services/schemes";
-import Wallpapers from "@/services/wallpapers";
-import { execAsync, idle, timeout, writeFileAsync } from "astal";
-import { App } from "astal/gtk3";
-import { style } from "config";
-import { initConfig, updateConfig } from "config/funcs";
-
-const isLayer = (name: string) =>
- ["base", "mantle", "crust"].includes(name) || name.startsWith("surface") || name.startsWith("overlay");
-
-const applyTransparency = (name: string, hex: string) => {
- const mode = style.transparency.get();
- if (mode === "off" || !isLayer(name)) return hex;
- let amount = 0.78;
- if (mode === "low") amount = 0.88;
- else if (mode === "high") amount = 0.58;
- return `color.change(${hex}, $alpha: ${amount})`;
-};
-
-const applyVibrancy = (hex: string) => (style.vibrant.get() ? `color.scale(${hex}, $saturation: 40%)` : hex);
-
-const getVars = () => {
- const vars = { light: Palette.get_default().mode === "light", borders: style.borders.get() };
- return Object.entries(vars)
- .map(([k, v]) => `$${k}: ${v}`)
- .join(";");
-};
-
-const styleLoader = new (class {
- #running = false;
- #dirty = false;
-
- async run() {
- this.#dirty = true;
- if (this.#running) return;
- this.#running = true;
- while (this.#dirty) {
- this.#dirty = false;
- await this.#run();
- }
- this.#running = false;
- }
-
- async #run() {
- const schemeColours = Object.entries(Palette.get_default().colours)
- .map(([name, hex]) => `$${name}: ${applyVibrancy(applyTransparency(name, hex))};`)
- .join("\n");
- await writeFileAsync(`${SRC}/scss/scheme/_index.scss`, `@use "sass:color";\n${getVars()};\n${schemeColours}`);
- App.apply_css(await execAsync(`sass ${SRC}/style.scss`), true);
- }
-})();
-
-export const loadStyleAsync = () => styleLoader.run();
-
-App.start({
- instanceName: "caelestia",
- icons: "assets/icons",
- async main() {
- try {
- const now = Date.now();
-
- await initConfig();
-
- loadStyleAsync().catch(console.error);
- Palette.get_default().connect("notify::colours", () => loadStyleAsync().catch(console.error));
- Palette.get_default().connect("notify::mode", () => loadStyleAsync().catch(console.error));
-
- ;
- ;
- ;
- Monitors.get_default().forEach(m => );
- Monitors.get_default().forEach(m => );
- Monitors.get_default().forEach(m => );
- Monitors.get_default().forEach(m => );
- Monitors.get_default().forEach(m => );
- Monitors.get_default().forEach(m => );
- Monitors.get_default().forEach(m => );
-
- // Init services
- timeout(5000, () => {
- idle(() => Schemes.get_default());
- idle(() => Wallpapers.get_default());
- idle(() => Calendar.get_default());
- });
-
- console.log(`Caelestia started in ${Date.now() - now}ms`);
- } catch (e) {
- console.error(e);
- }
- },
- requestHandler(request, res) {
- if (request === "reload-css") loadStyleAsync().catch(console.error);
- else if (request === "reload-config") updateConfig();
- else if (request.startsWith("show")) App.get_window(request.split(" ")[1])?.show();
- else if (request.startsWith("toggle"))
- App.toggle_window(request.split(" ")[1] + Monitors.get_default().active.id);
- else if (request === "media play-pause") Players.get_default().lastPlayer?.play_pause();
- else if (request === "media next") Players.get_default().lastPlayer?.next();
- else if (request === "media previous") Players.get_default().lastPlayer?.previous();
- else if (request === "media stop") Players.get_default().lastPlayer?.stop();
- else if (request.startsWith("media")) {
- const player = Players.get_default().lastPlayer;
- const key = request.split(" ")[1];
- if (player === null) return res("No media");
- if (key in player) return res(player[key as keyof typeof player]);
- return res(`Invalid key: ${key}`);
- } else if (request.startsWith("brightness")) {
- const value = request.split(" ")[1];
- const num = parseFloat(value) / (value.includes("%") ? 100 : 1);
- if (isNaN(num)) return res("Syntax: brightness [%][+ | -]");
- if (value.includes("+")) Monitors.get_default().active.brightness += num;
- else if (value.includes("-")) Monitors.get_default().active.brightness -= num;
- else Monitors.get_default().active.brightness = num;
- } else return res("Unknown command: " + request);
-
- console.log(`Request handled: ${request}`);
- res("OK");
- },
-});
diff --git a/assets/icons/caelestia-bluetooth-device-symbolic.svg b/assets/icons/caelestia-bluetooth-device-symbolic.svg
deleted file mode 100644
index 86b126f..0000000
--- a/assets/icons/caelestia-bluetooth-device-symbolic.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-consecutive-symbolic.svg b/assets/icons/caelestia-consecutive-symbolic.svg
deleted file mode 100644
index 5b18fd2..0000000
--- a/assets/icons/caelestia-consecutive-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-feishin-symbolic.svg b/assets/icons/caelestia-feishin-symbolic.svg
deleted file mode 100644
index f1524cc..0000000
--- a/assets/icons/caelestia-feishin-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
diff --git a/assets/icons/caelestia-media-generic-symbolic.svg b/assets/icons/caelestia-media-generic-symbolic.svg
deleted file mode 100644
index 8ff60ed..0000000
--- a/assets/icons/caelestia-media-generic-symbolic.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-media-none-symbolic.svg b/assets/icons/caelestia-media-none-symbolic.svg
deleted file mode 100644
index 20ea19a..0000000
--- a/assets/icons/caelestia-media-none-symbolic.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-mozilla-firefox-symbolic.svg b/assets/icons/caelestia-mozilla-firefox-symbolic.svg
deleted file mode 100644
index 3ae6589..0000000
--- a/assets/icons/caelestia-mozilla-firefox-symbolic.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-no-repeat-symbolic.svg b/assets/icons/caelestia-no-repeat-symbolic.svg
deleted file mode 100644
index f878db7..0000000
--- a/assets/icons/caelestia-no-repeat-symbolic.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
diff --git a/assets/icons/caelestia-pause-symbolic.svg b/assets/icons/caelestia-pause-symbolic.svg
deleted file mode 100644
index 8012654..0000000
--- a/assets/icons/caelestia-pause-symbolic.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-play-symbolic.svg b/assets/icons/caelestia-play-symbolic.svg
deleted file mode 100644
index 8745847..0000000
--- a/assets/icons/caelestia-play-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-repeat-one-symbolic.svg b/assets/icons/caelestia-repeat-one-symbolic.svg
deleted file mode 100644
index ee38bb6..0000000
--- a/assets/icons/caelestia-repeat-one-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-repeat-symbolic.svg b/assets/icons/caelestia-repeat-symbolic.svg
deleted file mode 100644
index fc514b7..0000000
--- a/assets/icons/caelestia-repeat-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-shuffle-symbolic.svg b/assets/icons/caelestia-shuffle-symbolic.svg
deleted file mode 100644
index 232eaac..0000000
--- a/assets/icons/caelestia-shuffle-symbolic.svg
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-skip-next-symbolic.svg b/assets/icons/caelestia-skip-next-symbolic.svg
deleted file mode 100644
index 1d4721c..0000000
--- a/assets/icons/caelestia-skip-next-symbolic.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-skip-previous-symbolic.svg b/assets/icons/caelestia-skip-previous-symbolic.svg
deleted file mode 100644
index 10d0e59..0000000
--- a/assets/icons/caelestia-skip-previous-symbolic.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/icons/caelestia-spotify-symbolic.svg b/assets/icons/caelestia-spotify-symbolic.svg
deleted file mode 100644
index bf01823..0000000
--- a/assets/icons/caelestia-spotify-symbolic.svg
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/env.d.ts b/env.d.ts
deleted file mode 100644
index 435553f..0000000
--- a/env.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare const HOME: string;
-declare const CACHE: string;
-declare const STATE: string;
-declare const SRC: string;
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index d0a50f8..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,616 +0,0 @@
-{
- "name": "shell",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "dependencies": {
- "fuzzysort": "^3.1.0",
- "ical.js": "^2.1.0",
- "mathjs": "^14.0.1"
- },
- "devDependencies": {
- "esbuild": "^0.25.2",
- "typescript": "5.7.3"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.27.0",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
- "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
- "license": "MIT",
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz",
- "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz",
- "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz",
- "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz",
- "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz",
- "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz",
- "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz",
- "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz",
- "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz",
- "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz",
- "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz",
- "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz",
- "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz",
- "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz",
- "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz",
- "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz",
- "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz",
- "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz",
- "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz",
- "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz",
- "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz",
- "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz",
- "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz",
- "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz",
- "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz",
- "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/complex.js": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.4.2.tgz",
- "integrity": "sha512-qtx7HRhPGSCBtGiST4/WGHuW+zeaND/6Ld+db6PbrulIB1i2Ev/2UPiqcmpQNPSyfBKraC0EOvOKCB5dGZKt3g==",
- "license": "MIT",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/decimal.js": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz",
- "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==",
- "license": "MIT"
- },
- "node_modules/esbuild": {
- "version": "0.25.2",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz",
- "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.25.2",
- "@esbuild/android-arm": "0.25.2",
- "@esbuild/android-arm64": "0.25.2",
- "@esbuild/android-x64": "0.25.2",
- "@esbuild/darwin-arm64": "0.25.2",
- "@esbuild/darwin-x64": "0.25.2",
- "@esbuild/freebsd-arm64": "0.25.2",
- "@esbuild/freebsd-x64": "0.25.2",
- "@esbuild/linux-arm": "0.25.2",
- "@esbuild/linux-arm64": "0.25.2",
- "@esbuild/linux-ia32": "0.25.2",
- "@esbuild/linux-loong64": "0.25.2",
- "@esbuild/linux-mips64el": "0.25.2",
- "@esbuild/linux-ppc64": "0.25.2",
- "@esbuild/linux-riscv64": "0.25.2",
- "@esbuild/linux-s390x": "0.25.2",
- "@esbuild/linux-x64": "0.25.2",
- "@esbuild/netbsd-arm64": "0.25.2",
- "@esbuild/netbsd-x64": "0.25.2",
- "@esbuild/openbsd-arm64": "0.25.2",
- "@esbuild/openbsd-x64": "0.25.2",
- "@esbuild/sunos-x64": "0.25.2",
- "@esbuild/win32-arm64": "0.25.2",
- "@esbuild/win32-ia32": "0.25.2",
- "@esbuild/win32-x64": "0.25.2"
- }
- },
- "node_modules/escape-latex": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz",
- "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==",
- "license": "MIT"
- },
- "node_modules/fraction.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.2.2.tgz",
- "integrity": "sha512-uXBDv5knpYmv/2gLzWQ5mBHGBRk9wcKTeWu6GLTUEQfjCxO09uM/mHDrojlL+Q1mVGIIFo149Gba7od1XPgSzQ==",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/fuzzysort": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz",
- "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==",
- "license": "MIT"
- },
- "node_modules/ical.js": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ical.js/-/ical.js-2.1.0.tgz",
- "integrity": "sha512-BOVfrH55xQ6kpS3muGvIXIg2l7p+eoe12/oS7R5yrO3TL/j/bLsR0PR+tYQESFbyTbvGgPHn9zQ6tI4FWyuSaQ==",
- "license": "MPL-2.0"
- },
- "node_modules/javascript-natural-sort": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz",
- "integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==",
- "license": "MIT"
- },
- "node_modules/mathjs": {
- "version": "14.4.0",
- "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-14.4.0.tgz",
- "integrity": "sha512-CpoYDhNENefjIG9wU9epr+0pBHzlaySfpWcblZdAf5qXik/j/U8eSmx/oNbmXO0F5PyfwPGVD/wK4VWsTho1SA==",
- "license": "Apache-2.0",
- "dependencies": {
- "@babel/runtime": "^7.26.10",
- "complex.js": "^2.2.5",
- "decimal.js": "^10.4.3",
- "escape-latex": "^1.2.0",
- "fraction.js": "^5.2.1",
- "javascript-natural-sort": "^0.7.1",
- "seedrandom": "^3.0.5",
- "tiny-emitter": "^2.1.0",
- "typed-function": "^4.2.1"
- },
- "bin": {
- "mathjs": "bin/cli.js"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
- "license": "MIT"
- },
- "node_modules/seedrandom": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz",
- "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==",
- "license": "MIT"
- },
- "node_modules/tiny-emitter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
- "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==",
- "license": "MIT"
- },
- "node_modules/typed-function": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-4.2.1.tgz",
- "integrity": "sha512-EGjWssW7Tsk4DGfE+5yluuljS1OGYWiI1J6e8puZz9nTMM51Oug8CD5Zo4gWMsOhq5BI+1bF+rWTm4Vbj3ivRA==",
- "license": "MIT",
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/typescript": {
- "version": "5.7.3",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
- "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
- "dev": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index 1c6d73e..0000000
--- a/package.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "dependencies": {
- "fuzzysort": "^3.1.0",
- "ical.js": "^2.1.0",
- "mathjs": "^14.0.1"
- },
- "devDependencies": {
- "esbuild": "^0.25.2",
- "typescript": "5.7.3"
- }
-}
diff --git a/run.fish b/run.fish
deleted file mode 100755
index 6f2b072..0000000
--- a/run.fish
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/fish
-
-cd (dirname (status filename)) || exit 1
-
-set -q XDG_RUNTIME_DIR && set -l bundle_dir $XDG_RUNTIME_DIR || set -l bundle_dir /tmp
-set -q XDG_CACHE_HOME && set -l cache_dir $XDG_CACHE_HOME/caelestia || set -l cache_dir $HOME/.cache/caelestia
-set -q XDG_STATE_HOME && set -l state_dir $XDG_STATE_HOME/caelestia || set -l state_dir $HOME/.local/state/caelestia
-
-mkdir -p $cache_dir
-
-set -q DEBUG || set -l minify --minify-identifiers
-
-./node_modules/.bin/esbuild app.tsx --bundle --minify-whitespace $minify --outfile=$bundle_dir/caelestia.js \
- --external:console --external:system --external:cairo --external:gettext --external:'file://*' --external:'gi://*' --external:'resource://*' \
- --define:HOME=\"$HOME\" --define:CACHE=\"$cache_dir\" --define:STATE=\"$state_dir\" --define:SRC=\"(pwd)\" --format=esm --platform=neutral --main-fields=module,main
-
-gjs -m $bundle_dir/caelestia.js
diff --git a/scss/_font.scss b/scss/_font.scss
deleted file mode 100644
index 405a850..0000000
--- a/scss/_font.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-@mixin title {
- font-family: "Gabarito", "Poppins", "Readex Pro", "Lexend", sans-serif;
-}
-
-@mixin main {
- font-family: "Rubik", "Geist", "AR One Sans", "Reddit Sans", "Inter", "Roboto", "Ubuntu", "Noto Sans", sans-serif;
-}
-
-@mixin icon {
- font-family: "Material Symbols Rounded", "MaterialSymbolsRounded", "Material Symbols Outlined",
- "Material Symbols Sharp";
-}
-
-@mixin mono {
- font-family: "JetBrains Mono NF", "JetBrains Mono Nerd Font", "JetBrains Mono NL", "SpaceMono NF",
- "SpaceMono Nerd Font", monospace;
-}
-
-@mixin reading {
- font-family: "Readex Pro", "Lexend", "Noto Sans", sans-serif;
-}
diff --git a/scss/_lib.scss b/scss/_lib.scss
deleted file mode 100644
index ef8cc8d..0000000
--- a/scss/_lib.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "font";
-
-$scale: 0.068rem;
-@function s($value: 1) {
- @return $value * $scale;
-}
-
-@mixin rounded($all, $tl: $all, $tr: $all, $br: $all, $bl: $all) {
- border-radius: s($tl) s($tr) s($br) s($bl);
- -gtk-outline-radius: s($tl) s($tr) s($br) s($bl);
-}
-
-@mixin border($colour, $alpha: 1, $width: 1, $style: solid, $force: false) {
- @if $force or scheme.$borders {
- border: s($width) $style color.change($colour, $alpha: $alpha);
- }
-}
-
-@mixin shadow($colour: black, $alpha: 0.64, $x: 0, $y: 0, $blur: 3, $spread: 0) {
- box-shadow: s($x) s($y) s($blur) s($spread) color.change($colour, $alpha: $alpha);
-}
-
-@mixin spacing($val: 5, $vertical: false) {
- $dir: if($vertical, bottom, right);
-
- & > *:not(:last-child) {
- margin-#{$dir}: s($val);
- }
-}
-
-@mixin element-decel($duration: 200ms) {
- transition: $duration cubic-bezier(0, 0.55, 0.45, 1);
-}
-
-@mixin fluent-decel($duration: 200ms) {
- transition: $duration cubic-bezier(0.1, 1, 0, 1);
-}
-
-@mixin overshot {
- transition-timing-function: cubic-bezier(0.05, 0.9, 0.1, 1.1);
-}
-
-@mixin ease-in-out {
- transition-timing-function: cubic-bezier(0.85, 0, 0.15, 1);
-}
diff --git a/scss/bar.scss b/scss/bar.scss
deleted file mode 100644
index b14ceeb..0000000
--- a/scss/bar.scss
+++ /dev/null
@@ -1,394 +0,0 @@
-@use "sass:color";
-@use "lib";
-@use "scheme";
-@use "font";
-
-@mixin bar-spacing($vertical: false) {
- @include lib.spacing(10, $vertical);
-
- & > * {
- @include lib.spacing(10, $vertical);
- }
-}
-
-.bar {
- @include font.mono;
-
- font-size: lib.s(14);
-
- label.icon {
- font-size: lib.s(18);
- }
-
- .screen-corner {
- background-color: transparent;
- }
-
- .os-icon {
- color: scheme.$yellow;
- }
-
- .active-window {
- color: scheme.$pink;
- }
-
- .media-playing {
- color: scheme.$lavender;
-
- icon {
- font-size: lib.s(16);
- }
- }
-
- .workspaces {
- & > button {
- @include lib.rounded(100);
- @include lib.element-decel;
-
- font-size: lib.s(13);
- font-weight: bold;
-
- &.focused {
- background-color: scheme.$mauve;
- }
- }
-
- &:not(.labels-shown) > button {
- min-width: lib.s(8);
- min-height: lib.s(8);
- background-color: scheme.$surface1;
-
- &.occupied {
- background-color: scheme.$overlay1;
- }
-
- &.focused {
- background-color: scheme.$mauve;
- }
- }
-
- &.labels-shown > button {
- color: color.change(scheme.$overlay1, $alpha: 1);
-
- .icon {
- font-size: lib.s(13);
- color: color.change(scheme.$subtext0, $alpha: 1);
- }
-
- &.occupied {
- color: color.mix(scheme.$text, scheme.$mauve, 50%);
- }
-
- &.focused {
- color: color.change(scheme.$base, $alpha: 1);
-
- .icon {
- color: color.change(scheme.$surface0, $alpha: 1);
- }
- }
- }
- }
-
- .tray {
- font-size: lib.s(15);
- color: scheme.$text;
- }
-
- .status-icons {
- color: scheme.$rosewater;
- }
-
- .pkg-updates {
- color: scheme.$blue;
- }
-
- .notif-count {
- color: scheme.$mauve;
- }
-
- .battery {
- color: scheme.$teal;
-
- &.charging {
- color: scheme.$success;
- }
-
- &.low {
- color: scheme.$error;
- }
- }
-
- .date-time {
- color: scheme.$peach;
- }
-
- .power {
- @include lib.element-decel;
- @include font.icon;
-
- color: scheme.$red;
- font-weight: bold;
- font-size: lib.s(16);
-
- &:hover,
- &:focus {
- color: color.change(scheme.$red, $alpha: 0.8);
- }
-
- &:active {
- color: color.change(scheme.$red, $alpha: 0.6);
- }
- }
-
- &.horizontal {
- margin: 10px 10px 0 10px;
-
- .module {
- padding: lib.s(5) lib.s(10);
-
- @include lib.spacing;
- }
-
- .os-icon {
- padding-right: lib.s(14);
- }
-
- .media-playing {
- @include lib.spacing(8);
- }
-
- .workspaces {
- @include lib.spacing(10);
-
- & > .focused {
- min-width: lib.s(30);
- }
-
- &.labels-shown > button {
- padding: lib.s(3) lib.s(8);
-
- &.focused {
- min-width: 0;
- padding-left: lib.s(20);
- padding-right: lib.s(20);
- }
-
- .icon {
- margin-left: lib.s(5);
-
- &:nth-child(2) {
- margin-left: lib.s(12);
- }
- }
- }
- }
-
- .tray {
- @include lib.spacing(10);
- }
-
- .status-icons .bluetooth {
- @include lib.spacing(10);
-
- // The spacing doesn't look right for some reason so this
- & > :first-child:not(:last-child) {
- margin-right: lib.s(5);
- }
- }
- }
-
- &.vertical {
- margin: 10px 0 10px 10px;
-
- .module {
- padding: lib.s(8);
-
- @include lib.spacing($vertical: true);
- }
-
- .os-icon > * {
- margin-left: lib.s(-5);
- }
-
- .media-playing {
- @include lib.spacing(8, true);
- }
-
- .workspaces {
- @include lib.spacing(10, true);
-
- & > .focused {
- min-height: lib.s(30);
- }
-
- &.labels-shown > button {
- padding: lib.s(3) lib.s(8);
-
- &.focused {
- min-height: 0;
- padding-top: lib.s(15);
- padding-bottom: lib.s(15);
- }
-
- .icon {
- margin-top: lib.s(2);
-
- &:nth-child(2) {
- margin-top: lib.s(3);
- }
- }
- }
- }
-
- .tray {
- @include lib.spacing(10, true);
- }
-
- .status-icons .bluetooth {
- @include lib.spacing(10, true);
- }
- }
-
- &.gaps {
- padding-right: lib.s(3);
-
- .module {
- @include lib.rounded(8);
-
- background-color: scheme.$base;
- }
-
- .screen-corner {
- background-color: transparent;
- }
-
- .os-icon {
- @include lib.border(scheme.$yellow);
-
- @if not scheme.$borders {
- @include lib.shadow;
-
- background-color: scheme.$yellow;
- color: scheme.$base;
- }
- }
-
- .power {
- @include lib.border(scheme.$red);
-
- @if not scheme.$borders {
- @include lib.shadow;
-
- background-color: scheme.$red;
- color: scheme.$base;
- }
- }
-
- &.horizontal {
- @include bar-spacing;
-
- .workspaces {
- padding: lib.s(6) lib.s(15);
- }
- }
-
- &.vertical {
- @include bar-spacing(true);
-
- .workspaces {
- padding: lib.s(15) lib.s(6);
- }
- }
- }
-
- &.panel {
- @include lib.rounded(20);
- @include lib.border(scheme.$primary, 0.5, 2);
-
- background-color: scheme.$base;
-
- .os-icon {
- font-size: lib.s(16);
- }
-
- &.horizontal {
- padding: lib.s(5) lib.s(10);
- }
-
- &.vertical {
- padding: lib.s(10) lib.s(5);
-
- .os-icon > * {
- margin-left: lib.s(-7);
- }
- }
- }
-
- &.embedded {
- $-rounding: 23;
-
- margin: 0;
-
- .module {
- background-color: scheme.$base;
- }
-
- .screen-corner {
- @include lib.rounded($-rounding);
-
- background-color: scheme.$base;
- }
-
- &.horizontal {
- .module {
- padding: lib.s(10) lib.s(10);
- padding-left: lib.s(15);
- }
-
- .before-spacer {
- border-bottom-right-radius: lib.s($-rounding);
- padding-right: lib.s(15);
- }
-
- .after-spacer {
- border-bottom-left-radius: lib.s($-rounding);
- }
-
- .workspaces.odd {
- margin-right: -1px;
- }
-
- .last {
- padding-right: lib.s(12);
- }
- }
-
- &.vertical {
- .module {
- padding: lib.s(8) lib.s(10);
- }
-
- .before-spacer {
- border-bottom-right-radius: lib.s($-rounding);
- padding-bottom: lib.s(15);
- }
-
- .after-spacer {
- border-top-right-radius: lib.s($-rounding);
- padding-top: lib.s(15);
- }
-
- .workspaces.odd {
- margin-bottom: -1px;
- }
-
- .first {
- padding-top: lib.s(12);
- }
-
- .last {
- padding-bottom: lib.s(12);
- }
- }
- }
-}
diff --git a/scss/common.scss b/scss/common.scss
deleted file mode 100644
index d0fb799..0000000
--- a/scss/common.scss
+++ /dev/null
@@ -1,68 +0,0 @@
-@use "scheme";
-@use "lib";
-@use "font";
-
-label.icon {
- @include font.icon;
-}
-
-.screen-corner {
- @include lib.rounded(15);
-
- background-color: scheme.$base;
-}
-
-.notification {
- .inner {
- @include font.main;
-
- color: scheme.$text;
- padding: lib.s(10) lib.s(12);
-
- @include lib.spacing($vertical: true);
- }
-
- .header,
- .content {
- padding: 0 lib.s(5);
- }
-
- .header {
- @include font.mono;
- @include lib.spacing(8);
- }
-
- .content {
- @include lib.spacing(10);
- }
-
- .app-icon {
- font-size: lib.s(18);
- }
-
- .image {
- @include lib.rounded(10);
-
- background-size: cover;
- background-position: center;
- margin-top: lib.s(3);
- min-width: lib.s(64);
- min-height: lib.s(64);
-
- &.small {
- min-width: lib.s(48);
- min-height: lib.s(48);
- }
- }
-
- .summary {
- @include font.title;
-
- font-size: lib.s(16);
- }
-
- .body {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-}
diff --git a/scss/launcher.scss b/scss/launcher.scss
deleted file mode 100644
index ff2c422..0000000
--- a/scss/launcher.scss
+++ /dev/null
@@ -1,332 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "lib";
-@use "font";
-
-@mixin launcher($mode, $colour) {
- &.#{$mode} {
- @include lib.border($colour, 0.7, 2);
-
- label.icon {
- color: $colour;
- }
-
- .separator {
- background-color: color.change($colour, $alpha: 0.7);
- }
-
- .result:focus {
- color: $colour;
-
- .sublabel {
- color: color.mix(scheme.$subtext0, $colour, 60%);
- }
- }
-
- &.lines {
- .search-bar {
- .mode {
- @include lib.border($colour, $width: 2, $force: true);
- }
-
- .entry {
- border-bottom: lib.s(2) solid $colour;
- }
- }
-
- .mode-switcher .mode {
- &.selected {
- border-top: lib.s(2) solid $colour;
- }
-
- &:hover,
- &:focus {
- color: $colour;
- }
-
- &:active {
- color: color.mix($colour, scheme.$base, 80%);
- }
- }
-
- .result:focus {
- border-bottom: lib.s(2) solid $colour;
- }
- }
-
- &.round {
- .search-bar .mode {
- background-color: $colour;
- }
-
- .mode-switcher .mode.selected {
- color: $colour;
- }
- }
- }
-}
-
-.launcher {
- @include lib.rounded(10);
- @include lib.element-decel;
- @include lib.shadow;
- @include font.mono;
-
- background-color: scheme.$base;
- color: scheme.$text;
- padding: lib.s(14);
- font-size: lib.s(16);
- min-width: lib.s(700);
- min-height: lib.s(420);
-
- @include launcher(apps, scheme.$primary);
- @include launcher(files, scheme.$secondary);
- @include launcher(math, scheme.$tertiary);
-
- .search-bar {
- margin-bottom: lib.s(15);
-
- @include lib.spacing(10);
-
- .mode {
- @include lib.rounded(5);
- @include lib.element-decel;
-
- padding: lib.s(5) lib.s(10);
-
- @include lib.spacing(3);
-
- .icon {
- font-size: lib.s(20);
- }
- }
- }
-
- .mode-switcher .mode {
- @include lib.element-decel;
-
- padding-top: lib.s(10);
-
- .icon {
- font-size: lib.s(24);
- }
-
- & > box {
- @include lib.spacing(10);
- }
- }
-
- .result {
- @include lib.element-decel;
-
- padding-left: lib.s(10);
-
- .icon {
- font-size: lib.s(32);
- }
-
- .has-sublabel {
- padding: lib.s(3) 0;
- }
-
- .sublabel {
- @include lib.element-decel;
-
- color: scheme.$subtext0;
- font-size: lib.s(14);
- }
-
- & > box {
- @include lib.spacing(10);
- }
-
- &.italic {
- font-style: italic;
- }
-
- &:hover {
- background-color: scheme.$surface0;
- }
-
- &:active {
- background-color: color.mix(scheme.$surface0, scheme.$surface1, 70%);
- }
- }
-
- .math {
- .preview > * {
- margin-bottom: lib.s(10);
- }
-
- .result {
- @include lib.spacing(10);
- }
- }
-
- .swatches {
- margin-bottom: lib.s(5);
-
- @include lib.spacing(3);
- }
-
- .swatch {
- @include lib.rounded(100);
-
- min-width: lib.s(16);
- min-height: lib.s(16);
-
- &.big {
- min-height: lib.s(32);
-
- &.left {
- @include lib.border(scheme.$overlay0, 0.3, $force: true);
-
- border-right: none;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- }
-
- &.right {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- }
- }
- }
-
- .wallpaper {
- .thumbnail {
- background-size: cover;
- background-position: center;
- }
-
- &.compact .thumbnail {
- @include lib.rounded(100);
-
- min-width: lib.s(32);
- min-height: lib.s(32);
- }
-
- &:not(.compact) {
- @include lib.spacing(3, true);
-
- .thumbnail {
- @include lib.rounded(10);
-
- & > * {
- background-size: cover;
- background-position: center;
-
- &:first-child {
- @include lib.rounded(10, $tr: 0, $br: 0);
- }
-
- &:last-child {
- @include lib.rounded(10, $tl: 0, $bl: 0);
- }
- }
- }
- }
-
- &.medium .thumbnail {
- min-height: lib.s(96);
- }
-
- &.large .thumbnail {
- min-height: lib.s(160);
- }
- }
-
- &.lines {
- .mode-switcher .mode {
- border-top: lib.s(2) solid transparent;
- }
-
- .result {
- border-bottom: lib.s(2) solid transparent;
- }
-
- .wallpaper {
- padding-top: lib.s(5);
-
- &.compact {
- padding-top: lib.s(3);
- padding-bottom: lib.s(3);
- }
- }
- }
-
- &.round {
- .search-bar {
- .mode {
- @include lib.rounded(10);
-
- color: color.change(scheme.$base, $alpha: 1);
-
- .icon {
- color: color.change(scheme.$base, $alpha: 1);
- }
- }
-
- .entry {
- @include lib.rounded(10);
-
- padding: lib.s(5) lib.s(10);
- background-color: color.mix(scheme.$base, scheme.$surface0, 30%);
- }
- }
-
- .mode-switcher {
- padding-top: lib.s(10);
-
- @include lib.spacing(10);
-
- .mode {
- @include lib.rounded(10);
-
- padding: lib.s(5);
- background-color: color.mix(scheme.$base, scheme.$surface0, 50%);
-
- &:not(.selected) .icon {
- color: scheme.$text;
- }
-
- &:hover,
- &:focus {
- background-color: scheme.$surface0;
- }
-
- &:active {
- background-color: color.mix(scheme.$surface0, scheme.$surface1, 70%);
- }
- }
- }
-
- .result {
- @include lib.rounded(10);
-
- padding-right: lib.s(10);
- margin-bottom: lib.s(5);
- margin-right: lib.s(5);
-
- &:focus {
- background-color: scheme.$surface0;
- }
- }
-
- .math .preview .result {
- @include lib.rounded(20);
-
- background-color: scheme.$surface0;
- padding: lib.s(5) lib.s(10);
- }
-
- .wallpaper-container {
- padding-right: 0;
-
- .wallpaper:not(.compact) {
- padding-top: lib.s(8);
- padding-bottom: lib.s(3);
- }
- }
- }
-}
diff --git a/scss/mediadisplay.scss b/scss/mediadisplay.scss
deleted file mode 100644
index a167133..0000000
--- a/scss/mediadisplay.scss
+++ /dev/null
@@ -1,139 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "lib";
-@use "font";
-
-.mediadisplay {
- @include font.mono;
-
- background-color: scheme.$base;
- color: scheme.$text;
- padding: lib.s(20);
- min-height: lib.s(200);
-
- .visualiser {
- background-color: scheme.$primary; // Visualiser colour
- margin-right: lib.s(5); // Gaps between bars
- min-width: lib.s(10); // Bar width
- color: scheme.$error;
- font-size: lib.s(24);
- font-weight: bold;
- }
-
- .cover-art {
- @include lib.rounded(10);
- @include lib.element-decel;
-
- background-position: center;
- background-repeat: no-repeat;
- background-size: cover;
- min-width: lib.s(196);
- min-height: lib.s(196);
- font-size: lib.s(96);
- font-weight: bold;
- background-color: scheme.$surface0;
- color: scheme.$subtext0;
- }
-
- .details {
- @include font.title;
-
- font-size: lib.s(14);
- margin-top: lib.s(5);
- margin-left: lib.s(15);
-
- .title {
- font-size: lib.s(28);
- font-weight: 500;
- color: scheme.$text;
- }
-
- .artist {
- font-size: lib.s(18);
- color: scheme.$secondary;
- }
-
- .controls {
- @include lib.rounded(1000);
- @include font.icon;
-
- margin-top: lib.s(10);
- background-color: color.change(scheme.$overlay0, $alpha: 0.4);
- font-size: lib.s(28);
- padding: lib.s(3) lib.s(8);
-
- @include lib.spacing(10);
-
- & > button {
- @include lib.element-decel;
-
- &:hover,
- &:focus {
- color: color.mix(scheme.$subtext1, scheme.$subtext0, 50%);
- }
-
- &:active {
- color: scheme.$subtext0;
- }
-
- &:disabled {
- color: scheme.$subtext0;
- }
- }
- }
- }
-
- .center-module {
- @include lib.rounded(20);
- margin: 0 lib.s(40);
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- }
-
- .selector {
- @include lib.rounded(15);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$overlay0, $alpha: 0.4);
- padding: lib.s(8) lib.s(15);
-
- .identity {
- @include lib.spacing(8);
- }
-
- button {
- @include lib.element-decel;
-
- &:hover,
- &:focus {
- color: color.mix(scheme.$subtext1, scheme.$subtext0, 50%);
- }
-
- &:active {
- color: scheme.$subtext0;
- }
- }
-
- .list > button {
- margin-top: lib.s(5);
- color: scheme.$subtext1;
-
- &:hover,
- &:focus {
- color: color.mix(scheme.$subtext1, scheme.$subtext0, 50%);
- }
-
- &:active {
- color: scheme.$subtext0;
- }
- }
- }
-
- .time {
- @include lib.rounded(1000);
-
- font-size: lib.s(16);
- background-color: color.change(scheme.$overlay0, $alpha: 0.4);
- padding: lib.s(5) lib.s(10);
- margin-bottom: lib.s(10);
- }
-}
diff --git a/scss/navbar.scss b/scss/navbar.scss
deleted file mode 100644
index 72ace59..0000000
--- a/scss/navbar.scss
+++ /dev/null
@@ -1,65 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "lib";
-@use "font";
-
-.navbar {
- @include font.mono;
-
- background-color: scheme.$base;
-
- button {
- color: scheme.$subtext1;
-
- &:hover,
- &:focus {
- color: scheme.$subtext0;
- }
-
- &:active {
- color: color.change(scheme.$overlay2, $alpha: 1);
- }
-
- &.current {
- .nav-button {
- background-color: scheme.$primary;
- color: color.change(scheme.$base, $alpha: 1);
- }
-
- &:hover .nav-button,
- &:focus .nav-button {
- background-color: color.mix(scheme.$primary, scheme.$base, 80%);
- }
-
- &:active .nav-button {
- background-color: color.mix(scheme.$primary, scheme.$base, 70%);
- }
- }
-
- &:first-child .nav-button {
- margin-top: lib.s(10);
- }
-
- &:last-child .nav-button {
- margin-bottom: lib.s(10);
- }
- }
-
- .nav-button {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- padding: lib.s(10) lib.s(8);
- margin: lib.s(5) lib.s(8);
- min-width: lib.s(40);
-
- .icon {
- font-size: lib.s(28);
- }
-
- .label {
- font-size: lib.s(12);
- margin-bottom: lib.s(5);
- }
- }
-}
diff --git a/scss/notifpopups.scss b/scss/notifpopups.scss
deleted file mode 100644
index 92d2760..0000000
--- a/scss/notifpopups.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "lib";
-@use "font";
-
-@mixin popup($colour) {
- .separator {
- background-color: $colour;
- }
-
- .image {
- @include lib.border($colour, 0.05);
- }
-}
-
-.notifpopups {
- min-width: lib.s(425);
- padding-left: lib.s(10); // So notifications can overshoot for init animation
- padding-right: lib.s(5);
- padding-top: lib.s(5);
-
- .notification {
- .wrapper {
- padding: lib.s(5); // For shadow
- }
-
- .inner {
- @include lib.rounded(10);
- @include lib.shadow;
-
- background-color: scheme.$base;
-
- &.low {
- @include popup(scheme.$overlay0);
- }
-
- &.normal {
- @include popup(scheme.$primary);
- }
-
- &.critical {
- @include lib.border(scheme.$error, 0.5);
- @include popup(scheme.$error);
-
- @if not scheme.$borders {
- background-color: color.mix(scheme.$base, scheme.$error, 95%);
- }
- }
- }
- }
-}
diff --git a/scss/osds.scss b/scss/osds.scss
deleted file mode 100644
index d7afd24..0000000
--- a/scss/osds.scss
+++ /dev/null
@@ -1,51 +0,0 @@
-@use "scheme";
-@use "lib";
-@use "font";
-
-.brightness,
-.volume {
- @include lib.rounded(8);
- @include lib.border(scheme.$overlay0, 0.1);
- @include lib.shadow;
- @include font.mono;
-
- background-color: scheme.$base;
- font-size: lib.s(16);
- padding: lib.s(3);
-
- .inner {
- @include lib.fluent-decel(1000ms);
-
- min-width: lib.s(300);
- min-height: lib.s(32);
- background-color: scheme.$teal;
- }
-}
-
-.volume .inner.mute {
- background-color: scheme.$overlay0;
-}
-
-.lock {
- @include lib.rounded(10);
- @include lib.border(scheme.$overlay0, 0.1);
- @include lib.shadow;
- @include lib.element-decel;
- @include font.mono;
-
- min-width: lib.s(80);
- min-height: lib.s(80);
- padding: lib.s(10);
- background-color: scheme.$base;
- color: scheme.$overlay0;
- font-size: lib.s(16);
- font-weight: bold;
-
- &.enabled {
- color: scheme.$text;
- }
-
- .icon {
- font-size: lib.s(48);
- }
-}
diff --git a/scss/scheme/_default.scss b/scss/scheme/_default.scss
deleted file mode 100644
index 71ea197..0000000
--- a/scss/scheme/_default.scss
+++ /dev/null
@@ -1,31 +0,0 @@
-$rosewater: #edcbc5;
-$flamingo: #d3a4a4;
-$pink: #d792c6;
-$mauve: #c678dd;
-$red: #be5046;
-$maroon: #e06c75;
-$peach: #d19a66;
-$yellow: #e5c07b;
-$green: #98c379;
-$teal: #56b6c2;
-$sky: #90ccd7;
-$sapphire: #389dcc;
-$blue: #61afef;
-$lavender: #8e98d9;
-$text: #abb2bf;
-$subtext1: #95a0b5;
-$subtext0: #838b9c;
-$overlay2: #767f8f;
-$overlay1: #666e7c;
-$overlay0: #5c6370;
-$surface2: #4b5263;
-$surface1: #3c414f;
-$surface0: #30343e;
-$base: #282c34;
-$mantle: #21242b;
-$crust: #1e2126;
-$success: #98c379;
-$error: #be5046;
-$primary: #d19a66;
-$secondary: #61afef;
-$tertiary: #98c379;
diff --git a/scss/session.scss b/scss/session.scss
deleted file mode 100644
index 69c8b33..0000000
--- a/scss/session.scss
+++ /dev/null
@@ -1,58 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "lib";
-@use "font";
-
-.session {
- background-color: rgba(0, 0, 0, 0.3);
-
- .inner {
- @include lib.rounded(10);
- @include lib.border(scheme.$flamingo, 0.5, 2);
- @include lib.shadow;
- @include font.mono;
-
- background-color: scheme.$mantle;
- color: scheme.$text;
- padding: lib.s(18) lib.s(20);
-
- @include lib.spacing(10, true);
-
- & > * {
- @include lib.spacing(20);
- }
-
- .item {
- font-size: lib.s(14);
-
- @include lib.spacing($vertical: true);
-
- button {
- @include lib.rounded(100);
- @include lib.element-decel(300ms);
-
- background-color: color.change(scheme.$surface0, $alpha: 0.4);
- min-width: lib.s(100);
- min-height: lib.s(100);
- font-size: lib.s(32);
-
- &:hover {
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- }
-
- &:focus {
- background-color: color.mix(scheme.$flamingo, scheme.$base, 70%);
- color: color.change(scheme.$base, $alpha: 1);
- }
-
- &:active {
- background-color: color.mix(scheme.$flamingo, scheme.$base, 50%);
- }
- }
-
- .label {
- font-weight: 500;
- }
- }
- }
-}
diff --git a/scss/sidebar.scss b/scss/sidebar.scss
deleted file mode 100644
index d82ad7f..0000000
--- a/scss/sidebar.scss
+++ /dev/null
@@ -1,1118 +0,0 @@
-@use "sass:color";
-@use "sass:list";
-@use "scheme";
-@use "lib";
-@use "font";
-
-@mixin notification($accent) {
- .separator {
- background-color: $accent;
- }
-
- .image {
- @include lib.border($accent, 0.05);
- }
-}
-
-@mixin button {
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.5);
-
- &:hover,
- &:focus {
- background-color: color.change(scheme.$surface2, $alpha: 0.5);
- }
-
- &:active {
- background-color: color.change(scheme.$overlay0, $alpha: 0.5);
- }
-
- &:disabled {
- color: scheme.$subtext0;
- }
-}
-
-@mixin button-active {
- @include lib.element-decel;
-
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.5);
-
- &:hover,
- &:focus {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 30%), $alpha: 0.5);
- }
-
- &:active {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 20%), $alpha: 0.5);
- }
-}
-
-@mixin media-button {
- @include lib.element-decel;
-
- &:disabled {
- color: color.change(scheme.$overlay2, $alpha: 1);
- }
-
- &:hover,
- &:focus {
- color: color.mix(scheme.$subtext1, scheme.$subtext0, 50%);
- }
-
- &:active {
- color: scheme.$subtext0;
- }
-}
-
-.sidebar {
- @include font.mono;
-
- background-color: scheme.$base;
- color: scheme.$text;
- padding: lib.s(18) lib.s(20);
- min-width: lib.s(380);
-
- .pane {
- @include lib.spacing(20, true);
- }
-
- .separator {
- background-color: if(scheme.$light, scheme.$surface1, scheme.$overlay0);
- margin: 0 lib.s(10);
- }
-
- .header-bar {
- margin-bottom: lib.s(10);
-
- @include lib.spacing;
-
- & > :not(button) {
- font-weight: bold;
- font-size: lib.s(16);
- }
-
- & > button {
- @include lib.element-decel;
- @include lib.rounded(10);
-
- padding: lib.s(3) lib.s(8);
-
- &:disabled {
- color: color.change(scheme.$overlay0, $alpha: 1);
- }
-
- &:hover,
- &:focus {
- color: scheme.$subtext0;
- }
-
- &:active {
- color: color.change(scheme.$overlay2, $alpha: 1);
- }
-
- &.enabled {
- $-base: color.change(scheme.$base, $alpha: 1);
-
- background-color: scheme.$primary;
- color: $-base;
-
- &:hover,
- &:focus {
- background-color: color.mix(scheme.$primary, $-base, 80%);
- }
-
- &:active {
- background-color: color.mix(scheme.$primary, $-base, 70%);
- }
- }
- }
- }
-
- .empty {
- color: scheme.$subtext0;
- font-size: lib.s(18);
-
- .icon {
- font-size: lib.s(48);
- }
- }
-
- .user {
- @include lib.spacing(15);
-
- .face {
- @include lib.rounded(10);
-
- background-position: center;
- background-repeat: no-repeat;
- background-size: cover;
- min-width: lib.s(96);
- min-height: lib.s(96);
- font-size: lib.s(48);
- font-weight: bold;
- background-color: scheme.$base;
- }
-
- .details {
- font-size: lib.s(14);
-
- @include lib.spacing(8, true);
-
- .name {
- font-size: lib.s(18);
- color: scheme.$text;
- margin-bottom: lib.s(10);
- }
-
- $-colours: scheme.$yellow, scheme.$blue;
- @for $i from 1 through list.length($-colours) {
- :nth-child(#{$i + 1}) {
- color: list.nth($-colours, $i);
- }
- }
- }
- }
-
- .media {
- @include lib.spacing(15);
-
- .cover-art {
- @include lib.rounded(10);
- @include lib.element-decel;
-
- background-position: center;
- background-repeat: no-repeat;
- background-size: cover;
- min-width: lib.s(128);
- min-height: lib.s(128);
- font-size: lib.s(64);
- font-weight: bold;
- background-color: scheme.$base;
- color: scheme.$subtext0;
- }
-
- .details {
- font-size: lib.s(14);
-
- .title {
- font-size: lib.s(16);
- color: scheme.$text;
- }
-
- .artist {
- color: scheme.$green;
- }
-
- .controls {
- margin-top: lib.s(20);
- margin-bottom: lib.s(5);
- font-size: lib.s(24);
-
- & > button {
- @include media-button;
- }
- }
-
- .slider {
- @include lib.rounded(5);
- @include lib.fluent-decel(1000ms);
-
- min-height: lib.s(8);
- background-color: scheme.$overlay0;
- color: scheme.$subtext1;
- }
-
- .time {
- margin-top: lib.s(5);
- font-size: lib.s(13);
- color: scheme.$subtext0;
- }
- }
- }
-
- .notification {
- .wrapper {
- padding-bottom: lib.s(10);
- }
-
- .inner {
- @include lib.rounded(20);
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
-
- &.low {
- @include notification(if(scheme.$light, scheme.$surface1, scheme.$overlay0));
-
- @if not scheme.$borders {
- background-color: color.change(scheme.$surface0, $alpha: 0.4);
- }
- }
-
- &.normal {
- @include lib.border(scheme.$primary, if(scheme.$light, 0.5, 0.3));
- @include notification(scheme.$primary);
- }
-
- &.critical {
- @include lib.border(scheme.$error, 0.8);
- @include notification(scheme.$error);
-
- @if not scheme.$borders {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$error, 80%), $alpha: 0.4);
- }
- }
- }
-
- .actions {
- @include lib.spacing;
-
- & > button {
- @include button;
- @include lib.rounded(10);
-
- padding: lib.s(5) lib.s(10);
- }
- }
- }
-
- .upcoming {
- .list {
- min-height: lib.s(300);
- }
-
- .day {
- @include lib.spacing($vertical: true);
-
- &:not(:first-child) {
- margin-top: lib.s(20);
- }
-
- .date {
- margin-left: lib.s(10);
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- .events {
- @include lib.rounded(20);
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(10, true);
- }
-
- .event {
- @include lib.spacing(8);
- }
-
- .calendar-indicator {
- @include lib.rounded(5);
-
- min-width: lib.s(1);
-
- $-colours: scheme.$red, scheme.$sapphire, scheme.$flamingo, scheme.$maroon, scheme.$pink, scheme.$sky,
- scheme.$peach, scheme.$yellow, scheme.$green, scheme.$rosewater, scheme.$mauve, scheme.$teal,
- scheme.$blue;
- @for $i from 1 through list.length($-colours) {
- &.calendar-#{$i} {
- background-color: list.nth($-colours, $i);
- }
- }
- }
- }
- }
-
- .players {
- .player {
- @include lib.spacing(40, true);
-
- .cover-art {
- @include lib.rounded(10);
- @include lib.element-decel;
- @include lib.shadow(scheme.$mantle, $blur: 5, $spread: 2);
-
- background-position: center;
- background-repeat: no-repeat;
- background-size: cover;
- min-width: lib.s(256);
- min-height: lib.s(256);
- font-size: lib.s(96);
- font-weight: bold;
- background-color: scheme.$base;
- color: scheme.$subtext0;
- margin-top: lib.s(20);
- }
-
- .progress {
- margin: 0 lib.s(40);
-
- .slider {
- @include lib.rounded(8);
- @include lib.fluent-decel(1000ms);
-
- min-height: lib.s(15);
- background-color: scheme.$overlay0;
- color: scheme.$subtext1;
- }
-
- .time {
- margin-top: lib.s(5);
- font-size: lib.s(13);
- color: scheme.$subtext1;
- }
- }
-
- .details {
- font-size: lib.s(14);
- margin-top: lib.s(20);
-
- @include lib.spacing(3, true);
-
- .title {
- font-size: lib.s(18);
- color: scheme.$text;
- font-weight: bold;
- }
-
- .artist {
- color: scheme.$green;
- }
-
- .album {
- color: scheme.$subtext0;
- }
- }
-
- .controls {
- margin-top: lib.s(-20);
- margin-bottom: lib.s(5);
-
- button {
- @include media-button;
-
- // Cause some nerd font icons don't have the correct width
- &.needs-adjustment {
- padding-right: lib.s(5);
- }
- }
-
- .playback {
- font-size: lib.s(32);
-
- @include lib.spacing(40);
- }
-
- .options {
- margin: 0 lib.s(40);
- margin-top: lib.s(-10);
- font-size: lib.s(20);
-
- @include lib.spacing(20);
- }
- }
- }
-
- .indicators {
- @include lib.spacing(10);
-
- & > button {
- @include lib.rounded(1000);
- @include lib.element-decel;
-
- min-width: lib.s(10);
- min-height: lib.s(10);
-
- background-color: color.change(scheme.$overlay0, $alpha: 0.5);
-
- &:hover,
- &:focus {
- background-color: color.change(scheme.$overlay1, $alpha: 0.5);
- }
-
- &:active {
- background-color: color.change(scheme.$overlay2, $alpha: 0.5);
- }
-
- &.active {
- background-color: color.change(scheme.$primary, $alpha: 0.9);
-
- &:hover,
- &:focus {
- background-color: color.change(scheme.$primary, $alpha: 0.7);
- }
-
- &:active {
- background-color: color.change(scheme.$primary, $alpha: 0.6);
- }
- }
- }
- }
- }
-
- .no-wp-prompt {
- font-size: lib.s(16);
- color: scheme.$error;
- margin-top: lib.s(8);
- }
-
- .streams {
- .list {
- @include lib.spacing(10, true);
- }
-
- .stream {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- &.playing {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
- }
-
- .icon {
- font-size: lib.s(28);
- margin-right: lib.s(12);
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- trough {
- @include lib.rounded(10);
-
- min-width: lib.s(100);
- min-height: lib.s(10);
- background-color: color.change(scheme.$error, $alpha: 0.3);
-
- fill {
- @include lib.rounded(10);
-
- background-color: color.change(scheme.$overlay0, $alpha: 1);
- }
-
- highlight {
- @include lib.rounded(10);
-
- background-color: scheme.$subtext1;
- }
- }
-
- & > button {
- @include media-button;
-
- font-size: lib.s(18);
- min-width: lib.s(20);
- min-height: lib.s(20);
- }
- }
- }
-
- .device-selector {
- @include lib.spacing(10, true);
-
- .selector {
- @include lib.rounded(20);
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- .icon {
- font-size: lib.s(20);
- }
-
- .separator {
- margin-bottom: lib.s(8);
- margin-top: lib.s(5);
- background-color: if(scheme.$light, scheme.$overlay1, scheme.$overlay0);
- }
-
- .list {
- color: scheme.$subtext0;
-
- @include lib.spacing(3, true);
- }
-
- .device {
- @include lib.spacing;
- }
-
- .selected {
- color: scheme.$text;
-
- @include lib.spacing(10);
-
- .icon {
- font-size: lib.s(32);
- }
-
- .sublabel {
- color: scheme.$subtext0;
- }
- }
-
- button {
- @include lib.element-decel;
-
- &:hover,
- &:focus {
- color: scheme.$subtext1;
- }
-
- &:active {
- color: scheme.$text;
- }
- }
- }
-
- .stream {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- &.playing {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
- }
-
- .icon {
- font-size: lib.s(28);
- margin-right: lib.s(12);
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- trough {
- @include lib.rounded(10);
-
- min-width: lib.s(100);
- min-height: lib.s(10);
- background-color: color.change(scheme.$error, $alpha: 0.3);
-
- fill {
- @include lib.rounded(10);
-
- background-color: color.change(scheme.$overlay0, $alpha: 1);
- }
-
- highlight {
- @include lib.rounded(10);
-
- background-color: scheme.$subtext1;
- }
- }
-
- & > button {
- @include media-button;
-
- font-size: lib.s(18);
- min-width: lib.s(20);
- min-height: lib.s(20);
- }
- }
- }
-
- .networks {
- .list {
- @include lib.spacing(10, true);
- }
-
- .network {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- &.connected {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
-
- & > button {
- @include button-active;
- }
- }
-
- .icon {
- font-size: lib.s(28);
- margin-right: lib.s(12);
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- & > button {
- @include button;
- @include lib.rounded(1000);
- @include font.icon;
-
- font-size: lib.s(18);
- min-width: lib.s(30);
- min-height: lib.s(30);
- }
- }
- }
-
- .bluetooth {
- .list {
- @include lib.spacing(10, true);
- }
-
- .device {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- &.connected {
- background-color: color.change(color.mix(scheme.$surface1, scheme.$primary, 50%), $alpha: 0.4);
-
- & > button {
- @include button-active;
- }
- }
-
- .icon {
- font-size: lib.s(28);
- margin-right: lib.s(12);
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- & > button {
- @include button;
- @include lib.rounded(1000);
- @include font.icon;
-
- font-size: lib.s(18);
- min-width: lib.s(30);
- min-height: lib.s(30);
- }
- }
- }
-
- .updates {
- .list {
- @include lib.spacing(10, true);
- }
-
- .repo {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- .icon {
- font-size: lib.s(28);
-
- &:not(:last-child) {
- margin-right: lib.s(12);
- }
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- .body {
- margin-top: lib.s(10);
- font-size: lib.s(14);
- }
- }
- }
-
- .news {
- min-height: lib.s(200);
-
- .empty {
- margin-top: lib.s(40);
- }
-
- .list {
- @include lib.spacing(10, true);
- }
-
- .article {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- .icon {
- font-size: lib.s(28);
-
- &:not(:last-child) {
- margin-right: lib.s(12);
- }
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- .body {
- margin-top: lib.s(10);
- font-size: lib.s(14);
- }
- }
- }
-
- .headlines {
- min-height: lib.s(200);
-
- .empty {
- margin-top: lib.s(40);
- }
-
- .list {
- @include lib.spacing(10, true);
- }
-
- .category {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface0, $alpha: 0.5);
- padding: lib.s(10) lib.s(15);
-
- @include lib.spacing(5);
-
- .icon {
- font-size: lib.s(28);
-
- &:not(:last-child) {
- margin-right: lib.s(12);
- }
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- .body {
- margin-top: lib.s(10);
- font-size: lib.s(14);
-
- @include lib.spacing(8, true);
- }
- }
-
- .article {
- @include lib.rounded(20);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface1, $alpha: 0.3);
- padding: lib.s(10) lib.s(15);
-
- .article-body {
- @include font.reading;
- @include lib.element-decel;
-
- font-size: lib.s(15);
- margin-top: lib.s(10);
- color: scheme.$subtext1;
-
- & > :last-child {
- margin-top: lib.s(8);
- }
-
- .title {
- @include font.title;
-
- font-size: lib.s(18);
- font-weight: 500;
- margin-bottom: lib.s(3);
- }
- }
-
- button:hover .article-body,
- button:focus .article-body {
- color: color.mix(scheme.$subtext0, scheme.$blue, 60%);
- }
- }
- }
-
- .time-date {
- padding: lib.s(12) lib.s(8);
- font-size: lib.s(48);
- font-weight: bold;
- color: scheme.$primary;
-
- & > * {
- @include lib.spacing(3);
- }
-
- .ampm {
- font-size: lib.s(24);
- font-weight: normal;
- margin-top: lib.s(18);
- color: scheme.$secondary;
- }
-
- .date {
- font-size: lib.s(20);
- color: scheme.$tertiary;
- }
- }
-
- .calendar {
- @include lib.rounded(20);
-
- background-color: color.change(scheme.$surface1, $alpha: 0.4);
- padding: lib.s(15);
-
- .calendar-view {
- @include lib.spacing(10, true);
-
- .header {
- @include lib.spacing(10);
-
- & > button {
- @include lib.rounded(1000);
- @include lib.element-decel;
-
- background-color: color.change(scheme.$surface2, $alpha: 0.4);
- min-width: lib.s(28);
- min-height: lib.s(28);
- font-size: lib.s(18);
-
- &:first-child {
- padding: 0 lib.s(10);
- }
-
- &:hover,
- &:focus {
- background-color: color.change(scheme.$surface2, $alpha: 0.6);
- }
-
- &:active {
- background-color: color.change(scheme.$surface2, $alpha: 0.8);
- }
- }
- }
-
- .weekdays {
- @include lib.spacing(10);
-
- & > label {
- min-width: lib.s(40);
- font-weight: bold;
- color: scheme.$subtext1;
- }
- }
-
- .month {
- @include lib.spacing(10, true);
- }
-
- .week {
- @include lib.spacing(10);
- }
-
- .day {
- @include lib.rounded(1000);
- @include lib.element-decel;
-
- min-width: lib.s(40);
- min-height: lib.s(40);
-
- &.dim {
- color: scheme.$subtext0;
- }
-
- &.today:not(.dim) {
- background-color: scheme.$primary;
- color: color.change(scheme.$base, $alpha: 1);
- }
-
- &:hover,
- &:focus {
- color: scheme.$subtext0;
- }
-
- &:active {
- color: color.change(scheme.$overlay2, $alpha: 1);
- }
-
- &.dim {
- color: scheme.$subtext0;
-
- &:hover,
- &:focus {
- color: color.change(scheme.$overlay2, $alpha: 1);
- }
-
- &:active {
- color: color.change(scheme.$overlay1, $alpha: 1);
- }
- }
-
- &.today:not(.dim) {
- background-color: scheme.$primary;
- color: color.change(scheme.$base, $alpha: 1);
-
- &:hover,
- &:focus {
- background-color: color.mix(scheme.$primary, scheme.$base, 80%);
- }
-
- &:active {
- background-color: color.mix(scheme.$primary, scheme.$base, 70%);
- }
- }
-
- label {
- margin-top: lib.s(8);
- }
-
- .indicator {
- @include lib.rounded(10);
- @include lib.element-decel;
-
- min-height: lib.s(3);
- margin: 0 lib.s(8);
- }
-
- $-max: 5;
- @for $i from 1 through $-max {
- &.events-#{$i} {
- $-colour: color.mix(scheme.$red, scheme.$green, calc(100% / $-max) * $i);
-
- .indicator {
- background-color: $-colour;
- }
-
- &:hover .indicator,
- &:focus .indicator {
- background-color: color.mix($-colour, scheme.$base, 80%);
- }
-
- &:active .indicator {
- background-color: color.mix($-colour, scheme.$base, 70%);
- }
-
- &.dim .indicator {
- background-color: color.mix($-colour, scheme.$base, 60%);
- }
-
- &.today:not(.dim) {
- $-colour: color.mix($-colour, color.complement(scheme.$primary), 50%);
-
- .indicator {
- background-color: $-colour;
- }
-
- &:hover .indicator,
- &:focus .indicator {
- background-color: color.mix($-colour, scheme.$base, 80%);
- }
-
- &:active .indicator {
- background-color: color.mix($-colour, scheme.$base, 70%);
- }
- }
- }
- }
- }
- }
-
- .events {
- @include lib.spacing(10, true);
-
- .header {
- font-weight: bold;
-
- @include lib.spacing(10);
-
- & > button {
- @include lib.rounded(1000);
- @include lib.element-decel;
-
- min-width: lib.s(24);
- min-height: lib.s(24);
-
- &:hover,
- &:focus {
- color: scheme.$subtext0;
- }
-
- &:active {
- color: color.change(scheme.$overlay2, $alpha: 1);
- }
- }
- }
-
- scrollable {
- min-height: lib.s(315);
- }
-
- .date {
- margin-left: lib.s(10);
- }
-
- .sublabel {
- font-size: lib.s(14);
- color: scheme.$subtext0;
- }
-
- .list {
- padding: lib.s(5);
-
- @include lib.spacing(10, true);
- }
-
- .event {
- @include lib.spacing(8);
- }
-
- .calendar-indicator {
- @include lib.rounded(5);
-
- min-width: lib.s(1);
-
- $-colours: scheme.$red, scheme.$sapphire, scheme.$flamingo, scheme.$maroon, scheme.$pink, scheme.$sky,
- scheme.$peach, scheme.$yellow, scheme.$green, scheme.$rosewater, scheme.$mauve, scheme.$teal,
- scheme.$blue;
- @for $i from 1 through list.length($-colours) {
- &.calendar-#{$i} {
- background-color: list.nth($-colours, $i);
- }
- }
- }
- }
- }
-}
diff --git a/scss/widgets.scss b/scss/widgets.scss
deleted file mode 100644
index 719e82c..0000000
--- a/scss/widgets.scss
+++ /dev/null
@@ -1,136 +0,0 @@
-@use "sass:color";
-@use "scheme";
-@use "lib";
-@use "font";
-
-separator,
-.separator {
- @include lib.rounded(2);
-
- min-width: lib.s(0.5);
- min-height: lib.s(0.5);
-}
-
-@keyframes appear {
- from {
- opacity: 0;
- }
-
- to {
- opacity: 1;
- }
-}
-
-@mixin -appear($duration: 100ms) {
- animation-name: appear;
- animation-duration: $duration;
- animation-timing-function: ease-out;
- animation-iteration-count: 1;
-}
-
-menu {
- @include -appear;
- @include lib.rounded(10);
- @include lib.border(scheme.$blue, 0.4);
- @include font.mono;
-
- padding: lib.s(8);
- background-color: scheme.$surface0;
- color: scheme.$text;
- font-size: lib.s(14);
-
- & > menuitem {
- @include lib.element-decel;
- @include lib.rounded(8);
-
- padding: lib.s(5) lib.s(8);
-
- &:hover,
- &:focus {
- background-color: scheme.$surface1;
- }
-
- &:active {
- background-color: scheme.$surface2;
- }
-
- &:disabled {
- color: scheme.$subtext0;
- }
-
- & > arrow {
- @include lib.rounded(1000);
-
- min-width: lib.s(5);
- min-height: lib.s(5);
- background-color: scheme.$blue;
-
- &.right {
- margin-left: lib.s(12);
- }
-
- &.left {
- margin-right: lib.s(12);
- }
- }
- }
-
- & > separator {
- background-color: color.mix(scheme.$blue, scheme.$surface0, 70%);
- margin: lib.s(5) 0;
- }
-}
-
-tooltip,
-.tooltip {
- @include lib.rounded(10);
- @include lib.border(scheme.$primary, 0.7);
- @include font.mono;
-
- background-color: scheme.$surface0;
- color: scheme.$text;
- padding: lib.s(5) lib.s(10);
-}
-
-tooltip {
- @include -appear(200ms);
-}
-
-.tooltip {
- @include lib.shadow;
-
- margin: lib.s(3);
-}
-
-scrollbar {
- slider {
- @include lib.rounded(1000);
- @include lib.element-decel;
-
- min-width: lib.s(3);
- min-height: lib.s(30);
- background-color: color.change(scheme.$overlay0, $alpha: 0.6);
-
- &:hover,
- &:focus {
- min-width: lib.s(6);
- background-color: color.change(scheme.$overlay0, $alpha: 0.7);
- }
-
- &:active {
- background-color: color.change(scheme.$overlay1, $alpha: 0.8);
- }
- }
-}
-
-popover {
- @include -appear;
- @include lib.rounded(10);
- @include lib.border(scheme.$yellow, 0.4);
- @include font.mono;
-
- padding: lib.s(8);
- background-color: color.mix(scheme.$base, scheme.$yellow, 90%);
- color: scheme.$text;
- font-size: lib.s(14);
-}
diff --git a/src/config/defaults.ts b/src/config/defaults.ts
deleted file mode 100644
index a5ebbbc..0000000
--- a/src/config/defaults.ts
+++ /dev/null
@@ -1,183 +0,0 @@
-import { Astal } from "astal/gtk3";
-
-export default {
- style: {
- transparency: "normal", // One of "off", "low", "normal", "high"
- borders: true,
- vibrant: false, // Extra saturation
- },
- config: {
- notifyOnError: true,
- },
- // Modules
- bar: {
- vertical: true,
- style: "gaps", // One of "gaps", "panel", "embedded"
- layout: {
- type: "centerbox", // One of "centerbox", "flowbox"
- centerbox: {
- start: ["osIcon", "activeWindow", "mediaPlaying", "brightnessSpacer"],
- center: ["workspaces"],
- end: [
- "volumeSpacer",
- "tray",
- "statusIcons",
- "pkgUpdates",
- "notifCount",
- "battery",
- "dateTime",
- "power",
- ],
- },
- flowbox: [
- "osIcon",
- "workspaces",
- "brightnessSpacer",
- "activeWindow",
- "volumeSpacer",
- "dateTime",
- "tray",
- "battery",
- "statusIcons",
- "notifCount",
- "power",
- ],
- },
- modules: {
- workspaces: {
- shown: 5,
- showLabels: false,
- labels: ["", "", "", "", ""],
- xalign: -1,
- showWindows: false,
- },
- dateTime: {
- format: "%d/%m/%y %R",
- detailedFormat: "%c",
- },
- },
- },
- launcher: {
- style: "lines", // One of "lines", "round"
- actionPrefix: ">", // Prefix for launcher actions
- apps: {
- maxResults: 30, // Actual max results, -1 for infinite
- },
- files: {
- maxResults: 40, // Actual max results, -1 for infinite
- fdOpts: ["-a", "-t", "f"], // Options to pass to `fd`
- shortenThreshold: 30, // Threshold to shorten paths in characters
- },
- math: {
- maxResults: 40, // Actual max results, -1 for infinite
- },
- todo: {
- notify: true,
- },
- wallpaper: {
- maxResults: 20, // Actual max results, -1 for infinite
- showAllEmpty: true, // Show all wallpapers when search is empty
- style: "medium", // One of "compact", "medium", "large"
- },
- disabledActions: ["logout", "shutdown", "reboot", "hibernate"], // Actions to hide, see launcher/actions.tsx for available actions
- },
- notifpopups: {
- maxPopups: -1,
- expire: false,
- agoTime: true, // Whether to show time in ago format, e.g. 10 mins ago, or raw time, e.g. 10:42
- },
- osds: {
- volume: {
- position: Astal.WindowAnchor.RIGHT, // Top = 2, Right = 4, Left = 8, Bottom = 16
- margin: 20,
- hideDelay: 1500,
- showValue: true,
- },
- brightness: {
- position: Astal.WindowAnchor.LEFT, // Top = 2, Right = 4, Left = 8, Bottom = 16
- margin: 20,
- hideDelay: 1500,
- showValue: true,
- },
- lock: {
- spacing: 5,
- caps: {
- hideDelay: 1000,
- },
- num: {
- hideDelay: 1000,
- },
- },
- },
- sidebar: {
- showOnStartup: false,
- modules: {
- headlines: {
- enabled: true,
- },
- },
- },
- navbar: {
- persistent: false, // Whether to show all the time or only on hover
- appearWidth: 10, // The width in pixels of the hover area for the navbar to show up
- showLabels: false, // Whether to show labels for active buttons
- },
- // Services
- math: {
- maxHistory: 100,
- },
- updates: {
- interval: 900000,
- },
- weather: {
- interval: 600000,
- apiKey: "", // An API key from https://weatherapi.com for accessing weather data
- location: "", // Location as a string or empty to autodetect
- imperial: false,
- },
- cpu: {
- interval: 2000,
- },
- gpu: {
- interval: 2000,
- },
- memory: {
- interval: 5000,
- },
- storage: {
- interval: 5000,
- },
- wallpapers: {
- paths: [
- {
- recursive: true, // Whether to search recursively
- path: "~/Pictures/Wallpapers", // Path to search
- threshold: 0.8, // The threshold to filter wallpapers by size (e.g. 0.8 means wallpaper must be at least 80% of the screen size), 0 to disable
- },
- ],
- },
- calendar: {
- webcals: [] as string[], // An array of urls to ICS files which you can curl
- upcomingDays: 7, // Number of days which count as upcoming
- notify: true,
- },
- thumbnailer: {
- maxAttempts: 5,
- timeBetweenAttempts: 300,
- defaults: {
- width: 100,
- height: 100,
- exact: true,
- },
- },
- news: {
- apiKey: "", // An API key from https://newsdata.io for accessing news
- countries: ["current"], // A list of country codes or "current" for the current location
- categories: ["business", "top", "technology", "world"], // A list of news categories to filter by
- languages: ["en"], // A list of languages codes to filter by
- domains: [] as string[], // A list of news domains to pull from, see https://newsdata.io/news-sources for available domains
- excludeDomains: ["news.google.com"], // A list of news domains to exclude, e.g. bbc.co.uk
- timezone: "", // A timezone to filter by, e.g. "America/New_York", see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- pages: 3, // Number of pages to pull (each page is 10 articles)
- },
-};
diff --git a/src/config/funcs.ts b/src/config/funcs.ts
deleted file mode 100644
index 77ee8dd..0000000
--- a/src/config/funcs.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { notify } from "@/utils/system";
-import { Gio, GLib, monitorFile, readFileAsync, Variable, writeFileAsync } from "astal";
-import config from ".";
-import { loadStyleAsync } from "../../app";
-import defaults from "./defaults";
-import types from "./types";
-
-type Settings = { [P in keyof T]: T[P] extends object & { length?: never } ? Settings : Variable };
-
-const CONFIG = `${GLib.get_user_config_dir()}/caelestia/shell.json`;
-
-const warn = (msg: string) => {
- console.warn(`[CONFIG] ${msg}`);
- if (config.config.notifyOnError.get())
- notify({
- summary: "Invalid config",
- body: msg,
- icon: "dialog-error-symbolic",
- urgency: "critical",
- });
-};
-
-const isObject = (o: any): o is object => typeof o === "object" && o !== null && !Array.isArray(o);
-
-const isCorrectType = (v: any, type: string | string[] | number[], path: string) => {
- if (Array.isArray(type)) {
- // type is array of valid values
- if (!type.includes(v as never)) {
- warn(`Invalid value for ${path}: ${v} != ${type.map(v => `"${v}"`).join(" | ")}`);
- return false;
- }
- } else if (type.startsWith("array of ")) {
- // Array of ...
- if (Array.isArray(v)) {
- // Remove invalid items but always return true
- const arrType = type.slice(9);
- try {
- // Recursively check type
- const type = JSON.parse(arrType);
- if (Array.isArray(type)) {
- v.splice(0, v.length, ...v.filter((item, i) => isCorrectType(item, type, `${path}[${i}]`)));
- } else {
- const valid = v.filter((item, i) =>
- Object.entries(type).every(([k, t]) => {
- if (!item.hasOwnProperty(k)) {
- warn(`Invalid shape for ${path}[${i}]: ${JSON.stringify(item)} != ${arrType}`);
- return false;
- }
- return isCorrectType(item[k], t as any, `${path}[${i}].${k}`);
- })
- );
- v.splice(0, v.length, ...valid); // In-place filter
- }
- } catch {
- const valid = v.filter((item, i) => {
- if (typeof item !== arrType) {
- warn(`Invalid type for ${path}[${i}]: ${typeof item} != ${arrType}`);
- return false;
- }
- return true;
- });
- v.splice(0, v.length, ...valid); // In-place filter
- }
- } else {
- // Type is array but value is not
- warn(`Invalid type for ${path}: ${typeof v} != ${type}`);
- return false;
- }
- } else if (typeof v !== type) {
- // Value is not correct type
- warn(`Invalid type for ${path}: ${typeof v} != ${type}`);
- return false;
- }
-
- return true;
-};
-
-const deepMerge = (a: T, b: U, path = ""): T & U => {
- const merged: { [k: string]: any } = { ...b };
- for (const [k, v] of Object.entries(a)) {
- if (b.hasOwnProperty(k)) {
- const bv = b[k as keyof U];
- if (isObject(v) && isObject(bv)) merged[k] = deepMerge(v, bv, `${path}${k}.`);
- else if (!isCorrectType(bv, types[path + k], path + k)) merged[k] = v;
- } else merged[k] = v;
- }
- return merged as any;
-};
-
-export const convertSettings = (obj: T): Settings =>
- Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, isObject(v) ? convertSettings(v) : Variable(v)])) as any;
-
-const updateSection = (from: { [k: string]: any }, to: { [k: string]: any }, path = "") => {
- for (const [k, v] of Object.entries(from)) {
- if (to.hasOwnProperty(k)) {
- if (isObject(v)) updateSection(v, to[k], `${path}${k}.`);
- else if (!Array.isArray(v) || JSON.stringify(to[k].get()) !== JSON.stringify(v)) to[k].set(v);
- } else warn(`Unknown config key: ${path}${k}`);
- }
-};
-
-export const updateConfig = async () => {
- if (GLib.file_test(CONFIG, GLib.FileTest.EXISTS))
- updateSection(deepMerge(defaults, JSON.parse(await readFileAsync(CONFIG))), config);
- else updateSection(defaults, config);
- await loadStyleAsync();
- console.log("[LOG] Config updated");
-};
-
-export const initConfig = async () => {
- monitorFile(CONFIG, (_, e) => {
- if (e === Gio.FileMonitorEvent.CHANGES_DONE_HINT || e === Gio.FileMonitorEvent.DELETED)
- updateConfig().catch(warn);
- });
- await updateConfig().catch(warn);
-};
-
-export const setConfig = async (path: string, value: any) => {
- const conf = JSON.parse(await readFileAsync(CONFIG));
- let obj = conf;
- for (const p of path.split(".").slice(0, -1)) obj = obj[p];
- obj[path.split(".").at(-1)!] = value;
- await writeFileAsync(CONFIG, JSON.stringify(conf, null, 4));
-};
diff --git a/src/config/index.ts b/src/config/index.ts
deleted file mode 100644
index 80b4dc4..0000000
--- a/src/config/index.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import defaults from "./defaults";
-import { convertSettings } from "./funcs";
-
-const config = convertSettings(defaults);
-
-export const {
- style,
- bar,
- launcher,
- notifpopups,
- osds,
- sidebar,
- navbar,
- math,
- updates,
- weather,
- cpu,
- gpu,
- memory,
- storage,
- wallpapers,
- calendar,
- thumbnailer,
- news,
-} = config;
-export default config;
diff --git a/src/config/literals.ts b/src/config/literals.ts
deleted file mode 100644
index 1908c71..0000000
--- a/src/config/literals.ts
+++ /dev/null
@@ -1,336 +0,0 @@
-export const BAR_MODULES = [
- "osIcon",
- "activeWindow",
- "mediaPlaying",
- "brightnessSpacer",
- "workspaces",
- "volumeSpacer",
- "tray",
- "statusIcons",
- "pkgUpdates",
- "notifCount",
- "battery",
- "dateTime",
- "power",
-];
-
-export const NEWS_COUNTRIES = [
- "af", // Afghanistan
- "al", // Albania
- "dz", // Algeria
- "ad", // Andorra
- "ao", // Angola
- "ar", // Argentina
- "am", // Armenia
- "au", // Australia
- "at", // Austria
- "az", // Azerbaijan
- "bs", // Bahamas
- "bh", // Bahrain
- "bd", // Bangladesh
- "bb", // Barbados
- "by", // Belarus
- "be", // Belgium
- "bz", // Belize
- "bj", // Benin
- "bm", // Bermuda
- "bt", // Bhutan
- "bo", // Bolivia
- "ba", // Bosnia And Herzegovina
- "bw", // Botswana
- "br", // Brazil
- "bn", // Brunei
- "bg", // Bulgaria
- "bf", // Burkina fasco
- "bi", // Burundi
- "kh", // Cambodia
- "cm", // Cameroon
- "ca", // Canada
- "cv", // Cape Verde
- "ky", // Cayman Islands
- "cf", // Central African Republic
- "td", // Chad
- "cl", // Chile
- "cn", // China
- "co", // Colombia
- "km", // Comoros
- "cg", // Congo
- "ck", // Cook islands
- "cr", // Costa Rica
- "hr", // Croatia
- "cu", // Cuba
- "cw", // Curaçao
- "cy", // Cyprus
- "cz", // Czech republic
- "dk", // Denmark
- "dj", // Djibouti
- "dm", // Dominica
- "do", // Dominican republic
- "cd", // DR Congo
- "ec", // Ecuador
- "eg", // Egypt
- "sv", // El Salvador
- "gq", // Equatorial Guinea
- "er", // Eritrea
- "ee", // Estonia
- "sz", // Eswatini
- "et", // Ethiopia
- "fj", // Fiji
- "fi", // Finland
- "fr", // France
- "pf", // French polynesia
- "ga", // Gabon
- "gm", // Gambia
- "ge", // Georgia
- "de", // Germany
- "gh", // Ghana
- "gi", // Gibraltar
- "gr", // Greece
- "gd", // Grenada
- "gt", // Guatemala
- "gn", // Guinea
- "gy", // Guyana
- "ht", // Haiti
- "hn", // Honduras
- "hk", // Hong kong
- "hu", // Hungary
- "is", // Iceland
- "in", // India
- "id", // Indonesia
- "ir", // Iran
- "iq", // Iraq
- "ie", // Ireland
- "il", // Israel
- "it", // Italy
- "ci", // Ivory Coast
- "jm", // Jamaica
- "jp", // Japan
- "je", // Jersey
- "jo", // Jordan
- "kz", // Kazakhstan
- "ke", // Kenya
- "ki", // Kiribati
- "xk", // Kosovo
- "kw", // Kuwait
- "kg", // Kyrgyzstan
- "la", // Laos
- "lv", // Latvia
- "lb", // Lebanon
- "ls", // Lesotho
- "lr", // Liberia
- "ly", // Libya
- "li", // Liechtenstein
- "lt", // Lithuania
- "lu", // Luxembourg
- "mo", // Macau
- "mk", // Macedonia
- "mg", // Madagascar
- "mw", // Malawi
- "my", // Malaysia
- "mv", // Maldives
- "ml", // Mali
- "mt", // Malta
- "mh", // Marshall Islands
- "mr", // Mauritania
- "mu", // Mauritius
- "mx", // Mexico
- "fm", // Micronesia
- "md", // Moldova
- "mc", // Monaco
- "mn", // Mongolia
- "me", // Montenegro
- "ma", // Morocco
- "mz", // Mozambique
- "mm", // Myanmar
- "na", // Namibia
- "nr", // Nauru
- "np", // Nepal
- "nl", // Netherland
- "nc", // New caledonia
- "nz", // New zealand
- "ni", // Nicaragua
- "ne", // Niger
- "ng", // Nigeria
- "kp", // North korea
- "no", // Norway
- "om", // Oman
- "pk", // Pakistan
- "pw", // Palau
- "ps", // Palestine
- "pa", // Panama
- "pg", // Papua New Guinea
- "py", // Paraguay
- "pe", // Peru
- "ph", // Philippines
- "pl", // Poland
- "pt", // Portugal
- "pr", // Puerto rico
- "qa", // Qatar
- "ro", // Romania
- "ru", // Russia
- "rw", // Rwanda
- "lc", // Saint lucia
- "sx", // Saint martin(dutch)
- "ws", // Samoa
- "sm", // San Marino
- "st", // Sao tome and principe
- "sa", // Saudi arabia
- "sn", // Senegal
- "rs", // Serbia
- "sc", // Seychelles
- "sl", // Sierra Leone
- "sg", // Singapore
- "sk", // Slovakia
- "si", // Slovenia
- "sb", // Solomon Islands
- "so", // Somalia
- "za", // South africa
- "kr", // South korea
- "es", // Spain
- "lk", // Sri Lanka
- "sd", // Sudan
- "sr", // Suriname
- "se", // Sweden
- "ch", // Switzerland
- "sy", // Syria
- "tw", // Taiwan
- "tj", // Tajikistan
- "tz", // Tanzania
- "th", // Thailand
- "tl", // Timor-Leste
- "tg", // Togo
- "to", // Tonga
- "tt", // Trinidad and tobago
- "tn", // Tunisia
- "tr", // Turkey
- "tm", // Turkmenistan
- "tv", // Tuvalu
- "ug", // Uganda
- "ua", // Ukraine
- "ae", // United arab emirates
- "gb", // United kingdom
- "us", // United states of america
- "uy", // Uruguay
- "uz", // Uzbekistan
- "vu", // Vanuatu
- "va", // Vatican
- "ve", // Venezuela
- "vi", // Vietnam
- "vg", // Virgin Islands (British)
- "wo", // World
- "ye", // Yemen
- "zm", // Zambia
- "zw", // Zimbabwe
-];
-
-export const NEWS_CATEGORIES = [
- "business",
- "crime",
- "domestic",
- "education",
- "entertainment",
- "environment",
- "food",
- "health",
- "lifestyle",
- "other",
- "politics",
- "science",
- "sports",
- "technology",
- "top",
- "tourism",
- "world",
-];
-
-export const NEWS_LANGUAGES = [
- "af", // Afrikaans
- "sq", // Albanian
- "am", // Amharic
- "ar", // Arabic
- "hy", // Armenian
- "as", // Assamese
- "az", // Azerbaijani
- "bm", // Bambara
- "eu", // Basque
- "be", // Belarusian
- "bn", // Bengali
- "bs", // Bosnian
- "bg", // Bulgarian
- "my", // Burmese
- "ca", // Catalan
- "ckb", // Central Kurdish
- "zh", // Chinese
- "hr", // Croatian
- "cs", // Czech
- "da", // Danish
- "nl", // Dutch
- "en", // English
- "et", // Estonian
- "pi", // Filipino
- "fi", // Finnish
- "fr", // French
- "gl", // Galician
- "ka", // Georgian
- "de", // German
- "el", // Greek
- "gu", // Gujarati
- "ha", // Hausa
- "he", // Hebrew
- "hi", // Hindi
- "hu", // Hungarian
- "is", // Icelandic
- "id", // Indonesian
- "it", // Italian
- "jp", // Japanese
- "kn", // Kannada
- "kz", // Kazakh
- "kh", // Khmer
- "rw", // Kinyarwanda
- "ko", // Korean
- "ku", // Kurdish
- "lv", // Latvian
- "lt", // Lithuanian
- "lb", // Luxembourgish
- "mk", // Macedonian
- "ms", // Malay
- "ml", // Malayalam
- "mt", // Maltese
- "mi", // Maori
- "mr", // Marathi
- "mn", // Mongolian
- "ne", // Nepali
- "no", // Norwegian
- "or", // Oriya
- "ps", // Pashto
- "fa", // Persian
- "pl", // Polish
- "pt", // Portuguese
- "pa", // Punjabi
- "ro", // Romanian
- "ru", // Russian
- "sm", // Samoan
- "sr", // Serbian
- "sn", // Shona
- "sd", // Sindhi
- "si", // Sinhala
- "sk", // Slovak
- "sl", // Slovenian
- "so", // Somali
- "es", // Spanish
- "sw", // Swahili
- "sv", // Swedish
- "tg", // Tajik
- "ta", // Tamil
- "te", // Telugu
- "th", // Thai
- "zht", // Traditional chinese
- "tr", // Turkish
- "tk", // Turkmen
- "uk", // Ukrainian
- "ur", // Urdu
- "uz", // Uzbek
- "vi", // Vietnamese
- "cy", // Welsh
- "zu", // Zulu
-];
diff --git a/src/config/types.ts b/src/config/types.ts
deleted file mode 100644
index c8fb9b4..0000000
--- a/src/config/types.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { BAR_MODULES, NEWS_CATEGORIES, NEWS_COUNTRIES, NEWS_LANGUAGES } from "./literals";
-
-const BOOL = "boolean";
-const STR = "string";
-const NUM = "number";
-const ARR = (type: string | string[]) => `array of ${typeof type === "string" ? type : JSON.stringify(type)}`;
-const OBJ_ARR = (shape: object) => ARR(JSON.stringify(shape));
-
-export default {
- "style.transparency": ["off", "low", "normal", "high"],
- "style.borders": BOOL,
- "style.vibrant": BOOL,
- "config.notifyOnError": BOOL,
- // Bar
- "bar.vertical": BOOL,
- "bar.style": ["gaps", "panel", "embedded"],
- "bar.layout.type": ["centerbox", "flowbox"],
- "bar.layout.centerbox.start": ARR(BAR_MODULES),
- "bar.layout.centerbox.center": ARR(BAR_MODULES),
- "bar.layout.centerbox.end": ARR(BAR_MODULES),
- "bar.layout.flowbox": ARR(BAR_MODULES),
- "bar.modules.workspaces.shown": NUM,
- "bar.modules.workspaces.showLabels": BOOL,
- "bar.modules.workspaces.labels": ARR(STR),
- "bar.modules.workspaces.xalign": NUM,
- "bar.modules.workspaces.showWindows": BOOL,
- "bar.modules.dateTime.format": STR,
- "bar.modules.dateTime.detailedFormat": STR,
- // Launcher
- "launcher.style": ["lines", "round"],
- "launcher.actionPrefix": STR,
- "launcher.apps.maxResults": NUM,
- "launcher.files.maxResults": NUM,
- "launcher.files.fdOpts": ARR(STR),
- "launcher.files.shortenThreshold": NUM,
- "launcher.math.maxResults": NUM,
- "launcher.todo.notify": BOOL,
- "launcher.wallpaper.maxResults": NUM,
- "launcher.wallpaper.showAllEmpty": BOOL,
- "launcher.wallpaper.style": ["compact", "medium", "large"],
- "launcher.disabledActions": ARR(STR),
- // Notif popups
- "notifpopups.maxPopups": NUM,
- "notifpopups.expire": BOOL,
- "notifpopups.agoTime": BOOL,
- // OSDs
- "osds.volume.position": [2, 4, 8, 16],
- "osds.volume.margin": NUM,
- "osds.volume.hideDelay": NUM,
- "osds.volume.showValue": BOOL,
- "osds.brightness.position": [2, 4, 8, 16],
- "osds.brightness.margin": NUM,
- "osds.brightness.hideDelay": NUM,
- "osds.brightness.showValue": BOOL,
- "osds.lock.spacing": NUM,
- "osds.lock.caps.hideDelay": NUM,
- "osds.lock.num.hideDelay": NUM,
- // Sidebar
- "sidebar.showOnStartup": BOOL,
- "sidebar.modules.headlines.enabled": BOOL,
- // Navbar
- "navbar.persistent": BOOL,
- "navbar.appearWidth": NUM,
- "navbar.showLabels": BOOL,
- // Services
- "math.maxHistory": NUM,
- "updates.interval": NUM,
- "weather.interval": NUM,
- "weather.apiKey": STR,
- "weather.location": STR,
- "weather.imperial": BOOL,
- "cpu.interval": NUM,
- "gpu.interval": NUM,
- "memory.interval": NUM,
- "storage.interval": NUM,
- "wallpapers.paths": OBJ_ARR({ recursive: BOOL, path: STR, threshold: NUM }),
- "calendar.webcals": ARR(STR),
- "calendar.upcomingDays": NUM,
- "calendar.notify": BOOL,
- "thumbnailer.maxAttempts": NUM,
- "thumbnailer.timeBetweenAttempts": NUM,
- "thumbnailer.defaults.width": NUM,
- "thumbnailer.defaults.height": NUM,
- "thumbnailer.defaults.exact": BOOL,
- "news.apiKey": STR,
- "news.countries": ARR(NEWS_COUNTRIES),
- "news.categories": ARR(NEWS_CATEGORIES),
- "news.languages": ARR(NEWS_LANGUAGES),
- "news.domains": ARR(STR),
- "news.excludeDomains": ARR(STR),
- "news.timezone": STR,
- "news.pages": NUM,
-} as { [k: string]: string | string[] | number[] };
diff --git a/src/modules/bar.tsx b/src/modules/bar.tsx
deleted file mode 100644
index c131029..0000000
--- a/src/modules/bar.tsx
+++ /dev/null
@@ -1,703 +0,0 @@
-import type { Monitor } from "@/services/monitors";
-import Players from "@/services/players";
-import Updates from "@/services/updates";
-import { getAppCategoryIcon } from "@/utils/icons";
-import { bindCurrentTime, osIcon } from "@/utils/system";
-import type { AstalWidget } from "@/utils/types";
-import { setupCustomTooltip } from "@/utils/widgets";
-import ScreenCorner from "@/widgets/screencorner";
-import { execAsync, GLib, Variable } from "astal";
-import { bind, kebabify } from "astal/binding";
-import { App, Astal, Gtk, Widget } from "astal/gtk3";
-import { bar as config } from "config";
-import AstalBattery from "gi://AstalBattery";
-import AstalBluetooth from "gi://AstalBluetooth";
-import AstalHyprland from "gi://AstalHyprland";
-import AstalNetwork from "gi://AstalNetwork";
-import AstalNotifd from "gi://AstalNotifd";
-import AstalTray from "gi://AstalTray";
-import AstalWp from "gi://AstalWp";
-import { switchPane } from "./sidebar";
-
-interface ClassNameProps {
- beforeSpacer: boolean;
- afterSpacer: boolean;
- first: boolean;
- last: boolean;
-}
-
-interface ModuleProps extends ClassNameProps {
- monitor: Monitor;
-}
-
-const hyprland = AstalHyprland.get_default();
-
-const getBatteryIcon = (perc: number) => {
- if (perc < 0.1) return "";
- if (perc < 0.2) return "";
- if (perc < 0.3) return "";
- if (perc < 0.4) return "";
- if (perc < 0.5) return "";
- if (perc < 0.6) return "";
- if (perc < 0.7) return "";
- if (perc < 0.8) return "";
- if (perc < 0.9) return "";
- return "";
-};
-
-const formatSeconds = (sec: number) => {
- if (sec >= 3600) {
- const hours = Math.floor(sec / 3600);
- let str = `${hours} hour${hours === 1 ? "" : "s"}`;
- const mins = Math.floor((sec % 3600) / 60);
- if (mins > 0) str += ` ${mins} minute${mins === 1 ? "" : "s"}`;
- return str;
- } else if (sec >= 60) {
- const mins = Math.floor(sec / 60);
- return `${mins} minute${mins === 1 ? "" : "s"}`;
- } else return `${sec} second${sec === 1 ? "" : "s"}`;
-};
-
-const hookFocusedClientProp = (
- self: AstalWidget,
- prop: keyof AstalHyprland.Client,
- callback: (c: AstalHyprland.Client | null) => void
-) => {
- let id: number | null = null;
- let lastClient: AstalHyprland.Client | null = null;
- self.hook(hyprland, "notify::focused-client", () => {
- if (id) lastClient?.disconnect(id);
- lastClient = hyprland.focusedClient; // Can be null
- id = lastClient?.connect(`notify::${kebabify(prop)}`, () => callback(lastClient));
- callback(lastClient);
- });
- self.connect("destroy", () => id && lastClient?.disconnect(id));
- callback(lastClient);
-};
-
-const getClassName = ({ beforeSpacer, afterSpacer, first, last }: ClassNameProps) =>
- `${beforeSpacer ? "before-spacer" : ""} ${afterSpacer ? "after-spacer" : ""}` +
- ` ${first ? "first" : ""} ${last ? "last" : ""}`;
-
-const getModule = (module: string) => {
- module = module.toLowerCase();
- if (module === "osicon") return OSIcon;
- if (module === "activewindow") return ActiveWindow;
- if (module === "mediaplaying") return MediaPlaying;
- if (module === "workspaces") return Workspaces;
- if (module === "tray") return Tray;
- if (module === "statusicons") return StatusIcons;
- if (module === "pkgupdates") return PkgUpdates;
- if (module === "notifcount") return NotifCount;
- if (module === "battery") return Battery;
- if (module === "datetime") return DateTime;
- if (module === "power") return Power;
- if (module === "brightnessspacer") return BrightnessSpacer;
- if (module === "volumespacer") return VolumeSpacer;
- return () => null;
-};
-
-const isSpacer = (module?: string) => module?.toLowerCase().endsWith("spacer") ?? false;
-
-const OSIcon = ({ monitor, ...props }: ModuleProps) => (
-
-);
-
-const ActiveWindow = ({ monitor, ...props }: ModuleProps) => (
- {
- const title = Variable("");
- const updateTooltip = (c: AstalHyprland.Client | null) =>
- title.set(c?.class && c?.title ? `${c.class}: ${c.title}` : "");
- hookFocusedClientProp(self, "class", updateTooltip);
- hookFocusedClientProp(self, "title", updateTooltip);
- updateTooltip(hyprland.focusedClient);
-
- const window = setupCustomTooltip(self, bind(title));
- if (window) {
- self.hook(title, (_, v) => !v && window.hide());
- self.hook(window, "map", () => !title.get() && window.hide());
- }
- }}
- >
-
-);
-
-const MediaPlaying = ({ monitor, ...props }: ModuleProps) => {
- const players = Players.get_default();
- const getLabel = (fallback = "") =>
- players.lastPlayer ? `${players.lastPlayer.title} - ${players.lastPlayer.artist}` : fallback;
- return (
-
- );
-};
-
-const Workspace = ({ idx }: { idx: number }) => {
- const wsId = Variable.derive([bind(hyprland, "focusedWorkspace"), config.modules.workspaces.shown], (f, s) =>
- f ? Math.floor((f.id - 1) / s) * s + idx : idx
- );
-
- const label = (
- `margin-left: ${a}px; margin-right: ${-a}px;`)}
- label={bind(config.modules.workspaces.labels).as(l => l[idx - 1] ?? String(idx))}
- />
- );
-
- return (
-
- );
-};
-
-const Workspaces = ({ monitor, ...props }: ModuleProps) => {
- const className = Variable.derive(
- [config.modules.workspaces.shown, config.modules.workspaces.showLabels],
- (s, l) => `module workspaces ${s % 2 === 0 ? "even" : "odd"} ${l ? "labels-shown" : ""} ${getClassName(props)}`
- );
-
- return (
- {
- const activeWs = hyprland.focusedClient?.workspace.name;
- if (activeWs?.startsWith("special:")) hyprland.dispatch("togglespecialworkspace", activeWs.slice(8));
- else if (event.delta_y > 0 || hyprland.focusedWorkspace?.id > 1)
- hyprland.dispatch("workspace", (event.delta_y < 0 ? "-" : "+") + 1);
- }}
- >
- className.drop()}>
- {bind(config.modules.workspaces.shown).as(
- n => Array.from({ length: n }).map((_, idx) => ) // Start from 1
- )}
-
-
- );
-};
-
-const TrayItem = (item: AstalTray.TrayItem) => (
- event.get_button()[1] === Astal.MouseButton.SECONDARY && item.activate(0, 0)}
- usePopover={false}
- direction={bind(config.vertical).as(v => (v ? Gtk.ArrowType.RIGHT : Gtk.ArrowType.DOWN))}
- menuModel={bind(item, "menuModel")}
- actionGroup={bind(item, "actionGroup").as(a => ["dbusmenu", a])}
- setup={self => setupCustomTooltip(self, bind(item, "tooltipMarkup"))}
- >
-
-
-);
-
-const Tray = ({ monitor, ...props }: ModuleProps) => (
- i.length > 0)}
- vertical={bind(config.vertical)}
- className={`module tray ${getClassName(props)}`}
- >
- {bind(AstalTray.get_default(), "items").as(i => i.map(TrayItem))}
-
-);
-
-const Network = ({ monitor }: { monitor: Monitor }) => (
-
-);
-
-const BluetoothDevice = ({ monitor, device }: { monitor: Monitor; device: AstalBluetooth.Device }) => (
-
-);
-
-const Bluetooth = ({ monitor }: { monitor: Monitor }) => (
-
-
- {bind(AstalBluetooth.get_default(), "devices").as(d =>
- d.map(d => )
- )}
-
-);
-
-const StatusIcons = ({ monitor, ...props }: ModuleProps) => (
-
-
-
-
-);
-
-const PkgUpdates = ({ monitor, ...props }: ModuleProps) => (
-
-);
-
-const NotifCount = ({ monitor, ...props }: ModuleProps) => (
-
-);
-
-const Battery = ({ monitor, ...props }: ModuleProps) => {
- const className = Variable.derive(
- [bind(AstalBattery.get_default(), "percentage"), bind(AstalBattery.get_default(), "charging")],
- (p, c) => `module battery ${c ? "charging" : p < 0.2 ? "low" : ""} ${getClassName(props)}`
- );
- const tooltip = Variable.derive(
- [bind(AstalBattery.get_default(), "timeToEmpty"), bind(AstalBattery.get_default(), "timeToFull")],
- (e, f) => (f > 0 ? `${formatSeconds(f)} until full` : `${formatSeconds(e)} remaining`)
- );
-
- return (
- setupCustomTooltip(self, bind(tooltip))}
- onDestroy={() => {
- className.drop();
- tooltip.drop();
- }}
- >
-
- `${Math.round(p * 100)}%`)} />
-
- );
-};
-
-const DateTimeHoriz = (props: ClassNameProps) => (
-
-
- {
- const time = bindCurrentTime(bind(config.modules.dateTime.format), undefined, self);
- self.label = time.get();
- self.hook(time, (_, t) => (self.label = t));
- }}
- />
-
-);
-
-const DateTimeVertical = (props: ClassNameProps) => (
-
-
-
-
-
-);
-
-const DateTime = ({ monitor, ...props }: ModuleProps) => (
-
-);
-
-const Power = ({ monitor, ...props }: ModuleProps) => (
-