Added the ability to opt out of the integrated wallpaper service. (#109)

This commit is contained in:
Jas Singh
2024-08-11 01:15:06 -07:00
committed by GitHub
parent 0d7bd7dbc2
commit 1eef504fc2
8 changed files with 41 additions and 4 deletions

View File

@@ -796,6 +796,7 @@ const options = mkOptions(OPTIONS, {
terminal: opt("kitty"), terminal: opt("kitty"),
wallpaper: { wallpaper: {
enable: opt(true),
image: opt("") image: opt("")
}, },

View File

@@ -37,10 +37,19 @@ export const initializeTrackers = (resetCssFunc: Function) => {
}) })
Wallpaper.connect("changed", () => { Wallpaper.connect("changed", () => {
console.info("Wallpaper changed, regenerating Matugen colors...")
if (options.theme.matugen.value) { if (options.theme.matugen.value) {
options.resetTheme(); options.resetTheme();
resetCssFunc(); resetCssFunc();
} }
}) })
options.wallpaper.image.connect("changed", () => {
if ((!Wallpaper.isRunning() && options.theme.matugen.value) || !options.wallpaper.enable.value) {
console.info("Wallpaper path changed, regenerating Matugen colors...")
options.resetTheme();
resetCssFunc();
}
})
} }

View File

@@ -2,7 +2,7 @@ import options from "options";
import { bash, dependencies } from "lib/utils"; import { bash, dependencies } from "lib/utils";
import { MatugenColors } from "lib/types/options"; import { MatugenColors } from "lib/types/options";
import { initializeTrackers } from "./options_trackers"; import { initializeTrackers } from "./options_trackers";
import { generateMatugenColors, replaceHexValues } from "./matugen/index"; import { generateMatugenColors, replaceHexValues } from "../services/matugen/index";
const deps = [ const deps = [
"font", "font",

View File

@@ -1,4 +1,5 @@
import { dependencies, sh } from "lib/utils" import { dependencies, sh } from "lib/utils"
import options from "options";
const hyprland = await Service.import("hyprland"); const hyprland = await Service.import("hyprland");
const WP = `${Utils.HOME}/.config/background` const WP = `${Utils.HOME}/.config/background`
@@ -11,6 +12,7 @@ class Wallpaper extends Service {
} }
#blockMonitor = false #blockMonitor = false
#isRunning = false
#wallpaper() { #wallpaper() {
if (!dependencies("swww")) if (!dependencies("swww"))
@@ -42,21 +44,42 @@ class Wallpaper extends Service {
} }
readonly set = (path: string) => { this.#setWallpaper(path) } readonly set = (path: string) => { this.#setWallpaper(path) }
readonly isRunning = () => { return this.#isRunning }
get wallpaper() { return WP } get wallpaper() { return WP }
constructor() { constructor() {
super() super()
if (!dependencies("swww")) 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 return this
this.#isRunning = true
Utils.monitorFile(WP, () => { Utils.monitorFile(WP, () => {
if (!this.#blockMonitor) if (!this.#blockMonitor)
this.#wallpaper() this.#wallpaper()
}) })
Utils.execAsync("swww-daemon") Utils.execAsync("swww-daemon")
.then(this.#wallpaper) .then(() => {
this.#wallpaper
})
.catch(() => null) .catch(() => null)
} }
} }

View File

@@ -14,6 +14,7 @@ export const MenuTheme = () => {
children: [ children: [
Header('General'), Header('General'),
Option({ opt: options.theme.bar.menus.monochrome, title: 'Use Global Colors', type: 'boolean', disabledBinding: options.theme.matugen }), Option({ opt: options.theme.bar.menus.monochrome, title: 'Use Global Colors', type: 'boolean', disabledBinding: options.theme.matugen }),
Option({ opt: options.wallpaper.enable, title: 'Apply Wallpapers', subtitle: 'Whether to apply the wallpaper or to only use it for Matugen color generation.', type: 'boolean' }),
Option({ opt: options.wallpaper.image, title: 'Wallpaper', subtitle: options.wallpaper.image.bind("value"), type: 'wallpaper' }), Option({ opt: options.wallpaper.image, title: 'Wallpaper', subtitle: options.wallpaper.image.bind("value"), type: 'wallpaper' }),
Option({ opt: options.theme.bar.menus.background, title: 'Background Color', type: 'color' }), Option({ opt: options.theme.bar.menus.background, title: 'Background Color', type: 'color' }),
Option({ opt: options.theme.bar.menus.cards, title: 'Cards', type: 'color' }), Option({ opt: options.theme.bar.menus.cards, title: 'Cards', type: 'color' }),

View File

@@ -5,6 +5,7 @@ import { RowProps } from "lib/types/options"
import { Variable } from "types/variable"; import { Variable } from "types/variable";
import Wallpaper from "services/Wallpaper"; import Wallpaper from "services/Wallpaper";
import { dependencies as checkDependencies } from "lib/utils"; import { dependencies as checkDependencies } from "lib/utils";
import options from "options";
const EnumSetter = (opt: Opt<string>, values: string[]) => { const EnumSetter = (opt: Opt<string>, values: string[]) => {
const lbl = Widget.Label({ label: opt.bind().as(v => `${v}`) }) const lbl = Widget.Label({ label: opt.bind().as(v => `${v}`) })
@@ -159,7 +160,9 @@ export const Inputter = <T>({
case "wallpaper": return self.child = Widget.FileChooserButton({ case "wallpaper": return self.child = Widget.FileChooserButton({
on_file_set: ({ uri }) => { on_file_set: ({ uri }) => {
opt.value = uri!.replace("file://", "") as T; opt.value = uri!.replace("file://", "") as T;
if (options.wallpaper.enable.value) {
Wallpaper.set(uri!.replace("file://", "")); Wallpaper.set(uri!.replace("file://", ""));
}
}, },
}) })