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 config from ".";
|
||||||
import { loadStyleAsync } from "../../app";
|
import { loadStyleAsync } from "../../app";
|
||||||
import defaults from "./defaults";
|
import defaults from "./defaults";
|
||||||
|
|
@ -92,3 +92,11 @@ export const initConfig = () => {
|
||||||
monitorFile(CONFIG, () => updateConfig().catch(e => console.warn(`Invalid config: ${e}`)));
|
monitorFile(CONFIG, () => updateConfig().catch(e => console.warn(`Invalid config: ${e}`)));
|
||||||
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 { bind, execAsync, GLib, readFile, register, type Variable } from "astal";
|
||||||
import { Gtk, Widget } from "astal/gtk3";
|
import { Gtk, Widget } from "astal/gtk3";
|
||||||
import { launcher as config } from "config";
|
import { launcher as config } from "config";
|
||||||
|
import { setConfig } from "config/funcs";
|
||||||
import fuzzysort from "fuzzysort";
|
import fuzzysort from "fuzzysort";
|
||||||
import AstalHyprland from "gi://AstalHyprland";
|
import AstalHyprland from "gi://AstalHyprland";
|
||||||
import { close, ContentBox, type LauncherContent, type Mode } from "./util";
|
import { close, ContentBox, type LauncherContent, type Mode } from "./util";
|
||||||
|
|
@ -24,6 +25,24 @@ interface ActionMap {
|
||||||
[k: string]: IAction;
|
[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) => {
|
const autocomplete = (entry: Widget.Entry, action: string) => {
|
||||||
entry.set_text(`${config.actionPrefix.get()}${action} `);
|
entry.set_text(`${config.actionPrefix.get()}${action} `);
|
||||||
entry.set_position(-1);
|
entry.set_position(-1);
|
||||||
|
|
@ -89,6 +108,12 @@ const actions = (mode: Variable<Mode>, entry: Widget.Entry): ActionMap => ({
|
||||||
description: "Change the current wallpaper",
|
description: "Change the current wallpaper",
|
||||||
action: () => autocomplete(entry, "wallpaper"),
|
action: () => autocomplete(entry, "wallpaper"),
|
||||||
},
|
},
|
||||||
|
transparency: {
|
||||||
|
icon: "opacity",
|
||||||
|
name: "Transparency",
|
||||||
|
description: "Change shell's transparency",
|
||||||
|
action: () => autocomplete(entry, "transparency"),
|
||||||
|
},
|
||||||
todo: {
|
todo: {
|
||||||
icon: "checklist",
|
icon: "checklist",
|
||||||
name: "Todo",
|
name: "Todo",
|
||||||
|
|
@ -333,6 +358,17 @@ const Category = ({ path, wallpapers }: ICategory) => (
|
||||||
</Gtk.FlowBoxChild>
|
</Gtk.FlowBoxChild>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const Transparency = ({ amount }: { amount: keyof typeof transparencyActions }) => (
|
||||||
|
<Action
|
||||||
|
{...transparencyActions[amount]}
|
||||||
|
args={[]}
|
||||||
|
action={() => {
|
||||||
|
setConfig("style.transparency", amount).catch(console.error);
|
||||||
|
close();
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
@register()
|
@register()
|
||||||
export default class Actions extends Widget.Box implements LauncherContent {
|
export default class Actions extends Widget.Box implements LauncherContent {
|
||||||
#map: ActionMap;
|
#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" }))
|
for (const { obj } of fuzzysort.go(term, list, { all: true, key: "path" }))
|
||||||
this.#content.add(random ? <Category {...(obj as ICategory)} /> : <Wallpaper {...obj} />);
|
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 {
|
} else {
|
||||||
const list = this.#list.filter(
|
const list = this.#list.filter(
|
||||||
a => this.#map[a].available?.() ?? !config.disabledActions.get().includes(a)
|
a => this.#map[a].available?.() ?? !config.disabledActions.get().includes(a)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue