Added the ability to opt out of the integrated wallpaper service. (#109)
This commit is contained in:
@@ -796,6 +796,7 @@ const options = mkOptions(OPTIONS, {
|
|||||||
terminal: opt("kitty"),
|
terminal: opt("kitty"),
|
||||||
|
|
||||||
wallpaper: {
|
wallpaper: {
|
||||||
|
enable: opt(true),
|
||||||
image: opt("")
|
image: opt("")
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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' }),
|
||||||
|
|||||||
@@ -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://", ""));
|
||||||
|
}
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user