From e1b7336d5d4acad5075d5d91da869ec1b7e38d4a Mon Sep 17 00:00:00 2001 From: Saint2999 Date: Fri, 8 Aug 2025 07:46:02 +0300 Subject: [PATCH 01/16] Hide online model on local ai policy --- .config/quickshell/ii/services/Ai.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/ii/services/Ai.qml b/.config/quickshell/ii/services/Ai.qml index f265d953c..c07cf3390 100644 --- a/.config/quickshell/ii/services/Ai.qml +++ b/.config/quickshell/ii/services/Ai.qml @@ -247,7 +247,7 @@ Singleton { // - key_get_description: Description of pricing and how to get an API key // - api_format: The API format of the model. Can be "openai" or "gemini". Default is "openai". // - extraParams: Extra parameters to be passed to the model. This is a JSON object. - property var models: { + property var models: Config.options.policies.ai === 2 ? {} : { "gemini-2.0-flash": aiModelComponent.createObject(this, { "name": "Gemini 2.0 Flash", "icon": "google-gemini-symbolic", From 82bb1175bdbeb1451d7d07b853dd8f574a2c00b4 Mon Sep 17 00:00:00 2001 From: Souyama Date: Sun, 31 Aug 2025 19:57:49 +0530 Subject: [PATCH 02/16] customize terminals harmony --- .config/quickshell/ii/modules/common/Config.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.config/quickshell/ii/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml index 2677f8572..2bc969c76 100644 --- a/.config/quickshell/ii/modules/common/Config.qml +++ b/.config/quickshell/ii/modules/common/Config.qml @@ -91,6 +91,11 @@ Singleton { property bool enableAppsAndShell: true property bool enableQtApps: true property bool enableTerminal: true + property JsonObject generationProps: JsonObject { + property real harmony: 0.5 + property real harmonizeThreshold: 100 + property real termFgBoost: 0.35 + } } property JsonObject palette: JsonObject { property string type: "auto" // Allowed: auto, scheme-content, scheme-expressive, scheme-fidelity, scheme-fruit-salad, scheme-monochrome, scheme-neutral, scheme-rainbow, scheme-tonal-spot From 5acbfac255dcbb5de5eab9b6f7274f8b2e46bec2 Mon Sep 17 00:00:00 2001 From: Souyama Date: Sun, 31 Aug 2025 19:59:52 +0530 Subject: [PATCH 03/16] terminals harmony pass into args --- .config/quickshell/ii/scripts/colors/switchwall.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.config/quickshell/ii/scripts/colors/switchwall.sh b/.config/quickshell/ii/scripts/colors/switchwall.sh index 31db37b40..805a3af3e 100755 --- a/.config/quickshell/ii/scripts/colors/switchwall.sh +++ b/.config/quickshell/ii/scripts/colors/switchwall.sh @@ -280,6 +280,16 @@ switch() { fi fi + # Set harmony and related properties + if [ -f "$SHELL_CONFIG_FILE" ]; then + harmony=$(jq -r '.appearance.wallpaperTheming.generationProps.harmony' "$SHELL_CONFIG_FILE") + harmonize_threshold=$(jq -r '.appearance.wallpaperTheming.generationProps.harmonizeThreshold' "$SHELL_CONFIG_FILE") + term_fg_boost=$(jq -r '.appearance.wallpaperTheming.generationProps.termFgBoost' "$SHELL_CONFIG_FILE") + [[ "$harmony" != "null" && -n "$harmony" ]] && generate_colors_material_args+=(--harmony "$harmony") + [[ "$harmonize_threshold" != "null" && -n "$harmonize_threshold" ]] && generate_colors_material_args+=(--harmonize_threshold "$harmonize_threshold") + [[ "$term_fg_boost" != "null" && -n "$term_fg_boost" ]] && generate_colors_material_args+=(--term_fg_boost "$term_fg_boost") + fi + matugen "${matugen_args[@]}" source "$(eval echo $ILLOGICAL_IMPULSE_VIRTUAL_ENV)/bin/activate" python3 "$SCRIPT_DIR/generate_colors_material.py" "${generate_colors_material_args[@]}" \ From c86dbeb2b337e8b43995ba314531a1d45b13b2fb Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 6 Sep 2025 08:44:25 +0200 Subject: [PATCH 04/16] lock: key presses also reset inactivity timer --- .../ii/modules/lock/LockContext.qml | 4 ++ .../ii/modules/lock/LockSurface.qml | 37 +++++++++++-------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/.config/quickshell/ii/modules/lock/LockContext.qml b/.config/quickshell/ii/modules/lock/LockContext.qml index 1aeefdc5a..976aa9c6a 100644 --- a/.config/quickshell/ii/modules/lock/LockContext.qml +++ b/.config/quickshell/ii/modules/lock/LockContext.qml @@ -15,6 +15,10 @@ Scope { property bool unlockInProgress: false property bool showFailure: false + function resetClearTimer() { + passwordClearTimer.restart(); + } + Timer { id: passwordClearTimer interval: 10000 diff --git a/.config/quickshell/ii/modules/lock/LockSurface.qml b/.config/quickshell/ii/modules/lock/LockSurface.qml index b623b9860..db9e0d3d1 100644 --- a/.config/quickshell/ii/modules/lock/LockSurface.qml +++ b/.config/quickshell/ii/modules/lock/LockSurface.qml @@ -14,17 +14,26 @@ MouseArea { property bool active: false property bool showInputField: active || context.currentText.length > 0 + // Force focus on entry function forceFieldFocus() { passwordBox.forceActiveFocus(); } - Connections { target: context function onShouldReFocus() { forceFieldFocus(); } } + hoverEnabled: true + acceptedButtons: Qt.LeftButton + onPressed: mouse => { + forceFieldFocus(); + } + onPositionChanged: mouse => { + forceFieldFocus(); + } + // Toolbar appearing animation property real toolbarScale: 0.9 property real toolbarOpacity: 0 Behavior on toolbarScale { @@ -38,30 +47,22 @@ MouseArea { animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) } + // Init Component.onCompleted: { forceFieldFocus(); toolbarScale = 1; toolbarOpacity = 1; } - Keys.onPressed: event => { // Esc to clear - if (event.key === Qt.Key_Escape) { + // Key presses + Keys.onPressed: event => { + root.context.resetClearTimer(); + if (event.key === Qt.Key_Escape) { // Esc to clear root.context.currentText = ""; } forceFieldFocus(); } - hoverEnabled: true - acceptedButtons: Qt.LeftButton - onPressed: mouse => { - forceFieldFocus(); - } - onPositionChanged: mouse => { - forceFieldFocus(); - } - - anchors.fill: parent - // RippleButton { // anchors { // top: parent.top @@ -77,7 +78,7 @@ MouseArea { // } // } - // Controls + // Main toolbar: password box Toolbar { id: mainIsland anchors { @@ -114,6 +115,10 @@ MouseArea { passwordBox.text = root.context.currentText; } } + + Keys.onPressed: event => { + root.context.resetClearTimer(); + } } ToolbarButton { @@ -136,6 +141,7 @@ MouseArea { } } + // Left toolbar Toolbar { id: leftIsland anchors { @@ -207,6 +213,7 @@ MouseArea { } } + // Right toolbar Toolbar { id: rightIsland anchors { From 6af3a1b5a7affa84a4bffc16e69b29d23bad7579 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 6 Sep 2025 08:44:39 +0200 Subject: [PATCH 05/16] (vertical) bar: refractor workspaces --- .../quickshell/ii/modules/bar/Workspaces.qml | 82 +++-- .../verticalBar/VerticalBarContent.qml | 3 +- .../ii/modules/verticalBar/Workspaces.qml | 308 ------------------ 3 files changed, 53 insertions(+), 340 deletions(-) delete mode 100644 .config/quickshell/ii/modules/verticalBar/Workspaces.qml diff --git a/.config/quickshell/ii/modules/bar/Workspaces.qml b/.config/quickshell/ii/modules/bar/Workspaces.qml index a426ce71b..775df18d7 100644 --- a/.config/quickshell/ii/modules/bar/Workspaces.qml +++ b/.config/quickshell/ii/modules/bar/Workspaces.qml @@ -14,6 +14,7 @@ import Qt5Compat.GraphicalEffects Item { id: root + property bool vertical: false property bool borderless: Config.options.bar.borderless readonly property HyprlandMonitor monitor: Hyprland.monitorFor(root.QsWindow.window?.screen) readonly property Toplevel activeWindow: ToplevelManager.activeToplevel @@ -22,6 +23,7 @@ Item { property list workspaceOccupied: [] property int widgetPadding: 4 property int workspaceButtonWidth: 26 + property real activeWorkspaceMargin: 2 property real workspaceIconSize: workspaceButtonWidth * 0.69 property real workspaceIconSizeShrinked: workspaceButtonWidth * 0.55 property real workspaceIconOpacityShrinked: 1 @@ -77,8 +79,8 @@ Item { updateWorkspaceOccupied(); } - implicitWidth: rowLayout.implicitWidth + rowLayout.spacing * 2 - implicitHeight: Appearance.sizes.barHeight + implicitWidth: root.vertical ? Appearance.sizes.verticalBarWidth : backgroundLayout.implicitWidth + implicitHeight: root.vertical ? backgroundLayout.implicitHeight : Appearance.sizes.barHeight // Scroll to switch workspaces WheelHandler { @@ -102,31 +104,36 @@ Item { } // Workspaces - background - RowLayout { - id: rowLayout + GridLayout { + id: backgroundLayout z: 1 - - spacing: 0 anchors.fill: parent - implicitHeight: Appearance.sizes.barHeight + implicitHeight: root.vertical ? root.workspaceButtonWidth : Appearance.sizes.barHeight + implicitWidth: root.vertical ? Appearance.sizes.verticalBarWidth : root.workspaceButtonWidth + + rowSpacing: 0 + columnSpacing: 0 + columns: root.vertical ? 1 : -1 Repeater { model: Config.options.bar.workspaces.shown Rectangle { z: 1 + Layout.alignment: root.vertical ? Qt.AlignHCenter : Qt.AlignVCenter + implicitWidth: workspaceButtonWidth implicitHeight: workspaceButtonWidth radius: (width / 2) property var previousOccupied: (workspaceOccupied[index-1] && !(!activeWindow?.activated && monitor?.activeWorkspace?.id === index)) property var rightOccupied: (workspaceOccupied[index+1] && !(!activeWindow?.activated && monitor?.activeWorkspace?.id === index+2)) - property var radiusLeft: previousOccupied ? 0 : (width / 2) - property var radiusRight: rightOccupied ? 0 : (width / 2) + property var radiusPrev: previousOccupied ? 0 : (width / 2) + property var radiusNext: rightOccupied ? 0 : (width / 2) - topLeftRadius: radiusLeft - bottomLeftRadius: radiusLeft - topRightRadius: radiusRight - bottomRightRadius: radiusRight + topLeftRadius: radiusPrev + bottomLeftRadius: root.vertical ? radiusNext : radiusPrev + topRightRadius: root.vertical ? radiusPrev : radiusNext + bottomRightRadius: radiusNext color: ColorUtils.transparentize(Appearance.m3colors.m3secondaryContainer, 0.4) opacity: (workspaceOccupied[index] && !(!activeWindow?.activated && monitor?.activeWorkspace?.id === index+1)) ? 1 : 0 @@ -134,11 +141,11 @@ Item { Behavior on opacity { animation: Appearance.animation.elementMove.numberAnimation.createObject(this) } - Behavior on radiusLeft { + Behavior on radiusPrev { animation: Appearance.animation.elementMove.numberAnimation.createObject(this) } - Behavior on radiusRight { + Behavior on radiusNext { animation: Appearance.animation.elementMove.numberAnimation.createObject(this) } @@ -152,27 +159,34 @@ Item { Rectangle { z: 2 // Make active ws indicator, which has a brighter color, smaller to look like it is of the same size as ws occupied highlight - property real activeWorkspaceMargin: 2 - implicitHeight: workspaceButtonWidth - activeWorkspaceMargin * 2 radius: Appearance.rounding.full color: Appearance.colors.colPrimary - anchors.verticalCenter: parent.verticalCenter + anchors { + verticalCenter: vertical ? undefined : parent.verticalCenter + horizontalCenter: vertical ? parent.horizontalCenter : undefined + } + + // idx1 is the "leading" indicator position, idx2 is the "following" one + // The former animates faster than the latter, see the NumberAnimations below property real idx1: workspaceIndexInGroup property real idx2: workspaceIndexInGroup - x: Math.min(idx1, idx2) * workspaceButtonWidth + activeWorkspaceMargin - implicitWidth: Math.abs(idx1 - idx2) * workspaceButtonWidth + workspaceButtonWidth - activeWorkspaceMargin * 2 + property real indicatorPosition: Math.min(idx1, idx2) * workspaceButtonWidth + root.activeWorkspaceMargin + property real indicatorLength: Math.abs(idx1 - idx2) * workspaceButtonWidth + workspaceButtonWidth - root.activeWorkspaceMargin * 2 + property real indicatorThickness: workspaceButtonWidth - root.activeWorkspaceMargin * 2 - Behavior on activeWorkspaceMargin { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - Behavior on idx1 { // Leading anim + x: root.vertical ? null : indicatorPosition + implicitWidth: root.vertical ? indicatorThickness : indicatorLength + y: root.vertical ? indicatorPosition : null + implicitHeight: root.vertical ? indicatorLength : indicatorThickness + + Behavior on idx1 { NumberAnimation { duration: 100 easing.type: Easing.OutSine } } - Behavior on idx2 { // Following anim + Behavior on idx2 { NumberAnimation { duration: 300 easing.type: Easing.OutSine @@ -181,13 +195,17 @@ Item { } // Workspaces - numbers - RowLayout { + GridLayout { id: rowLayoutNumbers z: 3 - spacing: 0 + columns: vertical ? 1 : -1 + columnSpacing: 0 + rowSpacing: 0 + anchors.fill: parent - implicitHeight: Appearance.sizes.barHeight + implicitHeight: vertical ? Appearance.sizes.barWidth : Appearance.sizes.barHeight + implicitWidth: vertical ? Appearance.sizes.verticalBarWidth : Appearance.sizes.verticalBarWidth Repeater { model: Config.options.bar.workspaces.shown @@ -195,10 +213,12 @@ Item { Button { id: button property int workspaceValue: workspaceGroup * Config.options.bar.workspaces.shown + index + 1 - Layout.fillHeight: true + Layout.fillHeight: !root.vertical + Layout.fillWidth: root.vertical onPressed: Hyprland.dispatch(`workspace ${workspaceValue}`) - width: workspaceButtonWidth - + width: vertical ? undefined : workspaceButtonWidth + height: vertical ? workspaceButtonWidth : undefined + background: Item { id: workspaceButtonBackground implicitWidth: workspaceButtonWidth diff --git a/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml b/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml index 170fe1f43..bfcd0c6fb 100644 --- a/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml +++ b/.config/quickshell/ii/modules/verticalBar/VerticalBarContent.qml @@ -110,8 +110,9 @@ Item { // Bar content region vertical: true padding: 6 - Workspaces { + Bar.Workspaces { id: workspacesWidget + vertical: true MouseArea { // Right-click to toggle overview anchors.fill: parent diff --git a/.config/quickshell/ii/modules/verticalBar/Workspaces.qml b/.config/quickshell/ii/modules/verticalBar/Workspaces.qml deleted file mode 100644 index 1c1f64661..000000000 --- a/.config/quickshell/ii/modules/verticalBar/Workspaces.qml +++ /dev/null @@ -1,308 +0,0 @@ -import qs -import qs.services -import qs.modules.common -import qs.modules.common.widgets -import qs.modules.common.functions -import QtQuick -import QtQuick.Controls -import QtQuick.Layouts -import Quickshell -import Quickshell.Wayland -import Quickshell.Hyprland -import Quickshell.Widgets -import Qt5Compat.GraphicalEffects - -Item { - id: root - property bool borderless: Config.options.bar.borderless - readonly property HyprlandMonitor monitor: Hyprland.monitorFor(root.QsWindow.window?.screen) - readonly property Toplevel activeWindow: ToplevelManager.activeToplevel - - readonly property int workspaceGroup: Math.floor((monitor?.activeWorkspace?.id - 1) / Config.options.bar.workspaces.shown) - property list workspaceOccupied: [] - property real workspaceButtonWidth: 26 - property real activeWorkspaceMargin: 2 - property real workspaceIconSize: workspaceButtonWidth * 0.69 - property real workspaceIconSizeShrinked: workspaceButtonWidth * 0.55 - property real workspaceIconOpacityShrinked: 1 - property real workspaceIconMarginShrinked: -4 - property int workspaceIndexInGroup: (monitor?.activeWorkspace?.id - 1) % Config.options.bar.workspaces.shown - - implicitHeight: columnLayout.implicitHeight + columnLayout.spacing * 2 - implicitWidth: Appearance.sizes.verticalBarWidth - - property bool showNumbers: false - Timer { - id: showNumbersTimer - interval: (Config?.options.bar.autoHide.showWhenPressingSuper.delay ?? 100) - repeat: false - onTriggered: { - root.showNumbers = true - } - } - Connections { - target: GlobalStates - function onSuperDownChanged() { - if (!Config?.options.bar.autoHide.showWhenPressingSuper.enable) return; - if (GlobalStates.superDown) showNumbersTimer.restart(); - else { - showNumbersTimer.stop(); - root.showNumbers = false; - } - } - function onSuperReleaseMightTriggerChanged() { - showNumbersTimer.stop() - } - } - - // Function to update workspaceOccupied - function updateWorkspaceOccupied() { - workspaceOccupied = Array.from({ length: Config.options.bar.workspaces.shown }, (_, i) => { - return Hyprland.workspaces.values.some(ws => ws.id === workspaceGroup * Config.options.bar.workspaces.shown + i + 1); - }) - } - - // Occupied workspace updates - Component.onCompleted: updateWorkspaceOccupied() - Connections { - target: Hyprland.workspaces - function onValuesChanged() { - updateWorkspaceOccupied(); - } - } - Connections { - target: Hyprland - function onFocusedWorkspaceChanged() { - updateWorkspaceOccupied(); - } - } - onWorkspaceGroupChanged: { - updateWorkspaceOccupied(); - } - - // Scroll to switch workspaces - WheelHandler { - onWheel: (event) => { - if (event.angleDelta.y < 0) - Hyprland.dispatch(`workspace r+1`); - else if (event.angleDelta.y > 0) - Hyprland.dispatch(`workspace r-1`); - } - acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad - } - - MouseArea { - anchors.fill: parent - acceptedButtons: Qt.BackButton - onPressed: (event) => { - if (event.button === Qt.BackButton) { - Hyprland.dispatch(`togglespecialworkspace`); - } - } - } - - // Workspaces - background - ColumnLayout { - id: columnLayout - z: 1 - - spacing: 0 - anchors.fill: parent - implicitWidth: Appearance.sizes.verticalBarWidth - - Repeater { - model: Config.options.bar.workspaces.shown - - Rectangle { - z: 1 - implicitWidth: workspaceButtonWidth - implicitHeight: workspaceButtonWidth - radius: (width / 2) - property var previousOccupied: (workspaceOccupied[index-1] && !(!activeWindow?.activated && monitor?.activeWorkspace?.id === index)) - property var nextOccupied: (workspaceOccupied[index+1] && !(!activeWindow?.activated && monitor?.activeWorkspace?.id === index+2)) - property var radiusTop: previousOccupied ? 0 : (width / 2) - property var radiusBottom: nextOccupied ? 0 : (width / 2) - - Layout.alignment: Qt.AlignHCenter - - topLeftRadius: radiusTop - topRightRadius: radiusTop - bottomLeftRadius: radiusBottom - bottomRightRadius: radiusBottom - - color: ColorUtils.transparentize(Appearance.m3colors.m3secondaryContainer, 0.4) - opacity: (workspaceOccupied[index] && !(!activeWindow?.activated && monitor?.activeWorkspace?.id === index+1)) ? 1 : 0 - - Behavior on opacity { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - Behavior on radiusTop { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - Behavior on radiusBottom { - animation: Appearance.animation.elementMove.numberAnimation.createObject(this) - } - - } - } - } - - // Active workspace - Rectangle { - z: 2 - // Make active ws indicator, which has a brighter color, smaller to look like it is of the same size as ws occupied highlight - implicitWidth: workspaceButtonWidth - root.activeWorkspaceMargin * 2 - radius: Appearance.rounding.full - color: Appearance.colors.colPrimary - anchors.horizontalCenter: parent.horizontalCenter - - property real idx1: workspaceIndexInGroup - property real idx2: workspaceIndexInGroup - y: Math.min(idx1, idx2) * workspaceButtonWidth + root.activeWorkspaceMargin - implicitHeight: Math.abs(idx1 - idx2) * workspaceButtonWidth + workspaceButtonWidth - root.activeWorkspaceMargin * 2 - - Behavior on idx1 { // Leading anim - NumberAnimation { - duration: 100 - easing.type: Easing.OutSine - } - } - Behavior on idx2 { // Following anim - NumberAnimation { - duration: 300 - easing.type: Easing.OutSine - } - } - } - - // Workspaces - numbers - ColumnLayout { - id: columnLayoutNumbers - z: 3 - - spacing: 0 - anchors.fill: parent - implicitWidth: Appearance.sizes.verticalBarWidth - - Repeater { - model: Config.options.bar.workspaces.shown - - Button { - id: button - property int workspaceValue: workspaceGroup * Config.options.bar.workspaces.shown + index + 1 - Layout.fillWidth: true - onPressed: Hyprland.dispatch(`workspace ${workspaceValue}`) - height: workspaceButtonWidth - - background: Item { - id: workspaceButtonBackground - implicitWidth: workspaceButtonWidth - implicitHeight: workspaceButtonWidth - property var biggestWindow: HyprlandData.biggestWindowForWorkspace(button.workspaceValue) - property var mainAppIconSource: Quickshell.iconPath(AppSearch.guessIcon(biggestWindow?.class), "image-missing") - - StyledText { // Workspace number text - opacity: root.showNumbers - || ((Config.options?.bar.workspaces.alwaysShowNumbers && (!Config.options?.bar.workspaces.showAppIcons || !workspaceButtonBackground.biggestWindow || root.showNumbers)) - || (root.showNumbers && !Config.options?.bar.workspaces.showAppIcons) - ) ? 1 : 0 - z: 3 - - anchors.centerIn: parent - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - font.pixelSize: Appearance.font.pixelSize.small - ((text.length - 1) * (text !== "10") * 2) - text: `${button.workspaceValue}` - elide: Text.ElideRight - color: (monitor?.activeWorkspace?.id == button.workspaceValue) ? - Appearance.m3colors.m3onPrimary : - (workspaceOccupied[index] ? Appearance.m3colors.m3onSecondaryContainer : - Appearance.colors.colOnLayer1Inactive) - - Behavior on opacity { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - } - Rectangle { // Dot instead of ws number - id: wsDot - opacity: (Config.options?.bar.workspaces.alwaysShowNumbers - || root.showNumbers - || (Config.options?.bar.workspaces.showAppIcons && workspaceButtonBackground.biggestWindow) - ) ? 0 : 1 - visible: opacity > 0 - anchors.centerIn: parent - width: workspaceButtonWidth * 0.18 - height: width - radius: width / 2 - color: (monitor?.activeWorkspace?.id == button.workspaceValue) ? - Appearance.m3colors.m3onPrimary : - (workspaceOccupied[index] ? Appearance.m3colors.m3onSecondaryContainer : - Appearance.colors.colOnLayer1Inactive) - - Behavior on opacity { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - } - Item { // Main app icon - anchors.centerIn: parent - width: workspaceButtonWidth - height: workspaceButtonWidth - opacity: !Config.options?.bar.workspaces.showAppIcons ? 0 : - (workspaceButtonBackground.biggestWindow && !root.showNumbers && Config.options?.bar.workspaces.showAppIcons) ? - 1 : workspaceButtonBackground.biggestWindow ? workspaceIconOpacityShrinked : 0 - visible: opacity > 0 - IconImage { - id: mainAppIcon - anchors.bottom: parent.bottom - anchors.right: parent.right - anchors.bottomMargin: (!root.showNumbers && Config.options?.bar.workspaces.showAppIcons) ? - (workspaceButtonWidth - workspaceIconSize) / 2 : workspaceIconMarginShrinked - anchors.rightMargin: (!root.showNumbers && Config.options?.bar.workspaces.showAppIcons) ? - (workspaceButtonWidth - workspaceIconSize) / 2 : workspaceIconMarginShrinked - - source: workspaceButtonBackground.mainAppIconSource - implicitSize: (!root.showNumbers && Config.options?.bar.workspaces.showAppIcons) ? workspaceIconSize : workspaceIconSizeShrinked - - Behavior on opacity { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - Behavior on anchors.bottomMargin { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - Behavior on anchors.rightMargin { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - Behavior on implicitSize { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } - } - - Loader { - active: Config.options.bar.workspaces.monochromeIcons - anchors.fill: mainAppIcon - sourceComponent: Item { - Desaturate { - id: desaturatedIcon - visible: false // There's already color overlay - anchors.fill: parent - source: mainAppIcon - desaturation: 0.8 - } - ColorOverlay { - anchors.fill: desaturatedIcon - source: desaturatedIcon - color: ColorUtils.transparentize(wsDot.color, 0.9) - } - } - } - } - } - - - } - - } - - } - -} From e9c73ebb71ce1eee9f42b6cb3719f10228412e29 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:23:03 +0200 Subject: [PATCH 06/16] readme: update ii-qs showcase --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2c14f8754..4943fb185 100644 --- a/README.md +++ b/README.md @@ -86,9 +86,9 @@ Widget system: Quickshell | Support: Yes | AI, settings app | Some widgets | |:---|:---------------| -| ![image](https://github.com/user-attachments/assets/4d45e860-ae60-418a-a564-309b4939f5c4) | ![image](https://github.com/user-attachments/assets/4fcd63d9-0943-4b21-8737-4bed97b71961) | +| image | image | | Window management | Weeb power | -| ![image](https://github.com/user-attachments/assets/86cc511b-0d33-4c78-bcc0-3037d02a17da) | ![image](https://github.com/user-attachments/assets/292259fc-57d3-4663-a583-2ce2faad13fb) | +| image | image | ### illogical-impulseAGS (Deprecated) From 801cd2e855c71abe69f3251884ad13fd5f446bcc Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:44:46 +0200 Subject: [PATCH 07/16] only show konachan button and create homework folder when weeb --- .config/quickshell/ii/modules/common/Directories.qml | 1 - .config/quickshell/ii/modules/settings/QuickConfig.qml | 1 + .config/quickshell/ii/modules/sidebarLeft/Anime.qml | 9 +++++++++ .config/quickshell/ii/welcome.qml | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.config/quickshell/ii/modules/common/Directories.qml b/.config/quickshell/ii/modules/common/Directories.qml index 60f587b59..20d95a33f 100644 --- a/.config/quickshell/ii/modules/common/Directories.qml +++ b/.config/quickshell/ii/modules/common/Directories.qml @@ -46,7 +46,6 @@ Singleton { Quickshell.execDetached(["mkdir", "-p", `${favicons}`]) Quickshell.execDetached(["bash", "-c", `rm -rf '${coverArt}'; mkdir -p '${coverArt}'`]) Quickshell.execDetached(["bash", "-c", `rm -rf '${booruPreviews}'; mkdir -p '${booruPreviews}'`]) - Quickshell.execDetached(["bash", "-c", `mkdir -p '${booruDownloads}' && mkdir -p '${booruDownloadsNsfw}'`]) Quickshell.execDetached(["bash", "-c", `rm -rf '${latexOutput}'; mkdir -p '${latexOutput}'`]) Quickshell.execDetached(["bash", "-c", `rm -rf '${cliphistDecode}'; mkdir -p '${cliphistDecode}'`]) Quickshell.execDetached(["mkdir", "-p", `${aiChats}`]) diff --git a/.config/quickshell/ii/modules/settings/QuickConfig.qml b/.config/quickshell/ii/modules/settings/QuickConfig.qml index 4669a7f97..d9a0a09cb 100644 --- a/.config/quickshell/ii/modules/settings/QuickConfig.qml +++ b/.config/quickshell/ii/modules/settings/QuickConfig.qml @@ -90,6 +90,7 @@ ContentPage { ColumnLayout { RippleButtonWithIcon { id: rndWallBtn + visible: Config.options.policies.weeb === 1 Layout.fillWidth: true buttonRadius: Appearance.rounding.small materialIcon: "wallpaper" diff --git a/.config/quickshell/ii/modules/sidebarLeft/Anime.qml b/.config/quickshell/ii/modules/sidebarLeft/Anime.qml index 97dabd942..9e7bfb480 100644 --- a/.config/quickshell/ii/modules/sidebarLeft/Anime.qml +++ b/.config/quickshell/ii/modules/sidebarLeft/Anime.qml @@ -23,6 +23,15 @@ Item { property var suggestionQuery: "" property var suggestionList: [] + Connections { + target: Config + function onReadyChanged() { + if (Config.options.policies.weeb !== 0) { + Quickshell.execDetached(["bash", "-c", `mkdir -p '${root.downloadPath}' && mkdir -p '${root.nsfwPath}'`]) + } + } + } + Connections { target: Booru function onTagSuggestion(query, suggestions) { diff --git a/.config/quickshell/ii/welcome.qml b/.config/quickshell/ii/welcome.qml index 63b6787c8..03fb2a801 100644 --- a/.config/quickshell/ii/welcome.qml +++ b/.config/quickshell/ii/welcome.qml @@ -236,6 +236,7 @@ ApplicationWindow { Layout.alignment: Qt.AlignHCenter RippleButtonWithIcon { id: rndWallBtn + visible: Config.options.policies.weeb === 1 Layout.alignment: Qt.AlignHCenter buttonRadius: Appearance.rounding.small materialIcon: "wallpaper" From c39507747b91208247a13757d8e679e60c7bb514 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sat, 6 Sep 2025 10:38:15 +0200 Subject: [PATCH 08/16] rename generationProps -> terminalGenerationProps, change default harmony to match script --- .config/quickshell/ii/modules/common/Config.qml | 4 ++-- .config/quickshell/ii/scripts/colors/switchwall.sh | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.config/quickshell/ii/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml index 2bc969c76..e0ee2a3b4 100644 --- a/.config/quickshell/ii/modules/common/Config.qml +++ b/.config/quickshell/ii/modules/common/Config.qml @@ -91,8 +91,8 @@ Singleton { property bool enableAppsAndShell: true property bool enableQtApps: true property bool enableTerminal: true - property JsonObject generationProps: JsonObject { - property real harmony: 0.5 + property JsonObject terminalGenerationProps: JsonObject { + property real harmony: 0.8 property real harmonizeThreshold: 100 property real termFgBoost: 0.35 } diff --git a/.config/quickshell/ii/scripts/colors/switchwall.sh b/.config/quickshell/ii/scripts/colors/switchwall.sh index 805a3af3e..229d89957 100755 --- a/.config/quickshell/ii/scripts/colors/switchwall.sh +++ b/.config/quickshell/ii/scripts/colors/switchwall.sh @@ -282,9 +282,9 @@ switch() { # Set harmony and related properties if [ -f "$SHELL_CONFIG_FILE" ]; then - harmony=$(jq -r '.appearance.wallpaperTheming.generationProps.harmony' "$SHELL_CONFIG_FILE") - harmonize_threshold=$(jq -r '.appearance.wallpaperTheming.generationProps.harmonizeThreshold' "$SHELL_CONFIG_FILE") - term_fg_boost=$(jq -r '.appearance.wallpaperTheming.generationProps.termFgBoost' "$SHELL_CONFIG_FILE") + harmony=$(jq -r '.appearance.wallpaperTheming.terminalGenerationProps.harmony' "$SHELL_CONFIG_FILE") + harmonize_threshold=$(jq -r '.appearance.wallpaperTheming.terminalGenerationProps.harmonizeThreshold' "$SHELL_CONFIG_FILE") + term_fg_boost=$(jq -r '.appearance.wallpaperTheming.terminalGenerationProps.termFgBoost' "$SHELL_CONFIG_FILE") [[ "$harmony" != "null" && -n "$harmony" ]] && generate_colors_material_args+=(--harmony "$harmony") [[ "$harmonize_threshold" != "null" && -n "$harmonize_threshold" ]] && generate_colors_material_args+=(--harmonize_threshold "$harmonize_threshold") [[ "$term_fg_boost" != "null" && -n "$term_fg_boost" ]] && generate_colors_material_args+=(--term_fg_boost "$term_fg_boost") From ba5b052ee80c7d89978736330a8565d1b4d8d451 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 7 Sep 2025 09:39:13 +0200 Subject: [PATCH 09/16] readme: add note about availability of installation methods n stuff --- README.md | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 4943fb185..56f3115eb 100644 --- a/README.md +++ b/README.md @@ -26,10 +26,10 @@ - **Transparent installation**: Every command is shown before it's run
- Installation (illogical-impulseQuickshell) + Installation (illogical-impulse Quickshell) - - See the [Wiki](https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/01setup/) - - **Default keybinds**: Should be somewhat familiar to Windows or GNOME users. + - See the [Wiki](https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/01setup/) (both install script and manual installation available) + - **Default keybinds**: Should be somewhat familiar to Windows or GNOME users. Important ones: - `Super`+`/` = keybind list - `Super`+`Enter` = terminal - If for whatever reason the keybind list widget does not work, here's an image: @@ -44,12 +44,11 @@ | Software | Purpose | | ------------- | ------------- | - | [Hyprland](https://github.com/hyprwm/hyprland) | The compositor (for noobs, you can just call it a window manager) | - | [Quickshell](https://quickshell.outfoxxed.me/) | A QtQuick-based widget system, responsible for the status bar, sidebars, etc. | + | [Hyprland](https://github.com/hyprwm/hyprland) | The compositor (manages and renders windows) | + | [Quickshell](https://quickshell.outfoxxed.me/) | A QtQuick-based widget system, used for the status bar, sidebars, etc. | - - - - For a more comprehensive list of dependencies, see [scriptdata/dependencies.conf](https://github.com/end-4/dots-hyprland/blob/main/scriptdata/dependencies.conf) + - THERE IS NO WAYBAR + - For the full list of dependencies, see the [arch-packages folder](https://github.com/end-4/dots-hyprland/tree/main/arch-packages)
@@ -58,9 +57,6 @@
-_Note: **THERE IS NO FUCKING WAYBAR**_ - -

• screenshots •

@@ -102,7 +98,7 @@ Widget system: AGS | Support: No ### Very old stuff -- Source code not likely to work but still available in the [`archive`](https://github.com/end-4/dots-hyprland/tree/archive) branch. Extremely spaghetti. +- Not likely to work, but the source is still available in the [`archive`](https://github.com/end-4/dots-hyprland/tree/archive) branch. Extremely spaghetti. - Click image for a presentation video #### m3ww @@ -142,28 +138,23 @@ Widget system: AGS | Support: No

- - [@clsty](https://github.com/clsty) for making my work accessible by taking care of the install script and many other things + - [@clsty](https://github.com/clsty) for making the dotfiles accessible by taking care of the install script and many other things - [@midn8hustlr](https://github.com/midn8hustlr) for greatly improving the color generation system - [@outfoxxed](https://github.com/outfoxxed/) for being extremely supportive in my Quickshell journey - Quickshell: [Soramane](https://github.com/caelestia-dots/shell/), [FridayFaerie](https://github.com/FridayFaerie/quickshell), [nydragon](https://github.com/nydragon/nysh) - - AGS: [Aylur's config](https://github.com/Aylur/dotfiles/tree/ags-pre-ts), [kotontrion's config](https://github.com/kotontrion/dotfiles) - - EWW: [fufexan's config](https://github.com/fufexan/dotfiles) (he thanks more people there btw) - - AI bots for providing useful examples - - [@tokyobot](https://github.com/tokyob0t) for saying hi + - AGS: [Aylur](https://github.com/Aylur/dotfiles/tree/ags-pre-ts), [kotontrion](https://github.com/kotontrion/dotfiles) + - EWW: [fufexan](https://github.com/fufexan/dotfiles)

• stonks •

-- Funny useful number: https://github.com/sponsors/end-4 -- Funny useless number: +- If you would like to give me some milk😳 (i dont drink coffee): https://github.com/sponsors/end-4 +- Virtual tentacle cat website points chart [![Stargazers over time](https://starchart.cc/end-4/dots-hyprland.svg?variant=adaptive)](https://starchart.cc/end-4/dots-hyprland) -- *Jokes aside i do appreciate both* -

• inspirations/copying •

@@ -171,4 +162,4 @@ Widget system: AGS | Support: No
- Inspiration: osu!lazer, Windows 11, Material Design 3, AvdanOS (concept) - - Copying: The license allows you to. Personally I have absolutely no problem with others redistributing/recreating my work. There's no "stealing" (unless you do weird stuff and violate the license). (this note is here because some people actually asked) + - Copying: The license allows you to. Personally I have absolutely no problem with others redistributing/recreating my work. There's no "stealing" (unless you do weird stuff and violate the license). (this note is here because some people actually asked) From e69f8ced881a882718347fa41e56d1491d1f0282 Mon Sep 17 00:00:00 2001 From: kxrur Date: Sun, 7 Sep 2025 13:31:05 -0400 Subject: [PATCH 10/16] make snap repsect window gaps --- .config/hypr/hyprland/general.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/.config/hypr/hyprland/general.conf b/.config/hypr/hyprland/general.conf index 4097fb8a4..119cbffc9 100644 --- a/.config/hypr/hyprland/general.conf +++ b/.config/hypr/hyprland/general.conf @@ -34,6 +34,7 @@ general { snap { enabled = true + respect_gaps = true } } From 23f92e0a9666d338d78c9243c4ae061af1afa890 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 7 Sep 2025 22:28:27 +0200 Subject: [PATCH 11/16] hyprland: more blur noise --- .config/hypr/hyprland/general.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.config/hypr/hyprland/general.conf b/.config/hypr/hyprland/general.conf index 4097fb8a4..01be74b3e 100644 --- a/.config/hypr/hyprland/general.conf +++ b/.config/hypr/hyprland/general.conf @@ -46,7 +46,7 @@ dwindle { decoration { rounding = 18 - + blur { enabled = true xray = true @@ -55,7 +55,7 @@ decoration { size = 14 passes = 3 brightness = 1 - noise = 0.01 + noise = 0.04 contrast = 1 popups = true popups_ignorealpha = 0.6 From 81ebf9cc1123d9dfa38a9e3c162e5058cd24fc09 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 7 Sep 2025 22:33:41 +0200 Subject: [PATCH 12/16] settings: move some settings to new "general" tab --- .../ii/modules/settings/GeneralConfig.qml | 232 ++++++++++++++++++ .../ii/modules/settings/InterfaceConfig.qml | 145 ----------- .../ii/modules/settings/ServicesConfig.qml | 129 ---------- .config/quickshell/ii/settings.qml | 6 + 4 files changed, 238 insertions(+), 274 deletions(-) create mode 100644 .config/quickshell/ii/modules/settings/GeneralConfig.qml diff --git a/.config/quickshell/ii/modules/settings/GeneralConfig.qml b/.config/quickshell/ii/modules/settings/GeneralConfig.qml new file mode 100644 index 000000000..dd6cbebc3 --- /dev/null +++ b/.config/quickshell/ii/modules/settings/GeneralConfig.qml @@ -0,0 +1,232 @@ +import QtQuick +import Quickshell +import QtQuick.Layouts +import qs +import qs.services +import qs.modules.common +import qs.modules.common.functions +import qs.modules.common.widgets + +ContentPage { + forceWidth: true + + ContentSection { + icon: "volume_up" + title: Translation.tr("Audio") + + ConfigSwitch { + text: Translation.tr("Earbang protection") + checked: Config.options.audio.protection.enable + onCheckedChanged: { + Config.options.audio.protection.enable = checked; + } + StyledToolTip { + content: Translation.tr("Prevents abrupt increments and restricts volume limit") + } + } + ConfigRow { + // uniform: true + ConfigSpinBox { + text: Translation.tr("Max allowed increase") + value: Config.options.audio.protection.maxAllowedIncrease + from: 0 + to: 100 + stepSize: 2 + onValueChanged: { + Config.options.audio.protection.maxAllowedIncrease = value; + } + } + ConfigSpinBox { + text: Translation.tr("Volume limit") + value: Config.options.audio.protection.maxAllowed + from: 0 + to: 154 // pavucontrol allows up to 153% + stepSize: 2 + onValueChanged: { + Config.options.audio.protection.maxAllowed = value; + } + } + } + } + + ContentSection { + icon: "battery_android_full" + title: Translation.tr("Battery") + + ConfigRow { + uniform: true + ConfigSpinBox { + text: Translation.tr("Low warning") + value: Config.options.battery.low + from: 0 + to: 100 + stepSize: 5 + onValueChanged: { + Config.options.battery.low = value; + } + } + ConfigSpinBox { + text: Translation.tr("Critical warning") + value: Config.options.battery.critical + from: 0 + to: 100 + stepSize: 5 + onValueChanged: { + Config.options.battery.critical = value; + } + } + } + ConfigRow { + uniform: true + ConfigSwitch { + text: Translation.tr("Automatic suspend") + checked: Config.options.battery.automaticSuspend + onCheckedChanged: { + Config.options.battery.automaticSuspend = checked; + } + StyledToolTip { + content: Translation.tr("Automatically suspends the system when battery is low") + } + } + ConfigSpinBox { + text: Translation.tr("Suspend at") + value: Config.options.battery.suspend + from: 0 + to: 100 + stepSize: 5 + onValueChanged: { + Config.options.battery.suspend = value; + } + } + } + } + + ContentSection { + icon: "language" + title: Translation.tr("Language") + + ContentSubsection { + title: Translation.tr("Interface Language") + tooltip: Translation.tr("Select the language for the user interface.\n\"Auto\" will use your system's locale.") + + ConfigSelectionArray { + id: languageSelector + currentValue: Config.options.language.ui + onSelected: newValue => { + Config.options.language.ui = newValue; + } + options: [ + { + displayName: Translation.tr("Auto (System)"), + value: "auto" + }, + ...Translation.availableLanguages.map(lang => { + return { + displayName: lang.replace('_', '-'), + value: lang + }; + }) + ] + } + } + } + + ContentSection { + icon: "rule" + title: Translation.tr("Policies") + + ConfigRow { + ColumnLayout { + // Weeb policy + ContentSubsectionLabel { + text: Translation.tr("Weeb") + } + ConfigSelectionArray { + currentValue: Config.options.policies.weeb + onSelected: newValue => { + Config.options.policies.weeb = newValue; + } + options: [ + { + displayName: Translation.tr("No"), + value: 0 + }, + { + displayName: Translation.tr("Yes"), + value: 1 + }, + { + displayName: Translation.tr("Closet"), + value: 2 + } + ] + } + } + + ColumnLayout { + // AI policy + ContentSubsectionLabel { + text: Translation.tr("AI") + } + ConfigSelectionArray { + currentValue: Config.options.policies.ai + onSelected: newValue => { + Config.options.policies.ai = newValue; + } + options: [ + { + displayName: Translation.tr("No"), + value: 0 + }, + { + displayName: Translation.tr("Yes"), + value: 1 + }, + { + displayName: Translation.tr("Local only"), + value: 2 + } + ] + } + } + } + } + + ContentSection { + icon: "nest_clock_farsight_analog" + title: Translation.tr("Time") + + ContentSubsection { + title: Translation.tr("Format") + tooltip: "" + + ConfigSelectionArray { + currentValue: Config.options.time.format + onSelected: newValue => { + if (newValue === "hh:mm") { + Quickshell.execDetached(["bash", "-c", `sed -i 's/\\TIME12\\b/TIME/' '${FileUtils.trimFileProtocol(Directories.config)}/hypr/hyprlock.conf'`]); + } else { + Quickshell.execDetached(["bash", "-c", `sed -i 's/\\TIME\\b/TIME12/' '${FileUtils.trimFileProtocol(Directories.config)}/hypr/hyprlock.conf'`]); + } + + Config.options.time.format = newValue; + + } + options: [ + { + displayName: Translation.tr("24h"), + value: "hh:mm" + }, + { + displayName: Translation.tr("12h am/pm"), + value: "h:mm ap" + }, + { + displayName: Translation.tr("12h AM/PM"), + value: "h:mm AP" + }, + ] + } + } + } +} diff --git a/.config/quickshell/ii/modules/settings/InterfaceConfig.qml b/.config/quickshell/ii/modules/settings/InterfaceConfig.qml index 11e6811b4..57074a34f 100644 --- a/.config/quickshell/ii/modules/settings/InterfaceConfig.qml +++ b/.config/quickshell/ii/modules/settings/InterfaceConfig.qml @@ -7,66 +7,6 @@ import qs.modules.common.widgets ContentPage { forceWidth: true - ContentSection { - icon: "rule" - title: Translation.tr("Policies") - - ConfigRow { - ColumnLayout { - // Weeb policy - ContentSubsectionLabel { - text: Translation.tr("Weeb") - } - ConfigSelectionArray { - currentValue: Config.options.policies.weeb - onSelected: newValue => { - Config.options.policies.weeb = newValue; - } - options: [ - { - displayName: Translation.tr("No"), - value: 0 - }, - { - displayName: Translation.tr("Yes"), - value: 1 - }, - { - displayName: Translation.tr("Closet"), - value: 2 - } - ] - } - } - - ColumnLayout { - // AI policy - ContentSubsectionLabel { - text: Translation.tr("AI") - } - ConfigSelectionArray { - currentValue: Config.options.policies.ai - onSelected: newValue => { - Config.options.policies.ai = newValue; - } - options: [ - { - displayName: Translation.tr("No"), - value: 0 - }, - { - displayName: Translation.tr("Yes"), - value: 1 - }, - { - displayName: Translation.tr("Local only"), - value: 2 - } - ] - } - } - } - } ContentSection { icon: "wallpaper" @@ -121,58 +61,6 @@ ContentPage { } } - ContentSection { - icon: "battery_android_full" - title: Translation.tr("Battery") - - ConfigRow { - uniform: true - ConfigSpinBox { - text: Translation.tr("Low warning") - value: Config.options.battery.low - from: 0 - to: 100 - stepSize: 5 - onValueChanged: { - Config.options.battery.low = value; - } - } - ConfigSpinBox { - text: Translation.tr("Critical warning") - value: Config.options.battery.critical - from: 0 - to: 100 - stepSize: 5 - onValueChanged: { - Config.options.battery.critical = value; - } - } - } - ConfigRow { - uniform: true - ConfigSwitch { - text: Translation.tr("Automatic suspend") - checked: Config.options.battery.automaticSuspend - onCheckedChanged: { - Config.options.battery.automaticSuspend = checked; - } - StyledToolTip { - content: Translation.tr("Automatically suspends the system when battery is low") - } - } - ConfigSpinBox { - text: Translation.tr("Suspend at") - value: Config.options.battery.suspend - from: 0 - to: 100 - stepSize: 5 - onValueChanged: { - Config.options.battery.suspend = value; - } - } - } - } - ContentSection { icon: "call_to_action" title: Translation.tr("Dock") @@ -281,10 +169,6 @@ ContentPage { onCheckedChanged: { Config.options.sidebar.cornerOpen.visualize = checked; } - - StyledToolTip { - content: "When this is off you'll have to click" - } } ConfigRow { ConfigSpinBox { @@ -389,33 +273,4 @@ ContentPage { } } - ContentSection { - icon: "language" - title: Translation.tr("Language") - - ContentSubsection { - title: Translation.tr("Interface Language") - tooltip: Translation.tr("Select the language for the user interface.\n\"Auto\" will use your system's locale.") - - ConfigSelectionArray { - id: languageSelector - currentValue: Config.options.language.ui - onSelected: newValue => { - Config.options.language.ui = newValue; - } - options: [ - { - displayName: Translation.tr("Auto (System)"), - value: "auto" - }, - ...Translation.availableLanguages.map(lang => { - return { - displayName: lang.replace('_', '-'), - value: lang - }; - }) - ] - } - } - } } diff --git a/.config/quickshell/ii/modules/settings/ServicesConfig.qml b/.config/quickshell/ii/modules/settings/ServicesConfig.qml index 004a549da..f28eab31a 100644 --- a/.config/quickshell/ii/modules/settings/ServicesConfig.qml +++ b/.config/quickshell/ii/modules/settings/ServicesConfig.qml @@ -10,45 +10,6 @@ import Quickshell ContentPage { forceWidth: true - ContentSection { - icon: "volume_up" - title: Translation.tr("Audio") - - ConfigSwitch { - text: Translation.tr("Earbang protection") - checked: Config.options.audio.protection.enable - onCheckedChanged: { - Config.options.audio.protection.enable = checked; - } - StyledToolTip { - content: Translation.tr("Prevents abrupt increments and restricts volume limit") - } - } - ConfigRow { - // uniform: true - ConfigSpinBox { - text: Translation.tr("Max allowed increase") - value: Config.options.audio.protection.maxAllowedIncrease - from: 0 - to: 100 - stepSize: 2 - onValueChanged: { - Config.options.audio.protection.maxAllowedIncrease = value; - } - } - ConfigSpinBox { - text: Translation.tr("Volume limit") - value: Config.options.audio.protection.maxAllowed - from: 0 - to: 154 // pavucontrol allows up to 153% - stepSize: 2 - onValueChanged: { - Config.options.audio.protection.maxAllowed = value; - } - } - } - } - ContentSection { icon: "neurology" title: Translation.tr("AI") @@ -66,58 +27,6 @@ ContentPage { } } - ContentSection { - icon: "battery_android_full" - title: Translation.tr("Battery") - - ConfigRow { - uniform: true - ConfigSpinBox { - text: Translation.tr("Low warning") - value: Config.options.battery.low - from: 0 - to: 100 - stepSize: 5 - onValueChanged: { - Config.options.battery.low = value; - } - } - ConfigSpinBox { - text: Translation.tr("Critical warning") - value: Config.options.battery.critical - from: 0 - to: 100 - stepSize: 5 - onValueChanged: { - Config.options.battery.critical = value; - } - } - } - ConfigRow { - uniform: true - ConfigSwitch { - text: Translation.tr("Automatic suspend") - checked: Config.options.battery.automaticSuspend - onCheckedChanged: { - Config.options.battery.automaticSuspend = checked; - } - StyledToolTip { - content: Translation.tr("Automatically suspends the system when battery is low") - } - } - ConfigSpinBox { - text: Translation.tr("Suspend at") - value: Config.options.battery.suspend - from: 0 - to: 100 - stepSize: 5 - onValueChanged: { - Config.options.battery.suspend = value; - } - } - } - } - ContentSection { icon: "cell_tower" title: Translation.tr("Networking") @@ -241,42 +150,4 @@ ContentPage { } } } - - ContentSection { - icon: "nest_clock_farsight_analog" - title: Translation.tr("Time") - - ContentSubsection { - title: Translation.tr("Format") - tooltip: "" - - ConfigSelectionArray { - currentValue: Config.options.time.format - onSelected: newValue => { - if (newValue === "hh:mm") { - Quickshell.execDetached(["bash", "-c", `sed -i 's/\\TIME12\\b/TIME/' '${FileUtils.trimFileProtocol(Directories.config)}/hypr/hyprlock.conf'`]); - } else { - Quickshell.execDetached(["bash", "-c", `sed -i 's/\\TIME\\b/TIME12/' '${FileUtils.trimFileProtocol(Directories.config)}/hypr/hyprlock.conf'`]); - } - - Config.options.time.format = newValue; - - } - options: [ - { - displayName: Translation.tr("24h"), - value: "hh:mm" - }, - { - displayName: Translation.tr("12h am/pm"), - value: "h:mm ap" - }, - { - displayName: Translation.tr("12h AM/PM"), - value: "h:mm AP" - }, - ] - } - } - } } diff --git a/.config/quickshell/ii/settings.qml b/.config/quickshell/ii/settings.qml index 9994c7609..22a6a7ddf 100644 --- a/.config/quickshell/ii/settings.qml +++ b/.config/quickshell/ii/settings.qml @@ -28,6 +28,12 @@ ApplicationWindow { icon: "instant_mix", component: "modules/settings/QuickConfig.qml" }, + { + name: Translation.tr("General"), + icon: "dashboard", + iconRotation: 180, + component: "modules/settings/GeneralConfig.qml" + }, { name: Translation.tr("Bar"), icon: "toast", From f33eaf6d0f95db929fb20695585c522a887d70e4 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Sun, 7 Sep 2025 22:53:18 +0200 Subject: [PATCH 13/16] settings: add advanced terminal color generation props --- .../modules/common/widgets/ConfigSpinBox.qml | 1 + .../ii/modules/settings/AdvancedConfig.qml | 86 +++++++++++++------ .config/quickshell/ii/settings.qml | 4 +- 3 files changed, 63 insertions(+), 28 deletions(-) diff --git a/.config/quickshell/ii/modules/common/widgets/ConfigSpinBox.qml b/.config/quickshell/ii/modules/common/widgets/ConfigSpinBox.qml index a96aed514..2c9d7eabb 100644 --- a/.config/quickshell/ii/modules/common/widgets/ConfigSpinBox.qml +++ b/.config/quickshell/ii/modules/common/widgets/ConfigSpinBox.qml @@ -16,6 +16,7 @@ RowLayout { Layout.rightMargin: 8 RowLayout { + spacing: 10 OptionalMaterialSymbol { icon: root.icon } diff --git a/.config/quickshell/ii/modules/settings/AdvancedConfig.qml b/.config/quickshell/ii/modules/settings/AdvancedConfig.qml index 13e97deb2..d28f7fb5b 100644 --- a/.config/quickshell/ii/modules/settings/AdvancedConfig.qml +++ b/.config/quickshell/ii/modules/settings/AdvancedConfig.qml @@ -11,36 +11,70 @@ ContentPage { icon: "colors" title: Translation.tr("Color generation") - ConfigRow { - uniform: true - ConfigSwitch { - text: Translation.tr("Shell & utilities") - checked: Config.options.appearance.wallpaperTheming.enableAppsAndShell - onCheckedChanged: { - Config.options.appearance.wallpaperTheming.enableAppsAndShell = checked; - } + ConfigSwitch { + buttonIcon: "hardware" + text: Translation.tr("Shell & utilities") + checked: Config.options.appearance.wallpaperTheming.enableAppsAndShell + onCheckedChanged: { + Config.options.appearance.wallpaperTheming.enableAppsAndShell = checked; } - ConfigSwitch { - text: Translation.tr("Qt apps") - checked: Config.options.appearance.wallpaperTheming.enableQtApps - onCheckedChanged: { - Config.options.appearance.wallpaperTheming.enableQtApps = checked; - } - StyledToolTip { - content: Translation.tr("Shell & utilities theming must also be enabled") - } + } + ConfigSwitch { + buttonIcon: "tv_options_input_settings" + text: Translation.tr("Qt apps") + checked: Config.options.appearance.wallpaperTheming.enableQtApps + onCheckedChanged: { + Config.options.appearance.wallpaperTheming.enableQtApps = checked; } - ConfigSwitch { - text: Translation.tr("Terminal") - checked: Config.options.appearance.wallpaperTheming.enableTerminal - onCheckedChanged: { - Config.options.appearance.wallpaperTheming.enableTerminal = checked; - } - StyledToolTip { - content: Translation.tr("Shell & utilities theming must also be enabled") - } + StyledToolTip { + content: Translation.tr("Shell & utilities theming must also be enabled") } + } + ConfigSwitch { + buttonIcon: "terminal" + text: Translation.tr("Terminal") + checked: Config.options.appearance.wallpaperTheming.enableTerminal + onCheckedChanged: { + Config.options.appearance.wallpaperTheming.enableTerminal = checked; + } + StyledToolTip { + content: Translation.tr("Shell & utilities theming must also be enabled") + } + } + ConfigSpinBox { + icon: "invert_colors" + text: Translation.tr("Terminal: Harmony (%)") + value: Config.options.appearance.wallpaperTheming.terminalGenerationProps.harmony * 100 + from: 0 + to: 100 + stepSize: 10 + onValueChanged: { + Config.options.appearance.wallpaperTheming.terminalGenerationProps.harmony = value / 100; + } + } + ConfigSpinBox { + icon: "gradient" + text: Translation.tr("Terminal: Harmonize threshold") + value: Config.options.appearance.wallpaperTheming.terminalGenerationProps.harmonizeThreshold + from: 0 + to: 100 + stepSize: 10 + onValueChanged: { + Config.options.appearance.wallpaperTheming.terminalGenerationProps.harmonizeThreshold = value; + } + } + ConfigSpinBox { + icon: "format_color_text" + text: Translation.tr("Terminal: Foreground boost (%)") + value: Config.options.appearance.wallpaperTheming.terminalGenerationProps.termFgBoost * 100 + from: 0 + to: 100 + stepSize: 10 + onValueChanged: { + Config.options.appearance.wallpaperTheming.terminalGenerationProps.termFgBoost = value / 100; + } } } + } diff --git a/.config/quickshell/ii/settings.qml b/.config/quickshell/ii/settings.qml index 22a6a7ddf..0f52b2382 100644 --- a/.config/quickshell/ii/settings.qml +++ b/.config/quickshell/ii/settings.qml @@ -30,7 +30,7 @@ ApplicationWindow { }, { name: Translation.tr("General"), - icon: "dashboard", + icon: "browse", iconRotation: 180, component: "modules/settings/GeneralConfig.qml" }, @@ -42,7 +42,7 @@ ApplicationWindow { }, { name: Translation.tr("Interface"), - icon: "cards", + icon: "bottom_app_bar", component: "modules/settings/InterfaceConfig.qml" }, { From cd7e60b7a1e30aa3bad2f70c529539edcf327d7b Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 8 Sep 2025 08:40:18 +0200 Subject: [PATCH 14/16] hyprland: make snapping gap consistent with tiling gap --- .config/hypr/hyprland/general.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.config/hypr/hyprland/general.conf b/.config/hypr/hyprland/general.conf index fac6ae819..1de8cd19c 100644 --- a/.config/hypr/hyprland/general.conf +++ b/.config/hypr/hyprland/general.conf @@ -34,7 +34,9 @@ general { snap { enabled = true - respect_gaps = true + window_gap = 4 + monitor_gap = 5 + respect_gaps = true } } From f3de317dddc473cb2b5cb9dfcd3c4cc4e27cb382 Mon Sep 17 00:00:00 2001 From: Moeta Yuko Date: Sun, 31 Aug 2025 14:50:24 +0800 Subject: [PATCH 15/16] tray: use more descriptive text for tooltip and update on entry The systray id is intended for programmatic use rather than frontend presentation. It is recommended to use the tooltipTitle and title attributes when available, and these should be updated upon entry, as their values may change dynamically. --- .config/quickshell/ii/modules/bar/SysTrayItem.qml | 12 +++++++----- .config/quickshell/ii/modules/common/Config.qml | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/.config/quickshell/ii/modules/bar/SysTrayItem.qml b/.config/quickshell/ii/modules/bar/SysTrayItem.qml index 928d43d26..f2bbc39d8 100644 --- a/.config/quickshell/ii/modules/bar/SysTrayItem.qml +++ b/.config/quickshell/ii/modules/bar/SysTrayItem.qml @@ -29,6 +29,12 @@ MouseArea { } event.accepted = true; } + onEntered: { + tooltip.content = item.tooltipTitle.length > 0 ? item.tooltipTitle + : (item.title.length > 0 ? item.title : item.id); + if (item.tooltipDescription.length > 0) tooltip.content += " • " + item.tooltipDescription; + if (Config.options.bar.tray.showItemId) tooltip.content += "\n[" + item.id + "]"; + } QsMenuAnchor { id: menu @@ -71,11 +77,7 @@ MouseArea { } StyledToolTip { - content: { - let c = root.item.id - if (root.item.tooltipDescription.length > 0) c += " • " + root.item.tooltipDescription - return c; - } + id: tooltip extraVisibleCondition: root.containsMouse alternativeVisibleCondition: extraVisibleCondition } diff --git a/.config/quickshell/ii/modules/common/Config.qml b/.config/quickshell/ii/modules/common/Config.qml index 56580c428..83529df41 100644 --- a/.config/quickshell/ii/modules/common/Config.qml +++ b/.config/quickshell/ii/modules/common/Config.qml @@ -172,6 +172,7 @@ Singleton { } property JsonObject tray: JsonObject { property bool monochromeIcons: true + property bool showItemId: false property bool invertPinnedItems: false // Makes the below a whitelist for the tray and blacklist for the pinned area property list pinnedItems: [ "Fcitx" ] } From 703697e1c40b66619fb224043891aade47494bb3 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Mon, 8 Sep 2025 09:18:09 +0200 Subject: [PATCH 16/16] settings & welcome: add icons to policies --- .config/quickshell/ii/modules/settings/GeneralConfig.qml | 6 ++++++ .config/quickshell/ii/welcome.qml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.config/quickshell/ii/modules/settings/GeneralConfig.qml b/.config/quickshell/ii/modules/settings/GeneralConfig.qml index dd6cbebc3..e520dab0b 100644 --- a/.config/quickshell/ii/modules/settings/GeneralConfig.qml +++ b/.config/quickshell/ii/modules/settings/GeneralConfig.qml @@ -149,14 +149,17 @@ ContentPage { options: [ { displayName: Translation.tr("No"), + icon: "close", value: 0 }, { displayName: Translation.tr("Yes"), + icon: "check", value: 1 }, { displayName: Translation.tr("Closet"), + icon: "ev_shadow", value: 2 } ] @@ -176,14 +179,17 @@ ContentPage { options: [ { displayName: Translation.tr("No"), + icon: "close", value: 0 }, { displayName: Translation.tr("Yes"), + icon: "check", value: 1 }, { displayName: Translation.tr("Local only"), + icon: "sync_saved_locally", value: 2 } ] diff --git a/.config/quickshell/ii/welcome.qml b/.config/quickshell/ii/welcome.qml index 03fb2a801..fefdc7976 100644 --- a/.config/quickshell/ii/welcome.qml +++ b/.config/quickshell/ii/welcome.qml @@ -310,14 +310,17 @@ ApplicationWindow { options: [ { displayName: Translation.tr("No"), + icon: "close", value: 0 }, { displayName: Translation.tr("Yes"), + icon: "check", value: 1 }, { displayName: Translation.tr("Closet"), + icon: "ev_shadow", value: 2 } ] @@ -335,14 +338,17 @@ ApplicationWindow { options: [ { displayName: Translation.tr("No"), + icon: "close", value: 0 }, { displayName: Translation.tr("Yes"), + icon: "check", value: 1 }, { displayName: Translation.tr("Local only"), + icon: "sync_saved_locally", value: 2 } ]