From df3f93475ac3f04627be0918f5637cfc8cdec873 Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Sun, 2 Mar 2025 13:14:54 +1100
Subject: launcher: light/dark actions

For switching dynamic mode
---
 src/modules/launcher/actions.tsx | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

(limited to 'src/modules/launcher/actions.tsx')

diff --git a/src/modules/launcher/actions.tsx b/src/modules/launcher/actions.tsx
index a8c5d0a..1fc5c6b 100644
--- a/src/modules/launcher/actions.tsx
+++ b/src/modules/launcher/actions.tsx
@@ -1,5 +1,6 @@
 import { Apps } from "@/services/apps";
 import type { IPalette } from "@/services/palette";
+import Palette from "@/services/palette";
 import Schemes from "@/services/schemes";
 import Wallpapers from "@/services/wallpapers";
 import { basename } from "@/utils/strings";
@@ -17,6 +18,7 @@ interface IAction {
     name: string;
     description: string;
     action: (...args: string[]) => void;
+    available?: () => boolean;
 }
 
 interface ActionMap {
@@ -65,6 +67,26 @@ const actions = (mode: Variable<Mode>, entry: Widget.Entry): ActionMap => ({
             entry.set_text("");
         },
     },
+    light: {
+        icon: "light_mode",
+        name: "Light",
+        description: "Change dynamic scheme to light mode",
+        action: () => {
+            execAsync(`caelestia wallpaper -T light -f ${STATE}/wallpaper/current`).catch(console.error);
+            close();
+        },
+        available: () => Palette.get_default().name === "dynamic",
+    },
+    dark: {
+        icon: "dark_mode",
+        name: "Dark",
+        description: "Change dynamic scheme to dark mode",
+        action: () => {
+            execAsync(`caelestia wallpaper -T dark -f ${STATE}/wallpaper/current`).catch(console.error);
+            close();
+        },
+        available: () => Palette.get_default().name === "dynamic",
+    },
     scheme: {
         icon: "palette",
         name: "Scheme",
@@ -278,7 +300,8 @@ export default class Actions extends Widget.Box implements LauncherContent {
             for (const { obj } of fuzzysort.go(wallpaper, Wallpapers.get_default().list, { all: true, key: "path" }))
                 this.#content.add(<Wallpaper {...obj} />);
         } else {
-            for (const { target } of fuzzysort.go(action, this.#list, { all: true }))
+            const list = this.#list.filter(a => this.#map[a].available?.() ?? true);
+            for (const { target } of fuzzysort.go(action, list, { all: true }))
                 this.#content.add(<Action {...this.#map[target]} args={args.slice(1)} />);
         }
     }
-- 
cgit v1.2.3-freya

