mirror of
https://github.com/Theaninova/TheaninovOS.git
synced 2026-01-03 14:22:54 +00:00
108 lines
3.0 KiB
JavaScript
108 lines
3.0 KiB
JavaScript
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);
|
|
}
|
|
}
|