launcher: transparency action
This commit is contained in:
parent
121830c449
commit
88547233e2
2 changed files with 50 additions and 1 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { GLib, monitorFile, readFileAsync, Variable } from "astal";
|
||||
import { GLib, monitorFile, readFileAsync, Variable, writeFileAsync } from "astal";
|
||||
import config from ".";
|
||||
import { loadStyleAsync } from "../../app";
|
||||
import defaults from "./defaults";
|
||||
|
|
@ -92,3 +92,11 @@ export const initConfig = () => {
|
|||
monitorFile(CONFIG, () => updateConfig().catch(e => console.warn(`Invalid config: ${e}`)));
|
||||
updateConfig().catch(e => console.warn(`Invalid config: ${e}`));
|
||||
};
|
||||
|
||||
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));
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue