From ef2248b523313d960871954ed1d5d61c2f1fe0c0 Mon Sep 17 00:00:00 2001 From: lautaro ezequiel deco Date: Tue, 17 Jun 2025 02:40:35 -0300 Subject: [PATCH 01/11] Add shell emojis dependency --- arch-packages/illogical-impulse-fonts-themes/PKGBUILD | 1 + 1 file changed, 1 insertion(+) diff --git a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD index ed1a95070..321c2e7cf 100644 --- a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD +++ b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD @@ -19,4 +19,5 @@ depends=( ttf-material-symbols-variable-git ttf-rubik-vf ttf-gabarito-git + noto-fonts-emoji ) From d6718e9f1005477a364be00244b3603f55b68bda Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 08:26:02 +0200 Subject: [PATCH 02/11] noto emoji -> twemoji --- arch-packages/illogical-impulse-fonts-themes/PKGBUILD | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD index 321c2e7cf..12a7209be 100644 --- a/arch-packages/illogical-impulse-fonts-themes/PKGBUILD +++ b/arch-packages/illogical-impulse-fonts-themes/PKGBUILD @@ -14,10 +14,10 @@ depends=( kitty matugen-bin starship - ttf-readex-pro + ttf-gabarito-git ttf-jetbrains-mono-nerd ttf-material-symbols-variable-git + ttf-readex-pro ttf-rubik-vf - ttf-gabarito-git - noto-fonts-emoji + ttf-twemoji ) From 265d3fdbdc17f455305fcb9eeebfd2986531a9ab Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 09:07:09 +0200 Subject: [PATCH 03/11] quickshell: first run: set wallpaper iff none set --- .config/quickshell/services/FirstRunExperience.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.config/quickshell/services/FirstRunExperience.qml b/.config/quickshell/services/FirstRunExperience.qml index e28d4b49b..86ccb98b8 100644 --- a/.config/quickshell/services/FirstRunExperience.qml +++ b/.config/quickshell/services/FirstRunExperience.qml @@ -27,7 +27,7 @@ Singleton { } function handleFirstRun() { - Hyprland.dispatch(`exec '${Directories.wallpaperSwitchScriptPath}' '${root.defaultWallpaperPath}'`) + Hyprland.dispatch(`exec swww query | grep 'image' || '${Directories.wallpaperSwitchScriptPath}' '${root.defaultWallpaperPath}'`) Hyprland.dispatch(`exec qs -p '${root.welcomeQmlPath}'`) } From c725284acb1cd7a5f5934b71d8840123bedf306a Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 09:51:06 +0200 Subject: [PATCH 04/11] notifications: discard dead notif on action --- .config/quickshell/services/Notifications.qml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.config/quickshell/services/Notifications.qml b/.config/quickshell/services/Notifications.qml index 75033292c..dc2d2206d 100644 --- a/.config/quickshell/services/Notifications.qml +++ b/.config/quickshell/services/Notifications.qml @@ -217,8 +217,10 @@ Singleton { const action = notifServerNotif.actions.find((action) => action.identifier === notifIdentifier); action.invoke() } - // else console.log("Notification not found in server: " + id) - // root.discard(id); + else { + console.log("Notification not found in server: " + id) + root.discardNotification(id); + } } function triggerListChange() { From 8419697542cb150cdaf41f0bdfbe4101470b757d Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 10:06:23 +0200 Subject: [PATCH 05/11] welcome: more buttons --- .config/quickshell/welcome.qml | 138 ++++++++++++++++++++++++++++----- 1 file changed, 117 insertions(+), 21 deletions(-) diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/welcome.qml index dc8559dfd..9d1dcd494 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/welcome.qml @@ -25,7 +25,6 @@ ApplicationWindow { property string firstRunFileContent: "This file is just here to confirm you've been greeted :>" property real contentPadding: 5 property bool showNextTime: false - visible: true onClosing: Qt.quit() title: "illogical-impulse Welcome" @@ -58,6 +57,57 @@ ApplicationWindow { } } + component ButtonWithIcon: RippleButton { + id: buttonWithIconRoot + property string nerdIcon + property string iconText + property string mainText: "Button text" + property Component mainContentComponent: Component { + StyledText { + text: buttonWithIconRoot.mainText + font.pixelSize: Appearance.font.pixelSize.small + color: Appearance.colors.colOnSecondaryContainer + } + } + implicitHeight: 35 + horizontalPadding: 15 + buttonRadius: Appearance.rounding.full + colBackground: Appearance.colors.colSecondaryContainer + colBackgroundHover: Appearance.colors.colSecondaryContainerHover + colRipple: Appearance.colors.colSecondaryContainerActive + + contentItem: RowLayout { + Item { + implicitWidth: Math.max(materialIconLoader.implicitWidth, nerdIconLoader.implicitWidth) + Loader { + id: materialIconLoader + anchors.centerIn: parent + active: !nerdIcon + sourceComponent: MaterialSymbol { + text: buttonWithIconRoot.iconText + iconSize: Appearance.font.pixelSize.larger + color: Appearance.colors.colOnSecondaryContainer + } + } + Loader { + id: nerdIconLoader + anchors.centerIn: parent + active: nerdIcon + sourceComponent: StyledText { + text: buttonWithIconRoot.nerdIcon + font.pixelSize: Appearance.font.pixelSize.larger + font.family: Appearance.font.family.iconNerd + color: Appearance.colors.colOnSecondaryContainer + } + } + } + Loader { + sourceComponent: buttonWithIconRoot.mainContentComponent + Layout.alignment: Qt.AlignVCenter + } + } + } + component LightDarkPrefButton: GroupButton { id: lightDarkButtonRoot required property bool dark @@ -259,32 +309,78 @@ ApplicationWindow { Section { title: "Info" - RippleButton { - implicitHeight: 35 - horizontalPadding: 10 - // buttonRadius: Appearance.rounding.full - colBackground: Appearance.colors.colSecondaryContainer - colBackgroundHover: Appearance.colors.colSecondaryContainerHover - colRipple: Appearance.colors.colSecondaryContainerActive + Flow { + Layout.fillWidth: true + spacing: 10 - onClicked: { - Hyprland.dispatch("global quickshell:cheatsheetOpen") + ButtonWithIcon { + iconText: "keyboard_alt" + onClicked: { + Hyprland.dispatch("global quickshell:cheatsheetOpen") + } + mainContentComponent: Component { + RowLayout { + spacing: 10 + StyledText { + font.pixelSize: Appearance.font.pixelSize.small + text: "Open keybind cheatsheet" + color: Appearance.colors.colOnSecondaryContainer + } + RowLayout { + spacing: 3 + KeyboardKey { + key: "󰖳" + } + StyledText { + Layout.alignment: Qt.AlignVCenter + text: "+" + } + KeyboardKey { + key: "/" + } + } + } + } } - contentItem: RowLayout { - KeyboardKey { - key: "󰖳" + ButtonWithIcon { + iconText: "help" + mainText: "Usage" + onClicked: { + Qt.openUrlExternally("https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/02usage/") } - StyledText { - Layout.alignment: Qt.AlignVCenter - text: "+" + } + ButtonWithIcon { + iconText: "construction" + mainText: "Configuration" + onClicked: { + Qt.openUrlExternally("https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/03config/") } - KeyboardKey { - key: "/" + } + } + } + + Section { + title: "Useless buttons" + + Flow { + Layout.fillWidth: true + anchors.left: parent.left + anchors.right: parent.right + spacing: 10 + + ButtonWithIcon { + nerdIcon: "󰊤" + mainText: "GitHub" + onClicked: { + Qt.openUrlExternally("https://github.com/end-4/dots-hyprland") } - StyledText { - text: "Open keybind cheatsheet" - color: Appearance.colors.colOnSecondaryContainer + } + ButtonWithIcon { + iconText: "favorite" + mainText: "Funny number" + onClicked: { + Qt.openUrlExternally("https://github.com/sponsors/end-4") } } } From 745857e51526d42c34ac394877384d4cf6fb6715 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 10:49:11 +0200 Subject: [PATCH 06/11] welcome: random wall --- .../scripts/colors/random_konachan_wall.sh | 10 +++++++ .../quickshell/scripts/colors/switchwall.sh | 4 +++ .config/quickshell/welcome.qml | 29 +++++++++++++++++-- 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100755 .config/quickshell/scripts/colors/random_konachan_wall.sh diff --git a/.config/quickshell/scripts/colors/random_konachan_wall.sh b/.config/quickshell/scripts/colors/random_konachan_wall.sh new file mode 100755 index 000000000..52853d090 --- /dev/null +++ b/.config/quickshell/scripts/colors/random_konachan_wall.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +mkdir -p ~/Pictures/Wallpapers +page=$((1 + RANDOM % 1000)); +response=$(curl "https://konachan.com/post.json?tags=rating%3Asafe&limit=1&page=$page") +link=$(echo "$response" | jq '.[0].file_url' -r); +ext=$(echo "$link" | awk -F. '{print $NF}') +downloadPath="$HOME/Pictures/Wallpapers/konachan_random_image.$ext" +curl "$link" -o "$downloadPath" +~/.config/quickshell/scripts/colors/switchwall.sh --image "$downloadPath" diff --git a/.config/quickshell/scripts/colors/switchwall.sh b/.config/quickshell/scripts/colors/switchwall.sh index 4136772f2..0a633e242 100755 --- a/.config/quickshell/scripts/colors/switchwall.sh +++ b/.config/quickshell/scripts/colors/switchwall.sh @@ -291,6 +291,10 @@ main() { shift fi ;; + --image) + imgpath="$2" + shift 2 + ;; --noswitch) noswitch_flag="1" imgpath=$(swww query | awk -F 'image: ' '{print $2}') diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/welcome.qml index 9d1dcd494..27a68f608 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/welcome.qml @@ -11,6 +11,7 @@ import QtQuick.Controls import QtQuick.Layouts import QtQuick.Window import Quickshell +import Quickshell.Io import Quickshell.Hyprland import "root:/services/" import "root:/modules/common/" @@ -40,6 +41,18 @@ ApplicationWindow { height: 600 color: Appearance.m3colors.m3background + Process { + id: konachanWallProc + property string status: "" + command: ["bash", "-c", FileUtils.trimFileProtocol(`${Directories.config}/quickshell/scripts/colors/random_konachan_wall.sh`)] + stdout: SplitParser { + onRead: data => { + console.log(`Konachan wall proc output: ${data}`); + konachanWallProc.status = data.trim(); + } + } + } + component Section: ColumnLayout { id: sectionRoot property string title @@ -235,7 +248,7 @@ ApplicationWindow { id: welcomeText anchors.centerIn: parent color: Appearance.colors.colOnLayer0 - text: "Welcome" + text: "Yooooo hi there" font.pixelSize: Appearance.font.pixelSize.hugeass font.family: Appearance.font.family.title } @@ -304,6 +317,18 @@ ApplicationWindow { dark: true } } + + ButtonWithIcon { + id: rndWallBtn + Layout.alignment: Qt.AlignHCenter + buttonRadius: Appearance.rounding.small + iconText: "ifl" + mainText: konachanWallProc.running ? "Be patient..." : "Random SFW Konachan wallpaper" + onClicked: { + console.log(konachanWallProc.command.join(" ")) + konachanWallProc.running = true; + } + } } Section { @@ -323,7 +348,7 @@ ApplicationWindow { spacing: 10 StyledText { font.pixelSize: Appearance.font.pixelSize.small - text: "Open keybind cheatsheet" + text: "Keybinds" color: Appearance.colors.colOnSecondaryContainer } RowLayout { From 6d822142ad625d0c4d6ca92f7cc64ff3594099df Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 11:06:26 +0200 Subject: [PATCH 07/11] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index d65c5ce9d..e381b1251 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,13 @@ - For a more comprehensive list of dependencies, see [scriptdata/dependencies.conf](https://github.com/end-4/dots-hyprland/blob/main/scriptdata/dependencies.conf) +
+ Logo ideas welcome + + - See [#1436](https://github.com/end-4/dots-hyprland/issues/1436) + +
+

• screenshots •

From 5d7905b566a2ac9d83c21448a864e7731fd22752 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 11:38:49 +0200 Subject: [PATCH 08/11] welcome: choose wallpaper file button --- .config/quickshell/welcome.qml | 60 +++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/welcome.qml index 27a68f608..55cfdef99 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/welcome.qml @@ -306,7 +306,7 @@ ApplicationWindow { spacing: 20 Section { - title: "Customize" + title: "Style & wallpaper" ButtonGroup { Layout.fillWidth: true @@ -318,16 +318,58 @@ ApplicationWindow { } } - ButtonWithIcon { - id: rndWallBtn + RowLayout { Layout.alignment: Qt.AlignHCenter - buttonRadius: Appearance.rounding.small - iconText: "ifl" - mainText: konachanWallProc.running ? "Be patient..." : "Random SFW Konachan wallpaper" - onClicked: { - console.log(konachanWallProc.command.join(" ")) - konachanWallProc.running = true; + ButtonWithIcon { + id: rndWallBtn + Layout.alignment: Qt.AlignHCenter + buttonRadius: Appearance.rounding.small + iconText: "wallpaper" + mainText: konachanWallProc.running ? "Be patient..." : "Random: Konachan" + onClicked: { + console.log(konachanWallProc.command.join(" ")) + konachanWallProc.running = true; + } } + ButtonWithIcon { + iconText: "wallpaper" + onClicked: { + Hyprland.dispatch(`exec ${Directories.wallpaperSwitchScriptPath}`) + } + mainContentComponent: Component { + RowLayout { + spacing: 10 + StyledText { + font.pixelSize: Appearance.font.pixelSize.small + text: "Choose file" + color: Appearance.colors.colOnSecondaryContainer + } + RowLayout { + spacing: 3 + KeyboardKey { + key: "Ctrl" + } + KeyboardKey { + key: "󰖳" + } + StyledText { + Layout.alignment: Qt.AlignVCenter + text: "+" + } + KeyboardKey { + key: "T" + } + } + } + } + } + } + + StyledText { + Layout.alignment: Qt.AlignHCenter + text: "Change any time later with /dark, /light, /img in the launcher" + font.pixelSize: Appearance.font.pixelSize.smaller + color: Appearance.colors.colSubtext } } From 72f2aa5c2f7387cae826694555230b267e4ec98d Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:21:22 +0200 Subject: [PATCH 09/11] welcome: weeb & ai policy --- .../quickshell/modules/common/Appearance.qml | 2 +- .../modules/common/widgets/GroupButton.qml | 38 +- .config/quickshell/welcome.qml | 369 +++++++++++------- 3 files changed, 260 insertions(+), 149 deletions(-) diff --git a/.config/quickshell/modules/common/Appearance.qml b/.config/quickshell/modules/common/Appearance.qml index 694c3af8e..b496f4d17 100644 --- a/.config/quickshell/modules/common/Appearance.qml +++ b/.config/quickshell/modules/common/Appearance.qml @@ -107,7 +107,7 @@ Singleton { property color colLayer1: ColorUtils.transparentize(ColorUtils.mix(m3colors.m3surfaceContainerLow, m3colors.m3background, 0.8), root.contentTransparency); property color colOnLayer1: m3colors.m3onSurfaceVariant; property color colOnLayer1Inactive: ColorUtils.mix(colOnLayer1, colLayer1, 0.45); - property color colLayer2: ColorUtils.transparentize(ColorUtils.mix(m3colors.m3surfaceContainer, m3colors.m3surfaceContainerHigh, 0.7), root.contentTransparency) + property color colLayer2: ColorUtils.transparentize(ColorUtils.mix(m3colors.m3surfaceContainer, m3colors.m3surfaceContainerHigh, 0.1), root.contentTransparency) property color colOnLayer2: m3colors.m3onSurface; property color colOnLayer2Disabled: ColorUtils.mix(colOnLayer2, m3colors.m3background, 0.4); property color colLayer3: ColorUtils.transparentize(ColorUtils.mix(m3colors.m3surfaceContainerHigh, m3colors.m3onSurface, 0.96), root.contentTransparency) diff --git a/.config/quickshell/modules/common/widgets/GroupButton.qml b/.config/quickshell/modules/common/widgets/GroupButton.qml index bfa887b68..362ae39e9 100644 --- a/.config/quickshell/modules/common/widgets/GroupButton.qml +++ b/.config/quickshell/modules/common/widgets/GroupButton.qml @@ -16,8 +16,8 @@ Button { id: root property bool toggled property string buttonText - property real buttonRadius: Appearance?.rounding?.small ?? 4 - property real buttonRadiusPressed: buttonRadius + property real buttonRadius: Appearance?.rounding?.small ?? 8 + property real buttonRadiusPressed: Appearance?.rounding?.small ?? 6 property var downAction // When left clicking (down) property var releaseAction // When left clicking (release) property var altAction // When right clicking @@ -34,18 +34,6 @@ Button { Layout.fillHeight: (clickIndex - 1 <= parentGroup.children.indexOf(root) && parentGroup.children.indexOf(root) <= clickIndex + 1) implicitWidth: (root.down && bounce) ? clickedWidth : baseWidth implicitHeight: (root.down && bounce) ? clickedHeight : baseHeight - - Behavior on implicitWidth { - animation: Appearance.animation.clickBounce.numberAnimation.createObject(this) - } - - Behavior on implicitHeight { - animation: Appearance.animation.clickBounce.numberAnimation.createObject(this) - } - - Behavior on radius { - animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) - } property color colBackground: ColorUtils.transparentize(Appearance?.colors.colLayer1Hover, 1) || "transparent" property color colBackgroundHover: Appearance?.colors.colLayer1Hover ?? "#E5DFED" @@ -55,6 +43,8 @@ Button { property color colBackgroundToggledActive: Appearance?.colors.colPrimaryActive ?? "#D6CEE2" property real radius: root.down ? root.buttonRadiusPressed : root.buttonRadius + property real leftRadius: root.down ? root.buttonRadiusPressed : root.buttonRadius + property real rightRadius: root.down ? root.buttonRadiusPressed : root.buttonRadius property color color: root.enabled ? (root.toggled ? (root.down ? colBackgroundToggledActive : root.hovered ? colBackgroundToggledHover : @@ -71,6 +61,21 @@ Button { } } + Behavior on implicitWidth { + animation: Appearance.animation.clickBounce.numberAnimation.createObject(this) + } + + Behavior on implicitHeight { + animation: Appearance.animation.clickBounce.numberAnimation.createObject(this) + } + + Behavior on leftRadius { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) + } + Behavior on rightRadius { + animation: Appearance.animation.elementMoveFast.numberAnimation.createObject(this) + } + MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor @@ -100,7 +105,10 @@ Button { background: Rectangle { id: buttonBackground - radius: root.radius + topLeftRadius: root.leftRadius + topRightRadius: root.rightRadius + bottomLeftRadius: root.leftRadius + bottomRightRadius: root.rightRadius implicitHeight: 50 color: root.color diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/welcome.qml index 55cfdef99..2935414b7 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/welcome.qml @@ -38,7 +38,7 @@ ApplicationWindow { minimumWidth: 600 minimumHeight: 400 width: 800 - height: 600 + height: 650 color: Appearance.m3colors.m3background Process { @@ -53,13 +53,29 @@ ApplicationWindow { } } + component SelectionConnectedButton: GroupButton { + id: selectionConnectedButtonRoot + horizontalPadding: 12 + verticalPadding: 8 + bounce: false + property bool leftmost: false + property bool rightmost: false + leftRadius: (toggled || leftmost) ? (height / 2) : Appearance.rounding.unsharpenmore + rightRadius: (toggled || rightmost) ? (height / 2) : Appearance.rounding.unsharpenmore + colBackground: Appearance.colors.colSecondaryContainer + contentItem: StyledText { + color: parent.toggled ? Appearance.colors.colOnPrimary : Appearance.colors.colOnSecondaryContainer + text: selectionConnectedButtonRoot.buttonText + } + } + component Section: ColumnLayout { id: sectionRoot property string title default property alias data: sectionContent.data Layout.fillWidth: true - spacing: 10 + spacing: 8 StyledText { text: sectionRoot.title font.pixelSize: Appearance.font.pixelSize.larger @@ -84,10 +100,10 @@ ApplicationWindow { } implicitHeight: 35 horizontalPadding: 15 - buttonRadius: Appearance.rounding.full - colBackground: Appearance.colors.colSecondaryContainer - colBackgroundHover: Appearance.colors.colSecondaryContainerHover - colRipple: Appearance.colors.colSecondaryContainerActive + buttonRadius: Appearance.rounding.small + colBackground: Appearance.colors.colLayer2 + // colBackgroundHover: Appearance.colors.colSecondaryContainerHover + // colRipple: Appearance.colors.colSecondaryContainerActive contentItem: RowLayout { Item { @@ -295,69 +311,165 @@ ApplicationWindow { Layout.fillWidth: true Layout.fillHeight: true radius: Appearance.rounding.windowRounding - root.contentPadding - ColumnLayout { - id: contentColumn - anchors { - top: parent.top - bottom: parent.bottom - horizontalCenter: parent.horizontalCenter - margins: 10 - } - spacing: 20 - - Section { - title: "Style & wallpaper" - - ButtonGroup { - Layout.fillWidth: true - LightDarkPrefButton { - dark: false - } - LightDarkPrefButton { - dark: true - } + Flickable { + clip: true + anchors.fill: parent + contentHeight: contentColumn.implicitHeight + implicitWidth: contentColumn.implicitWidth + ColumnLayout { + id: contentColumn + anchors { + top: parent.top + bottom: parent.bottom + horizontalCenter: parent.horizontalCenter + margins: 10 } + spacing: 20 - RowLayout { - Layout.alignment: Qt.AlignHCenter - ButtonWithIcon { - id: rndWallBtn + Section { + title: "Style & wallpaper" + + ButtonGroup { + Layout.fillWidth: true + LightDarkPrefButton { + dark: false + } + LightDarkPrefButton { + dark: true + } + } + + RowLayout { Layout.alignment: Qt.AlignHCenter - buttonRadius: Appearance.rounding.small - iconText: "wallpaper" - mainText: konachanWallProc.running ? "Be patient..." : "Random: Konachan" - onClicked: { - console.log(konachanWallProc.command.join(" ")) - konachanWallProc.running = true; + ButtonWithIcon { + id: rndWallBtn + Layout.alignment: Qt.AlignHCenter + buttonRadius: Appearance.rounding.small + iconText: "wallpaper" + mainText: konachanWallProc.running ? "Be patient..." : "Random: Konachan" + onClicked: { + console.log(konachanWallProc.command.join(" ")) + konachanWallProc.running = true; + } + } + ButtonWithIcon { + iconText: "wallpaper" + onClicked: { + Hyprland.dispatch(`exec ${Directories.wallpaperSwitchScriptPath}`) + } + mainContentComponent: Component { + RowLayout { + spacing: 10 + StyledText { + font.pixelSize: Appearance.font.pixelSize.small + text: "Choose file" + color: Appearance.colors.colOnSecondaryContainer + } + RowLayout { + spacing: 3 + KeyboardKey { + key: "Ctrl" + } + KeyboardKey { + key: "󰖳" + } + StyledText { + Layout.alignment: Qt.AlignVCenter + text: "+" + } + KeyboardKey { + key: "T" + } + } + } + } } } - ButtonWithIcon { - iconText: "wallpaper" - onClicked: { - Hyprland.dispatch(`exec ${Directories.wallpaperSwitchScriptPath}`) - } - mainContentComponent: Component { - RowLayout { - spacing: 10 - StyledText { - font.pixelSize: Appearance.font.pixelSize.small - text: "Choose file" - color: Appearance.colors.colOnSecondaryContainer + + StyledText { + Layout.alignment: Qt.AlignHCenter + text: "Change any time later with /dark, /light, /img in the launcher" + font.pixelSize: Appearance.font.pixelSize.smaller + color: Appearance.colors.colSubtext + } + } + + Section { + title: "Policies" + + RowLayout { + Layout.alignment: Qt.AlignHCenter + spacing: 15 + ColumnLayout { // Weeb policy + StyledText { + text: "Weeb" + color: Appearance.colors.colSubtext + } + ButtonGroup { + id: weebPolicyBtnGroup + property int selectedPolicy: ConfigOptions.policies.weeb + spacing: 2 + SelectionConnectedButton { + property int value: 0 + leftmost: true + buttonText: "No" + toggled: (weebPolicyBtnGroup.selectedPolicy === value) + onClicked: { + ConfigLoader.setConfigValueAndSave("policies.weeb", value); + } } - RowLayout { - spacing: 3 - KeyboardKey { - key: "Ctrl" + SelectionConnectedButton { + property int value: 1 + buttonText: "Yes" + toggled: (weebPolicyBtnGroup.selectedPolicy === value) + onClicked: { + ConfigLoader.setConfigValueAndSave("policies.weeb", value); } - KeyboardKey { - key: "󰖳" + } + SelectionConnectedButton { + property int value: 2 + rightmost: true + buttonText: "Closet" + toggled: (weebPolicyBtnGroup.selectedPolicy === value) + onClicked: { + ConfigLoader.setConfigValueAndSave("policies.weeb", value); } - StyledText { - Layout.alignment: Qt.AlignVCenter - text: "+" + } + } + } + ColumnLayout { // AI policy + StyledText { + text: "AI" + color: Appearance.colors.colSubtext + } + ButtonGroup { + id: aiPolicyBtnGroup + property int selectedPolicy: ConfigOptions.policies.ai + spacing: 2 + SelectionConnectedButton { + property int value: 0 + leftmost: true + buttonText: "No" + toggled: (aiPolicyBtnGroup.selectedPolicy === value) + onClicked: { + ConfigLoader.setConfigValueAndSave("policies.ai", value); } - KeyboardKey { - key: "T" + } + SelectionConnectedButton { + property int value: 1 + buttonText: "Yes" + toggled: (aiPolicyBtnGroup.selectedPolicy === value) + onClicked: { + ConfigLoader.setConfigValueAndSave("policies.ai", value); + } + } + SelectionConnectedButton { + property int value: 2 + rightmost: true + buttonText: "Local only" + toggled: (aiPolicyBtnGroup.selectedPolicy === value) + onClicked: { + ConfigLoader.setConfigValueAndSave("policies.ai", value); } } } @@ -365,99 +477,90 @@ ApplicationWindow { } } - StyledText { - Layout.alignment: Qt.AlignHCenter - text: "Change any time later with /dark, /light, /img in the launcher" - font.pixelSize: Appearance.font.pixelSize.smaller - color: Appearance.colors.colSubtext - } - } + Section { + title: "Info" - Section { - title: "Info" + Flow { + Layout.fillWidth: true + spacing: 10 - Flow { - Layout.fillWidth: true - spacing: 10 - - ButtonWithIcon { - iconText: "keyboard_alt" - onClicked: { - Hyprland.dispatch("global quickshell:cheatsheetOpen") - } - mainContentComponent: Component { - RowLayout { - spacing: 10 - StyledText { - font.pixelSize: Appearance.font.pixelSize.small - text: "Keybinds" - color: Appearance.colors.colOnSecondaryContainer - } + ButtonWithIcon { + iconText: "keyboard_alt" + onClicked: { + Hyprland.dispatch("global quickshell:cheatsheetOpen") + } + mainContentComponent: Component { RowLayout { - spacing: 3 - KeyboardKey { - key: "󰖳" - } + spacing: 10 StyledText { - Layout.alignment: Qt.AlignVCenter - text: "+" + font.pixelSize: Appearance.font.pixelSize.small + text: "Keybinds" + color: Appearance.colors.colOnSecondaryContainer } - KeyboardKey { - key: "/" + RowLayout { + spacing: 3 + KeyboardKey { + key: "󰖳" + } + StyledText { + Layout.alignment: Qt.AlignVCenter + text: "+" + } + KeyboardKey { + key: "/" + } } } } } - } - ButtonWithIcon { - iconText: "help" - mainText: "Usage" - onClicked: { - Qt.openUrlExternally("https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/02usage/") + ButtonWithIcon { + iconText: "help" + mainText: "Usage" + onClicked: { + Qt.openUrlExternally("https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/02usage/") + } } - } - ButtonWithIcon { - iconText: "construction" - mainText: "Configuration" - onClicked: { - Qt.openUrlExternally("https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/03config/") + ButtonWithIcon { + iconText: "construction" + mainText: "Configuration" + onClicked: { + Qt.openUrlExternally("https://end-4.github.io/dots-hyprland-wiki/en/ii-qs/03config/") + } } } } - } - Section { - title: "Useless buttons" + Section { + title: "Useless buttons" - Flow { + Flow { + Layout.fillWidth: true + spacing: 10 + + ButtonWithIcon { + nerdIcon: "󰊤" + mainText: "GitHub" + onClicked: { + Qt.openUrlExternally("https://github.com/end-4/dots-hyprland") + } + } + ButtonWithIcon { + iconText: "favorite" + mainText: "Funny number" + onClicked: { + Qt.openUrlExternally("https://github.com/sponsors/end-4") + } + } + } + } + + Item { Layout.fillWidth: true - anchors.left: parent.left - anchors.right: parent.right - spacing: 10 - - ButtonWithIcon { - nerdIcon: "󰊤" - mainText: "GitHub" - onClicked: { - Qt.openUrlExternally("https://github.com/end-4/dots-hyprland") - } - } - ButtonWithIcon { - iconText: "favorite" - mainText: "Funny number" - onClicked: { - Qt.openUrlExternally("https://github.com/sponsors/end-4") - } - } + Layout.fillHeight: true } - } - Item { - Layout.fillWidth: true - Layout.fillHeight: true } - } } } From 3acbe92363225948c60d77472c182478fe7a65f7 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:24:06 +0200 Subject: [PATCH 10/11] welcome: fill buttons --- .config/quickshell/welcome.qml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/welcome.qml index 2935414b7..f8abe1320 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/welcome.qml @@ -102,8 +102,6 @@ ApplicationWindow { horizontalPadding: 15 buttonRadius: Appearance.rounding.small colBackground: Appearance.colors.colLayer2 - // colBackgroundHover: Appearance.colors.colSecondaryContainerHover - // colRipple: Appearance.colors.colSecondaryContainerActive contentItem: RowLayout { Item { @@ -116,6 +114,7 @@ ApplicationWindow { text: buttonWithIconRoot.iconText iconSize: Appearance.font.pixelSize.larger color: Appearance.colors.colOnSecondaryContainer + fill: 1 } } Loader { From dd2e2a9bca673cbd801c71e21d1cf09884e9e6a7 Mon Sep 17 00:00:00 2001 From: end-4 <97237370+end-4@users.noreply.github.com> Date: Tue, 17 Jun 2025 12:27:39 +0200 Subject: [PATCH 11/11] config option for csd of quickshell windows --- .config/quickshell/modules/common/ConfigOptions.qml | 4 ++++ .config/quickshell/welcome.qml | 2 ++ 2 files changed, 6 insertions(+) diff --git a/.config/quickshell/modules/common/ConfigOptions.qml b/.config/quickshell/modules/common/ConfigOptions.qml index 70e46f4ec..c004748e2 100644 --- a/.config/quickshell/modules/common/ConfigOptions.qml +++ b/.config/quickshell/modules/common/ConfigOptions.qml @@ -154,6 +154,10 @@ Singleton { property string dateFormat: "dddd, dd/MM" } + property QtObject windows: QtObject { + property bool showTitlebar: true // Client-side decoration for shell apps + } + property QtObject hacks: QtObject { property int arbitraryRaceConditionDelay: 20 // milliseconds } diff --git a/.config/quickshell/welcome.qml b/.config/quickshell/welcome.qml index f8abe1320..cbc5b4a32 100644 --- a/.config/quickshell/welcome.qml +++ b/.config/quickshell/welcome.qml @@ -256,7 +256,9 @@ ApplicationWindow { fill: parent margins: contentPadding } + Item { + visible: ConfigOptions?.windows.showTitlebar Layout.fillWidth: true implicitHeight: Math.max(welcomeText.implicitHeight, windowControlsRow.implicitHeight) StyledText {