Settings window #13

Merged
Zacharias-Brohn merged 3 commits from settingsWindow into organize 2026-02-23 19:35:58 +01:00
41 changed files with 1784 additions and 104 deletions
Showing only changes of commit 83db3a39cb - Show all commits
+1 -1
View File
@@ -30,5 +30,5 @@ if("shell" IN_LIST ENABLE_MODULES)
foreach(dir assets scripts Components Config Modules Daemons Drawers Effects Helpers Paths)
install(DIRECTORY ${dir} DESTINATION "${INSTALL_QSCONFDIR}")
endforeach()
install(FILES shell.qml Bar.qml Wallpaper.qml DESTINATION "${INSTALL_QSCONFDIR}")
install(FILES shell.qml DESTINATION "${INSTALL_QSCONFDIR}")
endif()
+323
View File
@@ -0,0 +1,323 @@
pragma Singleton
import Quickshell
import Quickshell.Io
import QtQuick
Singleton {
id: root
Component.onCompleted: {
// Trigger ethernet device detection after initialization
Qt.callLater(() => {
getEthernetDevices();
});
// Load saved connections on startup
Nmcli.loadSavedConnections(() => {
root.savedConnections = Nmcli.savedConnections;
root.savedConnectionSsids = Nmcli.savedConnectionSsids;
});
// Get initial WiFi status
Nmcli.getWifiStatus(enabled => {
root.wifiEnabled = enabled;
});
// Sync networks from Nmcli on startup
Qt.callLater(() => {
syncNetworksFromNmcli();
}, 100);
}
readonly property list<AccessPoint> networks: []
readonly property AccessPoint active: networks.find(n => n.active) ?? null
property bool wifiEnabled: true
readonly property bool scanning: Nmcli.scanning
property list<var> ethernetDevices: []
readonly property var activeEthernet: ethernetDevices.find(d => d.connected) ?? null
property int ethernetDeviceCount: 0
property bool ethernetProcessRunning: false
property var ethernetDeviceDetails: null
property var wirelessDeviceDetails: null
function enableWifi(enabled: bool): void {
Nmcli.enableWifi(enabled, result => {
if (result.success) {
root.getWifiStatus();
Nmcli.getNetworks(() => {
syncNetworksFromNmcli();
});
}
});
}
function toggleWifi(): void {
Nmcli.toggleWifi(result => {
if (result.success) {
root.getWifiStatus();
Nmcli.getNetworks(() => {
syncNetworksFromNmcli();
});
}
});
}
function rescanWifi(): void {
Nmcli.rescanWifi();
}
property var pendingConnection: null
signal connectionFailed(string ssid)
function connectToNetwork(ssid: string, password: string, bssid: string, callback: var): void {
// Set up pending connection tracking if callback provided
if (callback) {
const hasBssid = bssid !== undefined && bssid !== null && bssid.length > 0;
root.pendingConnection = {
ssid: ssid,
bssid: hasBssid ? bssid : "",
callback: callback
};
}
Nmcli.connectToNetwork(ssid, password, bssid, result => {
if (result && result.success) {
// Connection successful
if (callback)
callback(result);
root.pendingConnection = null;
} else if (result && result.needsPassword) {
// Password needed - callback will handle showing dialog
if (callback)
callback(result);
} else {
// Connection failed
if (result && result.error) {
root.connectionFailed(ssid);
}
if (callback)
callback(result);
root.pendingConnection = null;
}
});
}
function connectToNetworkWithPasswordCheck(ssid: string, isSecure: bool, callback: var, bssid: string): void {
// Set up pending connection tracking
const hasBssid = bssid !== undefined && bssid !== null && bssid.length > 0;
root.pendingConnection = {
ssid: ssid,
bssid: hasBssid ? bssid : "",
callback: callback
};
Nmcli.connectToNetworkWithPasswordCheck(ssid, isSecure, result => {
if (result && result.success) {
// Connection successful
if (callback)
callback(result);
root.pendingConnection = null;
} else if (result && result.needsPassword) {
// Password needed - callback will handle showing dialog
if (callback)
callback(result);
} else {
// Connection failed
if (result && result.error) {
root.connectionFailed(ssid);
}
if (callback)
callback(result);
root.pendingConnection = null;
}
}, bssid);
}
function disconnectFromNetwork(): void {
// Try to disconnect - use connection name if available, otherwise use device
Nmcli.disconnectFromNetwork();
// Refresh network list after disconnection
Qt.callLater(() => {
Nmcli.getNetworks(() => {
syncNetworksFromNmcli();
});
}, 500);
}
function forgetNetwork(ssid: string): void {
// Delete the connection profile for this network
// This will remove the saved password and connection settings
Nmcli.forgetNetwork(ssid, result => {
if (result.success) {
// Refresh network list after deletion
Qt.callLater(() => {
Nmcli.getNetworks(() => {
syncNetworksFromNmcli();
});
}, 500);
}
});
}
property list<string> savedConnections: []
property list<string> savedConnectionSsids: []
// Sync saved connections from Nmcli when they're updated
Connections {
target: Nmcli
function onSavedConnectionsChanged() {
root.savedConnections = Nmcli.savedConnections;
}
function onSavedConnectionSsidsChanged() {
root.savedConnectionSsids = Nmcli.savedConnectionSsids;
}
}
function syncNetworksFromNmcli(): void {
const rNetworks = root.networks;
const nNetworks = Nmcli.networks;
// Build a map of existing networks by key
const existingMap = new Map();
for (const rn of rNetworks) {
const key = `${rn.frequency}:${rn.ssid}:${rn.bssid}`;
existingMap.set(key, rn);
}
// Build a map of new networks by key
const newMap = new Map();
for (const nn of nNetworks) {
const key = `${nn.frequency}:${nn.ssid}:${nn.bssid}`;
newMap.set(key, nn);
}
// Remove networks that no longer exist
for (const [key, network] of existingMap) {
if (!newMap.has(key)) {
const index = rNetworks.indexOf(network);
if (index >= 0) {
rNetworks.splice(index, 1);
network.destroy();
}
}
}
// Add or update networks from Nmcli
for (const [key, nNetwork] of newMap) {
const existing = existingMap.get(key);
if (existing) {
// Update existing network's lastIpcObject
existing.lastIpcObject = nNetwork.lastIpcObject;
} else {
// Create new AccessPoint from Nmcli's data
rNetworks.push(apComp.createObject(root, {
lastIpcObject: nNetwork.lastIpcObject
}));
}
}
}
component AccessPoint: QtObject {
required property var lastIpcObject
readonly property string ssid: lastIpcObject.ssid
readonly property string bssid: lastIpcObject.bssid
readonly property int strength: lastIpcObject.strength
readonly property int frequency: lastIpcObject.frequency
readonly property bool active: lastIpcObject.active
readonly property string security: lastIpcObject.security
readonly property bool isSecure: security.length > 0
}
Component {
id: apComp
AccessPoint {}
}
function hasSavedProfile(ssid: string): bool {
// Use Nmcli's hasSavedProfile which has the same logic
return Nmcli.hasSavedProfile(ssid);
}
function getWifiStatus(): void {
Nmcli.getWifiStatus(enabled => {
root.wifiEnabled = enabled;
});
}
function getEthernetDevices(): void {
root.ethernetProcessRunning = true;
Nmcli.getEthernetInterfaces(interfaces => {
root.ethernetDevices = Nmcli.ethernetDevices;
root.ethernetDeviceCount = Nmcli.ethernetDevices.length;
root.ethernetProcessRunning = false;
});
}
function connectEthernet(connectionName: string, interfaceName: string): void {
Nmcli.connectEthernet(connectionName, interfaceName, result => {
if (result.success) {
getEthernetDevices();
// Refresh device details after connection
Qt.callLater(() => {
const activeDevice = root.ethernetDevices.find(function (d) {
return d.connected;
});
if (activeDevice && activeDevice.interface) {
updateEthernetDeviceDetails(activeDevice.interface);
}
}, 1000);
}
});
}
function disconnectEthernet(connectionName: string): void {
Nmcli.disconnectEthernet(connectionName, result => {
if (result.success) {
getEthernetDevices();
// Clear device details after disconnection
Qt.callLater(() => {
root.ethernetDeviceDetails = null;
});
}
});
}
function updateEthernetDeviceDetails(interfaceName: string): void {
Nmcli.getEthernetDeviceDetails(interfaceName, details => {
root.ethernetDeviceDetails = details;
});
}
function updateWirelessDeviceDetails(): void {
// Find the wireless interface by looking for wifi devices
// Pass empty string to let Nmcli find the active interface automatically
Nmcli.getWirelessDeviceDetails("", details => {
root.wirelessDeviceDetails = details;
});
}
function cidrToSubnetMask(cidr: string): string {
// Convert CIDR notation (e.g., "24") to subnet mask (e.g., "255.255.255.0")
const cidrNum = parseInt(cidr);
if (isNaN(cidrNum) || cidrNum < 0 || cidrNum > 32) {
return "";
}
const mask = (0xffffffff << (32 - cidrNum)) >>> 0;
const octets = [(mask >>> 24) & 0xff, (mask >>> 16) & 0xff, (mask >>> 8) & 0xff, mask & 0xff];
return octets.join(".");
}
Process {
running: true
command: ["nmcli", "m"]
stdout: SplitParser {
onRead: {
Nmcli.getNetworks(() => {
syncNetworksFromNmcli();
});
getEthernetDevices();
}
}
}
}
+1352
View File
File diff suppressed because it is too large Load Diff
View File
+2 -2
View File
@@ -1,6 +1,6 @@
import Quickshell
import QtQuick
import QtQuick.Shapes
import qs.Components
import qs.Modules as Modules
import qs.Modules.Notifications as Notifications
import qs.Modules.Notifications.Sidebar as Sidebar
@@ -33,7 +33,7 @@ Item {
// anchors.margins: 8
anchors.topMargin: Config.barConfig.autoHide && !visibilities.bar ? 0 : bar.implicitHeight
Behavior on anchors.topMargin {
Modules.Anim {}
Anim {}
}
Osd.Wrapper {
@@ -1,7 +1,6 @@
pragma Singleton
import Quickshell
import Quickshell.Services.Notifications
Singleton {
id: root
+1 -1
View File
@@ -5,7 +5,7 @@ import Quickshell
import Quickshell.Wayland
import QtQuick
import QtQuick.Effects
import qs.Modules
import qs.Components
import qs.Config
import qs.Helpers
+1
View File
@@ -1,5 +1,6 @@
import QtQuick
import QtQuick.Shapes
import qs.Components
import qs.Config
ShapePath {
+1 -2
View File
@@ -4,10 +4,9 @@ import Quickshell
import Quickshell.Services.SystemTray
import QtQuick
import qs.Config
import qs.Components
import qs.Modules.Calendar
import qs.Modules.WSOverview
import qs.Modules.Polkit
import qs.Modules.Dashboard
import qs.Modules.Network
import qs.Modules.UPower
+1 -3
View File
@@ -1,7 +1,5 @@
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
import QtQuick
import QtQuick.Shapes
@@ -62,6 +60,6 @@ ShapePath {
}
Behavior on fillColor {
Modules.CAnim {}
CAnim {}
}
}
+1 -1
View File
@@ -5,7 +5,7 @@ import Quickshell.Widgets
import QtQuick
import QtQuick.Layouts
import qs.Config
import qs.Modules
import qs.Components
Item {
id: root
+1 -2
View File
@@ -2,7 +2,6 @@ import QtQuick
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
Row {
id: root
@@ -91,7 +90,7 @@ Row {
}
Behavior on value {
Modules.Anim {
Anim {
duration: Appearance.anim.durations.large
}
}
+2 -5
View File
@@ -1,12 +1,9 @@
pragma ComponentBehavior: Bound
import ZShell
import Quickshell
import QtQuick
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
Item {
id: root
@@ -46,7 +43,7 @@ Item {
from: ""
to: "visible"
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
duration: MaterialEasing.expressiveEffectsTime
@@ -57,7 +54,7 @@ Item {
from: "visible"
to: ""
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
easing.bezierCurve: MaterialEasing.expressiveEffects
+13 -15
View File
@@ -5,9 +5,7 @@ import QtQuick
import qs.Modules.Launcher.Services
import qs.Modules.Launcher.Items
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
CustomListView {
id: root
@@ -41,7 +39,7 @@ CustomListView {
implicitHeight: root.currentItem?.implicitHeight ?? 0
Behavior on y {
Modules.Anim {
Anim {
duration: Appearance.anim.durations.small
easing.bezierCurve: Appearance.anim.curves.expressiveEffects
}
@@ -92,7 +90,7 @@ CustomListView {
transitions: Transition {
SequentialAnimation {
ParallelAnimation {
Modules.Anim {
Anim {
target: root
property: "opacity"
from: 1
@@ -100,7 +98,7 @@ CustomListView {
duration: Appearance.anim.durations.small
easing.bezierCurve: Appearance.anim.curves.expressiveEffects
}
Modules.Anim {
Anim {
target: root
property: "scale"
from: 1
@@ -114,7 +112,7 @@ CustomListView {
properties: "values,delegate"
}
ParallelAnimation {
Modules.Anim {
Anim {
target: root
property: "opacity"
from: 0
@@ -122,7 +120,7 @@ CustomListView {
duration: Appearance.anim.durations.small
easing.bezierCurve: Appearance.anim.curves.expressiveEffects
}
Modules.Anim {
Anim {
target: root
property: "scale"
from: 0.9
@@ -146,7 +144,7 @@ CustomListView {
add: Transition {
enabled: !root.state
Modules.Anim {
Anim {
properties: "opacity,scale"
from: 0
to: 1
@@ -156,7 +154,7 @@ CustomListView {
remove: Transition {
enabled: !root.state
Modules.Anim {
Anim {
properties: "opacity,scale"
from: 1
to: 0
@@ -164,31 +162,31 @@ CustomListView {
}
move: Transition {
Modules.Anim {
Anim {
property: "y"
}
Modules.Anim {
Anim {
properties: "opacity,scale"
to: 1
}
}
addDisplaced: Transition {
Modules.Anim {
Anim {
property: "y"
duration: Appearance.anim.durations.small
}
Modules.Anim {
Anim {
properties: "opacity,scale"
to: 1
}
}
displaced: Transition {
Modules.Anim {
Anim {
property: "y"
}
Modules.Anim {
Anim {
properties: "opacity,scale"
to: 1
}
+1 -3
View File
@@ -1,9 +1,7 @@
import QtQuick
import QtQuick.Shapes
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
ShapePath {
id: root
@@ -56,6 +54,6 @@ ShapePath {
}
Behavior on fillColor {
Modules.CAnim {}
CAnim {}
}
}
+2 -3
View File
@@ -6,7 +6,6 @@ import qs.Modules.Launcher.Services
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
Item {
id: root
@@ -176,13 +175,13 @@ Item {
}
Behavior on width {
Modules.Anim {
Anim {
duration: Appearance.anim.durations.small
}
}
Behavior on opacity {
Modules.Anim {
Anim {
duration: Appearance.anim.durations.small
}
}
+2 -3
View File
@@ -4,7 +4,6 @@ import Quickshell
import QtQuick
import qs.Components
import qs.Config
import qs.Modules as Modules
Item {
id: root
@@ -43,7 +42,7 @@ Item {
SequentialAnimation {
id: showAnim
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
to: root.contentHeight
@@ -61,7 +60,7 @@ Item {
ScriptAction {
script: root.implicitHeight = root.implicitHeight
}
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
to: 0
+13 -18
View File
@@ -1,16 +1,11 @@
pragma ComponentBehavior: Bound
import Quickshell
import Quickshell.Wayland
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtQuick.Effects
import qs.Config
import qs.Helpers
import qs.Effects
import qs.Components
import qs.Modules as Modules
WlSessionLockSurface {
id: root
@@ -34,32 +29,32 @@ WlSessionLockSurface {
id: unlockAnim
ParallelAnimation {
Modules.Anim {
Anim {
target: lockContent
properties: "implicitWidth,implicitHeight"
to: lockContent.size
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
}
Modules.Anim {
Anim {
target: lockBg
property: "radius"
to: lockContent.radius
}
Modules.Anim {
Anim {
target: content
property: "scale"
to: 0
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
}
Modules.Anim {
Anim {
target: content
property: "opacity"
to: 0
duration: Appearance.anim.durations.small
}
Modules.Anim {
Anim {
target: lockIcon
property: "opacity"
to: 1
@@ -69,7 +64,7 @@ WlSessionLockSurface {
PauseAnimation {
duration: Appearance.anim.durations.small
}
Modules.Anim {
Anim {
target: lockContent
property: "opacity"
to: 0
@@ -90,7 +85,7 @@ WlSessionLockSurface {
SequentialAnimation {
ParallelAnimation {
Modules.Anim {
Anim {
target: lockContent
property: "scale"
to: 1
@@ -99,36 +94,36 @@ WlSessionLockSurface {
}
}
ParallelAnimation {
Modules.Anim {
Anim {
target: lockIcon
property: "opacity"
to: 0
}
Modules.Anim {
Anim {
target: content
property: "opacity"
to: 1
}
Modules.Anim {
Anim {
target: content
property: "scale"
to: 1
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
}
Modules.Anim {
Anim {
target: lockBg
property: "radius"
to: Appearance.rounding.large * 1.5
}
Modules.Anim {
Anim {
target: lockContent
property: "implicitWidth"
to: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult * Config.lock.sizes.ratio
duration: Appearance.anim.durations.expressiveDefaultSpatial
easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
}
Modules.Anim {
Anim {
target: lockContent
property: "implicitHeight"
to: (root.screen?.height ?? 0) * Config.lock.sizes.heightMult
+1 -2
View File
@@ -1,6 +1,5 @@
import qs.Components
import qs.Config
import qs.Modules as Modules
import QtQuick
import QtQuick.Shapes
@@ -49,6 +48,6 @@ ShapePath {
}
Behavior on fillColor {
Modules.CAnim {}
CAnim {}
}
}
+1 -2
View File
@@ -1,6 +1,5 @@
import qs.Components
import qs.Config
import qs.Modules as Modules
import QtQuick
import QtQuick.Shapes
@@ -49,6 +48,6 @@ ShapePath {
}
Behavior on fillColor {
Modules.CAnim {}
CAnim {}
}
}
@@ -1,6 +1,5 @@
import qs.Components
import qs.Config
import qs.Modules as Modules
import QtQuick
import QtQuick.Shapes
@@ -50,6 +49,6 @@ ShapePath {
}
Behavior on fillColor {
Modules.CAnim {}
CAnim {}
}
}
@@ -1,9 +1,11 @@
import Quickshell.Bluetooth
import Quickshell.Networking as QSNetwork
import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Config
import qs.Modules
import qs.Daemons
import QtQuick
import QtQuick.Layouts
CustomRect {
id: root
@@ -28,12 +30,50 @@ CustomRect {
Layout.alignment: Qt.AlignHCenter
spacing: 7
Toggle {
visible: QSNetwork.Networking.devices.values.length > 0
icon: Network.wifiEnabled ? "wifi" : "wifi_off"
checked: Network.wifiEnabled
onClicked: Network.toggleWifi()
}
Toggle {
id: toggle
icon: "notifications_off"
checked: NotifServer.dnd
icon: NotifServer.dnd ? "notifications_off" : "notifications"
checked: !NotifServer.dnd
onClicked: NotifServer.dnd = !NotifServer.dnd
}
Toggle {
icon: Audio.sourceMuted ? "mic_off" : "mic"
checked: !Audio.sourceMuted
onClicked: {
const audio = Audio.source?.audio;
if ( audio )
audio.muted = !audio.muted;
}
}
Toggle {
icon: Audio.muted ? "volume_off" : "volume_up"
checked: !Audio.muted
onClicked: {
const audio = Audio.sink?.audio;
if ( audio )
audio.muted = !audio.muted;
}
}
Toggle {
visible: Bluetooth.defaultAdapter?.enabled ?? false
icon: Bluetooth.defaultAdapter?.enabled ? "bluetooth" : "bluetooth_disabled"
checked: Bluetooth.defaultAdapter?.enabled ?? false
onClicked: {
const adapter = Bluetooth.defaultAdapter
if ( adapter )
adapter.enabled = !adapter.enabled;
}
}
}
}
@@ -1,6 +1,5 @@
import qs.Components
import qs.Config
import qs.Modules as Modules
import qs.Helpers
import QtQuick
import QtQuick.Layouts
@@ -99,25 +98,25 @@ CustomRect {
}
Behavior on anchors.bottomMargin {
Modules.Anim {
Anim {
duration: MaterialEasing.expressiveEffectsTime
easing.bezierCurve: MaterialEasing.expressiveEffects
}
}
Behavior on opacity {
Modules.Anim {
Anim {
duration: MaterialEasing.expressiveEffectsTime
}
}
Behavior on scale {
Modules.Anim {}
Anim {}
}
}
Behavior on implicitHeight {
Modules.Anim {
Anim {
duration: MaterialEasing.expressiveEffectsTime
easing.bezierCurve: MaterialEasing.expressiveEffects
}
@@ -2,7 +2,6 @@ pragma ComponentBehavior: Bound
import qs.Components
import qs.Config
import qs.Modules as Modules
import Quickshell
import QtQuick
@@ -47,7 +46,7 @@ Item {
from: ""
to: "visible"
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
duration: MaterialEasing.expressiveEffectsTime
@@ -58,7 +57,7 @@ Item {
from: "visible"
to: ""
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
easing.bezierCurve: MaterialEasing.expressiveEffects
+2 -3
View File
@@ -2,7 +2,6 @@ pragma ComponentBehavior: Bound
import qs.Components
import qs.Config
import qs.Modules as Modules
import QtQuick
Item {
@@ -29,7 +28,7 @@ Item {
from: ""
to: "visible"
Modules.Anim {
Anim {
target: root
property: "implicitWidth"
duration: MaterialEasing.expressiveEffectsTime
@@ -40,7 +39,7 @@ Item {
from: "visible"
to: ""
Modules.Anim {
Anim {
target: root
property: "implicitWidth"
easing.bezierCurve: MaterialEasing.expressiveEffects
+1 -2
View File
@@ -1,7 +1,6 @@
import QtQuick
import qs.Components
import qs.Config
import qs.Modules as Modules
Item {
id: root
@@ -23,7 +22,7 @@ Item {
}
transitions: Transition {
Modules.Anim {
Anim {
target: root
property: "implicitHeight"
duration: MaterialEasing.expressiveEffectsTime
+1 -3
View File
@@ -1,9 +1,7 @@
import QtQuick
import QtQuick.Shapes
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
ShapePath {
id: root
@@ -56,6 +54,6 @@ ShapePath {
}
Behavior on fillColor {
Modules.CAnim {}
CAnim {}
}
}
+2 -3
View File
@@ -6,7 +6,6 @@ import qs.Components
import qs.Helpers
import qs.Config
import qs.Daemons
import qs.Modules as Modules
Item {
id: root
@@ -125,13 +124,13 @@ Item {
visible: active
Behavior on Layout.preferredHeight {
Modules.Anim {
Anim {
easing.bezierCurve: Appearance.anim.curves.emphasized
}
}
Behavior on opacity {
Modules.Anim {}
Anim {}
}
}
}
+2 -3
View File
@@ -5,7 +5,6 @@ import QtQuick
import qs.Components
import qs.Helpers
import qs.Config
import qs.Modules as Modules
import qs.Daemons
Item {
@@ -54,7 +53,7 @@ Item {
from: ""
to: "visible"
Modules.Anim {
Anim {
target: root
property: "implicitWidth"
easing.bezierCurve: MaterialEasing.expressiveEffects
@@ -64,7 +63,7 @@ Item {
from: "visible"
to: ""
Modules.Anim {
Anim {
target: root
property: "implicitWidth"
easing.bezierCurve: MaterialEasing.expressiveEffects
+1 -2
View File
@@ -1,8 +1,7 @@
import qs.Modules
import QtQuick
import QtQuick.Layouts
import QtQuick.Shapes
import Quickshell
import qs.Components
import qs.Config
Item {
-3
View File
@@ -1,10 +1,7 @@
import QtQuick.Layouts
import QtQuick.Effects
import QtQuick
import Quickshell
import Quickshell.Services.SystemTray
import Quickshell.Io
import Quickshell.Widgets
import qs.Modules
import qs.Components
import qs.Config
-2
View File
@@ -1,7 +1,6 @@
pragma ComponentBehavior: Bound
import Quickshell
import Quickshell.DBusMenu
import QtQuick
import QtQuick.Layouts
import Qt5Compat.GraphicalEffects
@@ -9,7 +8,6 @@ import Quickshell.Hyprland
import QtQml
import qs.Effects
import qs.Config
import qs.Modules
PanelWindow {
id: root
-2
View File
@@ -1,11 +1,9 @@
import Quickshell
import Quickshell.Services.UPower
import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Config
import qs.Helpers as Helpers
import qs.Modules
Item {
id: root
+1
View File
@@ -1,5 +1,6 @@
import QtQuick
import QtQuick.Layouts
import qs.Components
import qs.Modules
import qs.Config
@@ -1,6 +1,7 @@
pragma ComponentBehavior: Bound
import QtQuick
import qs.Components
import qs.Helpers
import qs.Config
@@ -1,8 +1,6 @@
import Quickshell
import QtQuick
import Quickshell.Wayland
import qs.Helpers
import qs.Modules
import qs.Config
Loader {
+1 -1
View File
@@ -2,8 +2,8 @@ import Quickshell
import Quickshell.Wayland
import Quickshell.Hyprland
import QtQuick
import qs.Components
import qs.Config
import qs.Helpers
Item {
id: root
+2
View File
@@ -3,7 +3,9 @@
//@ pragma Env QS_NO_RELOAD_POPUP=1
import Quickshell
import qs.Modules
import qs.Modules.Wallpaper
import qs.Modules.Lock as Lock
import qs.Drawers
import qs.Helpers
import qs.Modules.Polkit