Files
custum-hyprpanel/services/Wallpaper.ts
Jas Singh 2c72cc66d8 Implemented strict linting standards and prettier formatting config. (#248)
* Implemented strict linting standards and prettier formatting config.

* More linter fixes and type updates.

* More linter updates and type fixes

* Remove noisy comments

* Linter and type updates

* Linter, formatting and type updates.

* Linter updates

* Type updates

* Type updates

* fixed all linter errors

* Fixed all linting, formatting and type issues.

* Resolve merge conflicts.
2024-09-14 16:20:05 -07:00

98 lines
2.4 KiB
TypeScript

import { dependencies, sh } from 'lib/utils';
import options from 'options';
const hyprland = await Service.import('hyprland');
const WP = `${Utils.HOME}/.config/background`;
class Wallpaper extends Service {
static {
Service.register(
this,
{},
{
wallpaper: ['string'],
},
);
}
#blockMonitor = false;
#isRunning = false;
#wallpaper(): void {
if (!dependencies('swww')) return;
hyprland.monitors.map((m) => m.name);
sh('hyprctl cursorpos').then((pos) => {
sh([
'swww',
'img',
'--invert-y',
'--transition-type',
'grow',
'--transition-duration',
'1.5',
'--transition-fps',
'30',
'--transition-pos',
pos.replace(' ', ''),
WP,
]).then(() => {
this.changed('wallpaper');
});
});
}
async #setWallpaper(path: string): Promise<void> {
this.#blockMonitor = true;
await sh(`cp ${path} ${WP}`);
this.#wallpaper();
this.#blockMonitor = false;
}
readonly set = (path: string): void => {
this.#setWallpaper(path);
};
readonly isRunning = (): boolean => {
return this.#isRunning;
};
get wallpaper(): string {
return WP;
}
constructor() {
super();
options.wallpaper.enable.connect('changed', () => {
if (options.wallpaper.enable.value) {
this.#isRunning = true;
Utils.execAsync('swww-daemon')
.then(() => {
this.#wallpaper();
})
.catch(() => null);
} else {
this.#isRunning = false;
Utils.execAsync('pkill swww-daemon').catch(() => null);
}
});
if (!dependencies('swww') || !options.wallpaper.enable.value) return this;
this.#isRunning = true;
Utils.monitorFile(WP, () => {
if (!this.#blockMonitor) this.#wallpaper();
});
Utils.execAsync('swww-daemon')
.then(() => {
this.#wallpaper();
})
.catch(() => null);
}
}
export default new Wallpaper();