forked from Shinonome/dots-hyprland
155 lines
5.3 KiB
JavaScript
155 lines
5.3 KiB
JavaScript
const { GLib } = imports.gi;
|
|
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
const { execAsync, exec } = Utils;
|
|
|
|
import { getNestedProperty, updateNestedProperty } from "../.miscutils/objects.js";
|
|
import { ConfigSpinButton, ConfigToggle } from "./configwidgets.js";
|
|
|
|
const AGS_CONFIG_FILE = `${App.configDir}/user_options.jsonc`;
|
|
const HYPRLAND_CONFIG_FILE = `${GLib.get_user_config_dir()}/hypr/custom/general.conf`;
|
|
|
|
export const AgsToggle = ({
|
|
icon, name, desc = null,
|
|
option, resetButton = true, save = true,
|
|
extraOnChange = () => { }, extraOnReset = () => { },
|
|
...rest
|
|
}) => ConfigToggle({
|
|
icon: icon,
|
|
name: name,
|
|
desc: `${desc}\n\n${option}\nEdit in ${AGS_CONFIG_FILE}`,
|
|
resetButton: resetButton,
|
|
initValue: getNestedProperty(userOptions, option),
|
|
fetchValue: () => getNestedProperty(userOptions, option),
|
|
onChange: (self, newValue) => {
|
|
updateNestedProperty(userOptions, option, newValue);
|
|
if (save) execAsync(['bash', '-c', `${App.configDir}/scripts/ags/agsconfigurator.py \
|
|
--key ${option} \
|
|
--value ${newValue} \
|
|
--file ${AGS_CONFIG_FILE}`
|
|
]).catch(print);
|
|
extraOnChange(self, newValue);
|
|
},
|
|
onReset: async (self) => {
|
|
updateNestedProperty(userOptions, option,
|
|
getNestedProperty(userOptionsDefaults, option));
|
|
if (save) exec(`bash -c '${App.configDir}/scripts/ags/agsconfigurator.py \
|
|
--key ${option} \
|
|
--reset \
|
|
--file ${AGS_CONFIG_FILE}'`);
|
|
extraOnReset(self);
|
|
},
|
|
...rest
|
|
});
|
|
|
|
export const AgsSpinButton = ({
|
|
icon, name, desc = null,
|
|
option, resetButton = true,
|
|
save = true, extraOnChange = () => { }, extraOnReset = () => { },
|
|
...rest
|
|
}) => ConfigSpinButton({
|
|
icon: icon,
|
|
name: name,
|
|
desc: `${desc}\n\n${option}\nEdit in ${AGS_CONFIG_FILE}`,
|
|
resetButton: resetButton,
|
|
initValue: getNestedProperty(userOptions, option),
|
|
fetchValue: () => getNestedProperty(userOptions, option),
|
|
step: 10, minValue: 0, maxValue: 1000,
|
|
onChange: (self, newValue) => {
|
|
updateNestedProperty(userOptions, option, newValue);
|
|
if (save) execAsync(['bash', '-c', `${App.configDir}/scripts/ags/agsconfigurator.py \
|
|
--key ${option} \
|
|
--value ${newValue} \
|
|
--file ${AGS_CONFIG_FILE}`
|
|
]).catch(print);
|
|
extraOnChange(self, newValue);
|
|
},
|
|
onReset: async () => {
|
|
updateNestedProperty(userOptions, option,
|
|
getNestedProperty(userOptionsDefaults, option));
|
|
if (save) exec(`bash -c '${App.configDir}/scripts/ags/agsconfigurator.py \
|
|
--key ${option} \
|
|
--reset \
|
|
--file ${AGS_CONFIG_FILE}'`);
|
|
extraOnReset(self);
|
|
},
|
|
...rest,
|
|
});
|
|
|
|
export const HyprlandToggle = ({
|
|
icon, name, desc = null,
|
|
option, resetButton = true,
|
|
enableValue = 1, disableValue = 0,
|
|
extraOnChange = () => { }, extraOnReset = () => { }, save = true
|
|
}) => ConfigToggle({
|
|
icon: icon,
|
|
name: name,
|
|
desc: `${desc}\n\n${option}\nEdit in ${HYPRLAND_CONFIG_FILE}`,
|
|
resetButton: resetButton,
|
|
initValue: JSON.parse(exec(`hyprctl getoption -j ${option}`))["int"] != 0,
|
|
fetchValue: () => JSON.parse(exec(`hyprctl getoption -j ${option}`))["int"] != 0,
|
|
onChange: (self, newValue) => {
|
|
if (save)
|
|
execAsync(['bash', '-c', `${App.configDir}/scripts/hyprland/hyprconfigurator.py \
|
|
--key ${option} \
|
|
--value ${newValue ? enableValue : disableValue} \
|
|
--file ${HYPRLAND_CONFIG_FILE}`
|
|
]).catch(print);
|
|
|
|
else
|
|
execAsync(['hyprctl', 'keyword', option, `${newValue ? enableValue : disableValue}`]).catch(print);
|
|
|
|
extraOnChange(self, newValue);
|
|
},
|
|
onReset: async (self) => {
|
|
if (save)
|
|
exec(`bash -c '${App.configDir}/scripts/hyprland/hyprconfigurator.py \
|
|
--key ${option} \
|
|
--reset \
|
|
--file "${HYPRLAND_CONFIG_FILE}"'`);
|
|
|
|
else
|
|
exec('hyprctl reload');
|
|
extraOnReset(self);
|
|
},
|
|
});
|
|
|
|
export const HyprlandSpinButton = ({
|
|
icon, name, desc = null,
|
|
option, resetButton = true, save = true,
|
|
extraOnChange = () => { }, extraOnReset = () => { },
|
|
...rest
|
|
}) => ConfigSpinButton({
|
|
icon: icon,
|
|
name: name,
|
|
desc: `${desc}\n\n${option}\nEdit in ${HYPRLAND_CONFIG_FILE}`,
|
|
resetButton: resetButton,
|
|
initValue: Number(JSON.parse(exec(`hyprctl getoption -j ${option}`))["int"]),
|
|
fetchValue: () => Number(JSON.parse(exec(`hyprctl getoption -j ${option}`))["int"]),
|
|
onChange: (self, newValue) => {
|
|
if (save)
|
|
execAsync(['bash', '-c', `${App.configDir}/scripts/hyprland/hyprconfigurator.py \
|
|
--key ${option} \
|
|
--value ${newValue} \
|
|
--file ${HYPRLAND_CONFIG_FILE}`
|
|
]).catch(print);
|
|
|
|
else
|
|
execAsync(['hyprctl', 'keyword', option, `${newValue}`]).catch(print);
|
|
|
|
extraOnChange(self, newValue);
|
|
},
|
|
onReset: async (self) => {
|
|
if (save)
|
|
exec(`bash -c '${App.configDir}/scripts/hyprland/hyprconfigurator.py \
|
|
--key ${option} \
|
|
--reset \
|
|
--file "${HYPRLAND_CONFIG_FILE}"'`);
|
|
|
|
else
|
|
exec('hyprctl reload');
|
|
extraOnReset(self);
|
|
},
|
|
...rest,
|
|
});
|
|
|