import { App, Service, Utils, Widget } from '../imports.js'; const { exec, execAsync, CONFIG_DIR } = Utils; export const deflisten = function (name, command, transformer = (a) => a) { const { Service } = ags; const GObject = imports.gi.GObject; const v = GObject.registerClass( { GTypeName: name, Properties: { state: GObject.ParamSpec.string( "state", "State", "Read-Write string state.", GObject.ParamFlags.READWRITE, "" ), }, Signals: { [`${name}-changed`]: {}, }, }, class Subclass extends Service { get state() { return this._state || ""; } set state(value) { this._state = value; this.emit("changed"); } get proc() { return this._proc || null; } set proc(value) { this._proc = value; } start = () => { this.proc = Utils.subprocess(command, (line) => { this.state = transformer(line); }); } stop = () => { this.proc.force_exit(); this.proc = null; } constructor() { super(); this.proc = Utils.subprocess(command, (line) => { this.state = transformer(line); }); } } ); class State { static { globalThis[name] = this; } static instance = new v(); static get state() { return State.instance.state; } static set state(value) { State.instance.state = value; } static start() { State.instance.start(); } static stop() { State.instance.stop(); } } return State; } export async function switchWall() { try { path = exec(`bash -c 'cd ~/Pictures && yad --width 1200 --height 800 --file --title="Choose wallpaper"'`); screensizey = JSON.parse(exec(`hyprctl monitors -j`))[0]['height']; cursorposx = exec(`bash -c 'hyprctl cursorpos -j | gojq ".x"'`); cursorposy = exec(`bash -c 'hyprctl cursorpos -j | gojq ".y"'`); cursorposy_inverted = screensizey - cursorposy; // print all those if (path == '') { print('Switch wallpaper: Aborted'); return; } print(`Sending ${path} to swww. Cursor pos: [${cursorposx}, ${cursorposy_inverted}]`); exec(`swww img ${path} --transition-step 230 --transition-fps 60 --transition-type grow --transition-angle 30 --transition-duration 1 --transition-pos "${cursorposx}, ${cursorposy_inverted}"`); exec(CONFIG_DIR + `/scripts/colorgen.sh ${path} --apply`); imports.scss.scss.setupScss(); } catch (error) { print(error); } }