From 88547233e24876958799e73dbd34d8df0dadee97 Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Thu, 27 Mar 2025 21:35:48 +1100
Subject: launcher: transparency action

---
 src/modules/launcher/actions.tsx | 41 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

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

diff --git a/src/modules/launcher/actions.tsx b/src/modules/launcher/actions.tsx
index 053387c..11b07d0 100644
--- a/src/modules/launcher/actions.tsx
+++ b/src/modules/launcher/actions.tsx
@@ -8,6 +8,7 @@ import { setupCustomTooltip, type FlowBox } from "@/utils/widgets";
 import { bind, execAsync, GLib, readFile, register, type Variable } from "astal";
 import { Gtk, Widget } from "astal/gtk3";
 import { launcher as config } from "config";
+import { setConfig } from "config/funcs";
 import fuzzysort from "fuzzysort";
 import AstalHyprland from "gi://AstalHyprland";
 import { close, ContentBox, type LauncherContent, type Mode } from "./util";
@@ -24,6 +25,24 @@ interface ActionMap {
     [k: string]: IAction;
 }
 
+const transparencyActions = {
+    off: {
+        icon: "blur_off",
+        name: "Off",
+        description: "Completely opaque",
+    },
+    normal: {
+        icon: "blur_linear",
+        name: "Normal",
+        description: "Somewhat transparent",
+    },
+    high: {
+        icon: "blur_on",
+        name: "High",
+        description: "Extremely transparent",
+    },
+};
+
 const autocomplete = (entry: Widget.Entry, action: string) => {
     entry.set_text(`${config.actionPrefix.get()}${action} `);
     entry.set_position(-1);
@@ -89,6 +108,12 @@ const actions = (mode: Variable<Mode>, entry: Widget.Entry): ActionMap => ({
         description: "Change the current wallpaper",
         action: () => autocomplete(entry, "wallpaper"),
     },
+    transparency: {
+        icon: "opacity",
+        name: "Transparency",
+        description: "Change shell's transparency",
+        action: () => autocomplete(entry, "transparency"),
+    },
     todo: {
         icon: "checklist",
         name: "Todo",
@@ -333,6 +358,17 @@ const Category = ({ path, wallpapers }: ICategory) => (
     </Gtk.FlowBoxChild>
 );
 
+const Transparency = ({ amount }: { amount: keyof typeof transparencyActions }) => (
+    <Action
+        {...transparencyActions[amount]}
+        args={[]}
+        action={() => {
+            setConfig("style.transparency", amount).catch(console.error);
+            close();
+        }}
+    />
+);
+
 @register()
 export default class Actions extends Widget.Box implements LauncherContent {
     #map: ActionMap;
@@ -380,6 +416,11 @@ export default class Actions extends Widget.Box implements LauncherContent {
 
             for (const { obj } of fuzzysort.go(term, list, { all: true, key: "path" }))
                 this.#content.add(random ? <Category {...(obj as ICategory)} /> : <Wallpaper {...obj} />);
+        } else if (action === "transparency") {
+            const list = Object.keys(transparencyActions);
+
+            for (const { target } of fuzzysort.go(args[1], list, { all: true }))
+                this.#content.add(<Transparency amount={target} />);
         } else {
             const list = this.#list.filter(
                 a => this.#map[a].available?.() ?? !config.disabledActions.get().includes(a)
-- 
cgit v1.2.3-freya

