diff --git a/README.md b/README.md index 2315866..e6d9360 100644 --- a/README.md +++ b/README.md @@ -122,8 +122,7 @@ programs.nova-shell.modules = { battery.warning = 30; # % for warning notification battery.critical = 10; # % for critical blink + notification cpu.interval = 2000; # polling interval in ms - disk.interval = 60000; # polling interval in ms - disk.warnThreshold = 85; # % usage to trigger warning color + disk.interval = 60000; # polling interval in ms notifications.timeout = 3000; # popup auto-dismiss in ms notifications.maxPopups = 4; # max simultaneous popups (0 to disable) notifications.maxVisible = 10; # scrollable history limit in center diff --git a/nix/hm-module.nix b/nix/hm-module.nix index c64c8ac..59e729f 100644 --- a/nix/hm-module.nix +++ b/nix/hm-module.nix @@ -144,16 +144,7 @@ in description = "Maximum notifications kept in history (-1 for unlimited)."; }; }; - disk = moduleOpt "disk" ( - (intervalOpt 30000) - // { - warnThreshold = lib.mkOption { - type = lib.types.int; - default = 85; - description = "Usage percentage at which the disk module bar turns warning color."; - }; - } - ); + disk = moduleOpt "disk" (intervalOpt 30000); backlight = moduleOpt "backlight" { step = lib.mkOption { type = lib.types.int; diff --git a/shell/lock/LockSurface.qml b/shell/lock/LockSurface.qml index 35b0ca8..66efacd 100644 --- a/shell/lock/LockSurface.qml +++ b/shell/lock/LockSurface.qml @@ -23,13 +23,11 @@ WlSessionLockSurface { color: S.Theme.base00 } - // Clear desktop screenshot from ScreenshotService - visible immediately. - // Hidden when reducedMotion (power saver) since the reveal shader and hex - // wave won't animate, leaving an unblurred screenshot visible. + // Clear desktop screenshot from ScreenshotService - visible immediately Image { anchors.fill: parent source: S.ScreenshotService.get(root.screen?.name ?? "") - visible: (S.Modules.lock.screenshot ?? true) && source !== "" && !S.Theme.reducedMotion + visible: (S.Modules.lock.screenshot ?? true) && source !== "" opacity: _unlockFade fillMode: Image.PreserveAspectCrop } @@ -61,7 +59,7 @@ WlSessionLockSurface { Image { anchors.fill: parent source: S.ScreenshotService.get(root.screen?.name ?? "") - visible: (S.Modules.lock.screenshot ?? true) && source !== "" && !S.Theme.reducedMotion + visible: (S.Modules.lock.screenshot ?? true) && source !== "" fillMode: Image.PreserveAspectCrop layer.enabled: true diff --git a/shell/modules/DiskModule.qml b/shell/modules/DiskModule.qml index 425ce38..2bb96e3 100644 --- a/shell/modules/DiskModule.qml +++ b/shell/modules/DiskModule.qml @@ -11,13 +11,6 @@ M.BarSection { property var _mounts: S.SystemStats.diskMounts property int _rootPct: S.SystemStats.diskRootPct - readonly property int _warnThreshold: S.Modules.disk.warnThreshold ?? 85 - readonly property bool _anyWarn: { - for (const m of _mounts) - if (m.pct >= _warnThreshold) - return true; - return false; - } property bool _pinned: false readonly property bool _anyHover: root._hovered || hoverPanel.panelHovered @@ -38,7 +31,6 @@ M.BarSection { M.BarIcon { icon: "\uF0C9" - color: root._anyWarn ? S.Theme.base09 : root.accentColor anchors.verticalCenter: parent.verticalCenter TapHandler { onTapped: root._pinned = !root._pinned @@ -47,7 +39,6 @@ M.BarSection { M.BarLabel { label: root._rootPct + "%" minText: "100%" - color: root._anyWarn ? S.Theme.base09 : root.accentColor anchors.verticalCenter: parent.verticalCenter TapHandler { onTapped: root._pinned = !root._pinned diff --git a/shell/modules/GpuModule.qml b/shell/modules/GpuModule.qml index 50bba76..57f854d 100644 --- a/shell/modules/GpuModule.qml +++ b/shell/modules/GpuModule.qml @@ -40,6 +40,7 @@ M.BarSection { M.BarIcon { icon: "\uDB84\uDCB0" + color: root._loadColor(S.SystemStats.gpuUsage) anchors.verticalCenter: parent.verticalCenter TapHandler { onTapped: root._pinned = !root._pinned @@ -48,6 +49,7 @@ M.BarSection { M.BarLabel { label: S.SystemStats.gpuUsage + "%" minText: "100%" + color: root._loadColor(S.SystemStats.gpuUsage) anchors.verticalCenter: parent.verticalCenter TapHandler { onTapped: root._pinned = !root._pinned diff --git a/shell/modules/PowerMenu.qml b/shell/modules/PowerMenu.qml index 4a36105..4f71f5a 100644 --- a/shell/modules/PowerMenu.qml +++ b/shell/modules/PowerMenu.qml @@ -13,219 +13,89 @@ M.HoverPanel { readonly property bool _isNiri: Quickshell.env("NIRI_SOCKET") !== "" - // Confirmation state: null = normal menu, object = pending confirm - property var _confirmItem: null - function _run(cmd) { runCommand(cmd); dismiss(); } - function _requestAction(item) { - if (item.confirm) { - _confirmItem = item; - } else { - _run(item.cmd); - } - } - - function _cancelConfirm() { - _confirmItem = null; - } - - // Normal menu entries - Column { - visible: !menuWindow._confirmItem - width: menuWindow.contentWidth - - Repeater { - model: [ - { - label: "Lock", - icon: "\uF023", - cmd: ["loginctl", "lock-session"], - color: S.Theme.base0D, - confirm: false - }, - { - label: "Suspend", - icon: "\uF186", - cmd: ["systemctl", "suspend"], - color: S.Theme.base0E, - confirm: false - }, - { - label: "Logout", - icon: "\uF2F5", - cmd: menuWindow._isNiri ? ["niri", "msg", "action", "quit"] : ["loginctl", "terminate-user", ""], - color: S.Theme.base0A, - confirm: false - }, - { - label: "Reboot", - icon: "\uF021", - cmd: ["systemctl", "reboot"], - color: S.Theme.base09, - confirm: true - }, - { - label: "Shutdown", - icon: "\uF011", - cmd: ["systemctl", "poweroff"], - color: S.Theme.base08, - confirm: true - } - ] - - delegate: Item { - id: entry - - required property var modelData - required property int index - - width: menuWindow.contentWidth - height: 32 - - Rectangle { - anchors.fill: parent - anchors.leftMargin: 4 - anchors.rightMargin: 4 - color: entryHover.hovered ? S.Theme.base02 : "transparent" - radius: S.Theme.radius - } - - Text { - id: entryIcon - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: 12 - text: entry.modelData.icon - color: entry.modelData.color - font.pixelSize: S.Theme.fontSize + 1 - font.family: S.Theme.iconFontFamily - } - - Text { - anchors.verticalCenter: parent.verticalCenter - anchors.left: entryIcon.right - anchors.leftMargin: 10 - text: entry.modelData.label - color: S.Theme.base05 - font.pixelSize: S.Theme.fontSize - font.family: S.Theme.fontFamily - } - - HoverHandler { - id: entryHover - cursorShape: Qt.PointingHandCursor - } - - TapHandler { - onTapped: menuWindow._requestAction(entry.modelData) - } + Repeater { + model: [ + { + label: "Lock", + icon: "\uF023", + cmd: ["loginctl", "lock-session"], + color: S.Theme.base0D + }, + { + label: "Suspend", + icon: "\uF186", + cmd: ["systemctl", "suspend"], + color: S.Theme.base0E + }, + { + label: "Logout", + icon: "\uF2F5", + cmd: menuWindow._isNiri ? ["niri", "msg", "action", "quit"] : ["loginctl", "terminate-user", ""], + color: S.Theme.base0A + }, + { + label: "Reboot", + icon: "\uF021", + cmd: ["systemctl", "reboot"], + color: S.Theme.base09 + }, + { + label: "Shutdown", + icon: "\uF011", + cmd: ["systemctl", "poweroff"], + color: S.Theme.base08 } - } - } + ] - // Confirmation view - Column { - visible: !!menuWindow._confirmItem - width: menuWindow.contentWidth - spacing: 4 + delegate: Item { + id: entry - Item { - width: parent.width - height: 28 + required property var modelData + required property int index + + width: menuWindow.contentWidth + height: 32 + + Rectangle { + anchors.fill: parent + anchors.leftMargin: 4 + anchors.rightMargin: 4 + color: entryArea.containsMouse ? S.Theme.base02 : "transparent" + radius: S.Theme.radius + } Text { - anchors.centerIn: parent - text: menuWindow._confirmItem ? menuWindow._confirmItem.label + "?" : "" - color: menuWindow._confirmItem ? menuWindow._confirmItem.color : S.Theme.base05 + id: entryIcon + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: 12 + text: entry.modelData.icon + color: entry.modelData.color + font.pixelSize: S.Theme.fontSize + 1 + font.family: S.Theme.iconFontFamily + } + + Text { + anchors.verticalCenter: parent.verticalCenter + anchors.left: entryIcon.right + anchors.leftMargin: 10 + text: entry.modelData.label + color: S.Theme.base05 font.pixelSize: S.Theme.fontSize font.family: S.Theme.fontFamily - font.bold: true - } - } - - Row { - anchors.horizontalCenter: parent.horizontalCenter - spacing: 8 - - // Cancel - Item { - width: 72 - height: 28 - - Rectangle { - anchors.fill: parent - color: cancelHover.hovered ? S.Theme.base02 : S.Theme.base01 - radius: S.Theme.radius - border.width: 1 - border.color: S.Theme.base03 - } - - Text { - anchors.centerIn: parent - text: "Cancel" - color: S.Theme.base05 - font.pixelSize: S.Theme.fontSize - font.family: S.Theme.fontFamily - } - - HoverHandler { - id: cancelHover - cursorShape: Qt.PointingHandCursor - } - - TapHandler { - onTapped: menuWindow._cancelConfirm() - } } - // Confirm - Item { - width: 72 - height: 28 - - Rectangle { - anchors.fill: parent - color: { - if (!menuWindow._confirmItem) - return S.Theme.base02; - const c = menuWindow._confirmItem.color; - return confirmHover.hovered ? Qt.rgba(c.r, c.g, c.b, 0.3) : Qt.rgba(c.r, c.g, c.b, 0.15); - } - radius: S.Theme.radius - border.width: 1 - border.color: menuWindow._confirmItem ? menuWindow._confirmItem.color : S.Theme.base03 - } - - Text { - anchors.centerIn: parent - text: "Confirm" - color: menuWindow._confirmItem ? menuWindow._confirmItem.color : S.Theme.base05 - font.pixelSize: S.Theme.fontSize - font.family: S.Theme.fontFamily - font.bold: true - } - - HoverHandler { - id: confirmHover - cursorShape: Qt.PointingHandCursor - } - - TapHandler { - onTapped: { - if (menuWindow._confirmItem) - menuWindow._run(menuWindow._confirmItem.cmd); - } - } + MouseArea { + id: entryArea + anchors.fill: parent + hoverEnabled: true + onClicked: menuWindow._run(entry.modelData.cmd) } } - - Item { - width: 1 - height: 4 - } } } diff --git a/shell/services/Modules.qml b/shell/services/Modules.qml index d7d112d..20ceede 100644 --- a/shell/services/Modules.qml +++ b/shell/services/Modules.qml @@ -70,8 +70,7 @@ QtObject { }) property var disk: ({ enable: true, - interval: 30000, - warnThreshold: 85 + interval: 30000 }) property var battery: ({ enable: true,