From 58826b7deb07f187d2c2c8cac3bf651a008b4646 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Sat, 19 Jul 2025 16:59:32 +1000 Subject: internal: move launcher stuff into subfolders --- modules/launcher/services/Actions.qml | 155 +++++++++++++++++++++++++++++++ modules/launcher/services/Apps.qml | 25 +++++ modules/launcher/services/M3Variants.qml | 84 +++++++++++++++++ modules/launcher/services/Schemes.qml | 66 +++++++++++++ 4 files changed, 330 insertions(+) create mode 100644 modules/launcher/services/Actions.qml create mode 100644 modules/launcher/services/Apps.qml create mode 100644 modules/launcher/services/M3Variants.qml create mode 100644 modules/launcher/services/Schemes.qml (limited to 'modules/launcher/services') diff --git a/modules/launcher/services/Actions.qml b/modules/launcher/services/Actions.qml new file mode 100644 index 0000000..be1fc72 --- /dev/null +++ b/modules/launcher/services/Actions.qml @@ -0,0 +1,155 @@ +pragma Singleton + +import ".." +import qs.services +import qs.config +import qs.utils +import Quickshell +import QtQuick + +Searcher { + id: root + + readonly property list actions: [ + Action { + name: qsTr("Calculator") + desc: qsTr("Do simple math equations (powered by Qalc)") + icon: "calculate" + + function onClicked(list: AppList): void { + root.autocomplete(list, "calc"); + } + }, + Action { + name: qsTr("Scheme") + desc: qsTr("Change the current colour scheme") + icon: "palette" + + function onClicked(list: AppList): void { + root.autocomplete(list, "scheme"); + } + }, + Action { + name: qsTr("Wallpaper") + desc: qsTr("Change the current wallpaper") + icon: "image" + + function onClicked(list: AppList): void { + root.autocomplete(list, "wallpaper"); + } + }, + Action { + name: qsTr("Variant") + desc: qsTr("Change the current scheme variant") + icon: "colors" + + function onClicked(list: AppList): void { + root.autocomplete(list, "variant"); + } + }, + Action { + name: qsTr("Transparency") + desc: qsTr("Change shell transparency") + icon: "opacity" + disabled: true + + function onClicked(list: AppList): void { + root.autocomplete(list, "transparency"); + } + }, + Action { + name: qsTr("Light") + desc: qsTr("Change the scheme to light mode") + icon: "light_mode" + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Colours.setMode("light"); + } + }, + Action { + name: qsTr("Dark") + desc: qsTr("Change the scheme to dark mode") + icon: "dark_mode" + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Colours.setMode("dark"); + } + }, + Action { + name: qsTr("Shutdown") + desc: qsTr("Shutdown the system") + icon: "power_settings_new" + disabled: !Config.launcher.enableDangerousActions + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["systemctl", "poweroff"]); + } + }, + Action { + name: qsTr("Reboot") + desc: qsTr("Reboot the system") + icon: "cached" + disabled: !Config.launcher.enableDangerousActions + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["systemctl", "reboot"]); + } + }, + Action { + name: qsTr("Logout") + desc: qsTr("Log out of the current session") + icon: "exit_to_app" + disabled: !Config.launcher.enableDangerousActions + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["loginctl", "terminate-user", ""]); + } + }, + Action { + name: qsTr("Lock") + desc: qsTr("Lock the current session") + icon: "lock" + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["loginctl", "lock-session"]); + } + }, + Action { + name: qsTr("Sleep") + desc: qsTr("Suspend then hibernate") + icon: "bedtime" + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["systemctl", "suspend-then-hibernate"]); + } + } + ] + + function transformSearch(search: string): string { + return search.slice(Config.launcher.actionPrefix.length); + } + + function autocomplete(list: AppList, text: string): void { + list.search.text = `${Config.launcher.actionPrefix}${text} `; + } + + list: actions.filter(a => !a.disabled) + useFuzzy: Config.launcher.useFuzzy.actions + + component Action: QtObject { + required property string name + required property string desc + required property string icon + property bool disabled + + function onClicked(list: AppList): void { + } + } +} diff --git a/modules/launcher/services/Apps.qml b/modules/launcher/services/Apps.qml new file mode 100644 index 0000000..d561d15 --- /dev/null +++ b/modules/launcher/services/Apps.qml @@ -0,0 +1,25 @@ +pragma Singleton + +import qs.config +import qs.utils +import Quickshell + +Searcher { + id: root + + list: DesktopEntries.applications.values.filter(a => !a.noDisplay).sort((a, b) => a.name.localeCompare(b.name)) + useFuzzy: Config.launcher.useFuzzy.apps + + function launch(entry: DesktopEntry): void { + if (entry.runInTerminal) + Quickshell.execDetached({ + command: ["app2unit", "--", "foot", `${Quickshell.configDir}/assets/wrap_term_launch.sh`, ...entry.command], + workingDirectory: entry.workingDirectory + }); + else + Quickshell.execDetached({ + command: ["app2unit", "--", ...entry.command], + workingDirectory: entry.workingDirectory + }); + } +} diff --git a/modules/launcher/services/M3Variants.qml b/modules/launcher/services/M3Variants.qml new file mode 100644 index 0000000..69bd805 --- /dev/null +++ b/modules/launcher/services/M3Variants.qml @@ -0,0 +1,84 @@ +pragma Singleton + +import qs.config +import qs.utils +import Quickshell +import QtQuick + +Searcher { + id: root + + function transformSearch(search: string): string { + return search.slice(`${Config.launcher.actionPrefix}variant `.length); + } + + list: [ + Variant { + variant: "vibrant" + icon: "sentiment_very_dissatisfied" + name: "Vibrant" + description: "A high chroma palette. The primary palette's chroma is at maximum." + }, + Variant { + variant: "tonalspot" + icon: "android" + name: "Tonal Spot" + description: "Default for Material theme colours. A pastel palette with a low chroma." + }, + Variant { + variant: "expressive" + icon: "compare_arrows" + name: "Expressive" + description: "A medium chroma palette. The primary palette's hue is different from the seed colour, for variety." + }, + Variant { + variant: "fidelity" + icon: "compare" + name: "Fidelity" + description: "Matches the seed colour, even if the seed colour is very bright (high chroma)." + }, + Variant { + variant: "content" + icon: "sentiment_calm" + name: "Content" + description: "Almost identical to fidelity." + }, + Variant { + variant: "fruitsalad" + icon: "nutrition" + name: "Fruit Salad" + description: "A playful theme - the seed colour's hue does not appear in the theme." + }, + Variant { + variant: "rainbow" + icon: "looks" + name: "Rainbow" + description: "A playful theme - the seed colour's hue does not appear in the theme." + }, + Variant { + variant: "neutral" + icon: "contrast" + name: "Neutral" + description: "Close to grayscale, a hint of chroma." + }, + Variant { + variant: "monochrome" + icon: "filter_b_and_w" + name: "Monochrome" + description: "All colours are grayscale, no chroma." + } + ] + useFuzzy: Config.launcher.useFuzzy.variants + + component Variant: QtObject { + required property string variant + required property string icon + required property string name + required property string description + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["caelestia", "scheme", "set", "-v", variant]); + } + } +} diff --git a/modules/launcher/services/Schemes.qml b/modules/launcher/services/Schemes.qml new file mode 100644 index 0000000..8494437 --- /dev/null +++ b/modules/launcher/services/Schemes.qml @@ -0,0 +1,66 @@ +pragma Singleton + +import qs.config +import qs.utils +import Quickshell +import Quickshell.Io +import QtQuick + +Searcher { + id: root + + function transformSearch(search: string): string { + return search.slice(`${Config.launcher.actionPrefix}scheme `.length); + } + + function selector(item: var): string { + return `${item.name} ${item.flavour}`; + } + + list: schemes.instances + useFuzzy: Config.launcher.useFuzzy.schemes + keys: ["name", "flavour"] + weights: [0.9, 0.1] + + Variants { + id: schemes + + Scheme {} + } + + Process { + id: getSchemes + + running: true + command: ["caelestia", "scheme", "list"] + stdout: StdioCollector { + onStreamFinished: { + const schemeData = JSON.parse(text); + const list = Object.entries(schemeData).map(([name, f]) => Object.entries(f).map(([flavour, colours]) => ({ + name, + flavour, + colours + }))); + + const flat = []; + for (const s of list) + for (const f of s) + flat.push(f); + + schemes.model = flat; + } + } + } + + component Scheme: QtObject { + required property var modelData + readonly property string name: modelData.name + readonly property string flavour: modelData.flavour + readonly property var colours: modelData.colours + + function onClicked(list: AppList): void { + list.visibilities.launcher = false; + Quickshell.execDetached(["caelestia", "scheme", "set", "-n", name, "-f", flavour]); + } + } +} -- cgit v1.2.3-freya