quickshell: switch from hyprland dispatch exec trick to quickshell execdetached

This commit is contained in:
end-4
2025-06-21 02:51:21 +02:00
parent 29c7031bb2
commit e4be9852a3
21 changed files with 75 additions and 63 deletions
@@ -32,12 +32,12 @@ Singleton {
property string wallpaperSwitchScriptPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/colors/switchwall.sh`) property string wallpaperSwitchScriptPath: FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/colors/switchwall.sh`)
// Cleanup on init // Cleanup on init
Component.onCompleted: { Component.onCompleted: {
Hyprland.dispatch(`exec mkdir -p '${shellConfig}'`) Quickshell.execDetached(["bash", "-c", `mkdir -p '${shellConfig}'`])
Hyprland.dispatch(`exec mkdir -p '${favicons}'`) Quickshell.execDetached(["bash", "-c", `mkdir -p '${favicons}'`])
Hyprland.dispatch(`exec rm -rf '${coverArt}'; mkdir -p '${coverArt}'`) Quickshell.execDetached(["bash", "-c", `rm -rf '${coverArt}'; mkdir -p '${coverArt}'`])
Hyprland.dispatch(`exec rm -rf '${booruPreviews}'; mkdir -p '${booruPreviews}'`) Quickshell.execDetached(["bash", "-c", `rm -rf '${booruPreviews}'; mkdir -p '${booruPreviews}'`])
Hyprland.dispatch(`exec mkdir -p '${booruDownloads}' && mkdir -p '${booruDownloadsNsfw}'`) Quickshell.execDetached(["bash", "-c", `mkdir -p '${booruDownloads}' && mkdir -p '${booruDownloadsNsfw}'`])
Hyprland.dispatch(`exec rm -rf '${latexOutput}'; mkdir -p '${latexOutput}'`) Quickshell.execDetached(["bash", "-c", `rm -rf '${latexOutput}'; mkdir -p '${latexOutput}'`])
Hyprland.dispatch(`exec rm -rf '${cliphistDecode}'; mkdir -p '${cliphistDecode}'`) Quickshell.execDetached(["bash", "-c", `rm -rf '${cliphistDecode}'; mkdir -p '${cliphistDecode}'`])
} }
} }
@@ -8,6 +8,7 @@ import Qt.labs.platform
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell
import Quickshell.Io import Quickshell.Io
import Quickshell.Widgets import Quickshell.Widgets
import Quickshell.Hyprland import Quickshell.Hyprland
@@ -71,7 +72,7 @@ Rectangle {
} }
Component.onDestruction: { Component.onDestruction: {
Hyprland.dispatch(`exec bash -c "[ -f '${imageDecodeFilePath}' ] && rm -f '${imageDecodeFilePath}'"`) Quickshell.execDetached(["bash", "-c", `[ -f '${imageDecodeFilePath}' ] && rm -f '${imageDecodeFilePath}'`])
} }
Image { Image {
@@ -4,7 +4,7 @@ import "root:/modules/common/functions/color_utils.js" as ColorUtils
import QtQuick import QtQuick
import QtQuick.Controls import QtQuick.Controls
import QtQuick.Layouts import QtQuick.Layouts
import Quickshell.Io import Quickshell
import Quickshell.Io import Quickshell.Io
import Quickshell.Hyprland import Quickshell.Hyprland
@@ -19,7 +19,7 @@ GroupButton {
colBackground: Appearance.colors.colLayer2 colBackground: Appearance.colors.colLayer2
toggled: Appearance.m3colors.darkmode === dark toggled: Appearance.m3colors.darkmode === dark
onClicked: { onClicked: {
Hyprland.dispatch(`exec ${Directories.wallpaperSwitchScriptPath} --mode ${dark ? "dark" : "light"} --noswitch`) Quickshell.execDetached(["bash", "-c", `${Directories.wallpaperSwitchScriptPath} --mode ${dark ? "dark" : "light"} --noswitch`])
} }
contentItem: Item { contentItem: Item {
anchors.centerIn: parent anchors.centerIn: parent
@@ -94,12 +94,6 @@ Item { // Notification item area
} }
} }
onPressAndHold: (mouse) => {
if (mouse.button === Qt.LeftButton) {
Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(notificationObject.body)}'`)
notificationSummaryText.text = String.format(qsTr("{0} (copied)"), notificationObject.summary)
}
}
onDraggingChanged: () => { onDraggingChanged: () => {
if (dragging) { if (dragging) {
root.qmlParent.dragIndex = root.index ?? root.parent.children.indexOf(root); root.qmlParent.dragIndex = root.index ?? root.parent.children.indexOf(root);
@@ -291,7 +285,7 @@ Item { // Notification item area
(contentItem.implicitWidth + leftPadding + rightPadding) (contentItem.implicitWidth + leftPadding + rightPadding)
onClicked: { onClicked: {
Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(notificationObject.body)}'`) Quickshell.clipboardText = notificationObject.body
copyIcon.text = "inventory" copyIcon.text = "inventory"
copyIconTimer.restart() copyIconTimer.restart()
} }
@@ -111,7 +111,6 @@ Item {
acceptedButtons: Qt.LeftButton acceptedButtons: Qt.LeftButton
onClicked: { onClicked: {
if (root.draggingTargetWorkspace === -1) { if (root.draggingTargetWorkspace === -1) {
// Hyprland.dispatch(`exec qs ipc call overview close`)
GlobalStates.overviewOpen = false GlobalStates.overviewOpen = false
Hyprland.dispatch(`workspace ${workspaceValue}`) Hyprland.dispatch(`workspace ${workspaceValue}`)
} }
@@ -303,7 +303,9 @@ Item { // Wrapper
clickActionName: "", clickActionName: "",
type: `#${entry.match(/^\s*(\S+)/)?.[1] || ""}`, type: `#${entry.match(/^\s*(\S+)/)?.[1] || ""}`,
execute: () => { execute: () => {
Hyprland.dispatch(`exec echo '${StringUtils.shellSingleQuoteEscape(entry)}' | cliphist decode | wl-copy`); Quickshell.execDetached(
["bash", "-c", `echo '${StringUtils.shellSingleQuoteEscape(entry)}' | cliphist decode | wl-copy`]
);
} }
}; };
}).filter(Boolean); }).filter(Boolean);
@@ -318,7 +320,7 @@ Item { // Wrapper
clickActionName: "", clickActionName: "",
type: "Emoji", type: "Emoji",
execute: () => { execute: () => {
Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(entry.match(/^\s*(\S+)/)?.[1])}'`); Quickshell.clipboardText = entry.match(/^\s*(\S+)/)?.[1]
} }
}; };
}).filter(Boolean); }).filter(Boolean);
@@ -334,7 +336,7 @@ Item { // Wrapper
fontType: "monospace", fontType: "monospace",
materialSymbol: 'calculate', materialSymbol: 'calculate',
execute: () => { execute: () => {
Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(root.mathResult)}'`) Quickshell.clipboardText = root.mathResult;
} }
} }
const commandResultObject = { const commandResultObject = {
@@ -121,7 +121,7 @@ Scope {
id: sessionTaskManager id: sessionTaskManager
buttonIcon: "browse_activity" buttonIcon: "browse_activity"
buttonText: qsTr("Task Manager") buttonText: qsTr("Task Manager")
onClicked: { Hyprland.dispatch(`exec ${ConfigOptions.apps.taskManager}`); sessionRoot.hide() } onClicked: { Quickshell.execDetached(["bash", "-c", `${ConfigOptions.apps.taskManager}`]); sessionRoot.hide() }
onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText } onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText }
KeyNavigation.left: sessionLogout KeyNavigation.left: sessionLogout
KeyNavigation.down: sessionFirmwareReboot KeyNavigation.down: sessionFirmwareReboot
@@ -131,7 +131,7 @@ Scope {
id: sessionHibernate id: sessionHibernate
buttonIcon: "downloading" buttonIcon: "downloading"
buttonText: qsTr("Hibernate") buttonText: qsTr("Hibernate")
onClicked: { Hyprland.dispatch("exec systemctl hibernate || loginctl hibernate"); sessionRoot.hide() } onClicked: { Quickshell.execDetached(["bash", "-c", `systemctl hibernate || loginctl hibernate`]); sessionRoot.hide() }
onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText } onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText }
KeyNavigation.up: sessionLock KeyNavigation.up: sessionLock
KeyNavigation.right: sessionShutdown KeyNavigation.right: sessionShutdown
@@ -140,7 +140,7 @@ Scope {
id: sessionShutdown id: sessionShutdown
buttonIcon: "power_settings_new" buttonIcon: "power_settings_new"
buttonText: qsTr("Shutdown") buttonText: qsTr("Shutdown")
onClicked: { Hyprland.dispatch("exec systemctl poweroff || loginctl poweroff"); sessionRoot.hide() } onClicked: { Quickshell.execDetached(["bash", "-c", `systemctl poweroff || loginctl poweroff`]); sessionRoot.hide() }
onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText } onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText }
KeyNavigation.left: sessionHibernate KeyNavigation.left: sessionHibernate
KeyNavigation.right: sessionReboot KeyNavigation.right: sessionReboot
@@ -150,7 +150,7 @@ Scope {
id: sessionReboot id: sessionReboot
buttonIcon: "restart_alt" buttonIcon: "restart_alt"
buttonText: qsTr("Reboot") buttonText: qsTr("Reboot")
onClicked: { Hyprland.dispatch("exec reboot || loginctl reboot"); sessionRoot.hide() } onClicked: { Quickshell.execDetached(["bash", "-c", `reboot || loginctl reboot`]); sessionRoot.hide() }
onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText } onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText }
KeyNavigation.left: sessionShutdown KeyNavigation.left: sessionShutdown
KeyNavigation.right: sessionFirmwareReboot KeyNavigation.right: sessionFirmwareReboot
@@ -160,7 +160,7 @@ Scope {
id: sessionFirmwareReboot id: sessionFirmwareReboot
buttonIcon: "settings_applications" buttonIcon: "settings_applications"
buttonText: qsTr("Reboot to firmware settings") buttonText: qsTr("Reboot to firmware settings")
onClicked: { Hyprland.dispatch("exec systemctl reboot --firmware-setup || loginctl reboot --firmware-setup"); sessionRoot.hide() } onClicked: { Quickshell.execDetached(["bash", "-c", `systemctl reboot --firmware-setup || loginctl reboot --firmware-setup`]); sessionRoot.hide() }
onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText } onFocusChanged: { if (focus) sessionRoot.subtitle = buttonText }
KeyNavigation.up: sessionTaskManager KeyNavigation.up: sessionTaskManager
KeyNavigation.left: sessionReboot KeyNavigation.left: sessionReboot
@@ -93,7 +93,7 @@ ContentPage {
content: "Pick wallpaper image on your system" content: "Pick wallpaper image on your system"
} }
onClicked: { onClicked: {
Hyprland.dispatch(`exec ${Directories.wallpaperSwitchScriptPath}`) Quickshell.execDetached(`${Directories.wallpaperSwitchScriptPath}`)
} }
mainContentComponent: Component { mainContentComponent: Component {
RowLayout { RowLayout {
@@ -185,7 +185,7 @@ Rectangle {
buttonIcon: activated ? "inventory" : "content_copy" buttonIcon: activated ? "inventory" : "content_copy"
onClicked: { onClicked: {
Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(root.messageData?.content)}'`) Quickshell.clipboardText = root.messageData?.content
copyButton.activated = true copyButton.activated = true
copyIconTimer.restart() copyIconTimer.restart()
} }
@@ -73,7 +73,7 @@ ColumnLayout {
buttonIcon: activated ? "inventory" : "content_copy" buttonIcon: activated ? "inventory" : "content_copy"
onClicked: { onClicked: {
Hyprland.dispatch(`exec wl-copy '${StringUtils.shellSingleQuoteEscape(segmentContent)}'`) Quickshell.clipboardText = segmentContent
copyCodeButton.activated = true copyCodeButton.activated = true
copyIconTimer.restart() copyIconTimer.restart()
} }
@@ -96,8 +96,10 @@ ColumnLayout {
onClicked: { onClicked: {
const downloadPath = FileUtils.trimFileProtocol(Directories.downloads) const downloadPath = FileUtils.trimFileProtocol(Directories.downloads)
Hyprland.dispatch(`exec echo '${StringUtils.shellSingleQuoteEscape(segmentContent)}' > '${downloadPath}/code.${segmentLang || "txt"}'`) Quickshell.execDetached(["bash", "-c",
Hyprland.dispatch(`exec notify-send 'Code saved to file' '${downloadPath}/code.${segmentLang || "txt"}' -a Shell`) `echo '${StringUtils.shellSingleQuoteEscape(segmentContent)}' > '${downloadPath}/code.${segmentLang || "txt"}'`
])
Quickshell.execDetached(["bash", "-c", `notify-send 'Code saved to file' '${downloadPath}/code.${segmentLang || "txt"}' -a Shell`])
saveCodeButton.activated = true saveCodeButton.activated = true
saveIconTimer.restart() saveIconTimer.restart()
} }
@@ -180,7 +180,9 @@ Button {
buttonText: qsTr("Download") buttonText: qsTr("Download")
onClicked: { onClicked: {
root.showActions = false root.showActions = false
Hyprland.dispatch(`exec curl '${root.imageData.file_url}' -o '${root.imageData.is_nsfw ? root.nsfwPath : root.downloadPath}/${root.fileName}' && notify-send '${qsTr("Download complete")}' '${root.downloadPath}/${root.fileName}' -a 'Shell'`) Quickshell.execDetached(["bash", "-c",
`curl '${root.imageData.file_url}' -o '${root.imageData.is_nsfw ? root.nsfwPath : root.downloadPath}/${root.fileName}' && notify-send '${qsTr("Download complete")}' '${root.downloadPath}/${root.fileName}' -a 'Shell'`
])
} }
} }
} }
@@ -147,7 +147,7 @@ Scope {
buttonIcon: "settings" buttonIcon: "settings"
onClicked: { onClicked: {
Hyprland.dispatch("global quickshell:sidebarRightClose") Hyprland.dispatch("global quickshell:sidebarRightClose")
Hyprland.dispatch(`exec qs -p '${root.settingsQmlPath}'`) Quickshell.execDetached(["qs", "-p", root.settingsQmlPath])
} }
StyledToolTip { StyledToolTip {
content: qsTr("Settings") content: qsTr("Settings")
@@ -15,8 +15,8 @@ QuickToggleButton {
toggleBluetooth.running = true toggleBluetooth.running = true
} }
altAction: () => { altAction: () => {
Hyprland.dispatch(`exec ${ConfigOptions.apps.bluetooth}`) Quickshell.execDetached(["bash", "-c", `${ConfigOptions.apps.bluetooth}`])
Hyprland.dispatch("global quickshell:sidebarRightClose") Hyprland.dispatch("global quickshell:sidebarRightClose")
} }
Process { Process {
id: toggleBluetooth id: toggleBluetooth
@@ -13,10 +13,9 @@ QuickToggleButton {
onClicked: { onClicked: {
enabled = !enabled enabled = !enabled
if (enabled) { if (enabled) {
// gameModeOn.running = true Quickshell.execDetached(["bash", "-c", `hyprctl --batch "keyword animations:enabled 0; keyword decoration:shadow:enabled 0; keyword decoration:blur:enabled 0; keyword general:gaps_in 0; keyword general:gaps_out 0; keyword general:border_size 1; keyword decoration:rounding 0; keyword general:allow_tearing 1"`])
Hyprland.dispatch(`exec hyprctl --batch "keyword animations:enabled 0; keyword decoration:shadow:enabled 0; keyword decoration:blur:enabled 0; keyword general:gaps_in 0; keyword general:gaps_out 0; keyword general:border_size 1; keyword decoration:rounding 0; keyword general:allow_tearing 1"`)
} else { } else {
Hyprland.dispatch("exec hyprctl reload") Quickshell.execDetached(["hyprctl", "reload"])
} }
} }
@@ -15,7 +15,7 @@ QuickToggleButton {
toggleNetwork.running = true toggleNetwork.running = true
} }
altAction: () => { altAction: () => {
Hyprland.dispatch(`exec ${Network.ethernet ? ConfigOptions.apps.networkEthernet : ConfigOptions.apps.network}`) Quickshell.execDetached(["bash", "-c", `${Network.ethernet ? ConfigOptions.apps.networkEthernet : ConfigOptions.apps.network}`])
Hyprland.dispatch("global quickshell:sidebarRightClose") Hyprland.dispatch("global quickshell:sidebarRightClose")
} }
Process { Process {
+4 -2
View File
@@ -21,10 +21,12 @@ Singleton {
property bool isCriticalAndNotCharging: isCritical && !isCharging property bool isCriticalAndNotCharging: isCritical && !isCharging
onIsLowAndNotChargingChanged: { onIsLowAndNotChargingChanged: {
if (available && isLowAndNotCharging) Hyprland.dispatch(`exec notify-send "Low battery" "Consider plugging in your device" -u critical -a "Shell"`) if (available && isLowAndNotCharging)
Quickshell.execDetached(["bash", "-c", `notify-send "Low battery" "Consider plugging in your device" -u critical -a "Shell"`]);
} }
onIsCriticalAndNotChargingChanged: { onIsCriticalAndNotChargingChanged: {
if (available && isCriticalAndNotCharging) Hyprland.dispatch(`exec notify-send "Critically low battery" "🙏 I beg for pleas charg\nAutomatic suspend triggers at ${ConfigOptions.battery.suspend}%" -u critical -a "Shell"`) if (available && isCriticalAndNotCharging)
Quickshell.execDetached(["bash", "-c", `notify-send "Critically low battery" "🙏 I beg for pleas charg\nAutomatic suspend triggers at ${ConfigOptions.battery.suspend}%" -u critical -a "Shell"`]);
} }
} }
+5 -6
View File
@@ -44,9 +44,8 @@ Singleton {
} catch (e) { } catch (e) {
console.error("[ConfigLoader] Error reading file:", e); console.error("[ConfigLoader] Error reading file:", e);
console.log("[ConfigLoader] File content was:", fileContent); console.log("[ConfigLoader] File content was:", fileContent);
Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration failed to load")}" "${root.filePath}"`) Quickshell.execDetached(["bash", "-c", `notify-send '${qsTr("Shell configuration failed to load")}' '${root.filePath}'`])
return; return;
} }
} }
@@ -82,7 +81,7 @@ Singleton {
function saveConfig() { function saveConfig() {
const plainConfig = ObjectUtils.toPlainObject(ConfigOptions) const plainConfig = ObjectUtils.toPlainObject(ConfigOptions)
Hyprland.dispatch(`exec echo '${StringUtils.shellSingleQuoteEscape(JSON.stringify(plainConfig, null, 2))}' > '${root.filePath}'`) Quickshell.execDetached(["bash", "-c", `echo '${StringUtils.shellSingleQuoteEscape(JSON.stringify(plainConfig, null, 2))}' > '${FileUtils.trimFileProtocol(root.filePath)}'`])
} }
function setConfigValueAndSave(nestedKey, value, preventNextNotification = true) { function setConfigValueAndSave(nestedKey, value, preventNextNotification = true) {
@@ -105,7 +104,7 @@ Singleton {
} else { } else {
root.applyConfig(configFileView.text()) root.applyConfig(configFileView.text())
if (!root.preventNextNotification) { if (!root.preventNextNotification) {
// Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration reloaded")}" "${root.filePath}"`) // Quickshell.execDetached(["bash", "-c", `notify-send '${qsTr("Shell configuration reloaded")}' '${root.filePath}'`])
} else { } else {
root.preventNextNotification = false; root.preventNextNotification = false;
} }
@@ -129,9 +128,9 @@ Singleton {
if(error == FileViewError.FileNotFound) { if(error == FileViewError.FileNotFound) {
console.log("[ConfigLoader] File not found, creating new file.") console.log("[ConfigLoader] File not found, creating new file.")
root.saveConfig() root.saveConfig()
Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration created")}" "${root.filePath}"`) Quickshell.execDetached(["bash", "-c", `notify-send '${qsTr("Shell configuration created")}' '${root.filePath}'`])
} else { } else {
Hyprland.dispatch(`exec notify-send "${qsTr("Shell configuration failed to load")}" "${root.filePath}"`) Quickshell.execDetached(["bash", "-c", `notify-send '${qsTr("Shell configuration failed to load")}' '${root.filePath}'`])
} }
} }
} }
@@ -20,15 +20,15 @@ Singleton {
} }
function enableNextTime() { function enableNextTime() {
Hyprland.dispatch(`exec rm -f '${root.firstRunFilePath}'`) Quickshell.execDetached(["rm", "-f", root.firstRunFilePath])
} }
function disableNextTime() { function disableNextTime() {
Hyprland.dispatch(`exec echo '${root.firstRunFileContent}' > '${root.firstRunFilePath}'`) Quickshell.execDetached(["bash", "-c", `echo '${root.firstRunFileContent}' > '${root.firstRunFilePath}'`])
} }
function handleFirstRun() { function handleFirstRun() {
Hyprland.dispatch(`exec swww query | grep 'image' || '${Directories.wallpaperSwitchScriptPath}' '${root.defaultWallpaperPath}'`) Quickshell.execDetached(["bash", "-c", `swww query | grep 'image' || '${Directories.wallpaperSwitchScriptPath}' '${root.defaultWallpaperPath}'`])
Hyprland.dispatch(`exec qs -p '${root.welcomeQmlPath}'`) Quickshell.execDetached(["bash", "-c", `qs -p '${root.welcomeQmlPath}'`])
} }
FileView { FileView {
+20 -7
View File
@@ -20,23 +20,36 @@ Singleton {
function releaseAllKeys() { function releaseAllKeys() {
const keycodes = Array.from(Array(249).keys()); const keycodes = Array.from(Array(249).keys());
const releaseCommand = `ydotool key --key-delay 0 ${keycodes.map(keycode => `${keycode}:0`).join(" ")}` Quickshell.execDetached([
Hyprland.dispatch(`exec ${releaseCommand}`) "ydotool",
"key", "--key-delay", "0",
...keycodes.map(keycode => `${keycode}:0`)
])
root.shiftMode = 0; // Reset shift mode root.shiftMode = 0; // Reset shift mode
} }
function releaseShiftKeys() { function releaseShiftKeys() {
const releaseCommand = `ydotool key --key-delay 0 ${root.shiftKeys.map(keycode => `${keycode}:0`).join(" ")}` Quickshell.execDetached([
Hyprland.dispatch(`exec ${releaseCommand}`) "ydotool",
"key", "--key-delay", "0",
...root.shiftKeys.map(keycode => `${keycode}:0`)
])
root.shiftMode = 0; // Reset shift mode root.shiftMode = 0; // Reset shift mode
} }
function press(keycode) { function press(keycode) {
Hyprland.dispatch(`exec ydotool key --key-delay 0 ${keycode}:1`); Quickshell.execDetached([
"ydotool",
"key", "--key-delay", "0",
`${keycode}:1`
]);
} }
function release(keycode) { function release(keycode) {
Hyprland.dispatch(`exec ydotool key --key-delay 0 ${keycode}:0`); Quickshell.execDetached([
"ydotool",
"key", "--key-delay", "0",
`${keycode}:0`
]);
} }
} }
+3 -4
View File
@@ -91,10 +91,9 @@ ApplicationWindow {
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
onCheckedChanged: { onCheckedChanged: {
if (checked) { if (checked) {
Hyprland.dispatch(`exec rm '${StringUtils.shellSingleQuoteEscape(root.firstRunFilePath)}'`) Quickshell.execDetached(["rm", root.firstRunFilePath])
} else { } else {
console.log(`exec echo '${StringUtils.shellSingleQuoteEscape(root.firstRunFileContent)}' > '${StringUtils.shellSingleQuoteEscape(root.firstRunFilePath)}'`) Quickshell.execDetached(["bash", "-c", `echo '${StringUtils.shellSingleQuoteEscape(root.firstRunFileContent)}' > '${StringUtils.shellSingleQuoteEscape(root.firstRunFilePath)}'`])
Hyprland.dispatch(`exec echo '${StringUtils.shellSingleQuoteEscape(root.firstRunFileContent)}' > '${StringUtils.shellSingleQuoteEscape(root.firstRunFilePath)}'`)
} }
} }
} }
@@ -159,7 +158,7 @@ ApplicationWindow {
content: "Pick wallpaper image on your system" content: "Pick wallpaper image on your system"
} }
onClicked: { onClicked: {
Hyprland.dispatch(`exec ${Directories.wallpaperSwitchScriptPath}`) Quickshell.execDetached([`${Directories.wallpaperSwitchScriptPath}`])
} }
mainContentComponent: Component { mainContentComponent: Component {
RowLayout { RowLayout {
@@ -12,7 +12,7 @@ depends=(
hyprlock hyprlock
hyprpicker hyprpicker
nm-connection-editor nm-connection-editor
quickshell quickshell-git
swww swww
translate-shell translate-shell
wlogout wlogout